我有一个巨大的CSV文件(超过57,000行和50列),我需要分析。
编辑:大家好,感谢您的回答和评论,但我仍然对如何在Ruby中执行此操作感到困惑,而且我不知道如何使用MySQL。我会尝试更具体:
CSV文件:
CSV on Storm Data Details for 2015
CSV on Storm Data Details for 2000
问题: 在问题开始之前,对于所有答案,排除所有具有以字母A,B或C开头的县/教区,区域或海洋名称的行。
问题:
1)我能够在Excel中使用过滤器来确定最多"雷暴风"华盛顿发生的事件发生在7月(6个条目),并且有27天的无风雨天气。但是,当我试图在Spotfire中检查我的工作时,我得到了完全不同的结果。 (5月有7个条目,5月有28天的无风雨天气.Excel只在5月发现了两次雷暴风事件。)你知道造成这种差异的原因是什么吗?
2)有两列可能会提到树的损坏:Event_Narrative和Episode_Narrative。是否可以在两个列中搜索" tree"并将电子表格过滤到只有那些结果? Excel中显然不可能进行多列过滤。我还需要找到一种方法来省略“#34; street"在结果中(因为它包含单词" tree")。
我提出的时间范围的方法是仅过滤EST和AST结果,然后将Begin_Time过滤到2000到2359和0到759并重复这些范围以过滤End_Time。这似乎有效。
3)我能够过滤州到特拉华州,宾夕法尼亚州,新泽西州,佐治亚州,康涅狄格州,马萨诸塞州,马里兰州,南卡罗来纳州,新罕布什尔州,弗吉尼亚州,纽约州,北卡罗来纳州和罗德岛州。在列Y和Z(Damage_Property,Damage_Crops)中添加所有值并在两年之间进行比较似乎是一项简单的任务,但这些值是以" 32.79K"我无法弄清楚如何使添加方程以该格式工作或将值转换为整数。
此外,问题是要求殖民地的原始领土,这与这些国家现在占领的领土不同。你知道解决这个问题的方法吗?即使我有时间查找列出的每个城市,似乎也没有在线的原始13个殖民地的城市数据库,即使有,也可能现在城市的名称不同。
我正在学习Ruby,有些人建议我尝试使用Ruby CSV库将数据放入数组中。我已经看了一些教程,这些教程描述了如何做到这一点,但我仍然不明白如何将数据过滤到我需要的内容。
有人可以帮忙吗?
谢谢!
答案 0 :(得分:1)
我下载了数据,所以我可以玩它。您可以在Ruby中轻松获得记录计数。我刚刚在irb中做到了:
require 'csv'
details = []
CSV.foreach("StormEvents_details-ftp_v1.0_d2015_c20160818.csv") do |row|
details << row
end
results = details.select do |field|
[field[-2], field[-3]].any? { |el| el[/\btree\b/i] } && field[8] == "CALIFORNIA"
end
results.count
=> 125
我刚刚使用了数组索引。您可以将所有内容压缩在一起并制作哈希值以提高可读性。
答案 1 :(得分:0)
想发布此评论,但我没有足够的代表。反正:
我在过去借助一些nodejs包将CSV / xls文件转换为JSON,并将它们上传到我的couchbase数据库。在couchbase中,我可以使用N1ql(实际上只是SQL)查询,这将允许您实现过滤多个标准的目标。像spickermann所说,数据库将解决您的问题。
编辑: My-Sql还支持将CSV文件导入My-SQL表。比CSV到JSON更容易到Couchbase
的CSV到JSON https://github.com/cparker15/csv-to-json/blob/master/README.md