034-036 パース(parse)(S3)
パースとは
- parseとは、プログラミング言語であつかえる形にデータを変換するという意味がある英単語です。
parse_number(c("a",1,2,3)) parse_character(c("a","b","c",1,2,3)) #ベクトルは基本的には同じ型である必要がありました c(1,2,3,"a")
- parse_**は、読み込んだ列に対して、型変換を行う関数です。
- 通常、read_***関数が自動で処理をしてくれるので、意識しなくてもよいですが、自動処理に頼り切っていると落とし穴があります。
パースの落とし穴
#読み込んだデータは適当な変数名(DT)に放り込んでおきます。 DT <- read_csv("import_practice2.txt") #色々と警告のメッセージが出ていますが、ここでは無視。 DT #実行すると最初の10行をみることができます。 #read_delim(read_csv, read_tsv, read_csv2 等)で読み込むと、tibbleというデータフレームが強化された形となるのですが、最初は「ちょっと便利なデータフレーム」くらいの認識で問題ありません。 #col1~col4まで表示されていて<int> <chr>というのはその列がどんな型かが表示されています。 #DTというところをクリックしてみてください一番下までスクロールすると、NAという文字が出てきています。 #実は、自動パースは、デフォルトでは最初の1000行を見て判断するという形になっていますが、このファイルは、 #意図的に1010行目から3列目に文字列を、4列目に数字を入れてあります。 parse_number(c(1,2,3,4,5,"a","b","c")) #色々と警告が出ていますが、無視して、結果は、 #>[1] 1 2 3 4 5 NA NA NA #となっています。これは、数字に変換しようとしたら6-8番目のデータが数字に変換できなかったため、 #NA:Not Available; 欠損値として処理されたというものです。 #これと同様の事象が、DTの3列目でも発生しています。このような事象を回避するためには、いくつかやり方があります。
パース時のエラー回避方法1:判断に利用する行を増やす
- guess_maxというオプションで行を増やすことができます。
#デフォルト DT <- read_csv("import_practice2.txt", guess_max = c(1000)) tail(DT) #guess_maxを増やす DT <- read_csv("import_practice2.txt", guess_max = c(99999)) tail(DT) #col3がきちんと<chr>となり、NAではなくなっています。
- この方法のデメリット:
- 事前に行数がわからない場合は値を何にすればよいかわからない。
- データによっては処理が重くなることも
パース時のエラー回避方法2:列毎に型を指定してあげる
DT <- read_csv("import_practice2.txt", col_types="iccc") tail(DT)
- デメリット:
- 事前にどの列にどんなデータが入っているか知っている必要あり.
- 事故的に文字列が数値と思っている列に紛れ込んでいるケースではNAとなってしまう。
パース時のエラー回避方法3:全部文字列としてとりあえず読み込む
DT <- read_csv("import_practice2.txt",col_types=cols(.default="c")) tail(DT)
- デメリット:
- 後々自分で型変換を必要に応じて行う必要がある
個人的には、その3の方法を多用して読み込みを行っています。列の型変換、Section5のデータ加工を利用すれば、非常に簡単にできるので、インポート時点でデータが欠損することを避けることを重視しています。
以上でインポートセクションの説明終了です。次は、グラフの描画について説明します。