如何使用Python在dataFrame中使用特定列数据绘制正态概率图
我有一个数据框架,其中包含两列,分别名为“每年数千美元”和“雇佣” 我在这个数据框架中创建了一个名为“cubic_Root”的新变量,它以df['每年数千美元]为单位计算数据如何使用Python在dataFrame中使用特定列数据绘制正态概率图,python,Python,我有一个数据框架,其中包含两列,分别名为“每年数千美元”和“雇佣” 我在这个数据框架中创建了一个名为“cubic_Root”的新变量,它以df['每年数千美元]为单位计算数据 df['cubic_Root'] = -1 / df['thousands of dollars per year'] ** (1. / 3) df['cubic_Root']中的数据如下所示: ID立方根 1-0.629961 2-0.405480 3-0.329317 4-0.480750 5-0.305711 6-
df['cubic_Root'] = -1 / df['thousands of dollars per year'] ** (1. / 3)
df['cubic_Root']中的数据如下所示:
ID立方根
1-0.629961
2-0.405480
3-0.329317
4-0.480750
5-0.305711
6-0.449644
7-0.449644
8-0.480750
现在!如何使用df['cubic_Root'中的数据绘制正态概率图 您需要“概率”图
所以对于一个单一的情节,你会有如下的东西
import scipy.stats
import numpy as np
import matplotlib.pyplot as plt
# 100 values from a normal distribution with a std of 3 and a mean of 0.5
data = 3.0 * np.random.randn(100) + 0.5
counts, start, dx, _ = scipy.stats.cumfreq(data, numbins=20)
x = np.arange(counts.size) * dx + start
plt.plot(x, counts, 'ro')
plt.xlabel('Value')
plt.ylabel('Cumulative Frequency')
plt.show()
如果要绘制分布,并且您知道它,请将其定义为函数,并按如下方式绘制:
import numpy as np
from matplotlib import pyplot as plt
def my_dist(x):
return np.exp(-x ** 2)
x = np.arange(-100, 100)
p = my_dist(x)
plt.plot(x, p)
plt.show()
如果您没有精确的分布作为分析函数,也许您可以生成一个大样本,获取直方图并以某种方式平滑数据:
import numpy as np
from scipy.interpolate import UnivariateSpline
from matplotlib import pyplot as plt
N = 1000
n = N/10
s = np.random.normal(size=N) # generate your data sample with N elements
p, x = np.histogram(s, bins=n) # bin it into n = N/10 bins
x = x[:-1] + (x[1] - x[0])/2 # convert bin edges to centers
f = UnivariateSpline(x, p, s=n)
plt.plot(x, f(x))
plt.show()
可以在单变量样条函数调用中增加或减少s(平滑因子),以增加或减少平滑。例如,使用以下两种方法:
事件到达时间的概率密度函数(PDF)
import numpy as np
import scipy.stats
# generate data samples
data = scipy.stats.expon.rvs(loc=0, scale=1, size=1000, random_state=123)
然后,只需调用
scipy.stats.gaussian_kde(data,bw_method=bw)
其中,bw是估算过程的(可选)参数。对于该数据集,考虑到bw的三个值,拟合如下所示
# test values for the bw_method option ('None' is the default value)
bw_values = [None, 0.1, 0.01]
# generate a list of kde estimators for each bw
kde = [scipy.stats.gaussian_kde(data,bw_method=bw) for bw in bw_values]
# plot (normalized) histogram of the data
import matplotlib.pyplot as plt
plt.hist(data, 50, normed=1, facecolor='green', alpha=0.5);
# plot density estimates
t_range = np.linspace(-2,8,200)
for i, bw in enumerate(bw_values):
plt.plot(t_range,kde[i](t_range),lw=2, label='bw = '+str(bw))
plt.xlim(-1,6)
plt.legend(loc='best')
参考:
检查此项:@PulkitKedia请参考正态概率图,在Y轴上用Z分数绘制,但此处使用了累积频率的组合值(参考单个图)。。为什么会这样??