読者です 読者をやめる 読者になる 読者になる

データ穴リストのブログ

文系へっぽこリサーチャーから穴リストへジョブチェンジ中。渋谷の片隅でニヤニヤしております。・・・動いたら、ね。

それってわざわざRでやること?っていうビジュアライズ〜openxlsxのゆるふわなススメ〜

こんばんわ。
前回の記事、書き始めてからおよそ2ヶ月掛かってた。。。
まぁ、書いて、忘れて、書き足して、忘れて、の繰り返しだったんだけど。

ということで、今回もかけるときに書いておく。
投稿は早めにする。
コードは、、、なるべく載せる。多分。  ← なんとか載せました。

はい、本題

そろそろ脇道ばっかりそれるのはやめだ。
というか脇道がメインなこのブログをどうにか本筋に持ってく。

ということで、今回はまともにパッケージの使い方を紹介することにする。

   …お…?なんだ、ようやくまともなことするのか…?

   と、安心することなかれ。
そこはワタクシ、データ穴リストを自負するものとして、
そんなまともなことはいたしません。 まともなものは以下でも読んでるがいいさ! www.karada-good.net

  

今日話したいのは、 Rでビジュアライズっつーても、多くの社内の皆々様にはやっぱりExcel様がモテる。   

そんな時、僕のようなへっぽこR使いはどうすれば良いのか」というお話。

あーいや、良いって別に結果が出てるわけではない。
こーしてみたんだけど、これでいんじゃね?とりあえず出来るしモメないし。
っていう前向きな姿勢で後ろ向きな話。

openxlsxを使って何をするのか

簡単に言うと、

  

  • 時系列性のグラフをExcelで作っとくじゃろ?
  • データはエンジニアさんが定期的にcsvで社内ポータルにあげてくれるんよ
  • その更新データをRに読ませるじゃろ?
  • 元のExcel読み込んで、更新データをそのExcelに貼っつけるじゃろ?
  • これでグラフの更新が出来るっちゅーわけよ。

以上。

  

え?それ?
って思ったヤツは出てこい。 「I LOVE YOU」って言い返しt(古い… *1

まともなアナリスト様ならこう思うのではないだろうか(まともなのがイメージできないけど)

  • そんなの、わざわざExcel上書きしないでRでビジュアライズすればいいじゃない
  • ggplotで綺麗なグラフもできるのに
  • 画像出力が面倒なら、knitrとかでレポーティングすればいい

でも、私の相手にする方々ならこういうだろう。

  • 画像じゃ、日毎の値も分かんないし、
  • 平滑化とかしづらいし、
  • グラフの見栄え、見る人によって変えないといけないし(具体的な値は分からないようにしないといけないとか)

ってことで、動きのない画像ではダメなのよね …と。

アナリスト様たちなら更に、

  • じゃあrChartsとかでインタラクティブなグラフにしておこうか
  • スライスとかの条件ならshinyでアプリにしておいてそこに仕込むか
  • なんならその結果を社内ポータルに埋め込んだりして活用しやすくおくか

などと考えるのではないだろうか (知らんけど)
まさにそうすべきと思う。少なくとも僕はそうしたらいいと思う。

ただ問題は、それをそうすべきと思っている人はヘーシャにはあまりいない、ということだ。
というよりは、「それ組むの面倒だしカスタマイズしにくいからExcelでよくない?」という。

・・いや、Excel派の言い分も分からないではない。

スクリプトを書かない、書きたくない側からすれば、自分の手で作業することの方が理解も進むし自由度も高い。
でもそれはあくまで「データを触る、触ろうという意志がまだあるヒト」だけの話であって、
データを触れない、触り方が分からない人たちにとっては、
「データ置いとくから興味あったら見れば?」的な姿勢は、
「なんか物好きが好きにやってる」程度に見られ、その価値はただのExcelですら理解されない。
いわば情報の非対称性を助長するような行為なんじゃないかとすら思う。
そんなわけで、「グラフ化しといたから見てね!」という状態にしたいのであるが
(それだって効果はたかがしれてるけど)、Excelから離れられないでいる。

そこでopenxlsxの出番

ということで、先に述べたExcelでのグラフ化を助けるやり方にチャレンジ。
以下に参考コードを書いておく。
あと参考データは以下、に置く。
一応。試したい時は好きなところにダウンロードしてね。

opx1.xlsx - Google ドライブ
opx2.csv - Google ドライブ

で、以下の処理を実行(とりあえず後で書く。。)

install.packages("openxlsx")
require(openxlsx) 

#とりあえずwebからとってくるのは面倒なので、 
#テスト用ファイルはローカルにダウンロードしていただいて、ローカル上でやってください。 
#ファイルパスを指定。こちらは任意でどうぞ。 

file_path <- "C:/workspace/" 

# とりあえずテーブル読んでみる。これは使わないけど。
XLobj <- read.xlsx(paste0(file_path,"opx1.xlsx"),sheet = "Sheet1")

# さていよいよワークブックをロード
XL.WB <- loadWorkbook(paste0(file_path,"opx1.xlsx")) #あ、windowsこれもう無理。

# クラスを確認。(省略可)
class(loadWB)

# ちょいと中身を拝見。(省略可)
openXL(XL.WB)

#新しいデータ(CSV)を取得
csvobj <- read.csv(paste0(file_path,"opx2.csv"), sep = ",", header = T)

# 新しいデータを既存のワークブックの好きなところにペタリ。
writeData(wb = XL.WB, sheet = "Sheet1", x = csvobj, startCol = 1, startRow = 1)
# 警告メッセージ: 
#   Overwriting existing cell data.  って出るけどキニシナイ!(overwrite引数はここでは使えないっぽい)

# ちゃんと反映されてるか確認(もちろん省略可)
openXL(XL.WB)

# 元あったファイルに上書き保存
saveWorkbook(wb = XL.WB, paste0(file_path,"opx1.xlsx"), overwrite = TRUE)

以上。

コード内にも書いたけど、これ、

Windows上では動いてません。

Windowsだとね、マルチバイトエラーっていう化け物が襲ってくるんだ。。。
この呪いの解き方がまるで分からないので、僕はubuntuを入れる羽目になったわけです。 この辺もまた長々と苦労したのでいずれまとめておきたい。

それ以外にも、社内データの取得とか壁はいっぱいあるから気をつけて!
インターネッツからパッケージ拾ってくるのに-internet2って呪文を唱えただけで解決! な頃が懐かしい。。。
(今もプロキシに悩まされるけど)