由於task2打卡失誤,僅包含賽題理解,所以在task3中做一個補充~~
task2補充
EDA中使用到的基本方法:
data.shape()查看數據行列總數
data.head().append(data.tail())查看首尾五行
data.describe()查看均值,標準差,數據分佈等
data.info()數據信息
data.isnull().sum()查看數據爲空總數
missingno繪製缺失數據分佈圖
seaborn包中sns.distplot繪圖
.skew()和.kurt()查看偏度和峯值
.format(features,data[features].nunique())格式化輸出不同的特徵值
data.corr()查看數據相關係數
sns.heatmap()繪製數據熱力圖
sns.FacetGrid畫出輪廓,然後用map填充內容
sns.pairplot()特徵之間的相互關係可視化
以下爲多變量間的關係可視化
fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2, figsize=(24, 20))
task3-特徵工程
常見特徵工程處理方法:
1.異常處理
使用箱線圖去除異常值
- 箱子的中間一條線,是數據的中位數,代表了樣本數據的平均水平。
- 箱子的上下限,分別是數據的上四分位數和下四分位數。這意味着箱子包含了50%的數據。因此,箱子的寬度在一定程度上反映了數據的波動程度。
- 在箱子的上方和下方,又各有一條線。有時候代表着最大最小值,有時候會有一些點“冒出去”。便是此處需要去除的“異常值”。
def box_plot_outliers(data_ser, box_scale):
"""
利用箱線圖去除異常值
:param data_ser: 接收 pandas.Series 數據格式
:param box_scale: 箱線圖尺度,
:return:
"""
iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
val_low = data_ser.quantile(0.25) - iqr
val_up = data_ser.quantile(0.75) + iqr
rule_low = (data_ser < val_low)
rule_up = (data_ser > val_up)
return (rule_low, rule_up), (val_low, val_up)
上爲找出異常值函數
2.特徵歸一化/標準化
先做log對數化處理
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
data['power'] = np.log(data['power'] + 1)
data['power'] = ((data['power'] - np.min(data['power'])) / (np.max(data['power']) - np.min(data['power'])))
data['power'].plot.hist()
再進行歸一化處理
data['kilometer'] = ((data['kilometer'] - np.min(data['kilometer'])) /
(np.max(data['kilometer']) - np.min(data['kilometer'])))
data['kilometer'].plot.hist()
3.數據分桶
4.缺失值處理
5.特徵構造
6.特徵篩選
1)過濾式
繪製熱力圖觀察特徵相關性
7.降維
未完待續...