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

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

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

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

データ構造

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

pandas

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

Q&A

解決済

1回答

612閲覧

Pythonにおいて相関係数を算出し、データセットを作成する方法。

Danrussia

総合スコア44

Python 3.x

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

データ構造

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

pandas

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

0グッド

0クリップ

投稿2019/08/31 05:44

編集2019/08/31 14:33

前提・実現したいこと

Pythonを使用して、既存のDataFrame(下記の「加工前のデータセット(df)」)を基に相関係数を排出したいと思っています。
具体的なデータセットのイメージとしては、下記の「加工後のデータセット」の様な感じです。

###加工前のデータセット(df)

|Weight(g)|Long axis|Short axis|Grain thickness|Sumple_vert|BeanNumber_vert| |:--|:--:|--:|--:|--:|--:| |0.43|0.92|0.91|0.73|くるみ豆|B2| |0.4 |0,90|0.89|0.56|くるみ豆|B2| |0.45|1.04|0.97|0.63|くるみ豆|B2| |0.41|...|||| ||0.4|0.97|0.92|0.74|五葉黒豆|B6| |0.35|0.97|0.88|0.51|五葉黒豆|B6|| |0.43|...|||| |0.51|1.21|0.95|0.77|濃緑丸豆|B39| |0.43|0.92|0.85|0.83|濃緑丸豆|B39| |0.43|0.93|0.90|0.55|濃緑丸豆|B39| |0.48|1.10|0.96|0.67|濃緑丸豆|B39| |0.38|0.91|0.85|0.54|濃緑丸豆|B39|

加工後のデータセット

Weight(g) Long axis Short axis Grain thickness B2 Weight(g) 1.000000 0.088743 -0.085762 -0.048301 B2 Long axis 0.088743 1.000000 0.027861 0.210807 B2 Short axis -0.085762 0.027861 1.000000 0.401890 B2 Grain thickness -0.048301 0.210807 0.401890 1.000000 ----------------------------------------------------------------------- B6 Weight(g) 1.000000 0.088743 -0.085762 -0.048301 B6 Long axis 0.088743 1.000000 0.027861 0.210807 B6 Short axis -0.085762 0.027861 1.000000 0.401890 B6 Grain thickness -0.048301 0.210807 0.401890 1.000000

###相関係数を排出するにあたり考えたアプローチ
・ブーリアンインデックスを用いて、各「"BeanNumber_vert"」ごとに(B2,B3,B4...というように)相関係数を排出しようとしましたが、df3が以下の様な画像になりました。その際に識別のために右端の列に対応する「"BeanNumber_vert"」の列が作成できませんでした。

Python3

1lst5 = [] 2for BeanNumber in list(df["BeanNumber_vert"]): 3 df1 = df[df["BeanNumber_vert"] == BeanNumber].corr() 4 lst5.append(df1) 5df3 = pd.concat(lst5)

イメージ説明

・ブーリアンインデックスで上手く「"BeanNumber_vert"」の塊ごとに相関係数を排出できないのであれば、groupbyで
解決をしようと試みました。
相関係数を求めるにあたり、相関係数 = 共分散 ÷ (要素1の標準偏差 × 要素2の標準偏差)の式を実装する際に
groupbyで標準偏差までは求められても、共分散を出すにあたって、偏差を出す事ができませんでした。
分散に√をつければ、実装できなくもなさそうですが、あまりにかけ離れている気がしたので断念しました。

Python3

1Basedata=df.groupby('BeanNumber_vert') 2Std_data =Basedata.std() 3Std_data = Std_data.rename(columns=lambda s: s+"_Std") 4 5Var_data = Basedata.var() 6Var_data = Var_data.rename(columns=lambda s: s+"_Var")

###教えて頂きたい事
相関係数を算出するにあたってブーリアンインデックスを使っての実装を試みていたのですが、上記の
「加工後のデータセット」の様に右端にBeanNumberを追加できません。
算出される相関係数を識別するためのBeanNumberを追加する方法を教えて頂きたいです。
これに限らず、実装できればそれで良いので、これ以外の方法でも大丈夫ですので、教えて頂けたら幸いです。

補足情報(FW/ツールのバージョンなど)

Python3.7
Jupyter NoteBook
お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

df1 = df.groupby("BeanNumberVert")
df1[["Weight", "LongAxis", "ShortAxis", "GrainThickness"]].corr()
で解決する事が出来ました。

他所でこの質問をした時に、用語の使用が分かりづらい、再現できるデータセットがないから回答をする気にならないというご指摘を受けたので、次から気をつけます。

投稿2019/09/01 06:01

Danrussia

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問