データ穴リストのブログ

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

それってわざわざ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って呪文を唱えただけで解決! な頃が懐かしい。。。
(今もプロキシに悩まされるけど)

動的レポーティングのスス…まない!


こんばんは。

とりあえず記事を貯めていこうにも、
書く時間がない。。。

もう言い訳かって、
えぇ、言い訳です。

仕事するじゃない、
定時過ぎるじゃない、
早よ帰ってこいって妻に言われるじゃない、
仕事もそこそこで帰るじゃない、
遅いって妻に怒られるじゃない、
子どもが起きてたらお風呂入れたり相手したり、
妻のご機嫌取りだったりするじゃない、
んでそのうち寝かしつけとともに寝るじゃない、

………ね?

や、ブロガーの方々はちゃんとやってんだろな。
夜中とかかな。。。

という戯言はこれくらいにして、
本題です。

コードはとりあえず書きません!
スマホじゃ画面大きくても書けません!
でもとりあえず書くことがダイジ。
ということでうろ覚えですが、書きつらねる。


knitrとエンコードと私

さて、前回ようやっととりあえず絵になったところまで書きましたが、
その絵だけペタペタメールに貼ったりするのも億劫だし、どういう処理をしたか、どういうことが分かったか、などなど、残しておかないともったいない(忘れるしね)ので、
レポート作成、やってみました。

☆参考にしたサイトとかは後で書く!このへんに!

元々分析は、学生時代から某S[ピー]SSにお世話になり、シンタックスを常に残して、作り直して…ってことはやってましたし、
なんならExcelですら、なるべく処理を残しておきたくて計算式入れまくりの重たいブックを量産してしまう性質なもので、
レポートとして書いて残せるだなんてウッハウハ、
世のエンジニアさん達はこんな便利なものを使ってたのか!

前職じゃ何百何千の集計表だの、グラフ入り報告書だの、
ヒーコラ言いながら作業してもらい、
校正してもらい、
間違いをクライアントに指摘されて謝りつつスケジュールの猶予をねじ込み、
みたいな仕事だったもので、
こんな便利なモノがあったなら、、、
と過去を振り返りたくなります。

…振り返ると実はあまり仕事してないんじゃないかと思ったりもするのだけど。。。
あの激務で僕は何を得たのだろう。。

まぁ、前職じゃ知ってても習得する暇もないしスタッフさんに覚えてもらえる文化じゃなかったけど。

また脱線した。

そういうわけで、有用なものは多少の時間を投資してでもやろうと思い、
まずはRstudioのRmdファイルの見本を弄りながら、
1人悦に浸っていたわけなんですが、、

いやね、ヤな予感はしてたんですよ。
何やってもPDFには一向に出来ないし、
その辺はまぁ触れないでおこうと思ってたんですがね。。。

実際に組んでみると全く動かない


もう既に答えは書いてるのですが、
そう、エンコードとの出会い。

非エンジニアが意識しないでいられた、あのエンコード君。

名前くらいは知ってた。
なんか隣のクラスでは結構話題になってる有名な、でもちょっとコワいウワサのある、あのヒト。

でも、ボクが仲良くなり始めた、knitrちゃんが、事あるごとにアイツの名前を口にして、
やっぱりボクじゃダメなのかな…って思ったりもするけど、
それでもボクは、エンコード君にまた挑むんだ。
そう、いつの日かknitrちゃんが微笑んでくれるその日まで。。。
………みたいなことをしてました。

こちとら生粋のWindowsエンドユーザー。
Office系のソフトは扱い慣れてますけど、そこから一歩外れりゃ満足に文字も書けないってんだから全く嘆かわしい。

問題なのはShift_JIS(正確にはCP932ってんですかね)。

困ったことに、考えられる日本語を一切排除しても、どうしてもダメ。
ファイルパスに日本語が混じらないようにしても、
スクリプトファイルも全て半角にしても。

結局、元のcsvファイルにも日本語混じってて、コレ半角に直してから動かすなんてアナログ作業に耐えられず、断念。
knitrちゃん、この世では結ばれることはなかったね。。。

ということで、来世はubuntuに、ということにして、
仮想環境にubuntu入れて、新天地でknitrちゃんと結ばれることを画策中。

と思ったら新天地ubuntuでは
そもそもR入れるのにプロキシ環境整えることから公開鍵の入手とか、
rstudioはそのままダウンロードしてみたのに「インストールに失敗しました」とかいう謎のコメントをいただいたり(その後なぜか出来た)、
ようやくパッケージインストールだと思ったら関連するパッケージをセットで入れてくれないからなかなかちゃんと入らなくてとか、
rstudioで日本語打ち込もうとして設定変えたらホストPCと共有してるパッケージの読み込み場所を変えられたりと(イマココ)、
次から次へと新たな問題が出てきます。

というところまで済めば、ようやくubuntu環境で色々できるようになる!

この希望を胸に、引き続き頑張ります!








線形判別を描く、その苦悩の日々

 
前回の線形判別の後編です。
 
今回はみんな大好きびじゅあらいずのお話だよ!
 
 
ところでタイトルの「ニヤける」、
にやけるはニヤニヤするの意味でない、ということ、ご存知でしたか?
 
私は最近知りました\(^o^)/
 
大丈夫、"ニヤ"けるなので、「にやける」にあらず。
そういうことにしておこう。
 
 
 
 
※前回のところでとりあえず扱うモデルは決まった。ということにしておきます。
 細かな過程をしょっぴいてるけど、省きすぎてたらごめんなさい。
 
 
やぁ、あとはR屋さんが主張する綺麗なビジュアライズとやらを、
ステキなパッケージの言う通りに描いてやれば終了だ。
 
…なんてうまくいくはずもなく、むしろここからが本番でした。
 
 
ひとまず、みんなのアイリスたんを参考に、
プロットしてみたら、そこそこうまくいった*1
 
参考にしたのはこのブログ↓
 
こちらは本の通り3群判別だったけど、2群にしてもとりあえずできた。
 
よしよし、なら実データでもやってみるかと、
やってみたのが運の尽き。
 
このブログ(本)で紹介されているケースは、一次方程式しか対応できないということを後になって思い知りました。
係数はそれはそれで重要だけど、
図示するには事後確率をベースにすべきでした。
 
ということが分かったのはこちらのサイトから↓

判別分析(東大の農学あたりの授業資料みたい。)

 
 
上の方法の何がダメだったのか、
それは、交互作用項が入った段階でyの値を再現できなかったから(たぶん出来るハズだけど、自分にはその方程式が計算できなかった、という方が正しいのかな)。
 
y = α + β1X1 + β2X2 なら再現はできるけど、
y = α + β1X1 + β2X2 + β1*2X1*2 が出来なかった。
 
式だけなら数学の得意な後輩に聞いてとりあえず作れたけど(っていうレベルでいいのか激しく疑問だけど)、
そのまま式を作ってもおかしな線にしかならない。
たぶんX1X2の掛け算が不適切なんだろうと思うけど。
 
まぁ、
理解できるなら理解したい。
でも絵が描けることの方が最優先(キリッ
ということで、東大の資料に行きつきました(1~2週間悩んだ)
 
で、出来たのが以下
 
・・・に図を載せたりそのコードを書いたり線を複数書いたり非線形にしてみたり、
ということを載せようと思ったんだけど、
今日はもう時間がない。
 
とりあえず進めたから、すごく中途半場だけど公開しよう。
公開しないと何も動いていないのと同じだから(前回の記事がまさに)。
 
 
・・・と思ったけど、やっぱり絵だけはとりあえずいっこ載せとこう。
載せられないとこだけ伏せました(出し直せよって話ですが)
 

f:id:cun-wang:20160312133911p:plain

決定面を3つ書いているのは元々の判定基準が連続量を上の基準でぶったぎったから。

XYの基準を超えたらとりあえずそのくらいの値にはなるんじゃね?という。

 

ここまでするのに、knitrとかなんやかんやまだ紆余曲折しているんだけど、

その辺りはまた今度。

 

次はknitrでつまずいた話か、rChartsをマークダウンに載せられない話か、

なんか色々つまずいた話をご紹介します。

 

…無事に解決出来たらね。(や、解決してなくても載せるか)

 

それではまた。私のやる気が続いていたら。

 

 

*1:その辺は省略

Rで線形判別、の前に線形回帰、で、つまずく。

さて、本題に入ります。

 

が、何を書こうか決めてなかった。

とりあえず最近*1仕事でやってることにするか。

 

最近、「製品の上市前にある程度ウケるかどうかチェックしようよ」みたいな流れになってまして、

ようやく予測的なお話ができる・・・!

 

*1:とかいいつつ、とりあえず記事書いてから外に出せるコードに直してって暇を見つけながらーと思ったら2か月くらい放置してしまったorz

続きを読む

技術ブログ(笑)、始めます。

初めまして。

cun_wangと申します。


自己紹介させていただきます。

渋谷の片隅で、社内向けに調査とか分析とかをやってます。

職業、マーケティングリサーチャーを謳っておりますが、
元は世論調査の実務屋で、大学では社会調査あたりをやってました。
学生時代は社会学が面白いと思ってましたが、調査分析に興味を持ち出したお蔭で2年ほど社会に出遅れました。

社会に出て約6年、「調査分析で食っていきたい」と思って某調査会社に在籍してましたが、毎日夜中までデータ集計屋に徹する日々に先を見出せず、
当時ちょうど盛り上がってきていたデータサイエンティストブームに乗っかるカタチで某メーカーの立ち上がったばかりの調査部署に転職。

以降は2年間、エンドユーザーへのアンケートやら行動履歴データやらを使った調査分析に従事しております。

マーケティングリサーチはザッとは学んでましたが、正直体験としては多くなく、まだまだよく分かってないな…と思います。

学生時代、前職では、集計専用ソフトを除いて、
SPSSくらいしか使っておらず、
去年くらいにHADに出会ってHADスゲー!!と歓喜してましたが、
この程、ずっと「やらなきゃ…でもメンドイし…」と、ウダウダしてやって来なかったアレを、ようやく動かしてます。


そう、「R」です。


Rは、何度か必要に迫られた時にテキトーに動かして、動かなくて、「まぁいいや」と放置してましたが、自分の仕事の方向性からも、いよいよココをおさえないとこの先やっていけない…!と思うに至り、少しずつですがやってます。

とか言いながら、最近は私生活の方で1歳の子どもを中心とした生活で、なかなか勉強も残業もしにくい雰囲気で、日々の家事に追われております。


……………前置きがやたら長くなりました。

このクソ長いどうでもいい便所の落書きみたいな自己紹介で何が言いたいかというと、

このブログは、上記のように、
「ド文系の、非エンジニアの、30過ぎたおっさんが、ちょっとした時間にRなりを動かして分析してみて楽しいな/出来ねぇよ  と呟く、技術ブログとは言えない程恥ずかしい初歩的な技術あたりで四苦八苦してる記録をするための技術(笑)ブログ」
です。

あぁ言い訳長かった。


という、便所の落書きですが(2回言った)、興味があるようなおヒマな方がいらっしゃいましたら、寄ってってください。


ちなみにタイトルは、よく拝見させていただいている銀座さんと、匿名知的集団さんからインスパイアさせていただきました。


ただし、私がお役に立てるのは、そうした知的な方々の界隈ではなく、
「その辺のブログを読んで自分でもやってみ…れない!できない!これどうやって考えたらいいの?」
という方々と一緒になって
傷を舐め合うことくらいしかできません


そんなわけですが、どうぞよろしくお願いしますm(_ _)m