ウェブサイト検索

Pandas を使用した迅速かつダーティなデータ分析


モデリング用のデータを選択して準備する前に、何から始めなければならないかを理解する必要があります。

機械学習に Python スタックを使用している場合、データをより深く理解するために使用できるライブラリは Pandas です。

この投稿では、データの構造、分布、関係の観点からデータの理解を向上させるための、パンダのための簡単で汚いレシピをいくつか紹介します。

私の新しい本『Machine Learning Mastery With Python』 でプロジェクトをキックスタートします。これにはステップバイステップのチュートリアルPython ソース コード ファイルが含まれています。すべての例。

始めましょう。

  • 2018 年 3 月更新: オリジナルのデータセットは削除されたようであるため、データセットをダウンロードするための代替リンクを追加しました。

データ分析

データ分析とは、データに関する質問とその質問に答えることです。

機械学習の実践者として、あなたは自分が取り組んでいる分野についてあまり詳しくないかもしれません。対象分野の専門家を常駐させることが理想的ですが、常にそれが可能であるとは限りません。

これらの問題は、標準的な機械学習データセットを使用して応用機械学習を学習している場合、競合データセットにコンサルティングまたは取り組んでいる場合にも当てはまります。

データに関して追求できる疑問を引き起こす必要があります。所有しているデータをより深く理解する必要があります。これは、データを要約して視覚化することで実現できます。

パンダ

Pandas Python ライブラリは、高速なデータ分析と操作のために構築されています。そのシンプルさは驚くべきものであり、R などの他のプラットフォームでこのタスクに取り組んだことがある人にとっては馴染み深いものです。

Pandas の強みはデータ操作側にあるようですが、データ分析用の非常に便利で使いやすいツールが付属しており、statsmodels の標準統計手法と matplotlib のグラフ手法のラッパーを提供します。

糖尿病の発症

Pandas を使用してさまざまなデータ分析レシピを探索するために使用できる小さなデータセットが必要です。

UIC 機械学習リポジトリは、応用機械学習の研究と実践に使用できる、さまざまな標準的な機械学習データセットを膨大に提供します。私のお気に入りは、ピマ インディアンの糖尿病データセットです。

このデータセットは、医療記録の詳細を使用して、女性のピマ インディアンにおける糖尿病の発症の有無を記述しています。 (更新: ここからダウンロード)。データセットをダウンロードし、pima-indians-diabetes.data という名前で現在の作業ディレクトリに保存します。

データの要約

まず、データの構造を見て、データを理解することから始めます。

データのロード

まず、CSV データをファイルからデータ フレームとしてメモリにロードします。提供されたデータの名前はわかっているので、ファイルからデータをロードするときにそれらの名前を設定します。

import pandas as pd
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv('pima-indians-diabetes.data', names=names)

Pandas IO 関数と read_csv 関数について詳しく学習してください。

データの説明

次に、データの形状を見てみましょう。

データ フレームを直接印刷することで、データの最初の 60 行を確認できます。

print(data)

すべてのデータが数値であり、最後のクラス値が予測の対象となる従属変数であることがわかります。

データ ダンプの最後には、768 行 9 列としてデータ フレーム自体の記述が表示されます。これで、データの形状がわかりました。

次に、概要統計を確認することで、各属性の分布を把握できます。

print(data.describe())

これにより、データ フレーム内の 9 つの属性それぞれの詳細な分布情報のテーブルが表示されます。具体的には、カウント、平均、標準偏差、最小、最大、および 25、50 (中央値)、75 パーセンタイルです。

これらの統計を確認して、問題に関する興味深い事実に気づき始めることができます。たとえば、平均妊娠数は 3.8 人、最低年齢は 21 歳、BMI が 0 の人もいますが、これは不可能であり、一部の属性値が欠落しているとマークされる必要があることを示しています。

DataFrame の description 関数の詳細については、こちらをご覧ください。

データの視覚化

グラフは、属性の分布と関係についてより多くのことを伝えます。

ただし、時間をかけて最初に統計を確認することが重要です。データを異なる方法でレビューするたびに、異なる側面に気づき、問題について異なる洞察が得られる可能性があります。

Pandas はグラフの作成に matplotlib を使用し、そのための便利な関数を提供します。 Pandas でのデータ視覚化について詳しくは、こちらをご覧ください。

機能の配布

最初に確認する簡単なプロパティは、各属性の分布です。

まず箱ひげ図を見て、各属性の広がりを確認します。

import matplotlib.pyplot as plt
data.boxplot()

このスニペットは、(matplotlib 経由で) グラフを描画するためのスタイルを、見栄えの良いデフォルトのスタイルに変更します。

テスト属性には多くの外れ値があることがわかります。また、plas 属性が比較的均一な正規分布を持っていることがわかります。また、値をバケットに離散化することで各属性の分布を調べ、各バケットの頻度をヒストグラムとして確認することもできます。

data.hist()

これにより、pres やskin などの属性の正規分布の可能性など、属性分布の興味深い特性に注目することができます。

DataFrame で箱ひげ図とヒスト関数の詳細を確認できます。

フィーチャクラスの関係

次に探るべき重要な関係は、各属性とクラス属性の関係です。

1 つのアプローチは、各クラスのデータ インスタンスの属性の分布と注意点と相違点を視覚化することです。次のように、属性ごとにヒストグラムの行列を生成し、クラス値ごとにヒストグラムの行列を 1 つ生成できます。

data.groupby('class').hist()

データはクラス属性 (2 つのグループ) によってグループ化され、各グループの属性に対してヒストグラムのマトリックスが作成されます。結果は 2 つの画像になります。

これは、plas 属性のようなクラス間の分布の違いを指摘するのに役立ちます。

同じプロット上の各クラスの属性値をより適切に対比できます。

data.groupby('class').plas.hist(alpha=0.4)

これは、クラス値 0 を赤、クラス値 1 を青で示す plas のヒストグラムのみをプロットすることによって、データをクラスごとにグループ化します。同様の形状の正規分布ですが、シフトしていることがわかります。この属性はクラスを区別するのに役立つ可能性があります。

groupby 関数の詳細については、DataFrame を参照してください。

機能間の関係

最後に調査すべき重要な関係は、属性間の関係です。

属性の各ペアの相互作用の分布を調べることで、属性間の関係を確認できます。

from pandas.plotting import scatter_matrix
scatter_matrix(data, alpha=0.2, figsize=(6, 6), diagonal='kde')

これは、構築された関数を使用して、すべての属性とすべての属性の散布図の行列を作成します。各属性がそれ自体に対してプロットされる対角線には、代わりに属性のカーネル密度推定が表示されます。

これは、データに関する多くのインスピレーションを引き出すことができる強力なプロットです。たとえば、年齢と妊娠中の相関関係の可能性や、皮膚と体重の相関関係の可能性がわかります。

まとめ

この投稿では多くのことを取り上げてきました。

私たちは、CSV 形式でデータをロードし、概要統計を使用してそれを記述するための簡単で汚いワンライナーを検討することから始めました。

次に、興味深い構造を明らかにするためにデータをプロットするためのさまざまなアプローチを検討しました。箱ひげ図とヒストグラムでデータの分布を調べ、次にクラス属性と比較した属性の分布を調べ、最後にペアごとの散布図で属性間の関係を調べました。

関連記事