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

2024-06-12 23:01:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,包含两个列,名为“每年数千美元”和“雇用”。

我在这个数据框架中创建了一个名为“cubic_Root”的新变量,通过计算df中的数据[每年数千美元]

df['cubic_Root'] = -1 / df['thousands of dollars per year'] ** (1. / 3)

df['立方根']中的数据如下:

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[“立方根”]中的数据绘制正态概率图。


Tags: of数据框架id利用df绘制root
1条回答
网友
1楼 · 发布于 2024-06-12 23:01:53

你想要“概率”图。

所以对于一个情节,你会有如下的东西。

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()

enter image description here

如果要绘制分布,并且您知道它,请将其定义为函数,并按此方式绘制:

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()

可以在单变量pline函数调用中增加或减少s(平滑因子),以增加或减少平滑。例如,使用这两种方法:

enter image description here

事件到达时间的概率密度函数(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')

enter image description here

参考:

Python: Matplotlib - probability plot for several data set

how to plot Probability density Function (PDF) of inter-arrival time of events?

相关问题 更多 >