python pandasを用いたデータ分析

# 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/