數據特征分析:5.相關性分析
阿新 • • 發佈:2018-09-18
參數 adding png panda 電視 stats line ... plt
相關性分析
三點圖矩陣初判多變量間關系,兩兩數據之間的,比如說4個數據ABCD,就有12個比較,第一個參數和第二個參數,第一個參數和第三個參數,.......這個圖就是正態分布的接個參數,就沒有任何的相關性
相關性分析
分析連續變量之間的線性相關程度的強弱
圖示初判 / Pearson相關系數(皮爾遜相關系數) / Sperman秩相關系數(斯皮爾曼相關系數)
import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats% matplotlib inline
# 圖示初判 # (1)變量之間的線性相關性 data1 = pd.Series(np.random.rand(50)*100).sort_values() data2 = pd.Series(np.random.rand(50)*50).sort_values() data3 = pd.Series(np.random.rand(50)*500).sort_values(ascending = False) # 創建三個數據:data1為0-100的隨機數並從小到大排列,data2為0-50的隨機數並從小到大排列,data3為0-500的隨機數並從大到小排列,fig = plt.figure(figsize = (10,4)) ax1 = fig.add_subplot(1,2,1) ax1.scatter(data1, data2) plt.grid() # 正線性相關 ax2 = fig.add_subplot(1,2,2) ax2.scatter(data1, data3) plt.grid() # 負線性相關
# 圖示初判 # (2)散點圖矩陣初判多變量間關系 data = pd.DataFrame(np.random.randn(200,4)*100, columns = [‘A‘,‘B‘,‘C‘,‘D‘]) pd.scatter_matrix(data,figsize=(8,8), c = ‘k‘, marker = ‘+‘, diagonal=‘hist‘, alpha = 0.8, range_padding=0.1) data.head()
建立在正態分布之上的
分子是第一個變量X - 它的均值,第二個變量Y - 它的均值的求和,分母是兩個平方根的積
# Pearson相關系數 data1 = pd.Series(np.random.rand(100)*100).sort_values() data2 = pd.Series(np.random.rand(100)*50).sort_values() data = pd.DataFrame({‘value1‘:data1.values, ‘value2‘:data2.values}) print(data.head()) print(‘------‘) # 創建樣本數據 u1,u2 = data[‘value1‘].mean(),data[‘value2‘].mean() # 計算均值 std1,std2 = data[‘value1‘].std(),data[‘value2‘].std() # 計算標準差 print(‘value1正態性檢驗:\n‘,stats.kstest(data[‘value1‘], ‘norm‘, (u1, std1))) print(‘value2正態性檢驗:\n‘,stats.kstest(data[‘value2‘], ‘norm‘, (u2, std2))) print(‘------‘) # 正態性檢驗 → pvalue >0.05
data[‘(x-u1)*(y-u2)‘] = (data[‘value1‘] - u1) * (data[‘value2‘] - u2) data[‘(x-u1)**2‘] = (data[‘value1‘] - u1)**2 data[‘(y-u2)**2‘] = (data[‘value2‘] - u2)**2 print(data.head()) print(‘------‘) # 制作Pearson相關系數求值表 r = data[‘(x-u1)*(y-u2)‘].sum() / (np.sqrt(data[‘(x-u1)**2‘].sum() * data[‘(y-u2)**2‘].sum())) print(‘Pearson相關系數為:%.4f‘ % r) # 求出r # |r| > 0.8 → 高度線性相關
# Pearson相關系數 - 算法 data1 = pd.Series(np.random.rand(100)*100).sort_values() data2 = pd.Series(np.random.rand(100)*50).sort_values() data = pd.DataFrame({‘value1‘:data1.values, ‘value2‘:data2.values}) print(data.head()) print(‘------‘) # 創建樣本數據 data.corr() # pandas相關性方法:data.corr(method=‘pearson‘, min_periods=1) → 直接給出數據字段的相關系數矩陣 # method默認pearson
Pearson相關系數 - 算法
# Sperman秩相關系數 data = pd.DataFrame({‘智商‘:[106,86,100,101,99,103,97,113,112,110], ‘每周看電視小時數‘:[7,0,27,50,28,29,20,12,6,17]}) print(data) print(‘------‘) # 創建樣本數據
data.sort_values(‘智商‘, inplace=True) data[‘range1‘] = np.arange(1,len(data)+1) data.sort_values(‘每周看電視小時數‘, inplace=True) data[‘range2‘] = np.arange(1,len(data)+1) print(data) print(‘------‘) # “智商”、“每周看電視小時數”重新按照從小到大排序,並設定秩次index
data[‘d‘] = data[‘range1‘] - data[‘range2‘] data[‘d2‘] = data[‘d‘]**2 print(data) print(‘------‘) # 求出di,di2 n = len(data) rs = 1 - 6 * (data[‘d2‘].sum()) / (n * (n**2 - 1)) print(‘Pearson相關系數為:%.4f‘ % rs) # 求出rs
Pearson相關系數 - 算法
# Pearson相關系數 - 算法 data = pd.DataFrame({‘智商‘:[106,86,100,101,99,103,97,113,112,110], ‘每周看電視小時數‘:[7,0,27,50,28,29,20,12,6,17]}) print(data) print(‘------‘) # 創建樣本數據 data.corr(method=‘spearman‘) # pandas相關性方法:data.corr(method=‘pearson‘, min_periods=1) → 直接給出數據字段的相關系數矩陣 # method默認pearson
數據特征分析:5.相關性分析