數據特征—相關性分析


分析連續變量之間的線性相關程度的強弱

相關性分析是指對兩個或多個具備相關性的變量元素進行分析,從而衡量兩個變量因素是相關密切程度。

1,圖示初判

2,Pearson相關系數(皮爾遜相關系數)

3,Sperman秩相關系數(斯皮爾曼相關系數)

1,圖示初判

(1)變量之間的線性相關性

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
% matplotlib inline


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()

2,Pearson相關系數

 

image-20200308194119720

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

3,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相關系數 - 算法

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM