我有一个用于项集挖掘的数据集。我想找到每个唯一数字的出现次数,即候选 1 项集。
数据的形状是 3000x1。我不知道如何计算唯一出现的次数。
存储数据的区域值列表。
使用不同的 ndarray,如何找到数据集中每个项目的频率?
更新 在@jojo 的帮助下得到了解决方案。
df = pd.read_csv('sample.csv', sep=',')
all_values = dataset.values.ravel()
notNan = np.logical_not(np.isnan(all_values))
distinct, counts = np.unique(all_values[notNan], return_counts=True)
答案 0 :(得分:1)
首先请注意,如果您有一个普通的 csv(逗号分隔),您应该使用 sep=','
。这是因为 '\t'
假定 TAB 作为分隔符。
另外,考虑在您的 header=None
调用中添加 read_csv
,否则第一行将被视为数据框中的列名。
最后,由于列似乎具有不同的长度,您将在所有列中都有 nan
值比最长的列短,要删除它们,您可以在获得唯一值时屏蔽所有 nan
值值。类似于 values[np.logical_not(np.isnan(values))]
,但请参见下文。
把事情放在一起:
dataset = pd.read_csv('dataset.csv', sep=',', header=None)
all_values = dataset.values.ravel()
您可以直接使用 unique
from numpy 来获取每个唯一值的计数:
import numpy as np
notNan = np.logical_not(np.isnan(all_values))
distinct, counts = np.unique(all_values[notNan], return_counts=True)
如果您关心频率,只需将 counts
除以 all_values[notNan].size
。
这是一个简单的示例(来自上面链接的文档),以突出显示 np.unique
的工作原理:
>>> import numpy as np
>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> values, counts = np.unique(a, return_counts=True)
>>> values # list of all unique values in a
array([1, 2, 3, 4, 6])
>>> counts # count of the occurrences of each value in values
array([1, 3, 1, 1, 1])