🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

618閲覧

csvファイルへのデータ書き出し

naganosouitirou

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/25 05:43

現在rasberrypiとmyowareとmcp3204を使って筋電位の測定をする研究をおこなっています。
下のようなプログラムを組んで文字とエンターを押すたびにデータが保存され、1000×24の表を作成しようと考えています。理想の表も下に示しておきます。いまのプログラムのままではsyakkutuのデータが最後に保存されて表もsyakkutuだけの表になってしまいます。これをそれぞれ、weakness,grasping,opening,syoukutu,haikutu,syakutuの順で横方向に連結して1000×24の表を作りたいです。アドバイスや改善点がありましたらお願いしたいです。

python

1import wiringpi as pi 2import time 3import numpy as np 4import openpyxl as excel 5import spidev 6import threading 7import pandas as pd 8 9SPI_CE = 0 10SPI_SPEED = 5000000 11READ_CH = 0 12VREF = 5 13spi = spidev.SpiDev() 14spi.open(0,0) 15spi.max_speed_hz =SPI_SPEED 16during_time = 0.5 17sampling_rate = 2000 18sampling_num = int(during_time*sampling_rate) 19 20sampling_interval = 1 / sampling_rate 21x = np.arange(0, sampling_num / sampling_rate, sampling_interval) 22y = np.zeros(sampling_num) 23 24def main(): 25 print('測定開始') 26 for i in ['weakness','grasping','opening','syoukutu','haikutu','syakkutu']: 27 print("{}:測定".format(i)) 28 toriga = input() 29 if toriga: 30 MEASURE = measure() 31 data = MEASURE.keisoku() 32 print(data) 33 pd.DataFrame(np.array(data)).T.to_csv('data.csv', index=False, header=False) 34 print("{}:測定終了".format(i)) 35 36class measure(object): 37 def __init__(self): 38 self.data=[] 39 self.data1=[] 40 self.data2=[] 41 self.data3=[] 42 self.Vi = [] 43 self.Vi1= [] 44 self.Vi2= [] 45 self.Vi3= [] 46 47 48 def do_sampling(self,i,time_start):#電圧取得 49 y[i] = time.perf_counter() - time_start 50 51 def read_ch0(self): 52 adc=spi.xfer2([6,0,0]) 53 data=((adc[1]&15)<<8)+adc[2] 54 self.data=data 55 #print('channel0') 56 return 57 58 def read_ch1(self): 59 adc=spi.xfer2([6,0x40,0]) 60 data=((adc[1]&15)<<8)+adc[2] 61 self.data1=data 62 #print('channel1') 63 return 64 65 def read_ch2(self): 66 adc=spi.xfer2([6,0x80,0]) 67 data=((adc[1]&15)<<8)+adc[2] 68 self.data2=data 69 #print('channel2') 70 return 71 72 def read_ch3(self): 73 adc=spi.xfer2([6,0xc0,0]) 74 data=((adc[1]&15)<<8)+adc[2] 75 self.data3=data 76 #print('channel3') 77 return 78 79 def keisoku(self): 80 count=0 81 time_start = time.perf_counter() 82 time_next = time_start 83 Vi=self.Vi 84 Vi1=self.Vi1 85 Vi2=self.Vi2 86 Vi3=self.Vi3 87 while count < sampling_num : 88 self.do_sampling(count, time_start) 89 time_next += sampling_interval 90 thread1 = threading.Thread(target=self.read_ch0) 91 thread2 = threading.Thread(target=self.read_ch1) 92 thread3 = threading.Thread(target=self.read_ch2) 93 thread4 = threading.Thread(target=self.read_ch3) 94 thread1.start() 95 thread2.start() 96 thread3.start() 97 thread4.start() 98 Vi.append(self.data) 99 Vi1.append(self.data1) 100 Vi2.append(self.data2) 101 Vi3.append(self.data3) 102 while (time.perf_counter() < time_next): # 次の時間まで待つ。 103 pass 104 count = count + 1 105 106 return Vi,Vi1,Vi2,Vi3 107 108 109if __name__=='__main__': 110 main()

![イメージ説明]
(3d813534dc1c47f65e28c9ffb80ad9b5.png)

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

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

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

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

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

guest

回答1

0

ベストアンサー

添付してもらったソースコードでは、
1つ計測するたびにdata.csvを新しく作成して上書きしているので、最後の計測のデータしか残りません。
以下のように一旦データをまとめてからファイルに出力すれば意図通りの動作になると思います。

python

1def main(): 2 print('測定開始') 3 all_data = [] 4 for i in ['weakness','grasping','opening','syoukutu','haikutu','syakkutu']: 5 print("{}:測定".format(i)) 6 toriga = input() 7 if toriga: 8 MEASURE = measure() 9 data = MEASURE.keisoku() 10 print(data) 11 all_data.extend(data) 12 print("{}:測定終了".format(i)) 13 14 pd.DataFrame(all_data).T.to_csv('data.csv', index=False, header=False)

投稿2020/11/25 07:27

kzm4269

総合スコア184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問