Fem*_*der 61 python numpy matplotlib pandas
我在Python Pandas系列中有一些值(类型:pandas.core.series.Series)
In [1]: series = pd.Series([0.0,950.0,-70.0,812.0,0.0,-90.0,0.0,0.0,-90.0,0.0,-64.0,208.0,0.0,-90.0,0.0,-80.0,0.0,0.0,-80.0,-48.0,840.0,-100.0,190.0,130.0,-100.0,-100.0,0.0,-50.0,0.0,-100.0,-100.0,0.0,-90.0,0.0,-90.0,-90.0,63.0,-90.0,0.0,0.0,-90.0,-80.0,0.0,])
In [2]: series.min()
Out[2]: -100.0
In [3]: series.max()
Out[3]: 950.0
Run Code Online (Sandbox Code Playgroud)
我想获得直方图的值(不需要绘制直方图)...我只需要获得每个间隔的频率.
假设我的间隔是从[-200; -150]至[950; 1000]
所以下限是
lwb = range(-200,1000,50)
Run Code Online (Sandbox Code Playgroud)
和上限是
upb = range(-150,1050,50)
Run Code Online (Sandbox Code Playgroud)
我现在不知道如何获得频率(每个区间内的值的数量)......我确信定义lwb和upb是不必要的...但我不知道我应该使用什么函数执行此操作!(在Pandas doc中潜水后,我认为pandas.core.series.Series功能可以帮助我,因为它是一个离散化问题......但我不明白如何使用它)
能够做到这一点后,我将看看显示直方图的方式(但这是另一个问题)
Enr*_*eri 73
你只需要使用numpy的直方图函数:
import numpy as np
count, division = np.histogram(series)
Run Code Online (Sandbox Code Playgroud)
其中division是自动计算的bin的边框,count是每个bin中的填充.
如果需要修复一定数量的二进制数,可以使用参数二进制数并指定多个二进制数,或直接给它每个二进制数之间的边界.
count, division = np.histogram(series, bins = [-201,-149,949,1001])
Run Code Online (Sandbox Code Playgroud)
绘制结果你可以使用matplotlib函数hist,但是如果你在pandas中工作,每个Series都有自己的hist函数句柄,你可以给它选择的binning:
series.hist(bins=division)
Run Code Online (Sandbox Code Playgroud)
Nic*_*eli 16
为了获得给定间隔分箱范围内的值的频率计数,我们可以利用pd.cut哪个返回每个元素的半开仓的索引以及value_counts计算它们各自的计数.
为了绘制他们的计数,可以制作条形图.
step = 50
bin_range = np.arange(-200, 1000+step, step)
out, bins = pd.cut(s, bins=bin_range, include_lowest=True, right=False, retbins=True)
out.value_counts(sort=False).plot.bar()
Run Code Online (Sandbox Code Playgroud)
每个时间间隔的频率按其计数的降序排序:
out.value_counts().head()
[-100, -50) 18
[0, 50) 16
[800, 850) 2
[-50, 0) 2
[950, 1000) 1
dtype: int64
Run Code Online (Sandbox Code Playgroud)
要修改绘图以仅包含范围的较低闭合间隔以用于美学目的,您可以执行以下操作:
out.cat.categories = bins[:-1]
out.value_counts(sort=False).plot.bar()
Run Code Online (Sandbox Code Playgroud)