ruby-programming-experience-event-tutorial

Rubyプログラミング体験会用チュートリアル

This project is maintained by Hamada-rb

浜田市がCSVデータを加工してみよう!!

概要

浜田市が出しているCSVデータを加工できるプログラムを作ります。

csv image

このチュートリアルを終わった際に出来上がるソースコードはこちらになります。

require 'rss'

rss_feeds = RSS::Parser.parse "http://www.city.hamada.shimane.jp/www/rss/news.rdf", false

search_word = ARGV[0].chomp

rss_feeds.items.each do |feed|
  if feed.title =~ /#{search_word}/
    puts feed.title
    puts feed.link
  end
end

チュートリアル

まずは、浜田市の出しているCSVデータをダウンロードします。 データは島根県オープンデータカタログサイトが出している【浜田市】指定緊急避難場所一覧を使います。

まずは、こちらから使用するCSVデータをダウンロードします。

次に、csv.rbという名前のRubyのソースコードを作ります。 csv.rbには以下のコードを書きます。

require 'csv'

CSV.foreach("hamada.csv", headers: true) do |row|
  puts row
end

次に、CSVをcsv.rbと同じ場所に配置します。

ruby csv.rbを実行すると、ターミナルにCSVのデータが表示されると思います。

RubyではCSVを扱うためのライブラリがあり、それを使うことでCSVのデータを表示させることができています。

ただ、現在のコードだと元々のデータをそのまま全て表示しています。 そのためかなり読みにくいです。

そこで必要な項目だけを表示させるようにコードを修正していきます。

require 'csv'

CSV.foreach("hamada.csv", headers: true) do |row|
-  puts row
+  puts row["名称"]
end

コードを修正後、ruby csv.rbとターミナルで実行するとCSVデータの名称の項目だけが表示されていると思います。

このようにCSVの指定の項目だけを取ってくることもできます。

最後に、必要な項目だけを取ってくるように修正してみます。

require 'csv'

+ csv = CSV.open("result.csv", "wb", headers: true)
+ 
+ csv << ["名称", "住所", "電話番号"]
+
CSV.foreach("hamada.csv", headers: true) do |row|
-  puts row["名称"]
+  csv << [row["名称"], row["住所"], row["電話番号"]]
end

CSV.openでは取ってきた各項目を保存するCSVデータを作成しています。 またcsv << ["名称", "住所", "電話番号"]ではCSVのヘッダー(CSVの一番上にある各項目名)を追加しています。

csv << [row["名称"], row["住所"], row["電話番号"]]では読み込んだCSVデータ(避難先の一覧データ)から名称や住所などの必要な情報だけを取ってきています。

コードを修正した後、ruby csv.rbを実行するとresult.csvというファイルが作成されていると思います。 そのCSVデータの中に、名称や住所などが保存されていれば完成です!

課題

現在のプログラムは、名称や住所を保存しています。 それ以外の項目も保存できるようにしてみましょう。