LoginSignup
18
17

More than 5 years have passed since last update.

python pandasを用いたデータ分析

Last updated at Posted at 2016-01-17

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/

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17