業務中須要分析一批離散的統計數據類似性,用於將同種類別的數據識別出來。函數
整理的資料是三大統計學的類似性計算方法,與數據之間距離的度量。字體
首先簡單介紹一下數據的使用:spa
三大相關性係數 | 適用範圍 | scipy庫的調用 |
皮爾森相關係數 pearson | 數據呈正太分佈 | from scipy.stats import pearsonr |
肯德爾相關係數 kendall | 非正態分佈且數據無序 | from scipy.stats import kendalltau |
斯皮爾曼相關係數 spearman | 非正態分佈且數據有序 | from scipy.stats import spearman |
from scipy.stats import normaltest 先用該函數檢測比較數據的正太分佈。後根據結果決定使用具體的方法code
在處理類似性的過程當中,除了統計學的類似性,還須要結合如距離(歐式,馬氏等)orm
from scipy.spatial.distance import pdist 其中 pdist函數涵蓋了各類距離度量的方法blog
最後還要結合極差來度量。ip
這裏給出一個seaborn調用肯德爾係數的繪圖。ci
代碼以下:unicode
首先定義肯德爾係數,pandas
而後處理中文字體顯示問題。
隨後把要求的兩個數據按照dataframe的格式創建起來
核心是joinplot後面的.
.annotate調用以前定義的肯德爾係數函數 template是要顯示的具體文字和 保存的肯德爾係數小數點位數
from scipy.stats import pearsonr,kendalltau,spearmanr,kstest,normaltest def kendall(x,y): return kendalltau(x,y) # 繪圖設置-解決中文報錯 plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['KaiTi'] #用來正常顯示中文標籤 sns.set(font='KaiTi') # 解決Seaborn中文顯示問題 # 整週數據類似性繪圖 df=pd.DataFrame(columns=['網約車週末','網約車工做日'],data={'網約車週末':df_weekday['All'],'網約車工做日':df_weekend['All']}) plt.figure() sns.jointplot('網約車週末','網約車工做日',
df,kind='reg',size=8,
marginal_kws=dict(bins=25, rug=True),
color='r').annotate(kendall,template='kendall correlation: {val:.3f}')#,stat_func=pearsonr,space=1,color='r') #\np: {p:.6f}
pandas中dataframe亦可直接調用 列與列之間的類似性係數:
對於dataframe df
調用:
df.corr('kendall')