python - 如何对 CSV 文件中的数据进行聚类(或分组)?

标签 python list csv cluster-computing

我有一个 CSV 格式的三列数据集,

A,B,10
A,C,15
A,D,21
B,A,10
B,C,20

我想根据第三列对 A、B、C、D 对进行分组或聚类。条件是增量为10。0-10为一簇,11-20为另一簇,依此类推。每个簇将包含 A、B、C、D 对。基本上,如果第三列在 0 - 10 之间,一对将进入第一个簇。 A、B 在第三列中有 10 个,因此它们位于第一簇中。我预计会有 10-15 个集群。

以下是我打开 CSV 的方法:

fileread = open('/data/dataset.csv', 'rU')
readcsv = csv.reader(fileread, delimiter=',')

L = list(readcsv)

我创建了一个集合:

set(item[2] for item in L if (item[0]=='A' and item[1] == 'B' and item[2] <= 10)

我的基本问题是如何检查第三列并将这些对存储在集群中?

最佳答案

这样怎么样:循环数据并通过将第三个元素整数除以 10 来确定组。

import csv
with open('data.txt') as f:
    groups = {}
    for item in list(csv.reader(f, delimiter=',')):
        n = int(item[2]) // 10
        group = "%d-%d" % (n*10, n*10+9)
        groups.setdefault(group, []).append(item[:2])

使用您的数据,最终如下:

{'20-29': [['A', 'D'], ['B', 'C']], 
 '10-19': [['A', 'B'], ['A', 'C'], ['B', 'A']]}

字典是无序的,所以如果你想按排序顺序打印它们,你必须对键进行排序。这有点棘手,因为它们是字符串并且会按字典顺序排序。但你可以这样做:

for k in sorted(groups, key=lambda k: int(k.split('-')[0])):
    print k, groups[k]

(或者首先使用较小的数字作为键)

关于python - 如何对 CSV 文件中的数据进行聚类(或分组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828844/

相关文章:

python - 如何在 Python Dask 数据帧中执行位置索引

list - 为什么我的 Prolog 练习没有尝试其他解决方案?

python - CSV 到 JSON 脚本

list - 我如何在 Dr. Racket 中编写一个函数,它使用 2 个可能的符号列表并将它们替换为其他符号?

python - 实验室作业遇到问题(使用列表和整数)

.net - 将数据导出到 CSV 文件

返回比 Linux `wc -l` 高得多的行数的 Python 代码

用于在元组中保存计数的Python数据结构?

python - numpy flatten - 如何打印输出

python - 查询任务 ':app:compileDebugJavaWithJavac'属性 'options.generatedSourceOutputDirectory'的值失败