Python 如何对CSV文件中的数据进行群集(或分组)?

Python 如何对CSV文件中的数据进行群集(或分组)?,python,list,csv,cluster-computing,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')

我有一个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)

set(项[2]用于L中的项if(项[0]='A'和项[1]='B'和项[2])如何:循环数据并通过第三个元素除以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]

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

到目前为止您尝试了什么?最后示例中的语法建议使用字典-您尝试过吗?您能否生成第三列比较产生的
输出
[sic]?你的问题到底是什么?@jonrsharpe我已经更新了这个问题。@jonrsharpe只是想一想:与其快速判断和贬低人们的问题,不如像tobias_k那样思考一点,然后行动起来……这样会是一个更好的社区只是想:阅读文章中的材料,并用它来提出更好的问题。这个问题仍然缺乏答案到目前为止,你的代码的工作和一个明确的描述问题-考虑包括一个示例输入连同预期和实际输出。工作得很好…但是它跳过一些有151-160在CSV,但它从120到129开始跳到50-59…我认为DICT是不正常的。这是正常的。字典总是无序的。如果你想要的话。要按排序顺序打印它们,只需对键进行排序…但现在,键是字符串,因此“150-159”将在之前进行排序,例如“20-29”。当然,您可以只使用150和20作为键,这样就可以了。