Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python在dataFrame中使用特定列数据绘制正态概率图_Python - Fatal编程技术网

如何使用Python在dataFrame中使用特定列数据绘制正态概率图

如何使用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-

我有一个数据框架,其中包含两列,分别名为“每年数千美元”和“雇佣”

我在这个数据框架中创建了一个名为“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-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分数绘制,但此处使用了累积频率的组合值(参考单个图)。。为什么会这样??