0

我有一个包含 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 DB 并获取每个属性的最大值(每个 ID 只能为 1 或零),但表不能容纳 5,000 + 属性。

我已经尝试在 excel 中使用数据透视函数并获取每个属性的最大值,但是数据透视可以处理的列数远远少于我目前正在查看的 5,000。

我曾尝试将其导入 Tableua,但这也受到它无法处理这么多记录的影响

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

任何人都可以提出任何建议,一个软件或我还没有考虑过的东西

4

1 回答 1

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 个属性的行,只是更少。

我已经看到这种数据“结构”在生物信息学中经常使用,研究人员只是说“把我们所知道的关于“a”的所有东西放在一行,然后“所有东西”的集合加倍,然后再加倍,等等。我'必须教他们有关数据规范化的知识,以使 RDBM 处理他们所拥有的。通常,attr_1…n来自一次试验和attr_n+1…m第二次试验,依此类推,这样可以对数据进行合理的规范化。

于 2013-05-19T12:42:47.190 回答