pandasとggplotで回帰分析

Python版ggplotの練習です。

コードと元データはこちらを参考にしました。

ITエンジニアのためのデータサイエンティスト養成講座(6):回帰分析I:回帰分析って何? から、最小二乗法、モデル評価、妥当性検討の実際まで (1/3) - @IT

import pandas as pd
import numpy as np
from ggplot import *

# データを格納
df=pd.read_csv("children_data2005_08_130819.csv", encoding='shift-jis', skiprows=2, header=-1)
df=df[np.isfinite(df[9])] # 欠損したデータは除く
df=df[np.isfinite(df[10])] # 欠損したデータは除く

# 身長と体重をプロット
g=ggplot(aes("height","weight"), data=df[[9,10]])+geom_point()
g

f:id:ksmzn:20140905181346p:plain

ggplotでプロットできました。

# 最小二乗法
model=pd.ols(x=height, y=weight, intercept=True)
model

f:id:ksmzn:20140905180829p:plain

# 回帰直線をプロット
g+geom_line(data=pd.DataFrame({"height":model.x["x"], "weight":model.y_fitted}), color="green”)

f:id:ksmzn:20140905180731p:plain

# 「体重は身長の3乗に比例する」というモデル
model2=pd.ols(x=height**3, y=weight, intercept=True)
model2

f:id:ksmzn:20140905180825p:plain

ggplot(aes("x","y"), data=pd.DataFrame({"x":model2.x["x"], "y":model2.y}))+\
    geom_point()+\
    geom_line(data=pd.DataFrame({"x":model2.x["x"], "y":model2.y_fitted}),color="red”)

f:id:ksmzn:20140905180744p:plain

ggplotで図を重ねるときにハマりやすいポイントとしては、 ggplot(aes=(“”,””), data=~)で指定したaesの文字列と、 geom_line(data~)ので指定したデータフレームのヘッダーが一致していないといけないということです。

過去記事

Python版ggplotで日本語を使う - Dimension Planet Adventure 最終章 最終話『栄光なる未来』 Python3.4にPython版ggplotをインストールしたい - Dimension Planet Adventure 最終章 最終話『栄光なる未来』

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Python版ggplotで日本語を使う

このエントリで書いた例は対症療法的な解決方法です。もっとスマートに書くやり方があったら教えて下さい。

オヒサシブリデス。

Rのggplot2のような綺麗なグラフをPythonでも使いたい! ということで、Python移植のggplotパッケージを先日インストールしました。

んで、本家ggplot2でもよくある問題である日本語を使うにはどうしたらいいのか、いろいろ調べてみました。

MacOSX で、Python3.4を使用しております。

import sys
print(sys.platform)
print(sys.version)
# darwin
# 3.4.1 (default, May 19 2014, 13:10:29)
# [GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)]

ライブラリのバージョンは以下。

# pip freeze
:
:(省略)
ggplot==0.5.8
ipython==2.1.0
matplotlib==1.3.1

Python版ggplotのREADMEのグラフを以下のように出力してみます。

from ggplot import *

ggplot(aes(x='date', y='beef'), data=meat) + \
    geom_point(color='lightblue') + \
    stat_smooth(span=.15, color='black', se=True) + \
    ggtitle("Beef: It's What's for Dinner") + \
    xlab("Date") + \
    ylab("Head of Cattle Slaughtered")

f:id:ksmzn:20140904191233p:plain

軸ラベルとタイトルが英語ですね。 ここを日本語に直してみましょう。

ggplot(aes(x='date', y='beef'), data=meat) + \
    geom_point(color='lightblue') + \
    stat_smooth(span=.15, color='black', se=True) + \
    ggtitle("牛肉の出荷数") + \
    xlab("日付") + \
    ylab("出荷数")

f:id:ksmzn:20140904191327p:plain

うーん、matplotlibでもよく見かけた□ですね…

ここで、無理矢理フォントの設定を変更する方法を試してみます。 一旦先ほどの式を変数に保存し、パラメータ辞書のフォントを変更します。 とりあえずOsakaで。

g=ggplot(aes(x='date', y='beef'), data=meat) + \
    geom_point(color='lightblue') + \
    stat_smooth(span=.15, color='black', se=True) + \
    ggtitle("牛肉の出荷数") + \
    xlab("日付") + \
    ylab("出荷数")
g.theme._rcParams['font.family']="Osaka"
g

f:id:ksmzn:20140904191336p:plain

おお!日本語が表示できました! ただ、あんまりスマートではないですね。 ggplotの特徴をぶち壊してる感じがします。 もっといい書き方があれば教えて下さい。

漢字読めるけど書けない

漢字読めるけど書けない

Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集

Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集

Python3.4にPython版ggplotをインストールしたい

最近環境構築しかしてない。Marvericksにしたせいである。 このまま環境構築し続けて死ぬ。

前回の続き。pandasを忘れていました。 ついでに、Python版ggplotもvirtualenv環境にインストールしてしまいましょう。

pip install pandas

OK。

pip install ggplot

ggplotは入ったが、依存しているstatsmodelsが入らない。そのstatsmodelsはpatsyが必要らしい。

pip install patsy
pip install statsmodels

statsmodelsが入らない。

"error: command 'clang' failed with exit status 1”

うむむ。

Python3.4にStatsmodelsを入れたいので、ここを参考に。

git clone https://github.com/statsmodels/statsmodels
cd statsmodels
pip install .

お。入った。

しかし、試しに

python -c “import ggplot”

するとエラーが出る。

git clone したstatsmodelsのフォルダで、

python setup.py build_ext --inplace

まだエラーが出る。 色々読み込めてないようで。

pip install openpyxl==1.8.6 # 最新版だと、pandasがサポートしていないらしい?
pip install brewer2mpl

言われたとおりにインストールしてみると、

python -c “import ggplot”

入った!お疲れ様でした。寝ます。

(このまま環境構築し続けて死ぬ)

パンダです。

パンダです。

やっぱりパンダです。

やっぱりパンダです。