事象
DBからデータをCSVに変換したものをもらい、分析をしようとRにてそのまま取り込もうとしたら以下のエラーになった。
- 「invalid input found on input connection」の警告
- 「列名よりも列数のほうが多いです」のエラー
- 取り込めたと思ったら日時のデータがおかしくなっていた
前提データ
説明のため簡単なデータとする。
ID,name,Date,memo,etc
1,田中太郎,2019-1-1 00:00:00.000,hogehogehoge,特になし
2,田中次郎,2019-1-1 00:00:00.000,めもめもめも。,etc
3,田中サブロー,2019-1-1 00:00:00.000,備考1,000,000円使った,その他
4,田中 和江,2019-1-1 00:00:00.000,,ect
5,田中:花子,2019-1-1 00:00:00.000,めもも、もももめものうち,めも
※UTF-8のBOM付
また、データを変換する際にはExcel2016を使用
1.invalid input found on input connection
setwd()でデータのあるディレクトリに移動し、取り込もうと以下のコードを実行したら「invalid input found on input connection」と警告が出てうまく取り込めず
df<-read.csv("sample.csv", fileEncoding = "UTF-8")
調べてみると以下の記事にたどり着いた
https://qiita.com/gigamori/items/0152639dc0a68a400525
BOM付の場合は以下のようにしなければならないらしい。
df<-read.csv("sample.csv", fileEncoding = "UTF-8-BOM")
2.「列名よりも列数のほうが多いです」のエラー
BOM付の設定をして警告が消えてうまくいったと思ったら、「列名よりも列数のほうが多いです」のエラーが出た。
実際に使ったデータは、データが多かったので表面的なところしか見ていなかったので後で気づかなかったが、備考やメモのようなカラムのデータにカンマがあるデータがあって邪魔をしていたみたいだったのでエクセルにて一気に変換をかけ保存した。
その後、read.csvをかけたらデータ取り込みに成功!
前提のsample.csvでは
3,田中サブロー,2019-1-1 00:00:00.000,備考1,000,000円使った,その他
の1,000,000円のところ。これを1000000円とした。
よくわからないのだが実際のデータはエクセルで見たときは列のずれもなくわかりにくかった。
当たり前だが、一応カンマ以外にもスペースやコロンなどを疑ったが、いろいろ試した結果カンマによる影響のみ。
3.取り込めたと思ったら日時のデータがおかしくなっていた
取り込めたと思ったら、日時のデータがyyyy-mm-ddの部分が消えて「00:00.0」になっていた...
エクセルにてそのまま変換するとダメらしい。
いろいろ試した結果、カンマなどの処理をしてエクセルに保存する前に、
- 日時データの列を全体を選択
- 上のホームタブにて書式を短い日付に変更
- Ctrl+1で書式の設定を出して、日付の「yyyy-mm-dd」を選択
をして保存。
そのデータを取り込んでみたらやっとうまくいった。
感想
- 初めてデータ分析というものを仕事でしたが、取り込むだけで大変だとは思わなかった
- できることなら変換などに、エクセルは使わないようにしたほうがいいと思った
- 諸事情あり今回は自分でCSVをいじったが、本来ならデータを出力する際に必要に応じてエンコードすべきだと思った。
- Qiita初投稿。記事を書くことがこんなに大変だとは…いつも参考にしてもらっている記事を書いている人に感謝。