質問編集履歴
5
内容の明確化
test
CHANGED
File without changes
|
test
CHANGED
@@ -1 +1,145 @@
|
|
1
|
+
### 前提・実現したいこと
|
2
|
+
|
3
|
+
Pythonを使用して、既存のDataFrame(下記の「加工前のデータセット(df)」)を基に相関係数を排出したいと思っています。
|
4
|
+
|
5
|
+
具体的なデータセットのイメージとしては、下記の「加工後のデータセット」の様な感じです。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
###加工前のデータセット(df)
|
10
|
+
|
11
|
+
```
|
12
|
+
|
13
|
+
|Weight(g)|Long axis|Short axis|Grain thickness|Sumple_vert|BeanNumber_vert|
|
14
|
+
|
15
|
+
|:--|:--:|--:|--:|--:|--:|
|
16
|
+
|
17
|
+
|0.43|0.92|0.91|0.73|くるみ豆|B2|
|
18
|
+
|
19
|
+
|0.4 |0,90|0.89|0.56|くるみ豆|B2|
|
20
|
+
|
21
|
+
|0.45|1.04|0.97|0.63|くるみ豆|B2|
|
22
|
+
|
23
|
+
|0.41|...||||
|
24
|
+
|
25
|
+
||0.4|0.97|0.92|0.74|五葉黒豆|B6|
|
26
|
+
|
27
|
+
|0.35|0.97|0.88|0.51|五葉黒豆|B6||
|
28
|
+
|
29
|
+
|0.43|...||||
|
30
|
+
|
31
|
+
|0.51|1.21|0.95|0.77|濃緑丸豆|B39|
|
32
|
+
|
33
|
+
|0.43|0.92|0.85|0.83|濃緑丸豆|B39|
|
34
|
+
|
35
|
+
|0.43|0.93|0.90|0.55|濃緑丸豆|B39|
|
36
|
+
|
37
|
+
|0.48|1.10|0.96|0.67|濃緑丸豆|B39|
|
38
|
+
|
39
|
+
|0.38|0.91|0.85|0.54|濃緑丸豆|B39|
|
40
|
+
|
41
|
+
```
|
42
|
+
|
43
|
+
### 加工後のデータセット
|
44
|
+
|
45
|
+
```
|
46
|
+
|
47
|
+
Weight(g) Long axis Short axis Grain thickness
|
48
|
+
|
49
|
+
B2 Weight(g) 1.000000 0.088743 -0.085762 -0.048301
|
50
|
+
|
51
|
+
B2 Long axis 0.088743 1.000000 0.027861 0.210807
|
52
|
+
|
53
|
+
B2 Short axis -0.085762 0.027861 1.000000 0.401890
|
54
|
+
|
55
|
+
B2 Grain thickness -0.048301 0.210807 0.401890 1.000000
|
56
|
+
|
57
|
+
-----------------------------------------------------------------------
|
58
|
+
|
59
|
+
B6 Weight(g) 1.000000 0.088743 -0.085762 -0.048301
|
60
|
+
|
61
|
+
B6 Long axis 0.088743 1.000000 0.027861 0.210807
|
62
|
+
|
63
|
+
B6 Short axis -0.085762 0.027861 1.000000 0.401890
|
64
|
+
|
65
|
+
B6 Grain thickness -0.048301 0.210807 0.401890 1.000000
|
66
|
+
|
67
|
+
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
###相関係数を排出するにあたり考えたアプローチ
|
72
|
+
|
73
|
+
・ブーリアンインデックスを用いて、各「"BeanNumber_vert"」ごとに(B2,B3,B4...というように)相関係数を排出しようとしましたが、df3が以下の様な画像になりました。その際に識別のために右端の列に対応する「"BeanNumber_vert"」の列が作成できませんでした。
|
74
|
+
|
75
|
+
```Python3
|
76
|
+
|
77
|
+
lst5 = []
|
78
|
+
|
79
|
+
for BeanNumber in list(df["BeanNumber_vert"]):
|
80
|
+
|
81
|
+
df1 = df[df["BeanNumber_vert"] == BeanNumber].corr()
|
82
|
+
|
83
|
+
lst5.append(df1)
|
84
|
+
|
85
|
+
df3 = pd.concat(lst5)
|
86
|
+
|
87
|
+
```
|
88
|
+
|
89
|
+
![イメージ説明](321bd93edc9995bd9e031fb0a85cb8e8.png)
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
・ブーリアンインデックスで上手く「"BeanNumber_vert"」の塊ごとに相関係数を排出できないのであれば、groupbyで
|
96
|
+
|
97
|
+
解決をしようと試みました。
|
98
|
+
|
99
|
+
相関係数を求めるにあたり、相関係数 = 共分散 ÷ (要素1の標準偏差 × 要素2の標準偏差)の式を実装する際に
|
100
|
+
|
101
|
+
groupbyで標準偏差までは求められても、共分散を出すにあたって、偏差を出す事ができませんでした。
|
102
|
+
|
103
|
+
分散に√をつければ、実装できなくもなさそうですが、あまりにかけ離れている気がしたので断念しました。
|
104
|
+
|
105
|
+
```Python3
|
106
|
+
|
1
|
-
|
107
|
+
Basedata=df.groupby('BeanNumber_vert')
|
108
|
+
|
109
|
+
Std_data =Basedata.std()
|
110
|
+
|
111
|
+
Std_data = Std_data.rename(columns=lambda s: s+"_Std")
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
Var_data = Basedata.var()
|
116
|
+
|
117
|
+
Var_data = Var_data.rename(columns=lambda s: s+"_Var")
|
118
|
+
|
119
|
+
```
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
###教えて頂きたい事
|
124
|
+
|
125
|
+
相関係数を算出するにあたってブーリアンインデックスを使っての実装を試みていたのですが、上記の
|
126
|
+
|
127
|
+
「加工後のデータセット」の様に右端にBeanNumberを追加できません。
|
128
|
+
|
129
|
+
算出される相関係数を識別するためのBeanNumberを追加する方法を教えて頂きたいです。
|
130
|
+
|
131
|
+
これに限らず、実装できればそれで良いので、これ以外の方法でも大丈夫ですので、教えて頂けたら幸いです。
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
### 補足情報(FW/ツールのバージョンなど)
|
138
|
+
|
139
|
+
Python3.7
|
140
|
+
|
141
|
+
Jupyter NoteBook
|
142
|
+
|
143
|
+
お忙しいとは思いますが、よろしくお願いいたします。
|
144
|
+
|
145
|
+
情報に不足がありましたら、ご指摘お願いいたします。
|
4
大幅改変中
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,163 +1 @@
|
|
1
|
-
### 前提・実現したいこと(2019/08/31 17:51 一部編集)
|
2
|
-
|
3
|
-
Pythonを使用して、既存のDataFrame(下記の"加工前のデータセット(df)")から
|
4
|
-
|
5
|
-
下記の"加工後のデータセット"を作りたいと思っています。
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
具体的には、データセット"BeanNumber_vert"の列に対して、ブーリアンインデックスを使って、B2,B3,B4,B5,B6‥‥
|
10
|
-
|
11
|
-
という風に各まとまりごとに.corrを使って相関係数を算出し、"加工後のデータセット"のようなDataFrameを作りたいと思っています。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
### 加工前のデータセット(df)
|
16
|
-
|
17
|
-
```
|
18
|
-
|
19
|
-
|Weight(g)|Long axis|Short axis|Grain thickness|Sumple_vert|BeanNumber_vert|
|
20
|
-
|
21
|
-
|:--|:--:|--:|--:|--:|--:|
|
22
|
-
|
23
|
-
|0.43|0.92|0.91|0.73|くるみ豆|B2|
|
24
|
-
|
25
|
-
|0.4 |0,90|0.89|0.56|くるみ豆|B2|
|
26
|
-
|
27
|
-
|0.45|1.04|0.97|0.63|くるみ豆|B2|
|
28
|
-
|
29
|
-
|0.41|...||||
|
30
|
-
|
31
|
-
||0.4|0.97|0.92|0.74|五葉黒豆|B6|
|
32
|
-
|
33
|
-
|0.35|0.97|0.88|0.51|五葉黒豆|B6||
|
34
|
-
|
35
|
-
|0.43|...||||
|
36
|
-
|
37
|
-
|0.51|1.21|0.95|0.77|濃緑丸豆|B39|
|
38
|
-
|
39
|
-
|0.43|0.92|0.85|0.83|濃緑丸豆|B39|
|
40
|
-
|
41
|
-
|0.43|0.93|0.90|0.55|濃緑丸豆|B39|
|
42
|
-
|
43
|
-
|0.48|1.10|0.96|0.67|濃緑丸豆|B39|
|
44
|
-
|
45
|
-
|0.38|0.91|0.85|0.54|濃緑丸豆|B39|
|
46
|
-
|
47
|
-
```
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
### 加工後のデータセット
|
56
|
-
|
57
|
-
```
|
58
|
-
|
59
|
-
Weight(g) Long axis Short axis Grain thickness
|
60
|
-
|
61
|
-
B2 Weight(g) 1.000000 0.088743 -0.085762 -0.048301
|
62
|
-
|
63
|
-
B2 Long axis 0.088743 1.000000 0.027861 0.210807
|
64
|
-
|
65
|
-
B2 Short axis -0.085762 0.027861 1.000000 0.401890
|
66
|
-
|
67
|
-
B2 Grain thickness -0.048301 0.210807 0.401890 1.000000
|
68
|
-
|
69
|
-
-----------------------------------------------------------------------
|
70
|
-
|
71
|
-
B6 Weight(g) 1.000000 0.088743 -0.085762 -0.048301
|
72
|
-
|
73
|
-
B6 Long axis 0.088743 1.000000 0.027861 0.210807
|
74
|
-
|
75
|
-
B6 Short axis -0.085762 0.027861 1.000000 0.401890
|
76
|
-
|
77
|
-
B6 Grain thickness -0.048301 0.210807 0.401890 1.000000
|
78
|
-
|
79
|
-
```
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
1
|
+
方向性に大幅な変更があったため、改変中(2019/08/31)
|
84
|
-
|
85
|
-
エラーコードを読み解いて見ると、該当コードのdf2がどうやらDataframe形式ではないみたいなので、
|
86
|
-
|
87
|
-
type(df2)で確認してみた所、"method"という結果になりました。
|
88
|
-
|
89
|
-
method型をlist型(df型)に直す方法を探してみましたが、見つかりませんでした。
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
(2019/08/31 16:51 追記)
|
94
|
-
|
95
|
-
df2が何故method型になる原因を探ってみた所、単純に""df.coor""という書き方が間違っていたのに気づきました。
|
96
|
-
|
97
|
-
"df.coor()"という書き方に直したら、エラーコードが消えました。
|
98
|
-
|
99
|
-
(それに合わせて該当のコードの書き直し、発生するエラーコードの削除を行いました。)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
###実装上の課題(2019/08/31 17:10 追記)
|
104
|
-
|
105
|
-
課題に対して試した事.1の後に、以下の課題にぶつかりました。
|
106
|
-
|
107
|
-
・ブーリアンインデックスで"BeanNumber_vert"ごとにlst2に入れ.concat(lst2)を行い、これをcsv形式にして排出するが、図の様な形になり、加工後のデータセットの様な形にならない。
|
108
|
-
|
109
|
-
![イメージ説明](0743ddee5dce706e0189208729587f37.png)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
###該当のコード
|
122
|
-
|
123
|
-
```Python3
|
124
|
-
|
125
|
-
lst2 = []
|
126
|
-
|
127
|
-
for BeanNumber in list(df["BeanNumber_vert"]):
|
128
|
-
|
129
|
-
df1 = df[df["BeanNumber_vert"] == BeanNumber]
|
130
|
-
|
131
|
-
df2=df1.corr()
|
132
|
-
|
133
|
-
lst2.append(df2)
|
134
|
-
|
135
|
-
df3 = pd.concat(lst2)
|
136
|
-
|
137
|
-
```
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
### 補足情報(FW/ツールのバージョンなど)
|
156
|
-
|
157
|
-
Python3.7
|
158
|
-
|
159
|
-
Jupyter NoteBook
|
160
|
-
|
161
|
-
お忙しいとは思いますが、よろしくお願いいたします。
|
162
|
-
|
163
|
-
情報に不足がありましたら、ご指摘お願いいたします。
|
3
内容の明確化
test
CHANGED
File without changes
|
test
CHANGED
@@ -92,7 +92,7 @@
|
|
92
92
|
|
93
93
|
(2019/08/31 16:51 追記)
|
94
94
|
|
95
|
-
df2が何故
|
95
|
+
df2が何故method型になる原因を探ってみた所、単純に""df.coor""という書き方が間違っていたのに気づきました。
|
96
96
|
|
97
97
|
"df.coor()"という書き方に直したら、エラーコードが消えました。
|
98
98
|
|
2
内容の明確化
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
### 前提・実現したいこと
|
1
|
+
### 前提・実現したいこと(2019/08/31 17:51 一部編集)
|
2
2
|
|
3
3
|
Pythonを使用して、既存のDataFrame(下記の"加工前のデータセット(df)")から
|
4
4
|
|
@@ -9,112 +9,6 @@
|
|
9
9
|
具体的には、データセット"BeanNumber_vert"の列に対して、ブーリアンインデックスを使って、B2,B3,B4,B5,B6‥‥
|
10
10
|
|
11
11
|
という風に各まとまりごとに.corrを使って相関係数を算出し、"加工後のデータセット"のようなDataFrameを作りたいと思っています。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
実装するにあたって、以下2点の課題にぶつかりました。
|
16
|
-
|
17
|
-
・ブーリアンインデックスで"BeanNumber_vert"ごとにlst2に入れ、最後に.concatする際に発生するエラーコードを
|
18
|
-
|
19
|
-
解決できない
|
20
|
-
|
21
|
-
・.corrで相関係数の表を出す際に、"加工後のデータセット"の様な形で右端に"BeanNumber_vert"の数字を入れる方法
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
### 課題に対して試した事(2019/08/31 16:45 追記)
|
26
|
-
|
27
|
-
エラーコードの文法を読み解いて見ると、該当コードのdf2がどうやらDataframe形式ではないみたいなので、
|
28
|
-
|
29
|
-
type(df2)で確認してみた所、"method"という結果になりました。
|
30
|
-
|
31
|
-
method型をlist型(df型)に直す方法を探してみましたが、見つかりませんでした。
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
###該当のコード
|
48
|
-
|
49
|
-
```Python3
|
50
|
-
|
51
|
-
lst2 = []
|
52
|
-
|
53
|
-
for BeanNumber in list(df["BeanNumber_vert"]):
|
54
|
-
|
55
|
-
df1 = df[df["BeanNumber_vert"] == BeanNumber]
|
56
|
-
|
57
|
-
df2=df1.corr
|
58
|
-
|
59
|
-
lst2.append(df2)
|
60
|
-
|
61
|
-
df3 = pd.concat(lst2)
|
62
|
-
|
63
|
-
```
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
### 発生するエラーコード
|
68
|
-
|
69
|
-
```Python3
|
70
|
-
|
71
|
-
---------------------------------------------------------------------------
|
72
|
-
|
73
|
-
TypeError Traceback (most recent call last)
|
74
|
-
|
75
|
-
<ipython-input-64-297f2ef1eee6> in <module>()
|
76
|
-
|
77
|
-
----> 1 df3 = pd.concat(lst2)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
|
82
|
-
|
83
|
-
223 keys=keys, levels=levels, names=names,
|
84
|
-
|
85
|
-
224 verify_integrity=verify_integrity,
|
86
|
-
|
87
|
-
--> 225 copy=copy, sort=sort)
|
88
|
-
|
89
|
-
226 return op.get_result()
|
90
|
-
|
91
|
-
227
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in __init__(self, objs, axis, join, join_axes, keys, levels, names, ignore_index, verify_integrity, copy, sort)
|
96
|
-
|
97
|
-
284 ' only pd.Series, pd.DataFrame, and pd.Panel'
|
98
|
-
|
99
|
-
285 ' (deprecated) objs are valid'.format(type(obj)))
|
100
|
-
|
101
|
-
--> 286 raise TypeError(msg)
|
102
|
-
|
103
|
-
287
|
104
|
-
|
105
|
-
288 # consolidate
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
TypeError: cannot concatenate object of type "<class 'method'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid
|
110
|
-
|
111
|
-
```
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
12
|
|
119
13
|
|
120
14
|
|
@@ -186,6 +80,78 @@
|
|
186
80
|
|
187
81
|
|
188
82
|
|
83
|
+
### 課題に対して試した事.1(2019/08/31 16:45 編集)
|
84
|
+
|
85
|
+
エラーコードを読み解いて見ると、該当コードのdf2がどうやらDataframe形式ではないみたいなので、
|
86
|
+
|
87
|
+
type(df2)で確認してみた所、"method"という結果になりました。
|
88
|
+
|
89
|
+
method型をlist型(df型)に直す方法を探してみましたが、見つかりませんでした。
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
(2019/08/31 16:51 追記)
|
94
|
+
|
95
|
+
df2が何故リスト型になる原因を探ってみた所、単純に""df.coor""という書き方が間違っていたのに気づきました。
|
96
|
+
|
97
|
+
"df.coor()"という書き方に直したら、エラーコードが消えました。
|
98
|
+
|
99
|
+
(それに合わせて該当のコードの書き直し、発生するエラーコードの削除を行いました。)
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
###実装上の課題(2019/08/31 17:10 追記)
|
104
|
+
|
105
|
+
課題に対して試した事.1の後に、以下の課題にぶつかりました。
|
106
|
+
|
107
|
+
・ブーリアンインデックスで"BeanNumber_vert"ごとにlst2に入れ.concat(lst2)を行い、これをcsv形式にして排出するが、図の様な形になり、加工後のデータセットの様な形にならない。
|
108
|
+
|
109
|
+
![イメージ説明](0743ddee5dce706e0189208729587f37.png)
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
###該当のコード
|
122
|
+
|
123
|
+
```Python3
|
124
|
+
|
125
|
+
lst2 = []
|
126
|
+
|
127
|
+
for BeanNumber in list(df["BeanNumber_vert"]):
|
128
|
+
|
129
|
+
df1 = df[df["BeanNumber_vert"] == BeanNumber]
|
130
|
+
|
131
|
+
df2=df1.corr()
|
132
|
+
|
133
|
+
lst2.append(df2)
|
134
|
+
|
135
|
+
df3 = pd.concat(lst2)
|
136
|
+
|
137
|
+
```
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
189
155
|
### 補足情報(FW/ツールのバージョンなど)
|
190
156
|
|
191
157
|
Python3.7
|
1
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -19,6 +19,28 @@
|
|
19
19
|
解決できない
|
20
20
|
|
21
21
|
・.corrで相関係数の表を出す際に、"加工後のデータセット"の様な形で右端に"BeanNumber_vert"の数字を入れる方法
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
### 課題に対して試した事(2019/08/31 16:45 追記)
|
26
|
+
|
27
|
+
エラーコードの文法を読み解いて見ると、該当コードのdf2がどうやらDataframe形式ではないみたいなので、
|
28
|
+
|
29
|
+
type(df2)で確認してみた所、"method"という結果になりました。
|
30
|
+
|
31
|
+
method型をlist型(df型)に直す方法を探してみましたが、見つかりませんでした。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
22
44
|
|
23
45
|
|
24
46
|
|