Technofara

Golangエンジニア!仕事で必要になって勉強した事とか、新しい事とか色々まとめたりを緩くやります。技術系と思考系だけにしておきます、

「データ・サイエンスのプログラミング言語はRからPythonに置き換わる」という記事を見てやってみた

データ・サイエンスといえば、Rと思ってたんですけど Pythonでも増えてきてる?ということで、データサイエンス初心者ですが、やってみました!

まずは準備

python自体も初心者なので、環境づくりからですね。 今回はcentosを使ってます。

そして、今回は http://lambdalisue.hatenablog.com/entry/2013/09/23/130945 を参考に準備、解析処理入門

パッケージインストール

まずは、pipと呼ばれる、パッケージ管理

$ sudo su
$ yum -y install python-setuptools
$ easy_install pip

pipパッケージ更新と、データ解析に必要なパッケージインストール

//最新バージョンにする
$ pip install -U pip
$ yum install python-numpy python-scipy python-matplotlib pygtk2
$ pip install mpltools

とりあえず、データがないことには始まらないので 解析用サンプルデータ取得

wget https://gist.github.com/lambdalisue/6666056/raw/ac5789a3da1bb2c2b486caa3374017ed61355c57/raw.dat

中身は

601.0000  54.1752
602.0000    51.0315
603.0000    48.2909
604.0000    45.3684
605.0000    42.6365
606.0000    40.0859
607.0000    37.7295
608.0000    35.4361
609.0000    33.4751
......

では、解析用スクリプト作成、サンプル通りに

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
#
# Author:   shinofara
# Date:     2013-12-03
#
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as pl

# データの読み込み(スペースなどで自動的に区切られる)
data = np.loadtxt("raw.dat")

# 読み込んだデータは行列として表現されているので
# 一列目をX、二列目をYとして取り出す。
X = data[:,0]
Y = data[:,1]

# X, Yデータを描画
pl.plot(X, Y)

# グラフのスーパータイトルを指定(オプション)
# 複数グラフを表示した際などに総括タイトルとして使用することが多い
pl.suptitle("Fluorescence intensity")

# グラフのタイトルを指定(オプション)
pl.title("Fluorescence intensity of ECFP")

# X軸, Y軸のラベルを設定(オプション)
# 必要であればLaTeX的な指定も$で囲むことで可能。
# 例えば文字中に$\AA$とするとオングストロームの記号を表示可能。
pl.xlabel("Wavelength [nm]")
pl.ylabel("Intensity")

# X軸, Y軸の範囲を指定(オプション)
# 他のグラフと合わせる場合などに便利だが指定しない場合は自動的に見やすい
# 範囲となるため理由がない限り指定しないほうが多い
pl.xlim(450, 650)
pl.ylim(0, 5000)

# グラフにグリッドを表示(オプション)
pl.grid()

# グラフを表示 or 保存
#pl.show()               # 表示
pl.savefig("test.png") # 保存(svg, epsなどにも対応)

準備ができたので、実行

$ python test.py

正常に処理が完了したら、test.pngができる。 そのファイルを見てみると

f:id:shinofara:20131203220609p:plain

結果こんなグラフが出来た。

おお、これは楽しそう。 いろいろ勉強してみるか