我有一个包含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
任何人都可以提出任何建议,一件软件或我尚未考虑过的东西
答案 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
来自第二次试验,并且因此,可以对数据进行合理的规范化。