summaryrefslogtreecommitdiff
path: root/tube_data_parser.rb
blob: 7863df37ebd701a54220d97b9492a57517658f6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
require 'yaml'
require 'json'
csv_data = []
File.open('tube_data_2006-07-26.csv','r').readlines[1..-1].each {|line| csv_data << line.split(',')}
tube_data_hash = Hash.new {|key,value| key[value] = {}}
csv_data.each do |line,direction,from_station,to_station,distance,unimpeded_time,peak_time,off_peak_time|
  tube_data_hash["#{from_station.gsub(/ \(.*\)/,'')}_#{line}"]["#{to_station.gsub(/ \(.*\)/,'')}_#{line}"] = {'line' => line, 'direction' => direction, 'distance' => distance.to_f, 'unimpeded_time' => unimpeded_time.to_f, 'peak_time' => peak_time.to_f, 'off_peak_time' => off_peak_time.to_f}
end
tube_data_hash.keys.each do |from_station|
  stations = tube_data_hash.find_all {|f_stat,t_stats| f_stat.split('_')[0] == from_station.split('_')[0] }
  if stations.size == 1
    tube_data_hash[from_station.gsub(/_.*/,'')] = tube_data_hash.delete(from_station)
    to_stations = tube_data_hash[from_station.gsub(/_.*/,'')]
    to_stations.keys.each {|station| to_stations[station.gsub(/_.*/,'')] = to_stations.delete(station)}
  else
    stations.each do |f_stat,t_stats|
      tube_data_hash[from_station].merge! t_stats
    end
  end
end
change_stations = tube_data_hash.find_all {|f_stat,t_stats| f_stat.match /_/ }.map {|f_stat,t_stats| f_stat}
change_stations.each do |from_station|
  to_stations = tube_data_hash[from_station]
  to_stations.keys.each {|station| to_stations[station.gsub(/_.*/,'')] = to_stations.delete(station) unless change_stations.include?(station)}
  tube_data_hash[from_station][from_station.gsub(/_.*/,'')] = {'line' => from_station.split('_')[1], 'direction' => nil, 'distance' => 0.01, 'unimpeded_time' => 0.01, 'peak_time' => 0.01, 'off_peak_time' => 0.01}
  tube_data_hash[from_station].each do |to_station,data|
    tube_data_hash[from_station.gsub(/_.*/,'')][from_station] = {'line' => from_station.split('_')[1], 'direction' => nil, 'distance' => 0.01, 'unimpeded_time' => 0.01, 'peak_time' => 0.01, 'off_peak_time' => 0.01}
  end
end
File.new('graph.yaml', 'w') << tube_data_hash.to_yaml
File.new('graph.json', 'w') << tube_data_hash.to_json