我有一个名为d
的无序列表,如下所示:
[0.0000, 123.9877,0.0000,9870.9876, ...]
我只是想用Python中的Matplotlib根据这个列表绘制一个cdf图。
d = []
d_sorted = []
for line in fd.readlines():
(addr, videoid, userag, usertp, timeinterval) = line.split()
d.append(float(timeinterval))
d_sorted = sorted(d)
class discrete_cdf:
def __init__(data):
self._data = data # must be sorted
self._data_len = float(len(data))
def __call__(point):
return (len(self._data[:bisect_left(self._data, point)]) /
self._data_len)
cdf = discrete_cdf(d_sorted)
xvalues = range(0, max(d_sorted))
yvalues = [cdf(point) for point in xvalues]
plt.plot(xvalues, yvalues)
现在我正在使用这段代码,但错误消息是:
Traceback (most recent call last):
File "hitratioparea_0117.py", line 43, in <module>
cdf = discrete_cdf(d_sorted)
TypeError: __init__() takes exactly 1 argument (2 given)
7条答案
按热度按时间llmtgqce1#
我知道我迟到了。但是,如果你只是想把cdf用于你的情节,而不是未来的计算,有一个更简单的方法:
作为一个例子,
编辑:matplotlib文档中的This example可能更有帮助。
kd3sttzy2#
如前所述,
numpy
fromnumpy
可以很好地工作。确保你的数据是一个正确的PDF(即总和为1),否则CDF不会以单位as it should结束。下面是一个最小的工作示例:hkmswyz63#
计算累积和
cumsum
的numpy函数在这里很有用o75abkj44#
现在,您可以使用
seaborn
的kdeplot
函数,并将cumulative
设为True来生成CDF。csbfibhn5#
对于值的任意集合,x:
((If您是python的新手,*args和**kwargs允许您传递参数和命名参数,而无需显式声明和管理它们))
bfhwhh0e6#
对我来说效果最好的是Pandas的
quantile
功能。假设我有71个参与者,每个参与者都有一定数量的干扰,我想计算参与者的干扰次数CDF图,目标是能够知道有多少百分比的参与者至少有30次干预。
根据图表,几乎25%的参与者的干预少于30次。
您可以使用此统计数据进行进一步分析。例如,在我的案例中,我需要对每个参与者进行至少30次干预,才能满足一个受试者退出评估所需的最低样本要求。CDF告诉我,我对25%的参与者有问题。
qc6wkl3g7#
我想这样就可以了,有关过程,请参阅http://www.youtube.com/watch?v=vcoCVVs0fRI