マナティ

Rではじめよう![モダン]なデータ分析

第6回 訪日外国人の発言内容の「感情分析」を行う

近年増加し続けている「訪日外国人」旅行者は日本でどのような物事に関心を示しているのでしょうか。SNS発言内容の「感情分析」を行うことで動向についてRと拡張パッケージを使って明らかにすることを試みます。

59405_ext_14_0.png

1. はじめに

海外から日本へ訪れる「訪日外国人」旅行者の数(訪日外客数)は、近年増加をし続けています。市街地や観光地を歩けば、日本語よりも海外の言語が多く聞こえてくる、ということも珍しくなくなりました。国際観光の振興を図る日本政府観光局の発表では、昨年2015年の訪日外客数は過去最高の1,973万人超であり [1]、その勢いは年間2,000万人に達する見込みです。訪日外国人の国内での行動や消費の概要に関しては統計データなどを通して読み解くことができますが、その詳細は統計データからは見えにくいものです。一体彼らは日本でどのような物事に関心を示しているのでしょうか。

訪日外国人の詳しい動向を知る手段の1つとして、Twitterを中心としたソーシャル・ネットワーク・サービス(SNS)のデータを活用することが考えられます。それはSNSには個人の意思や行動が内容、時間、場所を問わずに投稿されるからです。例えば美味しい料理を食べた時や非現実的な経験をした時には、記録や共有のためにSNSへ投稿をしたいという気持ちは国籍を超えて共通のものでしょう。旅行先でSNSへ投稿を行うことは、現代では多くの方が経験のあるごく普通な体験であるといえます。加えてSNSデータはその自由度の高さから、統計データで得られない現場の声に近いデータと言い換えることができると考えられます(ただしSNSに投稿される情報は全体の一部でしかないので、データが全体を代表するものではないという前提を理解しておくことが必要です)。

今回はこのSNSデータを利用した訪日外国人の発言内容の「感情分析」を行うことで、その動向について明らかにすることを試みます。SNSデータを統計解析言語Rとその機能拡張であるパッケージ(特に最近開発が行われた新しいパッケージ)によって処理することで、これまで面倒の多かったテキスト処理を簡易に実行できるようになることをこの記事で示します。

2. 訪日外国人データについて

今回の分析では著者の所属する株式会社ナイトレイのサービスの1つであるInbound Insight から得られるSNSデータを利用します。Inbound Insight では、Twitterおよび新浪微博(Sina Weibo 中国国内外で人気のSNS)からデータを取得しており、独自の収集手法によって投稿内容と位置情報、国籍推定の結果などを紐づけることで、訪日外国人の動向を分析することを可能としています。

利用するデータの仕様は以下の通りです。

 ・ TwitterおよびWeiboから収集された2016年4月のSNSデータ
 ・ 中国、アメリカ、イギリス、スペインなど15国籍のユーザー

Inbound Insight ではこの他にも、投稿が行われた地名、施設名、性別などの情報を得ることができます。興味を持たれた方はウェブサイトをご覧ください。

3. 分析に利用するパッケージの用意

分析作業に入る前に、利用するパッケージの準備をしておきましょう。今回実行するテキスト分析に必要な2つのパッケージは、Rパッケージの管理機関であるCRANにも登録されていますので次のコードの実行によりインストールが可能です。

# CRANからのインストール
install.packages("tidytext")
install.packages("sentimentr")
# devtools::install_github("juliasilge/tidytext") # 開発版をインストールする場合はこちらを実行
# devtools::install_github("trinker/sentimentr")

インストールしたパッケージをlibrary()を使ってRの実行環境に読み込みます。

library(tidytext) # 文字データの整形・集計
library(sentimentr) # 感情分析

また次のパッケージも処理のために必要なので読み込んでおきましょう。これらのパッケージのうち、インストールされていないものがあれば、先と同様にinstall.packages()によってインストールを行ってください(これらのパッケージもすべてCRANからインストールが可能です)。

library(magrittr) # パイプ演算子の有効化
library(knitr) # HTMLファイルへの表データ出力
library(feather) # ファイル読み込み
library(tidyr) # データ整形
library(dplyr) # データ操作全般
library(lubridate) # 日付データの処理
library(ggplot2) # 画像描画
library(viridis) # 画像の装飾

4. 前処理とデータの読み込み

分析を始める前にいくつかの処理が必要となります。「1. はじめに」の部分でも述べましたが、投稿文の中に不要な情報が含まれるためです。今回の分析で利用するテキストマイニングの手法を行う上で、純粋なテキストと区分するために除外するなどの処理を行いました。こうしてInbound Insightが提供するSNSデータに前処理を加えてできたのが、次のinbounds_1604.featherファイルです。

こちらのファイルをfeatherパッケージを使って読み込みます。拡張子featherのファイルを用いる理由は、比較的大規模なデータを、データ分析で利用機会の多いRとPythonといった言語間で利用するためです。またデータを軽量なサイズのファイルに圧縮することで高速な読み取りを可能にしています。R言語用のfeatherパッケージには、featherファイルの読み込みと保存のための関数が用意されています。

# Apache Projectの1つに端を発して開発された
# RおよびPythonといったデータ分析環境で利用可能な
# 互換性のあるデータ形式のファイルを読み込む
df.inbs <- read_feather("inbounds_1604.feather")

ファイルをR上に読み込んだら、投稿ごとに識別番号を与えていきます。この処理はdplyrパッケージ内の、変数に処理を加えるmutate()と行番号を与えるrow_number()という関数を利用することで可能となります。

df.inbs %<>%
  mutate(text_n = row_number())

データに対する前処理はこれで終わりですのでいったんデータの中身を確認してみましょう。データ構造を把握するためにglimpse()を利用します。

glimpse(df.inbs)
    Observations: 16,506
    Variables: 3
    $ tweeted_at  <time> 2016-04-01 00:01:31, 2016-04-01 00:04:39, 2016-04...
    $ trimed_text <chr> "Japanese companies are increasingly looking to bl...
    $ text_n      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,...

各変数の値は次の通りです。

 ・ tweeted_at: 投稿時間
 ・ trimed_text: URLやハッシュタグを除いた投稿文
 ・ text_n: 時系列に並べた投稿の順番

5. 訪日外国人のSNS投稿の感情分析

トークン化

「トークン化」とは、文字列の連続であるテキストを意味のある単位に分割する作業です。分割の単位は段落や単語、1文字ごとというように用途に応じて異なります。分割の単位を「トークン」と呼びます。今回は、単語ごとの集計と感情スコアの算出が目的ですので、投稿文を単語ごとにトークン化することになります。

著者プロフィール

瓜生真也(著者)
(Twitter: @u_ribo, GitHub:@uribo) 株式会社ナイトレイにてエンジニア(Rおじさん)として勤務。匿名知的集団ホクソエムの一員。趣味はRパッケージ情報の収集とQiitaやブログへのR記事執筆。 個人ウェブサイト http://suryu.me
匿名知的集団ホクソエム(著者)
ホクソエム (hoxo_m) は架空のデータ分析者であり、日本の若手のデータ分析者集団のペンネームである。当初このデータ分析者集団は秘密結社として活動し、ホクソエムを一個人として活動させ続けた。