本系列其他全部鏈接:
ML入門——EDA探索性數(shù)據(jù)分析(上)
ML入門——EDA探索性數(shù)據(jù)分析(中)(Seaborn)
ML入門——EDA探索性數(shù)據(jù)分析(下)(特征工程)
前言:在傳統(tǒng)的統(tǒng)計分析方法中,通常都是先假定數(shù)據(jù)服從某種分布,然后運用這種模型進行預測凭疮,以概率論為基礎(chǔ)来屠,做各種的參數(shù)檢驗螟碎。
EDA“拋開”概率理論切端,從數(shù)據(jù)出發(fā)挤庇,強調(diào)數(shù)據(jù)可視化够挂。
1.什么是EDA旁仿?
摘抄網(wǎng)上的一個中文解釋:
是指對已有的數(shù)據(jù)(特別是調(diào)查或觀察得來的原始數(shù)據(jù))在盡量少的先驗假定下進行探索,通過作圖孽糖、制表枯冈、方程擬合、計算特征量等手段探索數(shù)據(jù)的結(jié)構(gòu)和規(guī)律的一種數(shù)據(jù)分析方法办悟。特別是當我們面對大數(shù)據(jù)時代到來的時候尘奏,各種雜亂的“臟數(shù)據(jù)”,往往不知所措病蛉,不知道從哪里開始了解目前拿到手上的數(shù)據(jù)時候炫加,探索性數(shù)據(jù)分析就非常有效。探索性數(shù)據(jù)分析是上世紀六十年代提出铺然,其方法有美國統(tǒng)計學家John Tukey提出的俗孝。
2.基本步驟
2.1 導入不可或缺的工具包
用于可視化:Matplotlib、Seaborn
用于數(shù)據(jù)處理:Numpy探熔、Pandas
用于統(tǒng)計分析:Sklearn驹针、Statsmodels
用于忽略煩人的warning:warnings
import warnings
warnings.filterwarnings("ignore")
2.2 數(shù)據(jù)導入和觀察
觀察數(shù)據(jù)的基本情況:
df.head()
、df.info()
-
查看不同類型變量的基本統(tǒng)計信息
數(shù)值型變量:
df[["Survived","Age", "SibSp", "Parch"]].describe()
-
分類型變量:
df.describe(include=[np.object])
[注意]:分類型變量的describe與數(shù)值型變量的describe不同
2.3 缺失值處理
一般真實數(shù)據(jù)中诀艰,變量都會存在著缺失值的情況柬甥。
-
從
df.describe()
反饋的信息中,count
這一行數(shù)據(jù)反映了不同字段的數(shù)量其垄;image -
從
df.info()
反饋的信息中苛蒲,也可觀測到各字段not-null的數(shù)據(jù)量和全部數(shù)據(jù)的總量。image
[處理方法]一般有如下三種绿满,其中2種比較推薦臂外,1種慎用:
-
直接刪除某一列字段
當該字段中大部分數(shù)據(jù)都為null的時候,對于后期數(shù)據(jù)貢獻非常小,無法對缺失數(shù)據(jù)進行彌補漏健。像
Cabin
有超過70%以上的缺失值嚎货。 -
填補缺失值
當字段中數(shù)據(jù)缺失量不大,且對于分析有重要貢獻的蔫浆,采用不同策略進行彌補殖属。像
Age
字段缺失100多數(shù)據(jù)。采用僅考慮當前字段的統(tǒng)計量進行填充(例如
median
瓦盛、mean
)綜合考慮其他因素進行分組洗显,用分組后的統(tǒng)計量進行填充。例如原环,綜合考慮
Sex
挠唆、Pclass
等。
-
刪除具有缺失值的行(慎用嘱吗,不推薦)
因為刪除缺失某一字段的整行玄组,會對其他非缺失的變量所能提供的有用信息造成影響。
2.4 變量分析
從分析的變量數(shù)量來看谒麦,可以分為單變量分析和多變量分析巧勤。
2.4.1 單變量分析(待補充)
直方圖
- 對稱?
- 分散弄匕?
- 異常值?
- 有間隙沽瞭?
箱線圖
- 異常值迁匠?
- 對稱?
- 比較幾批數(shù)據(jù)的形狀
正態(tài)性檢驗?
2.4.2 雙變量分析
一般都會結(jié)合著任務(wù)目標(某一變量A)驹溃,去粗略統(tǒng)計并分析其余變量對變量A的影響城丧。例如,分析:哪些因素會決定生還概率豌鹤。
2.4.2.1 因變量Y(離散)-自變量X(離散)
-
從計算數(shù)值的角度
-
方法一:使用經(jīng)典的分組-聚合-計算亡哄。
df[['Pclass', 'Survived']].groupby('Pclass').mean() .sort_values(by='Survived', ascending=False)
-
方法二:使用pd的pivot_table函數(shù)
df.pivot_table(values='Survived', index='Pclass', aggfunc=np.mean)
參數(shù)解釋:
values: 聚合后被施加計算的值,這里我們施加mean函數(shù)
index: 分組用的變量
aggfunc: 定義施加的函數(shù)
-
-
從可視化的角度
一般雙變量之間的關(guān)系分析布疙,采用條形圖來進行繪制蚊惯。
sns.barplot(data=df, x='Pclass', y='Survived', ci=None)
2.4.2.2 因變量Y(離散)-自變量X(連續(xù))
-
從計算數(shù)值的角度
將連續(xù)變量離散化是建模中的一種常用方法,即:將某一個變量所在區(qū)間分割為幾個小區(qū)間灵临,落在同一個區(qū)間的觀測值用同一個符號表示截型。
[處理方法]:
cut函數(shù)(等距):將年齡的區(qū)間均勻分割為n分
-
qcut函數(shù)(等頻):選取區(qū)間以至于每個區(qū)間里的觀察值個數(shù)都是一樣的
# 使用cut函數(shù) # 可以看到每個區(qū)間的大小是固定的,大約是16歲 titanic_df['AgeBand'] = pd.cut(titanic_df['Age'], 5) titanic_df.head()
進而儒溉,可求出落在不同區(qū)間的人數(shù)宦焦、以及不同區(qū)間的因變量的統(tǒng)計量
df.pivot_table(values='Survived',index='AgeBand', aggfunc='count')
df.pivot_table(values='Survived',index='AgeBand', aggfunc=np.mean)
-
從可視化的角度
-
連續(xù)變量離散化之后,就等同于離散的X-離散的Y了,使用條形圖可直觀看出各不同區(qū)間的分布情況波闹。
sns.barplot(data=titanic_df, x='AgeBand', y='Survived', ci=None)
image -
連續(xù)變量不離散酝豪,那么直接使用直方圖即可畫出來。
sns.FacetGrid(titanic_df, col='Survived').map(plt.hist, 'Age', bins=20, normed=True)
image
-
2.4.3 多變量分析
2.4.3.1 因變量Y(離散)-自變量X1..Xn(離散)
-
從計算數(shù)值的角度
同樣是通過分組-聚合的計算方式精堕,只不過孵淘,這里index是復合的index。
df.pivot_table(values='Survived', index=['Pclass', 'Sex'], aggfunc=np.mean)
-
從可視化的角度
這里提供兩種作圖的方式锄码,分組條形圖和分組點圖夺英。
關(guān)鍵參數(shù)為
hue
,其作用是根據(jù)hue的變量進行分組。-
分組條形圖
sns.barplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)
image -
分組點圖
sns.pointplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)
image
-