質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

940閲覧

pythonを用いた主成分分析(データ有り)

rgb_nk

総合スコア26

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

4クリップ

投稿2020/06/11 03:06

編集2020/06/11 03:27

主成分分析での第一主成分、第二主成分が何を表しているのか理解したい。

今回使用したデータをgithub上で公開しているので、
データが必要な方は、git cloneお願いします

git clone https://github.com/kouhei-github/txt_data.git

最後に質問をまとめていますので、1点でもわかる方お答え頂きたいです。
またデータから気付いた点や、自分なりに分析してみた等の意見もあればお願い致します。

困っていること

現在、データ解析の勉強のために、あるサイトの検索順位のアルゴリズムを解析しています。
下記にデータを示します。

データは実際にgit cloneしてみる生データの方が、見やすいかと思います!
下記のコードでdataframeにして確認してください

python3

1# df = pd.read_csv('analyse.txt', index_col=0)

   rank firstpage title_len distance crolling job_date keywords_num_job
job_lenth company_jobs_num
0 6 1 27 7143.010 0 720 0 1520 8
1 9 1 6 2041.890 0 384 0 571 805
... ... ... ... ... ... ... ... ... ...
24872 43 0 21 6467660.000 0 72 0 1011 13
24873 68 0 19 1743.930 1 720 0 608 13

24874 rows × 9 columns

rank: ランキングの順位
firstpage: 1が1page目に表示、0がそれ以外
title_len: タイトルの長さ
distance: 距離
crolling: クローリングかどうか
job_date: その募集をした日付
company_jobs_num: その会社が持っている他の募集
job_lenth: 募集の内容の長さ
keywords_num_job: 検索時にかけるキーワードの数

試したこと

**データを正規化し、自分なりに必要なデータに絞った**のが下記で、

rank   title_len keywords_num_job job_lenth  company_jobs_num

0 0.050505 0.337838 0.000 0.176375 0.000014
1 0.080808 0.054054 0.000 0.066257 0.001624
... ... ... ... ... ...
24872 0.424242 0.256757 0.000 0.117313 0.000024
24873 0.676768 0.229730 0.000 0.070550 0.000024

24784rows × 5columns

このデータを、主成分分析(PCA)をかけ,
__第一主成分と第二主成分をplotして、firstpageで散布図を作成__すると
イメージ説明
うまくわかれています。
私の解釈として、第一主成分はfirstpage(1page目になれるかどうか)を表していると考えています。
ここでの散布図の分かれ目の0.4とは何を表しているのでしょうか?

次に寄与率をみてみると、
0
PC1 0.623347
PC2 0.231397
PC3 0.070281
PC4 0.040889
PC5 0.034086

第一主成分で、元データの60%を説明できており、第二主成分まで合わせると80%超えています。
また見やすくするために累積寄与率をグラフにすると、下記になります。
![イメージ説明]

最後に「第一主成分と第二主成分における観測変数の寄与度をプロット」すると
イメージ説明

このようになります。第一主成分(1page目になれるかどうか)に貢献しているのは、
job_lenth, keywords_num_job, company_jobs_num, title_len
であると私は解釈しています。

しかし、PC1の座標をを見てみると貢献していたとしても 0.0でこの分析が合っているかどうかわかりません。

最後に、質問をまとめますと

1, PC1(第一主成分), PC2(第二主成分)でfirstpageの散布図を示した図の、分かれ目の0.4とは何を表しているのでしょうか?
2, 皆さんの解釈で第二主成分は何を表していると思いますか?
3, この主成分分析はあっているのでしょうか?
4, 最後のグラフの数字(PC1だと-1.0~0.0)は何を示しているのでしょうか?

もし他に、このデータで主成分分析等行って傾向がわかった方コメントしてください。
またコードの公開をして頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

せっかくデータをアップしてあるので試行してみました。処理概要は以下です。

・処理対象は、rbg_nkさんが対象としたものと同一にした。(項目の意味がわかるとやりようがあります)
・データ項目のスケールが異なるのでMinMaxScalarで標準化した。(実装がわからないので、何を使用したのか確証がないが、質問の記載と同じような結果だったのでMinManScalarを使用)
・PCA実行時のオプションパラメータはデフォルト値

得られた結果
・主成分1および2で全体の85%の情報量を保有。主成分3まで含めると90%を超えるので、このあたりまでが主要な情報で以降はノイズと扱っても良さそう。
・主成分1はrankによって表現されている。(符号がマイナスなので値が小さいほどランクが大きい)
・主成分2はtitle_lenによって表現されている。keywords_num_jobおよびjob_lenthも多少影響。各々が何を意味しているかわからないので解釈は保留。ざっくりいうとtitle_lenを意味している。
・firstpageを軸に主成分1の分布をヒストグラムで可視化。その結果、firstpage=1とfirstpage=0は異なる分布を示す。つまり、主成分1(rank)とfirstpageは何らかの関係がある。
・一方、主成分2についてヒストグラムで可視化した結果は、近似した分布を示した。つまり、主成分2(title_len)はfirst_pageと明示的な関係性は見られない。

投稿2020/06/28 05:00

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

1, PC1(第一主成分), PC2(第二主成分)でfirstpageの散布図を示した図の、分かれ目の0.4とは何を表しているのでしょうか?

第一主成分が0.4ということ以上は表していません。よって、もう少し詳しく解釈するためには第一主成分が何を表しているのかを解釈する必要があります。
主成分分析における主成分は、ざっくりいうと与えられたデータから計算された指標のようなものです。主成分に対して与えられたデータがどの程度影響しているのかは、計算結果のオブジェクトからcomponents_を使って取り出して解釈します。解釈に特段のルールや方法はないようですが、私はcomponents_の絶対値に着目して解釈するようにしています。まず、ゼロ近傍のデータは主成分に影響していないと解釈して残りから解釈します。

例えば。インプットが『身長・体重・座高・腹囲』の主成分分析を行ったとします。結果、第一主成分がすべてプラスでそこそこ大きいのであれば、『カラダの大きさ』という抽象的な概念を表していると解釈します。第二主成分が、身長と座高はマイナス(そこそこ大きい)で、他はゼロ近傍であれば、第二主成分は『縦方向のカラダの大きさ(端的にいうなら身長)』と解釈します。

今回の分析におけるcomponents_がわからないので何とも言えませんので主成分の解釈はできず、結果として0.4が何を意味しているのかもわからないというのが事実のように思われます。

2, 皆さんの解釈で第二主成分は何を表していると思いますか?
上記の通りで、分析が足りていないので何とも言えません。

3, この主成分分析はあっているのでしょうか?
ここでいう『この主成分分析』がどの部分を示しているのかによります。
結論を導くまでの手順や解釈のことを意味しているのであれば、最終ゴールである『あるサイトの検索順位のアルゴリズムを解析』に対して主成分分析の結果がどのようになるのかという仮説次第です。

『第一主成分と第二主成分をplotして、firstpageで散布図を作成』というこれが最終的に得たいもののように思います。言い換えると、そこに至るまでの手順が飛んでいることが結果をどう解釈したらいいのかを悩ませているような気がします。

投稿2020/06/27 22:03

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rgb_nk

2020/06/30 06:34

凄すぎます。 全く無知な状態で手探りでやっていたので、 私のミスであるとわかりました。 もう一度手順を見直してみます。 その際は、またご指導とご鞭撻の程宜しくお願い致します。
guest

0

第一主成分が0.4ということです

2, 皆さんの解釈で第二主成分は何を表していると思いますか?

図から明らかですが title_len ではないでしょうか

3, この主成分分析はあっているのでしょうか?

コードを示していただかないと詳細が分からないですが
第一主成分でほぼ完璧に答えが説明できてしまっている
のは本当にそうなのかも知れないですが、
何らかの間違いか
主成分分析をせずとも特定の変数で説明できてしまうのではないかなど
疑った方がよろしいかと。

4, 最後のグラフの数字(PC1だと-1.0~0.0)は何を示しているのでしょうか?

「観測変数の寄与度をプロット」しているのですからPC1に対する「観測変数の寄与度」ですね。
固有ベクトルですが禅問答のようになってしまうので、下記の記事をご参考になさってください。

下記などが参考になると思います。
c.f.
https://qiita.com/maskot1977/items/2680927b58cdc4fad8d4
https://qiita.com/maskot1977/items/082557fcda78c4cdb41f

あと主成分分析の基本をもう少し学ばれて、主成分とは何か、寄与度とは何かをご理解されたほうがよろしいかと思います。

投稿2020/06/27 04:49

aokikenichi

総合スコア2240

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rgb_nk

2020/06/30 06:36

参考サイトまで載せていただいきありがとうございます。 私が無知であることがよく知れました。 おっしゃるように、今一度主成分分析について学び直そうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問