- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我对 pandas 很陌生,所以我想我做错了什么 -
我有一个数据框:
a b
0 0.5 0.75
1 0.5 0.75
2 0.5 0.75
3 0.5 0.75
4 0.5 0.75
df.corr()
给我:
a b
a NaN NaN
b NaN NaN
但是 np.correlate(df["a"], df["b"])
给出:1.875
这是为什么呢?我想为我的 DataFrame 获得相关矩阵,并认为 corr()
可以做到这一点(至少根据文档)。为什么返回NaN
?
正确的计算方法是什么?
非常感谢!
最佳答案
np.correlate计算(未标准化)cross-correlation两个一维序列之间:
z[k] = sum_n a[n] * conj(v[n+k])
而df.corr (默认)计算 Pearson correlation coefficient .
相关系数(如果存在)始终介于 -1 和 1 之间。互相关是无界的。
这些公式有些相关,但请注意,在互相关公式(上图)中,没有减去均值,也没有除以标准差,标准差是 Pearson 相关系数公式的一部分。
df['a']
和 df['b']
的标准差为零的事实是导致 df.corr
在任何地方都是 NaN。
从下面的评论中,听起来您正在寻找 Beta .它与 PIL 逊相关系数有关,但不是除以标准差的乘积:
除以方差:
您可以使用 np.cov 计算 Beta
cov = np.cov(a, b)
beta = cov[1, 0] / cov[0, 0]
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)
def geometric_brownian_motion(T=1, N=100, mu=0.1, sigma=0.01, S0=20):
"""
http://stackoverflow.com/a/13203189/190597 (unutbu)
"""
dt = float(T) / N
t = np.linspace(0, T, N)
W = np.random.standard_normal(size=N)
W = np.cumsum(W) * np.sqrt(dt) # standard brownian motion ###
X = (mu - 0.5 * sigma ** 2) * t + sigma * W
S = S0 * np.exp(X) # geometric brownian motion ###
return S
N = 10 ** 6
a = geometric_brownian_motion(T=1, mu=0.1, sigma=0.01, N=N)
b = geometric_brownian_motion(T=1, mu=0.2, sigma=0.01, N=N)
cov = np.cov(a, b)
print(cov)
# [[ 0.38234755 0.80525967]
# [ 0.80525967 1.73517501]]
beta = cov[1, 0] / cov[0, 0]
print(beta)
# 2.10609347015
plt.plot(a)
plt.plot(b)
plt.show()
mu
s 的比例为 2,beta
约为 2.1。
你也可以用 df.corr
来计算它,虽然这是一种更迂回的方法(但很高兴看到有一致性):
import pandas as pd
df = pd.DataFrame({'a': a, 'b': b})
beta2 = (df.corr() * df['b'].std() * df['a'].std() / df['a'].var()).ix[0, 1]
print(beta2)
# 2.10609347015
assert np.allclose(beta, beta2)
关于python - DataFrame中列之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854878/
我有一个如下所示的数据框: Samples GENE GEN1 GEN2 GEN3 GEN4 GEN5 Sample1 21.0 160 110 3.90 2.62 16.5 Sa
我有以下映射 posts":{ "properties":{ "prop1": { "type": "nested", "properties": { "item
我有两个维度相等的矩阵(p 和 e),我想在同名的列之间建立斯 PIL 曼相关。我想在矩阵 (M) 中输出对相关性 我使用了 Psych 库中的 corr.test() 函数,这是我所做的: libr
我有两个维度相等的矩阵(p 和 e),我想在同名的列之间建立斯 PIL 曼相关。我想在矩阵 (M) 中输出对相关性 我使用了 Psych 库中的 corr.test() 函数,这是我所做的: libr
我正在尝试使用 estpost 和 community-contributed 命令将 Spearman 相关矩阵导出到 rtf 或 Excel 文件中 esttab。 但是,我收到以下错误: inv
我在网上找到了以下查询: SELECT company_title FROM companies WHERE company_title like '%gge%' GROUP BY compa
我是 Sphinx 和 Lucene 的重度用户。Sphinx 只需要一个数据库,对其进行索引。然后您调用 Sphinx 获取 ID。 但是,如果我想创建一个非常微型 的搜索引擎怎么办?就几行数据,几
是否有我要在下面描述的模式/算法的名称?... 假设您有一棵像这样的相关数据树: IDEs Visual Studio Visual Studio 2008 Visual Studio 2010 Ec
早上好。这是我的问题:我有几个文件,如下所示: 104 0.1697 12.3513214 15.9136214 112 -0.3146 12.0517303 14.8027303 122 0.271
在尝试将function_score与boost_mode: "sum"一起使用时(因为这样可以更轻松地跟踪不同的贡献),我想归一化查询相关性对整体文档分数的影响,但是为此,我需要知道它可以取什么值。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
X,Y 的 spearmanr(Spearman 相关性)输出为我提供以下信息: 相关性:0.54542821980327882 P 值:2.3569040685361066e-65 其中 len(X
我有一个 Pandas 数据框,它有一个七年时间范围内的日期时间索引和 10 种不同 Assets 的价格数据。我想运行 dataframe.corr 函数来评估 Assets 之间的关系,我的问题是
我有相同数据(公司)的 2 个信息源,我可以通过唯一 ID(契约(Contract)号)将它们连接在一起。第二个不同来源的存在是由于这两个来源是手动独立更新的。所以我在 2 个表中有一个 ID 和一个
我正在尝试在php中实现两组数据之间人员相关系数的计算。我只是想做可以在这个 url 上找到的移植 python 脚本 http://answers.oreilly.com/topic/1066-ho
所以我使用 PHP Symfony 和 Ongr-Elasticsearch 包来查询我的文档并返回匹配的对象。结果似乎按相关性/分数排序,但实际相关性/分数不包含在对象本身中。 这可能吗?我想将分数
我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和/或 Pearson 相关性。 我试过df['corr'] = df['col1'].rolling(P).corr(df['
我正在处理一个大型数据集。不过,我将从一个小示例开始,以说明我要实现的目标。 我有以下向量: season %group_by(season, round, team)%>%dplyr::mutate
我正在使用 OIDC 的混合身份验证流程。 options.Events.OnRedirectToIdentityProvider = redirectContext =>
我正在尝试查询我的产品ElasticSearch索引并创建一个script_score,但我一直收到错误Variable [relevancy] is not defined. 我尝试只用一个数字替换
我是一名优秀的程序员,十分优秀!