見出し画像

【(前編)Python】複数のcsvファイルを作成して別々のフォルダに保存する。

脱エクセルを目指してPythonを学んでいます。

ここでは、
1.複数のディレクトリを作成
2.データを作成
3.データをデータフレームに入れる
4.csvファイルを作成してフォルダに保存する
5.2~4を関数にまとめて複数のデータを各フォルダに保存する

こちらをPythonのみでやってみます。

あまりこのような状況に陥ることがないかもしれませんが、【(後編)Python】別々のフォルダ内のcsvファイルをグラフ化する。というnoteを作ろうと考えています。

別々のフォルダに保存されたcsvファイルを読み込んでグラフ化したいという場合は多々ありませよね。ただ、実務のデータを使うわけにはいかないのでまず自分でデータを作っておこうかなと思っています。

エクセルなどでひとつひとつデータを用意するのは面倒なのでPythonでやってやりたいという狙いがあります。

つまり、このnoteは「後編」のための準備という位置づけです。

ですので、今回作成するデータはただテキトウに作るだけなのでデータ自体には意味がありません。

【使用環境】
Pythonの使用環境はGoogle colaboratoryをしようしています。
Google のアカウントひとつでPythonが使用できるを作ることができます。

コードの詳細の説明はブログで解説します。

このnoteでは「Python初心者」に毛が生えた程度の人を想定しています。

1.複数のディレクトリを作成

まず、4つのディレクリを作成します。

import os

path = os.getcwd()

dirs = ['data_A','data_B', 'data_C', 'data_D']

for dir in dirs:
 os.mkdir(dir)

print(path)
print(os.listdir())

画像1

ディレクトリを4つ作成しました。

2.データを作成

複数のcsvファイルを作成するのは難しくなるので、まずひとつcsvファイルに4つのデータを作成してみます。

import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

time = np.linspace(0,100,101)
x1 = np.sin(time*random.randint(0,5))
x2 = np.sin(time*random.randint(0,5))
x3 = np.sin(time*random.randint(0,5))
x4 = np.sin(time*random.randint(0,5))

plt.plot(time,x1)
plt.plot(time,x2)
plt.plot(time,x3)
plt.plot(time,x4)

画像6

4つのデータができました。

データは以下としています。

time = np.linspace(0,100,101)
x1 = np.sin(time*random.randint(0,5))
x2 = np.sin(time*random.randint(0,5))
x3 = np.sin(time*random.randint(0,5))
x4 = np.sin(time*random.randint(0,5))

「x1 = np.sin(time*random.randint(0,5))」はsin関数に周波数をランダムにするような細工をしています。

複数のデータ(今回は4つ)を別々のデータして作成したいのでこのようにしています。

3.データをデータフレームに入れる

作成したデータをpandasを使ってデータフレームに入れておくと便利です。

df_t = pd.DataFrame(time)
df_x1 = pd.DataFrame(x1)
df_x2 = pd.DataFrame(x2)
df_x3 = pd.DataFrame(x3)
df_x4 = pd.DataFrame(x4)

df = pd.concat([df_t, df_x1,df_x2,df_x3,df_x4], axis=1)
df.columns = ['time(sec)', 'x1(m)','x2(m)','x3(m)','x4(m)']
df

画像6

エクセルのようにきれいに表を作成してくれます。

4.csvファイルを作成してフォルダに保存する

先ほど作成したデータをcsvファイルで保存します。

#csvで保存する

save_dir = dirs[0] + '/test.csv'
df.to_csv(save_dir,index=False)

■ dirs[0] としているので dirsリストのindex=0である'data_A'というフォルダにcsvファイルを保存しているということになります。

■ df.to_csv(save_dir,,index=False)でcsvファイルを保存しています。
引数のindex=Falseはデータの1列目にindex numberを作らない指定です。

画像4

これでcsvファイルができました。

※今はテスト計算ですので作成した「test.csv」はいったん消しておきましょう。

5.2~4を関数にまとめて複数のデータを各フォルダに保存する

2.データを作成
3.データをデータフレームに入れる
4.csvファイルを作成してフォルダに保存する

こちらの作業はデータをひとつ作成してcsvファイルとして保存するというものですので、複数のデータを各フォルダに保存するためには関数にしてまとめてやると良いですね。

import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def make_csv(i):
 time = np.linspace(0,100,101)
 x1 = np.sin(time*random.randint(0,5))
 x2 = np.sin(time*random.randint(0,5))
 x3 = np.sin(time*random.randint(0,5))
 x4 = np.sin(time*random.randint(0,5))
   
 df_t = pd.DataFrame(time)
 df_x1 = pd.DataFrame(x1)
 df_x2 = pd.DataFrame(x2)
 df_x3 = pd.DataFrame(x3)
 df_x4 = pd.DataFrame(x4)

 df = pd.concat([df_t, df_x1,df_x2,df_x3,df_x4], axis=1)
 df.columns = ['time(sec)', 'x1(m)','x2(m)','x3(m)','x4(m)']

 #csvで保存する
 save_dir = dirs[i] + '/test.csv'
 df.to_csv(save_dir,index=False)

これでデータを作成してcsvファイルを保存するという関数ができました。

あとはこの関数を呼びだせばよいです。

for i, dir_ in enumerate(dirs):
 make_csv(i)

画像5

これでcsvファイルが各フォルダに保存されました(^^)/

確認のため左側のツリーの「'./data_A/test.csv'」をダブルクリックしてデータを確認してみてください。

画像6

1行目には「ヘッダー」が入っており、
2行目以降が「データ」です。

うまくいってそうです。

今回は以上です。

是非、後編もお読みください(^^)/

Twitter➡@t_kun_kamakiri
ブログ➡宇宙に入ったカマキリ(物理ブログ)

この記事が気に入ったらサポートをしてみませんか?