動手學(xué)數(shù)據(jù)分析之?dāng)?shù)據(jù)清洗及特征處理
1.開始之前轩缤,導(dǎo)入numpy疮薇、pandas包和數(shù)據(jù)
(1)#加載所需的庫
import numpy as np
import pandas as pd
(2)加載數(shù)據(jù)train.csv
df = pd.read_csv('train.csv')
df.head(3)
image.png
2. 數(shù)據(jù)清洗簡述
(1)我們拿到的數(shù)據(jù)通常是不干凈的,所謂的不干凈薄风,就是數(shù)據(jù)中有缺失值抑月,有一些異常點(diǎn)等幼衰,需要經(jīng)過一定的處理才能繼續(xù)做后面的分析或建模,所以拿到數(shù)據(jù)的第一步是進(jìn)行數(shù)據(jù)清洗,本章我們將學(xué)習(xí)缺失值羞延、重復(fù)值渣淳、字符串和數(shù)據(jù)轉(zhuǎn)換等操作,將數(shù)據(jù)清洗成可以分析或建模的樣子伴箩。
(2)缺失值觀察與處理
*請查看每個特征缺失值個數(shù)
image.png
**對缺失值進(jìn)行處理
(1)處理缺失值一般有幾種思路
(2) 請嘗試對Age列的數(shù)據(jù)的缺失值進(jìn)行處理
(3) 請嘗試使用不同的方法直接對整張表的缺失值進(jìn)行處理
image.png
3.重復(fù)值觀察與處理
(1)請查看數(shù)據(jù)中的重復(fù)值
image.png
(2)對重復(fù)值進(jìn)行處理
image.png
(3)將前面清洗的數(shù)據(jù)保存為csv格式
df.to_csv('test_clear.csv')
4.特征觀察與處理
(1)對年齡進(jìn)行分箱(離散化)處理
(1) 分箱操作是什么入愧?
(2) 將連續(xù)變量Age平均分箱成5個年齡段,并分別用類別變量12345表示
(3) 將連續(xù)變量Age劃分為(0,5] (5,15] (15,30] (30,50] (50,80]五個年齡段赛蔫,并分別用類別變量12345表示
(4) 將連續(xù)變量Age按10% 30% 50% 70% 90%五個年齡段砂客,并用分類變量12345表示
(5) 將上面的獲得的數(shù)據(jù)分別進(jìn)行保存,保存為csv格式
#將連續(xù)變量Age平均分箱成5個年齡段呵恢,并分別用類別變量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df.head()
image.png
#將連續(xù)變量Age劃分為(0,5] (5,15] (15,30] (30,50] (50,80]五個年齡段鞠值,并分別用類別變量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
df.head(3)
image.png
(2)對文本變量進(jìn)行轉(zhuǎn)換
(1) 查看文本變量名及種類
(2) 將文本變量Sex, Cabin 渗钉,Embarked用數(shù)值變量12345表示
(3) 將文本變量Sex彤恶, Cabin, Embarked用one-hot編碼表示
image.png
#方法三: 使用sklearn.preprocessing的LabelEncoder
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:
lbl = LabelEncoder()
label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))
df[feat + "_labelEncode"] = df[feat].map(label_dict)
df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))
df.head()
image.png
#將類別文本轉(zhuǎn)換為one-hot編碼
#方法一: OneHotEncoder
for feat in ["Age", "Embarked"]:
# x = pd.get_dummies(df["Age"] // 6)
# x = pd.get_dummies(pd.cut(df['Age'],5))
x = pd.get_dummies(df[feat], prefix=feat)
df = pd.concat([df, x], axis=1)
#df[feat] = pd.get_dummies(df[feat], prefix=feat)
df.head()
image.png
從純文本Name特征里提取出Titles的特征(所謂的Titles就是Mr,Miss,Mrs等
df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
df.head()
image.png