Pythonゼミ 第5回 複数ファイルの一括処理、線グラフの作成


Last updated: 2024/03/07

【データ】

使用するデータ:岐阜市一年間の温度データpython05-data.zip
ダウンロード:https://tingwu.info/pylab/data/python05-data.zip
ダウンロードした後、解凍して(windowsの場合は右クリック→すべて展開)、フォルダーpython05-dataの中に、2016年9月から2017年8月までのデータがあります。

各フォルダーの中に、一つのdatファイルは一日のデータです。


これらのdatファイルはテキストファイルと同じフォーマットなので、開くにはメモ帳でもできますが、以前紹介したConTextのほうがいいです(MACの場合は別のエディターでいい)。開いたら、時刻と温度の2列のデータがあります。

【コード例】

すべてのフォルダーネーム

import os

folderMat = os.listdir('F:/Course/python/python05-data/')
folderMat.sort() #sortしないと、並び順がおかしくなることがある
print(folderMat)
>>
['201609', '201610', '201611', '201612', '201701', '201702', '201703', '201704', '201705', '201706', '201707', '201708']

9月のすべてのデータファイル

import os

strRoot = 'F:/Course/python/python05-data/'
folderMat = os.listdir(strRoot)
folderMat.sort()

strDir = strRoot+folderMat[0]
fileMat = os.listdir(strDir)
fileMat.sort()
print(fileMat)
>>
['20160901.dat', '20160902.dat', '20160903.dat', '20160904.dat', '20160905.dat', '20160906.dat', '20160907.dat', '20160908.dat', '20160909.dat', '20160910.dat', '20160911.dat', '20160912.dat', '20160913.dat', '20160914.dat', '20160915.dat', '20160916.dat', '20160917.dat', '20160918.dat', '20160919.dat', '20160920.dat', '20160921.dat', '20160922.dat', '20160923.dat', '20160924.dat', '20160925.dat', '20160926.dat', '20160927.dat', '20160928.dat', '20160929.dat', '20160930.dat']

9月の毎日の最初の記録をプリントする

import os

strRoot = 'F:/Course/python/python05-data/'
folderMat = os.listdir(strRoot)
folderMat.sort()

strDir = strRoot+folderMat[0]
fileMat = os.listdir(strDir)
fileMat.sort()

for fileName in fileMat:
    fid = open(strDir+'/'+fileName)
    strLine = fid.readline()
    fid.close()
    print(fileName[0:8]+' '+strLine[0:-1])
>>
20160901 00:00,  25.6
20160902 00:00,  25.8
20160903 00:00,  26.8
20160904 00:00,  27.7
20160905 00:00,  27.0
20160906 00:00,  25.8
20160907 00:00,  26.1
20160908 00:00,  27.0
20160909 00:00,  24.0
20160910 00:00,  23.2
20160911 00:00,  24.5
20160912 00:00,  25.5
20160913 00:00,  24.5
20160914 00:00,  25.0
20160915 00:00,  24.2
20160916 00:00,  22.8
20160917 00:00,  25.1
20160918 00:00,  24.5
20160919 00:00,  23.9
20160920 00:00,  22.4
20160921 00:00,  20.5
20160922 00:00,  22.1
20160923 00:00,  22.2
20160924 00:00,  21.1
20160925 00:00,  21.6
20160926 00:00,  24.2
20160927 00:00,  24.2
20160928 00:00,  25.3
20160929 00:00,  23.8
20160930 00:00,  20.9

Matplotlibで線グラフを作る

1.基本的なプロット方法

import matplotlib.pyplot as plt #いつもこのようにimportする
import numpy as np

xMat = np.arange(0, 10, 0.1)
yMat = np.sin(xMat)

plt.plot(xMat, yMat)
plt.title('My first graph')
plt.xlabel('X')
plt.ylabel('Y=sin(X)')
#plt.xlim([0, np.pi*2]) #アンコメントして実行してみて
plt.show()

Ctrl + F6 で下図の設定画面が出る。下図のように設定して実行すれば、グラフのウィンドウが出てきていろんな操作ができる。

2.図の保存(最後の一行だけが上と違います)

import matplotlib.pyplot as plt
import numpy as np

xMat = np.arange(0, 10, 0.1)
yMat = np.sin(xMat)

plt.plot(xMat, yMat)
plt.title('My first graph')
plt.xlabel('X')
plt.ylabel('Y=sin(X)')
plt.xlim([0, np.pi*2])
#plt.show()
plt.savefig('F:/Course/python/05/test1.png', dpi=300)

指定のディレクトリF:/Course/python/05/にファイルtest1.pngが作られる。dpi=300を入れることで図がかなり高い解像度で作られる。

3.線種、マーカー、色

import matplotlib.pyplot as plt
import numpy as np

xMat = np.arange(0, 10, 0.1)
yMat = np.sin(xMat)

#------------------------------
plt.plot(xMat, yMat, '--') #下のコマンドと入れ替える
#------------------------------

plt.title('My first graph')
plt.xlabel('X')
plt.ylabel('Y=sin(X)')

plt.savefig('F:/Course/python/05/test2.png', dpi=300)

以下のコマンドを一行ずつ上の行と入れ替えて実行してください

plt.plot(xMat, yMat, '-.')
plt.plot(xMat, yMat, ':')
plt.plot(xMat, yMat, '--o')
plt.plot(xMat, yMat, '-s')
plt.plot(xMat, yMat, '-.^')
plt.plot(xMat, yMat, ':x')
plt.plot(xMat, yMat, '-sr')
plt.plot(xMat, yMat, '-.vk')
plt.plot(xMat, yMat, '--', lw=5)

'-', '--', '-.', ':'は線種を指定する
'o', 's', '^', 'x', 'v'はマーカーを指定する
'r', 'k'は色を指定する
よく使う色:
r:赤(red)
b:青(blue)
k:黒(black)
w:白(while)
y:黄(yellow)
g:緑(green)
m:紫(magenta)
lwで線の太さを指定する



問題


[データ] 岐阜市一年間の温度データpython05-dataを使用する(作った図のスクリーンショットで提出してください)


1.一年間の以下の各時間帯の平均温度を求めて、その変化を下のようなグラフで表す
[00:00~01:00), [01:00~02:00), ... , [22:00~23:00), [23:00~24:00)


2.一年間各月の平均温度、最高温度、最低温度を求めて、それぞれの変化を一つのグラフで表す。(凡例の作り方は自分で調べてみてください)