引導資料科學從業者進行資料處理以及特徵工程的步驟,使資料集的結構和特徵集讓接下來的**問題更加可靠。
值得注意的是, eda過程中是對原始資料的特徵(統計特徵、分布特徵、相關性等)進行挖掘, 但是沒有刪除或構造任何特徵(花式查詢, 不包括增、刪、改)
1、載入各種資料科學以及視覺化庫:
資料科學庫 pandas、numpy、scipy;(資料分析三劍客)
視覺化庫 matplotlib、seabon;
其他;2、載入資料:
載入訓練集和測試集;
簡略觀察資料(head()+shape);
3、資料總覽:
通過describe()來熟悉資料的相關統計量
通過info()來熟悉資料型別
4、判斷資料缺失和異常
檢視每列的存在nan情況
異常值檢測
5、了解**值的分布
總體分布概況(無界詹森分布等)
檢視skewness and kurtosis
檢視**值的具體頻數
6、特徵分為類別特徵和數字特徵,並對類別特徵檢視unique分布
7、 數字特徵分析
相關性分析
檢視幾個特徵的偏度和峰值
每個數字特徵的分布視覺化
數字特徵相互之間的關係視覺化
多變數互相回歸關係視覺化
8、型別特徵分析
unique分布
類別特徵箱形圖視覺化
類別特徵的小提琴圖視覺化
類別特徵的柱形圖視覺化類別
特徵的每個類別頻數視覺化(count_plot)
9、用pandas_profiling生成資料報告
log變換之後的分布較均勻,可以進行log變換進行**,這也是**問題常用的trick
train_data['notrepaireddamage'].replace('-', np.nan, inplace=true)
因此上面的語句也可以寫成:
2、在進行特徵分析過程中可以先把每一列的含義(包括賽題介紹的關鍵內容)在notebook中先列出來,就不用反覆檢視官方介紹了.
3、dataframe頭尾一起檢視
4、==describe() ==檢視每列的統計量, 掌握資料的大概的範圍以及每個值的異常值的判斷,比如有的時候會發現999 9999 -1 等值這些其實都是nan的另外一種表達方式,有的時候需要注意下
5、==info() == 通過info來了解資料每列的type,有助於了解是否存在除了nan以外的特殊符號異常(注意object型別)
6、使用missingno模組視覺化缺失值
import missingno as msno
missing = data.isnull().sum()
missing = missing[missing>0]
missing.sort_values(inplace=true)
missing.plot.bar()
# 視覺化看下預設值
msno.matrix(train_data.sample(250))
msno.bar(train_data.sample(1000))
7、類別特徵嚴重傾斜,一般不會對**有什麼幫助(類別分布嚴重偏斜), 刪除特徵
8、**值分布(適用於分類和回歸問題), 如果**值不服從正態分佈, 一般取對數.
import scipy.stats as st
y = train_data[
'price'
]plt.
figure(1
); plt.
title
('johnson su'
)sns.
distplot
(y, kde=false, fit=st.johnsonsu) # 界詹森分布
plt.
figure(2
); plt.
title
('normal'
)sns.
distplot
(y, kde=false, fit=st.norm)
plt.
figure(3
); plt.
title
('log normal'
)sns.
distplot
(y, kde=false, fit=st.lognorm)
對正態分佈的觀察包括兩個指標: 偏度和峰度
skewness(偏態/偏峰)
正偏態分布(positive skewness distribution)是指頻數分布的高峰偏於左側,偏態係數為正值的頻數分布形態。偏態分布分為正偏態和負偏態。**當均值大於眾數時稱為正偏態;當均值小於眾數時稱為負偏態。**偏態衡量的是資料的不對稱程度。
kurtosis(峰度)
峰度(peakedness;kurtosis)又稱峰態係數。表徵概率密度分布曲線在平均值處峰值高低的特徵數。直**來,峰度反映了峰部的尖度。樣本的峰度是和正態分佈相比較而言統計量,如果峰度大於三,峰的形狀比較尖,比正態分佈峰要陡峭。反之亦然. 峰度衡量的是資料的尖銳程度
一般地:正態分佈的峰度(係數)為常數3,均勻分布的峰度(係數)為常數1.8(也有說法kurtosis>0 表示與正態分佈相比的尖峰, 經驗證標準正態分佈(0,1)峰度接近0)
# 標準正態分佈峰值驗證
a = np.random.normal(0, 1, 1000)
ans = pd.series(a)
ans.kurt()
9、檢視**值的具體頻數
plt.
hist
(train_data[
'price'
], orientation =
'vertical'
,histtype =
'bar'
, color =
'red'
)plt.
show
()
10、類別特徵和數字特徵的篩選方法
numerical_features = train_data.
select_dtypes
(include=
[np.number]
)categorical_features = train_data.
select_dtypes
(include=
[np.
object
])
11、每個類別特徵都需要檢視nunique()的分布情況, 可以直接遍歷
12、分析每個數值型別特徵與**值之間的相關性
predict_corr = train_data[numerical_features]
correlation = predict_corr.
corr()
print
(correlation[
'label'].
sort_values
(ascending
=false)
,'\n'
)
13、數值特徵和類別特徵在分析特徵間關係(數值特徵)、特徵分布(類別特徵)的時候, 會需要大量視覺化工作.
14、pandas_profiling包可以生成資料分析報告, 但是本人執行失敗了,待查!!!
參考文章:
EDA(探索性資料分析)
1 什麼是eda分析?exploratory data analysis 在特徵 資料處理的過程中,對資料進行探索,找到他們之間的更多潛在關係。2 怎麼去做eda分析?主要是通過資料視覺化來顯示資料之間的關聯,從而對資料進行處理。首先,我們應該思考的是是否會出現下列問題 1 資料是否缺失,有沒有離群...
探索性資料EDA
import numpy as np import seaborn as sns import matplotlib.pyplot as plt from pandas import dataframe import pandas as pd from sklearn.datasets import...
資料探勘 探索性資料分析 EDA (補充)
去敏資料已經在之前有過介紹了,指為了保護資料,消除特徵的意義。而對這類資料就無法根據業務知識,進行特徵的建立。另外,我們得到的資料一般是原始資料通過變換得到的,變換的方式有很多種。本文主要針對通過乘除對資料進行縮放,然後通過加減對資料進行平移的這種資料還原。以下是從網上找到的乙個案例 首先介紹下,這...