我有两个数据集,第一个包含离散数据,第二个包含连续数据:
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)
现在我想计算频率.它对data1来说很简单,因为它包含离散值:
import collections
c = collections.Counter(data1)
sum = sum(c.values())
for key,val in c.iteritems():
print([key,float(val)/sum])
如何为连续数字做同样的事情?从理论上我知道必须对连续数据进行分组.只有在此之后它才能表示为条形图.那么,如何在python中对数据进行分组?
解决方法:
您正在寻找的是一个histogram.您可以使用numpy.histogram从阵列中获取其中一个.你将一个numpy数组和你的组的边缘(或通常称为它们的bin)传递给函数,它将返回一个2元组,由每个bin中的元素数和bin边缘组成.来自文档的示例:
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))
@ajrc在评论中提到了熊猫.如果你有一个pandas系列(并且你可以用s = pandas.series(data2)创建一个),你可以通过调用s.hist()创建一个直方图.它将创建一个直方图,在你的数据范围内具有等间隔的二进制数(默认的bin数为10,但你可以使用bin参数调整它.
标签:python,dataframe,numpy