gpt4 book ai didi

python - 在 numpy/pandas 中生成相关数

转载 作者:行者123 更新时间:2023-12-04 03:04:23 25 4
gpt4 key购买 nike

我正在尝试生成 4 个科目的模拟学生成绩,其中学生记录是单行数据。此处显示的代码将生成均值为 60、标准差为 15 的正态分布随机数。

df = pd.DataFrame(15 * np.random.randn(5, 4) + 60, columns=['Math', 'Science', 'History', 'Art'])

我想不通的是如何让学生的科学分数与他们的数学分数高度相关,而他们的历史和艺术分数不那么高,但仍然与数学分数有一定的相关性。

我既不是统计学家也不是专家程序员,所以我希望有一个不太复杂但更容易理解的解决方案。

最佳答案

让我们将@Daniel 的建议放入代码中。

步骤 1

让我们导入 multivariate_normal :

import numpy as np
from scipy.stats import multivariate_normal as mvn

步骤 2

让我们构造协方差数据并生成数据:
cov = np.array([[1, 0.8,.7, .6],[.8,1.,.5,.5],[0.7,.5,1.,.5],[0.6,.5,.5,1]])
cov

array([[ 1. , 0.8, 0.7, 0.6],
[ 0.8, 1. , 0.5, 0.5],
[ 0.7, 0.5, 1. , 0.5],
[ 0.6, 0.5, 0.5, 1. ]])

这是关键步骤。注意,协方差矩阵有 1's在对角线中,当您从左到右步进时,协方差会减小。

现在我们已经准备好生成数据,让我们坐 1'000 个点:
scores = mvn.rvs(mean = [60.,60.,60.,60.], cov=cov, size = 1000)

健全性检查(从协方差矩阵到简单的相关性):
np.corrcoef(scores.T):

array([[ 1. , 0.78886583, 0.70198586, 0.56810058],
[ 0.78886583, 1. , 0.49187904, 0.45994833],
[ 0.70198586, 0.49187904, 1. , 0.4755558 ],
[ 0.56810058, 0.45994833, 0.4755558 , 1. ]])

请注意, np.corrcoef期望您的数据在行中。

最后,让我们将您的数据放入 Pandas 的 DataFrame :
df = pd.DataFrame(data = scores, columns = ["Math", "Science","History", "Art"])
df.head()

Math Science History Art
0 60.629673 61.238697 61.805788 61.848049
1 59.728172 60.095608 61.139197 61.610891
2 61.205913 60.812307 60.822623 59.497453
3 60.581532 62.163044 59.277956 60.992206
4 61.408262 59.894078 61.154003 61.730079

步骤 3

让我们可视化我们刚刚生成的一些数据:
ax = df.plot(x = "Math",y="Art", kind="scatter", color = "r", alpha = .5, label = "Art, $corr_{Math}$ = .6")
df.plot(x = "Math",y="Science", kind="scatter", ax = ax, color = "b", alpha = .2, label = "Science, $corr_{Math}$ = .8")
ax.set_ylabel("Art and Science");

enter image description here

关于python - 在 numpy/pandas 中生成相关数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com