python pandas numpy関係
N=1のデータならipython notebookが便利
N=10以上のデータで繰り返し処理をする人はipythonのまま使う方が便利
ただclass等を使いobject志向風にするとやりづらい面があるので解決策を模索中
class ClassName:
def __init__(self, filename):
self.data = pd.read_csv(filename)
self.filename = filename
def method(self):
data = self.data
if __init_='__main__':
def method(self):
method()
instance = ClassName(filename)
data = instance.data
のようにすると扱い易いかもだがデータ分析においては汚染を気にすると異常に時間がかかるので気にしない方が良いかも
dataをpandasオブジェクトとして扱えるので良いかもしれない
includeするファイル
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy as sp
import scipy.signal as signal
import logging
import sys
import os
import re
なお環境構築はpyenvとanacondaが非常に便利だった。
環境は
vimとitermで%runでファイル実行
か
ipython notebook上で全ての作業をする
のが良さそう
手戻りを防ぐため
pd.dataframe.to_csv('default.csv')
で各段階のデータをsaveしたいがストレージが大変なことになるのでTradeOff
pandasの公式Tutorialが良い
ループと条件分岐をスライスと真偽値配列に変換する
ループはファイルの取得ぐらいでしか使わないようにする
numpyは結局ブール代数配列(真偽値配列)を有効に活用、スライシングで値をずらして使う
pandasで最悪、applyやlamda関数を使用して書く
datetimeindexならresample
print文が良くない説のためのlogger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
これで
logging.debug('here')
が標準出力やipython上に表示される
matplotlib関連
matplotlib.pyplotのインタラクティブな描画macの場合
%matplotlib osx
が必要?
plt.ion()等は要調査
イケてる図の描画
pd.options.display.mpl_style = 'default'
点の描画
plt.plot(marker='o', linestyle=None)
または
plt.plot(linestyle='o')
オプションの追加
simulation等動的な画像の描画
for x in range(y):
plt.clf()
plt.draw() # ここで描画ではなく
plt.pause(0.1) # ここで描画確か[s]
で再描画が必要
グラフの描画
plt.show()
グラフの大量描画を防ぐため
plt.close()
して
plt.show()
simulation例
fig, ax = plt.subplots()
for i in np.arange(count):
logging.debug(i)
ax.clear()
ax.set_title( self.title )
self.data.iloc[ i*TIME_RANGE:(i)*TIME_RANGE].plot(ax=ax, legend=False)
plt.draw()
plt.pause(PAUSE_TIME)
3Dの図の描画(interactiveなので感動する)
from mpl_toolkits.mplot3d import Axes3D
時系列関連
pandasはDatetimeIndexがすごい
resampleメソッドが便利
その他
pidの取得
print os.getpid()
logger setting
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
reload
reload('./filename.py')
要素の取得法
describeで一度は感動出来る
整数によるスライシングには注意
[In] np.array([0, 1, 2])[:2]
は
[Out] array[0, 1]
インデックス使いこなさないと処理が異常に重くなることが多い
時系列と整数二つのindexを持つと便利
optionでindex=[Series, Series]
set_index
インデックス参照の方法
[:2, :]等
ix
iloc, loc
iget_value
Seriesのみ
irow, icol
DataFrameのみ
reindexとset_indexが便利
value_countsが便利
データのマージ法
concatが高速
普通の代入で行ける所はいった方がよい
data['name'] = pd.Series, list
na値の処理法
+が早いことがある
dropnaはよく使う
DatetimeIndexの便利なメソッド
resample
タブ補完とイントロスペクションが必須ググる回数を圧倒的に減らしてくれる
デバッガが便利そう(要調査)
%debug
uやdで移動
s
b 12 # ブレークポイント
c
n
!変数名
デジタルなら一次微分はdiff関数がある
慣れると便利なブール代数参照とapplyメソッド
matplotlibのラッパーseabornがいいらしい
統計ライブラリ
statsmodelが扱いやすそう
scipy.stats
orange
その他ライブラリ
機械学習scikit-learn
スクレイピングbeautiful soup
自然言語処理nltk
画像処理opencv
超良記事
自分も含め、Rとpython両方を本格的に学習する人は少なく(印象ベース)、比較があてにならないが、これは信頼に足る記事
https://chezou.wordpress.com/2014/01/18/%E7%A7%91%E5%AD%A6%E8%A8%88%E7%AE%97%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%9D%87%E8%B3%AA%E5%8C%96%E3%80%81%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E3%81%AA%E3%81%9Cpython%E3%81%8C%E7%9D%80%E5%AE%9F/
http://postd.cc/r-vs-python-head-to-head-data-analysis/