本記事に記載してるコードの仕様説明をします。下図のようなcsvファイルがある。
aaa,bbb,y,x,ccc
0.01,1,100,1,10
0.025,2,40,2.5,9
0.05,3,20,5,8
0.075,4,13.33333333,7.5,7
0.1,5,10,10,6
0.2,6,5,20,5
0.3,7,3.333333333,30,4
0.4,8,2.5,40,3
0.5,9,2,50,2
0.6,10,1.666666667,60,1
0.7,11,1.428571429,70,0
0.8,12,1.25,80,-1
0.9,13,1.111111111,90,-2
1,14,1,100,-3
▼1. pandasのデータフレーム型で読み込んだ後に、x軸とy軸にする2列を指定して下図のように散布図を作成する

そして、次の2~5のようなcsvファイルを作成します。
▼2. 下図のようにx,y列の2列の値で平均二乗和(root mean square, RMS)を計算して、RMSの列を作成する

▼3. 元のcsvファイルにRMSの列を連結する

▼4. RMSが最小と最大の行を抽出

▼5. 転置

■本プログラム
import os, math
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def main():
df = pd.read_csv(file_path, skiprows=0, encoding='utf-8')
print(df)
my_fontsize = 12
fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(1,1,1)
ax.scatter(x=df[target_columns[0]], y=df[target_columns[1]], label='data')
ax.set_xlim(0, 110)
ax.set_ylim(0, 110)
ax.set_xticklabels(ax.get_xticks(), rotation=45)
ax.set_xlabel(target_columns[0], fontsize = my_fontsize)
ax.set_ylabel(target_columns[1], fontsize = my_fontsize)
ax.set_title('title', fontsize = my_fontsize)
plt.legend()
plt.grid()
plt.tick_params(labelsize = my_fontsize)
plt.tight_layout()
fig.savefig("graph.png")
plt.close()
target_df = df[target_columns]
print(target_df)
target_df['RMS'] = (pow(target_df.abs(), 2)).sum(axis=1).apply(math.sqrt)
print(target_df)
target_df.to_csv(file_path[:-4] + '_01_RMS.csv', sep=',', index=False, encoding='utf-8', header=True)
rms_df = pd.concat([df, target_df], axis=1)
sort_df = rms_df.sort_values(by='RMS', ascending=True)
sort_df.to_csv(file_path[:-4] + '_02_connect_and_sort.csv', sep=',', index=False, encoding='utf-8', header=True)
min_row = rms_df['RMS'].idxmin()
print('min_row', min_row)
max_row = rms_df['RMS'].idxmax()
print('max_row', max_row)
min_data_series = sort_df.loc[min_row]
print(min_data_series)
print(type(min_data_series))
max_data_series = sort_df.loc[max_row]
print(max_data_series)
print(type(max_data_series))
DF = pd.concat((min_data_series.rename('min_data'), max_data_series.rename('max_data')), axis=1, sort=False)
print(DF)
DF.to_csv(file_path[:-4] + '_03_RMS_min_max.csv', sep=',', index=True, encoding='utf-8', header=True)
DF_T = DF.T
print(DF_T)
DF_T.to_csv(file_path[:-4] + '_04_RMS_min_max_T.csv', sep=',', index=True, encoding='utf-8', header=True)
if __name__ == '__main__':
path = os.getcwd()
input_file = 'Hyperbola.csv'
file_path = os.path.join(path, input_file)
target_columns = ['x', 'y']
main()
print('finished')
以上
<広告>
リンク