ちょこっとhttps://chiquitos-chiquitos.comchokottoSat, 22 Nov 2025 06:55:57 +0000jahourly1https://chiquitos-chiquitos.com/wp-content/uploads/2025/11/cropped-chokotto_ver01-e1762678183657-32x32.pngちょこっとhttps://chiquitos-chiquitos.com3232 Weekly Reporthttps://chiquitos-chiquitos.com/weekly-report-6/https://chiquitos-chiquitos.com/weekly-report-6/#respondSat, 22 Nov 2025 06:55:52 +0000https://chiquitos-chiquitos.com/?p=4477

ノート

  • 大方針:「資産所得で何を求めるのか?」を決める(どの程度のリターン(=リスク)を取るのか)?)。
  • 方針-①:トレード手法よりも「資金管理のディシプリン」こそがトレードの土台(メンタルコントロール)。
  • 方針-②:トレード手法を色々試してみて、良い方法を徹底する(銘柄とタイミングのリスクコントロール)。

AI分析まとめ(2025-11-22時点)

  • 11月MTD Net P/L: 約2,780,676円(税後ROI 前月平均上回り、全勝継続)
  • 勝率: 11月 100% / 年初来 78% 強
  • 年初来 Net P/L: 15,892,296円(Gain-Loss 整合性維持済み)
  • 構造改善: Net = Gain − Loss 再計算ロジック導入で月次→YTD積み上げ整合性担保
  • リスク: 平均損失幅が年初来で平均利益を依然僅かに上回る構造は継続、損失発生局面の制御が課題
  • 評価: 11月は効率的で再現性検証フェーズ、リスク指標(RRR/Expectancy)の安定化が次ステップ

(メモ)定義:E = WR×G − (1−WR)×L

KPI行列データ(月次)

]]>
https://chiquitos-chiquitos.com/weekly-report-6/feed/0
Weekly Reporthttps://chiquitos-chiquitos.com/weekly-report-5/https://chiquitos-chiquitos.com/weekly-report-5/#respondSun, 16 Nov 2025 06:10:55 +0000https://chiquitos-chiquitos.com/?p=4470

ノート

  • 戦略(大方針):「資産所得で何を求めるのか?」を決める(一番の稼ぎ頭にしたいのか?補助なのか?)。
  • 戦術-①:トレード手法よりも「資金管理とディシプリン」こそがトレードの土台となる(メンタルコントロール)。
  • 戦術-②:トレード手法を色々試してみて、良い方法を徹底する(銘柄とタイミングのリスクコントロール)。

AI分析(= 参考情報)


ダイジェスト(2025-11-16時点)

  • 収益貢献: 11月MTD Net P/L 2,591,876円 (YTD 15,703,496円の約16%)。月半ば時点として高い進捗。
  • 税引後効率: 11月 ROI After Tax 1.10% は全期間平均 0.63% を大きく上回り、今年最高レンジ。税負担率は概ね通期の実効税率 (~20%) と整合。
  • 勝率/リスク: 11月 勝率 100% / 敗率 0%で損失ゼロ → Expectancy/RRR が算出不能。短期的には理想形だが、損失発生時の変動余地を内包。
  • トレード質: 平均利幅(Mean Gain/Trade 31,227円)は YTD 平均 30,098円を僅かに上回り、利幅維持。平均ポジションサイズは 2,265,134円 と YTD平均 3,169,512円より抑制され、効率的な資本回転で ROI 向上。
  • 損失側: 11月損失ゼロにより平均損失指標は空欄。今後初回損失が出た際に RRR/Expectancy が急低下しやすい点に注意。
  • 通期構造: YTDは高勝率 (78.04%) だが RRR 0.78 と損失の一回あたりインパクト(平均損失 38,682円)が平均利益 30,098円を上回る構造は未改善。11月はこの弱点が一時的に覆い隠されている状態。
  • 総括: 11月は「小さめの資本 × 全勝 × 高めの税引後ROI」で質・効率とも良好な滑り出し。課題は構造的な損失幅の相対的高さ(YTD平均損失 > 平均利益)で、11月の無傷状態を活かし今後の損失発生時に規律(早期薄利撤退回避 + 損失幅の天井管理)を再確認するタイミング。

(メモ)定義:E = WR×G − (1−WR)×L

KPI行列データ(月次)

]]>
https://chiquitos-chiquitos.com/weekly-report-5/feed/0
Weekly Reporthttps://chiquitos-chiquitos.com/weekly-report-4/https://chiquitos-chiquitos.com/weekly-report-4/#respondSun, 09 Nov 2025 09:31:57 +0000https://chiquitos-chiquitos.com/?p=4466

ノート

  • トレード手法よりも「資金管理とディシプリン」こそがトレードの土台となる(メンタルコントロール)。
  • その上でトレード手法を色々試してみて、良い方法で徹底する(銘柄とタイミングのリスクコントロール)。

AI分析(= 参考情報)


今週のKPIダイジェスト(2025-11-09時点)

最新月(11月 9日まで)の要約(簡潔):

  • 11月成績: Net P/L 787,589円 / 税引後 627,590円 / ROI After Tax 1.05%(年初来平均 0.60% を上回る)
  • トレード質: 勝率 100%(6勝0敗)で損失なし → Mean Loss Rate がないため Expectancy は表示不可(リスク側未検証)
  • ペース感: 9日で約78万の利益は、月間ベースでは中位〜好調月(5月/6月)相当へ到達可能な滑り出し。直近の最大月(10月 約505万)とはまだ差あり
  • 年初来比較: YTD 勝率 74.95% に対し 11月は完勝、小規模サンプルによるブレ注意
  • 留意点: 損失ゼロは優秀だが、リスク管理指標(平均損失・RRR)が未発生で評価不能。過度なリスク増加に注意

一言評価: 小規模ながらクリーンスタートで効率的利益、年平均を上回る税引後ROI。引き続き損失発生時の耐性と再現性を慎重に検証しつつペース維持が鍵。

(メモ)定義:E = WR×G − (1−WR)×L

KPI行列データ(月次)

]]>
https://chiquitos-chiquitos.com/weekly-report-4/feed/0
Weekly Reporthttps://chiquitos-chiquitos.com/weekly-report-3/https://chiquitos-chiquitos.com/weekly-report-3/#respondMon, 03 Nov 2025 12:33:28 +0000https://chiquitos-chiquitos.com/?p=4426

ノート

  • トレード手法よりも「資金管理とディシプリン」こそがトレードの土台となる(メンタルコントロール)。
  • その上でトレード手法を色々試してみて、良い方法で徹底する(銘柄とタイミングのリスクコントロール)。

AI分析(= 参考情報)


今週のKPIダイジェスト(2025-11-03 時点)

YTDハイライト

  • 税引後利益(PAT):10,440,349円
  • ネット損益:13,102,025円/総トレード 541回
  • 勝率(WR):74.68%/平均利益率(G):0.90%/平均損失率(L):1.17%
  • RRR(損益比):0.77/ROI(税前):0.73% → ROI(税後):0.58%
  • 税額合計:2,661,676円(加重平均レート 148.1円/USD

月次の山と谷(2025)

  • 最高月:Aug-2025(ROI 1.08%、RRR 2.44
    • PAT 2,592,145円、トレード 76回、平均利益/回 90,311円、平均損失/回 37,037円、平均建玉 3,948,298円
  • 最低月:Mar-2025(ROI -5.48%、RRR 0.08、勝率 50.00%、L 10.59%、平均損失/回 149,499円
  • 参考(守りの好例):Jun-2025 — 勝率 89.86%、L 0.19%、RRR 2.34、平均損失/回 5,466円

所見(短評)

  • Eを押し下げる最大要因は「Lの肥大化」(3月型)。6月のように損切りを極小化できた週は全体を底上げ。
  • RRR>1かつ勝率70%台の組み合わせが効率的(7–8月、10月パターン)。

来週のアクション

  1. 損失率の上限を0.6%前後に固定(連敗2–3で建玉▲30%)。
  2. 仕掛け基準にRRR≥1.2–1.5を厳守(利確/損切の幅比で事前判定)。
  3. 段階式サイズ調整:Eが3セッション連続プラスかつL中央値<0.4%で翌セッション+10%、条件割れで**-10%**。

(メモ)定義:E = WR×G − (1−WR)×L

KPI行列データ(月次)

]]>
https://chiquitos-chiquitos.com/weekly-report-3/feed/0
Weekly Reporthttps://chiquitos-chiquitos.com/weekly-report-2/https://chiquitos-chiquitos.com/weekly-report-2/#respondSun, 26 Oct 2025 09:21:42 +0000https://chiquitos-chiquitos.com/?p=4407

一言

AI分析はすごい使える。ROIは控えめ、勝率を求めすぎて、損切りが出来ない状態を確かに言い当てているように思う。ただし、結果的に10月のトレードが改善されているのは実は別の要因があるので、AIは参考までという感じ。一方で勝率を求めすぎないというのは示唆に富む。その意味はもちろん勝率を求めることは大事なんだけど実際のトレードでは、実際に投資をしてみないと分からないケースは多々あると思われる。その意味で、実際にトレードしてみて、ある程度想定と違う挙動になったら早めに損切りをする方が良いという事だと解釈できる。しかし、この点も実際のトレードをやってみると分かるけど、極端な反応で、必要以上に損失が出ている場合がある。この場合には、待った方が損失が小さくなるケースは多々見てきた。同時に損切りが遅くなり大きな損失を受けるというのはテキスト的な結果で、これも確かに正しいのだと思う。つまり、結局どのdiciplineをもって取引をするかであり、勝利の方法は沢山あるということだと思う。このdiciplineについて検討する上で、恐らく、キャッシュリザーブをどの程度保有しながら、どの程度のリスクをとるか、というのが一番大事な気がしている。このキャッシュリザーブは実際の運用を検討すると、生活費などの実際の必要費用の総額と、現在の口座残高、その上での証券会社上においておく口座残高、内、信用取引側に置いておく残高、為替が有利になったタイミングで円転する仕組み、という観点で自分の場合は整理している。なお、テキスト的には本来信用倍率などのような指標があることが望ましいのだろうけど、実際に自分の場合には結果的に参考指標としてみているものの、実際にはあまり気にしていない。これは危険に見えるものの、実際には、自分の仮説が正しいと思って投資するのであって、そうである以上、本質的にとれるリスクはとるという選択をしているということ。あくまで自分の場合には資産とキャッシュ残高が一定水準を超過した場合にはとれる選択肢として、一定水準のキャッシュの閾値に到達した場合には、生活費の口座に必要資金を入れていく(この時当該資金を置くロジックには年間の旅費などある月の最大キャッシュアウトを前提におく)という仕組みにしている。このように運用すると、高い勝率と良いリスクりウォードが継続する場合には、次第に証券会社側の口座(信用の代用証券にしていいない方で、現金として保有している金額相当の残高)に資金が蓄積してくる。この蓄積した資金を即座には、成活費用の口座に資金移転するのではなく、徐々に徐々に移転を画策する。これはトレードでとれるリスクを後押しするため。基本的にキャッシュがなければ無いほど、心理的に逆に損切りが出来なくなる。従って、ある程度のキャッシュがあって初めて安定的にトレードで期待値としてプラスを目指せるものとみているため。その上で、敢えて今後検討しないことは、今後いくらの費用が必要になるか、と言う点については、敢えて検討しない。一方でここで記載していることは、どのように選択とタイミングを図るかという事ではなく、資金管理の方法を記載している。つまり銘柄の売買ではない。ただし個人的な見解では、目先のトレード方法に言及する人は多いのに、如何に資金管理をしながら心理的に物理的に安定した資産所得を作り出すか、と言う点については、そんなに言及する人がいないなという印象を持ったこと。物理的なトレードの品質を上げる場合には、数多くの情報であふれている。しかし、恐らく実際には資金管理の方法を考える事が、リスクリターンを安定的に検討し、常にリターンを上げる積極的な資産所得の形成に繋がると考えている。受動的な資産形成はあくまで積立による資産運用。能動的な資産所得の形成はこれまでこの資産運用という広義の言葉で見えなくされていたように思う。実際には無理にリスクをとらない、ここちよい水準のリスクをとりリターンを獲得する能動的な資産所得の形成は可能であると考えている。このここちよい水準はあくまで個人の状況に応じて変化する。上述した内容はあくまで、能動的な資産所得の獲得を目指す上で、ここちよい水準のリスクリターンを取る手法を検討しているもの。

AI分析の結果

📊 2025年 YTD トレード実績分析

═══════════════════════════════════════════════════════
🎯 総合パフォーマンス(2025年1月~10月)
═══════════════════════════════════════════════════════

【1. 収益性指標】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Total Net P/L: 11,405,644 JPY
Total Gain: 13,749,670 JPY
Total Loss: 2,344,026 JPY
ROI(税引前): 0.71%
ROI After Tax(税引後): 0.56%
Expectancy: 0.34%

✅ 評価:
プラス収益を確保しているが、ROIは1%未満と控えめ。
約20%の税負担を考慮すると、実質リターンはさらに限定的。

【2. 勝率とリスク管理】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Win Rate: 72.98%
Loss Rate: 27.02%
Total Trades: 507回
└ Win: 370回
└ Loss: 137回

Mean Gain per Trade: 29,358 JPY
Mean Loss per Trade: 38,606 JPY ⚠
Risk/Reward Ratio: 0.76 ⚠

❌ 問題点:

  • Mean Loss per Trade(38,606円)> Mean Gain per Trade(29,358円)
    → 1回の負けトレードの損失額が、1回の勝ちトレードの利益額より大きい
  • Risk/Reward Ratio = 0.76 < 1.0
    → リスク管理が不十分であることを示す
  • 高い勝率(73%)にも関わらず、期待値が低い(0.34%)のはこのため

📌 改善ポイント:
┌─────────────────────────────────────────┐
│ 理想的なトレード戦略 │
│ • Win Rate: 50-60% │
│ • Risk/Reward Ratio: 2.0以上 │
│ • Expectancy: 1.0%以上 │
│ │
│ 現状 │
│ • Win Rate: 73% ← 良い │
│ • Risk/Reward Ratio: 0.76 ← 改善必要 │
│ • Expectancy: 0.34% ← 改善必要 │
└─────────────────────────────────────────┘

═══════════════════════════════════════════════════════
📅 月次パフォーマンス分析
═══════════════════════════════════════════════════════

【勝ち月(利益を出した月)】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
月 Net P/L Win Rate RRR 評価
──────────────────────────────────────────────
9月 +1,947,951円 89.52% 0.89 🌟 最高収益月・高勝率
8月 +1,737,829円 60.53% 2.44 ⭐ 良いRRR
6月 +1,205,859円 89.86% 2.33 ⭐ 高勝率・良いRRR
5月 + 971,994円 73.33% 0.49 ⚠ RRR低い
7月 + 671,452円 60.00% 3.45 ⭐⭐ 最高RRR
1月 + 89,593円 60.00% – 小規模利益

【負け月(損失を出した月)】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
月 Net P/L Loss Rate 分析
──────────────────────────────────────────────
3月 -2,165,743円 50.00% 💀 最大損失月・五分五分の勝率
2月 – 56,346円 29.41% 小規模損失

【損益分岐月】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4月: データなし
10月: +3,353,566円(最新月・高収益)

═══════════════════════════════════════════════════════
🔍 月次トレンド分析
═══════════════════════════════════════════════════════

【1. 勝率の推移】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1月: 60% → 2月: 70.59% → 3月: 50% → 5月: 73.33%
→ 6月: 89.86% → 7月: 60% → 8月: 60.53%
→ 9月: 89.52% → 10月: 56.82%

特徴:

  • 6月・9月: 勝率90%近く(非常に良好)
  • 3月: 50%(最悪月)
  • 10月: 56.82%(最新月、やや低下)

【2. Risk/Reward Ratio(RRR)の推移】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
7月: 3.45 → 6月: 2.33 → 8月: 2.44 → 10月: 1.76
→ 9月: 0.89 → 5月: 0.49

特徴:

  • 7月が最高(3.45)→ 理想的なリスク管理
  • 5月が最低(0.49)→ 損失の大きいトレードが多い
  • トレンド: 月によって大きくばらつく(安定性に欠ける)

【3. Mean Loss per Trade の推移】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3月: 149,714円(最悪) → 8月: 37,037円
→ 9月: 20,669円 → 10月: 20,675円

特徴:

  • 3月の損失額が突出(約15万円/トレード)
  • 最近3ヶ月は改善傾向(2万円台に抑制)

═══════════════════════════════════════════════════════
💡 戦略的提言
═══════════════════════════════════════════════════════

🚨 緊急改善ポイント(優先度高)】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  1. 損切りルールの厳格化
    ┌────────────────────────────────────┐
    │ 現状: Mean Loss per Trade = 38,606円 │
    │ 目標: 15,000円以下 │
    │ (Mean Gainの約50%) │
    └────────────────────────────────────┘ 具体策:
    • ストップロス(損切り)を取得価格の-5%以内に設定
    • 損失が15,000円を超える前に必ず決済
  2. 利益確定の改善(利大損小の実現)
    ┌────────────────────────────────────┐
    │ 現状: Risk/Reward Ratio = 0.76 │
    │ (損失 > 利益) │
    │ 目標: RRR = 2.0以上 │
    └────────────────────────────────────┘ 具体策:
    • 利益が出ているポジションを早期決済しすぎない
    • トレーリングストップの活用(利益を伸ばす)
  3. 3月のような大損失月の再発防止
    ┌────────────────────────────────────┐
    │ 3月の実績: │
    │ • 損失: 149,714円/トレード │
    │ • 勝率: 50% │
    └────────────────────────────────────┘ 分析: 「損切りの遅れ」「逆張りの失敗」が原因か? 対策:
    • 相場環境が悪い時(高ボラティリティ時)は
    ポジションサイズを縮小

📈 成功パターンの再現(優先度中)】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

7月・8月の好調月を分析:
┌────────────────────────────────────┐
│ 7月: RRR 3.45、勝率60%、利益67万円 │
│ 8月: RRR 2.44、勝率60.53%、利益174万円 │
└────────────────────────────────────┘

共通点:
✅ 勝率は60%程度(過度に高くない)
✅ RRRが2.0以上(損小利大を実現)
✅ Mean Loss per Tradeが抑制されている

再現戦略:

  • 「勝率を上げすぎない」(無理にエントリーしない)
  • 「利益を伸ばす」(早期利確を避ける)
  • 「損失を小さく」(早期損切りを徹底)

📊 数値目標(2025年残り期間)】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
指標 現状(YTD) 目標 改善率
─────────────────────────────────────────
ROI(税引後) 0.56% 1.5%以上 +168%
Risk/Reward Ratio 0.76 2.0以上 +163%
Mean Loss per Trade 38,606円 20,000円以下 -48%
Expectancy 0.34% 1.0%以上 +194%

═══════════════════════════════════════════════════════
🎓 結論
═══════════════════════════════════════════════════════

【強み】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 高い勝率(73%)
✅ 安定した取引回数(507回)
✅ 最近3ヶ月の改善傾向(10月は350万円の利益)

【弱み】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ Risk/Reward Ratio < 1.0(損大利小)
❌ 損切りが遅い(Mean Loss = 38,606円)
❌ ROIが1%未満(資本効率が低い)

【最優先タスク】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  1. 損切りルールの設定と徹底
    → Mean Lossを20,000円以下に
  2. 利益確定を遅らせる
    → RRRを2.0以上に
  3. 3月のような大損失月の分析
    → 銘柄別・シナリオ別の敗因特定

これらを改善すれば、
年間ROI 2-3%(税引後1.5-2.5%)は十分達成可能です!

═══════════════════════════════════════════════════════

KPI行列データ(月次)

]]>
https://chiquitos-chiquitos.com/weekly-report-2/feed/0
Weekly Reporthttps://chiquitos-chiquitos.com/weekly-report/https://chiquitos-chiquitos.com/weekly-report/#respondSun, 19 Oct 2025 11:33:00 +0000https://chiquitos-chiquitos.com/?p=4395

]]>
https://chiquitos-chiquitos.com/weekly-report/feed/0
Weekly Reporthttps://chiquitos-chiquitos.com/week1/https://chiquitos-chiquitos.com/week1/#respondMon, 29 Sep 2025 15:41:49 +0000https://chiquitos-chiquitos.com/?p=4389 .errordiv { padding:10px; margin:10px; border: 1px solid #555555;color: #000000;background-color: #f8f8f8; width:500px; }#advanced_iframe_2 {visibility:visible;opacity:1;vertical-align:top;}.ai-info-bottom-iframe { position: fixed; z-index: 10000; bottom:0; left: 0; margin: 0px; text-align: center; width: 100%; background-color: #ff9999; padding-left: 5px;padding-bottom: 5px; border-top: 1px solid #aaa } a.ai-bold {font-weight: bold;}#ai-layer-div-advanced_iframe_2 p {height:100%;margin:0;padding:0}

]]>
https://chiquitos-chiquitos.com/week1/feed/0
R_ggiraph(複数グラフ連携)_20240925https://chiquitos-chiquitos.com/r_ggiraph-multigraph-federation-_20240925/https://chiquitos-chiquitos.com/r_ggiraph-multigraph-federation-_20240925/#respondWed, 25 Sep 2024 03:01:12 +0000https://chiquitos-chiquitos.com/?p=4280

2つのテーブルを結合(datにbox_statsをくっつける) dat %>%filter(year == selected_year) %>%full_join(box_stats) Rのデータ型 データ型 ... ]]>

Topic(Purpose / Outcome:目的・期待される成果)

Conductor
Conductor

マウスオーバーしながら情報確認しつつ、複数のグラフで観察できるのは面白い。

Visualization(How / Output:事実整理 / 最終ゴール)

Visualizer
Visualizer

①時系列で確認、②直近の年の分布を確認

Script Design / Summary(How:設計図・概要・論理構築)

Wrangler
Wrangler

全体像はこんな感じ

library(dplyr)
library(ggplot2)
library(patchwork)
install.packages("ggiraph")
library(ggiraph)
# Load the data
dat <- gapminder::gapminder %>% # gapminderとは、国ごとの人口、GDP、寿命などのデータを提供するパッケージ # year, continent, country, lifeExp, pop, gdpPercap # このデータは、1952年から2007年までの各国の人口、GDP、寿命などを提供している janitor::clean_names() %>% # janitor::clean_names() は、データフレームの列名を小文字に変換する mutate( # ID that is shared for boxplots (this one uses factors, i.e. numbers, as ID instead of continents) id = as.numeric(continent), # continentを数値に変換してidに代入している continent = forcats::fct_reorder(continent, life_exp) # forcats::fct_reorder() は、ファクターのレベルを再配置する # ここでは、continentをlife_expの値に基づいて再配置している # つまり、life_expの値が大きい順にcontinentを並べ替えている )
color_palette <- thematic::okabe_ito(5)
# thematic::okabe_ito() は、カラーパレットを返す関数
# ここでは、5色のカラーパレットを取得している
names(color_palette) <- unique(dat$continent)
# names() は、ベクトルの要素に名前を付ける関数
# ここでは、color_paletteにcontinentの名前を付けている
base_size <- 24 # Base font size
mean_life_exps <- dat %>% group_by(continent, year, id) %>% summarise(mean_life_exp = mean(life_exp)) %>% mutate(mean_text = glue::glue('In {year}, the mean life expectancy in\n{continent} was {scales::number(mean_life_exp, accuracy = 0.01)}')) # \n は改行を表す # {}には、変数を埋め込むことができる # scales::number() は、数値を指定した精度でフォーマットする関数 # accuracy = 0.01 は、小数点以下2桁まで表示することを意味する
line_chart <- mean_life_exps %>% ggplot(aes(x = year, y = mean_life_exp, col = continent, data_id = id)) + # data_id は、ggiraphで使用するためのデータID、つまり、ツールチップやクリックイベントを設定するためのID # ツールチップやクリックイベントとは、マウスをホバーしたときに表示される情報や、クリックしたときに表示される情報のこと geom_line_interactive(linewidth = 2.5) + # geom_line_interactive() は、ggiraphで対話的な線グラフを描画する関数 geom_point_interactive(size = 6, aes(tooltip = mean_text)) + # tooltip は、ツールチップに表示する情報を指定する theme_minimal(base_size = base_size) + # base_size は、フォントサイズを指定する labs( x = element_blank(), # x軸のラベルを非表示にする y = 'Life expectancy (in years)', # y軸のラベルを設定する title = 'Life expectancy over time' # グラフのタイトルを設定する ) + theme( text = element_text( # テキストの色を設定する color = 'grey20' ), legend.position = 'none', # 凡例を非表示にする panel.grid.minor = element_blank(), # グリッド線を非表示にする plot.title.position = 'plot' # タイトルを中央に配置する ) + scale_color_manual(values = color_palette) # カラーパレットを設定する
selected_year <- 2007
box_stats <- dat %>% filter(year == selected_year) %>% group_by(continent) %>% summarise( n = n(), # n() は、グループ内の行数を返す関数 iqr = IQR(life_exp) %>% round(2), # IQR() は、四分位範囲を計算する関数 # round(2) は、小数点以下2桁まで表示する range = paste(range(life_exp) %>% round(2), collapse = ' - '), # range() は、最小値と最大値を返す関数 # paste() は、文字列を連結する関数 # collapse = ' - ' は、連結するときに区切り文字として' - 'を使用することを意味する mean = mean(life_exp) %>% round(2) )
box_plot <- dat %>% filter(year == selected_year) %>% full_join(box_stats) %>% # full_join() は、2つのデータフレームを結合する関数 ggplot(aes(x = life_exp, y = continent, fill = continent, data_id = id)) + geom_boxplot_interactive( # geom_boxplot_interactive() は、ggiraphで対話的な箱ひげ図を描画する関数 aes( tooltip = glue::glue( ' {levels(dat$continent)[continent]}\n {n} Countries\n Mean life expectancy: {mean}\n Range: {range}\n IQR: {iqr} ' ), onclick = glue::glue('window.open("http://en.wikipedia.org/wiki/{levels(dat$continent)[continent]}")') # onclick は、クリックしたときに実行するJavaScriptコードを指定する # ここでは、クリックしたときに、Wikipediaのcontinentのページを開くようにしている # levels() は、ファクターのレベルを返す関数、これはcontinentのレベルを取得している ), position = position_nudge(y = 0.25), # 位置を微調整する width = 0.5 # 箱ひげ図の幅を設定する ) + geom_point_interactive( aes(col = continent), position = position_nudge(y = -0.2), size = 11, shape = '|', # ポイントの形を設定する alpha = 0.75 ) + scale_fill_manual(values = color_palette) + scale_color_manual(values = color_palette) + labs( x = 'Life expectancy (in years)', y = element_blank(), title = glue::glue('Distribution of Life Expectancy in {selected_year}') ) + theme_minimal(base_size = base_size) + theme( text = element_text( color = 'grey20' ), legend.position = 'none', panel.grid.minor = element_blank(), plot.title.position = 'plot' )
ggiraph( ggobj = box_plot + plot_spacer() + line_chart + plot_layout(widths = c(0.45, 0.1, 0.45)), # ggobj は、ggiraphで対話的なグラフを描画するためのggplotオブジェクト # plot_spacer() は、プロットの間にスペースを挿入する関数 # plot_layout() は、プロットのレイアウトを設定する関数 options = list( # オプションを設定する opts_hover_inv(css = "opacity:0.1;"), # ホバー時の透明度を設定する opts_tooltip(offx = 0, offy = 0, css = 'font-size: larger;') # ツールチップのオフセットとCSSを設定する ), hover_css = "", # ホバー時のCSSを設定する height_svg = 9, # SVGの高さを設定する width_svg = 16 # SVGの幅を設定する
)

Raw data / Wrangling / Feature Engineering(抽出~整形)

Raw data(How:生データ抽出元)

  • Source: mpg

Raw data(How:生データ抽出方法)

  • SQL読込: –
  • CSV読込: –
  • API読込 : 〇
  • rmarkdown:render()読込:- (.rmdのファイルをtemplate保存しておく必要あり)

Raw data(How:生データの構造 / 種類)

Extractor
Extractor

元々のデータフレーム

Wrangling (How: Loading・生データ読込)

Wrangler
Wrangler

Loading

# Script on Rstudio
# Tips: 読み込み先のファイルは「記載するpath名の始まり」からWorking Directoryとして設定する必要性がある。
mpg

Wrangling (How: before output、Output前のデータ構造)

Wrangler
Wrangler

視える化に合わせて編集

2つのテーブルを結合(datにbox_statsをくっつける)

dat %>%
filter(year == selected_year) %>%
full_join(box_stats)

メモ

  • 情報ソースがWEBサイト(HTMLやCSS)の場合にはどこから抽出するか、が問われるので、HTMLやCSSの知識が必要(スクレイピングを実施するにせよ)。
  • レンダリング(rendering)とはコンピュータがデータを処理して画像や映像、テキストなどを表示させる技術。
  • .fn(単数)と.fns(複数)はfunctionの略で無名関数。~ (tilde:チルダ) も無名関数。

tblの種類

  • Wide format:クロス集計表(横持ちデータ)
  • Long format:縦持ちデータ

tblの中身

  • 行 (row) :レコード、Observation、観測値(サンプル数)
  • 列 (column):特徴量、変数、次元数、次元の削減(Dimensionality Reduction): 高次元データを少ない次元に圧縮し、モデルの効率を上げるための手法。.xは列を指定している。obs = number of observatins.
  • 値:data point、Feature

tblの操作

  • One Hot Encoding とは、カテゴリ変数をバイナリ(0または1)で表現する方法。例えば、車の駆動方式 (drv) に “4”, “f”, “r” という3つのカテゴリがあったとします。カテゴリ変数の各値ごとに新しいカラムを作成し、その値が該当する場合は1、該当しない場合は0を入れます。カテゴリごとにバイナリの数値を割り当て、新しいカラムを作成することで、元のカテゴリデータが数値データとして扱えるようになります。これにより、機械学習モデルがデータを扱いやすくなるのが主な目的です。バイナリカラムの作成。例えば、ある行(観測値/row)に対して、classという列が分解され、それぞれ、compact、suv、midsizeの3つの列が、同じ行数に対して追加される。結果、元々suvで該当している行は1、該当しない列はゼロとなる。そのために事前に元々のテーブルには、すべての行に対して1が入るように設定の上、pivotでwide formatに展開する事が簡単。

tblの現状把握

# 変数の中身のユニークな値を確認する ----
unique(mpg$drv)
# 出現頻度を確認する
table(mpg$drv)
head(mpg$drv)
summary(mpg$drv)
# 全体確認 ----
skim(dat)
# チラ見 ----
glimpse(dat)

環境設定 & 環境の現状把握

  • 初期設定の3点セット:R, Rstudio, Rtools
  • RのバージョンとRtoolsのバージョンは合わせる必要性がある。Rstudioは最新版でも問題なし。例えば、corrmorantのpackageは、①Rの4.0.0(Rtoolも同バージョンをインストール)、及び、②ggplot2の3.3.0で、問題なくワークする事が実証されている。この場合、最新版のggplotのバージョンではパッケージがワークするかは不明。
# 現状把握
version()
library(pkgbuild)
has_rtools(debug = TRUE)
sessionInfo()

データソースのダウンロード

  • HTML形式のファイルが「file:///C:/Users/XXXXX/・・・」で保存されている場合、ローカルで保存されている状態。HTMLファイルをウェブサーバー(WordPressサイト)にアップロードする必要があり。
  • Githubのcredentialが期限切れになっている場合:
install.packages("oskeyring")
library(gitcreds) # gitcredsパッケージを読み込む
gitcreds_list() # 登録されている認証情報を確認
gitcreds_delete(url = "https://github.com") 
# 登録されている認証情報を削除
Sys.unsetenv("GITHUB_PAT") # GITHUB_PATを削除。空で帰る場合には問題解決。
# 公開リポジトリのインストールには認証は不要:
# corrmorantは公開リポジトリなので、認証なしでインストールできます。
# そのため、環境変数GITHUB_PATやシステムの資格情報ストアに認証情報が設定されていない状態が望ましいです。
# remotes::install_github("r-link/corrmorant", auth_token = NULL, force = TRUE)
# 特定のバージョンのggplot2をインストール
renv::install("ggplot2@3.3.6")

データ型

Rのデータ型

データ型説明
logical論理型。TRUEまたはFALSEの2つの値を取ります。TRUE, FALSE
integer整数型。正または負の整数値を保持します。1L, -10LLは整数の指定)
double数値型(実数型)。小数を含む任意の数値を表します。3.14, -100.5
complex複素数型。実部と虚部を持つ数値です。1 + 2i
character文字列型。文字列やテキストを保持します。"Hello", "R"
factorカテゴリ型。有限の異なるカテゴリ(レベル)を持つデータです。factor(c("Male", "Female"))
listリスト型。異なるデータ型を含む要素のコレクション。list(1, "a", TRUE)
data.frameデータフレーム型。異なる型を持つベクトルを列として保持する二次元表形式データ。data.frame(x = 1:3, y = c("a", "b", "c"))
matrix行列型。数値、文字列、論理値などを含む二次元配列です。matrix(1:9, nrow = 3)
array配列型。行列よりも多次元のデータを扱います。array(1:12, dim = c(2, 3, 2))
ts時系列データ型。等間隔で記録されたデータを表します。ts(c(1, 2, 3), start = c(2021, 1), frequency = 12)
Date日付型。日付データを表現します。as.Date("2024-09-25")
POSIXct, POSIXlt日時型。日付と時間のデータを保持し、異なるフォーマットで時刻を扱います。as.POSIXct("2024-09-25 10:30")
rawバイナリデータ型。バイト単位のデータを保持します。as.raw(c(0x01, 0x02))
NULLNULL型。未定義や無効な値を表します。NULL
NA欠損値。データが存在しないことを示します。NA

参考リンク

]]>
https://chiquitos-chiquitos.com/r_ggiraph-multigraph-federation-_20240925/feed/0
R_PC主成分分析_20240925https://chiquitos-chiquitos.com/r_maps-leaflet_20240925/https://chiquitos-chiquitos.com/r_maps-leaflet_20240925/#respondWed, 25 Sep 2024 02:09:23 +0000https://chiquitos-chiquitos.com/?p=4267

fit_pca %>% tidy() %>% view() の実行結果において、row、pc、value という3つの列が出てきた場合、それらの列は主成分分析(PCA)の結果を解釈するための情報を提供していま ... ]]>

Topic(Purpose / Outcome:目的・期待される成果)

Conductor
Conductor

主成分分析がメインだけど、難しいので、違う回で解説。今回はあくまでOne Hot Encodingを追加する事を覚えよ。

Visualization(How / Output:事実整理 / 最終ゴール)

Visualizer
Visualizer

現状、

Script Design / Summary(How:設計図・概要・論理構築)

Wrangler
Wrangler

全体像はこんな感じ

# LIBRARIES ----
library(broom)
library(ggfortify)
library(plotly)
library(tidyverse)
# DATA ----
mpg
# DATA WRANGLING ----
# - dplyr is covered in DS4B 101-R Weeks 2 & 3
# * Extract Target (Y) ----
y_tbl <- mpg %>% select(manufacturer, model) %>% mutate(vehicle = str_c(manufacturer, "_", model)) %>% # str_c() で文字列を連結 rowid_to_column() # rowid_to_column() で行番号を追加
y_tbl
# * Encode Features (X) ----
x_tbl <- mpg %>% # Get features for consideration select(displ:class) %>% # Add Row ID to maintain order rowid_to_column() %>% # One Hot Encode: transmission mutate( trans_auto = str_detect(trans, "auto") %>% as.numeric(), trans_man = str_detect(trans, "man") %>% as.numeric() # str_detect() で文字列に特定の文字列が含まれているかを判定 # as.numeric() でTRUE/FALSEを1/0に変換 # auto or manualに分類。Binary列を各々で作成。= one hot encode ) %>% select(-trans) %>% # One Hot Encode: drv mutate(val_drv = 1) %>% # まず元々のデータテーブルにval_drv列を追加する。 # val_drv に1を代入。すべての行に1を代入することで、後でpivot_wider()でワイド形式に変換する際に、NAを0で埋めることができる。 pivot_wider( names_from = drv, # names_from でカラム名を指定 # 例えば、drv列には、"f" "4" "r"、という3通りの文字列を持つ。 # この文字列をそれぞれ列名として指定する。 # 行数は変更されていないため、増えた列数("f" "4" "r")に対して、該当する場合には1、そうでない場合には0になるように設定している。 values_from = val_drv, # values_from で値を指定 # ここでは、val_drv列の値(1)を指定している。 # これにより、各行のdrv列の値に対応する列に1が代入される。 values_fill = 0, # values_fill でNAを0で埋める names_prefix = "drv_" # names_prefix でカラム名の接頭辞を指定 ) %>% # pivot_wider() でワイド形式に変換 # names_from でカラム名を指定 # values_from で値を指定 # values_fill でNAを0で埋める # names_prefix でカラム名の接頭辞を指定 # One Hot Encode: class mutate(val_class = 1) %>% pivot_wider( names_from = class, values_from = val_class, values_fill = 0, names_prefix = "class_" ) %>% # One Hot Encode: fl mutate(val_fl = 1) %>% pivot_wider( names_from = fl, values_from = val_fl, values_fill = 0, names_prefix = "fl_" )
x_tbl %>% glimpse()
# PCA ----
# - Modeling the Principal Components
# - Modeling & Machine Learning is covered in DS4B 101-R Week 6
fit_pca <- prcomp( # prcomp() で主成分分析を実行 # 主成分分析は、多変量データの次元を削減するための手法。 # 主成分分析を行うことで、データの特徴を抽出し、データの構造を理解することができる。 # 主成分分析は、データの分散が最大となる方向を見つけ、その方向を主成分として抽出する。 # 分散が最大となる変数を見つけるという事ですか? はい、その通りです。 # その組み合わせは自動で全通りを調べてくれるという事ですか? はい、その通りです。 # なぜ分散が最大となる組合せを考えますか? それは、データの情報を最大限に保持するためです。 # データの情報を最大限に保持するとはどういう意味ですか? それは、データの特徴を最大限に抽出することです。 # 分散が大きい成分:データの主要な変動を表す。重要な情報が含まれているので保持する。 # 分散が小さい成分:データの変動が小さいため、その成分はデータの説明にはあまり寄与しない。したがって、無視しても良い。 # これにより、PCAは次元削減を行いながら、データの本質的なパターンを保持できるようになります。 formula = ~ . - rowid, # formula で主成分分析の対象となる列を指定 # ~ . - rowid でrowid列を除いたすべての列を対象とする。 data = x_tbl, # data でデータを指定 # ここでは、x_tbl を指定している。 scale. = TRUE # scale. でデータをスケーリングするかを指定 # TRUE でスケーリングを行う。 # スケーリングを行うことで、主成分分析の結果がより正確になる。 # スケーリングとは、データの平均を0、標準偏差を1に変換すること。
)
fit_pca %>% head()
fit_pca %>% tidy() %>% view()
# tidy() で主成分分析の結果を整形
# 主成分分析の結果は、主成分の寄与率、主成分の累積寄与率、主成分の固有値、主成分の固有ベクトルなどが含まれる。
# pcとは何ですか? 主成分のことです。
# rowは何を表していますか? 主成分の番号を表しています。
# 主成分の番号は小さいところから順に何を表していますか? 主成分の重要度を表しています。
# valueは何を表していますか? 主成分の値を表しています。
# 主成分の値はわかりますが、元々のどの変数がどの変数に対して、重要度の高い変数なのかが分かりません。
# どうしたらわかりますか? 主成分の固有ベクトルを見ることで、元々の変数がどの変数に対して、重要度の高い変数なのかが分かります。
# どうやって固有ベクトルを見ますか? tidy()関数で固有ベクトルを見ることができます。
# fit_pca %>% tidy() %>% view() で固有ベクトルを見ることができます。
# 固有ベクトルとはvalueの値の事ですか? はい、その通りです。
# rowとPCの番号の違いは何ですか? rowは主成分の番号を表しています。PCは主成分の番号を表しています。
# VISUALIZE PCA ----
# - Visualization with ggplot is covered in DSRB 101-R Week 4
g <- autoplot( # autoplot() で主成分分析の結果を可視化 object = fit_pca, # object で主成分分析の結果を指定 x = 1, # x でx軸に使用する主成分の番号を指定 y = 2, # y でy軸に使用する主成分の番号を指定 # Labels data = y_tbl, # data でデータを指定 # ここでは、y_tbl を指定している。 label = TRUE, # label でラベルを表示するかを指定 label.label = "vehicle", # label.label でラベルに表示する列を指定 label.size = 3, # label.size でラベルのサイズを指定 # LOADINGS loadings.label = TRUE, # loadings.label で固有ベクトルを表示するかを指定 loadings.label.size = 7, # loadings.label.size で固有ベクトルのサイズを指定 scale = 0 # scale でスケールを指定
) + labs(title = "Visualizing PCA in R")+ theme_minimal()
g
plotly::ggplotly(g)

Raw data / Wrangling / Feature Engineering(抽出~整形)

Raw data(How:生データ抽出元)

  • Source: mpg

Raw data(How:生データ抽出方法)

  • SQL読込: –
  • CSV読込: –
  • API読込 : 〇
  • rmarkdown:render()読込:- (.rmdのファイルをtemplate保存しておく必要あり)

Raw data(How:生データの構造 / 種類)

Extractor
Extractor

元々のデータフレーム

Wrangling (How: Loading・生データ読込)

Wrangler
Wrangler

Loading

# Script on Rstudio
# Tips: 読み込み先のファイルは「記載するpath名の始まり」からWorking Directoryとして設定する必要性がある。
mpg

Wrangling (How: before output、Output前のデータ構造)

Wrangler
Wrangler

視える化に合わせて編集

fit_pca %>% tidy() %>% view() の実行結果において、rowpcvalue という3つの列が出てきた場合、それらの列は主成分分析(PCA)の結果を解釈するための情報を提供しています。以下、それぞれの列が何を意味するか解説します。

1. row

  • この列は、元のデータの変数(カラム)名を表しています。
  • PCAの結果では、元のデータセットに含まれる各変数(説明変数)が主成分(PC: Principal Component)に対してどの程度寄与しているかを示す係数が計算されます。row 列は、その元の変数名に対応しています。

2. pc

  • pc 列は、主成分(Principal Component)を示しています。例えば、pc = 1 であれば第1主成分、pc = 2 であれば第2主成分を意味します。
  • 主成分は、元の多次元データをより少ない次元に圧縮した新しい軸(方向)で、PCAによってデータの最も重要な情報(分散の大きい方向)を表しています。

3. value

  • value 列は、row(元の変数)が各主成分(pc)に対してどの程度寄与しているかを示す係数、すなわち主成分負荷量(loading)です。
  • これらの係数は、元の変数と主成分との関連性を示します。例えば、ある変数が第1主成分(pc = 1)に対して大きな正の値を持っている場合、その変数は第1主成分に大きく影響しており、その方向にデータが大きく広がっていることを示しています。逆に、負の値であれば逆方向に広がっていることを示します。

例:

以下のようなデータフレームが出力されたと仮定します。

rowpcvalue
var110.65
var21-0.30
var120.12
var220.90
  • row = var1 は元の変数 var1 を示します。
  • pc = 1 は第1主成分、pc = 2 は第2主成分を表します。
  • value は、元の変数(var1var2)が各主成分に対してどの程度寄与しているかを表します。たとえば、var1 は第1主成分に対して0.65の寄与を持つため、第1主成分における var1 の影響は大きいと解釈されます。

まとめると:

  • row:元のデータセットに含まれている変数名(元の説明変数)。
  • pc:どの主成分(PC: Principal Component)に対しての寄与かを示す(第1主成分、第2主成分、…)。
  • value:その変数がどの主成分に対してどれだけ寄与しているか(主成分負荷量)を示す係数。この値を元に、変数がどの主成分に強く影響しているかがわかる。

この情報を基に、どの変数が主成分に強く関与しているかを分析し、主成分の意味や解釈を行います。

はい、シンプルな具体例を示します。ここでは、Rを使って簡単な主成分分析(PCA)の結果を具体的に説明します。

例:

3つの変数(var1, var2, var3)を持つ以下のデータセットを用意します。

# シンプルなデータセットを作成
data <- data.frame( var1 = c(2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1), var2 = c(2.4, 0.7, 2.9, 2.2, 3, 2.7, 1.6, 1.1, 1.6, 0.9), var3 = c(1.5, 0.2, 1.7, 1.9, 2.6, 1.8, 1.2, 0.8, 1.4, 1.1)
)
# 主成分分析の実行
fit_pca <- prcomp(data, scale = TRUE)
# PCAの結果をtidy()で整形して表示
library(broom)
tidy_pca <- tidy(fit_pca)
tidy_pca

このコードを実行すると、以下のような結果が得られます。

rowpcvalue
var110.577
var210.577
var310.577
var120.707
var22-0.707
var320
var130
var230
var331

解釈:

  1. 第1主成分(PC1):
  • var1, var2, var3 のすべてが0.577の値を持っています。これは、第1主成分は3つの変数すべてにほぼ同じ割合で寄与していることを意味します。この方向は、3つの変数がまとめて変動する軸と考えることができます。
  1. 第2主成分(PC2):
  • var1 は 0.707、var2 は -0.707、var3 は 0 となっています。これは、第2主成分は主に var1var2 の相反する動きを反映していることを示しています。var1 が増加するとき var2 は減少し、その逆も成立します。var3 はこの軸には寄与していない(値が0)ため、無関係です。
  1. 第3主成分(PC3):
  • var3 のみに1の値がついており、var1var2 は寄与していません。このことから、第3主成分は var3 のみに対応しており、他の2つの変数とは独立した軸で変動していることがわかります。

結論:

  • 第1主成分は、3つの変数の全体的な変動(共通した方向)を捉えており、3つの変数の情報が均等に含まれています。
  • 第2主成分は、var1var2 の反対方向の動きを捉えています。
  • 第3主成分は、var3 のみが関与しており、他の変数からは独立した情報を表しています。

このように、主成分分析は、データの変数間の関係を新しい軸に変換し、その軸ごとにどの変数がどれだけ寄与しているかを明確にする手法です。

では、先ほどの主成分分析のシンプルな例を不動産データに置き換えて説明します。今回は、仮想的な不動産データセットを使い、主成分分析を実行した結果を解釈します。

例:不動産のデータセット

次のような変数を持つデータを仮定します。

  • price:物件の価格
  • size:物件の広さ(平米)
  • age:物件の築年数

データセットの作成と主成分分析

# 不動産の仮想データセットを作成
real_estate_data <- data.frame( price = c(300000, 200000, 250000, 270000, 320000, 310000, 220000, 190000, 260000, 280000), size = c(60, 50, 55, 58, 70, 65, 53, 48, 57, 63), age = c(10, 20, 15, 12, 8, 9, 22, 25, 18, 13)
)
# 主成分分析の実行
fit_pca <- prcomp(real_estate_data, scale = TRUE)
# PCAの結果を整形して表示
library(broom)
tidy_pca <- tidy(fit_pca)
tidy_pca

このコードを実行すると、以下のような結果が得られたと仮定します。

rowpcvalue
price10.577
size10.577
age1-0.577
price2-0.707
size20
age20.707
price30.408
size3-0.816
age30.408

解釈:

第1主成分(PC1):

  • pricesize が正の値(0.577)を持ち、age が負の値(-0.577)を持っています。
  • これは、物件の価格(price)と広さ(size)は正の相関があり、築年数(age)とは逆の相関があることを示しています。つまり、広くて新しい物件ほど高額であるという一般的な傾向を表しています。
  • 不動産の解釈:新しくて広い物件ほど価格が高く、築年数が増えると価格が下がる傾向があります。この主成分は、物件の一般的な評価基準(価格、広さ、築年数の関係)を表していると解釈できます。

第2主成分(PC2):

  • price が -0.707、age が 0.707 の値を持ち、size は0です。
  • これは、価格(price)と築年数(age)が逆の方向に動いており、広さ(size)はこの主成分に影響を与えていないことを示します。築年数が古い物件は価格が低く、新しい物件は価格が高いという単純な関係に焦点を当てています。
  • 不動産の解釈:第2主成分は、物件の「築年数」と「価格」に関する情報を示しています。ここでは、物件の広さは無視され、築年数と価格の関係が強調されています。特に、築年数が増えると価格が下がる傾向を表現しています。

第3主成分(PC3):

  • size が -0.816 と非常に大きな負の値を持ち、priceage はそれぞれ 0.408 の正の値を持っています。
  • これは、広さ(size)が強く影響しており、広い物件は価格や築年数と独立していることを示します。つまり、広さが大きくなると、築年数や価格にかかわらず、異なる特性を持つことを表しています。
  • 不動産の解釈:第3主成分は、物件の広さに関する情報を強調しています。広さが物件の他の特徴とは独立した要因であり、価格や築年数とは異なる軸で考える必要があることを示唆しています。

まとめ:

  1. 第1主成分(PC1) は、物件の広さ、価格、築年数の全体的な傾向を示し、特に「広くて新しい物件は高額」という典型的な不動産の特徴を捉えています。
  2. 第2主成分(PC2) は、価格と築年数の関係に焦点を当てており、広さが影響しない条件での築年数による価格変動を捉えています。
  3. 第3主成分(PC3) は、物件の広さに特化した軸で、広さが価格や築年数とは別の独立した要因であることを示唆しています。

このように、主成分分析を使うことで、不動産のデータにおいて「広さ」「価格」「築年数」などがどのように相関しているのかを把握し、それぞれがどのように物件の特徴に影響を与えているかを理解できます。

メモ

  • 情報ソースがWEBサイト(HTMLやCSS)の場合にはどこから抽出するか、が問われるので、HTMLやCSSの知識が必要(スクレイピングを実施するにせよ)。
  • レンダリング(rendering)とはコンピュータがデータを処理して画像や映像、テキストなどを表示させる技術。
  • .fn(単数)と.fns(複数)はfunctionの略で無名関数。~ (tilde:チルダ) も無名関数。

tblの種類

  • Wide format:クロス集計表(横持ちデータ)
  • Long format:縦持ちデータ

tblの中身

  • 行 (row) :レコード、Observation、観測値(サンプル数)
  • 列 (column):特徴量、変数、次元数、次元の削減(Dimensionality Reduction): 高次元データを少ない次元に圧縮し、モデルの効率を上げるための手法。.xは列を指定している。obs = number of observatins.
  • 値:data point、Feature

tblの操作

  • One Hot Encoding とは、カテゴリ変数をバイナリ(0または1)で表現する方法。例えば、車の駆動方式 (drv) に “4”, “f”, “r” という3つのカテゴリがあったとします。カテゴリ変数の各値ごとに新しいカラムを作成し、その値が該当する場合は1、該当しない場合は0を入れます。カテゴリごとにバイナリの数値を割り当て、新しいカラムを作成することで、元のカテゴリデータが数値データとして扱えるようになります。これにより、機械学習モデルがデータを扱いやすくなるのが主な目的です。バイナリカラムの作成。例えば、ある行(観測値/row)に対して、classという列が分解され、それぞれ、compact、suv、midsizeの3つの列が、同じ行数に対して追加される。結果、元々suvで該当している行は1、該当しない列はゼロとなる。そのために事前に元々のテーブルには、すべての行に対して1が入るように設定の上、pivotでwide formatに展開する事が簡単。

tblの現状把握

# 変数の中身のユニークな値を確認する
unique(mpg$drv)
# 出現頻度を確認する
table(mpg$drv)
head(mpg$drv)
summary(mpg$drv)

環境設定 & 環境の現状把握

  • 初期設定の3点セット:R, Rstudio, Rtools
  • RのバージョンとRtoolsのバージョンは合わせる必要性がある。Rstudioは最新版でも問題なし。例えば、corrmorantのpackageは、①Rの4.0.0(Rtoolも同バージョンをインストール)、及び、②ggplot2の3.3.0で、問題なくワークする事が実証されている。この場合、最新版のggplotのバージョンではパッケージがワークするかは不明。
# 現状把握
version()
library(pkgbuild)
has_rtools(debug = TRUE)
sessionInfo()

データソースのダウンロード

  • HTML形式のファイルが「file:///C:/Users/XXXXX/・・・」で保存されている場合、ローカルで保存されている状態。HTMLファイルをウェブサーバー(WordPressサイト)にアップロードする必要があり。
  • Githubのcredentialが期限切れになっている場合:
install.packages("oskeyring")
library(gitcreds) # gitcredsパッケージを読み込む
gitcreds_list() # 登録されている認証情報を確認
gitcreds_delete(url = "https://github.com") 
# 登録されている認証情報を削除
Sys.unsetenv("GITHUB_PAT") # GITHUB_PATを削除。空で帰る場合には問題解決。
# 公開リポジトリのインストールには認証は不要:
# corrmorantは公開リポジトリなので、認証なしでインストールできます。
# そのため、環境変数GITHUB_PATやシステムの資格情報ストアに認証情報が設定されていない状態が望ましいです。
# remotes::install_github("r-link/corrmorant", auth_token = NULL, force = TRUE)
# 特定のバージョンのggplot2をインストール
renv::install("ggplot2@3.3.6")

参考リンク

]]>
https://chiquitos-chiquitos.com/r_maps-leaflet_20240925/feed/0
R_maps & leaflet_20240925https://chiquitos-chiquitos.com/r_plot_20240925/https://chiquitos-chiquitos.com/r_plot_20240925/#respondTue, 24 Sep 2024 04:17:22 +0000https://chiquitos-chiquitos.com/?p=4253

]]>

Topic(Purpose / Outcome:目的・期待される成果)

Conductor
Conductor

mapsもあるものの恐らくleafletの方が無料のデータソースでinteracticeなデータで良いかも!

Visualization(How / Output:事実整理 / 最終ゴール)

Visualizer
Visualizer

現状、

Script Design / Summary(How:設計図・概要・論理構築)

Wrangler
Wrangler

全体像はこんな感じ

# LIBRARIES ----
library(tidyverse)
library(maps)
library(mapproj)
# 1.0 MAP DATA -----
?map_data()
# 2.0 WORLD MAP ----
# - ggplot is covered in DS4B 101-R Week 4
world_tbl <- map_data("world") %>% # map_data() で地図データを取得 as_tibble() # as_tibble() でデータをtibble型に変換
world_tbl
# * World Base ----
world_base <- world_tbl %>% ggplot() + geom_map( aes(long, lat, map_id = region), # aes() でx軸、y軸、map_idを指定 map = world_tbl, # map_id で地図データを指定 color = "gray80", fill = "gray30", size = 0.3 ) # geom_map() で地図をプロット
world_base
# * Ortho Projection ----
world_base + coord_map("ortho", orientation = c(39, -98, 0)) # coord_map() で地図の投影法を指定、"ortho" は正射投影法を指定。 # orientation で地図の中心を指定している。
# 3.0 STATE MAPS ----
# - ggplot is covered in DS4B 101-R Week 4
usa_tbl <- map_data("state") %>% as_tibble() # state はアメリカ合衆国の州の地図データを取得
usa_tbl %>% ggplot(aes(long, lat, map_id = region)) + geom_map( map = usa_tbl, color = "gray80", fill = "gray30", size = 0.3 ) + coord_map("ortho", orientation = c(39, -98, 0))
# 4.0 REPUBLICAN VOTING BY US STATE ----
# - dplyr is covered in DS4B 101-R Weeks 2 & 3
# - ggplot2 is covered in DS4B 101-R Week 4
# * Wrangle & Join Data (dplyr) ----
republican_voting_tbl <- maps::votes.repub %>% # maps::votes.repub はアメリカ合衆国の州ごとの共和党の投票率データ as_tibble(rownames = "state") %>% # as_tibble() でデータをtibble型に変換 select(state, `1976`) %>% # select() で必要な列を抽出 (state, 1976年の共和党の投票率) rename(repub_prop = `1976`) %>% # rename() で列名を変更 mutate(repub_prop = repub_prop / 100) %>% # mutate() で共和党の投票率を割合に変換 mutate(state = str_to_lower(state)) # mutate() で州名を小文字に変換 # str_to_lower() で文字列を小文字に変換
usa_voting_tbl <- usa_tbl %>% left_join(republican_voting_tbl, by = c("region" = "state")) # left_join() で地図データと共和党の投票率データを結合
usa_voting_tbl
# * Make Map (ggplot2) ----
usa_voting_tbl %>% ggplot(aes(long, lat, group = subregion)) + geom_map( aes(map_id = region), map = usa_tbl, color = "gray80", fill = "gray30", size = 0.3 ) + coord_map("ortho", orientation = c(39, -98, 0)) + geom_polygon(aes(group = group, fill = repub_prop), color = "black") + # geom_polygon() で共和党の投票率をプロット # fill で色を指定 # color で線の色を指定 scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0.5, labels = scales::percent) + # scale_fill_gradient2() で色のグラデーションを指定 # low で最小値の色を指定 # mid で中間値の色を指定 # high で最大値の色を指定 theme_minimal() + labs( title = "Voting Republican in 1976", x = "", y = "", fill = "" ) + theme( plot.title = element_text(size = 26, face = "bold", color = "red3"), legend.position = "bottom" )
# 日本の地図をよみこむ
# 必要なパッケージをインストール
install.packages("leaflet")
install.packages("geojsonio")
install.packages("dplyr")
# パッケージを読み込み
library(leaflet)
library(geojsonio)
library(dplyr)
# 日本全体のGeoJSONデータのURL
japan_geojson_url <- "https://raw.githubusercontent.com/dataofjapan/land/master/japan.geojson"
# GeoJSONデータを読み込み
japan_geojson <- geojson_read(japan_geojson_url, what = "sp")
# 東京都のデータのみを抽出
tokyo_geojson <- japan_geojson[japan_geojson$name == "東京都", ]
# 地図に東京都をハイライト
leaflet() %>% setView(lng = 139.6917, lat = 35.6895, zoom = 10) %>% addTiles() %>% addPolygons(data = tokyo_geojson, color = "red", weight = 2, fillOpacity = 0.5)
# 必要なパッケージをインストール
install.packages("leaflet")
install.packages("sf")
install.packages("rnaturalearth")
install.packages("rnaturalearthdata")
# パッケージを読み込み
library(leaflet)
library(sf)
library(dplyr)
library(rnaturalearth)
library(rnaturalearthdata)
# 日本の都道府県データを取得
japan_sf <- ne_states(country = "Japan", returnclass = "sf")
# データの属性名を確認
names(japan_sf)
# 東京都のデータを抽出
tokyo_sf <- japan_sf %>% filter(name == "Tokyo")
# 地図に日本全体を描画
leaflet() %>% addTiles() %>% addPolygons(data = japan_sf, color = "gray", weight = 1, fillOpacity = 0.5) %>% # 東京都を赤色でハイライト addPolygons(data = tokyo_sf, color = "red", weight = 2, fillOpacity = 0.7) %>% # 東京都にズーム setView(lng = 139.6917, lat = 35.6895, zoom = 7)

Raw data / Wrangling / Feature Engineering(抽出~整形)

Raw data(How:生データ抽出元)

  • Source: map_data(“world”)

Raw data(How:生データ抽出方法)

  • SQL読込: –
  • CSV読込: –
  • API読込 : 〇
  • rmarkdown:render()読込:- (.rmdのファイルをtemplate保存しておく必要あり)

Raw data(How:生データの構造 / 種類)

Extractor
Extractor

元々のデータフレーム

Wrangling (How: Loading・生データ読込)

Wrangler
Wrangler

Loading

# Script on Rstudio
# Tips: 読み込み先のファイルは「記載するpath名の始まり」からWorking Directoryとして設定する必要性がある。
map_data("world")

Wrangling (How: before output、Output前のデータ構造)

Wrangler
Wrangler

視える化に合わせて編集

メモ

  • 行 (row) :レコード、Observation、観測値(サンプル数)
  • 列 (column):特徴量、変数、次元数、次元の削減(Dimensionality Reduction): 高次元データを少ない次元に圧縮し、モデルの効率を上げるための手法。.xは列を指定している。obs = number of observatins.
  • 値:data point、Feature
  • Wide format:クロス集計表(横持ちデータ)、Long format:縦持ちデータ
  • 情報ソースがWEBサイト(HTMLやCSS)の場合にはどこから抽出するか、が問われるので、HTMLやCSSの知識が必要(スクレイピングを実施するにせよ)。
  • レンダリング(rendering)とはコンピュータがデータを処理して画像や映像、テキストなどを表示させる技術。
  • .fn(単数)と.fns(複数)はfunctionの略で無名関数。~ (tilde:チルダ) も無名関数。

環境設定

  • 初期設定の3点セット:R, Rstudio, Rtools
  • RのバージョンとRtoolsのバージョンは合わせる必要性がある。Rstudioは最新版でも問題なし。例えば、corrmorantのpackageは、①Rの4.0.0(Rtoolも同バージョンをインストール)、及び、②ggplot2の3.3.0で、問題なくワークする事が実証されている。この場合、最新版のggplotのバージョンではパッケージがワークするかは不明。
# 現状把握
version()
library(pkgbuild)
has_rtools(debug = TRUE)
sessionInfo()

データソースのダウンロード

  • HTML形式のファイルが「file:///C:/Users/XXXXX/・・・」で保存されている場合、ローカルで保存されている状態。HTMLファイルをウェブサーバー(WordPressサイト)にアップロードする必要があり。
  • Githubのcredentialが期限切れになっている場合:
install.packages("oskeyring")
library(gitcreds) # gitcredsパッケージを読み込む
gitcreds_list() # 登録されている認証情報を確認
gitcreds_delete(url = "https://github.com") 
# 登録されている認証情報を削除
Sys.unsetenv("GITHUB_PAT") # GITHUB_PATを削除。空で帰る場合には問題解決。
# 公開リポジトリのインストールには認証は不要:
# corrmorantは公開リポジトリなので、認証なしでインストールできます。
# そのため、環境変数GITHUB_PATやシステムの資格情報ストアに認証情報が設定されていない状態が望ましいです。
# remotes::install_github("r-link/corrmorant", auth_token = NULL, force = TRUE)
# 特定のバージョンのggplot2をインストール
renv::install("ggplot2@3.3.6")

参考リンク

]]>
https://chiquitos-chiquitos.com/r_plot_20240925/feed/0