ラベル R言語 の投稿を表示しています。 すべての投稿を表示
ラベル R言語 の投稿を表示しています。 すべての投稿を表示

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

2017年10月7日土曜日

Cognitive Class R101(無料!)を受講してみた。

R言語入門編がオンライン学べる「R101」コースを受講してみました。
当コース含めて、全て無料で受講できちゃいます!!


実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136  ※実際は不要ですが、あったほうが楽です。

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



そもそも「Cognitive Class」ってなに?


IBMが主導するビックデータに関するオンライン上の学習コミュニティです。
しつこいですが、全部、「無料」ですっ!
インターネットが繋がるパソコン環境をお持ちであれば使えます。なお、パソコンのスペックは高くなくても大丈夫です(OS問わず)。


早速使ってみよう!


以下、簡単に手順含めてご紹介します。

1.Cognitive Classにサインイン
まずは、下記リンクからアクセスし、画面右上の「Sign in」からサインインをおこなってください。
Cognitive Class - Free Data Science and Cognitive Computing Courses

2.受講希望コースを選択する
サインイン後、コース一覧が表示されますので、お好きなコースを選択してください。
今回は、「R101」を選択します。


3.学習スタート!
画面上部にある「Start the Free Course」を押して学習を始めてください。



なお、各コースには、シラバスが用意されているので、どのような学習コンテンツになっているのかすぐに確認できます。「ちょっと、自分が求めている内容とは違うな」と思ったら他のコースも確認してみてください。

ご参考までに、「R101」のシラバスを掲載します。

COURSE SYLLABUS
Module 1 - R basics
Math, Variables, and Strings
Vectors and Factors
Vector operations

Module 2 - Data structures in R
Arrays & Matrices
Lists
Dataframes

Module 3 - R programming fundamentals
Conditions and loops
Functions in R
Objects and Classes
Debugging

Module 4 - Working with data in R
Reading CSV and Excel Files
Reading text files
Writing and saving data objects to file in R

Module 5 - Strings and Dates in R
String operations in R
Regular Expressions
Dates in R

おさえておきたい「合格のコツ」


R101に限らず、各クラスにはテストが設定されており、基準点以下だと不合格となってしまいます。合格すれば証明書やバッチがもらえるので、テスト以外の学習パート含めてしっかりと学び取るコツが重要になります。

(合格のコツ1)Google Chromeを使用する
Cognitive Classは全部英語です。各モジュールで表示されるテストや動画のキャプションも全て英語のため、英語が苦手な方はハードルが高いと感じられるかもしれません。
Google Chromeはページ翻訳や動画と同期を取って表示される英語キャプションも翻訳してくれます。

(合格のコツ2)モジュール別テストはじっくり真剣に答える
各クラスには、「モジュール別」(時間無制限)テストと「最終テスト(1時間制限)」の2種類があり、それぞれの合計点が基準に達していれば合格となります。
そのため、「モジュール別」テストはじっくり真剣に答え、確実に得点をゲットすることが重要となります。

(合格のコツ3)クラスに合わせた実行環境を整備しておく
クラスの内容にもよるのですが、コードを走らせる必要のある場合は、その実行環境を準備しておいた方が確実に回答できるので、面倒でもインストールなどしておきましょう。
R101クラスの場合は、「Rstudio」をインストールするか、Web上で「Rstudio」が無料で使える「Data Scientist Workbench 」を申し込んでおくといいと思います。


最後に、テストの基準に達すると、こんな証明書を発行してもらえます♪

https://courses.cognitiveclass.ai/certificates/3692e71984464638a139933b00b50d27

なお、この「Cognitive Class R101」の修了ですが、IBMが発行する「Data Science Foundations - Level 2」バッチ取得の条件にもなっています。
R言語は他のコンピューター言語と比べ、データフレームなどの考え方が若干特殊なので早いうちに取り組まれた方が宜しいかと思います。


2017年8月29日火曜日

R言語:「stringr」パッケージでレビューデータの加工が簡単(その3)

ほんとに小ネタなのですが、原因気づくのに時間がかかったので備忘録がわりに。
過去、何回かに分けて宿泊レビューのテキストマイニングの前処理を色々やっておりました。

R言語:「stringr」パッケージでレビューデータの加工が簡単。
http://sapporomkt.blogspot.jp/2017/08/rstringr.html

R言語:「stringr」パッケージでレビューデータの加工が簡単(その2)
http://sapporomkt.blogspot.jp/2017/08/rstringr2.html


今回、テキストマイニングで集計したデータ(品詞の頻度など)と、性別や年代といった属性データを掛け合わせた分析するため、後者の分布状況などをヒストグラムなどで確認しようと思ったところ凡ミスしたのでご紹介です。

実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136


ソースコードのご紹介


わかったら何のこともない凡ミスだったのですが、ソースコードは以下です。
データの読み込みプロセスなどは以前のエントリーをご参照ください。

# 宿泊者の満足度(CS)が入っている「rank」でヒストグラムを・・・できません。
hist(hotel2.dat[,"rank"])
 hist.default(hotel2.dat[, "purpose1"]) でエラー:
   'x' は数値でなければなりません


# 各変数のクラスをザラーっと調べてみます。
# 「rank」がcharacter型になっていますね。numeric型じゃなきゃ、ダメだこりゃ。
sapply(hotel2.dat,class)
          rank           user          time1   com_sentence       purpose1
   "character"    "character"    "character"    "character"    "character"
      purpose2       purpose3          time2 reply_sentence          plan1
   "character"    "character"    "character"    "character"    "character"
         plan2      user_name            age            sex            flg
   "character"    "character"    "character"    "character"      "logical"

# rankをnumeric型に変換して元のデータセットに上書きします。
hotel2.dat$rank <- as.numeric(hotel2.dat$rank)

# 念のためチェックします。「rank」がnumeric型になっていますね。
sapply(hotel2.dat,class)
          rank           user          time1   com_sentence       purpose1
     "numeric"    "character"    "character"    "character"    "character"
      purpose2       purpose3          time2 reply_sentence          plan1
   "character"    "character"    "character"    "character"    "character"
         plan2      user_name            age            sex            flg
   "character"    "character"    "character"    "character"      "logical"

# 再度、ヒストグラムにトライです。colには他の色も適用可能です。colors() で色々出てきます。
hist(hotel2.dat[,"rank"], col ="aliceblue")


# せっかくなのでクロス集計もしてみます。
hotel2.crs <- xtabs(~purpose2+sex, data=hotel2.dat)
hotel2.crs

         sex
purpose2   女性 男性
              1    1
  その他      1    1
  一人        6   12
  家族       58   77
  仕事仲間    1    0
  友達        8    6
  恋人        4    7

# 有用性はアレですが、モザイクプロットでも。
# どうてもいいですが、表頭と表側が入れ替わるんですね。
mosaicplot(hotel2.crs)


以上です。

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

2017年8月24日木曜日

R言語:「stringr」パッケージでレビューデータの加工が簡単。

レビューデータのテキストマイニングがしたくて、データ加工プロセスのお勉強なうです。
「stringr」パッケージが使いやすいと評判だったので、今更ながら書いてみました。

実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136


思ってたよりも簡単だったソースコードのご紹介


実施前は難しいかなと思っていましたが、やってみたら意外と簡単でした。

# パッケージの読み込み。
# 「xlsx」形式の読み込みは他にもパッケージがありますが、Javaの導入など面倒が増えるので、このパッケージがオススメです。ただし、「xls」形式は読めません。
library(openxlsx)
library(dplyr)

# データの読み込み
setwd("~/blog/hotel_170819_TM")
hotel.dat <- read.xlsx("170819_hotel.xlsx")

# カラム名を表示します。不要なカラムもたくさん含まれています。
colnames(hotel.dat)
 [1] "url"            "rank"           "com_title"    
 [4] "com_title_link" "user"           "time1"        
 [7] "com_sentence"   "flg1"           "flg1_link"    
[10] "flg2"           "flg2_link"      "flg3"         
[13] "flg3_link"      "purpose1"       "purpose2"     
[16] "purpose3"       "time2"          "reply_sentence"
[19] "plan1"          "plan2_link"     "plan2"

# 分析データをattachします。「hotel.dat$hoge」と入力せずに、hogeで狙ったカラムにアクセスできます。
attach(hotel.dat)

# 分析に必要なカラムだけ抜き出します。見た目はわかりづらいですが、「dplyr」パッケージのおかげです。
hotel2.dat <- select(hotel.dat,rank,user,time1,com_sentence,purpose1,purpose2,purpose3,time2,reply_sentence,plan1,plan2)

# データ内容を確認してみます。
View(hotel2.dat)

今回用いたデータセットでは、user列に、「ユーザー名・年代・性別」データが同一カラムに入っていました。年代・性別は分析に有用なので別カラムに切り出したいです。

小田一弥さん [30代/男性]
↓
user_nameagesex
小田一弥さん30代男性

「おっと、正規表現だな・・・」と思われたあなた、大丈夫です。
自分も不慣れですが、今回はとっても簡単です。

# パッケージを読み込みます。最初は「for」で繰り返し処理を書こうと思ったのですが、こちらの方がずっとシンプルで早いそうです。
library(stringr)

# userの名前と年代・性別を分離
hotel2.dat$user_name <- str_extract(hotel2.dat$user,"^.*さん")
hotel2.dat$age <- str_extract(hotel2.dat$user,"\\d{2}代")
hotel2.dat$sex <- str_extract(hotel2.dat$user,".性")

 View関数で見ると下記のようになります。


# パッケージを読み込みます。
library(rpivotTable)
# グラフ化します
rpivotTable(hotel2.dat)


以上です。

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

2017年8月20日日曜日

R言語:グラフィカルなクロス集計が簡単!〜「rpivotTable」パッケージ

以前、当ブログで紹介したことがあるのですが、Rでグラフィカルなクロス集計が可能な「rpivotTable」パッケージがいつの間にか進化していたので改めて触れてみます。

例えばこんなのがGUIで出来ちゃいます

実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136


パッケージ呼び出し後は、全部GUIで出来ちゃいます


分析対象データの読み込みが終わっていれば、下記3行のコードだけでグラフ作成画面が表示されます。
CRANからインストール出来るのでとてもラクですね。

install.packages("rpivotTable")
library(rpivotTable)
rpivotTable(hotel.dat)

下記は、某旅行サイトに記載されたユーザーレビューからRate:満足度ランキング(5が最高)、sex:レビュー記載者の性別、age:年代を抽出したデータです。
これの変数名がついたボタンはドラッグ&ドロップが可能で、3重クロスも難なく出来ちゃいます。

ちなみに、以前は日本語が表示出来なかったのですが、現バージョンでは問題なさそうですね。

<Table>

<Table Barchart>

 <Heatmap>

<Horizontal Bar Chart>

<Horizontal Stacked Bar Chart>

<Bar Chart>

<Line Chart>

<Area Chart>

グラフタイプは他にも数種類ありますので、ご興味ありましたらお試しください。

自分は、このデータをもとにテキストマイニングを行い、形態素解析後に集計されたTerm(ワード)と上記3つの属性を混ぜ混ぜして色んなことをやろうと思っています。
Rにはクロス集計用のパッケージがいくつかあるので、そちらを使ってもいいのですが、データの概観をとりあえず確認するときは「rpivotTable」パッケージが便利だと思います。

以上です。


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

2017年8月6日日曜日

R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。

「dplyr」パッケージのヘルプを調べていたら「starwars」キャラクターの属性データセットなるものが組み込まれていたのでggplot2によるグラフ化までやってみました。

最終的には、こんなグラフを作ります。


実施環境については、以下の通りです。
・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136
・分析データ:こちらから各自調達してください


「starwars」データセットを「dplyr」でいじってみよう。


■そもそも「dplyr」ってなに?
「R界の神様」「羽鳥」こと、「Hadley Wickham」さんが作ったR環境におけるデータ加工(manipulation)パッケージです。

■実際の手順
「starwars」データセットの読み込み準備が出来た前提で記載します。

# イストール済みの下記パッケージをロードします。
library(dplyr)
library(ggplot2)

# 一応、データセットの中身を確認します。
View(starwars)

スターウォーズシリーズに登場した各キャラクターの属性情報が表示されます。
本当にどこまで合っているかは不明ですが(笑)、身長(height)や種族(species)などのカラムが遊べそうですね。


# 「filter」で「Human」に該当するレコードを抜き出して、dplyrのパイプで渡して「name」と「height」列だけ抜き出して、「arrange」で「height」を降順でソートします。
# 最後の「filter(complete.cases(.))」は「欠損値」レコードの除去です。ローグ1のキャラデータの身長データは欠損してたので。
human_height <- starwars %>%
filter(species == "Human") %>%
select(name,height) %>%
arrange(desc(height)) %>%
filter(complete.cases(.))

# 一旦、データ内容を確認します。
View(human_height)

欠損値を含むレコードを除いた各キャラクターの身長データが降順で表示されます。


最後に、ggplot2でグラフ化します。

# 「reorder」関数は降順ソートをかける役割なので、上記でソート済みなら不要です。
# coord_flip()はX軸とY軸を入れ替えます。これ便利っす。
p <- ggplot(human_height, aes(x=reorder(name,height), y=height)) +
geom_bar(stat = "identity", fill="grey") +
theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +
coord_flip()

p + geom_text(aes(label = height), size = 3, hjust = 0.5, vjust = 3, position = "stack")

これだけの処理で「スターウォーズに登場する人間キャラクターの身長順位」がフォースと共にあなたの手にっ!
「ダースベーダー」って2メートル以上あるんですね。


ちなみに、先ほどのコードの「Human」を「Droid」に差し替えると、一瞬で「ドロイドの身長グラフ」が出力可能です。
こういう部分がRの便利なところですねぇ。


 「birth_year」データも面白そうだったので、先ほどのコードを流用してみました。

birth_year.list <- starwars %>%
select(name,birth_year) %>%
arrange(desc(birth_year)) %>%
filter(complete.cases(.))

p <- ggplot(birth_year.list, aes(x=reorder(name,birth_year), y=birth_year)) +
geom_bar(stat = "identity", fill="grey") +
theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +
coord_flip()

p + geom_text(aes(label = birth_year), size = 3, hjust = 0.5, vjust = 3, position = "stack")

ヨーダ、896歳(笑)


以上です。

R関連エントリー


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

2017年8月5日土曜日

R言語:Rでヘルプを調べる

こちらも地味ですが、R言語でヘルプを調べる際に、あまりしっかり覚えていなかったので備忘録として残しておきます。



■ヘルプの表示

?dplyr
help(dplyr)

上記コマンドのどちらかを入力すると、パッケージ名に該当する(青字部分:今回は「dplyr」パッケージ)ヘルプが表示されます。
自分はいつも後者だけでやってました・・・。














■ヘルプの表示

help(package = "dplyr")

上記コマンドを入力すると、パッケージ名に該当する情報が表示されます。


「DESCRIPTION file.」や「User guides, package vignettes and other documentation.」は1度目を通しておくといいでしょうね。


RSiteSearch("dplyr")

上記コマンドを入力すると、下記メッセージがコンソールに表示された直後にブラウザが起動します。


dplyrパッケージのインストールから利用方法も記載されたページが表示されました。
英語ですが、かなりわかりやすく記載されています。

http://dplyr.tidyverse.org/

以上です。

R関連エントリー


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

R言語:インストール済み/ロード済みパッケージの表示

普段から「覚えよう、覚えよう」と思って都度忘れているので、備忘録代わりに残しておきます。



■インストール済みパッケージの表示

installed.packages()
 
上記コマンドを実行すると、現在、R環境にインストール済みのパッケージ一覧がズラーっと表示されます。我ながらこんなにインストしたのかとビックリしました。








■ロード済みパッケージの表示

(.packages())
   
上記コマンドを実行すると、現在、R環境にロード済みのパッケージ一覧が表示されます。
ちなみに、新たにパッケージをロードする場合は「library()」でしたね。







以上です。

R関連エントリー


「Rの検索関数」まとめ
http://sapporomkt.blogspot.jp/2017/07/r.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

2017年8月4日金曜日

Watson AnalyticsとMeCabで「老人と海」を軽く可視化してみた。

趣味とお仕事のお勉強を兼ねて、形態素解析エンジンの「MeCab」を触っているのですが、「集計結果の可視化にWatsonAnalytics使えば楽かも?」と思って試したらその通りだったので軽くご紹介します。

最終的には、こんな可視化をします。


実施環境については、以下の通りです。
・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136
・分析データ:「青空文庫」よりヘミングウェイの「老人と海」の全文を取得

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

まずは、MeCabで形態素解析。


まずは、形態素解析エンジンである「MeCab」を使って、頻度表を出力します。
環境構築がお済みではない方は下記をご参照ください。

RおよびRStudioのインストール方法(Mac/Windows)
http://qiita.com/daifuku_mochi2/items/ad0b398e6affd0688c97

RとLinuxと...
http://rmecab.jp/wiki/index.php?RMeCab



「形態素解析って難しそう・・・」と感じるかもしれませんが、以下のソースコードをRStudioコンソールにコピペするだけで出来ちゃいますのでご安心を。


# 読み込みファイルがあるディレクトリを指定します
# コード入力よりもRStudioメニューの「Session→Set Working Directory」の方が楽です。
setwd("~/blog/170722_roujin_MeCab/roujin")

# RMeCabパッケージを呼び出しておきます
library(RMeCab)

# 形態素解析を行い、タームと品詞別の頻度表を得ます。たったこれだけ!
roujin_count <- RMeCabFreq("roujintoumi.txt")

# RMeCabFreqで集計した結果を確認します。
View(roujin_count)


RStudio上に下記のようなビューワー形式で表示されます。
左から「Term(形態素)」「品詞分類1」「品詞分類2」「頻度数」となります。


一応、データ構造も確認してみますが、RStudio上でこのデータを可視化するには、ggplot2などを使ってゴニョゴニョするわけですが・・・うーん、ちょっと面倒臭いので楽したいですね。

今回は他のツールで可視化するために、一旦、RStudioから「roujin_count」データを出力します。

# str関数でデータ構造を確認します。
str(roujin_count)
'data.frame':    3214 obs. of  4 variables:
 $ Term : chr  "あの" "いかん" "いかんせん" "いくら" ...
 $ Info1: chr  "フィラー" "副詞" "副詞" "副詞" ...
 $ Info2: chr  "*" "一般" "一般" "一般" ...
 $ Freq : int  1 2 1 1 1 1 2 4 6 1 ...

# write.csv関数を使って集計データをCSV形式で出力します。
# 「quote=FALSE」は、データに引用符の「"」を付けないオプションです。
# 「row.names=FALSE」は、行番号を付けないオプションです。
# 「fileEncoding="CP932" 」は、「Shift-JIS」で出力するオプションとなります。

 write.csv(roujin_count,"roujin_count.csv",quote=FALSE,row.names=FALSE,fileEncoding = "CP932")



可視化は「Watson Analytics」にお任せ。


 ここからは、IBMが提供するクラウド上でビックデータ分析が可能な「Watson Analytics」を用います。

 なお、この時点では何となくはあるのですが、具体的に「こんな可視化をしよう」といったイメージ無しで作業を進めています。 事前にしっかりとしたアウトプットイメージを持ちながら作業を進めることは重要ですが、「とりあえずデータの概観を見たい」といった局面もあると思います。「Watson Analytics」には、データの特性を自動的に解析し、「もしかして、こんな風に見たいと思ってない?」といったオプションを先に提示してくれる機能が実装されています。

以下にその機能の一部と操作手順をご紹介します。
「Watson Analytics」の利用登録がお済みではない方は、下記URLからご登録ください(無料です)

IBM Watson Analytics
https://www.ibm.com/watson-analytics


1.まずは集計データのアップロード
「Watson Analytics」にログインしましたら、画面中央の「Add」ボタンから「Or add your data」→「Drop file or browse」を選択してください。


macOSだとFinder、Windowsだとexplorerが立ち上がりますので、読み込ませたい集計ファイル(この場合、「roujin_count」)を選択してください。


たったこれだけで「Watson Analytics」上に集計ファイルがアップロードされます。


2.可視化の実施
アップロードされた「DATA SET CSV」パネルをクリックすると、「Watson Analytics」が下記のようなオプションを自動提示します。

とりあえず、品詞分類1レベルで大まかなボリューム感を見たいので、一番右を選択します。


品詞別のボリューム感がわかるグラフが瞬時に表示されました。
同じ作家の異なる作品をこのグラフで出力して円の大きさを比較しても面白そうですね。


他の形式でも確認して見たいので、画面右側の「>」マークを押してください。
今後は「Watson Analytics」からオススメされた一番左のグラフを選択してみましょう。


先ほどと同じ「品詞分類1」のグラフが表示されました。X軸は「品詞分類1名称」、Y軸は「品詞分類1別の頻度」となります。
降順でソートしたいので、X軸ラベル「info」を右クリック→「Sort→Descending by value」を選択してください。


簡単に降順ソートができました。
せっかくなので、Term(形態素)別の頻度も見たいので、画面左下の「applied filter」 を選択してください。


「Add a filter」から「Freq」を選ぶと下限値と上限値を入力する欄が表示されるので、バーを動かすか値を直接入力してください。



 「Info1」の 部分をクリックし、「Term」を選択すると下記のように頻度数30以上の全Termが表示されます。


これでは分かりづらいので、もう一度「Add filter」を選択し、「Info1」で「名詞」をフィルターの追加条件として設定すると下記のような名詞頻度数のグラフが表示されます。
※Term数が多すぎたので、頻度の下限値を50に修正しています。


原作を読まれた方は「あー、なるほどね」な結果になったのではないでしょうか。
今回のご紹介は以上です。

このように「Watson Analytics」を用いると、通常の集計ファイルで必要な各変数の形式設定などせずに直ぐに可視化作業に移ることが可能です。
データサイズの大きいファイルでなければ、無料で使えますので、ご興味ありましたら是非お試しください。

Watson関連エントリー


Watson Explorerでディズニーの人気作品をテキストマイニング
http://sapporomkt.blogspot.jp/2017/04/watson-explorer.html

 Watson Explorer Content Analytics(WCA)の紹介動画を紹介したいんです。
http://sapporomkt.blogspot.jp/2017/03/watson-explorer-content-analyticswca.html

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

「データ・ビジュアライゼーション」でも便利な「Watson Analytics」。
http://sapporomkt.blogspot.jp/2016/01/watson-analytics_13.html

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

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

2017年7月23日日曜日

「Rの検索関数」まとめ

備忘録代わりに「Rでの検索関数」をまとめてみました。
実施環境については、以下の通りです。

・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136

apropos関数〜「機能」の検索


・利用したい「機能」の検索に使用する。
・検索キーワードには、単語もしくは単語の一部を指定する。
・「mode引数」にオブジェクトのモードを指定すると、検索結果を絞り込める。

# 「部分一致」での検索
apropos("tit")
[1] "attitude"               "identity"             
[3] "substitute"             "substituteDirect"     
[5] "substituteFunctionArgs" "Titanic"              
[7] "title"

# オブジェクトのモードを確認
mode(Titanic)
[1] "numeric"

# モードを指定して検索すると、先ほどの「Titanic」データセットだけが表示される。
apropos("tit", mode = "numeric")
[1] "Titanic"

find関数〜「環境やパッケージ名」の検索


・指定したキーワードで環境やパッケージ名を検索する。
・「simple.words = FALSE」オプションを指定すると「部分一致」での検索も可能。
・正規表現(以下では文頭を表す「^」を使用)

# iris(アヤメ)のデータセット名を検索。
find("^iris",simple.words=FALSE)

R関連エントリー


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.html

2017年5月20日土曜日

RESASの不動産取引データでheatmapを作ってみた。

前回、「RESAS(リーサス:地域経済分析システム)」で公開されている各都道府県における「大規模土地取引」データで遊んでみました。

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

今回は、このデータを使って「heatmap」を作ってみます。
最終的には、下記のようなアウトプットを目指します。

<2015年:都道府県別の大規模土地取引件数(内訳)>

データの取得方法については、上記の前回エントリーをご覧ください。
なお、実施環境については、以下の通りです。

・macOS Sierra ver10.12.3
・R version:3.3.3
・RStudio:1.0.136

分析手順のご紹介


冒頭のデータ読み込み部分は前回エントリーと同じです。

# データの読み込み
fudousan.dat <- read.csv("fudousan.csv",header = TRUE, stringsAsFactors = F,fileEncoding = "cp932")

# 読み込んだデータ内容の確認
View(fudousan.dat)

head(fudousan.dat)でも確認できますが、個人的にはこちらの方が好きです。


# カラム名の変更
fudousan2.dat <- fudousan.dat %>%
dplyr::rename(year = 集計年,pref_code = 都道府県コード, pref_name = 都道府県名, usage_code = 利用目的種別コード, usage = 利用目的種別名, deal_count = 取引件数.件., deal_field = 取引面積.u.)

# 2015年データの抽出:直近の状況を知りたいので、下記のようにしましたが、抽出したい年数を変えたい場合は「2015」部分を書き換えてください。
# ちなみに、dplyr関数でよく使う「%>%」は、Unixのshellでいう「パイプ」と同じ役割を果たします。RStudio上では「Ctrl+Shift+m」で入力できるので是非覚えましょう。
# 「!=」は「not equal」の意味です。「filter」以降の3条件は「AND」条件として処理されます。
fudousan2015.dat <- fudousan2.dat %>%
dplyr::filter(year == 2015,pref_name != "すべての都道府県", usage != "すべての利用目的")

# エリア x 利用用途 で 取引件数 を抽出:[ ,c(3,5,6)]の( )内は列番号を示しています。
fudousan3.dat <- fudousan2015.dat[,c(3,5,6)]

# 参考までに「縦持ち」データを「横持ち」データに変換してみます。
fudousan4.dat <- fudousan3.dat %>%
tidyr::spread(usage,deal_count)


うーん、まぁ、これぐらいの情報量ならセーフかもしれませんが、ちょっと見づらいですねぇ。

# heatmap作成
p <- ggplot(fudousan3.dat,aes(as.factor(usage),as.factor(pref_name))) +
geom_tile(aes(fill=deal_count)) +
scale_fill_gradient(low="white",high="red") +
theme_bw(base_family = "HiraKakuProN-W3")

# 上記のままだとX軸のラベルが潰れるので、微修正を追加。
p + labs(x = "",y = "") + scale_x_discrete(expand = c(0, 0)) + scale_y_discrete(expand = c(0, 0)) +  theme(axis.ticks = element_blank(), axis.text.x = element_text(size = 10, angle = 330, hjust = 0, colour = "grey50"))

<2015年:都道府県別の大規模土地取引件数(内訳)> 

前回エントリーでも言及しましたが、「北海道」における「資産保有・転売等目的」の取引件数は多いようですね(「大規模」になる土地の広さも影響していると思いますが)。
また、「静岡県」の「病院等その他の利用目的」が多いのも特徴的ですね。

このような感じで、わずか数行のコードでヒートマップが出力出来ちゃいました。
ggplot2の記法がやや取っつきにくいですが、一度コードを書いてしまえば後は転用できるのがRのいいところ。ご興味ありましたら、是非お試しください。

(参考サイト)
ヒートマップで行列を可視化する! -ggplot2を用いたmicroarray発現量の可視化をしよう!
http://tomoshige-n.hatenablog.com/entry/2014/08/15/235510

R関連エントリー


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.html