Python独習!

習得したPython知識をペイフォワード

Pythonでcsv読み込み&書き込み

PythonCSVファイルを読み込み、スプライン補間した後に、CSVファイルに出力する。出力するファイル名にはタイムスタンプをつける。というプログラム。

結果

左が読み込んだCSVファイル。右がスプライン補間後のCSVファイル。
f:id:greenhornprofessional:20200107231658j:plain

プログラム

Python 3.8.1

import csv
import numpy as np
import datetime
from scipy import signal, interpolate
from matplotlib import pylab as plt

#現在の日時を取得する
now = datetime.datetime.now()

#読み込むcsv。ソースと同じフォルダに置く。
fi = '04_peak.csv'
#出力するcsvの名前を定義する。末尾にタイムスタンプ入れる。
fo = '04_peakResult_{0:%Y%m%d%H%M%S}.csv'.format(now)

#csvを読み込んでdata_arrayに格納
with open(fi, mode='r', newline='') as f_in:
    reader = csv.reader(f_in)
    data_array = [row for row in reader]

#デバッグ用:data_arrayの中身を確認する
#print(data_array)
#print(type(data_array))

#data_arrayを1次元配列(リスト)に分けるための配列を定義する
plot_x = []
plot_y = []

#data_arrayの要素を一個ずつ取り出して、各リストに格納する
for i in data_array:
    plot_x.append(float(i[0]))#要素は文字列として扱われているのでfloatに変換する
    plot_y.append(float(i[1]))

#linspaceにx軸データ範囲が必要なのでplot_xの最小値/最大値を調べる
xs = min(plot_x)
xm = max(plot_x)
#print("x軸の最小値は",xs)
#print("x軸の最大値は",xm)

#lilnspaceでデータ補間数を決める
tt = np.linspace(xs, xm, 100)
#print(tt)

#2次スプライン補間
f = interpolate.interp1d(plot_x, plot_y, kind="quadratic")
y = f(tt)

#補間後のx,yをnp.arrayで結合し、エクセルで使いやすいように転置する。
yArry = np.array([tt, y])
yArry_t = yArry.T
#print(yArry)
#print(type(yArry))
#print(yArry_t)
#print(type(yArry_t))

#csvに出力する。
with open(fo, mode='a') as f_out:
    csvWriter = csv.writer(f_out, lineterminator = '\n')
    csvWriter.writerows(yArry_t)

#データプロット
plt.plot(plot_x, plot_y,"r")
plt.plot(tt, y)
plt.show()

[04_ReadWriteCsv_001.py]

参考にしたサイト

tonari-it.com

note.nkmk.me

/* -----codeの行番号----- */