Pandasでcsvファイルを読み込み、重複データ・欠損値の削除、ヒートマップでの可視化等を解説する

スポンサーリンク

この記事では、Pythonを使ってcars.csvのデータセットを探索する方法を理解しましょう。

まずデータセットをロードし、次にデータを処理します。

また、データセットを可視化し、最終的なデータセットを準備すると、同じデータセットを使用して様々なモデルを開発することができます

スポンサーリンク

Cars.csv データセットを Python で解析する手順

この分析にはPandasとNumpyを使用します。

また、Seabornライブラリを使って可視化で遊んでみることにします。

さっそくやってみましょう。

1. Cars.csv データセットの読み込み

データセットは既にCSV形式になっているので、あとはデータをpandasのデータフレームにフォーマットするだけです。

これは、pandas ライブラリをインポートして read_csv という pandas データフレームメソッドを使用することで行われました。

read_csvデータフレームメソッドは、CSVファイルのパスを関数の引数として渡すことで使用されます。

このコードでは、head`関数を使用すると、きれいに整理されたpandasデータフレームが得られます。

まず、必要なモジュールとライブラリをインポートすることから始めましょう。

1
2
3
4
5
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(color_codes=True)

次に、pandasモジュールを使ってデータをロードします。

1
2
df = pd.read_csv("CARS.csv")
df.head()

このデータセットには、428 行15 特徴 があり、BMW, Mercedes, Audi などの異なる自動車ブランドに関するデータ、およびこれらの自動車に関するモデル、タイプ、起源、ドライブトレイン、MSRP などの複数の特徴を持っています。

2. 無関係な特徴の削除

後節で、与えられた特徴量に基づいて車の価格を計算する必要がある場合。

しかし、全ての特徴が車の価格を決定するために必要なわけではないので、同じように無関係な特徴をデータセットから削除することを目的とします。

除去する特徴は、ドライブトレイン、モデル、インボイス、タイプ、オリジンです。

これらの特徴はすべてコストを決定するのに必要ではありません。

あなたの好みに応じて、特徴を削除したり残したりすることができる。

1
2
df = df.drop(['Model','DriveTrain','Invoice', 'Origin', 'Type'], axis=1)
df.head()

3. 重複データの発見

どのようなデータセットにおいても、重複・冗長なデータが存在する可能性があります。

これを取り除くために、「参照機能」(この場合はMSRP)を利用します。

希望小売価格を基準にする理由は、2台の車の価格が100%一致することは稀だからです。

重複を除去するために、以下のようなコードを使用します。

行数が428行から410行に減っているのがわかると思います。

1
2
print("Count before Removing Duplicates: ")
df.count()

出力は以下のようになる。

Count before Removing Duplicates:
Make           428
MSRP           428
EngineSize     428
Cylinders      426
Horsepower     428
MPG_City       428
MPG_Highway    428
Weight         428
Wheelbase      428
Length         428
dtype: int64
1
2
3
4
df = df.drop_duplicates(subset='MSRP', keep='first')
 
print("Count after Removing Duplicates: ")
df.count()
Count after Removing Duplicates:
Make           410
MSRP           410
EngineSize     410
Cylinders      408
Horsepower     410
MPG_City       410
MPG_Highway    410
Weight         410
Wheelbase      410
Length         410
dtype: int64

4. 欠損値やNULL値を見つける

データセットが完璧であることはなく、データセットに欠損値があることはよくあることです。

さて、欠損値を扱うにはいくつかのアプローチがある。

行を削除するか、空の値をその列の全値の平均値で埋めるかです。

開発者にとっては、すべての行が重要なので、行全体を削除するよりも、列の値の平均を取る方がよいでしょう。

まず、このデータセットにどれだけの NULL 値があるのか見てみましょう。

print(df.isnull().sum())

Cylindersカラムに 2 つの NULL 値があり、残りは明確であることがわかります。

私たちの目的は、この列の2つのヌル値を処理することです。

ヌル値は行247と248に属することがわかったので、同じ値をすべての値の平均に置き換える。

1
2
3
4
5
6
7
8
9
# Calculate mean of all the values of the column
val = df['Cylinders'].mean()
print("The mean of the column is: ",val)
val = round(val)
print("Rounded value of  the mean of the column is: ",val)
 
# Replace the null value with the mean of the column
df['Cylinders'][247] = val
df['Cylinders'][248] = val

5. オブジェクトの値を整数型に変換する

まだ見ていないかもしれませんが、MSRP の値は $ で始まっていますが、この値は整数型である必要があります。

したがって、この列のすべての値からドル記号が取り除かれていることを確認する必要があります。

1
2
3
4
5
6
7
df['MSRP'] = [x.replace('$','') for x in df['MSRP']]
 
df['MSRP'] = [x.replace(',','') for x in df['MSRP']]
 
df['MSRP']=pd.to_numeric(df['MSRP'],errors='coerce')
 
df.head()

6. ヒートマップの可視化

ヒートマップは特徴量間の相関を見つけるための最良の方法の一つです。

ヒートマップをプロットすると、希望小売価格と馬力の間に強い依存関係があることがわかる。

1
2
3
4
plt.figure(figsize=(10,10))
plt.style.use("seaborn")
c= df.corr()
sns.heatmap(c,cmap='PiYG',annot=True)
Cars Csv File Heatmap
Cars Csv File Heatmap

この概念を理解していただき、他の様々なCSVファイルにも応用していただければ幸いです。

お読みいただきありがとうございました。

タイトルとURLをコピーしました