本文目录一览:
- python计算多个数组的相关性
- [相关性系数介绍+python代码实现 correlation analysis](#相关性系数介绍+python代码实现 correlation analysis)
- [Python pandas用法](#Python pandas用法)
python计算多个数组的相关性
线性相关:主要采用皮尔逊相关系数来度量连续变量之间的线性相关强度; 线性相关系数 |r| 相关程度
- 0 ≤ |r| < 0.3:低度相关
- 0.3 ≤ |r| < 0.8:中度相关
- 0.8 ≤ |r| ≤ 1:高度相关
1 函数
相关分析函数:
DataFrame.corr()
Series.corr(other)
说明:- 如果由数据框调用
corr
方法,那么将会计算每个列两两之间的相似度。 - 如果由序列调用
corr
方法,那么只是计算该序列与传入序列之间的相关度。 返回值: DataFrame
调用:返回DataFrame
Series
调用:返回一个数值型,大小为相关度
2 案例
import pandas
data = pandas.read_csv('C:\\Users\\Desktop\\test.csv')
print(data.corr())
# 由数据框调用corr方法,将会计算每个列两两之间的相似度,返回的是一个矩形
print(data['人口'].corr(data['文盲率']))
# 由某一列调用corr方法,只是计算该序列与传入序列(本例中的'文盲率')之间的相关度
print(data['超市购物率','网上购物率','文盲率','人口']).corr()
相关性系数介绍+python代码实现 correlation analysis
参考文献:
- Python 皮尔森相关系数
- 统计学之三大相关性系数(pearson、spearman、kendall)
皮尔森系数
重点关注第一个等号后面的公式,最后面的是推导计算,暂时不用管它们。两个变量 (X, Y) 的皮尔森相关性系数 (ρ<sub>X,Y</sub>) 等于它们之间的协方差 cov(X,Y)
除以它们各自标准差的乘积 (σ<sub>X</sub>, σ<sub>Y</sub>)。
公式的分母是变量的标准差,这就意味着计算皮尔森相关性系数时,变量的标准差不能为 0(分母不能为 0),也就是说你的两个变量中任何一个的值不能都是相同的。如果没有变化,用皮尔森相关系数是没办法算出这个变量与另一个变量之间是不是有相关性的。
皮尔森相关系数(Pearson correlation coefficient)也称皮尔森积矩相关系数 (Pearson product-moment correlation coefficient),是一种线性相关系数。皮尔森相关系数是用来反映两个变量线性相关程度的统计量。相关系数用 r 表示,其中 n 为样本量,分别为两个变量的观测值和均值。r 描述的是两个变量间线性相关强弱的程度。r 的绝对值越大表明相关性越强。
简单的相关系数的分类:
- 0.8 - 1.0:极强相关
- 0.6 - 0.8:强相关
- 0.4 - 0.6:中等程度相关
- 0.2 - 0.4:弱相关
- 0.0 - 0.2:极弱相关或无相关
r 描述的是两个变量间线性相关强弱的程度。r 的取值在 -1 与 +1 之间,若 r > 0,表明两个变量是正相关,即一个变量的值越大,另一个变量的值也会越大;若 r < 0,表明两个变量是负相关,即一个变量的值越大另一个变量的值反而会越小。r 的绝对值越大表明相关性越强,要注意的是这里并不存在因果关系。
斯皮尔曼相关性系数
通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解,这种表征形式就没有了求皮尔森相关性系数时那些限制。下面来看一下它的计算公式: 计算过程就是:首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的 d<sub>i</sub>,n 就是变量中数据的个数,最后带入公式就可求解结果。 带入公式,求得斯皮尔曼相关性系数:ρ<sub>s</sub> = 1 - 6 (1+1+1+9)/6 × 35 = 0.657 而且,即便在变量值没有变化的情况下,也不会出现像皮尔森系数那样分母为 0 而无法计算的情况。另外,即使出现异常值,由于异常值的秩次通常不会有明显的变化(比如过大或者过小,那要么排第一,要么排最后),所以对斯皮尔曼相关性系数的影响也非常小! 由于斯皮尔曼相关性系数没有那些数据条件要求,适用的范围就广多了。
肯德尔相关性系数
又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。 分类变量可以理解成有类别的变量,可以分为:
- 无序的,比如性别(男、女)、血型(A、B、O、AB);
- 有序的,比如肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。 通常需要求相关性系数的都是有序分类变量。 举个例子。比如评委对选手的评分(优、中、差等),我们想看两个(或者多个)评委对几位选手的评价标准是否一致;或者医院的尿糖化验报告,想检验各个医院对尿糖的化验结果是否一致,这时候就可以使用肯德尔相关性系数进行衡量。
pandas.DataFrame.corr()
DataFrame.corr(method='pearson', min_periods=1)[source]
Compute pairwise correlation of columns, excluding NA/null values Parameters:
method
: {'pearson', 'kendall', 'spearman'}- pearson: standard correlation coefficient
- kendall: Kendall Tau correlation coefficient
- spearman: Spearman rank correlation
min_periods
: int, optional- Minimum number of observations required per pair of columns to have a valid result. Currently only available for pearson and spearman correlation Returns:
- y: DataFrame
numpy.corrcoef
numpy.corrcoef(x, y=None, rowvar=True, bias=class'numpy._globals._NoValue', ddof=class'numpy._globals._NoValue')
返回 Pearson 乘积矩相关系数。 相关系数矩阵 R 和协方差矩阵 C 之间的关系为: R 的值在 -1 和 1 之间(含)。 参数:
- x:array_like
- 包含多个变量和观察值的 1 维或 2 维数组。x 的每一行代表一个变量,每一列都是对所有这些变量的单独观察。另请参阅下面的 rowvar。
- y:array_like,可选
- 一组额外的变量和观察。y 的形状与 x 相同。
- rowvar:布尔,可选
- 如果 rowvar 为 True(默认),则每行表示一个变量,并在列中有观察值。否则,该关系将被转置:每列表示一个变量,而行包含观察值。
- bias : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
- ddof : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0. 返回:
- R:ndarray 变量的相关系数矩阵。
Python pandas用法
在 Python 中,pandas 是基于 NumPy 数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas 是专门为处理表格和混杂数据设计的,而 NumPy 更适合处理统一的数值数组数据。 使用下面格式约定,引入 pandas 包: pandas 有两个主要数据结构:Series 和 DataFrame。
Series
Series 是一种类似于一维数组的对象,它由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成,即 index 和 values 两部分,可以通过索引的方式选取 Series 中的单个或一组值。
pd.Series(list, index=[ ])
第二个参数是 Series 中数据的索引,可以省略。
Series 类型索引、切片、运算的操作类似于 ndarray,同样的类似 Python 字典类型的操作,包括保留字 in 操作、使用 .get()
方法。
Series 和 ndarray 之间的主要区别在于 Series 之间的操作会根据索引自动对齐数据。
DataFrame
DataFrame 是一个表格型的数据类型,每列值类型可以不同,是最常用的 pandas 对象。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共用同一个索引)。DataFrame 中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
pd.DataFrame(data, columns=[ ], index=[ ])
columns 和 index 为指定的列、行索引,并按照顺序排列。 如果创建时指定了 columns 和 index 索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值。
数据索引
Series 和 DataFrame 的索引是 Index 类型,Index 对象是不可修改的,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、操作实现自动化对齐。索引类型 index 的常用方法:
重新索引
能够改变、重排 Series 和 DataFrame 索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。
df.reindex(index, columns, fill_value, method, limit, copy)
index/columns
为新的行列自定义索引;fill_value
为用于填充缺失位置的值;method
为填充方法,ffill
当前值向前填充,bfill
向后填充;limit
为最大填充量;copy
默认 True,生成新的对象,False 时,新旧相等不复制。
删除指定索引
默认返回的是一个新对象。
.drop()
能够删除 Series 和 DataFrame 指定行或列索引。
删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。
如果删除的是列索引,需要增加 axis=1
或 axis='columns'
作为参数。
增加 inplace=True
作为参数,可以就地修改对象,不会返回新的对象。
基本统计分析函数
适用于 Series 和 DataFrame 的基本统计分析函数:传入 axis='columns'
或 axis=1
将会按行进行运算。
.describe()
:针对各列的多个统计汇总,用统计学指标快速描述数据的概要。.sum()
:计算各列数据的和.count()
:非 NaN 值的数量.mean()
/.median()
:计算数据的算术平均值、算术中位数.var()
/.std()
:计算数据的方差、标准差.corr()
/.cov()
:计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series 的 corr 方法用于计算两个 Series 中重叠的、非 NA 的、按索引对齐的值的相关系数。DataFrame 的 corr 和 cov 方法将以 DataFrame 的形式分别返回完整的相关系数或协方差矩阵。.corrwith()
:利用 DataFrame 的 corrwith 方法,可以计算其列或行跟另一个 Series 或 DataFrame 之间的相关系数。传入一个 Series 将会返回一个相关系数值 Series(针对各列进行计算),传入一个 DataFrame 则会计算按列名配对的相关系数。.min()
/.max()
:计算数据的最小值、最大值.diff()
:计算一阶差分,对时间序列很有效.mode()
:计算众数,返回频数最高的那(几)个.mean()
:计算均值.quantile()
:计算分位数(0 到 1).isin()
:用于判断矢量化集合的成员资格,可用于过滤 Series 中或 DataFrame 列中数据的子集 适用于 Series 的基本统计分析函数,DataFrame[列名] 返回的是一个 Series 类型。.unique()
:返回一个 Series 中的唯一值组成的数组。.value_counts()
:计算一个 Series 中各值出现的频率。.argmin()
/.argmax()
:计算数据最大值、最小值所在位置的索引位置(自动索引).idxmin()
/.idxmax()
:计算数据最大值、最小值所在位置的索引(自定义索引)
数据读取与处理
pandas 提供了一些用于将表格型数据读取为 DataFrame 对象的函数。下表对它们进行了总结,其中 read_csv()
、read_table()
、to_csv()
是用得最多的。
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。
在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas 使用浮点值 NaN(np.nan)表示缺失数据,也可将缺失值表示为 NA(Python 内置的 None 值)。
替换值
.replace(old, new)
用新的数据替换老的数据,如果希望一次性替换多个值,old 和 new 可以是列表。默认会返回一个新的对象,传入 inplace=True
可以对现有对象进行就地修改。
删除重复数据
利用函数或字典进行数据转换
df.head()
:查询数据的前五行df.tail()
:查询数据的末尾 5 行pandas.cut()
pandas.qcut()
:基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。pandas.date_range()
:返回一个时间索引df.apply()
:沿相应轴应用函数Series.value_counts()
:返回不同数据的计数值df.aggregate()
df.reset_index()
:重新设置 index,参数drop = True
时会丢弃原来的索引,设置新的从 0 开始的索引。常与groupby()
一起用numpy.zeros()