経理など仕事のデータだけでなく、体重や血圧の記録など日々のデータをGoogleのスプレッドシートに記録している方も多いことだろう。スプレッドシートを使えば、PCだけでなくスマートフォンやタブレットでも快適にデータ入力ができる。そして、作ったデータをPythonで取得して加工したい場合も多いだろう。今回は、Pythonでスプレッドシートのデータを元にグラフを描画する方法を紹介する。

  • 5行のPythonでグラフ描画してみたところ

    5行のPythonでグラフ描画してみたところ

Pythonからスプレッドシートを利用する(1) - APIを使う場合

最初に、Googleが提供しているスプレッドシートをPythonで活用する二つの方法を順に紹介しよう。

まず、Googleはスプレッドシートを外部から操作できるようにAPIと呼ばれる機能を提供している。これはPythonやJavaScriptなどのプログラミング言語を用いてスプレッドシートにアクセスできるようにするもので、言ってみれば正攻法とも言える方法だ。

ただし、APIを活用する方法は、それなりに手間がかかる。この場合、以下のような手順を踏むことになる。

  • Google Cloud Platformにアクセスしてプロジェクトを作成する
  • プロジェクトで、Spreadsheet APIを有効にする
  • APIアクセスに必要な認証情報のファイルをダウンロードする
  • PythonからSpreadsheet APIにアクセスするためのライブラリ(SDK)をインストール
  • ライブラリ(SDK)を利用して、Pythonからスプレッドシートにアクセスする

これはPythonで安全にデータにアクセスできるために必要な手順なので、セキュリティを担保するために必要な手順と諦めて作業しよう。なお、Googleによる解説がこちらにある。

Pythonからスプレッドシートを利用する(2) - 最も簡単な方法

しかし、もっと簡単に、しかも安全にスプレッドシートをPythonで活用する方法がある。それは、ブラウザでスプレッドシートにアクセスして、CSV形式でファイルをダウンロードする方法だ。

スプレッドシートのメニューから[ファイル > ダウンロード > カンマ区切り形式(.csv)]をクリックすれば、CSV形式でスプレッドシートのデータをダウンロードできる。

  • スプレッドシート活用の最も簡単な方法はCSVでダウンロードすること

    スプレッドシート活用の最も簡単な方法はCSVでダウンロードすること

CSVファイルは基本的にただのテキストファイルなので、追加のライブラリも不要で、Pythonからとても簡単にデータを取得できる。APIを使うために払う作業や、認証情報を管理する手間を考えたら、この原始的とも言える方法が最も安全で簡単と言えるだろう。

もちろん、この方法はスプレッドシートのデータをダウンロードして使うため、シートの内容を書き換える用途には向かない。それでも、今回目的としている「データを取得してグラフを描画する」という用途であれば、この方法が最も簡単だ。

体重の記録データを元にグラフを描画しよう

ここでは、Googleスプレッドシートに次のような一ヶ月分の体重データがあるとしよう。この一ヶ月分の体重データについて、体重の推移が一目で分かるようなグラフを描画してみよう。

  • スプレッドシートに体重の記録をつけていた

    スプレッドシートに体重の記録をつけていた

まずは、このスプレッドシートをCSV形式でダウンロードしよう。先ほど紹介したように、メニューの[ファイル > ダウンロード > カンマ区切り形式(.csv)]を選んでクリックする。すると、CSVファイルがダウンロードできる。

試しに、メモ帳などのテキストエディタで開いて見ると、次のようなテキストデータが得られる。このファイルのファイル名を「data.csv」という名前に変更しておこう。

  • CSVファイルをテキストエディタで開いたところ

    CSVファイルをテキストエディタで開いたところ

ここでは、グラフを描画するために、matplotlibを使ってみよう。コマンドライン(WindowsならPowerShell、macOSならターミナル.app)を開いて、以下のコマンドを実行してmatplotlibをインストールしよう。

python3 -m pip install matplotlib pandas

そして、以下のプログラムを「mkchart.py」という名前で保存しよう。

import matplotlib.pyplot as plt, pandas as pd
df = pd.read_csv('data.csv', index_col=0) # --- CSVを読み込む
df.plot() # --- グラフを描画
plt.show() # --- UIを表示

そして、Pythonの実行環境であるIDLEで読み込んで実行するか、コマンドラインで以下のコマンドを実行しよう。

python3 mkchart.py

すると次のような画面が表示される。日本語フォントを正しく指定していないので、日本語が文字化けして豆腐のようになってしまうが、グラフとしては十分分かるものだろう。なお、画面左下の保存アイコンをクリックすれば、画像として保存することも可能だ。

  • プログラムを実行したところ

    プログラムを実行したところ

なお、グラフの中に日本語を描画したい場合には、コマンドラインでjapanize-matplotlibをインストールすれば良い。

python3 -m pip install japanize-matplotlib pandas

そして、プログラムの1行目に「japanize_matplotlib」を追記しよう。プログラムは、次のようになる。

import matplotlib.pyplot as plt, pandas as pd, japanize_matplotlib # --- 追記
df = pd.read_csv('data.csv', index_col=0) # --- CSVを読み込む
df.plot() # --- グラフを描画
plt.show() # --- UIを表示

改めて実行してみよう。文字化けの豆腐が解消されて日本語が正しく表示されたのが分かるだろう。

  • 文字化けの豆腐が解消されて日本語が正しく表示される

    文字化けの豆腐が解消されて日本語が正しく表示される

平均体重も表示してみよう

なお、上記のプログラムに一行付け加えると、平均体重をグラフに書き入れてくれる。3行目に平均体重を付け加えるコードを追加した。

import matplotlib.pyplot as plt, pandas as pd, japanize_matplotlib 
df = pd.read_csv('data.csv', index_col=0) # --- CSVを読み込む
df["平均"] = df["体重"].mean() # --- 平均を追加
df.plot() # --- グラフを描画
plt.show() # --- UIを表示

改めて実行してみると、次のようなグラフになる。

  • 平均体重を書き入れてみたところ

    平均体重を書き入れてみたところ

まとめ

以上、今回はGoogleスプレッドシートのデータをCSVファイルでダウンロードして、CSVファイルを元にグラフを描画するプログラムを作ってみた。もちろん、グラフを作成するだけなら、スプレッドシート上でグラフ作成することも可能だ。

しかし、Pythonのmatplolibを使うと、より高度なグラフを描画することができる。また、毎月定期的にグラフを出力する必要がある場合には、コマンドを実行するだけでグラフを描画できるので便利だ。数行のプログラムで実現できるので活用しよう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。