課題解決プレゼンテーション
2023年12月27日 カテゴリー:K.課題解決プレゼンテーション
回答
プレゼンテーションの提出形式はパワーポイントをご使用ください。
分析に関する部分については、分析手法、分析スクリプト、分析結果、解釈等をパワーポイントへご記載ください。
解析に使用したファイルは不要です。
回答
20分程度です。
回答
原則2名です。
回答
以下、URLご参照ください。
「修了プレゼンテーション例」
https://datascience.co.jp/reskill/presentation/
回答
とても良い質問ですね。
使い分けとしては、いくつかありますが、以下の切り分けがわかりやすいと思います。
Rを使うときは、論文など学術的、科学的な立証に分析を使用する場合に使用することが多いです。また、nが大きくないときはRを使用することが多いと思います。
Pythonは、ビックデータの解析で多く使われています。ビックデータに対しての便利な関数がPythonの方が多いため、Pythonを使用することが多いようです。また、ほかのデータからクエリ(データベースに対して)などの命令文で、データをネットワークからリアルタイム(またはローカルでも)で取得して、分析する場合は、圧倒的にPythonの方が楽です。
実践力の養成5
2023年12月27日 カテゴリー:J.実践力の養成5
回答
普通目盛と対数目盛は用途によって使い分けます。
講座内の説明にあるように、特に時系列の傾向を見るときは対数目盛の方が把握しやすいと思います。
一般に、プレゼン用等に用いる場合は普通目盛がよく使用されますが、
対数に慣れていない、知らない方が多い等の理由により普通目盛が使用されている場合が多いと思います。
量のデータを時系列に並べるときは、対数目盛の方が判断しやすいですが、比率のデータを時系列に並べるときは、そのまま普通目盛でいいと思います。
比に注目するときは対数目盛、量に注目するときは普通目盛ですが、分析は、比に注目する場合がほとんどですので対数目盛がよく用いられます。
学会などで発表する場合、グラフは分析のために使用する場合が多いので、原則、対数目盛です。
(散布図でも対数目盛が推奨されます)
慣れるまでは、普通目盛と対数目盛によるグラフ両方を作成しどちらが理解しやすいか検討してください。
是非、対数目盛を活用してください。
回答
予測の手順は下記の通りになります。
1)季節指数を求める
2)TCの予測値を求める
・2年分のデータを用いて12項移動平均により20年7月~21年6月迄の値を求める(P29のオレンジ色の実線)
・20年7月~21年6月迄の値(P29のオレンジ色の実線)を用いて最小二乗法により、21年7月以降を予測する。
目的は22年1月以降の予測ですが、そのためには21年7月から12月の値も予測し、この値を用いることになります。
3)2022年1月以降の予測値は、TCの予測値×季節指数になります。(EXCELシート TC予測を参照)
P29の売上高実績グラフに22年1月以降を追加してグラフを作成したい場合は、上記3)の予測値を続けて入力します。
12項移動平均は、あくまでも過去の24か月の実績データから傾向(TC)を把握するための分析方法です。
この場合のデータは実績データのみであり予測データは使いません。
従って、22年の予測値を使って12項移動平均を行っても意味はありません。
回答
それでいいと思います。
予測方法(トレンド、季節指数)の算出方法は分析者に委ねられます。
例えば、猛暑が予想されるのであれば過去猛暑の年度を、分からなければ過去の平均を使用することが多いと思います
トレンドも、最近急に伸びているようでしたら最近の年度で算出し過去は無視してもいいと思います。
回答
説明変数は独立している変数で構成されるのがベストですが、
例えば、
売上高が性別の影響を受け(例えばデザインが男性受けする)、かつ所得の影響を受ける(高額商品)の場合、
従属変数は売上高、説明変数は性別、所得で分析を行います。
そして分析結果は、回帰式と精度(決定係数)、及び性別と所得がどの程度の割合で売上高に影響を与えているかについて求めます。
2つの項目に”無相関”はあり得ないので、ある程度相関があっても分析を行い、分析結果の解釈時に勘案するのが一般的であると思います。
回答
季節変動の加重は、分析者に委ねられます。
・予想に、直近の季節変動の動きを重視したい場合
直近に重きを置いた加重平均を行います。
(例)1年前の実績(a)50%、2年前の実績(b)25%、3年前の実績(c)25%の場合
a×0.5+b×0.25∔ℭ×0.25
となります。上記%は、分析者が恣意的に設定します。
実践力の養成4
2023年12月27日 カテゴリー:I.実践力の養成4
回答
重回帰分析における説明変数同士の強い相関から生じる問題のことを、「多重共線性の問題」といいます。おっしゃる通り、目安として相関係数が0.8以上のとき、多重共線性を疑います(正しくご理解されています)。Research Question1の相関行列は0.8を下回っているので大丈夫そうです。
多重共線性の問題が生じていると、決定係数がとても低くなります(当てはまりが悪くなります)。実務では、そこで「あれ?」と気が付くことがよくあります。
ご参考までですが、多重共線性を診断する指標としてVIFというものがあります。VIFが10を越えていたら多重共線性を疑いますが、私の計算では、DESIGN 2.6、FUNCTION 2.6、SIZE 2.5、PRICE 1.0で全て大丈夫でした(VIFをEXCELで計算するのは大変なので、統計分析パッケージを使いました)。
回答
もし説明変数同士の相関が強く、多重共線性の問題が生じていると考えられる場合、普通は相関の強い2つの変数のどちらかをモデルから除外します。それで決定係数やp値がある程度改善します。研究の目的にもよりますが、重回帰分析は探索的な分析なので、モデルに合わない変数を無理に残すことはありません。
じゃあ、デザインと機能のどちらの変数を残すか?なんですが、これは実際に重回帰分析を実行してみて、決定係数の良い(値の大きい)モデルの方を採用すればいいと思います。説明変数を入れ変えながら重回帰分析を段階的に繰り返し、もっとも決定係数の高くなるモデルを追求するやり方を「ステップワイズ法」といって、重回帰分析ではよく行われます。
回答
このケースだと、決定係数やp値が非常に小さい値になると思います。無理に重回帰分析にしなくても良いと思います(単回帰を試してみて下さい)。
回答
相関係数とは、変数同士一対一の関係から算出されます。例えば、機能と購買意欲の相関係数は0.87ですが、この0.87にデザインや価格やサイズなど他の変数は全く関係していません。他の変数がいくらだろうと、機能と購買意欲の相関はr=0.87です。
一方、偏回帰係数はそうではありません。ある説明変数(機能)から他の説明変数(デザイン、価格、サイズ)の影響を除いた残差変数によって、従属変数(購買意欲)を予測するものです。従って、他の説明変数の存在によって、偏回帰係数は変わってきます。機能、デザイン、価格、サイズの4つの説明変数の中で、機能が最も影響力が強いと主張したいときは、標準偏回帰係数を計算した方が説得力があると思います。ただ、偏回帰係数の計算には相関係数がかかわっているので、両者は全く無関係ではありません。
回答
次にように書きます。
cor(a$INTENTION,d$beauty)
[1] 0.8844945
購買意欲と美容得点の相関係数は0.884で、強い相関関係がみとめられます。
実践力の養成3
2023年12月27日 カテゴリー:H.実践力の養成3
回答
・{City Name} は天気情報を取得したい都市の名前に置き換えます。
・{API Key} はOpenWeatherMapで発行されたAPIキーに置き換えます。
回答
・str.format
の使用: シンプルでわかりやすいですが、自分で文字列を構築する必要があります。
・params
の使用: より安全で、可読性が高く、requests
ライブラリによって自動的にエンコードされるため、エラーが少なくなります。
params
を使った方法の方が、特に多くのパラメータを扱う場合やセキュリティ面で推奨されることが多いです。URLの構築が複雑になった場合でも、params
を使えばシンプルに保てます。回答
実践力の養成2
2023年12月27日 カテゴリー:G.実践力の養成2
回答
どの問題か不明ですが、おそらく、
!pip install opencv-pythonコマンドを実行することでインストールできます。
実践力の養成1
2023年12月27日 カテゴリー:F.実践力の養成1
回答
「効果があった」という主張は言及しやすい(もちろん、擬似相関には注意が必要です)のですが、「効果がなかった」という主張は非常に難しい側面があります。
特に、今回のモデルは良くても決定係数~0.7程度ですから、モデルの精度としてもまだ向上の余地があり、OOHの効果を十分に反映できていない可能性がある点は、分析者として気をつけるべきです。
モデルの結果から何かを主張するのであれば、そのモデルの「信頼性」(≒精度、妥当性)が担保されていることが前提です。
経営層が効果あると思って投下しているのであれば、OOHの効果が見えるようなチューニングが足りていない可能性があります。
例えば、
・OOHの効果が時間遅れで発生する可能性があれば、ラグを考慮して、OOHのデータを1週間や2週間ずつずらしたものを説明変数として加える
・残存効果や非線形効果のチューニングを行う(係数の調整、非線形の式の変更、など)
・特にOOHは屋外であることから、季節性の影響も大きそうなため、「月」との交互作用項を加える
などです。
これらを施しても効果が見えなかったり、あるいは、他のチューニングで決定係数が0.9近くまで上がっているのにOOHの効果が薄かったり、ということであれば、確かにOOHの広告費は抑えた方が良いという主張にも繋がり得ると思います。
また、回帰係数のp値も併せて見た方が良いかと思います。
あとは、MMMの構築目的にも依存すると思います。
費用対効果を見たいのであれば、今回のデータは直接的な予算金額ベースとは異なりますから、もしOOHの広告費が安いのであれば、費用対効果的にはそれほど悪くないという可能性もありえます。
また、時期も含めて、「いつ、何を投下すべきか」検討したい場合には、積極的にOOHの予算削減まで言及しなくても良いように思います。
分析目的と、モデルの信頼性がポイントになってくるかと思います。
回答
私自身もMac環境なのですが、同様の現象が再現できておりません。もう少し詳しくご教示いただければと思います。
ターミナルにて、
conda install -c conda-forge mlxtend
を実行してもうまくいかないとのことですが、ターミナル上ではどのような反応(表示メッセージなど)なのでしょうか。
上記を実行すると、通常、ターミナル上に下記のようなメッセージが流れたのち、インストール継続確認の “y/n?” を聞かれるのですが、何も表示されない状況なのでしょうか。
Retrieving notices: …working… done
Collecting package metadata (current_repodata.json): done
Solving environment: done
あとは、Jupyter Notebook上で、
!conda install -c conda-forge mlxtend(先頭にビックリマークを付与)
の実行もお試しいただけたらと思います。
上記でもうまくいかなければ、ターミナル上から、pip install mlxtendを実行してみてください。
回答
相関行列の1行目には正しく数値が表示されているとのこと、seabornライブラリ側のバグの可能性があるかと思います。
下記でも同様の現象が報告されていますが、seabornのバージョンアップで解決されています。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10296680025
下記の通り、seabornのバージョンアップを試して見ていただけますでしょうか。
(再掲:Anaconda環境→ Jupyter Notebook上で !conda update seaborn / それ以外の環境→ Jupyter Notebook上で !pip install seaborn –upgrade)
※バージョンアップ後、Jupyter Notebookの再起動が必要です
上記で解消されない場合、seabornのバージョン、matplotlibのバージョンをご教示いただければと思います。
▼seabornバージョン確認方法
import seaborn as sns
print(sns.__version__)
▼matplotlibのバージョン確認方法
import matplotlib
matplotlib.__version__
回答
この集計後の「日付」列は、仰せの通り、意味をなさない列です。
非表示化するためには、下記のコードにて、当該日付列をdropしていただければと思います。
df_by_month = df.groupby( df[‘日付’].dt.month ).mean().drop(columns=’日付‘)
また、集計後の「月」の列名が日付のままで違和感ある場合は、下記コードで列名を修正することもできます。
df_by_month = df.groupby( df[‘日付’].dt.month ).mean().drop(columns=’日付’).reset_index().rename(columns={‘日付‘:’月‘})
また、こうなってしまう理由ですが、日付列の「月」で集計を行った際、自分自身の列すなわち「日付」列に対しても(意味なく)月毎の集計を行ってしまっています。
例えば1月の場合、「2015年1月」 「2016年1月」 「2017年1月」 に該当するデータの日付の平均値を無理やり求めており、
その計算結果が 2016年8月5日 16:00:00 になっているものと思われます。月によっては秒数まで端数が出るため、このような細かい数値になっています。
(なお、.mean() 部分を .max() に変えれば、今度は2017年の当該月の月末値が表示されるかと思います)
回答
ライブラリのバージョンに依存している可能性もあるので、下記コードにて出力されるバージョンをご教示ください。
import mlxtend
print(mlxtend.__version__)
回答
今回の協調フィルタリング手法も含め、レコメンデーションの多くは基本的に教師なし学習なので、レーティングの値まで精度良く合わせに行くのはなかなか難しい部分もあります。
特に、レーティングの値は蓄積された学習データに大きく依存します。
実際、下記コードで「いか」スコアの頻度集計を見ると、評価4の割合が高くなっており(4: 613件、3: 378件、2:265件、1: 133件、0: 68件)、それに引っ張られているであろうことが推測されます。
df_score[‘3:いか’].value_counts()
そのため、レーティングそのものよりも、相対的な順位(ランク)で捉えた方が良いことも多いです。(レーティングを予測したければ回帰分析の方が適合することもある)
なお、「いか」が2.8で実際の評価4から乖離 していたとのこと、私の環境で実行すると「いか」の評価は「3.066」となったのですが、
もし3.066とすると、このユーザー(ID: 0)の中では最もランキングが高いネタであることになり、(定量的にはあまり合っていなくても)定性的な傾向、相対的な位置付けとしては合致していると思います。
講義では割愛しましたが、レコメンデーションにも評価指標は存在しており、
今回のようなレーティング(数値)予測の場合、通常の数値予測と同じような精度指標(MAE: 平均絶対誤差、RSME: 二乗平均平方根誤差など )を用いて、その予測精度を評価することもありますが、
上述の通り、レーティングまで精度良く合わせに行くのは難しい部分もあることから、あくまで 「ランキング(順位)」 さえ合っていれば良いというスタンスで、ランクの精度指標(MRR: 平均逆順位、nDCG: 減損累積利得 など)を用いることもあります。
回答
“FutureWarning” は、将来のライブラリアップデートで廃止予定の関数を用いている場合に、出力されるWarningです。
したがって、現時点(実行できている今時点)では問題は発生していません。
私の環境では当該Warningが出ないため、下記の共有をお願いします。
・使用pandasのバージョン
・エラー文の全体(いただいた略文だけでは、コードの何行目でエラーが起こっているか不明のため)
(参考:pandasバージョンの確認方法)
import pandas as pd
print(pd.__version__)
バージョンに起因する問題が多いように思うので、WarningやError、また動画と結果が異なる、などの場合は、
先のmlxtendのように、下記コードにて出力されるバージョンをご教示ください。
import ライブラリ名
print(ライブラリ名.__version__)
回答
Webサイトへのリアルタイム実装は十分可能です。
というのも、レコメンデーション分析はそもそも、ユーザーへのアイテム推薦機能としてAmazonやNetflixはじめ、様々なサービスやECサイトで運用されています。
特に、YouTubeやInstagramはサイト自体がPythonベースで作られているようなので、
Pythonで作られたレコメンデーションモデル(実際には講義で扱ったモデルよりももっと複雑と思います)がそのまま組み込まれている可能性もあるかと思います。
アソシエーション分析についても、リアルタイムに頻出パターンのアイテム組合せを提示することは可能ですが、
どちらかというとこちらはシステムに組み込むというよりも、レシートデータを用いて、様々な「意外性のある」同時購入のパターン(例えば、オムツとビール、咳止めとジュース、など)を見出そうとする発見的な分析手法です。
正解データ不要で分析できる(教師なし学習)ため、ひとまずやってみるか、という感じでやることも多いかと思います。
また、私自身の例で恐縮ですが、この手法を他分野適用して、製造業における不良パターンの同時発生分析や、医療における合併症の分析なども行ったことがあります。
ECサイトレビューの特徴語可視化は、例えば大量のアンケートデータにおける自由記述部分を大まかに内容把握したり、直近のニュースやSNSでの話題把握などに活用されています。
SEOキーワード抽出というのも大変興味深い着眼点で、検索用語は本来単語レベルではありますが、
実際には「分析 アソシエーション 用途」などのように、スペース繋ぎで、ある種の文のような形でデータが収集されるかと思うので、本手法を適用する価値は十分あるように思います。
回答
リフト値は1.0以上が望ましいというよりは、式の定義上、1.0以上でないと有効なルールとはいえない(同時購入の方が単独購入よりも購買が促進されるとは言えない)
ということなので、1.0以上は最低条件であり、より値が高いものを見ていく必要があります。
一方、信頼度と支持度は、データの件数に大きく影響を受けます。
例えば、全体のデータ件数=10000件、うち商品A購入=1000件、うちAもBも購入=100件
→ 信頼度100/1000=0.1、支持度=100/10000=0.01ですが、
商品A購入件数も全体のデータ件数もこの10倍になれば、
→ 信頼度100/10000=0.01、支持度=100/100000=0.001に一気に下がります。
つまり、データによって分母が変わるため、絶対的な比較は難しい指標です。
同一のデータ内で、その大小関係を(相対的に)比較していくことに意味があります。
提出課題5
2023年12月27日 カテゴリー:E.Pythonによるビッグデータ解析
Pythonによるビッグデータ解析
2023年12月27日 カテゴリー:E.Pythonによるビッグデータ解析
回答
df にデータを格納した上で、下記コードを実行しても中の数字は表示されませんでしょうか。
import matplotlib.pyplot as plt
import seaborn as sns
colormap = plt.cm.RdBu_r
sns.heatmap(df.corr(numeric_only=True), linewidths=0.1, linecolor=’white’,
vmax=1.0, vmin=-1.0, cmap=colormap, annot=True, annot_kws={‘fontsize’:8}, fmt=’.2f’)
上記コードの annot=True が箱内への数字を出力するためのオプションです。
また、もしかするとその後の数値書式設定(annot_kws)が悪さをしている可能性もあるので、annot_kws={‘fontsize’:8}, fmt=’.2f’ 部分を削除した上で改めて実行してみてください。
上記でうまくいかない場合、ご指摘の通り、バージョンの問題の可能性があります。
この場合、Jupyter Notebookというよりは、当該描画機能のseabornのバージョンの問題の可能性が高いです。バージョン確認のために以下を実行してみてください。
import seaborn as sns
print(sns.__version__)
私は “0.12.2” でしたので、これよりもかなり古そうであれば、バージョンアップデートをしていただいた方が良いかと思います。
(Anaconda環境→ Jupyter Notebook上で !conda update seaborn / それ以外の環境→ Jupyter Notebook上で ! pip install seaborn –upgrade)
回答
コードを全部覚える必要は全くありません。
例えば今回配布したコードは、dfという変数名でデータを入れ替えるだけで(別のExcelデータをdfという変数にread_excelするだけで)先程の相関行列も含め、多くの部分がそのまま動作します。
私もそうですが、多くの分析者は、過去に自分が作ったコードや、Web上に掲載されているコードを流用しています。
逆に言えば、都度、流用しやすいようにコードを作っておく工夫はした方が良いかと思います。(例えば、dfのように、大元となるデータの変数名は共通化しておく、など)
一方で、まさにご指摘の通りで、pairplotやgroupbyなど、非常に有名かつ頻度の高いものは(自ずと)覚えてしまっているケースが多いです。裏を返せば、使っていく中で覚えていけば良いかと思います。
プログラミング言語も、あくまで「言語」の一種なので、継続的、日常的に使っていくことが何よりも大切です。(使用頻度が低いと英語が上手くならないのと類似)
できる限り、毎日に近いくらい触れていくことと、これも自然言語同様、そのままリピート実行するのではなく少し自分でアレンジして実行してみることが極めて重要です。
回答
大変良いご指摘です。第一のお答えとしては、お好みになるかなと思います。
これは非常に深い話にも繋がり、そもそもカテゴリー値(名義尺度、順序尺度)の相関係数にどれほど意味があるか?という点にも繋がります。
通常の相関係数(ピアソンの積率相関係数)は本来、数値間の間隔に意味を持つ、数値データ(間隔尺度、比例尺度)が前提です。
したがって、性別の0/1や、順序尺度(アンケート回答の1~5など)では、本来間隔に意味を持たないので、この相関係数自体、あまり意味をなさないことになります。
しかしながら、数値化(ダミー変数化)していれば、とりあえず相関係数の算出自体はできてしまいますし、その算出値には(定量的な厳密性はなくとも)ある程度の傾向は反映されていますので、参考値にはなります。
ただ、そこから得られる情報は、後述するクロス集計でも十分読み取れるため、わざわざ相関係数を出さなくても問題ないケースも多いです(無論、別途カテゴリー値を対象としたデータ観察を丁寧に行うことが前提です)。
一方で、出港地(Embarked)に関しては、講義では手始めとして、C, Q, Sを0, 1, 2と連続値化しましたが、
本来これらには大小関係が定義できないはずですので、この相関係数自体、意味を持ちません。
※1 ただし、出港地の時間的順序関係がC→Q→Sの順で、かつ、この順序関係が目的変数に影響を与えているという前提があれば、相関係数にもある程度意味が出てくるかと思います
※2 なお、この出港地という変数に関しては、厳密には、C or not (0/1), Q or not (0/1), S or not (0/1) といった、0/1フラグ(one-hotベクトル形式)でのダミー変数化が有効となります
したがって、出港地については、講義でも扱ったように、ダミー変数化した後にクロス集計などで観察するのが一般的です。
ヒストグラムも同様で、カテゴリー値のヒストグラムは単なる棒グラフに他ならない(カテゴリーごとの頻度集計)ので、カテゴリー値を対象としたデータ観察の中で、棒グラフで確認すれば十分です。
ただ、例えばdf.hist()などで、数値データと合わせて一括して確認したい場合には、あらかじめダミー変数化しておく必要があります。
まとめると、カテゴリー値を対象としたデータ観察(クロス集計、棒グラフなど)を丁寧に行なっていれば、事前にダミー変数化する必要は特にありませんが、
先述のように、数値データと一緒くたにして俯瞰的に観察したい場合には、ダミー変数化を事前にしても良いかと思います。
プロセスを定型化するよりも、「何をどう観察するか」の目的意識が重要です。
また、ご参考までに、相関係数の代わりに、カテゴリー値で用いられる類似指標として下記のようなものがあります。
こちらのサイト(https://www.neclearning.jp/sample_text/DB101-1.pdf)が非常にわかりやすいですので、参考にしていただければと思います。
l 数値データ×数値データ・・・ ピアソンの積率相関係数
(順序尺度×順序尺度・・・ スピアマンの順位相関係数)
l 数値データ×カテゴリー値・・・ 相関比
l カテゴリー値×カテゴリー値・・・ クラメールの連関係数
回答
seabornライブラリ側のバグの可能性があるかと思います。
下記でも同様の現象が報告されていますが、seabornのバージョンアップで解決されています。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10296680025
下記の通り、seabornのバージョンアップを試して見ていただけますでしょうか。
(再掲:Anaconda環境→ Jupyter Notebook上で !conda update seaborn / それ以外の環境→ Jupyter Notebook上で ! pip install seaborn –upgrade)
※バージョンアップ後、Jupyter Notebookの再起動が必要です
上記で解消されない場合、seabornのバージョン、matplotlibのバージョンをご教示いただければと思います。
▼seabornバージョン確認方法
import seaborn as sns
print(sns.__version__)
▼matplotlibのバージョン確認方法
import matplotlib
matplotlib.__version__
回答
大変鋭いご指摘をありがとうございます。
おっしゃる通りで、決定係数は説明変数が増えれば上昇する性質のものなので、ある説明変数を追加して決定係数が改善した場合に、
追加した説明変数が本質的に目的変数に影響を与えているのか、(本当は影響していないのに)説明変数の数が増えただけの影響なのか、の判断が難しくなります。
従って、厳密には他講師の説明通り、説明変数の数(正確には自由度の数)で補正した補正Rを用いて、追加した説明変数の影響度を見るべきかと思います。
一方で、今回私の講義内にてメインで用いている “scikit-learn” の機械学習ライブラリでは、回帰分析において、この補正R(自由度調整済み決定係数)を求めるメソッド(関数)が用意されていません。
従って、これを求めるには、自作関数を作るか、statsmodelライブラリの回帰分析を用いる必要があります。
“scikit-learn” と “statsmodel” は思想の違いがあり、scikit-learnはどちらかというとデータマイニング的にTrial and Errorを重ねながらクイックに分析を行う位置付けになっている印象です。(例えば多重共線性を評価する指標である “VIF” 統計量も、scikit-learnにはありませんが、statsmodelにはあります)
今回私が補正Rを用いていないのは、あくまでデータマイニング的に分析を行なっており必ずしも厳密性を追求する目的ではない(例えば、追加した説明変数の有意性を示したいわけではない)ために簡便に扱えるscikit-learnのアルゴリズムを用いていることと、また、補正Rの定義式上、差が生じるのは {(n – 1)/(n – k – 1)} の部分なので、データ数が十分あればそこまでの大きなインパクトがないだろうという理由からです。
(参考)
・決定係数 = 1 – (残差平方和)/(偏差平方和)
・自由度調整済み決定係数 = 1 – {(残差平方和)/(偏差平方和)} x {(n – 1)/(n – k – 1)} ※n: データ数、k: 説明変数の数
繰り返しますが、厳密性を追求する場合(アカデミックや、当該変数の有意性を調べたい場合など)には、補正Rを用いた方が良いです。
提出課題4
2023年12月27日 カテゴリー:D.Pythonによるデータ解析入門
回答
> tips.corr()
> エラーメッセージ
> could not convert string to float: 'No'
こちらのエラーの通り「string」、すなわち「文字列」の列があるとうまく動きません。
基本的に、統計解析の際には数値じゃないと色々な解析が動かないことがあると思ってください。
そのため、tipsという変数のデータフレームから、文字列の列を取り除いて、corrを実施してみてください。
回答
こちらも恐らく文字列のデータが入っているからではないかと思います。
数値の列のみを選択して、作成するとうまく行くと思います。
Pythonによるデータ解析入門
2023年12月27日 カテゴリー:D.Pythonによるデータ解析入門
回答
少々文字化けしていて分かりませんでしたが、labelsにtipとあるので、データセットはtipsだと思いますので、それで説明します。
まず、labelsは何の設定か分からないという部分についてお伝えします。講義で使っていたデータは下記データです。
さらに、講義のときの命令文は
#設定
fig, ax = plt.subplots()
NAME = BOX.columns#線の凡例用に、DataFrameの列名を取得
ax.boxplot(BOX,showmeans = True, labels = NAME)
こうなっていたと思います。BOXという変数に上の表のデータが入っています。
ここで、NAMEという変数には、BOXのカラムが格納されていますね?
カラムとは列のことであり、BOX.columnsによって列名が取得されています。
すなわち、labelsには列名を入れているということが分かると思います。
実際のこの命令を実行したら、箱ひげ図が3つ作成されて、ラベルがShopAとBとCになっていたと思います。
ここから、labelsというのはその名の通り、ラベルを振る名前のことです。
さて、tipsのデータで箱ひげ図を作ろうとしてもうまくいかないとことでしたね?
なぜうまくいなかいかというと、tipsのデータは下記の通りです。
まず
> NAME = I.columns
> ax.boxplot(I,showmeans = True, labels =tip )
ここですが、上図の列名がNAMEに格納されています。
続いて、ax.boxplotによって、Iという変数の箱ひげ図を作れと命令され、平均値も算出しろ、と命令していますが、上図のとおり、どう見ても平均値の算出とか、四分位数の計算すらできなさそうな列が入っていることが分かります。
そのためエラーが出るのです。
四分位計算して箱ひげ図作って、かつ平均値出せと言われたけど、どうやって出したら良いの?とコンピューター側が困っている、という状態です。
なので、たとえば、total_billとtipとsizeの箱ひげ図を出すとしましょう。
まず複数の列を抽出してほかの変数に格納しましょう。
I2 = I[[“total_bill”, “tip”, “size”]]
I2
この時注意するのは、I[“”]で列名を出せたと思いますが、今回複数なので、複数のときにはST = [“a”,”b”,”c”]と[]で入れてましたよね?
だからここでは[]の中に複数の[]を入れていて、[]の中に[]でリスト化していると思います。カッコの数を間違えるとエラーが出るのでお気を付けください。
これで、I2に数値だけのデータフレームができましたので、箱ひげ図を作ってみましょう。
fig, ax = plt.subplots()
NAME = I2.columns
ax.boxplot(I2,showmeans = True, labels =NAME )
同じ図が出来ましたでしょうか?
もしまた何か分からないことがありましたら、お気軽にお問い合わせください。
回答
I.corr()は、相関係数を算出する関数です。
相関係数を算出するためには、平均値と標準偏差が必要ですね?
すなわち、量的な計算することが可能な状態ではないと計算できません。
恐らくtipsを使っているのだと思うので、そのデータをまず見てみましょう。
このようなデータがtipsのデータです。
この中から、sexやsmokerなど、平均値と標準偏差が計算できないようなデータが入っています。
Pairplotは動いたとのことですが、図を見ると
こういう感じでしたよね?
これ、自動的に数値として計算できないものは入ってないことが分かりますか?pairplotは自動的に、数値データじゃないものを除外して、図を作ってくれます。しかしながら、corr()は真面目な関数で、愚直に全てで相関を出そうと頑張ってくれる結果、数値データも計算しようとして、混乱してエラーが出てます。
なので、私たち側がcorr()の関数で計算できるように、数値データだけの変数を作ります。
I2 = I[[“total_bill”, “tip”, “size”]]
I2
このように列を複数選択します。
このとき、注意するのは、I[“”]で列名を出せたと思いますが、今回複数なので、複数のときにはST = [“a”,”b”,”c”]と[]で入れてましたよね?
だからここでは[]の中に複数の[]を入れていて、[]の中に[]でリスト化していると思います。
カッコの数を間違えるとエラーが出るのでお気を付けください。
このI2に対して、corr()をやってみてください。恐らく問題なく動くと思います。
ちなみに、sexやsmokerをダミー変数としてreplaceしてってことであれば、相関係数も算出可能になります。
またはget_dummiesなどを使って、ダミー変数に変換するとそのまま使えたりします。
回答
Python3が表示されない場合で考えられるのはPython3がインストールされていないことが原因である可能性が高いと考えられます。
以下のサイトにあります、ダウンロードのページからPython3をダウンロードし、インストールしてみてください。
https://www.python.org/
これによって表示されるようになると思われます。