■はじめに
前回、CSVのデータを抽出しEXcelにまとめ、かつ散布図も作成する方法を紹介しました。
stjun.hatenablog.com
今回は複数のCSVを一気に処理し、かつすべてのシートに散布図を作成する方法を紹介します。
■コード
import tkinter as tk
import tkinter.filedialog as fl
import tkinter.messagebox as mb
import numpy as np
import time
import openpyxl as px
from openpyxl.chart import ScatterChart,Reference,Series
root=tk.Tk()
def get(*args):
wb=px.Workbook()
sheet_title=["計算結果1","計算結果2","計算結果3"]
filetype=[("all file","*")]
path=fl.askopenfilenames(initialdir="C:/Users/ユーザー/Desktop",filetypes=filetype,title="select file")
for i in range(len(path)):
data_1, data_2,data_3= np.loadtxt(fname=path[i], skiprows=2, unpack=True)
new_sheet=wb.create_sheet("計算結果")
ws = wb["計算結果"]
ws.title=sheet_title[i]
list_target=["物理量A(単位)","物理量B(単位)","物理量C(単位)"]
for i in range(len(list_target)):
ws.cell(row=1,column=i+1,value=list_target[i])
for i in range(len(data_1)):
ws.cell(row=i+2,column=1,value=data_1[i])
ws.cell(row=i+2,column=2,value=data_2[i])
ws.cell(row=i+2,column=3,value=data_3[i])
chart =ScatterChart()
chart.title = "散布図のテスト"
chart.x_axis.title = 'x軸'
chart.y_axis.title = 'y軸'
x_values = Reference(ws, min_col=1, min_row=2, max_row=len(data_1)+1)
for i in range(2, 4):
y_values = Reference(ws, min_col=i, min_row=1, max_row=len(data_1)+1)
con = Series(y_values, x_values, title_from_data=True)
con.marker.symbol = 'circle'
con.marker.graphicalProperties.solidFill ="FFFFFF"
con.marker.graphicalProperties.line.solidFill = "000000"
chart.series.append(con)
ws.add_chart(chart, "A10")
timestr=time.strftime("%Y%m%d-%H%M%S")
wb.save(r"/Users/ユーザー/Desktop/test"+timestr+".xlsx")
mb.showinfo("確認","Excelファイルの作成が完了しました")
message["text"]="処理が完了しました"
message=tk.Label(root,text="ファイルを選択してください",width=30)
message.grid(row=0,column=0)
button=tk.Button(text="開く",command=get)
button.grid(row=0,column=1)
root.mainloop()
今回、前回のコードを複数版に拡張しただけなので動作画面は省略します。
実行すると、次の画像のように数値データとグラフが入ったExcelが作成されます。
(※これは前回の画像なのでシートが1枚=1つのCSVしか処理していませんが、今回のコードを実行すると複数のシート=複数のCSVを同時に処理することができます)
以上で終わりです。
■説明
今回、特別なことはしていません。
14行目以降のfor文の中に、前回紹介した散布図自動作成コードを入れただけです。
詳細は以下の過去記事を見て頂ければと思います。
stjun.hatenablog.com
stjun.hatenablog.com
■自分が使ってるお得情報の紹介
私はAmazon kindle unlimitedというサービスを1年以上利用しています。
これは月額980円で 和書12万冊以上の電子書籍を読めるサービスです。
ビジネス本、雑誌、漫画、技術本など様々な本を読むことができます。10冊まで端末にダウンロードできるのでネット環境がなくても(オフラインでも)見れます。
なおkindle unlimitedは最初の30日間無料のため、気軽に登録してみて、あまり読みたい本が無ければすぐに解約しても問題ありません。
それか30日内に気になる本を全て読破すれば実質タダです。
ぜひ気になった方はチェックしてみて下さい。
なおkindleにない本等を買う時はamazonギフト券(amazonで使えるポイント)を買い、ポイントで数冊まとめて買った方がお得です。
ギフト券(ポイント)は買ったら10年も有効で、ポイントが付きます。さらに本をまとめ買い(2冊以上同時に)買うと、ポイントがもらえます。
(https://www.amazon.co.jp/b?ie=UTF8&node=5431437051)
学生さんであればkindle unlimitedよりも年2450円(月210円程度)で映画見放題、音楽聞き放題、本読み放題の「prime student」がおすすめです。
以下に私がkindle unlimitedで読んだ本を載せておきます。
■雑誌系
■最後に
これで複数のCSVを一度に処理し、かつ散布図も作れるようになりました。
このコードを基本にし、次回から少しずつ改良していきたいと思います。