見出し画像

Rubyを使ったcsvデータの簡単な抽出

大容量のcsvデータから必要な部分だけ取り出すRubyのプログラムを作ってみました。エクセルでは扱いにくい大容量のcsvデータの中から必要な部分だけを取り出すものです。

サンプルとして交通事故統計情報のデータを使ってみました。下記の警察庁のHPから2019年分のデータをダウンロードできます。

https://www.npa.go.jp/publications/statistics/koutsuu/opendata/index_opendata.html

対象としたのは本票のデータでデータサイズは68MBあります。最近のエクセルを使えば読めないことはありませんが、それでもサイズが大きく扱いにくいです。そこでRubyを使って使用したい条件に該当するデータだけを別のファイルに書き出します。

サンプル例では東京都の死亡事故のデータを抽出してます。

wfile = File.open("pic.csv",'w')	# 出力用ファイル名の指定
i = 0
File.foreach("honhyo_2019.csv", encoding: 'cp932'){|line| # 入力データファイルの指定 データの文字コードはshift-jisなのでエンコードを指定
 strAry = line.split(",")
 if i == 0 then wfile.puts line end
 if (strAry[1].to_i == 30) and (strAry[5].to_i > 0) then  wfile.puts line end 
 # 都道府県コードで東京都を指定、死者数が1名以上の事故を抽出
 i = i + 1
}

菅政権はデジタル化を推進いることもあり、特にここ最近、行政のデータがたくさんオープンデータになってきてます。

本格的な分析をするにはデータベースツールを使用した方がいいと思いますが、なかなか敷居が高いので、必要なデータを切り出せたら便利かと思います。

この記事が気に入ったらサポートをしてみませんか?