处理5,000个属性

时间:2013-05-19 11:50:35

标签: mysql attributes data-mining

我有一个包含5,000多个属性的数据集 表格如下所示

id attr1 attr2, attr3
a  0         1       0
a  1         0       0
a  0         0       0
a  0         0       1

我希望在单行上表示每个记录,例如下表,以使其更适合通过群集进行数据挖掘。

id, attr1, attr2, attr3
a     1       1        1

我尝试了很多方法 我已经尝试将其导入MYSQL数据库并获取每个属性的最大值(每个ID只能为1或0),但表不能容纳5,000 +属性。

我尝试在excel中使用pivot函数并获取每个属性的Max Value,但是pivot可以处理的列数远远少于我目前正在查看的5,000个。

我已经尝试将其导入Tableua,但这也遭受了无法处理如此多记录的事实

我只想在文本/ CSV文件或数据库表中获取表2

任何人都可以提出任何建议,一件软件或我尚未考虑过的东西

1 个答案:

答案 0 :(得分:3)

这是一个Python脚本,可以满足您的要求

def merge_rows_by_id(path):
    rows = dict()
    with open(path) as in_file:
        header = in_file.readline().rstrip()
        for line in in_file:
            fields = line.split()
            id, attributes = fields[0], fields[1:]
            if id not in rows:
                rows[id] = attributes
            else:
                rows[id] = [max(x) for x in zip(rows[id], attributes)]

    print (header)
    for id in rows:
        print ('{},{}'.format(id, ','.join(rows[id])))

 merge_rows_by_id('my-data.txt')

这是为了清晰起见而不是最高效率,尽管它非常有效。但是,这仍然会为您留下5000个属性的行,只有更少的属性。

我已经看到这种数据“结构”在生物信息学中经常使用,其中研究人员只是说“把我们所知道的一切”放在一行上,然后一套“一切”加倍,并重新加倍,我必须教他们data normalization来使RDBM处理他们得到的东西。通常,attr_1…n来自一次试验而attr_n+1…m来自第二次试验,并且因此,可以对数据进行合理的规范化。