目次
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()
2.数値データの統計情報
数値データ(int、floatなど)の統計情報をまとめてみます。
df01.describe()
これで
- count:欠損値以外の数
- mean:平均
- std:標準偏差
- min:最小値
- 25%:第一四分位数
- 50%:中央値(第二四分位数)
- 75%:第三四分位数
- max:最大値
をまとめて確認できます。
3.数値以外の統計情報
数値以外の統計情報を見ます。
同じdescribeですが、「数値項目以外(exclude=number)」を指定します。
df01.describe(exclude='number')
これで
- count:要素の個数
- unique:一意(ユニークである)な要素の数
- top:最頻値(もっとも多く登場する値)
- freq:最頻値の出現回数
がまとめてわかります。
uniqueの数とcountでばらつきが少ない項目はカテゴリデータとして利用できます。
4.ピボット分析(カテゴリタイプ)
特徴変数ごとに、該当する目的変数(今回の例だとSurvived)の割合をみると、特徴変数の重要度のあたりがつけやすいので、目的変数と特徴変数との関連性をピボットで見ていきます。
今回は、pandasの「croostab」とか「pivot_table」を使わずにやってます。
目的変数が「0」と「1」の2値の時だけ使える技です。
目的変数が3つ以上あったり、crosstabなどを使うパターンは、別の機会にします。
さて。
カテゴリタイプの特徴変数でピボットする例です。
[ と ]を2つ続けると化けてしまうので、画像で張り付けてます。
Survivedの生存が「1」死亡が「0」なので、平均をとって0.5なら生存と死亡が拮抗してて、それより上なら生存率が高い要素、低ければ生存率が低い要素になります。
5.ピボット分析(数値・等分割)
数値データの場合はカテゴリのようなやり方をするとバリエーションが多くなりすぎるので、数値が含まれる範囲で分析することがあります。
その分割のやり方のひとつとして、等分割して、ピボット分析します。
等間隔に5等分して、生存率と対比します。
この例も画像で貼ってます。
結果はこうです。
6.ピボット分割(数値・範囲分割)
今度は範囲指定で分割して、ピボット分割します。
年齢を10歳きざみで分割して、生存率と対比させます。
この例も画像で貼ってます。
結果はこうです。
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 |
今のところこんな感じです。
ではでは。