pythonでエクセルファイルの作図をはじめよう
目的
python
は何かと便利と聞くので使ってみたいと思っていながら一歩を踏みだせない人のために、お手軽なとっかかりを提供したい。
今回はエクセルファイルを読み込んでグラフを描くことを対象にする。
方法
- ファイルはエクセルファイルを対象にする→
pandas
で読み込む - グラフ化は
matplotlib
で行う
得られる内容
-
pandas
でエクセルファイルを読み込んでpandas
の表形式データであるDataFrame
にする方法 -
matplotlib
で上記DataFrame
から散布図を作成できるようにする。
pandasで読み込むエクセルファイル
pandas
はデータ処理に便利な形式を提供してくれるモジュール。欠測値などの処理も便利にやってくれるので、データサイエンスなどでよく用いられている。
一方使いこなすには少し特徴的な処理方法を理解しないといけないので、ここでは深入りはしない。
単にエクセルファイルを読み込み、python
で扱えるようにするためだけに用いる。
pandas
にはエクセルファイルを読み込んでdataframe
という表形式の独自形式に取り込む機能もあるので便利だし、dataframe
は直観的に分かりやすいので、まずはこの機能だけ利用させてもらおう。
今想定するデータは、気象庁のページからダウンロードできるもの。
観測地点「東京」の2017年1月1日~2018年1月1日までの、平均気温、最高気温、最低気温、降水量、平均湿度を対象とした。
これはもともとダウンロードする際にはcsvファイル。
本末転倒かもしれないが、今回はエクセルファイルの読み込みを対象としたいので、
csvをエクセルで読み込み、それをエクセルファイル(xlsxファイル)として保存した。
さて、pandas
でエクセルファイルを読み込むには以下のようにする。
import pandas as pd
this_file_name = "met_tokyo.xlsx" # 読み込みファイル名
this_sh_name = "tokyo_2017" # 読み込みシート名
this_skiprows = 6 # 最初に読み飛ばす行数
this_usecols = [0,1,4,7,10,15] # dataframe化する列を0始まりのインデックスで指定
this_col_names = ["年月日","平均気温(℃)","最高気温(℃)","最低気温(℃)",
"降水量(mm)","平均湿度(%)"] # 使用する列の名前を付ける
xlsx_pd = pd.read_excel(this_file_name, sheetname = this_sh_name,
names = this_col_names, usecols = this_usecols,
skiprows = this_skiprows)
ここで使用した引数は以下の通り。
-
sheetname
: 読み込み対象のエクセルファイル内のシート名を明示する。 -
skiprows
: シートの何行目まで読み飛ばすかの指定。今回のデータは6行読み飛ばす。データを見て最初の説明などヘッダー部分を飛ばすことができる。 -
usecols
: 使用する列を0始まりのインデックスで指定する。列Aが0になる。 -
names
: 使用する列に付ける名前をリストで指定する。usecol
の数と一致しなければならない。usecol
を指定していない場合はデータがある全ての列が読み込まれるが、その数と一致しなくてはならない
他にも様々な引数があるので、必要な時はhelp(pd.read_excel)
をしよう。
このように読み込むとthis_col_names
で指定した列名を持った時系列の表形式データをで扱うことができる。
該当箇所をピックアップしたり便利な機能が多い(但しそのための命令はすぐ忘れてしまう)し、欠測値の処理で便利だったりと知っておいて損はない。
グラフ化するために使用するmatplotlib
でも読み込めるので今回は使用することにした。
matplotlibによるグラフ作成
import matplotlib.pyplot as plt
# 時系列グラフの追加
plt.plot(xlsx_pd["年月日"],xlsx_pd["平均気温(℃)"],label="平均気温"],color="k")
plt.plot(xlsx_pd["年月日"],xlsx_pd["最低気温(℃)"],label="最低気温"],color="r")
plt.plot(xlsx_pd["年月日"],xlsx_pd["最高気温(℃)"],label="最高気温"],color="b")
# 軸ラベルの設定
plt.xlabel("date")
plt.ylabel("temperature")
plt.grid() # 方眼線の追加
plt.legend() # 凡例の追加
plt.plot
はx,yのデータを指定して散布図を作成するのに使用する。今回はxに時間を指定するので時系列グラフを作成することになる。
オプションは沢山あるのだが、ここではシンプルに二つだけ指定している。
-
label
: 凡例を表示させる時の名前を指定する。 -
color
: 線の色。色の名前についてはこちらがよくまとめて下さっている。
plt.grid()
をすると方眼線が表示されて少しみやすくなる。
plt.legend()
を実行すると初めて凡例がグラフに表示される。
おわりに
今回は、エクセルファイルの取り込み及び作図という極めてシンプルな作業を紹介したが、作図の基本となるものだと思う。ここから効率的な図化処理のための様々な要素を紹介していきたいと考えている。
今回の内容をjupyter notebookで実行してみたい人がもしいれば、こちらからご覧下さい。