Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@yugo-yamamoto

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

More than 3 years have passed since last update.

※ 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

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?