質問編集履歴

5

内容の明確化

2019/08/31 14:33

投稿

Danrussia
Danrussia

スコア44

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
- 方向性に大幅な変更があったため、改変中(2019/08/31)
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

大幅改変中

2019/08/31 14:33

投稿

Danrussia
Danrussia

スコア44

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 16:45 編集)
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

内容の明確化

2019/08/31 13:38

投稿

Danrussia
Danrussia

スコア44

test CHANGED
File without changes
test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  (2019/08/31 16:51 追記)
94
94
 
95
- df2が何故リスト型になる原因を探ってみた所、単純に""df.coor""という書き方が間違っていたのに気づきました。
95
+ df2が何故method型になる原因を探ってみた所、単純に""df.coor""という書き方が間違っていたのに気づきました。
96
96
 
97
97
  "df.coor()"という書き方に直したら、エラーコードが消えました。
98
98
 

2

内容の明確化

2019/08/31 08:13

投稿

Danrussia
Danrussia

スコア44

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

追記

2019/08/31 08:12

投稿

Danrussia
Danrussia

スコア44

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