LogoMark.png

Pandas のバックアップ(No.11)


Pandas

https://pandas.pydata.org/

Pandas は、データの読込、集計、並べ替え、欠損値の補完などを行うことができるデータ解析の定番ライブラリで、.csv、.xlsx 他、多様な形式のデータを読み込みに対応しています。大量のデータの読み込みに対応しており、表計算ソフトよりも高速で処理を行うことができます。

Pandas の特徴は DataFrame にあります。DataFrame にはデータの平均値や行数などの情報把握、並替え、列名変更といったデータ整形機能があります。


CONTENTS




準備

インストール

Python 言語のライブラリとしてのインストールになるので、一般の Python3 の環境であれば、Terminalから以下のコマンドでインストールできます。

$ pip3 install pandas
$ pip3 list  ← 念のため一覧表示


pandasを使った処理の冒頭部分の事例

# 必要なライブラリのインポート
import numpy as np
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plt




DataFrame

pandas による DataFrame の定義

一般に、データフレームは CSV や Excel 等のデータを読み込んで生成するものですが(後述)、ここではデータフレームの構造を理解する意味で、直接的なデータの定義方法について紹介します。

pd.DataFrame( data, index, columns, dtype, copy)

DataFrame は dataindexcolumns の3つの要素から構成されます。

以下、DataFrame を扱う変数として df を使って事例を紹介します。
df は DataFrame の略として一般によく用いられる変数名です。

定義例1

df = pd.DataFrame( [ [ '佐藤', 170, 60 ] , ['田中', 160, 50 ] , [ '鈴木', 165, 58 ] ]  )
df
          0         1     2
0     佐藤   170   60
1     田中   160   50
2     鈴木   165   58

行ラベル、列ラベル(index と columns ) には、自動的に番号数字が入ります。

定義例2

df = pd.DataFrame(
     data =[ [ '佐藤', 170, 60 ] , ['田中', 160, 50 ] , [ '鈴木', 165, 58 ] ] ,
     index = ['S01', 'S02', 'S03'],
     columns =[ 'name' , 'height', 'weight']
)
df
          name  height  weight
S01    佐藤     170         60
S02    田中     160         50
S03    鈴木     165         58


定義例3:2次元配列を使って定義する事例

df = pd.DataFrame(
    data = np.array( [ [10, 20, 30, 40], [11, 21, 31, 41], [12, 22, 32, 42] ] ),
    index = [ 'row_1', 'row_2', 'row_3' ] ,
    columns = [ 'col_1', 'col_2', 'col_3', 'col_4' ]
)
df
              col_1     col_2     col_3     col_4
row_1        10          20          30          40
row_2        11          21          31          41
row_3        12          22          32          42


定義例4

0から11までの数値を 3行・4列にあてはめて定義する事例

df = pd.DataFrame(
    data = np.arange(12).reshape(3, 4),
    index = [ 'row_1', 'row_2', 'row_3' ],
    columns = [ 'col_1', 'col_2', 'col_3', 'col_4' ]
)
df
               col_1     col_2     col_3     col_4
row_1          0            1            2           3
row_2          4            5            6           7
row_3          8            9           10         11




基本的なメソッド

データの読込

データの情報把握

行・列数の最大値

DataFrame.set_option( )

処理の実行後の表示では、行・列数が制限されていて、データ数が多い場合は、中途が・・・と省略表示になります。これを回避するためのメソッド。

行・列名の変更

DataFrame.rename( )

rename メソッドの引数 index および columns に、{ 元の値 : 新しい値 } のかたちで(辞書型の定義)で元の値と新しい値を指定します。デフォルトでは削除後の状態を返すだけで、元の DataFrame そのものを破壊・更新するわけではありません。引数 inplace = True にすると、元の DataFrame が変更されます。


行・列の削除

DataFrame.drop( )

dropメソッドは、デフォルトでは削除後の状態を返すだけで、元のデータフレームそのものを破壊・更新するわけではありません。引数 inplace = True にすると、元の DataFrame が変更されます。

欠損値に関する処理

DataFrame.isnull( ) , DataFrame.dropna( ) , DataFrame.fillna( )

実際のデータには、無回答や入力ミスなどで欠損値が発生することがあります。pandas では NaN(Not a Number:非数) と表記され部分が欠損値ですが、これは後の演算等でエラーを発生させる原因となるので、それを含む部分は除去することが必要です(データクレンジング)。

データの並べ替え

データの抽出

DataFrame[ ]、DataFrame.iloc[ ]、DataFrame.loc[ ]

以下、いずれも抽出後の DataFrame を返しますが、元のデータフレームそのものが更新されることはありません(非破壊操作)。


query メソッドによるデータの抽出

DataFrame.query( )

以下、いずれも抽出後の DataFrame を返しますが、元のデータフレームそのものが更新されることはありません(非破壊操作)。

カウント・合計・平均・中央値・分散

DataFrame.value_counts( ) , DataFrame.sum( ) , 
DataFrame.mean( ),  DataFrame.median( ) ,  DataFrame.var( )

GroupByオブジェクトの利用

DataFrame.groupby( )

特定の列データの値を基準にグルーピングした上で、グループごとの統計処理を行うことができます。例えば、全学生の成績一覧がある場合に、学部ごとの成績の平均を求める・・といったことが可能です。


クロス集計

pandas.crosstab( )

2項目のカテゴリの組み合わせでサンプル数の算出ができます。
第一引数が index(行見出し)、第二引数が columns(列見出し)となる DataFrame が返されます。

ピボットテーブル

pandas.pivot_table( index = 'XX', columns = 'XX', values = 'Fare' )

2項目のカテゴリの組み合わせで、データの統計量(平均、合計、最大、最小、標準偏差など)を確認・分析できます。

https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html




データの可視化

以下、Matplotlib の import が必要です。> DataVisualization

import matplotlib.pyplot as plt


ヒストグラム:DataFrame.hist( )

汎用グラフ:DataFrame.plot( )  引数kindでグラフの種類を指定できます。

散布図:DataFrame.plot.scatter( )

df.plot.scatter( x='item1', y='item2' )


箱ひげ図:DataFrame.boxplot( )

df.boxplot( column="item-x", by="item-y" )




活用サンプル

以下に、Pandas によるデータ読み込みのサンプルを掲載しています。
ipynb(JupyterNotebook)形式で、GitHubに置いていますが、レンダリングがタイムアウトする場合は、下の nbviewer 経由でご覧下さい。

参考:ライブラリのサンプルデータを読む事例

# サンプルデータセットを取得
from sklearn import datasets
boston = datasets.load_boston( )
# 読み込んだデータを Pandas の DataFrame型に変換
df = DataFrame( boston.data , columns = boston.feature_names )
# 目的変数をDataFrameへ追加
df[ 'MEDV' ] = np.array( boston.target )