相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量的相关密切程度。

相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。

相关系数在[-1,1]之间。

一、图示初判

通过pandas做散点矩阵图进行初步判断

df1 = pd.DataFrame(np.random.randn(200,4)*100,columns=['A','B','C','D'])
pd.plotting.scatter_matrix(df1,figsize=(12,12),diagonal='kde',marker='o',range_padding=0.1)

二、Pearson相关系数(皮尔森相关系数)

前提条件:数据满足正太分布

皮尔森相关系数,也称皮尔森积矩相关系数,是一种线性相关关系。

衡量向量相似度的一种方法,输出范围为-1到1,0,0代表无相关性,负值为负相关,正值为正相关。

公式意义:分子为,(x-x的均值) 乘以 (y-y的均值)的累计和;分母为,(x-x的均值)的累计和的平方根 乘以 (y-y的均值)的累计和的平方根

|r| <= 0.3  → 不存在线性相关

0.3 < |r| <= 0.5  → 低度线性相关

0.5 < |r| <= 0.8  → 显著线性相关

|r| > 0.8  → 高度线性相关

1.皮尔森相关系数的推导

from scipy import stats
s1 = pd.Series(np.random.rand(100)*100).sort_values()
s2 = pd.Series(np.random.rand(100)*50).sort_values()
df = pd.DataFrame({'value1':s1.values,'value2':s2.values})
u1,u2 = df['value1'].mean(),df['value2'].mean()
std1,std2 = df['value1'].std(),df['value2'].std()
print('value1正太性检验结果:',stats.kstest(df['value1'],'norm',(u1,std1))) #需要先验证满足正太分布
print('value2正太性检验结果:',stats.kstest(df['value2'],'norm',(u2,std2)))df['(x-u1)*(y-u2)'] = (df['value1'] - u1) * (df['value2'] - u2)
df['(x-u1)**2'] = (df['value1'] - u1) ** 2
df['(y-u2)**2'] = (df['value2'] - u2) ** 2
print(df.head(3))
r = df['(x-u1)*(y-u2)'].sum()/(np.sqrt(df['(x-u1)**2'].sum()) * np.sqrt(df['(y-u2)**2'].sum()))
print('皮尔森相关系数为%.4f'%r)

value1正太性检验结果: KstestResult(statistic=0.09073501372253845, pvalue=0.36300244109659735)
value2正太性检验结果: KstestResult(statistic=0.11608587123064174, pvalue=0.12471026010748129)value1    value2  (x-u1)*(y-u2)    (x-u1)**2   (y-u2)**2
0  2.727329  0.101045    1163.135987  1864.420003  725.633345
1  4.566353  0.296802    1105.504546  1708.987866  715.125206
2  6.132681  0.308134    1063.167351  1581.937521  714.519254
皮尔森相关系数为0.9699

结果输出

2.pandas的corr()方法

上述方法为计算过程,可使用pandas的corr()方法直接生成相关系数矩阵

s1 = pd.Series(np.random.rand(100)*100).sort_values()
s2 = pd.Series(np.random.rand(100)*50).sort_values()
df = pd.DataFrame({'value1':s1.values,'value2':s2.values})
r = df.corr()  #参数默认为pearson
print(r)
#           value1    value2
# value1  1.000000  0.988596
# value2  0.988596  1.000000

三、Sperman秩相关系数(斯皮尔曼相关系数)

皮尔森相关系数只能用于分析服从正态分布的连续变量的相关性,对于不服从正态分布的变量,可采用Sperman秩相关系数进行相关性分析。

Sperman秩相关系数,也称等级相关系数。如果数据中没有重复值, 并且当两个变量完全单调相关时,斯皮尔曼相关系数则为+1或−1。

计算逻辑:对两个变量的取值按照从小到大顺序编秩,如果两个值大小相等,则秩次为(index1+index2)/2,

1.spearman相关系数的推导

df = pd.DataFrame({'智商':[106,86,100,101,99,103,97,113,112,110],'每周看电视小数':[7,0,27,50,28,29,20,12,6,17]})
n = len(df)
df.sort_values('智商',inplace = True)
df['range1'] = np.arange(1,n+1)
df.sort_values('每周看电视小数',inplace = True)
df['range2'] = np.arange(1,n+1)
df['d'] = df['range1'] - df['range2']
df['d**2'] = df['d'] ** 2
rs = 1 - 6 * (df['d**2'].sum())/(n*(n**2-1))
print('斯皮尔曼相关系数为%.4f'%rs)
# 斯皮尔曼相关系数为-0.1758

2.pandas的corr()方法

corr()默认为pearson相关系数,添加参数method='spearman'转化为spearman相关系数。

df = pd.DataFrame({'智商':[106,86,100,101,99,103,97,113,112,110],'每周看电视小数':[7,0,27,50,28,29,20,12,6,17]})
rs = df.corr(method='spearman')
print(rs)
#                   智商        每周看电视小数
# 智商            1.000000       -0.175758
# 每周看电视小数   -0.175758       1.000000

转载于:https://www.cnblogs.com/Forever77/p/11361213.html

数据特征分析-相关性分析相关推荐

  1. 做数学建模不得不会的数据特征分析---相关性分析

    相关性分析是分析连续变量之间的线性相关程度的强弱,我们可以通过图来初步判断,当然了比较权威的是通过Pearson相关系数(皮尔逊相关系数) / Sperman秩相关系数(斯皮尔曼相关系数)来判断 引入 ...

  2. R计算两列数据的相关系数_数据特征分析·相关性分析

    相关性分析 相关分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个因素的的相关密切程度,相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析. 1. 如何利用相关系数判断数据之间 ...

  3. Python特征分析- 相关性分析

    Python特征分析- 相关性分析 相关性分析 引入库 图示初判 变量之间的线性相关性 散点图矩阵初判多变量间关系 Pearson相关系数 创建样本数据 正态性检验 → pvalue >0.05 ...

  4. R语言两个矩阵(两组)数据的相关性分析

    R语言两个矩阵(两组)数据的相关性分析 vegan包及数据说明 分别计算距离矩阵 相关性分析 vegan包及数据说明 Mantel tests是确定两组距离测度矩阵(而非两组变量矩阵)之间相关性的相关 ...

  5. python:基金净值与龙头股收盘价 数据的相关性分析

    广发消费升级股票基金净值 与 贵州茅台收盘价 数据的相关性分析: diff_corr_2.py # coding: utf-8 import os, sys from datetime import ...

  6. 用 Python 对数据进行相关性分析

    在进行数据分析时,我们所用到的数据往往都不是一维的,而这些数据在分析时难度就增加了不少,因为我们需要考虑维度之间的关系.而这些维度关系的分析就需要用一些方法来进行衡量,相关性分析就是其中一种.本文就用 ...

  7. 生物医学数据统计分析-相关性分析

    相关性分析的概念 相关性是一个统计学名词,相关的定义为随机变量之间相互联系的密切程度和方向.在医学研究中,探讨某疾病的发生与哪些因素有关.疾病与疾病之间的关系等,都需要用到相关性分析,它常用于判断两个 ...

  8. Pandas数据的相关性分析

    本文的主要内容是基于中国大学mooc(慕课)中的"Python数据分析与可视化"课程进行整理和总结. 两个事物,表示成X和Y,如何判断他们之间的相关性? X增大,Y也增大,两个变量 ...

  9. 数据特征分析-对比分析

    对比分析是对两个互相联系的指标进行比较. 绝对数比较(相减):指标在量级上不能差别过大,常用折线图.柱状图 相对数比较(相除):结构分析.比例分析.空间比较分析.动态对比分析 df = pd.Data ...

最新文章

  1. python爬虫框架排行榜-8个最高效的Python爬虫框架,你用过几个?
  2. python elasticsearch 入门教程(二) ---全文搜索
  3. 【题解】 [HEOI2016]排序题解 (二分答案,线段树)
  4. Java不同压缩算法的性能比较
  5. phpstudy中的mysql
  6. ★(在人生的过程中我的65047777
  7. pandas dataframe随机采样
  8. Windows下部署elasticsearch和kibana
  9. eja智能压力变送器工作原理_eja变送器详解_eja变送器工作原理_eja变送器如何选型...
  10. java矩阵相乘泛型_21.8 实例学习:泛型矩阵类
  11. Atitit.数据库表的物理存储结构原理与架构设计与实践
  12. 黑马python培训全套视频
  13. 【解析】.NET中代理服务器WebProxy的各种用法
  14. 计算机多媒体制作三级证书,多媒体作品制作员(师)国家职业标准
  15. 换个思维学领域建模方法和实践
  16. 软件需求,概要设计,详细设计(文档)怎么做,做什么?
  17. 小米笔记本BIOS版本升级固件 小米笔记本Pro15.6【附下载地址】
  18. 树莓派c语言和笔记本,将树莓派变成笔记本电脑的5种方法
  19. 三种工厂模式详解-简单工厂模式、工厂模式、抽象工厂模式
  20. 办公电脑远程软件有哪些、这几款你知道吗

热门文章

  1. Java并发Semaphore信号量的学习
  2. HDU 3966 树链剖分后线段树维护
  3. dedecms ---m站功能基础详解
  4. [No0000B0]ReSharper操作指南1/16-入门与简介
  5. spring管理的类如何调用非spring管理的类
  6. MyGeneration代码生成工具
  7. Windows Azure移动终端云服务管理(公测版)
  8. MySQL 添加列,修改列,删除列 的SQL写法
  9. mssql性能优化[转](教你写出高质量的SQL语句)(二)
  10. C#中showDialog()与show()的区别(转)