機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【Excel】複数のCSVからデータを抽出しExcelにまとめる、かつ散布図も自動作成する方法

Tkinterとopenpyxlの使い方

■はじめに

前回、CSVのデータを抽出しEXcelにまとめ、かつ散布図も作成する方法を紹介しました。

stjun.hatenablog.com

今回は複数のCSVを一気に処理し、かつすべてのシートに散布図を作成する方法を紹介します。

 

■コード

#複数のCSVファイルをExcelにまとめ、かつ散布図を自動で作成

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):
    
    #新しいExcelの作成
    wb=px.Workbook()
    
    #エクセル内の各シートの名前
    sheet_title=["計算結果1","計算結果2","計算結果3"]
    
    #複数のCSVファイルを選ぶ
    #ユーザー名にお使いのPCの名前を入れてください
    filetype=[("all file","*")]    
    path=fl.askopenfilenames(initialdir="C:/Users/ユーザー/Desktop",filetypes=filetype,title="select file")
    
    # 読み取った複数のCSVファイルを1つのExcelファイルにまとめる
    for i in range(len(path)):
        data_1, data_2,data_3= np.loadtxt(fname=path[i], skiprows=2, unpack=True)

        #Excel内に新しいシートを作成
        new_sheet=wb.create_sheet("計算結果")
        ws = wb["計算結果"]

        #作成したシートの名前を設定
        ws.title=sheet_title[i]

        #Excel一行目にどんな物理量について計算したか記載するためのリスト
        list_target=["物理量A(単位)","物理量B(単位)","物理量C(単位)"]

        #Excelの1行目に上記リストを記載する
        for i in range(len(list_target)):
            ws.cell(row=1,column=i+1,value=list_target[i])

        #Excelの2行目以降にCSVデータを代入する
        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 = "散布図のテスト"
        #x軸のタイトル
        chart.x_axis.title = 'x軸'
        #y軸のタイトル
        chart.y_axis.title = 'y軸'

        #x軸とするデータ
        x_values = Reference(ws, min_col=1, min_row=2, max_row=len(data_1)+1)
        for i in range(2, 4):
            #y軸とするデータ
            y_values = Reference(ws, min_col=i, min_row=1, max_row=len(data_1)+1)
            #x軸とy軸の組み合わせを決める
            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") #年月日時分秒の形式で取得
    
    #Excelデータをデスクトップに保存する(ユーザー名にお使いのPCの名前を入れてください)
    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を同時に処理することができます)

f:id:stjun:20190812160639p:plain

 以上で終わりです。

 

■説明

今回、特別なことはしていません。 

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で読んだ本を載せておきます。

さおだけ屋はなぜ潰れないのか? 身近な疑問からはじめる会計学 (光文社新書)

さおだけ屋はなぜ潰れないのか? 身近な疑問からはじめる会計学 (光文社新書)

  • 作者:山田 真哉
  • 出版社/メーカー: 光文社
  • 発売日: 2005/02/16
  • メディア: 新書
 
多動力 (NewsPicks Book) (幻冬舎文庫)

多動力 (NewsPicks Book) (幻冬舎文庫)

 

 

■雑誌系

MONOQLO (モノクロ) 2020年 02月号 [雑誌]

MONOQLO (モノクロ) 2020年 02月号 [雑誌]

 
家電批評 2020年 1月号 [雑誌]

家電批評 2020年 1月号 [雑誌]

  • 作者: 
  • 出版社/メーカー: 晋遊舎
  • 発売日: 2019/12/03
  • メディア: Kindle
 
ロードバイク完全メンテナンス (エイムック 3544 BiCYCLE CLUB別冊)

ロードバイク完全メンテナンス (エイムック 3544 BiCYCLE CLUB別冊)

  • 作者: 
  • 出版社/メーカー: エイ出版社
  • 発売日: 2016/11/29
  • メディア: ムック
 
繰り返し作りたくなる!  ラク弁当レシピ (エイムック 3680)

繰り返し作りたくなる! ラク弁当レシピ (エイムック 3680)

 
Tarzan(ターザン) 2020年1月23日号 No.779 [内臓脂肪 皮下脂肪すっきり落とす!] [雑誌]

Tarzan(ターザン) 2020年1月23日号 No.779 [内臓脂肪 皮下脂肪すっきり落とす!] [雑誌]

  • 作者: 
  • 出版社/メーカー: マガジンハウス
  • 発売日: 2020/01/04
  • メディア: Kindle
 
DIME(ダイム) 2020年 03 月号 [雑誌]

DIME(ダイム) 2020年 03 月号 [雑誌]

  • 作者: 
  • 出版社/メーカー: 小学館
  • 発売日: 2019/12/16
  • メディア: 雑誌
 

 

■最後に

これで複数のCSVを一度に処理し、かつ散布図も作れるようになりました。

このコードを基本にし、次回から少しずつ改良していきたいと思います。