最もデータサイエンティストが使うであろう
ライブラリがコレではないかなと
思うライブラリです。
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(引数)
引数 | 内容 |
---|---|
data | numpy ndarray(構造化または同種) Dict、またはDataFrame,Dictには、Series、 配列、定数、またはリストのようなオブジェクト |
index | 結果のフレームに使用するインデックス。 入力データのインデックス情報がなく インデックスが提供されていない場合は デフォルトでnp.arange(n) |
columns | 結果のフレームに使用する列ラベル。 列ラベルが指定されていない場合 デフォルトはnp.arange(n) |
dtype | dtype、デフォルトなし 強制するデータ型。 単一のdtypeのみが許可されます。Noneの場合、推論 |
データフレームの作成
empty_df = pd.DataFrame()
pd.DataFrame()
これで空のデータフレームが作成されます。
カラム付きで作成するには
c_df = pd.DataFrame(columns=[1,2])
columns=[カラム名配列]
これでカラムを付けてデータフレーム作成です。
c_df = pd.DataFrame(index=[1,2])index=[インデックス名配列] とします。
辞書型からデータフレームを作成する場合は
data = {'a':[0, 1], 'b':[2, 3]} d_df = pd.DataFrame(data=data)
d_df
a | b | |
---|---|---|
0 | 0 | 2 |
1 | 1 | 3 |
data=辞書型
と引数を指定して作成します。
キーがカラム名、値は値になります。
インデックスは指定しなければ
数値の型が自動で割り振られます。
数値以外に指定したい場合は
作成時に指定するか、作成後に指定をして付け直します。
インデックスの形式をDatetimeIndexにして作成するには
date = pd.date_range('2012-1-1', '2012-1-2', freq='D') di_df = pd.DataFrame(data, index=date) di_df
a | b | |
---|---|---|
2012-01-01 | 0 | 2 |
2012-01-02 | 1 | 3 |
freq='D'を指定する事で日付の形式でインデックスが付けられます。
これは時系列での分析を行う際に有用な付けになるので
覚えておくと良いでしょう。
辞書型にカラムを付けて作成
data2 = {'4':11 , '6':22 , '7':33} e_df = pd.DataFrame(list(data2.items()),columns=['column1','column2']) e_df
column1 | column2 | |
---|---|---|
0 | 4 | 11 |
1 | 7 | 33 |
2 | 6 | 22 |
辞書型のキーと値をデータとして利用し、
カラムを付け替えます。
numpyからデータフレーム作成
np_df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)), columns=['a', 'b', 'c', 'd', 'e']) np_df
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 6 | 1 | 9 | 9 | 7 |
1 | 3 | 2 | 2 | 5 | 2 |
2 | 0 | 6 | 6 | 2 | 9 |
3 | 8 | 0 | 1 | 1 | 1 |
4 | 2 | 4 | 8 | 0 | 8 |
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) | |
---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 |
1 | 4.9 | 3.0 | 1.4 | 0.2 |
2 | 4.7 | 3.2 | 1.3 | 0.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 |
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 |
|
|
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 |
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
データの加算(合計)
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
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
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
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
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
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