読者です 読者をやめる 読者になる 読者になる

ビズオーシャンでのインターン日記

プログラミング未経験の文系大学生がインターンシップで頑張る日記です

vol.5 Pandasとdataframe


3月13日は、作成したデータフレームからグラフを作ってみましたが、

その前に備忘録として


Pandasとは何なのか?
何のためにdataframeするのか?


自分なりの解釈で書いていきたいと思います。




Pandasについて(備忘録1)

ウィキペディア( https://ja.wikipedia.org/wiki/Pandas )によると、pandasとは
プログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリ」らしいです。なるほど。


いや、プログラミングで使うライブラリとは?


プログラミング初心者は、ライブラリとか言われても、
プログラミング自体とライブラリとの関係性がいまいち理解できないというか、
ほかの人はどうか分かりませんが私はそうでした。



そこで、ライブラリに関して分かりやすい記事を見つけたので
シェアしておきます。
http://wa3.i-3-i.info/word1473.html



このページに書かれていることをもとにpandasを改めて説明すると、

Pythonでデータ解析をするとき、
自分で地道にコードを書いていくことも出来なくはないけど、
事前にpandasをインポートしておくとPythonのままpandasの機能(解析に便利なやつ)を使えるよ、   

という感じでしょうか。

dataframeについて(備忘録2)


dataframeに関しては、
正直なところ調べてもよく分かりませんが、

とりあえず現時点で調べて分かったことをメモ程度に書いていきます。

参考にしたページはこちら
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/39.html 
  http://qiita.com/kiimiiis/items/0e1646adf0dab0061845



pandasでは主なデータ構造が2つあって、
1つは一次元(Series)、
もう1つは二次元(dataframe)、
これに関してはまだはっきりとは分からないというか、掴めないです。


ただ、
単純に文字と数字を表のように並べて書いたものがSeries、

その表のようなものを構成する文字や数字に、
行ごとに列ごとに意味を付けて表にしたものがdataframe、という感覚です。


dataframeは文字や数字をただ並べただけのものではないので
列ごとに整理することもできますし、
平均値や標準偏差を出したり、グラフを作ったりすることもできます。
クロス集計もできるみたいです。






dataframe、グラフ作成

さて本題に入ります。

まず、書式IDをそのダウンロード数と、
企業の従業員数別に表した表をデータフレームで作成して
「pivot_df_sorted」という名前を付けました。

pivot_df=EMPLOYEE_SCALE_NAME_DF.pivot(index="product_id",columns="employee_scale",values="count").fillna(0)
pivot_df_reindex = pivot_df.reindex(
columns=[u"1~9名",
         u"10~49名",
         u"50~99名",
         u"100~299名",
         u"300~499名",
         u"500~999名",
         u"1000~2999名",
         u"3000~4999名",
         u"5000~9999名",
         u"10000名以上",
         u"(未回答)"])
pivot_df_sorted = pivot_df_reindex.sort_values(by=u"1~9名", ascending=False).fillna(0)
pivot_df_sorted


前回、EMPLOYEE_SCALE_NAME_DFというデータフレームを作成しましたが、
ここでpivotを用いて、
列にproduct_id、行にemployee_scale
を指定して改めてデータフレームを作りました。



ただ、これだけではemployee_scaleの並びがバラバラなので、
reindexという機能でcolumnsの名前を指定し、順番に並べていきます。




前回作成したもの
f:id:yuka_nakayama:20170403105800p:plain

今回改めて作成したもの
f:id:yuka_nakayama:20170403105829p:plain




また、行ごと、列ごとに和を出していきます。

pivot_df_sorted['p_sum']=pivot_df_sorted.sum(axis=1)
pivot_df_sorted.sort_values(by="p_sum")

pivot_df_sorted.loc["es_sum"] = pivot_df_sorted.sum()
pivot_df_sorted

上2行が行ごとの和(p_sum)、
下2行が列ごとの和(es_sum)を出すコードです。



1行目に(axis=1)とありますが、
これは行に対する演算をする、という意味です。








これをもとにグラフを作っていきます。

グラフにするコードは比較的シンプルで、

pivot_df_sorted.loc["es_sum"].drop("p_sum").plot.pie(figsize=(8,8))

だけです。




pivot_df_sortedのes_sum(列ごとの和)を指定して、
p_sum(行ごとの和)はdropで省く。

plotでグラフ化、
pieはグラフの種類の指定です。

f:id:yuka_nakayama:20170403110603p:plain


ここでは円グラフを指定しましたが、

たとえば棒グラフならbar、
散布図ならscatterなどを書きます。


f:id:yuka_nakayama:20170403110114p:plain