いつかスタバでおもむろにプログラミングを

基本的に備忘録です。いつかスタバでおもむろにプログラミング やりたいです。

Colaboratoryで日本語のCSVファイルグラフをpandasで読み込んでseabornのグラフの凡例を日本語で表示する方法

はじめに

f:id:yakan007:20180825000441p:plain
GoogleのColaboratoryを使ってデータ分析ぽいことをするときに、日本語が含まれたCSVファイルが読み込めなかったり、seabornでグラフ化した時にどうしても日本語が表示できずに豆腐状態になったので調べてみました(上図)。

で、下記のブログの通りにやってみると、うまくできましたのでご紹介します。

CSVファイルを読み込む方法
deepage.net

◯seabornで日本語表示する方法
blog.3qe.us

↑こちらのブログが本当にすごく役に立ちました。ありがとうございます。
ただ、Colaboratoryの仕様が変わったみたいで、一部下記のように変更する必要があります。

!rm /content/.cache/matplotlib/fontList.json#2018年8月24現在では下記のように変更してください。
↓↓↓↓
!rm /root/.cache/matplotlib/fontList.json

↑2時間くらいハマったところで見つけて狂喜乱舞しました。すごく助かりましたありがとうございます。

グラフを日本語で表示するために日本語のフォントをインストール

まず、matoplotlib、seabornで日本語が表示できるように日本語のフォントをインストールします。

!apt-get -y install fonts-ipafont-gothicで日本語のフォントをインストール

!apt-get -y install fonts-ipafont-gothic

こちらを Coraboratoryのセルに記入し、実行します。
何やら文字がいっぱい出てきますが、安心してください。僕にも何が起きているのかわかりません。

!rm /root/.cache/matplotlib/fontList.jsonでキャッシュを削除

次に、フォントのキャッシュファイルを削除します。削除しますと書いてますが、自分でもよくわかっていません。
注意点としましては、キャッシュの保存先がつい最近変更になったみたいです。下記のようにしてください。

!rm /root/.cache/matplotlib/fontList.json

#これは使えません(2018年8月24日現在)。
#!rm /content/.cache/matplotlib/fontList.json

ランタイムを再起動する

ランタイムを再起動します。下の図の赤丸のところをクリックしてください。

f:id:yakan007:20180820143622p:plain
Coraboratoryでランタイムを再起動する

と、以上でグラフのフォントの日本語化の準備は完了です。

pandasで日本語(shift-jisで書かれた?)が含まれたCSVファイルを読み込む

ここから、pandasでCSVファイルを読み込んでいきます。
今回使うデータは、ポケモンのデータセットを使います。Kaggleというサイトで英語のデータセットを取得することもできるのですが、ポケモンの名前が英語でピンと来ないので日本語のデータをダウンロードします。

こちらのサイトで入手できます。最高だぜ!ありがとうございます。

rikapoke.hatenablog.jp
 

ColaboratoryにCSVファイルをアップロードする

 
Coraboratory内で、

from google.colab import files
uploaded = files.upload()

 と入力しますと、「ファイルの選択」とでてきますので、ここをクリックして読み込みたいファイルを選択します。
うまくボタンが押せない方は、横の実行ボタンがくるくる回転している間に「ファイルの選択」ボタンを押すといいかと思います。
今回は「pokemon_status.csv」を選択します。

f:id:yakan007:20180825001820p:plain

ライブラリのインポート

pandasとseabornを使うためにインポートします。

import pandas as pd 
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns 

pandasで日本語が含まれたCSVデータを読み込む

#このままでは読み込めません
pokemon_df = pd.read_csv('pokemon_status.csv')

日本語(shift-jisで書かれた?)が含まれたCSVファイルをpandasで読み込むとエラーが出て読み込むことができません。
この時は、

pokemon_df = pd.read_csv('pokemon_status.csv', encoding="shift-jis")

と、ファイル名の後に「encoding="shift-jis」と追加するとうまくいきます。
なお、「pokemon_df」という名前は、ポケモンのデータフレームの略っぽい名前にしようとこちらで勝手に決めたものです。なので気になる方は「unko_df」とかでも大丈夫です。

"データフレームの名前" = pd.read_csv('◯◯◯.csv',encoding="shift-jis") 

こんな感じで覚えたらいいかと思います。
データフレームの中身をみるのは一旦置きまして、実際にグラフ化して日本語が表示されるかみてみましょう。

seabornで日本語表示でグラフ化する

seabornの使い方は置いときまして、seabornでグラフを表示させます。

sns.set(font='IPAGothic')#日本語のフォントを指定します。
sns.countplot(y = 'タイプ1',data = pokemon_df)

f:id:yakan007:20180825001425p:plain

ポケモンの全てのシリーズのタイプ別にグラフ化したものです。
はい、日本語で表示されていますね。
ふむふむ、みずポケモンが一番多いみたいですね。

まとめ

まとめるとこんな感じです。

f:id:yakan007:20180825010201p:plain

というわけで、Colaboratoryでpandasやseabornを日本語で使えるようになりました。
それもこれも、先人達のおかげです。
この記事も誰かの役に立ったらいいなあと思います。間違ってたらすみません。


少しずつ勉強していこうと思います。

入門 Python 3

入門 Python 3

みんなのPython 第4版

みんなのPython 第4版

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎