
寫在最前面:
請看下面幾個問題,如果你能輕松的知道問題的答案,那么可以不再閱讀本文或快速瀏覽一下本文,如果不是很輕松就能知道答案,那么建議花一點時間讀一下本文。
數(shù)據(jù)分析師在實際工作中經(jīng)常遇見以下的情形:
1.一個變量是否對另一個變量有影響?用什么方法?這個方法適合我的數(shù)據(jù)嗎?
2.EDA探索性數(shù)據(jù)分析除了描述單變量的分布,還能做些什么。
3.在用機器學(xué)習做分類或回歸問題時,都說數(shù)據(jù)決定精度的上界,模型只是去逼近這個上界,那么在對數(shù)據(jù)進行探索時,可以用哪些方法來做。
目錄
1.一個實際案例引發(fā)的思考
2.實際工作中常見的數(shù)據(jù)類型
3.兩個連續(xù)型數(shù)值變量之間的關(guān)系探究
4.一個連續(xù)型數(shù)值變量與一個分類變量之間的關(guān)系探究
5.兩個分類變量之間的關(guān)系探究
6.思考:我們說的AB Test原理是什么
一、一個實際案例引發(fā)的思考
在看這個案例之前,有下面幾個問題,請帶著這些問題邊看案例邊思考:
1.如果你在工作中會怎么做這個分析?
2.他這樣分析對嗎?
3.如果不對,問題出在哪里,應(yīng)該怎么修改?
4.如果回答不上來上述1-3問題,再看完這篇文章后,你是否可以回答1-3
【注】該案例來自知乎上的書:《活用數(shù)據(jù):驅(qū)動業(yè)務(wù)的數(shù)據(jù)分析實戰(zhàn)》,若有侵權(quán),聯(lián)系必刪!
我們想對服裝進行精準營銷
案例來自書--《活用數(shù)據(jù):驅(qū)動業(yè)務(wù)的數(shù)據(jù)分析實戰(zhàn)》



二、實際工作中常見的數(shù)據(jù)類型
要做分析,那么必然要清楚分析的數(shù)據(jù)是什么類型,不同類型的數(shù)據(jù)分析方法與處理方式是不同的,因此有必要清楚實際工作中常見的數(shù)據(jù)類型。
什么是數(shù)據(jù)?我認為凡是可以電子化記錄的都是數(shù)據(jù)。因此,數(shù)據(jù)范圍會隨著科技進步和計算機發(fā)展不斷擴充變大。就目前技術(shù)水平與計算機發(fā)展,個人認為數(shù)據(jù)可以做如下分類:

三、兩個連續(xù)型數(shù)值變量之間的關(guān)系探究
對于兩個連續(xù)型數(shù)值變量之間的關(guān)系探究,我們比較容易想到相關(guān)關(guān)系(回歸先不探討),日常工作中,我們常把相關(guān)關(guān)系和因果關(guān)系(常用回歸分析探索)弄混,這里簡單說一下:
相關(guān)變量的關(guān)系也可分為兩種:
兩個變量間相互影響——平行關(guān)系
一個變量變化受另一個變量的影響——依存關(guān)系
它們對應(yīng)的分析方法:
相關(guān)分析是研究呈平行關(guān)系的相關(guān)變量之間的關(guān)系
回歸分析是研究呈依存關(guān)系的相關(guān)變量之間的關(guān)系
回歸分析和相關(guān)分析都是研究變量之間關(guān)系的方法,兩種分析方法相互結(jié)合和滲透;可以總結(jié)為:用相關(guān)分析不一定要用回歸分析;用回歸分析,必先用相關(guān)分析探索一下變量之間的關(guān)系。
使用相關(guān)分析探究兩個連續(xù)型數(shù)值變量之間的關(guān)系步驟:
1.繪制散點圖
2.計算相關(guān)系數(shù)并完成相關(guān)系數(shù)顯著性檢驗
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats #Python中做統(tǒng)計檢驗的庫
# 導(dǎo)入數(shù)據(jù)
data = pd.DataFrame(np.random.randn(200,4)*100, columns = ['A','B','C','D'])
data.head()

#研究變量A和變量B之間的相關(guān)關(guān)系
#第一步:畫出變量A與變量B的散點圖
plt.figure(figsize = (3,3)) # 圖片像素大小
plt.scatter(data.A, data.B,color="blue") # 散點圖繪制
plt.grid() # 顯示網(wǎng)格線
plt.show() # 顯示圖片

從散點圖來看,變量A與變量B之間可能不存在線性相關(guān)關(guān)系。
#第二步:計算相關(guān)系數(shù)與顯著性檢驗
#方法一:使用pandas中的corr()方法
print(data.corr()) #如果由數(shù)據(jù)框調(diào)用corr函數(shù),那么將會計算每個列兩兩之間的相似度,返回DataFrame
print(data['A'].corr(data['B'])) #如果由序列調(diào)用corr方法,那么只是該序列與傳入的序列之間的相關(guān)度,返回一個數(shù)值型,大小為相關(guān)度

可以看到使用pandas中的corr()方法求相關(guān)分析是只會給出相關(guān)系數(shù),不會給出相關(guān)系數(shù)對應(yīng)的顯著性水平值的,因此如果想更嚴謹?shù)脑掃€是使用scipy.stats庫比較好。
r,p = stats.pearsonr(data.A,data.B) # 相關(guān)系數(shù)和P值
if p<0.05:
print("P=%.3f,應(yīng)拒絕原假設(shè),可以認為變量之間相關(guān)關(guān)系顯著。"%p)
if r>0:
print("變量之間存在顯著正相關(guān)關(guān)系,相關(guān)系數(shù)r=%.3f"%r)
else:
print("變量之間存在顯著負相關(guān)關(guān)系,相關(guān)系數(shù)r=%.3f"%r)
else:
print("P=%.3f,我們沒有理由拒絕原假設(shè),可以認為變量之間不存在相關(guān)關(guān)系顯著。"%p)

可以看到,在0.05的置信水平下,認為變量A和變量B是不存在顯著相關(guān)關(guān)系的;但看P=0.099,其實P值不算大,如果在0.1的置信水平下,就可以認為變量A和變量B是存在顯著相關(guān)關(guān)系的,這時是可以說相關(guān)系數(shù)為多少。
四、一個連續(xù)型數(shù)值變量與一個分類變量之間的關(guān)系探究
統(tǒng)計檢驗方法:
1.單因素方差分析(若分類變量下類別水平為2,此時單因素方差分析等價于獨立樣本T檢驗,兩者可以統(tǒng)計量互相轉(zhuǎn)換)
2.獨立樣本T檢驗(僅適用于分類變量下類別水平為2的情況)
因此為了篇幅考慮,就以單因素方差分析適用案例作為本文的內(nèi)容。
使用單因素方差分析的步驟:
1.對數(shù)據(jù)是否符合正態(tài)分布和組間方差是否一致做檢驗(完成單因素方差分析的前提假設(shè))
2.描述性分析;建議使用箱線圖來進行
3.采用單因素方差分析判斷分類變量是否對連續(xù)型變量有顯著影響
4.若不同組間有差異,通過多重檢驗來判斷哪個處理間存在差異
在日常工作中,我們經(jīng)常碰到這樣的問題,就是一個分類變量對一個連續(xù)型變量是否有影響,以植物生長作為一個案例,探究施肥是否會促進植株生成(植株生長以樹高作為指標來衡量),采用控制變量的方法,采取清水作為對照組,實驗組以某肥料四個濃度梯度,分別是A,B,C,D,施肥一段時間之后測量樹高(要控制其他變量保持一致,比如施肥之前的樹高要基本保持一致,生長勢基本保持一致等等)。
import numpy as np
import pandas as pd
df = {'ctl':list(np.random.normal(10,5,100)),
'treat1':list(np.random.normal(15,5,100)),\
'treat2':list(np.random.normal(20,5,100)),\
'treat3':list(np.random.normal(30,5,100)),\
'treat4':list(np.random.normal(31,5,100))}
df = pd.DataFrame(df)
df.head()

數(shù)據(jù)中的teat1-4代表的就是A-D四個化肥濃度。
#第一步:正態(tài)性檢驗
import scipy.stats as stats
#Shapiro檢驗(常用Shapiro檢驗和K-S檢驗來檢驗數(shù)據(jù)是否服從正態(tài)分布,若數(shù)據(jù)量低于5000,則使用Shapiro檢驗比較合理,否則使用K-S檢驗)
print(stats.shapiro(df['ctl']))
print(stats.shapiro(df['treat1']))
print(stats.shapiro(df['treat2']))
print(stats.shapiro(df['treat3']))
print(stats.shapiro(df['treat4']))

#第二步:方差齊性檢驗
d1=df['ctl']
d2=df['treat1']
d3=df['treat2']
d4=df['treat3']
d5=df['treat4']
args = [d1,d2,d3,d4,d5]
#levene test
w,p=stats.levene(*args)
if p<0.05:
print("警告:Levene test 顯示方差齊性假設(shè)不成立(p=%.2f)"%p)
else:
print("通過齊性檢驗")
#方差分析
f,p=stats.f_oneway(*args)
print(f,p)

#第三步:繪制箱線圖
df_melt=df.melt()
df_melt.columns=['Treat','Value']
import seaborn as sns
sns.boxplot(x='Treat',y='Value',data=df_melt)

#第四步:單因素方差分析
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('Value~C(Treat)',data=df_melt).fit()
anova_table=anova_lm(model,typ=2)
print(anova_table)

#第五步:鄧肯多重檢驗(Tukey HSD test)
from statsmodels.stats.multicomp import MultiComparison
mc =MultiComparison(df_melt['Value'],df_melt['Treat'])
tukey_result = mc.tukeyhsd(alpha=0.5)
print(tukey_result)

通過上述分析,可以看到不同化肥水平對應(yīng)的植株生長存在顯著影響,并且通過箱線圖和多重檢驗可以看到,treat3和treat4對應(yīng)的植株生長是和其他對照組顯著差異,treat3和trea4對應(yīng)的植株生長更好,因此可以建議采用treat3下的化肥水平,treat4的植株生長相較于treat3并沒有太明顯差異;甚至可以再繼續(xù)采取一些化肥水平來判斷是否當化肥水平超過treat3的水平后,化肥的提升不會再進一步影響植物生長。
五、兩個分類變量之間的關(guān)系探究
統(tǒng)計檢驗方法:
卡方檢驗(卡方檢驗是針對自變量和因變量都是分類數(shù)據(jù),也就是說帶有屬性的數(shù)據(jù))
使用美國人口收入數(shù)據(jù)作為案例,研究性別與收入之間的關(guān)系。

pivot_table = pd.crosstab(
data['sex'],
data['income'],
margins = True #總計
)
pivot_table

Female_income = pivot_table.iloc[0][0:2].values
Male_income = pivot_table.iloc[1][0:2].values
#畫圖
fig = plt.figure(figsize=(5, 5))
sns.set(font_scale=1.8)
categories = ["<=50K",">50K"]
p1 = plt.bar(categories, Female_income, 0.55, color='#d62728')
p2 = plt.bar(categories, Male_income, 0.55, bottom=Female_income)
plt.legend((p1[0],p2[0]), ('Female', 'Male'))
plt.ylabel('Count')
plt.show()

f_obs = np.array([Female_income,
Male_income])
from scipy import stats
stats.chi2_contingency(f_obs)[1] #得出的是卡方檢驗的P值

通過卡方檢驗,可以看到P值趨近于0,小于0.05,我們可以認為男性和女性在收入上是存在顯著差異的;結(jié)合列聯(lián)表和做出的圖,我們可以看到在高收入人群中,男性占比較大。
六.思考:我們說的AB Test原理是什么
現(xiàn)在回顧第一部分的那個案例,研究的是性別和顏色偏好之間的關(guān)系,這是兩個分類變量之間的關(guān)系,應(yīng)該使用卡方檢驗而不應(yīng)該使用單因素方差分析。
在本文中,沒有具體交代方法論的原理,如果感興趣可以自行查閱?,F(xiàn)在我們可以思考下AB Test原理到底使用的方法論到底是什么? AB Test怎么選擇指標更加合理,怎么設(shè)計方案更可行,得到的數(shù)據(jù)怎么分析才正確,下周會做一個關(guān)于AB Test的總結(jié)。
參考文獻:
https://zhuanlan.zhihu.com/p/36441826 簡單相關(guān)性分析(兩個連續(xù)型變量)
https://www.cnblogs.com/jiaxin359/p/7995073.html 統(tǒng)計學(xué)當中關(guān)于變量的分類