LoginSignup
35
29

More than 5 years have passed since last update.

備忘録@Python OR セミナー:Pandas

Posted at

pandas

>>> import pandas as pd

pandasは「Pythonによるデータ分析入門」で取り上げられているライブラリ.詳しく勉強したければ,こっちを勉強してください.
Pythonによるデータ分析入門

データ型

pandasにはSeriesDataFrameという二種類のデータ型がある.

Series

一列(行)のデータを扱う型.

# 普通のリスト型
>>> lst = [1, 2, 3, 4, 5]
# Series
>>> s = pd.Series(lst)
>>> s
0    1
1    2
2    3
3    4
4    5
dtype: float64

DataFrame

表のデータを扱う型.

# 普通の辞書型
>>> dic = {"a": [1, 2, 3], "b": [9, 8, 7]}
# DataFrame
>>> df = pd.DataFrame(dic)
    a   b
0   1   9
1   2   8
2   3   7

I/O

ファイル読み込みが提供されてる.

>>> pd.read*? # *つけると部分一致
pd.read_clipboard
pd.read_csv
pd.read_excel
pd.read_fwf
pd.read_gbq
pd.read_hdf
pd.read_html
pd.read_json
pd.read_msgpack
pd.read_pickle
pd.read_sql
pd.read_sql_query
pd.read_sql_table
pd.read_stata
pd.read_table

csvファイル読み込み例

>>> dataset = pd.read('sample.csv')

csvファイル書き込み例

>>> dataset.to_csv('write.csv')

データの読み出し

数行のデータを見たいとき

>>> dataset.head() # 引数にintegerを入れると
>>> dataset.tail() # integer行読み出してくれる

>>> dataset.ix[n] # n行目を見る
>>> dataset.ix[m:n] # m~(n-1)行目を見る
>>> dataset.ix[[0, 3, 5]] # 離れた行を見る

数列のデータを見たいとき

>>> dataset.カラム名
# もしくは
>>> dataset['カラム名']
# 複数列見たいときは
>>> dataset[['カラム名1', 'カラム名2', ...,]]

検索

>>> dataset[dataset.UID == 'カラム名']

欠損値NAの処理

欠損値の有無確認

len()count()を組み合わせるらしい

  • len()はデータのサイズを取得する.
  • count()は列方向にNA以外の要素数を取得する. (引数にaxis=1ってすると行方向になる)
>>> len(dataset) - dataset.count()
UID             0
dtime           0
Sousyouhi       0
Hatsudenryou    0
Jikasyouhi      0
Uriden          0
Kaiden          0
Use_AirCon      0
Use_Kyutou      3
Use_Kaden       0
dtype: int64

さらに詳しくみるときはisnull()any()を組み合わせるといいんだとか.
isnull(): 要素がNAのところをTrueに,それ以外をFalseにする.
any(): 列方向で一つでもTrueがあればTrueを,無ければFalseを返す.
(引数をaxis=1とすれば,行方向になる)

>>> dataset[dataset.isnull().any(axis=1)]

欠損値NAの処理

主に2つ.
dropna(): NAが含まれる行を削除する.(引数にaxis=1で列方向)
fillna('何か'): NAを何かに置き換える.

>>> dataset.dropna()

>>> dataset.fillna(0) # NAを0に置換する

# NAを前の値で埋める front?
>>> dataset.fillna(method='ffill')
# NAを後ろの値で埋める back?
>>> dataset.fillna(method='bfill')

要約統計量

describe()を使えば,大体のものを算出してくれる.
count, mean, std, min, 25%, 50%, 75%, max

>>> dataset.describe()

グループ化

要素でグループ化する.

>>> dataset.groupby('カラム名')

グラフ

pandasだけでもある程度のグラフは書けるらしい.

時系列グラフ

dtimeをindexにする

>>> tdataset = dataset.copy()
>>> tdataset.index = tdatasset.dtime.apply(pd.to_datetime)
>>> tdataset.drop('dtime', axis=1, inplace=True)
>>> b = tdataset[tdataset.UID == 'id1'] \
...                      [['UID', 'Soushohi']]
>>> b.plot()

リサンプリング

上のようにそのまま(2時間おき)だとグラフが細かすぎる.
一日おきにする.

>>> c = b.resample('1d') # 1m: 1ヶ月おき
>>> c.plot()
>>> b.resample('1d', 'std').plot() # 標準偏差
>>> b.drop('UID', axis=1).resample('1d', 'max').plot() # 最大値

移動平均

>>> pd.rolling_mean(c, 12).plot() # 12週間

ヒストグラム

>>> c.hist()

箱ひげ図

>>> c.boxplot(return_type='axes')

相関係数

>>> c.corr()

コレログラム

>>> import statsmodels.api as sm
>>> plot(sm.tsa.acf(b.カラム名))

散布図

>>> pd.tools.plotting.scatter_matrix(c)

重回帰

>>> c = c.fillna(0)
>>> m = sm.OLS(c.Soushoshouhi, \
...          c[['Hatsudenryou', 'Use_AirCon']])
>>> r = m.fit()
>>> r.summary2()

オンラインドキュメント

残りはここで.

35
29
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
35
29