ラベル オープンソース の投稿を表示しています。 すべての投稿を表示
ラベル オープンソース の投稿を表示しています。 すべての投稿を表示

2016年11月7日月曜日

ggplot2でクロス集計的に複数グラフをプロットする方法

R(Rstudio)を使って分析を行う際、細かな分析に入る前にザックリとデータ内容を俯瞰したい場合がありますよね。

幾つか方法はあると思いますが、以前、当ブログでご紹介した「gridExtra」パッケージを使う以外に簡単なやり方があったのでご紹介します。

サンプルコードのご紹介


# 必要なパッケージのロード
library(ggplot2)
library(useful)

# もやはおなじみ。ポルトガル銀行のダイレクトマーケティングデータを読み込み。
# ちなみに、「stringsAsFactors」を指定しないと、文字列が勝手に「factor」型に
# なってしまいます。
bank.dat <- read.csv("bank-full_for_R.csv",sep = ";", stringsAsFactors = FALSE)

# データフレーム名を指定するのが面倒なのでattachします。
attach(bank.dat)

# 「x軸にduration(持続時間)、y軸にageを置きます」指示
ggplot(bank.dat, aes(x = duration, y = age)) +
# プロットするポイントの色はy(ダイレクトマーケティングの結果)
geom_point(aes(color=y)) +
# グリッド(格子)のy軸を「education(受けた教育レベル)」、x軸を「marital(婚姻状況)にします」指示。
facet_grid(education ~ marital) +
xlab("duration") +
# angleはx軸の目盛ラベルの角度
theme(axis.text.x=element_text(angle = 45, hjust = 1, vjust=.5)) +
# 最後の行を外すと「1K」が「1000」となってカッコ悪いので。
scale_x_continuous(labels=multiple)


その他のR言語エントリー


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

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

(R言語)道内空港間の流通量を可視化してみた。
http://sapporomkt.blogspot.jp/2016/02/r.html
 
【R言語】leafletで札幌市内のサツドラをプロットしてみた。
http://sapporomkt.blogspot.jp/2016/01/rleaflet_4.html

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

2016年10月30日日曜日

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

わたくし、統計解析言語の「R」が好きです(もちろん、SPSSも好きですよw)。
知人や友人に「Rっていいよ!」と熱っぽく進めるものの、不慣れな方だと開発環境を準備するだけでも大変なのは事実と言えば事実。

Rの開発環境といえば「RStudio」が有名ですが、R(r-base)のバージョンと合わせる必要があったり、個別パッケージにもバージョン問題があったりと・・・まぁ、オープンソースなのでそれなりに手間がかかるとです。

しかーし!そんなあなたに朗報です!
出でよ、ロデーム!(古いw)・・・じゃなくって、「Data Scientist Workbench」!!
今日は、このサービスを使って、下記のようなグラフを作ってみます。



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


「Data Scientist Workbench」とは


IBMが提供する無料のデータサイエンス作業環境です。簡単な利用登録だけで、下記のデータ準備/分析環境が即座に利用可能になります。

<データ準備環境>
・OpenRefine

<データ分析環境>
・Jupyter Notebook
・Zeppelin Notebook
・RStudio IDE
・Seahorse

利用申請は下記サイトの解説を御参照ください。
Data Scientist Workbench 入門

手順とサンプルコードのご紹介


1.利用申請後、「Data Scientist Workbench」にアクセス。
 https://my.datascientistworkbench.com/ 

2.「RStudio IDE」をクリック
下記画面の赤枠内にある「RStudio IDE」ボタンをクリックしてください。
「今、何がしたいですか?」って、まぁ、直球ですね(笑)


3.下記コードを実施
上記ボタンをクリックした後、「準備できるまで2~3分かかります」的なメッセージが表示されますが、実際はそんなにかかりません。

下記のようにローカルPCにインストールする「RStudio」と同じ画面が表示されるはずです。



# 必要なパッケージのインストール
install.packages("gridExtra")
install.packages("ggplot2")

# 必要なパッケージのロード
library(ggplot2)
library(gridExtra)

# Jared P.Landerさんが公開しているNYCのオープンデータを読み込ませます。
# ちなみにこの方、「みんなのR~データ分析と統計解析の新しい教科書」の著者さんですが、この本、とっても分かりやすくて、かつ実践的なのでオススメです。
housing <- read.table("http://www.jaredlander.com/data/housing.csv",sep=",",header=TRUE,stringsAsFactors = FALSE)

# Lander先生の御指示どおり、列名を変えます。
names(housing) <- c("Neighborhood","Class","Units","YearBuilt","SqFt","Income","IncomeperSqFT","Expence","ExpencePerSqFt","NetIncome","Value","ValueperSqFt","Boro")

# お部屋のUnit数が1000以上って「?」なので、Units1000未満に絞り込みます。
housing <- housing[housing$Units < 1000,]

# 下記のようにするとdataframe名を都度指定しなくても済みます。今回は不要ですけど。
# ちなみにattachを外すときは、「detach()」でお願いします。
attach(housing)

# ggplto2で各グラフを生成します。ちなみに「fill = Boro」は「Boro別に表示してね」の意味です。
Units.graph <- ggplot(housing, aes(x = Units, fill = Boro)) + geom_histogram()
YearBuilt.graph <- ggplot(housing, aes(x = YearBuilt, fill = Boro)) + geom_histogram()
ValueperSqFt.graph <- ggplot(housing, aes(x = ValueperSqFt, fill = Boro)) + geom_histogram()
Income.graph <- ggplot(housing, aes(x = Income, fill = Boro)) + geom_histogram(binwidth = 500000)

# 4つのグラフを2列に配置
grid.arrange(Units.graph,YearBuilt.graph,ValueperSqFt.graph,Income.graph,ncol = 2)

# 冒頭のグラフが表示されます。ggplot2なので、とても艶っぽくて「それっぽい」感じです。

2016年7月16日土曜日

RMeCabで形容詞の形態素解析をやってみた。

 最近、テキストマイニングがマイブームです。
普段は「kh coder」や「TTM(Tiny Text Mininer)」か、弊社のテキストマイニングツールを使っているのですが、R言語のエントリーでRMeCabを使ったものがあったので、妙に触りたくなりました。

 今回は、クチコミサイトにあったクレジットカードのレビューをサンプルデータにグラフ化までやってみます。

・OS:Windows7
・R version:R version 3.3.0 (2016-05-03)
・IDE:RStudio ver0.99.902
・データ件数:1,575件

「RMeCab」とは?


オープンソースの形態素解析エンジンである「MeCab(めかぶ)」をR環境から直接利用できるパッケージです。

RMeCabのインストールはR環境からコマンドコピペ一発で出来ますが、MeCabのインストールはやや苦戦するかもしれません。ご利用になるRのバージョンに合致するMeCabをご確認の上、インストールしてください(・・・って、言うほど難しくないです)。

(参考ページ)RMeCab
http://rmecab.jp/wiki/index.php?FrontPage

ソースコード


# パッケージのロード
library(RMeCab)

# read.csvとか使わずに、RMeCabから直接読み込めるのは便利ですね。
card.res <- RMeCabFreq("card.txt")

# str()でデータフレーム構造を確かめておきましょう。

> str(card.res)
'data.frame':    9798 obs. of  4 variables:
 $ Term : chr  "あ" "あー" "あの" "え" ...
 $ Info1: chr  "フィラー" "フィラー" "フィラー" "フィラー" ...
 $ Info2: chr  "*" "*" "*" "*" ...
 $ Freq : int  3 1 3 8 7 8 6 3 2 1 ...


# Info1には品詞情報が入っています。今回は「50回以上頻出」した「形容詞」を抽出します。
card_adj_50over <- card.res[(card.res$Info1=="形容詞"&card.res$Freq > 50),]

# とりあえず、頻出回数順に降順でソートをかけておきます。
card_adj_de <- card_adj_50over[order(card_adj_50over$Freq,decreasing = T),]

# もう一回データフレーム構造を見ておきましょう。
str(card_adj_dec)

> str(card_adj_dec)
'data.frame':    20 obs. of  4 variables:
 $ Term : chr  "ない" "良い" "やすい" "多い" ...
 $ Info1: chr  "形容詞" "形容詞" "形容詞" "形容詞" ...
 $ Info2: chr  "自立" "自立" "非自立" "自立" ...
 $ Freq : int  989 676 487 456 431 358 277 247 142 140 ...


# 都度データフレーム名を入力するのは面倒なので、「attach」しておきます。
attach(card_adj_dec)

# グラフを作りたいのでggplot2をロードしておきます。
library(ggplot2)

# 描画レイヤーを一枚ずつ重ねあわせる
g <- ggplot(
  card_adj_dec,          # ggplot 用データフレーム
  aes (                     # ggplot オプション設定
    x = Term,            # x軸:Term
    y = Freq,             # y軸:Freq
  )
)
g <- g + geom_bar(   # 縦棒グラフの指定
  width = 0.8,           # 棒の幅
  stat = "identity"
)
g <- g + xlab("形容詞")           # x 軸名
g <- g + ylab("頻出回数")       # y 軸名
g <- g + ggtitle("クレジットカードレビューにおける形容詞ランキング")   # グラフ名

# グラフ描画。うーん、せっかく元データを降順にしたのに、反映されていない。。^^;
# 次回までに勉強しておきます。
plot(g)


R言語関連のエントリー


【R言語】leafletで札幌市内のサツドラをプロットしてみた。
http://sapporomkt.blogspot.jp/2016/01/rleaflet_4.html

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

【R言語】factor型で数値を集計するときの注意点
http://sapporomkt.blogspot.jp/2016/01/rfactor.html

【R言語】ベクトルにおける関数の使い方
http://sapporomkt.blogspot.jp/2015/12/r_80.html 

【R言語】「rpivotTable」パッケージが高機能過ぎて泣ける件
http://sapporomkt.blogspot.jp/2015/11/rrpivottable.html

【R言語】どうしても「ディープインパクト」全産駒の内訳を集計したくなったの<前処理編>。
http://sapporomkt.blogspot.jp/2015/10/r.html 

AEIが優秀な種牡馬を調べてみたら・・・やっぱりディープ(略)
http://sapporomkt.blogspot.jp/2015/10/aei.html

過去5年間のリーディングサイアー成績を眺めてみた~ディープインパクトって実際・・・
http://sapporomkt.blogspot.jp/2015/10/5.html

(R言語)readHTMLTable関数でJ2の順位を音速で抜き出す。
http://sapporomkt.blogspot.jp/2015/07/rreadhtmltablej2.htm



2016年2月29日月曜日

道民の除雪イライラ具合をTwitterのセンチメントで図ってみた。

 あまり知られていないかもしれませんが、Twitterの「高度な検索」では「センチメント」でつぶやきを抽出できます。

Twitterの「高度な検索」
https://twitter.com/search-advanced?lang=ja



Twitterのセンチメントとは?


 Tweet内の文言に含まれている文言をTwitter側が「ポジティブ」「ネガティブ」に自動判別しています。具体的な振り分けルールは不明ですが、イメージで言うと下記にあるような感じです。

例:
「ポジティブ」:「好き」「良い」「明るい」等
「ネガティブ」:「嫌い」「悪い」「暗い」等
 

今回やったこと


 下記条件に該当するTweetを収集しグラフ化しました。
なお、サンプリングをかけていますので、下記条件に合致した全Tweetではないのでご留意ください。
 
・検索ワード:(除雪 or 除排雪 or 排雪)
・検索エリア:北海道
・収集期間:2015年11月12日(木)~2016年2月27日(土)
・収集Tweet数:3,453件

 

結果


 

 以前、当ブログでも書きましたが、札幌に初ドカ雪が降った日(2015年11月24日(火))は、除雪車の出動が遅れたこともありネガティブなTweetが多かったようです。


「札幌を中心とした北海道のドカ雪」に関するTwitterを分析してみた。

http://sapporomkt.blogspot.jp/2015/11/twitter_28.html

 その後は、札幌のみならず全道でも降雪が始まりました。道民の皆さんが除排雪に慣れたことも影響したためか、ポジティブとネガティブの差はあまり出ていないのが興味深いですね。

 普段は、収集したTweetをテキストマイニングにかけてもいるのですが、ブログの書き込みと比べると情報量が足りないため、腹落ちする結果が出せないことも多々あります。

 今回のように、単純に「ポジネガの傾向を時系列で見る」というアプローチ、カロリーもかからないですし、案外アリなんじゃないかなと思っています。

(R言語)道内空港間の流通量を可視化してみた。

 Qiitaに下記面白エントリーがあってちょっと話題になりましたね。

R言語 - transitionPlot による空港間流通量の可視化
http://qiita.com/uchim/items/b863255020e20498d2a9

「道内空港間だけで見たらどうなるかな?」と思い、クロス集計までソースコードそのまま流用させて頂きました。

ホントは最後までR言語で処理しようかなと思ったのですが、クロス集計結果を「write.table関数」で吐き出してからExcel使った僕は意気地なしですごめんなさい。。



集計結果について


 使用したデータは、国交省が提供する下記サイトの平成26年度データです。

空港間流通量 第1.1版
http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-S10b-v1_1.html

 冒頭のQiitaエントリーでは、空港間流通量のクロス集計データを「transitionPlot」でグラフ化していますが、流通量の数値幅が大きいとやや見づらくなるケースもあるかと思います。

 よって、楽をして、Excelで数表にしてみました。
 このままでは見づらいと思いますので、クリックしてご覧ください。


  集計前、空港間流通量の合計は、「北海道の空の玄関」こと、「新千歳空港」が圧倒的に多いのだろうなぁと思っていたのですが、実際は、「函館空港」や「旭川空港」の方が多いのですね。

 確かに「ドル箱路線」と言われる、「羽田~新千歳空港間」等や、アジア圏に発着枠を振り分けた方が儲かりますもんね。 道民としては、観光やビジネスの利便性を考えると道内地方空港への路線を積極的に作って欲しいところもありますが・・・。


R言語関連のエントリー


【R言語】leafletで札幌市内のサツドラをプロットしてみた。
http://sapporomkt.blogspot.jp/2016/01/rleaflet_4.html

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

【R言語】factor型で数値を集計するときの注意点
http://sapporomkt.blogspot.jp/2016/01/rfactor.html

【R言語】ベクトルにおける関数の使い方
http://sapporomkt.blogspot.jp/2015/12/r_80.html 

【R言語】「rpivotTable」パッケージが高機能過ぎて泣ける件
http://sapporomkt.blogspot.jp/2015/11/rrpivottable.html

【R言語】どうしても「ディープインパクト」全産駒の内訳を集計したくなったの<前処理編>。
http://sapporomkt.blogspot.jp/2015/10/r.html 

AEIが優秀な種牡馬を調べてみたら・・・やっぱりディープ(略)
http://sapporomkt.blogspot.jp/2015/10/aei.html

過去5年間のリーディングサイアー成績を眺めてみた~ディープインパクトって実際・・・
http://sapporomkt.blogspot.jp/2015/10/5.html

(R言語)readHTMLTable関数でJ2の順位を音速で抜き出す。
http://sapporomkt.blogspot.jp/2015/07/rreadhtmltablej2.html

【R言語】data.frameの列名変更は全部上書きで。
http://sapporomkt.blogspot.jp/2015/09/rdataframe.html

【R言語】競馬データで「rbind関数」の使い方を覚えよう!
http://sapporomkt.blogspot.jp/2015/09/rrbind.htm

2016年1月13日水曜日

「データ・ビジュアライゼーション」でも便利な「Watson Analytics」。

 前回、IBMの「コグニティブ・コンピューティング・システム」(※)である「Watson」技術を活用した「Watson Analytics」について書きました。

※『人工知能』と紹介されることもあるが、IBMはワトソンを、自然言語を理解・学習し人間の意思決定を支援する『コグニティブ・コンピューティング・システム(Cognitive Computing System)』と定義している(Wikipediaより)

分析の常識が変わる?「Watson Analytics」すげー!!
http://sapporomkt.blogspot.jp/2016/01/watson-analytics.html


「Watson Analytics」って「データ・ビジュアライゼーション」に最適カモ。


 今回も前回の続きです。「グラフ化」に絞った使い方でご紹介します。作業自体は殆ど前回と同じなので、Google Analyticsの初歩レベルの使い方が出来る方なら誰でも出来ちゃいます。

 

1.Google Analyticsから「アフィニティカテゴリー」と「オーガニック検索キーワード」を採取。

よく分からない方は、「レポートとヘルプを検索」ボックスで上記単語を含んだ検索を行ってください。ちなみに、どちらのデータも最終行に列の合算値が入っています。そのままでも動きますが、グラフの形が崩れるので削除してください。


<アフィニティカテゴリ>

<オーガニック検索トラフィック>


2.データをアップロード。

詳細は前回エントリーをご覧ください。普通にCSVファイルを選択するだけです。
下記画像ではデータ集計後のデータも表示されています。
「DATA SET CSV」がアップロードしたデータ、「EXPLORATION」が分析後のデータとなります。



3. データセットをクリックし、分析メニューを選択。

これも基本的には前回と同じです。試しにプロット図を選択しました。グラフ上部にある「新規ユーザー」や「平均セッション」の文言がプロット図のX軸・Y軸に相当しますので、お好きなデータ項目を選択すれば瞬時にマップも切り替わります。

 下記は、直近3ヶ月間で僕のブログにアクセスされた方のアフィニティ(好み・関心事)データをプロットしたものです。「新規ユーザー数」では「DMO」が圧倒的に多いのですが、「平均セッション時間」では「(鶴雅)定山渓 森の謌ランチ」が長いことがわかりますね。


 今度は、同じ期間における「オーガニック検索キーワード」をタイル表示してみました。普段、このようなアウトプットはしないのですが、インパクト狙いで使ってみるのもアリですね。


 もちろん、ベーシックに縦棒グラフも出力可能です。


 また、今回掲載した画像は全てキャプチャをしたものですが、PDF・画像ファイル出力やメール送付などもボタン一つで出来ちゃいます。 Excelでグリグリマップ化するのは面倒なときにこのようなツールで情報共有するのも楽効率的でいいですよね。



 いかがでしたでしょうか。「Watson Analytics」を分析システムというよりは、「データ・ビジュアライゼーションのツール」として活用するのもアリな気がしませんか? Google Analyticsだとちょっと手間がかかるWEB分析もこの仕組みを使えば短時間で知見を導き出せるかもしれませんね。



<「Watson」関連のエントリー>
いま話題のIBM「Bluemix(ワトソンくん)」が「老人と海」をサマったら。
http://sapporomkt.blogspot.jp/2015/11/ibmbluemix.html

分析の常識が変わる?「Watson Analytics」すげー!!
http://sapporomkt.blogspot.jp/2016/01/watson-analytics.html

2016年1月4日月曜日

【R言語】leafletで札幌市内のサツドラをプロットしてみた。

 前回は、R言語から「leaflet」を動かして、マップをグリグリしました。

【R言語】今年は、leafletでマップをグリグリしたい。

http://sapporomkt.blogspot.jp/2016/01/rleaflet.html


 今回は、そのマップ上に沢山プロットしてみたいと思いますが、どうせやるなら「札幌」に由来のあるものがいいですよね。先日、「コンサドーレ札幌」との新電力参入で話題になった「サツドラ」こと、「サッポロドラッグストアー」さんを取り上げてみます。


やったこと


1.インターネットタウンページで「札幌市内×サッポロドラッグストアー」を検索。
 ※60箇所表示されましたが、同社本社も入っていたことに気づく。まぁ、いいや・・・。

2.Terapad等を使って全角文字を半角に一括変換。

3.「J's blog」さんの関数を使って「逆ジオコーディング」。住所から経度・緯度をサクッと算出出来ちゃいます。

Rで(逆)ジオコーディング
http://jundoll.hatenablog.com/entry/2014/11/30/222942

 ちなみに作ったデータはこんな感じ。


 

4.下記コードを走らせるだけ。なんと、たったの5行!

install.packages("leaflet")
library(leaflet)
satsudora.dat <- read.csv("160102_satsuroda_list.csv",head=TRUE)
View(satsudora.dat)
leaflet(satsudora.dat) %>% addTiles() %>% addMarkers(lng=~lng,lat=~lat)



 スクリーンショットなのでわかりづらいですが、Google mapのように中心点や拡大率をグリグリ動かせます!ちょっと拡大するとこんな感じ。


 サツドラさんがGoogle map上で作っているマイマップと比べてみると、一部載っていない店舗もあるようですが、ほぼ同じです。


例えば、他のドラッグストアさんと同一マップにプロットして出店戦略の違いとか見るとも楽しそうですね。「leaflet」パッケージは様々な表示オプションがあるので、次回も勉強がてら試してみます。

2016年1月2日土曜日

【R言語】今年は、leafletでマップをグリグリしたい。

最近、R言語界隈で「leaflet」がアツいです。
遅まきながら、自分もデビューしてみようかなと思った次第です。
これ、上手く活用すると、自社クライアントや競合の拠点をマップ上にプロットして「商圏分析」的な提案にも使えそうです。


そもそも「leaflet」とは?


JavaScriptのオープンソースライブラリ「leaflet.js」をRから利用できるパッケージです。特別な設定をせずとも、マップをグリグリ動かしたり、レイヤー構造でオブジェクトを被せることが可能になります。

Leaflet for R(英語版)
https://rstudio.github.io/leaflet/

leafletではじめるRによる地図プロット
https://kazutan.github.io/JapanR2015/leaflet_d.html


早速使ってみた。


まずは、マップの中心地点となる場所の経度・緯度情報を採取してください。
てっとり早く経度・緯度の数値データが欲しい方は、下記サイトからどうぞ。

http://www.geocoding.jp/


下記ソースコードです。ホントにこれだけ。ナニコレベンリ!



 
==========================================================
install.packages("leaflet")
library(leaflet)
leaflet() %>%
     addTiles() %>%
# 札幌駅を中心地に設定。zoom=の数値で拡大率を変更できます。
     setView(lng=141.350755,lat=43.068661,zoom=11)
==========================================================




 「んなぁんだ、ただのGoogle mapじゃん」と言う事なかれ。
このマップ上に別途指定した複数の地点をプロットすることが出来るんです!

 次回はこのマップに沢山プロットして遊んでみます!

2016年1月1日金曜日

【R言語】factor型で数値を集計するときの注意点

R言語の本を読んで意外と苦労するのが
「Rの関数に付属するデータセット以外のデータで思ったように集計できない」ってこと。

僕ら初心者で良くあるのは、こういったところでしょうか。
・文字コードが実施環境と違う
・NAの取り扱いがよくわからない
・依存関係がクリア出来なくてパッケージがインストールできない 等々。

その中でも、「勉強しては忘れ、勉強しては忘れ・・・」しちゃうのがR言語特有の「データフレーム」の取り扱い。特に「factor型」データってややこしいですよね。


リーサスのInboundデータでやってみた。




「地方創生」の重要システムである「地域経済分析システム(RESAS:リーサス)」から「観光マップ」→「外国人訪問分析」を選択してください。上記画像のような各都道府県を訪れたInboundの人数等が国別にわかるのですが、CSVデータをダウンロードすることが出来ます。

R言語の練習にはもってこいなので、こちらを利用してみましょう。

 以下ソースコードです。

# CSVファイルを読み込みます。タイトル行があるので、head=TRUEを忘れずに。
inbound.dat <- read.csv("外国人訪問分析_四半期.csv",head=TRUE)
 
# いちいちデータフレームの名前をタイプするのは面倒なので、attach関数を適用します。
# こうすると列名だけの入力でOKになります。
attach(inbound.dat)

 
# 「訪日外客数_人」列にInbound人数がありますがfactor型になっているため、
# sum等の集計が出来ません。いったん、「as.character」関数に通してから、「as.numeric」関数で
#  数値データに変換してください。これ、意外に本に書いてないんですよね。。
count.dat <- aggregate(x=list(value=as.numeric(as.character(訪日外客数_人))),by=list(keycol=国名),FUN=sum,na.rm=TRUE)
 
# ggplot2で作図。2011~15年までのデータを合計しましたが、「keycol=」に「集計年」を追加
# すると年別でも集計出来ます。 
 
library(ggplot2) 
p <- ggplot(count.dat, aes(x=keycol, y=value))
p + geom_bar(stat="identity")
 
 

2015年12月13日日曜日

【R言語】ベクトルにおける関数の使い方

備忘録代わりに「R言語」のベクトルにおける関数の使い方をメモ。
普段、意識して使わないものもあるので、なかなか覚えないんですよね。
使用例については、今後、順番に書き足して行こうかと思います。

関数の定義

関数 定義
cor() 相関関数
cumsum() 累積和
diff() 前進差分
length() 要素数
max() 最大値
min() 最小値
mean() 平均値
median() 中央値
order() 各要素の元の位置
prod() 総積
range() 範囲
rank() 各要素の順位
rev() 要素の逆順
sd() 標準偏差
sort() 要素の整列
sum() 総和
summary() 要約統計量
var() 不偏分散

使用例

cor():相関係数

data("airquality")
head(airquality)

Ozone Solar.R Wind Temp Month Day
41 190 7.4 67 5 1
36 118 8.0 72 5 2
12 149 12.6 74 5 3
18 313 11.5 62 5 4
NA NA 14.3 56 5 5
28 NA 14.9 66 5 6


# データセット名を都度指定するのは面倒なので、attach()関数で指定。
attach(airquality)
(cor1.dat <- cor(Wind,Temp, method = "pearson"))
[1] -0.4579879
# 順番逆かもしれないですが、散布図でもチェック。
pairs(airquality,pch=21,bg="red",cex=1)
 

2015年11月28日土曜日

「札幌を中心とした北海道のドカ雪」に関するTwitterを分析してみた。

 実は、とっても恥ずかしいのですが、昨日の朝、パンツベチャベチャで出社しました・・・。
だって、出社時に転んだんですもの。11月24日(火)に降った大雪で凍った路面に出来た水溜りで転倒ですよ。骨は折れませんでしたが、心は完全にポッキリでした・・・。

25日(水)午前中の札幌駅前


札幌のドカ雪にテキストマイニングでリベンジ!


 このやるせない気持ち、どうしたらいいの・・・。

「テキストマイニングだっ!」

そんなわけで、下記内容で「札幌を中心とした北海道のドカ雪」に関するTwitterを集めて分析してみました。安心してください、パンツは、もう、乾いています!


・分析の目的:
 2015年11月24日(火)の夜から札幌市内を中心に大雪が発生。その前後において、北海道内でどのような ソーシャル上の発話があったのかを分析した。

札幌市内は25日、前日から降り続いた雪がドカ雪となり、積雪は一時、11月としては62年ぶりに40センチを超えた。しかし、札幌市は降雪量の見通しを誤り、大半の地区で前夜のうちに市道と道道の除雪車の出動を見送った。(2015年11月26日(木)北海道新聞)

・データ件数:Twitter:480件 ※サンプリングにて取得

・データ検索キーワード:「除雪」or「排雪」or「除排雪」

・データ検索エリア: 北海道


分析結果のご紹介


 今回は、今シーズン最初のドカ雪ということで、若干データ量は少ないのですが、特徴は掴めるかなと思います。

 まずは、Twitterの発話ボリューム。サンプリングがかかっているのと、北海道エリアで指定しているため、本来であればもっと多くデータ取得出来るはずです。

  データ収集期間中、もっとも「除雪」関連のキーワードが多かったのは、11月24日(火)でした。
意外に25日(水)になるとガクッと落ちるものなんですね。


 続いては、センチメント分析。こちらはTwitter上で発話されているテキスト内容を機械的に「ポジティブ」「ネガティブ」に判別する手法です。 「ポジティブ」が12%、「ネガティブ」が30%となっていまして、道民のイライラ感が伝わってきますね。




 次にいつもどおり、各単語をマッピングしてみました。
右上の青いバブル群を見ると「見送る」「怒る」等が見えますね。また、中央にも「怒り」といった単語が見てとれます。


 こちらは頻出した「名詞」。「札幌」「大雪」といった言葉が上位にみられますね。
センチメント分析で「ネガティブ」比率が高かったですが、確かに「大変」「怒り」「dis」「批判」といった否定的な言葉が多いですね。
(例:気温が0度付近での大雪ですので、重たい雪で大変です(^O^) 道路除雪の予算や準備もできていない結構混乱してます、交通状態がw )


 次は「形容詞」。「重い」「腹立たしい」「うるさい」などが多かったものの、中身を見るとこんなリツイートも何件か確認できました。
(例:「そういえば今朝の新聞に「除雪見送られて札幌市民が怒っている」ってあったけど、多くの札幌市民は「こんな時期に雪がいっぱい降ったこと」が腹立たしいとは思ってるけどいきなり除雪が出るわけないと思ってるし、行政を叩きたい人がそれーって言って市の判断をいつものようにdisってるだけだと思う」というリツイート)

「動詞」は、「死ぬ」「疲れる」といった除雪作業に伴う感想がやや見られました。
(例:何かもう30センチ位雪積もってる...今日の除雪で肩甲骨と肩が死んだ...( ^ω^ ) )



 いかがでしたでしょうか?
まだTweet件数が少ないこともあり、機微なインサイトまでは難しいかもしれませんが、大まかな道民の「除雪」に関する想いは見れた気がします。

 本日(2015年11月28日(土))も道内は雪で大荒れの予報ですが、後日、改めて蓄積したデータで分析してみたいと思っています。


<テキストマイニング関連のエントリー>
熱狂!「嵐」札幌ドームコンサートのTwitterとブログを分析してみた。

「嵐」札幌ドームコンサート周辺のTwitterを集めてみた。
http://sapporomkt.blogspot.jp/2015/11/twitter.html 

北海道エリアでつぶやかれているTwitterデータをタダで取得するのだ!
http://sapporomkt.blogspot.jp/2015/02/twitter.html 

2015年日本ハムファイターズ開幕戦で一番話題になった選手は?
http://sapporomkt.blogspot.jp/2015/03/2015.html 

2015年11月25日水曜日

いま話題のIBM「Bluemix(ワトソンくん)」が「老人と海」をサマったら。

 先日、オラクルさんから同社クラウドサービスに関する賞を頂いたこともありまして、んもー、クラウド系の技術に興味しんしんです。

日本オラクル「POCO」コンテスト受賞しましたっ!!
http://sapporomkt.blogspot.jp/2015/11/poco.htm


<2016年1月15日(金)>
「IBM Analytics Japan」の公式アカウントさんにご紹介頂きました!


「Bluemix」とは?


 IBMが提供するクラウド・オファリング(課題解決メニュー)です。
同社のオープンソースPaaS(Platform as a Service) である「Cloud Foundry」をベースにしています。

 高度なインストール方法を知らずとも、ノンプログラミングでクラウド上にWEBアプリケーションを構築することが出来ます。そして、この中では、あの「Watson(ワトソンくん)」と対話することも出来るのです!

http://www.ibm.com/cloud-computing/jp/ja/bluemix/


「Watson(ワトソン)」くんに、お仕事をお願いしてみた。



<今回やったこと>

・BlumixのサービスAPIである「Personality Insight」をCloud上に設置。
・上記にA・ヘミングウェイの「The Old Man and the Sea(邦題:老人と海)」の英語全文を読み込ませました。



<作業工程と結果>

実は先日、札幌市内で開催されたIBMセミナーにてBlumixのデモを拝見しました。わずか数分で、iPhoneの湿度センサーを利用したアプリをノンプログラミングで作成された様子を見て感化されちゃいました(笑)

 
 それでは早速やってみましょう!


 1.「Bluemix」にログイン

  「Bluemix」を使う前に、「IBM ID」を取得する必要があります。登録はとても簡単で無料です。
ただ、ID申請してから指定したメールアドレスにメールが届くまで数分のタイムラグがあるようです。
気にせず、ゆっくり待ちましょう。

 「IBM ID」が取得出来ましたら、画面右上からログインしてください。



 2.「サービス&API」をクリック

「Cloud Foundryアプリ」「仮想マシン」「サービス&API」が表示されますので、「サービス&API」をクリックしてください。画面下に「Speech To Text-lm」というサービス名が表示されていますが、当作業を行う前に別途設置したものなので無視してくださいね。



3.「Watson(ワトソン)」アプリから「Personality Insight」を選択。


 画面が切り替わると、「Watson:人間の専門知識を拡張、拡大、及び促進するコグニティブ・アプリの構築」という説明書きとともに、「Watson(ワトソン)」くんの人工知能を活用したアプリ等が表示されます。


 この中から「Personality Insight」 を選択してください。カーソルを合わせるとアプリの概要が表示されます。関係ないですけど、なんか、アイコンがGoogleのIngressに雰囲気似てますよね。気持あがります!

 説明を見ると「トランザクション・データやソーシャル・メディア・データから洞察を引き出し、心理的特性を識別します」ですって。


 4.「デモ」を選択。

  画面が切りかわったら、少しだけ画面を下部にスクロールさせ、「デモ」を選択してください。
ちなみに、この段階で気づいたかもしれませんが、クレジットカード情報等は一切入力していません。もともと、30日の無料期間が設定されていますが、これなら安心して利用することが出来ますよね。




5.テストデータを投入します。いや、「コピペ」でいいの。

画面が切り替わり、「Personality Insight」 が表示されます。今回は、A・ヘミングウェイの「The Old Man and the Sea(邦題:老人と海)」の英語全文を読み込ませました。

 この作品を選んだ理由は特にありません。著作権を気にしないでいいことと、日本語版を読んだことがあったので思いつきで選びました。

 画面下部のテキストボックス欄に英語文をそのままコピペし「Analyze(分析)」ボタンを押してくださ
「3,500ワード以上ないとPersonalityは分析しづらいよ」的な記載もありますが、処理は問題なく通ります。




「Watson(ワトソン)」くんのお仕事結果。


 まずは、Your Personality。風景描写なども多く記述されているため、「Personality」とするにはやや語弊がありますが、確かに主人公の老人っぽさを感じさせる記述になっています。


 恥ずかしながら今回初めて知ったのですが、「ビッグファイブ」とは、Personalityを5つの要素に分解する心理学のメソッドなんですって。へぇ~。


 こんな感じで分かりやすくマップ化もしてくれます。
まだまだ勉強中ですが、「Bluemix」、メチャクチャおもしろいテクノロジーですね。これはしっかり身につけたいです!



<その他の参考エントリー>
「データ・ビジュアライゼーション」でも便利な「Watson Analytics」。
http://sapporomkt.blogspot.jp/2016/01/watson-analytics_13.html

分析の常識が変わる?「Watson Analytics」すげー!!
http://sapporomkt.blogspot.jp/2016/01/watson-analytics.html

「Watson」先生に、AdSenseビンボーの理由を聞いてみた・・・
http://sapporomkt.blogspot.jp/2016/01/watsonadsense.html

2015年11月22日日曜日

熱狂!「嵐」札幌ドームコンサートのTwitterとブログを分析してみた。

 国民的アイドルグループである「嵐」の札幌ドームコンサートが下記日程で開催されたのは記憶に新しいところ。

11/13(金) ~ 11/15(日) ARASHI LIVE TOUR 2015 Japonism 
http://live-events.a-jp.org/soko/evg/1965.html

 コンサート期間中、札幌には延べ合計15万人以上の「嵐」ファンの皆さんが訪れたことで、連日テレビや新聞で大きな話題になりました。
通常、他のビックアーティストが来札してもここまでの社会現象(地下鉄が激混み、ホテルが取れない等)は起こらないですが、いやー、さすがに「嵐」さんですね^^

 そんなことで、お馴染のソーシャルデータ分析にトライしてみました。ファンの皆さんはどんな発話をネット上で繰り広げたのでしょうか?




こんな感じで分析しました。


分析の目的:
2015年11月13日(金) ~ 11月15日(日)まで札幌ドームにて開催された人気アイドルグループ「嵐」のコンサート (※)に関するソーシャルデータを収集し、どのような点が言及されていたのかを把握する。  ※: ARASHI LIVE TOUR 2015 Japonism

データ取得件数:
Twitter:10,000件    ブログ:1,476件

分析担当者:

ぼくです(笑)
 

結果のご紹介


 今回はグラフや集計表の数が多いのでTwitterデータだけのご紹介です。
まずは、発話件数。こちらのみ、Twitterとブログの合計件数となります。
コンサート期間中最も「嵐」の発話回数が多かったのは、札幌ドームコンサートの最終日であった11月15日(日)でした。
※データ収集を始めたのは11月12日のため、当該日より前の発話データは分析対象外


 続いて、Twitterデータをマップ化してみましょう。
こうやってみると「チケット譲渡」を希望するつぶやきと、「チケット譲渡」の情報を広めるつぶやきが多そうな感じですね。こちらは一定回数以上出現した単語を中心にマップ化しているので、もう少し細かく見ていきましょう。



 まずは、「名詞」の出現回数ランキング。画像が小さい場合はクリックしてくださいね。
改めてみると、「譲り」「定価」等、「チケット譲渡」関連が上位を占めますね。
うーん、本当に都合が悪くて転売した方もいると思いますが、それ以外のケースだとファンの皆さんが可愛そう。確かに人気チケットになるのは仕方ないですが、過度に金銭的な負担をかぶらずに、一人でも多くのファンの方が楽しめる環境が出来るといいですね。

 また、メンバー関連の発話数で多かったのは、「松本潤」さんの「潤くん」「松潤」でした。ただ、Google trendで全メンバーの発話ボリュームを確認したところ、ほぼ同じ件数になったので、もう少し細かく検証した方がいいかも(「ニノ」等の表記ゆれも含めて)。

 加えて、同じ「ジャニーズ事務所」の先輩である「滝沢秀明」さんのラジオ番組であった「嵐」メンバーに関する言及も発話されていましたね。ファンの皆さんの情報収集力、さすがですっ!^^



 今度は、形容詞ランキング。こちらは、「可愛い」「楽しい」「仲良い」などが多かったですね。(例:愛を叫べで片足になる振り付けで毎回フラフラする潤くん。大野の肩に手を置いたり、横向いてアピールするかまってちゃんな潤くん可愛いすぎ)

 また、「やばい」は、ファンの皆さんがコンサートを待ちわびる表現が中心でした(例:みんなの顔がしっかりみれました¥(^o^)/大野君顔小さすぎだよ~( ;ω;`)コンサートいくとやばいっすね。みんな好きだー! )



 最後に、「共起(きょうき)」 ランキング。簡単に言うと、「ある単語と単語の組み合わせ」です。
「潤くん+股」が上位にありますね。こちらは、「Troublemaker」という楽曲で嵐メンバーが手でハートマークを作る際に、松本潤さんの股部分にハート部分が作られたように見えたシーンが注目されたようです。確かに、名詞ランキングを見ると、歌詞の一部である「ハートビート」もありましたもんね。

 また、「嵐+バックダンサー」関連の発話は、「嵐」がバックダンサー時代だった際のエピソードを懐かしんだもののようですね。



 いかがでしたでしょうか?ファンの皆さんでしたら「知ってるよ」なことばかりだったかもしれませんが、このように件数で見えると違った楽しみ方が出来るかもしれませんね。

  今度は、 「ジャニーズカウントダウン2015-2016」でも検証してみようかな^^
下記もご興味ありましたらどうぞ。

「嵐」札幌ドームコンサート周辺のTwitterを集めてみた。
http://sapporomkt.blogspot.jp/2015/11/twitter.html