類似性算法研究

業務中須要分析一批離散的統計數據類似性,用於將同種類別的數據識別出來。函數

整理的資料是三大統計學的類似性計算方法,與數據之間距離的度量。字體

首先簡單介紹一下數據的使用: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')

相關文章
相關標籤/搜索