有一个样本,a列是数字,b列是该数字出现的次数,样本很大,要求这个样本的标准差和正态分布图,请问用python应该怎样处理?查了很多,还是不太懂...
A B
100 2
200 3
300 4
... ...
有一个样本,a列是数字,b列是该数字出现的次数,样本很大,要求这个样本的标准差和正态分布图,请问用python应该怎样处理?查了很多,还是不太懂...
A B
100 2
200 3
300 4
... ...
虽然 @Leo黎诗霆 同学的方法可以解决问题,但算不上高效率,也没有充分利用 numpy 类库的矩阵运算能力。
以下提供更为简洁、高效的方法,希望同学们从中理解 numpy 矩阵运算的精妙。
假设你已经知道如何计算一组数的标准差,否则请看 https://zh.wikipedia.org/zh-h...
对于一组数 [ 100, 200, 300 ] ,及其对应的个数 [ 1, 2, 3 ]
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
'a': [100, 200, 300],
'b': [1, 2, 3], # a 列对应元素的个数
})
# n 为样本总数, m 为平均值, sd 为标准差
n = df.b.sum()
m = (df.a * df.b).sum() / n
sd = ((df.b * ((df.a - m) ** 2)).sum() / n) ** 0.5
# 绘制直方图
plt.hist(df.a, weights=df.b)
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
4 回答3.9k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
2 回答433 阅读✓ 已解决
关于数据
可以看成一个长这样
[100,100,200,200,200,300,300,300,300,...]
的list
。标准分布
可以使用
numpy
的std()
来计算标准差,当然自己写公式也可以。比如分布图
正态分布图只是正态分布的数据的分布图。是否正态分布取决于你的数据。可以考虑用seaborn来绘制分布图。
分布图长这样:
大数据量
可以用
pandas
读取。用一个循环将数据表转为list: