質問編集履歴

5

問題が数点解決されたため、現状のコードをまとめました

2019/12/04 07:30

投稿

MM2
MM2

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
- **dsとうデータフレームのFxという列にあるデータについて、以下のように処理を行っています。
1
+ #実現した
2
2
 
3
+ dsというデータフレームのFxという列にあるデータについて、以下のように処理を行っています。
4
+
3
- 現在はds['Fx'][0:29]について計算をするとtupleで1値が与えられ、その値をds['psd_px'][0:29]に30個連続で同じ値が代入されるという形になっています。**
5
+ 現在はds['Fx'][0:29]について計算をするとtupleで1値が与えられ、その値をds['psd_px'][0:29]に30個連続で同じ値が代入されるという形になっています。
4
6
 
5
7
 
6
8
 
@@ -26,23 +28,17 @@
26
28
 
27
29
 
28
30
 
29
- **上記を、[0:29]の処理が終わった後、続けて[30:59]の計算をして[30:59]に同じ値が代入される、のように30個ずつ続けて最後の行まで繰り返すような実装を行いたいと考えています。
31
+ 上記を、[0:29]の処理が終わった後、続けて[30:59]の計算をして[30:59]に同じ値が代入される、のように30個ずつ続けて最後の行まで繰り返すような実装を行いたいと考えています。
30
32
 
31
- このような繰り返し実装を行う方法を教えて頂きたいです。**
33
+ このような繰り返し実装を行う方法を教えて頂きたいです。
32
34
 
33
- **ご指導よろしくお願いいたします。**
35
+ ご指導よろしくお願いいたします。
34
36
 
35
37
 
36
38
 
37
- 現状できていること
39
+ #現状
38
40
 
39
41
  皆さんのアドバイスを参考に以下のように組みなおした所、for文を使って繰り返し値を代入することが出来ました。
40
-
41
- 残りの解決したい問題としては以下の一点です。
42
-
43
- ① 結果を出すためにnumsというリストを作ったが、本来は最後の行まで行けば終了としたい
44
-
45
-  (このコードを将来的にいくつかのファイルに適応させたい、ファイルによって行数が異なるため一つの値に定められない)
46
42
 
47
43
 
48
44
 
@@ -50,24 +46,30 @@
50
46
 
51
47
  nums = [0,1,2,3]
52
48
 
53
- maxlist = []
49
+ xlist = []
50
+
51
+ ylist = []
54
52
 
55
53
  for i in nums:
56
54
 
57
- #psd検出
58
-
59
55
  f,psd=signal.welch(ds['Fx'][i*30:(i+1)*30-1])
60
-
61
- #ピーク検出
62
56
 
63
57
    maxid = signal.argrelmax(psd, order=30)
64
58
 
65
- maxlist.extend(psd[maxid])
59
+ xlist.extend(f[maxid])
66
60
 
67
- print(maxlist)
61
+ ylist.extend(psd[maxid])
62
+
63
+ ds['PSDx_fx'] = pd.DataFrame(xlist)
64
+
65
+ ds['PSDy_fx'] = pd.DataFrame(ylist)
68
66
 
69
67
  ```
70
68
 
71
- 出力:
72
69
 
70
+
71
+ #質問
72
+
73
- [0.3163878211460136, 0.002589652710584882, 0.00021522803200603837, 2.642731404207304e-05]
73
+ 結果を出すために上記のコード上ではnumsというリストを作り、i==3となるまで繰り返しが行われるようになっているのですが、これをリストを使わず、ds['Fx']の列の末尾に来た段階で終了する、というように書き換えるにはどうすればよいでしょうか?
74
+
75
+  (このコードを将来的にいくつかのファイルに適応させたい、ファイルによって行数が異なるため一つの値に定められない)

4

アドバイスを参考にコードを書き換えた為編集しました。

2019/12/04 07:30

投稿

MM2
MM2

スコア8

test CHANGED
File without changes
test CHANGED
@@ -36,15 +36,13 @@
36
36
 
37
37
  ・現状できていること
38
38
 
39
- 皆さんのアドバイスを参考に以下のように組みなおしました。
39
+ 皆さんのアドバイスを参考に以下のように組みなおした所、for文を使って繰り返し値を代入することが出来ました。
40
40
 
41
- 起こって問題としては
41
+ 残りの解決したい問題としては以下の一点です。
42
42
 
43
43
  ① 結果を出すためにnumsというリストを作ったが、本来は最後の行まで行けば終了としたい
44
44
 
45
45
   (このコードを将来的にいくつかのファイルに適応させたい、ファイルによって行数が異なるため一つの値に定められない)
46
-
47
- ② 出力されたlistがarrayで代入されている?
48
46
 
49
47
 
50
48
 
@@ -64,10 +62,12 @@
64
62
 
65
63
    maxid = signal.argrelmax(psd, order=30)
66
64
 
67
- maxlist.extend(maxid)
65
+ maxlist.extend(psd[maxid])
68
66
 
69
67
  print(maxlist)
70
68
 
71
69
  ```
72
70
 
71
+ 出力:
72
+
73
- 出力:[array([1], dtype=int64), array([1], dtype=int64), array([3], dtype=int64), array([5], dtype=int64)]
73
+ [0.3163878211460136, 0.002589652710584882, 0.00021522803200603837, 2.642731404207304e-05]

3

アドバイスを参考にコードを書き換えた為編集しました。

2019/12/04 05:00

投稿

MM2
MM2

スコア8

test CHANGED
File without changes
test CHANGED
@@ -36,15 +36,15 @@
36
36
 
37
37
  ・現状できていること
38
38
 
39
- 皆さんの質問を参考に以下のように記入しました。
39
+ 皆さんのアドバイスを参考に以下のように組みなおしました。
40
40
 
41
- 問題としては2点で、
41
+ 起こっている問題としては
42
42
 
43
43
  ① 結果を出すためにnumsというリストを作ったが、本来は最後の行まで行けば終了としたい
44
44
 
45
45
   (このコードを将来的にいくつかのファイルに適応させたい、ファイルによって行数が異なるため一つの値に定められない)
46
46
 
47
- ② 出力されるリストにmaxidの値が入ていない
47
+ ② 出力されたlistarrayで代されている?
48
48
 
49
49
 
50
50
 
@@ -52,22 +52,22 @@
52
52
 
53
53
  nums = [0,1,2,3]
54
54
 
55
+ maxlist = []
56
+
55
57
  for i in nums:
56
58
 
57
- #psd検出
59
+ #psd検出
58
60
 
59
- f,psd=signal.welch(ds['Fx'][i*30:(i+1)*30-1])
61
+ f,psd=signal.welch(ds['Fx'][i*30:(i+1)*30-1])
60
62
 
61
- #ピーク検出
63
+ #ピーク検出
62
64
 
63
- maxid = signal.argrelmax(psd, order=30)
65
+   maxid = signal.argrelmax(psd, order=30)
64
66
 
65
- #maxidは'tuple'で出てくるみたいなので、それをDFに変換
67
+ maxlist.extend(maxid)
66
68
 
67
- ds['psd_px']=np.nan
68
-
69
- ds.loc[i*30:(i+1)*30-1,'psd_px']=maxid
70
-
71
- print(ds)
69
+ print(maxlist)
72
70
 
73
71
  ```
72
+
73
+ 出力:[array([1], dtype=int64), array([1], dtype=int64), array([3], dtype=int64), array([5], dtype=int64)]

2

質問内容について追記しました:質問は繰り返し実装の方法を教えていただきたいというものですが、現状できているコードと問題点についても追記しました。

2019/12/04 03:17

投稿

MM2
MM2

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,6 @@
1
- dsというデータフレームのFxという列にあるデータについて、以下のように処理を行っています。
1
+ **dsというデータフレームのFxという列にあるデータについて、以下のように処理を行っています。
2
2
 
3
- 現在はds['Fx'][0:29]について計算をするとtupleで1値が与えられ、その値をds['psd_px'][0:29]に30個連続で同じ値が代入されるという形になっています。
3
+ 現在はds['Fx'][0:29]について計算をするとtupleで1値が与えられ、その値をds['psd_px'][0:29]に30個連続で同じ値が代入されるという形になっています。**
4
-
5
-
6
-
7
- それを、[0:29]の処理が終わった後、続けて[30:59]の計算をして[30:59]に同じ値が代入される、のように30個ずつ続けて列の最終まで繰り返すような実装を行いたいと考えています。
8
-
9
-
10
-
11
- 繰り返し処理の実装方法について、アドバイスを頂きたく投稿いたしました。
12
-
13
- ご指導よろしくお願いいたします。
14
4
 
15
5
 
16
6
 
@@ -36,4 +26,48 @@
36
26
 
37
27
 
38
28
 
29
+ **上記を、[0:29]の処理が終わった後、続けて[30:59]の計算をして[30:59]に同じ値が代入される、のように30個ずつ続けて最後の行まで繰り返すような実装を行いたいと考えています。
30
+
31
+ このような繰り返し実装を行う方法を教えて頂きたいです。**
32
+
33
+ **ご指導よろしくお願いいたします。**
34
+
35
+
36
+
37
+ ・現状できていること
38
+
39
+ 皆さんの質問を参考に以下のように記入しました。
40
+
41
+ 問題としては2点で、
42
+
43
+ ① 結果を出すためにnumsというリストを作ったが、本来は最後の行まで行けば終了としたい
44
+
45
+  (このコードを将来的にいくつかのファイルに適応させたい、ファイルによって行数が異なるため一つの値に定められない)
46
+
47
+ ② 出力されるリストにmaxidの値が入っていない
48
+
49
+
50
+
51
+ ```python
52
+
53
+ nums = [0,1,2,3]
54
+
55
+ for i in nums:
56
+
57
+ #psd検出
58
+
59
+ f,psd=signal.welch(ds['Fx'][i*30:(i+1)*30-1])
60
+
61
+ #ピーク検出
62
+
63
+ maxid = signal.argrelmax(psd, order=30)
64
+
65
+ #maxidは'tuple'で出てくるみたいなので、それをDFに変換
66
+
67
+ ds['psd_px']=np.nan
68
+
39
- for文で実装を試みましたが、int型は繰り返しが出来ない等のエラーが出てしまいうまくいっていません。
69
+ ds.loc[i*30:(i+1)*30-1,'psd_px']=maxid
70
+
71
+ print(ds)
72
+
73
+ ```

1

質問内容について追記しました:繰り返し処理の実装についてアドバイスを頂きたいです。

2019/12/02 08:36

投稿

MM2
MM2

スコア8

test CHANGED
File without changes
test CHANGED
@@ -7,6 +7,8 @@
7
7
  それを、[0:29]の処理が終わった後、続けて[30:59]の計算をして[30:59]に同じ値が代入される、のように30個ずつ続けて列の最終まで繰り返すような実装を行いたいと考えています。
8
8
 
9
9
 
10
+
11
+ 繰り返し処理の実装方法について、アドバイスを頂きたく投稿いたしました。
10
12
 
11
13
  ご指導よろしくお願いいたします。
12
14
 
@@ -31,3 +33,7 @@
31
33
 
32
34
 
33
35
  ```
36
+
37
+
38
+
39
+ for文で実装を試みましたが、int型は繰り返しが出来ない等のエラーが出てしまいうまくいっていません。