ゼファーネットのロゴ

完全なEDA(探索的データ分析)のための11の必須コードブロック

日付:

完全なEDA(探索的データ分析)のための11の必須コードブロック

この記事は、データサイエンスプロジェクトを探索し、貴重な洞察を得るための実用的なガイドです。


By スーザンマイナ、データへの情熱、機械学習愛好家、 ミディアムのライター

探索的データ分析(EDA)は、の最初のステップのXNUMXつです。 データサイエンスプロセス。 それは、あまり時間をかけずに、データについて可能な限り学ぶことを含みます。 ここでは、データの本能的かつ高レベルの実践的な理解を得ることができます。 このプロセスの終わりまでに、データセットの構造の一般的なアイデア、いくつかのクリーニングのアイデア、ターゲット変数、および可能なモデリング手法を理解する必要があります。

ほとんどの問題でEDAを迅速に実行するための一般的な戦略がいくつかあります。 この記事では、 メルボルン住宅スナップショットデータセット kaggleから、満足のいく探索的データ分析を実行するために使用できる11ブロックのコードを示します。 データセットには次のものが含まれます AddressType 不動産の、 SuburbMethod 販売の、 RoomsPrice、 不動産業者 (SellerG)Date 販売のそして、 Distance CBDからデータセットをダウンロードすることでフォローできます こちらをご覧ください。.

最初のステップは、必要なライブラリをインポートすることです。 必要になります パンダナンシーmatplotlib & 海生まれ。 すべての列が表示されていることを確認するには、 pd.set_option(’display.max_columns’, 100) 。 デフォルトでは、パンダは20列を表示し、残りを非表示にします。

import pandas as pd
pd.set_option('display.max_columns',100)import numpy as npimport matplotlib.pyplot as plt
%matplotlib inlineimport seaborn as sns
sns.set_style('darkgrid')


パンダの pd.read_csv(path) csvファイルをDataFrameとして読み込みます。

data = pd.read_csv('melb_data.csv')


基本的なデータセットの調査

 
1. DataFrameの形状(寸法)

  .shape Pandas DataFrameの属性は、データの全体的な構造を提供します。 それは タプル 長さ2は、データセットにある観測値の行数と列数に変換されます。

data.shape### Results
(13580, 21)


データセットには13,580個の観測値と21個の特徴があり、それらの特徴のXNUMXつがターゲット変数であることがわかります。

 
2.さまざまな列のデータ型

DataFrameの .dtypes 属性は、列のデータ型をパンダとして表示します シリーズ (シリーズとは、値の列とそのインデックスを意味します)。

data.dtypes### Results
Suburb object
Address object
Rooms int64
Type object
Price float64
Method object
SellerG object
Date object
Distance float64
Postcode float64
Bedroom2 float64
Bathroom float64
Car float64
Landsize float64
BuildingArea float64
YearBuilt float64
CouncilArea object
Lattitude float64
Longtitude float64
Regionname object
Propertycount float64
dtype: object


データセットには次の組み合わせがあることがわかります カテゴリー (オブジェクト)と 数値の (floatおよびint)機能。 この時点で、列とその意味を理解するためにKaggleページに戻りました。 列とその定義の表を確認してください こちらをご覧ください。 作成者: データラッパー.

注意すべき点;

  • カテゴリ型である必要がある数値機能、およびその逆。

簡単な分析から、データ型の不一致は見つかりませんでした。 このデータセットバージョンは元のクリーンなスナップショットであるため、これは理にかなっています メルボルンのデータ.

 
3.数行を表示します

Pandas DataFrameには、いくつかの観測値を表示するための非常に便利な関数があります。 data.head()最初の5つの観測値を表示します。 data.tail() 最後の5、そして data.sample() データセットからランダムに選択された観測。 を使用して5つのランダムな観測値を表示できます data.sample(5)

data.head()
data.tail()
data.sample(5)




注意点:

  • 列名がわかりますか? それらは意味がありますか? (必要に応じて、変数定義を再度確認してください)
  • これらの列の値は意味がありますか?
  • 重要な欠測値(NaN)が目撃されていますか?
  • カテゴリ機能にはどのような種類のクラスがありますか?

私の洞察; インクルード Postcode Propertycount に応じて両方の機能が変更されました Suburb 特徴。 また、の重要な欠落値がありました BuildingArea YearBuilt.

販売

 
これは、フィーチャの値がどのように分散されるか、またはそれらがどのくらいの頻度で発生するかを示します。 数値機能の場合は、特定の列に数値のグループが表示される回数を確認し、カテゴリ機能の場合は、各列のクラスとその頻度を確認します。 両方を使用します グラフ と実際の要約 統計。 グラフを使用すると、分布の全体像を把握でき、統計を使用すると事実に基づく数値を取得できます。 これらのXNUMXつの戦略は、互いに補完し合うため、どちらも推奨されます。

数値機能

 
4.各数値特徴をプロットします

パンダを使用します ヒストグラム。 ヒストグラムは数値を範囲(またはビン)にグループ化し、バーの高さはその範囲に含まれる数値の数を示します。 df.hist() データの数値特徴のヒストグラムをグリッドにプロットします。 私達はまた提供します figsize & xrot グリッドサイズを大きくし、x軸を45度回転させる引数。

data.hist(figsize=(14,14), xrot=45)
plt.show()



投稿用画像
著者によるヒストグラム

注意点:

  • 説明できない、または測定エラーの可能性がある外れ値
  • カテゴリ化する必要のある数値機能。 例えば、 Gender 1と0で表されます。
  • パーセンテージ値> 100など、意味をなさない境界。

ヒストグラムから、私は次のことに気づきました BuildingArea & LandSize 右側に潜在的な外れ値がありました。 私たちのターゲット機能 Price また、右に大きく歪んでいました。 私はまた、 YearBuilt は非常に左に傾いていて、境界は奇妙な1200年に始まりました。 より明確な全体像を得るために、要約統計量に移りましょう。

 
5.数値的特徴の要約統計

数値機能を直感的に理解できたので、次を使用して実際の統計を確認します。 df.describe()要約統計量を表示します。

data.describe()




数値の特徴ごとに、 カウント その中の値の、 意味する 値、 STD または標準偏差、 最小 値、 25 パーセンタイル、 50 パーセンタイルまたは中央値、 75 パーセンタイル、および   値。 カウントから、次の機能を特定することもできます 欠損値; それらの数は、データセットの行の総数と等しくありません。 これらは CarLandSize & YearBuilt.

私は両方の最小値に注意しました LandSize & BuildingArea は0です。また、 Price 範囲は85,000から9,000,000で、これは大きな範囲です。 これらの列については、プロジェクトの後半で詳細な分析を行います。

こちらを見てみましょう YearBuilt ただし、この機能では、最小年が1196であることに注意してください。これは、クリーニング中に削除される可能性のあるデータ入力エラーである可能性があります。

カテゴリー特徴

 
6.カテゴリ機能の要約統計量

カテゴリ機能の場合、グラフをプロットする前に要約統計量を表示することが重要です。これは、一部の機能には多くの一意のクラスがあるためです( Address)そして、カウントプロットで視覚化すると、クラスは読み取れなくなります。

カテゴリ機能のみの要約統計量を確認するには、次を使用します。 df.describe(include=’object’)

data.describe(include='object')



投稿用画像
著者によるカテゴリー要約統計

このテーブルは、数値機能のテーブルとは少し異なります。 ここで、 カウント 各機能の値の、の数 ユニーク クラス、 top 最も頻繁なクラスとその方法 頻繁に そのクラスはデータセットで発生します。

一部のクラスには、次のような固有の値が多数あることに注意してください。 Address、続いて Suburb & SellerG。 これらの調査結果から、10個以下の一意のクラスを持つ列のみをプロットします。 また、 CouncilArea 欠測値があります。

 
7.各カテゴリの特徴をプロットします

上記の統計を使用すると、次のことに注意してください。 TypeMethod Regionname クラスは10未満で、効果的に視覚化できます。 これらの特徴を使用してプロットします 海生まれのカウントプロット、これはカテゴリ変数のヒストグラムのようなものです。 カウントプロットの各バーは、一意のクラスを表します。

私は作成しました ループの場合。 カテゴリ機能ごとに、その機能のクラスがどのように分散されているかを示すカウントプロットが表示されます。 この線 df.select_dtypes(include=’object’) カテゴリ列とその値を選択して表示します。 また、 Ifステートメント 行を使用して、クラスが10以下のXNUMXつの列のみを選択するようにします。 Series.nunique() < 10。 読む .nunique() ドキュメント こちらをご覧ください。.

for column in data.select_dtypes(include='object'): if data[column].nunique() < 10: sns.countplot(y=column, data=data) plt.show()



投稿用画像
著者によるプロットのカウント

注意点:

  • モデルのパフォーマンスに影響を与える可能性のあるスパースクラス。
  • クラスのラベル付けの間違い。たとえば、スペルのわずかな違いがある2つの正確なクラス。

私たちはそれに注意します Regionname モデリング中にマージまたは再割り当てが必要になる可能性のあるスパースクラスがいくつかあります。

グループ化とセグメンテーション

 
セグメンテーションにより、データを切り取り、カテゴリと数値の特徴の関係を観察できます。

 
8.カテゴリ機能によってターゲット変数をセグメント化します。

ここでは、ターゲット機能を比較します。 Price、主なカテゴリ機能のさまざまなクラス間 (TypeMethod & Regionname) どのように Price クラスによって異なります。

私たちは、使用  海生まれの箱ひげ図 の分布をプロットします Price カテゴリ機能のクラス全体。 この 下の画像を借りたチュートリアルでは、箱ひげ図の機能が明確に説明されています。 両端のドットは外れ値を表します。


投稿用画像
Image from  www.geekeforgeeks.org

繰り返しますが、私は forループ 各カテゴリの特徴の箱ひげ図をプロットするには Price.

for column in data.select_dtypes(include=’object’): if data[column].nunique() < 10: sns.boxplot(y=column, x=’Price’, data=data) plt.show()



投稿用画像
著者による箱ひげ図

注意点:

  • どのクラスがターゲット変数に最も影響を与えるか。

どのように Price の3つのスパースクラス間でまだスパースに分散されています Regionname 前に見たように、これらのクラスに対する私たちの主張を強化します。

また、どのように SA クラス(最も頻度が低い Method クラス)は高価格で、最も頻繁に発生するクラスとほぼ同じ価格です S.

 
9.各カテゴリ機能ごとに数値機能をグループ化します。

ここでは、他のすべての数値機能だけでなく、 Price、クラス全体の数値特徴を要約することにより、カテゴリの特徴ごとに変更します。 私たちは使用します データフレームのグループ化 データをカテゴリ別にグループ化し、メトリックを計算する関数( 意味する中央値std、 など)さまざまな数値機能全体。

クラスが3未満の10つのカテゴリ機能についてのみ、データをグループ化してから、 mean 数値機能全体。 を使用しております display() その結果、よりクリーンなテーブルになります print().

for column in data.select_dtypes(include='object'): if data[column].nunique() < 10: display(data.groupby(column).mean())










比較することができます Type, Method & Regionname それらがどのように分散されているかを確認するために、数値フィーチャ全体のクラス。

数値特徴と他の数値特徴との関係

 
10.さまざまな数値的特徴の相関行列

相関 は-1から1までの値であり、XNUMXつの別々のフィーチャの値が同時にどれだけ接近するかを示します。 A 正の 相関とは、一方の機能が増加すると、もう一方の機能も増加することを意味します。  相関とは、一方の特徴が他方の特徴が減少するにつれて増加することを意味します。 0に近い相関は、 弱い -1または1に近い間の関係は、 強い 関係。


投稿用画像
Image from  えどぎゃん.in

我々は使用するだろう df.corr() 計算する 相関関係 数値フィーチャ間で、DataFrameを返します。

corrs = data.corr()
corrs


これは今はあまり意味がないかもしれないので、相関関係を視覚化するためにヒートマップをプロットしてみましょう。

 
11.相関関係のヒートマップ

を使用します Seabornヒートマップ グリッドを長方形の色分けされた行列としてプロットします。 を使用しております sns.heatmap(corrs, cmap=’RdBu_r’,annot=True).

  cmap=‘RdBu_r’ 引数は、使用するカラーパレットをヒートマップに指示します。 高い正の相関は次のように表示されます 暗赤色 と高い負の相関 濃紺。 白に近いということは、関係が弱いことを意味します。 読んだ この 他のカラーパレットの素晴らしいチュートリアル。 annot=True 読みやすく、解釈しやすいように、ボックスに相関の値が含まれています。

plt.figure(figsize=(10,8))
sns.heatmap(corrs, cmap='RdBu_r', annot=True)
plt.show()



投稿用画像
著者によるヒートマップ

注意点:

  • 強く相関する特徴; ダークレッド(ポジティブ)またはダークブルー(ネガティブ)のいずれか。
  • ターゲット変数; 他の機能と強い正または負の関係がある場合。

私たちはそれに注意します RoomsBedrooms2Bathrooms, Price 強い前向きな関係を持っています。 一方、 Price、私たちのターゲット機能は、わずかに弱いです 負 との相関 YearBuilt そしてさらに弱い との関係 Distance CBDから。

この記事では、Melbourneデータセットを調査し、構造とその機能について高レベルで理解しました。 この段階では、100%包括的である必要はありません。これは、将来の段階でデータをより詳細に調査するためです。 完全なコードはGithubで入手できます こちらをご覧ください。。 データセットのクリーニングの概念をまもなくアップロードします。

 
バイオ: スーザンマイナ データ、機械学習愛好家、 ミディアムのライター.

元の。 許可を得て転載。

関連する

PrimeXBTをチェックアウト
ACミランの公式CFDパートナーとの取引
暗号を取引する最も簡単な方法。
ソース:https://www.kdnuggets.com/2021/03/11-essential-code-blocks-exploratory-data-analysis.html

スポット画像

最新のインテリジェンス

スポット画像