8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

国民の祝日のCSVをいい感じに変換するRubyスクリプト

Last updated at Posted at 2017-02-26

※ 2017/03/01時点で、元のCSVが修正されて正規化しちゃいましたので、このスクリプトは不要になりました。

こちら
http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
で公開されている、CSVがなかなか扱いづらいということで、ちょっとしたデータベース設計の演習問題として扱ってみます。

まず、内閣府からは以下のようなCSVが与えられています。

SS 2017-02-26 16.16.31.png

扱いづらいとろを上げてみます。

  • 平成と西暦の併記がパースしづらい
  • 名称、月日などの同じ意味の列が横に並んでる(縦に並ぶのが正解)
  • SJISなので、ターミナルで見づらい

ということで、加工してみたサンプルがこちら。

require "open-uri"

url = "http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"

puts "\uFEFF名称,月日"
open(url).each.with_index{|line,idx|
  next if idx == 0 or idx == 1
  line.chomp!
  line.encode!("utf-8","sjis")
  cols = line.split(",")
  while true
    out = cols.shift(2)
    break if out.first.to_s == ""
    puts out.join(",")
  end
}

解説

  • open-url でファイルのようにWeb上のコンテンツを開く
  • ファイル先頭にBOMをつけて、UTF8であってもエクセルでダブルクリックで文字化けしないように(もちろんUTF8なのでMacやLinuxでも扱いやすいように)
  • SJISからUTF8に変換
  • 1行目と2行目はスキップ
  • カンマでsplitすると、6カラム取得されるので、2カラムずつ出力
  • 空行がでてきたらそこで終了
  • データの並び順や年のグルーピング情報はCSVには保持しない

実行方法

$ ruby shukujitu.rb  >  out.csv

SS 2017-02-26 16.23.49.png

8
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?