色々勉強を進めてきましたが、まったく覚えられないので、使いそうな用法別に操作方法をまとめておきたいと思います。よく使うのがcsvを持ってきて、加工して、散布図を書いて、回帰直線を書いて、現在の数値上の傾向などをみるものです。今回はそこを中心に操作してみます。

データを持ってくる

今回はサンプルでhttps://raw.githubusercontent.com/pyfirst/samplecode/master/4_scraping/lego_scraper/brickset2016.csvをダウンロードして使います。
名前は、ひとまずlego.csvで保存します。

例外のデータや、使えないデータを削除など下準備を行う

まず、変数に読み込んでおいてから、下準備を行います。
今回は、この中のpiecesとus_priceの関係を考えるグラフを作りたいので、その2つにおいて、データがない行は使えないので削除を実施します

以下、jupyter notebookで実行してきまます。

 import pandas as pd
 file_path='./lego.csv'
 data=pd.read_csv(file_path)

#numberは商品番号かな?数値がないやつは捨てておこう
data.dropna(subset=['number'],inplace=True)

#pieces,us_priceがないやつも捨てておこう
data.dropna(subset=['pieces','us_price'],inplace=True)

#散布図を描こう。グラフのライブラリ読み込んでおこう
matplotlib inline

#散布図を描画してみよう横軸をpieces、縦をus_price,グラフにグリッドもつけておこう
data.plot.scatter(x='pieces',y='us_price',grid=True)

描画結果

はい、散布図が描画できました。。。。が、単回帰直線がないので、続いて回帰直線を追加します。

と思ったら。。。どうも、ここで使っているplotっていうのはpandasってやつでデータを取得して、簡易版?的なノリのやつらしい。そのまま吐き出すというか。

重ねる場合は、描画先を作って、散布図をはきだして、さらに、単回帰直線も同じところに吐き出せばいいらしい

pyplotを使って散布図を描画して、さらに単回帰直線を重ねて描画する

ひとまず、pyplotは、matplotlibの中らしいので、読み込んで書いていく

from matplotlib import pyplot as ppt
import pandas as pd
#例のごとく、csvを読む
file_path='./lego.csv'
data=pd.read_csv(file_path)

#numberは商品番号かな?数値がないやつは捨てておこう
data.dropna(subset=['number'],inplace=True)

#pieces,us_priceがないやつも捨てておこう
data.dropna(subset=['pieces','us_price'],inplace=True)

#キャンバス的なものを作成
canbus=ppt.figure(figsize=(10,10))

#その中にプロットとかいうグラフ枠をつくるらしい
ax1=canbus.add_subplot(111)

#ax=で描画先を指定できるらしい
data.plot.scatter(x='pieces',y='us_price',grid=True,ax=ax1)

#回帰式を取得する。取得できるライブラリは、scipy.statsらしい
from scipy.stats import linregress

#返り値は、slop,intercept,rvalue,pvalue,stderrの順らしい
slope,intercept,rvalue,pvalue,stderr = linregress(data["pieces"],data["us_price"])

#回帰直線のx軸に対するy軸を出す関数を作る
#式は一次関数、f(x)=slope*x+intercept
def price_fx(pieces):
    return slope*pieces+intercept

#一次関数描画用のxの範囲とyの範囲を設定しておく
x=[0,data["pieces"].max()]
y=[price_fx(0),price_fx(data["pieces"].max())]

#一次関数を 散布図を出力したax1に出力する
ax1.plot(x,y)

さて実行したのが下の画像

うん、ぽい!回帰直線っぽい!うまくいった。

コメント

[Python] matplotlibとpandasとscipyを使って散布図と回帰直線を書いてみる|webトピ
<a href="http://www.g0797u059p1q9sc2hhes5d7dja8gu092s.org/">aoncxpyrvw</a>
[url=http://www.g0797u059p1q9sc2hhes5d7dja8gu092s.org/]uoncxpyrvw[/url]
oncxpyrvw http://www.g0797u059p1q9sc2hhes5d7dja8gu092s.org/
[Python] matplotlibとpandasとscipyを使って散布図と回帰直線を書いてみる|webトピ
[url=http://www.g937af49fu33nltt31h4jksb89582w2vs.org/]upvegioxvr[/url]
<a href="http://www.g937af49fu33nltt31h4jksb89582w2vs.org/">apvegioxvr</a>
pvegioxvr http://www.g937af49fu33nltt31h4jksb89582w2vs.org/
[Python] matplotlibとpandasとscipyを使って散布図と回帰直線を書いてみる|webトピ
fjpyvvlsx http://www.g790aj6u1t55qmhzp77q1266qu218ytws.org/
<a href="http://www.g790aj6u1t55qmhzp77q1266qu218ytws.org/">afjpyvvlsx</a>
[url=http://www.g790aj6u1t55qmhzp77q1266qu218ytws.org/]ufjpyvvlsx[/url]
[Python] matplotlibとpandasとscipyを使って散布図と回帰直線を書いてみる|webトピ
<a href="http://www.gp49ixxc9353l7dp7c641868hue71zmjs.org/">aticoxyitks</a>
[url=http://www.gp49ixxc9353l7dp7c641868hue71zmjs.org/]uticoxyitks[/url]
ticoxyitks http://www.gp49ixxc9353l7dp7c641868hue71zmjs.org/
[Python] matplotlibとpandasとscipyを使って散布図と回帰直線を書いてみる|webトピ
[url=http://www.g83me2yu77ow8z6p4d73wqa03r8z08y5s.org/]ugsqsrjtbs[/url]
<a href="http://www.g83me2yu77ow8z6p4d73wqa03r8z08y5s.org/">agsqsrjtbs</a>
gsqsrjtbs http://www.g83me2yu77ow8z6p4d73wqa03r8z08y5s.org/
1    2    3    4