1. 程式人生 > >數據特征分析:5.相關性分析

數據特征分析:5.相關性分析

參數 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.相關性分析