カレントディレクトリにDockerfile
を作成して実行する
[vagrant@localhost]# docker build -t centos .
カレントディレクトリにDockerfile
を作成して実行する
[vagrant@localhost]# docker build -t centos .
機械学習の本。P44のことをしたかった。
本はRで書いてあったが、Rわかんないので(試してみてもよかったが)Pythonでやることにした。
csv読み込み -> グラフを作成。なんてことをしたかったが、そもそも数値になっていないのでグラフ化できなかった。
DB使わないといけんかなーと。思いながら調べて見るとpandas
ってのが便利っぽい。
Pandasは、プログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリである。 特に、数表および時系列データを操作するためのデータ構造と演算を提供する。
wikiより
さらに
PythonでRっぽいことができるpandas
おっ。ばっちおkじゃないですかね。
http://gihyo.jp/book/2015/978-4-7741-7631-4/support
このページからclick_data_sample.csv
をダウンロード
# ライブラリをimport >>> import pandas as pd # csvを読み込み >>> csv = pd.read_csv('./click_data_sample.csv', header=False) # Falseにすると最初の一行目を列名として読み込み # 最初の2行目まで >>> csv.head(2) click.at user.id campaign.id 0 2015-04-27 20:40:40 144012 Campaign077 1 2015-04-27 00:27:55 24485 Campaign063 # 最後から2行目 >>> csv.tail(2) click.at user.id campaign.id 327428 2015-05-03 10:51:37 104666 Campaign108 327429 2015-05-03 22:26:20 154544 Campaign041 # カラムを指定して降順ソート >>> csv.sort(columns='user.id').head(5) click.at user.id campaign.id 159801 2015-04-30 13:53:51 4 Campaign063 159802 2015-04-30 17:52:55 4 Campaign038 67663 2015-04-28 17:57:35 4 Campaign074 114562 2015-04-29 02:39:32 4 Campaign063 67662 2015-04-28 12:58:00 4 Campaign074
この辺はLinuxのコマンドみたいだね
要約統計量
>>> csv.describe() user.id count 327430.000000 mean 83915.918853 std 48937.088017 min 4.000000 25% 40712.000000 50% 84169.000000 75% 126177.000000 max 169570.000000
・・・・・・・・・・・・・・・・・?(´・ω・)
なんだこれは?
調べてみるとどうやらあらかたの情報を集計とか平均をとったサマリらしい
>>> csv.describe() user.id count 327430.000000 # 合計 mean 83915.918853 # 平均(averageじゃないのか) std 48937.088017 # ? min 4.000000 # 最小値 25% 40712.000000 # ? 50% 84169.000000 # ? 75% 126177.000000 # ? max 169570.000000 # 最大値
?マークの箇所はよくわからない。
グルーピング
>>> csv.groupby([ 'user.id']).sum() click.at \ user.id 4 2015-04-27 20:48:042015-04-28 12:58:002015-04-... 9 2015-04-28 22:24:552015-04-29 14:13:11 10 2015-04-28 22:25:512015-04-28 22:27:212015-04-... 12 2015-04-28 07:10:152015-05-02 06:51:182015-05-... 13 2015-04-27 21:02:342015-05-02 21:41:192015-05-... 16 2015-04-27 10:57:072015-04-29 11:50:472015-05-... 19 2015-04-28 14:09:11 ... 169547 Campaign025Campaign072Campaign025 169548 Campaign128Campaign050Campaign128 169553 Campaign045 169557 Campaign067 169560 Campaign108 169561 Campaign061 169562 Campaign003 169564 Campaign062Campaign062 169570 Campaign082Campaign082Campaign082 [75545 rows x 2 columns]
なんか汚ねぇ。。。。なんだこれはどう読むんだい?
あ、そういうことか
どうやら、sum()
はカラムの値を合計するみたいだ。俺はカウントしたいんだった。試しにcount()
って関数を呼んでみると呼ぶことができた!
>>> csv.groupby('user.id').count() click.at campaign.id user.id 4 7 7 9 2 2 10 4 4 12 3 3 13 4 4 16 3 3 19 1 1 20 2 2 ...
なんか列がじゃまだね。
>>> csv.groupby('user.id')['user.id'].count() user.id 4 7 9 2 10 4 12 3 13 4 16 3 19 1 20 2 23 1 29 2 33 1 34 11 36 1 37 1 38 1
正しい使い方かどうか知らないが、これで見やすくなった
よし、これで数値化できたのでグラフが作れそうです。
前回
とりあえずグルーピングした値を用意した。
それを今度はmatplotlib
ってやつでプロッティング(?描画って意味かな?)する。
>>> import matplotlib.pyplot as plt
とりあえず渡す
>>> grouping_user_id user.id 4 7 9 2 10 4 12 3 13 4 16 3 19 1 ... >>> plt.plot(grouping_user_id) [<matplotlib.lines.Line2D object at 0x113dc2b90>] >>> plt.show()
????
私のイメージはこうである。
あれ?なんでだろう。。。?
あ!!! よく考えたらソートしてない!!
>>> grouping_user_id.sort(False, ascending=False) # 昇順ソート >>> plt.plot(grouping_user_id) >>> plt.show()
おお!できた(かも)
点にしてみる
>>> plt.plot(grouping_user_id, 'o') # 小さい円 = 点で描画する >>> plt.show()
あまりにも小さいため拡大しています。
これで戦える(本と同じことができる)準備はできたんじゃないかな。