テキストマイニング

【R】RMeCabを使って人のツイートのポジティブとネガティブな割合を表示する

ネガティブ ポジティブ (1)

今回はRを使って、人のツイートを分析していきます。

実際にどんな分析をしていくのか?というとポジティブなことばの割合とネガティブなことばの割合を出していきます。

例えばネガティブな言葉の割合が80%とかですね。

感情分析をするという感じですね。

もしエラーがおきたらteratailで質問してみてください。エンジニアさんやプログラマーさんが教えてくれますよ。

今回の内容・概要

目的

RMeCabを使って、人のツイートを解析する。

ポジティブな言葉の割合が多いのか、ネガティブな言葉が多いのか調べる。

実行環境

  • Window10
  • R バージョン 3.4.4

MacでもLinuxでも可ですが、R

必要なもの

  • MeCab
  • RMeCab
  • PN Table
  • TwitterAPI(アクセスキー・トークン)

必要なパッケージ

twitteRTwitterAPIを使うための道具
dplyrデータフレームの操作が楽にできる
magrittrパイプ演算子が使える。dplyrと相性良い
stringr文字列の処理をするため
RMeCab形態素分析するため

人のツイートのポジティブとネガティブな割合を解析

流れ

↑は下準備です。

もしできていない方は、そこをクリックしてください。関連記事に飛びます。

また、MacやLinuxの場合は「MeCab R インストール」と調べていただくと、手順がでると思われます。

●アクセスキー・トークンも取得でき、RMeCabも使える状態の人

 ⑴ツイートのテキスト部分を活用できる形にする作業

  1. TwitterAPI認証
  2. ツイート取得
  3. テキスト部分取得
  4. いらない部分削除
  5. 文字コード変換
  6. ファイル作成
  7. 名詞・動詞など取得する
  8. 長い列名変える(好み)

 ⑵PN Tableを使える形にする

  1. PN Tableの読み込み
  2. データをわかりやすく見える形にする
  3. ⑴と結合

 ⑶ポジティブ・ネガティブ割合

  1. 割合を求める
  2. その他にもいろいろできる

長くてごめんなさい。

でもね、やってみると難しくないです。

スポンサーリンク

⑴ツイートのテキスト部分を活用できる形にする作業

  1. TwitterAPI認証
  2. ツイート取得
  3. テキスト部分取得
  4. いらない部分削除
  5. 文字コード変換
  6. ファイル作成
  7. 名詞・動詞など取得する
  8. 長い列名変える(好み)

1.TwitterAPI認証

認証

##1
#パッケージ読み込む
library(“twitteR”)

#下に自分のアクセスキー・トークン入力。””は残す
consumerKey <- “○○○○○○”
consumerSecret <- “○○○○○○”
accessToken <- “○○○○○○”
accessSecret <- “○○○○○○”

#認証
options(httr_oauth_cache = TRUE)
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)
#”Using direct authentication”が表示されたら成功

エラーが出た場合はtwitterRに依存しているパッケージが必要になります。このパッケージ不安定が売りなんでね。

  1. “base64enc”
  2. “bit64”
  3. “rjson”
  4. “DBI”
  5. “httr”

この子たちもエラー起こしたら、インストールして読み込んでいきましょ。

2.ツイート取得

ツイートの取得

##2
#ツイートの取得
tweets <- userTimeline(“gumimomoko”, 1000)

userTimeline(“○○”, 取得するツイート数)@○○のツイートを取得

うちのアカウント「gumimomoko」ではなくでもかまいません。好きなアーティストでも大丈夫。

「1000」じゃなくてもかまいませが、20000とかやってくとTwitterAPIに制限がかかってしまい使えなくなってしまう場合があります。

とりあえず「1000」でいきましょ。あと「1000」にしたからといって、1000ツイートを取得できるわけでもありません。

なんか300とか500とかになったりします。そういう仕様なので、気にしないでください。

3.テキスト部分取得

テキスト部分取得

##3
#テキスト部分を取る
texts <- sapply(tweets, statusText)

sapply(A, statusText)Aのテキスト部分を取る

さきほど取得したツイートには、多くいらない部分が含まれています。「tweets」で実行してみるとわかりますので、興味ある方は是非。

そのツイートのテキスト部分だけを取っていきます。

4.いらない部分削除

いらない部分の削除

##4
#パッケージの読み込み
library(dplyr)
library(magrittr)
library(stringr)

#いらない記号(ID・URL・記号)を取り除くことができるASCLL
texts %<>% str_replace_all(“\\p{ASCII}”, “”)

# 欠損値を省く
texts <- texts[!is.na(texts)]

ツイートのテキスト部分を抽出したとしても、まだ無駄な部分があります。

それも取り除いていきます。

5.文字コード変換(Windowのみ)

コード

##5
#windowsのみ文字コード変換
texts <- iconv(texts , from = “UTF-8”, to = “CP932”)

Mac・Linuxはこの作業はスルーでお願いします。

6.ファイル作成

コード

##6
#ファイルの結合と保存
#取得したツイートを一つのファイルにして保存
texts2 <- paste(texts, collapse =””)

# 一時的なファイルを作る
xfile <- tempfile()

#先ほどのファイルに結合したツイートを書きだす
write(texts2, xfile)

ファイルにしなくてもできると思ったんですが、できなかったので、一度ファイルにします。

7.名詞・動詞など取得する

取得する品詞をきめる

##7
#名詞・動詞などの残す部分を決める 
library(RMeCab)
twitext <- docDF(xfile, type = 1, pos = c(“動詞”,”名詞”,”形容詞”))

twitext %<>% filter(!POS2 %in% c(“サ変接続”,”非自立”,”数字”,”接尾”))

当然、名詞だけ、動詞だけということもできます。

また「動詞、名詞、形容詞」の中で「サ変接続、非自立、数字、接尾」を含むものを除去してます。

8.長い列名変える(好み)

列名を変える

##8
#列名の変更(FREQにする)
twitext %<>% select(everything(), FREQ = starts_with(“file”))
#さっき作った一時的ファイルを消す
unlink(xfile)

【R】TwitterAPIとMeCabとwordcloud使い、人のツイートの単語出現頻度を可視化するで変更したように、こちらも変更していきます。

こっちの方が見やすいです。

⑴のコード全体

⑴全体コード

##1
#パッケージの読み込む
library(“twitteR”)
#下に自分のアクセスキー・トークン入力。””は残す
consumerKey <- “○○○○”
consumerSecret <- “○○○○”
accessToken <- “○○○○”
accessSecret <- “○○○○”
#認証
options(httr_oauth_cache = TRUE)
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)
#”Using direct authentication”が表示されたら成功

##2
#ツイートの取得
tweets <- userTimeline(“gumimomoko”, 1000)

##3
#テキスト部分を取る
texts <- sapply(tweets, statusText)

##4
#いらない部分の削除
library(dplyr)
library(magrittr)
library(stringr)
#いらない記号(ID・URL・記号)を取り除くことができるASCLL
texts %<>% str_replace_all(“\\p{ASCII}”, “”)
# 欠損値を省く
texts <- texts[!is.na(texts)]

##5
#windowsのみ文字コード変換
texts <- iconv(texts , from = “UTF-8”, to = “CP932”)

##6
#ファイルの結合と保存
#取得したツイートを一つのファイルにして保存
texts2 <- paste(texts, collapse =””)
# 一時的なファイルを作る
xfile <- tempfile()
# 先ほどのファイルに結合したツイートを書きだす
write(texts2, xfile)

##7
#名詞・動詞などの残す部分を決める 
library(RMeCab)
twitext <- docDF(xfile, type = 1, pos = c(“動詞”,”名詞”,”形容詞”))

twitext %<>% filter(!POS2 %in% c(“サ変接続”,”非自立”,”数字”,”接尾”))

##8
#列名の変更
#列名をFREQにする
twitext %<>% select(everything(), FREQ = starts_with(“file”))

スポンサーリンク

PN Tableを使える形にする

  1. PN Tableの読み込み
  2. データをわかりやすく見える形にする
  3. ⑴と結合

1.PN Tableの読み込み

PN読み込み

##1
#windows
pn <- read.table(“http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic”,
sep = “:”, stringsAsFactors = FALSE)

#Mac.Linux
pn <- read.table(“http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic”,
sep = “:”, stringsAsFactors = FALSE,fileEncoding = “CP932”, encoding = “UTF-8”)

read.table(URL)URLの表読み込み

ポジティブな言葉とネガティブな言葉が書いてある表を読み込んでいきます。

確認

head(pn)

これでしっかりURLが読み込みができたか、確認できます。

2.データをわかりやすく見える形にする

見えやすく

##2
#一部抽出・名前変更
pn2 <- pn %>% select(V1, V4) %>% rename(TERM = V1)
pn2 %<>% distinct(TERM, .keep_all = TRUE)

#データ表示
head(pn2)

select(V1, V4) %>% rename(TERM = V1)V1,V4を選択し、V1の列名をTERMにする
distinct(TERM, .keep_all = TRUE)TEAMで重複しているものを削除

名前を変えたのは長いからです。また、名詞とか自立語とかの表示はいらないので、削除してます。

head(pn2)を実行するとこんな感じになります。名前がしっかり変わってますね。

キャプチャ

3.⑴と結合

⑴と結合

##3
#⑴結合
twitext2 <- twitext %>% left_join(pn2)

#データ表示
head(pn2)

#TERM V4だけ選んで表示
twitext2 %>% select(TERM, V4) %>% arrange(V4) %>% head(10)

twitext %>% left_join(pn2)twitextにpn2を結合させる

2018/4/19日現在

ネガティブ ポジティブ

⑵全体コード

⑵全体コード

###⑵
##1
#windows
pn <- read.table(“http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic”,
sep = “:”, stringsAsFactors = FALSE)

#Mac.Linuxの方
pn <- read.table(“http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic”,
sep = “:”, stringsAsFactors = FALSE,fileEncoding = “CP932”, encoding = “UTF-8”)

head(pn)

##2
#一部抽出・名前変更
pn2 <- pn %>% select(V1, V4) %>% rename(TERM = V1)
pn2 %<>% distinct(TERM, .keep_all = TRUE)

#データ表示
head(pn2)

##3
#⑴結合
twitext2 <- twitext %>% left_join(pn2)
head(pn2)

#TERM V4だけ選んで表示
twitext2 %>% select(TERM, V4) %>% arrange(V4) %>% head(10)

スポンサーリンク

⑶ポジティブ・ネガティブ割合

  1. ネガティブとポジティブな言葉の割合を求める

1.ネガティブとポジティブな言葉の割合を求める

コード

##3
#ポジティブ・ネガティブ割合
poji <- twitext2 %>% summarize( sum (V4 > 0, na.rm = T))
nega <- twitext2 %>% summarize( sum (V4 < 0, na.rm = T))

#ネガティブな割合
print(nega/(poji+nega))

summarize( sum (V4 > 0, na.rm = T))V4>0以上はポジティブな言葉の割合。na.rm=Tは欠損値を無視してくれる

PN Tableでは、ポジティブな言葉は0以上、ネガティブな言葉は0以下に表されています。

そこでポジティブな言葉をpoji、ネガティブな言葉をnega変数にいれます。さらにnega/(poji+nega)を行うことでネガティブな言葉を表示することができます。

他にも色々できるので、追記していきます。

⑶全体コード

⑶全体コード

###⑶
##1
#ポジティブ・ネガティブ割合
poji <- twitext2 %>% summarize( sum (V4 > 0, na.rm = T))
nega <- twitext2 %>% summarize( sum (V4 < 0, na.rm = T))

#ネガティブな割合
print(nega/(poji+nega))

全体コード

全体コード

###⑴
##1
#パッケージの読み込む
library(“twitteR”)
#下に自分のアクセスキー・トークン入力。””は残す
consumerKey <- “○○○○”
consumerSecret <- “○○○○”
accessToken <- “○○○○”
accessSecret <- “○○○○”
#認証
options(httr_oauth_cache = TRUE)
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)
#”Using direct authentication”が表示されたら成功

##2
#ツイートの取得
tweets <- userTimeline(“gumimomoko”, 1000)

##3
#テキスト部分を取る
texts <- sapply(tweets, statusText)

##4
#いらない部分の削除
library(dplyr)
library(magrittr)
library(stringr)
#いらない記号(ID・URL・記号)を取り除くことができるASCLL
texts %<>% str_replace_all(“\\p{ASCII}”, “”)
# 欠損値を省く
texts <- texts[!is.na(texts)]

##5
#windowsのみ文字コード変換
texts <- iconv(texts , from = “UTF-8”, to = “CP932”)

##6
#ファイルの結合と保存
#取得したツイートを一つのファイルにして保存
texts2 <- paste(texts, collapse =””)
# 一時的なファイルを作る
xfile <- tempfile()
# 先ほどのファイルに結合したツイートを書きだす
write(texts2, xfile)

##7
#名詞・動詞などの残す部分を決める 
library(RMeCab)
twitext <- docDF(xfile, type = 1, pos = c(“動詞”,”名詞”,”形容詞”))

twitext %<>% filter(!POS2 %in% c(“サ変接続”,”非自立”,”数字”,”接尾”))

##8
#列名の変更
#列名をFREQにする
twitext %<>% select(everything(), FREQ = starts_with(“file”))

###⑵
##1
#windows
pn <- read.table(“http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic”,
sep = “:”, stringsAsFactors = FALSE)

#Mac.Linuxの方
pn <- read.table(“http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic”,
sep = “:”, stringsAsFactors = FALSE,fileEncoding = “CP932”, encoding = “UTF-8”)

head(pn)

##2
#一部抽出・名前変更
pn2 <- pn %>% select(V1, V4) %>% rename(TERM = V1)
pn2 %<>% distinct(TERM, .keep_all = TRUE)

#データ表示
head(pn2)

##3
#⑴結合
twitext2 <- twitext %>% left_join(pn2)
head(pn2)

#TERM V4だけ選んで表示
twitext2 %>% select(TERM, V4) %>% arrange(V4) %>% head(10)

###⑶
##1
#ポジティブ・ネガティブ割合
poji <- twitext2 %>% summarize( sum (V4 > 0, na.rm = T))
nega <- twitext2 %>% summarize( sum (V4 < 0, na.rm = T))

#ネガティブな割合
print(nega/(poji+nega))

ちょっとネガティブな割合が大きくなるような印象です。

参考にさせてもらった記事・データ

R+RMeCabで感情分析

東工大学の高村研究室で公開している「PN Table」を利用させていただきました。 とても便利なツールです。

研究を行う人は必見です。

データサイエンティストになりたいなら

  • データサイエンティストになりたいけど、漠然とRの勉強をしている

もしそうならば、戦略的に勉強しましょう。戦略的に勉強しなければデータサイエンティストになるのは夢のままになってしまう可能性があります。

データサイエンティストになるためのおすすめの勉強方法・講座を3つご紹介します。

①通勤講座でデータサイエンティストの講座を受ける

  • ビジネスにデータを活用したいが方法が分からない。
  • ビックデータをどう扱えばよいか分からない。
  • データサイエンティストになりたいが、どうすればいいのか分からない。

このような場合、データサイエンティスト基礎講座 を受けてるのはどうでしょうか。動画によって、上のような悩みを解決してくれます。

まずデータサイエンティスト の基礎を学んでみて、ビジネススキルが足りなかったらUdemy で勉強するのが良いです。

いまなら10%クーポンもありますし、無料の動画もあります。今行動しないと一生やりませんので、もう少し下を見てからで良いのでご覧ください。

▼まずデータサイエンティストの基礎を学ぶ▼

データサイエンティストの基礎を学ぶ>>

②Udemyのデータサイエンティスト講座を受ける  

「Udemy」も動画で学ぶタイプの講座です。データサイエンティストになるための講座がそこそこあります。

通勤講座とちがうのが安さです。どちらも内容の質が良いことは間違えないのですが、Udenyは安めです。

「自分この部分の知識がないな」と思ったときの補強でも使えますね。一度講座をとって気に入らなかったら、全額返金できます。

▼データサイエンティストの基礎を学んだり、知識の補強をする▼

 Udemyのデータサイエンティスト講座を受ける>>

③データサイエンティスト育成スクールにいく

本気でデータサイエンティストになりたいなら、このスクールに行くのがおすすめです。

データサイエンティストに必要な知識は膨大です。統計学、機械学習、人工知能、データベース、プログラミング、ビジネススキルなどなど。

その知識をデータサイエンティストとしての経験がある先生たちが、オフラインで教えてくれます。

動画です。ご覧ください。

どうですか、めっちゃ良いですよね。ここは他の講座と違うなと思った部分があるのですが、転職支援もしてくれます。

さらに

データサイエンティスト全コースを一括で申し込んでいただいた方のみ、
ブートキャンプ終了時にご満足いただけない場合は受講料を全額返金します。

返金保障もあります。

もしまだ心配な方は説明会もありますので、いって見てください。

  • 未経験からデータサイエンティスト目指せる(Rを触っているあなたならもっと安心)
  • 返金保障あり
  • データサイエンティストに必要な知識を学べる
  • オフライン
  • データサイエンティスト経験がある先生に質問ができる
  • 転職支援あり

もう一度言います。本気でデータサイエンティストを目指すならおすすめです。

▼データサイエンティストになる▼

未経験からデータサイエンティストになる>> 

どれにしますか

①と②の場合はまず基礎を学んで、足りないところを補充して転職という感じです。③は転職支援もあるので安心です。

思いたったときに行動しなければ意味がありません。将来的にデータサイエンティストになりたいなら今すぐ行動しましょう。

データサイエンティストの基礎を学ぶ
通勤講座のデータサイエンティストの講座を受ける  

データサイエンティストの基礎を学んだり、知識の補強をする
Udemyのデータサイエンティスト講座を受ける  

本気でデータサイエンティストを目指す
データサイエンティスト育成スクールにいく

 

ABOUT ME
さぎのみや
さぎのみや
ゲーム開発を手助けるメディア【ユニシャー】を運営しているさぎのみやの個人ブログです。自分の考えや役にたったことを書いております。自分の芯がある人が好きです。→Amazonほしいものリスト
ゲーム開発を手助けるメディア「Unishar-ユニシャー」
  • Unityを勉強したい
  • とりあえずUnityを使ってゲームを作りたい

このような悩みを解決してくれる、アクセス急上昇中のUnityメディア「Unishar-ユニシャー」

Unityでのゲーム開発に役立つことばかりです。

Unity専門メディア「Unishar-ユニシャー」→