2019年7月27日土曜日

(R言語)NHTSAから4行でテキストマイニング 用データをサンプリングする

「Watson Explorer(WEX)」に関するテキストマイニングのエントリーを書きたくなり、「NHTSA(※)」のローデータをダウンロードしたのですが・・・
※National Highway Traffic Safety Administration:自動車や運転者の安全を監視する米国運輸省の部局(コトバンク)


解凍すると1GB越え・・・。
「大規模データに潜む有用な声をクイックに発見する」のがWEXのウリだったりするので、このまま分析用サーバーにアップしちゃおうかな・・・。

・・・と、私の中の妖精が何度か囁いたのですが、本当にやっちゃうと怒られそうなので、扱いやすいファイルサイズになるよう、サンプリングしてみます。

実施環境については、以下の通りです。
・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Mojave ver10.14.5
・Rstudio ver1.2.1335(R version 3.6.0)

※本エントリーは、私、小田一弥が一個人として勉強を兼ねて記載したものです。私の勤務先である日本アイ・ビー・エム株式会社の見解・見識ではない、個人としての記載内容としてご覧ください。 

サンプリングの手順


1.Rstudioを端末にインストールする
このブログで何度かご紹介しているIBMのAI開発環境である「Watson studio」内にあるRstudioでも実行可能ですが、無料枠のCPU時間をデータ前処理で使うのも勿体ないので、ローカル端末にあるRstudioで実行します。
インストールプログラムが必要な方は、ここからダウンロードし、インストールしてください。

2.NHTSAからローデータをダウンロードする
下記URLからローデータ(FLAT_CMPL.csv)をダウンロードしてください。圧縮されてはいるものの、200MB以上あるので、通信環境によっては少々時間がかかります。

https://www-odi.nhtsa.dot.gov/downloads/


3.フィールド情報をダウンロードする
ローデータには、フィールド名が記載されていないため、ローデータと同じフォルダに「CMPL.txt」もダウンロードしておきます。
※この後、ソースコードで整形済みのフィールド一覧テキストを記載しますので、面倒でしたら無視してもOKです。


4.作業ディレクトリを変更する
「setwd("ディレクトリのパス")」をRstudioのコンソールに入力してもいいのですが、面倒なので、Rstudioのメニュー画面から「Session→Set Working Directory」を選び、ローデータが入っているディレクトリを指定します。


5.以下のコードを実行する。
「dplyrパッケージ」のロードを除くと、わずか4行のコードでサンプリングされたファイルが生成されます。
特に便利なのが、「dplyrパッケージ」の中にある「sample_frac()」関数です。
当該関数の引数にパーセンテージとなる引数を入れると、入力ファイル(この場合、master.df)を母数として、指定したパーセント分のレコードをサンプリングしてくれます。

# dplyrのロード。初めて利用する場合は、事前に当該パッケージをインストールしてください。
library(dplyr)

# 「sep="\t"」でTab区切りファイルを読み込み。
# 「FLAT_CMPL.txt」にはフィールド名が記載されていないので、最初のレコードをフィールド名として
# 読み込まないように「header = FALSE」を指定する。
# デフォルトのFactorデータで読み込むと重くなる。今回は、ローデータ抽出が目的のため、
# 「stringsAsFactors = FALSE」とする。
master.df <- read.csv("FLAT_CMPL.txt",sep="\t",header = FALSE,stringsAsFactors = FALSE)

# 下記にフィールド定義が記載されています
# https://www-odi.nhtsa.dot.gov/downloads/folders/Complaints/Import_Instructions.pdf
# 先ほど読み込んだデータフレームのフィールド名を上書き。
colnames(master.df) <- c("CMPLID","ODINO","MFR_NAME","MAKETXT","MODELTXT","YEARTXT","CRASH","FAILDATE","FIRE","INJURED","DEATHS","COMPDESC","CITY","STATE","VIN","DATEA","LDATE","MILES","OCCURENCES","CDESCR","CMPL_TYPE","POLICE_RPT_YN","PURCH_DT","ORIG_OWNER_YN","ANTI_BRAKES_YN","CRUISE_CONT_YN","NUM_CYLS","DRIVE_TRAIN","FUEL_SYS","FUEL_TYPE","TRANS_TYPE","VEH_SPEED","DOT","TIRE_SIZE","LOC_OF_TIRE","TIRE_FAIL_TYPE","ORIG_EQUIP_YN","MANUF_DT","SEAT_TYPE","RESTRAINT_TYPE","DEALER_NAME","DEALER_TEL","DEALER_CITY","DEALER_STATE","DEALER_ZIP","PROD_TYPE","REPAIRED_YN","MEDICAL_ATTN","VEHICLES_TOWED_YN")

# 取り込み直後は、782,115 records。
# 「Ctrl+Shift+M」でpipe演算子(`%>%`)を挿入
# マスターのデータフレーム(master.df)から3%を無作為抽出し、別のデータフレーム
# (sample_3_percent.df)に書き出す。今回は3%で指定するため、23,463 recordsとなる。
sample_3_percent.df <- master.df %>% sample_frac(0.03)

# CSVファイルとして書き出し
write.csv(sample_3_percent.df,"sample_3_percent.csv")

サンプリングされたファイルを見ると、32.1MBなのでExcelでも開けるサイズになりました。


次回は、このファイルを使って新しくなったWEXのご紹介をしたいと思います。

R関連エントリー


R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。http://sapporomkt.blogspot.jp/2017/08/rstarwarsdplyrggplot2.html 

RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法 
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。
 
http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ) 
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。 
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。 
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

0 件のコメント:

コメントを投稿