前回、Jupyterノートブックをインストールして、Pythonのコードを書いてすぐに試してみる方法を紹介した。今回は、Jupyterノートブックを利用して、CSVファイルの読み込み、および、視覚化に挑戦してみよう。
CSVファイルについて
日々、業務で使うデータの多くは、表計算ソフトで作成したデータが多い。売り上げデータや、顧客データ、在庫データなどだ。そうしたデータを作るのには、ExcelやGoogleスプレッドシート、OpenOfficeなどを使う。
しかし、そうした表計算ソフトなどで作ったデータをプログラミングで活用する際に、素のExcelファイルを解析して読み込むのは、なかなか面倒だ。
もちろん、Excelファイルを読み込むのも、それほど難しいわけではないが、もっと、手軽に扱う方法がある。そこで登場するのが、CSVファイルだ。表計算ソフトやデータベースであれば、大抵、CSV形式でのエクスポートに対応している。CSVファイルほど、汎用的で、簡単に扱えるデータ形式はない。
そもそも、CSVとは、以下のようなデータ形式だ。ここでは、日本の都道府県別の人口データを例に挙げてみよう。
都道府県,平成22年,平成27年,平成28年
東京都,13159 ,13515 ,13624
神奈川県,9048 ,9126 ,9145
大阪府,8865 ,8839 ,8833
愛知県,7411 ,7483 ,7507
埼玉県,7195 ,7267 ,7289
CSVでは、一行一レコードで記述される。そして、一レコードは、カンマで区切られて、複数のフィールドを持つことができる。なお、この表にあるように、一行目(一列目)は、ヘッダとして利用されることも多い。
このように、CSVデータというのは、改行とカンマで区切られているだけなので、プログラミングで非常に簡潔に操作できるというのが大きなメリットだ。
JupyterノートブックでCSVファイルを読み込もう
それでは、さっそく、このCSVデータの完全版を、Jupyterノートブックで読み込んでみよう。
なお、元データは、政府統計の総合窓口から、ダウンロードした都道府県別の人口一覧データだ。余分な項目もあったので、不要な項目をExcelで削除した。
整形済みのCSVファイルを、こちらサンプルからダウンロードして、Jupyterを起動するディレクトリにコピーしておこう。
そして、前回の内容を思い出しながら、Jupyterノートブックを起動してみよう。Jupyterを起動するのは、まず、コマンドラインを起動するところから始める。Windowsであれば、スタートメニューから「Anaconda3 > Anaconda Prompt」を実行しよう。macOSやLinuxであれば、ターミナルを利用する。macOSでターミナルを起動するには、Spotlightに「ターミナル」と入力しよう。そして、以下のJupyterノートブックの起動コマンドを入力する。
jupyter notebook
Jupyterノートブックが起動すると、Webブラウザが起動するので、画面右上の「New」ボタンから、「Python3」を選んでクリックしよう。
そして、以下の二行のプログラムを書くことで、CSVファイルを読み込んで表の形式で画面に表示できる。これは、Pandasというデータ解析を支援するライブラリを利用しており、前回インストールの方法も紹介した。
import pandas as pd
pd.read_csv("population.csv", encoding="SHIFT_JIS")
実は、このCSVは、人口の多い順に並んでいるのだが、平成28年度の人口データを元に人口の少ない順に並び替えて表示してみよう。並び替え(ソート)を行うには、sort_valuesメソッドを使うだけだ。
import pandas as pd
df = pd.read_csv("population.csv", encoding="SHIFT_JIS")
df.sort_values(by=["平成28年"], ascending=True)
このプログラムは、CSVファイルを読みこんで、sort_valuesメソッドで並び替えたものを出力するというものだ。このように、非常に簡潔に記述できるのが、Pythonの魅力と言える。ちなみに、ascending=Trueの部分を、ascending=Falseと書き換えると、人口の多い順(つまり、降順)に並び替えてくれる。
棒グラフを描画しよう
次に、CSVファイルを元に棒グラフを描画してみよう。
CSVファイルからデータを抜き出して棒グラフを書くのも簡単だ。以下は、平成28年度をY軸にして棒グラフを描画するプログラムだ。
%matplotlib inline
import pandas as pd
df = pd.read_csv("population.csv", encoding="SHIFT_JIS")
df.plot.bar(y=['平成28年'])
グラフをJupyterに描画するには、「%matplotlib inline」という一行を記述しておく必要がある。そして、棒グラフを書くには、plot.barメソッドを呼びだすだけだ。また、今回のような複数列を持つCSVであれば、どの列をY軸にするかを指定すれば良い。
もし、平成12年と平成28年を並べて棒グラフにしたければ、以下のように書くだけだ。丁寧に色分けも自動でしてくれる。
日本語が文字化けしないようにフォントをコピーしよう
ただし、描画用のフォントに、日本語フォントが指定されてないので、Jupyterノートブックをインストールしたばかりの状態では、日本語部分が"□"になり、文字化けしているのを確認できる。この機会に日本語化もしておこう。
まず、日本語フォントをダウンロードしよう。無料でしっかりしたフォントで有名なのは、IPAが無料で提供しているIPAexフォントだ。以下のURLからダウンロードできる。
IPAexフォント
上記から、フォントファイルをダウンロードしよう。アーカイブは、ZIP形式で圧縮されているので、ZIPファイルを解凍しよう。そして、このフォントをグラフ描画ライブラリのMatplotlibのフォント専用ディレクトリにインストールしよう。
フォントのコピー先を調べるために、Jupyterで以下のプログラムを実行して、Matplitlibがどこにインストールされているかを確認しよう。
import matplotlib as mpl
mpl.__path__
すると、以下のように、モジュールがインストールされているパスが表示される。
Windowsの場合:
['c:\\users\\kujira\\miniconda3\\lib\\site-packages\\matplotlib']
macOSの場合:
['/Users/kujira/miniconda3/lib/python3.6/site-packages/matplotlib']
そこで、これを頼りに、matplotlibのディレクトリを開いてみよう。そして、matplotlib/mpl-data/fonts/ttfに、フォントファイルをコピーしよう。
フォントをコピーしたら、フォントを設定ファイルに指定しよう。ユーザーのホームディレクトリ以下に「~/.matplotlib/matplotlibrc」というファイルを作り、そこに、日本語フォントを指定する。
font.family : IPAexGothic
せっかくなので、フォントをコピーしたあと、設定ファイルを作成する過程を自動で行うPythonプログラムを作ってみた。Jupyterノートブックに以下のコードをJupyterで実行すると、設定ファイルを自動で作成する。
import os, os.path
path = os.path.expanduser('~') + "/.matplotlib"
if not os.path.exists(path): os.mkdir(path)
with open(path + "/matplotlibrc", "w") as f:
f.write("font.family : IPAexGothic\n")
print("ok")
それから、改めて先ほどのプログラムを実行すると、正しく日本語が表示される。
フォントが見つからないというエラーが出た場合は、作成された.matplotlibフォルダを削除し、Jupyterでメニューから[kernel > restart]で再起動させます。
(1)以下のフォルダを削除
C:¥Users¥¥.matplotlib
(2)再度、設定ファイルの書き込みプログラムを実行
(3)Jupyterでメニューから[kernel > restart]
以上、今回は、JupyterノートブックでCSVファイルを読み込んで、表を表示したり、グラフを描画するプログラムを作った。Jupyterノートブックを使うと、とても手軽にCSVファイルを視覚化できることが分かったと思う。次回は、もう少し、詳しくグラフを描画する方法について紹介するので、お楽しみに。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ、2010年 OSS貢献者章受賞。技術書も多く執筆している。