2016-08-24 1 views
2

分析する必要がある膨大なCSVファイル(57,000行以上50個以上)があります。ExcelまたはRubyでCSVファイルのデータをフィルタリングするにはどうすればよいですか?

編集:皆さん、お返事とご意見ありがとうございますが、私はまだRubyでこれを行う方法について本当に混乱しており、MySQLの使い方は分かりません。私は具体的にしようとします:

CSVファイル:

CSV on Storm Data Details for 2015

CSV on Storm Data Details for 2000

質問: 郡を持っているすべての行を除外し、すべての答えのために、起動質問する前/ A、B、Cの文字で始まるParish、Zone、Marineの名前。

  1. 2015年の月ワシントン州は暴風事件の数が最も多かった。その月に何日間暴風雨が発生しましたか?
  2. 2000年に木々に影響を与えた嵐は、8PM ESTと8AM ESTの間に何回発生しましたか?
  3. どの年(2000年または2015年)に、13の元の植民地の境界内で暴風雨がより大きな金銭的影響を受けましたか?

問題は:

1)私はワシントンで最も「雷雨の風」のイベントが、7月(6エントリー)で起こっていることを決定するために、Excelでフィルタを使用することができたとあった27日の嵐の - 無料の天気。しかし、私がSpotfireで仕事をチェックしようとしたとき、私はまったく異なる結果を得ました。 (5月に7回、5月に28日間の暴風雨が発生しましたが、Excelでは5月に2回の雷雨イベントが検出されました)この不一致の原因は何ですか?

2)ツリーには、Event_NarrativeとEpisode_Narrativeの2つの列があります。両方の列で「ツリー」を検索し、スプレッドシートをそれらの結果のみにフィルタリングすることは可能でしょうか?複数列のフィルタリングはExcelでは不可能です。私は結果に「街路」という言葉を省略する方法も見つけ出す必要があります(「木」という言葉が含まれているため)。

私が時間範囲について考えたのは、ESTとASTの結果のみをフィルタリングし、Begin_Timeを2000〜2359と0〜759にフィルタリングし、それらの範囲をフィルタしてEnd_Timeをフィルタすることです。これは動作するようです。

3)デラウェア州、ペンシルバニア州、ニュージャージー州、ジョージア州、コネチカット州、マサチューセッツ州、メリーランド州、サウスカロライナ州、ニューハンプシャー州、ヴァージニア州、ニューヨーク州、ノースカロライナ州、ロードアイランド州に州をフィルタリングできました。列YとZ(Damage_Property、Damage_Crops)にすべての値を追加して2年間を比較するという単純な作業のようですが、値は "32.79K"の形式で書かれています。追加方法を理解できません数式はその形式で動作するか、値を整数に変換します。

また、問題は、植民地の元の領土を求めています。植民地の元の領土は現在の領土と同じではありません。あなたはこの問題を解決する方法を知っていますか?リストされた各都市を検索する時間があったとしても、オンラインの13の植民地には都市のデータベースが存在しないようであり、あったとしても都市名が異なる可能性があります。


私はRubyを学んでおり、Ruby CSVライブラリを使ってデータを配列に入れようとしている人もいます。私はそれを行う方法を記述したチュートリアルをいくつか見てきましたが、必要なものだけにデータをどのようにフィルタリングするのかまだ分かりません。

誰でも手助けできますか?

ありがとうございました!

+1

データをデータベースにロードすることを検討しましたか? SQLのような感じは、Rubyと大きな配列よりも良い選択かもしれません。 – spickermann

+0

私達にあなたの試みを教えてください。 – pjs

+0

Excelで1つのものだけをフィルタリングできますか?限られたバージョンのExcelをお持ちですか? – Andreas

答えて

0

これをコメントとして投稿したいと思っていましたが、十分な担当者がいません。とにかく:

私はいくつかのnodejsパッケージの助けを借りて過去にCSV/xlsファイルをJSONに変換し、それらをcouchbaseデータベースにアップロードしました。 couchbase内では、複数の基準をフィルタリングする目標を達成するためのN1ql(実際はSQL)を使用してクエリを実行できます。 spickermannが言ったように、データベースがあなたの問題を解決します。

編集: My-Sqlは、My-SQLテーブルへのCSVファイルのインポートもサポートしています。私はそれで遊ぶことができるように、私は、データをダウンロードし、JSON、CSV- https://github.com/cparker15/csv-to-json/blob/master/README.md

1

をCouchbaseのためにJSONにCSVよりも容易になります。あなたは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 

私はちょうど配列インデックスを使用しました。一緒に物事を解読し、読みやすくするためにハッシュを作ることができます。

関連する問題