/ / Как да групирате (или групирате) данните от CSV файл? - python, list, csv, cluster-computing

Как да се групират (или групират) данните от CSV файл? - python, списък, 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, двойката ще отиде в първия клъстер. А, В има 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)

Основният ми въпрос тук е как да проверя третата колона и да съхраняваш двойките в клъстер?

Отговори:

2 за отговор № 1

Какво ще кажете за това: Завъртете данните и определете групите, като делите третия елемент на 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])

Използване на данните ви, groups завършва така:

{"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]

(или използвайте само по-малкия номер като ключ на първо място)