如何过滤Excel或CSV中的CSV文件中的数据?

我有一个巨大的CSV文件(超过57,000行和50列),我需要分析。

编辑:嗨,大家好,感谢您的答复和意见,但我仍然很困惑如何在Ruby中做到这一点,我不知道如何使用MySQL。 我会尽量更具体:

CSV文件:

关于2015年风暴数据详情

2000年暴风雨数据详情

问题:在问题开始之前,对于所有答案,排除具有以字母A,B或C开头的县/教区,区域或海洋名称的所有行。

  1. 在2015年,华盛顿州的风暴事件数量最多的月份。 那个月有多less天无风暴天气?
  2. 美国东部时间晚上8点到东部时间上午8点之间,有多less次风暴影响树木?
  3. 在哪一年(2000年或2015年),风暴在13个原始殖民地的边界内是否有较高的货币影响?

问题:

1)我可以在Excel中使用filter来确定华盛顿七月份发生的最多“雷暴风”事件(6个条目),并且有27天无风暴天气。 但是,当我试图检查Spotfire中的工作时,我得到了完全不同的结果。 (5月份7份,5月份为28天,5月份只发现2次雷暴风暴事件)你知道是什么原因导致了这种差异吗?

2)有两列可能会提到对树木的损害:Event_Narrative和Episode_Narrative。 是否可以同时search“树”和过滤电子表格只有这些结果? 在Excel中,多列过滤显然是不可能的。 我还需要在结果中find一种省略“街道”一词的方法(因为它包含“树”一词)。

我提出的时间范围的方法是过滤只有EST和AST结果,然后过滤Begin_Time到2000到2359和0到759,并重复这些范围来过滤End_Time。 这似乎工作。

3)我可以过滤到特拉华州,宾夕法尼亚州,新泽西州,乔治亚州,康涅狄格州,马萨诸塞州,马里兰州,南卡罗来纳州,新罕布什尔州,弗吉尼亚州,纽约州,北卡罗来纳州和罗得岛州。 这似乎是一个简单的任务,将列Y和Z(Damage_Property,Damage_Crops)中的所有值相加,并在两年之间进行比较,但值是写在“32.79K”的forms,我不知道如何进行添加方程以这种格式工作或将值转换成整数。

另外,问题是要求殖民地的原始领土,这与现在这些国家所占领的领土是不一样的。 你知道解决这个问题的方法吗? 即使我有时间去查看每个上市的城市,似乎也没有在线的13个殖民地的城市数据库,即使有,城市的名称也可能不同。


我正在学习Ruby,有人build议我尝试使用Ruby CSV库将数据放入数组中。 我看了一些教程,介绍了如何做到这一点,但我仍然不明白如何将数据过滤到我所需要的。

谁能帮忙?

谢谢!

我下载了数据,所以我可以玩它。 你可以在Ruby中很容易地获得logging数。 我刚刚在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 

我只是使用数组索引。 你可以把东西拉到一起,使哈希更好的可读性。

想要发表这个评论,但我没有足够的代表。 无论如何:

我已经在一些nodejs包的帮助下将CSV / xls文件转换为JSON,并将它们上传到我的couchbase数据库。 在couchbase中,我可以使用N1ql(实际上只是SQL)来查询,这将允许您实现过滤多个标准的目标。 就像spickermann所说,一个数据库将解决你的问题。

编辑:My-Sql也支持将CSV文件导入My-SQL表。 将比CSV到JSON到Couchbase更容易

Csv-to-json https://github.com/cparker15/csv-to-json/blob/master/README.md