CSV ファイルをRubyで処理
- 歩数計データを、ウェルネスリンク機器専用 測定記録取り込みソフトウェアからCSVにエクスポート
- エデイタで読み込み漢字コードをutf8で保存
- 歩行距離などを集計し、平均値を読み込む
- ヘッダーは、行のカラム配列のハッシュキーとなり、ヘッダー値でカラム値を参照できる
歩行データヘッダー付きuft8 CSVデータ
require 'csv' puts "$0:#{$0}" ARGV.each_with_index do |arg, i| puts "ARGV[#{i}]:#{arg}" csvfile = ARGV[i] csv_data = CSV.read(csvfile, headers: true) sum = 0.0 cnt = 0 max = 0.0 min = 999.999 fromdate = nil todate = nil csv_data.each do |data| if fromdate == nil fromdate = data["日付"] end todate = data["日付"] intro_msg = "#{data["日付"]}の#{data["歩数(歩)"]}歩数(歩)、#{data["歩行距離(km)"]}歩行距離(km)です。\n" if data["歩数(歩)"] == nil puts 'no data ' + intro_msg else sum = sum + data["歩行距離(km)"].to_f cnt = cnt + 1 if max < data["歩行距離(km)"].to_f max = data["歩行距離(km)"].to_f end if min > data["歩行距離(km)"].to_f && data["歩行距離(km)"].to_f > 0.0 min = data["歩行距離(km)"].to_f end end end puts 'start:' + fromdate + ' to:' + todate + "\n" total_msg = "合計件数:#{cnt} 平均歩行距離(km):#{(sum/cnt).round(3)} MAX歩行距離(km):#{max} MIN歩行距離(km):#{min}\n" puts total_msg end
実行結果
E:\ruby>ruby csv.rb HJ-205IT_1_1_170901-200331utf8.csv
$0:csv.rb
ARGV[0]:HJ-205IT_1_1_170901-200331utf8.csv
no data 2017/12/02の歩数(歩)、歩行距離(km)です。
no data 2017/12/03の歩数(歩)、歩行距離(km)です。
no data 2017/12/04の歩数(歩)、歩行距離(km)です。
no data 2018/10/20の歩数(歩)、歩行距離(km)です。
no data 2018/10/21の歩数(歩)、歩行距離(km)です。
no data 2018/10/23の歩数(歩)、歩行距離(km)です。
no data 2018/10/24の歩数(歩)、歩行距離(km)です。
no data 2018/10/25の歩数(歩)、歩行距離(km)です。
no data 2018/10/26の歩数(歩)、歩行距離(km)です。
no data 2018/12/31の歩数(歩)、歩行距離(km)です。
no data 2019/01/01の歩数(歩)、歩行距離(km)です。
no data 2019/03/02の歩数(歩)、歩行距離(km)です。
start:2017/09/01 to:2020/03/31
合計件数:931 平均歩行距離(km):4.056 MAX歩行距離(km):9.9 MIN歩行距離(km):0.2