Pythonでデータを加工する方法(欠損値除去と欠損値補完)

Machine learning Python

皆さん、こんにちは。知也です。

きれいな形でデータが取れていない
Pythonでデータを加工するにはどうしたらいいの?

今回はこんな悩みにお答えできればと思います。

  • はじめに
  • カラム(列)の欠損値除去のやり方
  • ロウ(行)の欠損値除去のやり方

はじめに

昨今データ、データと言われていますよね。
今あるデータを使って機械学習したいからPythonを勉強し始めた、そんな方も多いのではないでしょうか。

私は大学卒業後、最初に勤めたのは飲食企業だったので、

・売上/コスト
・お客様の満足度(NPS)
・食材の価格
・フード・ドリンクの出数と原価率
・WEB(食べログやぐるなび)のアクセス(PVやCVR)

こんなデータを扱っていました。
そして次の企業ではアプリのマーケティング支援企業だったので、

【ユーザ行動のデータ】
・DAU/MAU(xアクティブユーザー)
・RR(リテンションレート)
・ARPU(平均単価)
・ARPPU(平均購入単価)
・LTV(顧客生涯価値)
・ROAS(売上費用対効果)

【プロモーションのデータ】
・imp(広告露出回数)
・CTR(クリック率)
・CPC(クリック単価)
・CPI(インストール単価)
・CPA(顧客獲得単価)

こんなデータを扱っていました。
小売、WEB、アプリビジネスに携わってきたので、大体事業をする上でどんなデータを見る必要があるかなどは何となく分かってきました。

逆に、金融とか製造とかそういった業界のデータはほとんど分からないです。

少し前置きが長くなりましたが、今あるデータを使って新しい価値を生み出せたら最高ですよね。

カラム(列)の欠損値除去のやり方

まずはPandasを使って今回のデータをインポートします。
import pandas as pd Pandasをインポート
df = pd.read_csv('titanic.csv') csvファイルをインポートしてdfに格納
df.head() dfの先頭10行を表示
df.isnull().sum() どのカラムにデータの欠損があるか確認
※今回の場合Cabinカラムに7つ、Ageカラムに1つの欠損値があることが判明
df.drop('Cabin', axis=1) Cabinカラムを列ごと削除

ロウ(行)の欠損値除去のやり方

先ほどは10行のデータに対し、7つの欠損値(NaN)があったため、Cabinの列ごと削除しました。
ではAgeにこれを当てはめてしまっていいのでしょうか。Ageは欠損値が1つしかないのに列ごと削除してしまってはデータがもったいないです。

なので今度はAgeの列を消すのではなく、欠損値がある行のみを消すことにします。
やり方は簡単です。

df.dropna(subset=['Age']) Cabinカラムを列ごと削除

これでAgeカラムでNaNだった5行目のデータが削除されました。

いかがでしたでしょうか。
今回はデータに欠損値(NaN)があるときにjupyter notebook上で簡単にカラムとロウを削除する方法を学びました。

実際の業務の際も、データの前処理が一番重要と言われています。

引き続き頑張って学んでいきましょう。