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
}
菅政権はデジタル化を推進いることもあり、特にここ最近、行政のデータがたくさんオープンデータになってきてます。
本格的な分析をするにはデータベースツールを使用した方がいいと思いますが、なかなか敷居が高いので、必要なデータを切り出せたら便利かと思います。