急に畑のナスにアブラムシが湧いた!農薬は何を使えばいいんだ!!!
そんなときもRがあれば大丈夫。
とりあえず今回はデータの支度を。
お約束
実際の登録内容が絶対です。
!!農薬は有効期限内のものをラベルの記載内容を守って使用しましょう!!
※なお、Windows向けですがACFinderという素晴らしいソフトがあるのでRなど使用せずそちらを利用するのがおすすめです(農薬登録情報検索クライアント ACFinder)
使用したパッケージ
library(magrittr)
library(dplyr)
library(data.table)
library(dtplyr)
library(RUnicode)
library(readr)
library(stringr) # 次回つかいます
RUnicode
の使用にあたってはICUライブラリのインストールも必要なので別途用意しておく。(cf. abicky/RUnicode: R package to proceed Unicode characters)
ちなみにRUnicode
のインストールの時、
エラー: Could not find build tools necessary to build RUnicode
と怒られてうまく行かなかったが、
options(buildtools.check = function(action) TRUE)
とやったらうまく行った。理由は良く理解していない(cf. xcode - Error: "Could not find build tools necessary to build stringi" when trying devtools::install_github() - Stack Overflow)。
ファイルの入手
ダウンロード
農薬の登録情報はFAMICで公開されているものを使用するので、予め注意事項を確認しておきましょう(要確認: 農薬登録情報ダウンロードの説明 - 独立行政法人農林水産消費安全技術センター(FAMIC))。
事前にchem_data
ディレクトリを作業ディレクトリ内に準備しておく。
ダウンロードはdownload.file()
にURLと保存先を教えればやってくれる。
## 登録情報ダウンロード
# set url
kihon_url <- "http://www.acis.famic.go.jp/ddata/datacsv/H2904120.zip"
tekiyo1_url <- "http://www.acis.famic.go.jp/ddata/datacsv/H2904121.zip"
tekiyo2_url <- "http://www.acis.famic.go.jp/ddata/datacsv/H2904122.zip"
# download file
download.file(kihon_url, "chem_data/kihon.zip")
download.file(tekiyo1_url, "chem_data/tekiyo1.zip")
download.file(tekiyo2_url, "chem_data/tekiyo2.zip")
rm(kihon_url, tekiyo1_url, tekiyo2_url)
ダウンロード元のURLはおそらく登録情報が更新されると変更となるので注意。
解凍
解凍はunzip()
。ファイルへのパスが返ってくるので、これを受け取ればついでにリネームができる。農薬登録情報のファイル名は更新ごとに変更されている様子なので、適当にリネームしておいたほうが良いだろう。リネームはfile.rename()
。
tmp <- unzip("chem_data/kihon.zip", exdir = "chem_data")
file.rename(tmp, "chem_data/kihon.csv")
tmp <- unzip("chem_data/tekiyo1.zip", exdir = "chem_data")
file.rename(tmp, "chem_data/tekiyo1.csv")
tmp <- unzip("chem_data/tekiyo2.zip", exdir = "chem_data")
file.rename(tmp, "chem_data/tekiyo2.csv")
rm(tmp)
データの読み込みと前処理
データ読み込み
Shift_JISなのでencodingの指定をしないと文字化けする場合がある。
read_csv
が早いよみたいな話を聞いてやろうとしたら若干ハマった。read_csv
でencodingを指定するにはlocale=locale(encoding="CP932")
のようにやるそうだ。
あと列名に丸数字が入ってて後々面倒なことになりそうなので早めに潰しておいたほうがいい。
kihon <- read_csv("chem_data/kihon.csv", locale=locale(encoding="CP932"))
tekiyo1 <- read_csv("chem_data/tekiyo1.csv", locale=locale(encoding="CP932"))
tekiyo2 <- read_csv("chem_data/tekiyo2.csv", locale=locale(encoding="CP932"))
tekiyo <- rbind(tekiyo1, tekiyo2)
rm(tekiyo1, tekiyo2)
names(tekiyo)[21:25] <- paste0("有効成分", 1:5, "を含む農薬含む農薬の総使用回数")
Unicode正規化
半角カナとか㍑とか入ってて後々アレっぽいのでこれも潰しておく。
RUnicode
べんり。%<>%
べんり。
kihon %<>% mutate_if(is.character, unormalize)
tekiyo %<>% mutate_if(is.character, unormalize)
ついでに登録基本部を適用表にくっつけておく。left_join
はby=
を省略すると適当に空気読んでアレしてくれてよい。
chemicals <- left_join(tekiyo, kihon)
準備は整った
これで支度は整いましたが、たいへんなのはこれからです。