Ruby CSVの書き込みと読み込み
Tips
CSVの読み書き
require 'csv' # 文字列への書き込み csv_string = CSV.generate do |csv| csv << [1,'Alice',18] csv << [2,'BoB',21] csv << [3,nil,nil] csv << [4,"",""] end # 文字列からの読み込み CSV.parse(csv_string) do |row| p row end puts "*" * 30 # ファイルへの書き込み arr_of_arrs = [[1,'Alice',18],[2,'BoB',21],[3,nil,nil],[4,"",""],[5,'Catherine',34],[6,'Diana',46]] CSV.open('output.csv','w') do |csv| arr_of_arrs.each do |arr| csv << arr end end # ファイルからの読み込み CSV.foreach('output.csv') do |row| p row end
NASAのデータを取り込んでみる
リファレンスマニュアルを読んで試してなんとなく動かせたので、先日知ったNASAのオープンデータをCSVで落として無駄に読み込んでみたくなりました。
いろんなデータがあって、どれが何だかよくわからなかったので最も人気がありそうな隕石落下データを使ってみることに。
https://data.nasa.gov/Space-Science/Meteorite-Landings/gh4g-9sfh
Excelで開いてみるとこんな感じ。名前、質量、落ちた年、緯度、経度。あとはなんだろ、よくわかりませんが隕石のデータですね。4万5千件ほどあります。
Meteorite Landingsとかクソかっこいいデータだけど、CSVでExportしてきて読み込むだけで申し訳ない。
やっぱり生のデータを使うとうまく行かないことが出てきますね。エンコーディングでハマり、nilのデータでハマり、ヘッダーの扱い方、関係ないけど文字列のフォーマット指定での日時変換などだいぶ寄り道しちゃいました。
require 'csv' require 'time' # 一度に読み込み csv_data = CSV.read('Meteorite_Landings.csv',headers: true,encoding: 'UTF-8') target = Time.parse("1925/01/01") puts csv_data.select{|row| unless row["year"].nil? Time.strptime(row["year"],"%m/%d/%Y") == target end }
実行してみると1925年の隕石情報が出ました!
NASAすごいです。
Visual Studio 2017 RC をインストールする
概要
先日発表があった「Visual Studio 2017 Release Candidate」を早速インストールします!
ダウンロードは以下から。
https://www.microsoft.com/ja-jp/dev/products/visual-studio-2017.aspx
創造は想像のはるか先へ
なんかカッコイイですね。お先失礼します。
つーことで、vs_Enterprise.exeをダウンロードします。これがインストーラーですね。
インストール
インストーラーを起動しましょう。
続行を押下。
数分待ちます。体感で5分くらい待ちました(適当)。
ワークロードから必要なものだけを選んでいくわけですね。
なんかいろいろあるな...。
とりあえずWeb開発だけチェックをいれてインストール。
1 時間 50 分で、何をしよう?
インストールの所要時間を、
これまでの 2 時間からわずか 10 分まで短縮しています。
なにそれ、すごい!
インストールに二時間かかりました。きっとうちのパソコンのせい。
リリースノートはこちら(まだ読んでない)。
https://www.visualstudio.com/ja-jp/news/releasenotes/vs2017-relnotes
起動
アカウントのサインイン画面で情報入力したら動かなくなったけど、二段階認証のせい?
わかんないので再起動して、サインインはスルーしました。
配色テーマは青を選んだはずだけど、VS Community 2015の設定が効いたのかも?濃色になりました。
早速新規プロジェクトを作成してみます。あれ、.NET Coreがないぞ。
.NET Coreはワークロードの「.NET Core および Docker(プレビュー)」を選択しておかないと入らないぽい。
https://www.microsoft.com/net/core#windowsvs2017
ということで、再度インストーラーを立ち上げ(また体感で5分くらい待つことに)「.NET Core および Docker(プレビュー)」にチェックを入れて変更。
これだけならすぐ終わりました。10分くらい。
でました!.NET Core。クロスプラットフォーム。Write once, run anywhere!*1
せっかくなのでASP.NET Core Webアプリケーションを作成してみます。
動きました!
*1:Javaのプログラムがオペレーティングシステム (OS) などのプラットフォームに依存しないという意味の、サン・マイクロシステムズのJavaのスローガンである。 Write once, run anywhere - Wikipedia
Ruby 日付のフォーマット
Tips
24時間制
個人的にこの表記が一番使います。むしろ、これだけ覚えておけばいい!でも忘れる。。
# 24時間制 Time.now.strftime("%Y-%m-%d %H:%M:%S") #=> "2016-11-16 07:09:22"
その他
いろいろありますね。たまーに使うくらい?お、今日は今年321日目なんですね!
# AM/PM + 12時間制 Time.now.strftime("%Y-%m-%d %p %I:%M:%S") #=> "2016-11-16 AM 07:09:35" # 日付 Time.now.strftime("%x") #=> "11/16/16" # 日時 Time.now.strftime("%c") #=> "Wed Nov 16 07:17:28 2016" # タイムゾーン Time.now.strftime("%Z") #=> "JST" # 年中の通算日数 Time.now.strftime("%j") #=> "321" # 曜日の名称 Time.now.strftime("%A") #=> "Wednesday" # 曜日の名称(省略) Time.now.strftime("%a") #=> "Wed" # 月の名称 Time.now.strftime("%B") #=> "November" # 月の名称(省略) Time.now.strftime("%b") #=> "Nov"
日本語の曜日
これはひと手間かける必要があるみたい。Rubyらしくないコードかも。
def wday_jp(n) %w(日 月 火 水 木 金 土)[n] end Time.now.strftime("%Y-%m-%d %p %I:%M:%S #{wday_jp(Time.now.wday)}") #=> "2016-11-16 AM 07:33:46 水"
参考
Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
- 作者: 島田浩二,設樂洋爾,村田賢太,前田智樹,谷口文威
- 出版社/メーカー: 翔泳社
- 発売日: 2009/07/25
- メディア: 単行本(ソフトカバー)
- 購入: 16人 クリック: 349回
- この商品を含むブログ (77件) を見る