pythonのライブラリの中で
最もデータサイエンティストが使うであろう
ライブラリがコレではないかなと
思うライブラリです。

pandas公式

APIリファレンス


データフレームという型のデータ形式で
データの集計や可視化を行う事のできるライブラリです。
jupyter notebookでの詳しい使い方を説明してゆきましょう


まずはライブラリをインポート、別名をpdとしておきます
ついでにnumpyも加えておきましょう
importには少しだけ時間がかかるようです
import pandas as pd
import numpy as np

また可視化をするためのライブラリも別途インポートしておきます。
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
最後の行のinline指定はjupyter上で可視化をさせるためのコードで
これがないと別枠(window)に表示されてしまいます。


データフレームについて

データフレームはカラムとインデックスを持ち
エクセルの表の様な構造をしています。

DataFrame(引数)

引数内容
datanumpy ndarray(構造化または同種)
Dict、またはDataFrame,Dictには、Series、
配列、定数、またはリストのようなオブジェクト
index結果のフレームに使用するインデックス。
入力データのインデックス情報がなく
インデックスが提供されていない場合は
デフォルトでnp.arange(n)
columns結果のフレームに使用する列ラベル。
列ラベルが指定されていない場合
デフォルトはnp.arange(n)
dtypedtype、デフォルトなし 強制するデータ型。
単一のdtypeのみが許可されます。Noneの場合、推論


データフレームの作成
empty_df = pd.DataFrame()

pd.DataFrame()
これで空のデータフレームが作成されます。

カラム付きで作成するには
c_df = pd.DataFrame(columns=[1,2])

columns=[カラム名配列]
これでカラムを付けてデータフレーム作成です。
 
同じくindexを付ける場合は
c_df = pd.DataFrame(index=[1,2])
index=[インデックス名配列] とします。

辞書型からデータフレームを作成する場合は
data = {'a':[0, 1], 'b':[2, 3]}
d_df = pd.DataFrame(data=data)
d_df 
ab
002
113

data=辞書型
と引数を指定して作成します。
キーがカラム名、値は値になります。

インデックスは指定しなければ
数値の型が自動で割り振られます。

数値以外に指定したい場合は
作成時に指定するか、作成後に指定をして付け直します。

インデックスの形式をDatetimeIndexにして作成するには
date = pd.date_range('2012-1-1', '2012-1-2', freq='D')
di_df = pd.DataFrame(data, index=date)
di_df
ab
2012-01-0102
2012-01-0213

freq='D'を指定する事で日付の形式でインデックスが付けられます。
これは時系列での分析を行う際に有用な付けになるので
覚えておくと良いでしょう。

辞書型にカラムを付けて作成
data2 = {'4':11 , '6':22 , '7':33}
e_df = pd.DataFrame(list(data2.items()),columns=['column1','column2'])
e_df
column1column2
0411
1733
2622

辞書型のキーと値をデータとして利用し、
カラムを付け替えます。


numpyからデータフレーム作成

np_df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
                     columns=['a', 'b', 'c', 'd', 'e'])
np_df
abcde
061997
132252
206629
380111
424808

numpyで5x5の数値をランダム生成し
それをデータフレームにします。
ダミーデータ作成などに便利です。

既存のデータから作成する

sklearnに付属のデータの読み込み

from sklearn.datasets import load_iris
iris = load_iris()
# データフレームに読み込み
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
# データフレーム内容表示(上から3行)
iris_df.head(3)


sepal length (cm)
sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2


CSVデータの読み込み

read_csv(ファイルパス , 引数)

引数

内容

sep

区切り文字 デフォルト: ‘,’ タブ '\t' セミコロン ';'

delimiter

sep の代わりに区切り文字を指定可能 デフォルト: None

header

ヘッダ行の行数を整数で指定 デフォルト: ‘infer’ ヘッダーなしは header=None

names

ヘッダ名をリストで指定 デフォルト: None 指定方法 names=('Time','Open')

index_col

行のインデックスに用いる列 デフォルト: None 数値か列名で指定

dtype

各行のデータタイプ : {‘a’: np.float64, ‘b’: np.int32} デフォルト: None

skiprows

先頭から読み込みをスキップする行数 デフォルト: None

skipfooter

末尾から読み込みをスキップする行数 デフォルト: None

nrows

読み込む行数 デフォルト: None

quotechar

ダブルクォーテーションなどでクオートされている場合のクオート文字 デフォルト: ‘”‘

escapechar

エスケープされている場合のエスケープ文字 デフォルト: None

comment

コメント行の行頭文字を指定 指定した文字で始まる行を無視 デフォルト: None

encoding

文字コード デフォルト: None 指定方法 ’utf-8′, ‘shift_jis’, ‘euc_jp’

parse_dates

datetime型で読み込むcolumn名(リストや辞書)

date_parser

parse_datesで指定したcolumnを読み込む自作関数

na_values

欠損値とする文字列(リスト)



titanic_df = pd.read_csv('data/titanic_train.csv')
titanic_df.head(3)

PassengerId

Survived

Pclass

Name

Sex

Age

SibSp

Parch

Ticket

Fare

Cabin

Embarked

0

1

0

3

Braund, Mr. Owen Harris

male

22.0

1

0

A/5 21171

7.2500

NaN

S

1

2

1

1

Cumings, Mrs. John Bradley (Florence Briggs Th...

female

38.0

1

0

PC 17599

71.2833

C85

C

2

3

1

3

Heikkinen, Miss. Laina

female

26.0

0

0

STON/O2. 3101282

7.9250

NaN

S



CSVから読み込みカラム付けとDatetimeIndex付け
fx_df = pd.read_csv('data/DAT_ASCII_USDJPY_M1_201710.csv', 
                     sep=';',
                     names=('Time','Open','High','Low','Close',''),
                     index_col='Time', 
                     parse_dates=True)
fx_df.head()

Open

High

Low

Close


Time






2017-10-01 17:00:00

112.627

112.658

112.526

112.526

0

2017-10-01 17:01:00

112.536

112.536

112.480

112.510

0

2017-10-01 17:03:00

112.512

112.532

112.510

112.510

0

2017-10-01 17:04:00

112.513

112.514

112.513

112.514

0

2017-10-01 17:05:00

112.519

112.531

112.519

112.530

0



エクセルファイルの読み込み
 
read_excel(ファイルパス)
dcf_df = pd.read_excel('data/DCFData.xlsx')
dcf_df

企業名

証券コード

会計年度

売上高

営業利益

当期純利益

支払利息(直近決算期)

支払利息(前々決算期)

有利子負債(直近決算期)

有利子負債(前々決算期)

ベータ値

減価償却費

現金同等物

有価証券(売却可能)

投資有価証券(売却可能)

株価

発行済株式数

リスクフリーレート

0

株式会社ファーストリテイリング

9983

2016

1786473000000

127292000000

48052000000

39420000000

1141000000

640457000000

388900000000

1.24

36797000000

385431000000

0

13132000000

43130

106074000

0.00082

1

豊商事

8747

2014

4237000000

-95000000

-255000000

0

0

1250000000

1118000000

0.77

244000000

5210000000

0

881000000

400





基本統計量
データフレーム名.describe()
titanic_df = pd.read_csv('data/titanic_train.csv')
titanic_df.describe()

PassengerId

Survived

Pclass

Age

SibSp

Parch

Fare

count

891.000000

891.000000

891.000000

714.000000

891.000000

891.000000

891.000000

mean

446.000000

0.383838

2.308642

29.699118

0.523008

0.381594

32.204208

std

257.353842

0.486592

0.836071

14.526497

1.102743

0.806057

49.693429

min

1.000000

0.000000

1.000000

0.420000

0.000000

0.000000

0.000000

25%

223.500000

0.000000

2.000000

NaN

0.000000

0.000000

7.910400

50%

446.000000

0.000000

3.000000

NaN

0.000000

0.000000

14.454200

75%

668.500000

1.000000

3.000000

NaN

1.000000

0.000000

31.000000

max

891.000000

1.000000

3.000000

80.000000

8.000000

6.000000

512.329200



平均値
データフレーム名.mean()
titanic_df = pd.read_csv('data/titanic_train.csv')
titanic_df.mean()
PassengerId    446.000000
Survived         0.383838
Pclass           2.308642
Age             29.699118
SibSp            0.523008
Parch            0.381594
Fare            32.204208
dtype: float64


データの加算(合計)
データフレーム名.sum()
titanic_df = pd.read_csv('data/titanic_train.csv')
titanic_df.sum()
PassengerId    397386.0000
Survived          342.0000
Pclass           2057.0000
Age             21205.1700
SibSp             466.0000
Parch             340.0000
Fare            28693.9493
dtype: float64

データ個数
データフレーム名.count()
titanic_df = pd.read_csv('data/titanic_train.csv')
titanic_df.count()
PassengerId    891
Survived       891
Pclass         891
Name           891
Sex            891
Age            714
SibSp          891
Parch          891
Ticket         891
Fare           891
Cabin          204
Embarked       889
dtype: int64

演算方向を指定する場合、列方向なら axis=0 行方向は axis=1

デフォルトはaxis=0



不偏分散
データフレーム名.var()
titanic_df.var()
PassengerId    66231.000000
Survived           0.236772
Pclass             0.699015
Age              211.019125
SibSp              1.216043
Parch              0.649728
Fare            2469.436846
dtype: float64



標本分散
データフレーム名.var(ddof=False)
titanic_df.var(ddof=False)
PassengerId    66156.666667
Survived           0.236506
Pclass             0.698231
Age              210.723580
SibSp              1.214678
Parch              0.648999
Fare            2466.665312
dtype: float64


不偏標準偏差
データフレーム名.std()
titanic_df.std()
PassengerId    257.353842
Survived         0.486592
Pclass           0.836071
Age             14.526497
SibSp            1.102743
Parch            0.806057
Fare            49.693429
dtype: float64

標本標準偏差
データフレーム名.std(ddof=False)
titanic_df.std(ddof=False)

PassengerId    257.209383
Survived         0.486319
Pclass           0.835602
Age             14.516321
SibSp            1.102124
Parch            0.805605
Fare            49.665534
dtype: float64