【发布时间】:2015-10-11 19:10:20
【问题描述】:
第一列有一些用户,第二列有他们的朋友。有些用户出现在两列中,有些用户只出现在一个列中。
我想对整个数据集进行哈希处理以将所有条目转换为数字以便于处理。我的代码是这样的:
require 'csv'
udids = {}
unique_count = 1
output_csv = CSV.open("Processed.csv", "w")
CSV.foreach("Original.csv").with_index do |row, i|
val = row[0]
if udids[val.to_sym]
row[0] = udids[val.to_sym]
else
udids[val.to_sym] = unique_count
row[0] = unique_count
unique_count += 1
end
val = row[1]
if udids[val.to_sym]
row[1] = udids[val.to_sym]
else
udids[val.to_sym] = unique_count
row[1] = unique_count
unique_count += 1
end
output_csv << row
end
output_csv.close
但这产生了我认为可能不是正确的转换。这是一个示例输出:
1 2
1 3
1 4
1 5
1 51
1 52
1 53
54 55
54 56
54 57
54 58
54 59
54 90
54 91
54 92
93 94
93 95
93 96
...
在这里,2 列不共享任何单个值,而这种情况极不可能发生。另外,即使这是正确的,我也希望它能够将其作为相应的示例输出:
1 2
1 3
1 4
1 5
1 51
1 52
1 53
2 55
2 56
2 57
2 58
2 59
2 90
2 91
2 92
3 94
3 95
3 96
...
那么,谁能帮帮我?谢谢。
【问题讨论】:
-
您能否将您提供给此脚本的输入发布,以便那些试图帮助您的人重现您的结果?我刚刚在一个小数据集上测试了你的程序,发现它没有问题。
-
@DavidGrayson 它是一个 3 MB 的文件。我不确定如何在这里分享。有什么建议吗?
-
您应该将其缩减为能够说明问题的最小文件,并将名称更改为假名。例如,文件的前 200 行可能足以显示问题,之后您可以删除所有内容。如果问题仍然存在,请删除前 20 行之后的所有内容。继续。