我有两个数据集,第一个包含离散数据,第二个包含连续数据:
// the filed that needs to display the newly selected rows data
items:[
{
xtype: 'displayfield',
fieldLabel: 'Route',
id: 'route',
name: 'route'
}
...
Ext.getCmp('route').setValue( /** currently selected rows route **/ );
现在我想计算频率。它对data1来说很简单,因为它包含离散值:
import numpy as np
# discrete
data1 = [1, 1, 2, 2, 2, 3, 4, 4,7, 7, 7, 7, 7, 7]
# continuous
data2 = np.random.normal(size=100)
如何为连续数字做同样的事情?从理论上我知道必须对连续数据进行分组。只有在此之后它才能表示为条形图。那么,如何在python中对数据进行分组?
答案 0 :(得分:6)
对于numpy,请查看np.histogram
表示连续数据,np.bincount
表示离散数据。
作为一个简单的例子:
import numpy as np
data1 = [1, 1, 2, 2, 2, 3, 4, 4, 7, 7, 7, 7, 7, 7]
data2 = np.random.normal(size=100)
discrete_counts = np.bincount(data1)
discrete_vals = np.arange(len(discrete_counts))
counts, edges = np.histogram(data2)
例如:
import numpy as np
import matplotlib.pyplot as plt
data1 = [1, 1, 2, 2, 2, 3, 4, 4, 7, 7, 7, 7, 7, 7]
data2 = np.random.normal(size=100)
fig, axes = plt.subplots(nrows=2)
counts = np.bincount(data1)
vals = np.arange(len(counts))
axes[0].bar(counts, vals, align='center', color='lightblue')
axes[0].set(title='Discrete Data')
axes[1].hist(data2, color='salmon')
axes[1].set(title='Continuous Data')
for ax in axes:
ax.margins(0.05)
ax.set_ylim(bottom=0)
plt.show()
如果您正在使用pandas
,正如@Carsten所提到的那样,请查看hist
函数以绘制直方图(类似于plt.hist
)。但是,numpy.histogram
的等效值为pandas.cut
,当您想要直方图计数(或想要按连续范围分组)时,这非常方便。
答案 1 :(得分:5)
您正在寻找的内容称为histogram。您可以使用numpy.histogram
从阵列中获取其中一个。您将一个numpy数组和组的边(或 bins ,通常称为它们)传递给函数,它将返回一个2元组,由每个bin中的元素数组成和边缘。来自文档的示例:
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))
@ajrc在评论中提到了大熊猫。如果你有一只大熊猫Series
(你可以用s = pandas.series(data2)
创建一个大熊猫,你可以通过调用s.hist()
来创建一个直方图。它将创建一个直方图,在该范围内具有等间距的区间您的数据(默认的二进制数为10,但您可以使用bins
参数进行调整)。