"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

Pandasデータフレームと内容を把握するのによく使う方法のサンプル

f:id:arakan_no_boku:20200329000112p:plain

目次

Pandaのデータフレーム

Pandasには2つの主要なデータ構造があります。

Series(シリーズ)が1次元のデータ構造。

DataFrame(データフレーム)が2次元のデータ構造です。

2次元のデータ構造というと難しそうに聞こえますが、ようするに、EXCEL表みたいな感じで行と列でデータを保持するということです。

列は「列名」をつけて管理し、行数は「行インデックス」として管理します。

ただ、EXCELと違ってPandasの情報は、画面を見ながらポチポチとはいかないので、内容を確認したり、合計したりとかする方法を知らないと、まず、何がどうなっているかわかりませんので、今回は、そのやり方のさわりだけ整理しとこうと思います。

 

Pandasのデータフレームの内容を把握する方法

コード例は、以下がインポートされている前提とします。

import pandas as pd

以下の要領でCSVファイルを読み込んで「df01」というDataFrameがある想定です。

df01 = pd.read_csv('./csvdata/train.csv')

例では kaggleのtitanicデータを一部使わせていただいてます。

 

1.データ型や行数など基本情報を確認

基本情報を見る方法です。

  • データ型(Dtype)
  • 行数(entries)
  • カラム名(Column)
  • 欠損値の有無(Non-Null Countの列の数字が、行数より少ない)

などをまとめてみるには「info()」が便利です。

df01.info()

f:id:arakan_no_boku:20200510004837p:plain

2.数値データの統計情報

数値データ(int、floatなど)の統計情報をまとめてみます。

df01.describe()

f:id:arakan_no_boku:20200510005856p:plain

これで

  • count:欠損値以外の数
  • mean:平均
  • std:標準偏差
  • min:最小値
  • 25%:第一四分位数
  • 50%:中央値(第二四分位数)
  • 75%:第三四分位数
  • max:最大値

をまとめて確認できます。

3.数値以外の統計情報

数値以外の統計情報を見ます。

同じdescribeですが、「数値項目以外(exclude=number)」を指定します。

df01.describe(exclude='number')

f:id:arakan_no_boku:20200510132915p:plain

これで

  • count:要素の個数
  • unique:一意(ユニークである)な要素の数
  • top:最頻値(もっとも多く登場する値)
  • freq:最頻値の出現回数

がまとめてわかります。

uniqueの数とcountでばらつきが少ない項目はカテゴリデータとして利用できます。

4.ピボット分析(カテゴリタイプ)

特徴変数ごとに、該当する目的変数(今回の例だとSurvived)の割合をみると、特徴変数の重要度のあたりがつけやすいので、目的変数と特徴変数との関連性をピボットで見ていきます。

今回は、pandasの「croostab」とか「pivot_table」を使わずにやってます。

目的変数が「0」と「1」の2値の時だけ使える技です。

目的変数が3つ以上あったり、crosstabなどを使うパターンは、別の機会にします。

さて。

カテゴリタイプの特徴変数でピボットする例です。

[ と ]を2つ続けると化けてしまうので、画像で張り付けてます。

f:id:arakan_no_boku:20200521004150p:plain

 Survivedの生存が「1」死亡が「0」なので、平均をとって0.5なら生存と死亡が拮抗してて、それより上なら生存率が高い要素、低ければ生存率が低い要素になります。

f:id:arakan_no_boku:20200510134426p:plain

5.ピボット分析(数値・等分割)

数値データの場合はカテゴリのようなやり方をするとバリエーションが多くなりすぎるので、数値が含まれる範囲で分析することがあります。

その分割のやり方のひとつとして、等分割して、ピボット分析します。

等間隔に5等分して、生存率と対比します。

この例も画像で貼ってます。

f:id:arakan_no_boku:20200521001745p:plain

結果はこうです。

f:id:arakan_no_boku:20200510212333p:plain

6.ピボット分割(数値・範囲分割)

今度は範囲指定で分割して、ピボット分割します。

年齢を10歳きざみで分割して、生存率と対比させます。

この例も画像で貼ってます。

f:id:arakan_no_boku:20200521001824p:plain

結果はこうです。

f:id:arakan_no_boku:20200510213048p:plain

7.その他、情報確認でよく使うもの一覧

 最後に、単純な情報確認でちょこちょこ使うのをまとめておきます。

 dtypeとかはNumpyのそれと同じです。

意味 結果例
t.head() 先頭の5行を表示

id name price

0 S01 アイテム1 50000

1 S02 アイテム2 85000

2 S03 アイテム3 120000

3 S04 アイテム4 180000

4 S06 アイテム5 210000

t.tail() 最後の5行を表示

id name price

5 S07 アイテム6 50000

6 S08 アイテム7 85000

7 S09 アイテム8 120000

8 S10 アイテム9 180000

9 S11 アイテム10 210000

t.shape 形状を表示 (10, 3)
t.isnull().sum()

欠損値(NaNなど)をカウントする。

チェックに使う。

右例なら「name」と「price」に欠損がある。

id 0
name 3
price 3
cate 0
size 0

今のところこんな感じです。

ではでは。