Upgrade to Pro — share decks privately, control downloads, hide ads and more …

#イノベーション研究のための実践的データ分析 γ. RESAS API からデータを取得して統計処理したり, テキスト分析で WordCloud や Word2vec で解析したり, Twitter API からツイートを取得して解析したり, 感情の分析をやってみよう

#イノベーション研究のための実践的データ分析 γ. RESAS API からデータを取得して統計処理したり, テキスト分析で WordCloud や Word2vec で解析したり, Twitter API からツイートを取得して解析したり, 感情の分析をやってみよう

#イノベーション研究のための実践的データ分析 γ. RESAS API からデータを取得して統計処理したり, テキスト分析で WordCloud や Word2vec で解析したり, Twitter API からツイートを取得して解析したり, 感情の分析をやってみよう
2019/7/17 慶應義塾大学 経済学部 三田キャンパス 322教室
一橋大学 経済学研究科 原泰史

yasushihara

July 17, 2019
Tweet

More Decks by yasushihara

Other Decks in Education

Transcript

  1. 経済学のための実践的データ分析 γ. RESAS API からデータを取得して統 計処理したり, テキスト分析で WordCloud や Word2vec

    で解析したり, Twitter API からツイートを取得して解析 したり, 感情の分析をやってみよう 慶應義塾大学 三田キャンパス 322教室 16:30-19:00 一橋大学 経済学研究科 原泰史 [email protected]
  2. 今日の内容 Notebook 環境を導入する RISIS API を使ってデータを取得する テキスト分析を行う (Wordcloud, Word2vec, Topic

    Model) Twitter の口コミ分析を行うためにデータ取得を行 い, テキスト分析を行う 感情分析を行う
  3. Jupyter Notebook のインストール(1) • 1. https://anaconda.com にアクセスし, Python3.7 バージョン の

    [Download] をクリック Windows版 Mac版 ダウンロードが終わるまで待つ。
  4. RESAS • https://resas.go.jp • 地域経済分析システム(2015年4月~) • ~Regional Economy Society Analyzing

    System~ • 地方創生のデータ利用の「入口」として、地域経済に関する官民の 様々 なデータを、地図やグラフ等で分かりやすく「見える化」してい るシステム • 各地域が、自らの強み・弱みや課題を分析し、その解決策を検討する ことを後押しするツール • Evidence Based Policy Making を目指した活動 引用; http://www.kantei.go.jp/jp/singi/sousei/resas/pdf/h31-01-07- newinfo.pdf
  5. RISIS • 欧州の大学コンソーシアムが運営する, イノベーションアクティビティに関する データの収集および解析プラットフォーム • RISIS2 Project like the

    RISIS CORE FACILITY (RCF), is organised around 3 major dimensions and activities: • 1. A front end, focusing on users, the ways they access RISIS, work within RISIS and build RISIS user communities. At the core is the RISIS Core facility (WP4). The core facility supports virtual transnational access (WP8) and is accompanied by all the efforts we do to raise awareness, train researchers and interact with them (WP2) and to help them build active user communities (mobilising D4Science VRE, WP7). • 2. A service layer that helps users organise problem based integration of RISIS datasets (with possibilities to complement with their own datasets) – this entails the data integration and analysis services (WP5) and methodological support for advanced quantitative methods (WP6). • 3. A data layer that gathers the core RISIS datasets that we maintain (WP5) and enlarge (WP9), the datasets of interest for which we insure reliability and harmonisation for integration (WP4), and the new datasets that we develop and will progressively open (WP10). https://www.risis2.eu/project-description/
  6. 今日の実習その1 (10分程度) • Python + Jupyternotebook で, DBPedia.org からデータを引っ 張ってこよう

    • 利用するもの • Jupyter Notebook + Python3 • DBPedia.org の SPARQL Endpoint
  7. 2. DBpedia.org から, 経済学に関連するカ テゴリ情報を取得する • インポートした SPARQLWrapper をインスタンスにする •

    そのとき, どの Endpoint からデータを読み出すか設定する (今回は http://dbpedia.org/ontology/) • どういったデータを取り出すかクエリを指定する (特許データベース回参照) • 今回は, 経済学 に関するカテゴリの情報を一括取得する • Query() メソッドでデータを取得し, convert() で読みやすい形に変換する
  8. 実習3; RESAS API からデータを取得する • https://opendata.resas- portal.go.jp/ • API経由でデータを取得する •

    右上の “RESAS-API 利用登 録・ログイン” からアカウン ト登録を行い, API キーを取 得する
  9. 実習3; RESAS をAPI で利用する • 都道府県のコード情報 を取り込む • データを読み込む先の URL

    情報を指定 • URL とともに, APIキー を指定する • データを取り込み, 中身 を確認する
  10. 実習3. RESAS をAPI で利用する • 都道府県ごとの集計値 を取得する • For 文で47都道府県分

    のデータを取得する • 創業比率のデータ • https://opendata.res as- portal.go.jp/docs/api /v1/municipality/foun dation/perYear.html
  11. 実習3. RESAS を API で利用する • 先程取得した東京 都の区別コードリ ストを用い, 各区ご

    との創業比率を取 得する • DataFrame 形式に 変換し, 保存する
  12. 実習3. RESAS をAPI で利用する • 市町村レベルの企業数のデー タを取得する • https://opendata.resas- portal.go.jp/docs/api/v1/muni

    cipality/company/perYear.htm l • 必要あらば, 産業分類のデータ も取得できる • 先程作成した city_list を利用し て, 全市区町村+特別区の企業 数データを取得する
  13. 実習3. RESAS を API で利用する • 細かな解説(1) • 取得するAPIのURL を指定する

    • 後ほどデータを放り込む空の DataFrame を用意する • Zip 関数を使って, city_list.prefCode および city_list.cityCode ごとに 繰り返しの処理を行う • 今回の場合は, prefCode=1 の北海道から, 取得した cityCode ごとにデータを取 得する
  14. 実習3. RESAS をAPI で利用する • 細かな解説(2) • データが存在しない市 区町村があるため, そ

    の場合 “not available” と表示させる • 企業数 (result), 市区町 村名/コード, 都道府県 名/コードを取得する • JSON からDataFrame 形式に変換して, それ をs に追記していく
  15. 実習3. RESAS をAPI で利用する • 出力結果 • データが取得できなかった市区 町村は not

    available と表示さ れる • それ以外のデータがリストとし て表示される
  16. 実習3. RESAS をAPI で利用する • 都道府県ごとに平均値と総数を導出する import numpy as np

    s.groupby('prefName').agg({'value' : [np.sum, np.mean]}) graph_s=s.groupby('prefName').agg({'value' : [np.sum, np.mean]}) print(graph_s)
  17. 実習3. RESAS を API で利用する • 棒グラフをプロットする import matplotlib import

    pandas as pd from matplotlib import pylab as plt # matplotlibのデフォルトフォントをKozuka Gothic Pro に設定 font = {'family' : 'Kozuka Gothic Pro'} matplotlib.rc('font', **font) graph_s graph_s.plot.bar(y=['value'], alpha=0.6, figsize=(15,4)) • デフォルトのplot は日本語に対応していないため, フォントを指定する作業を行う
  18. ここまでのまとめ • Web スクレイピングしなくても, Wikipedia のデータはだいた い取得できる • RDF が使えると,

    無償でデータが活用できる • 多変量データの場合, ローカルPC環境にデータを置かなくても, RISIS などのプラットフォームを使えば解析ができる
  19. 3. Mecab+word2vecで解析し, wordcloud を書いてみる • Jupyter Notebook/Google Colaboratory • Mecab

    • Mecab-ipadic-neologd • Mecab-python-windows (Windows ユーザーの場合) 利用するもの • テキストデータ • 企業の概要データ • 日本の社会科学研究者リスト データセット
  20. MeCab とは • https://taku910.github.io/mec ab/ • 京都大学情報学研究科−日本 電信電話株式会社コミュニケー ション科学基礎研究所 共同研

    究ユニットプロジェクトを通じ て開発されたオープンソース 形態素解析エンジン • 言語, 辞書,コーパスに依存しな い汎用的な設計 • パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSen が採用している 隠れマルコフ モデルに比べ性能が向上 MeCab ChaSen JUMAN KAKASI 解析モデル bi-gram マルコ フモデル 可変長マルコ フモデル bi-gram マル コフモデル 最長一致 コスト推定 コーパスから学 習 コーパスから 学習 人手 コストという 概念無し 学習モデル CRF (識別モデ ル) HMM (生成モ デル) 辞書引きア ルゴリズム Double Array Double Array パトリシア木 Hash? 解探索アル ゴリズム Viterbi Viterbi Viterbi 決定的? 連接表の実 装 2次元 Table オートマトン 2次元 Table? 連接表無し? 品詞の階層 無制限多階層品 詞 無制限多階層 品詞 2段階固定 品詞という概 念無し? 未知語処理 字種 (動作定義 を変更可能) 字種 (変更不 可能) 字種 (変更不 可能) 制約つき解 析 可能 2.4.0で可能 不可能 不可能 N-best解 可能 不可能 不可能 不可能
  21. Mecab をダウンロードする • Windows 10 環境の場合 • https://github.com/ikegami-yukino/mecab/releases • MeCab

    0.996 64bit version を導入する • UTF-8 版で辞書を作成すること • MacOS 環境の場合 • HomeBrew 環境を利用する • https://www.karelie.net/install-mecab-mac/
  22. Mecab-ipadic-NEOlogd とは • https://github.com/neologd/ mecab-ipadic- neologd/blob/master/READ ME.ja.md • 多数のWeb上の言語資源から 得た新語を追加することでカ

    スタマイズした MeCab 用の システム辞書 • Web上の文書の解析をする際 に活用できる • 収録データ(一部) • 人名(姓/名)エントリデータ • ニュース記事から抽出した新語 や未知語をエントリ化したデー タ • ネット上で流行した単語や慣用 句やハッシュタグをエントリ化 したデータ • Web からクロールした大量の 文書データ • 一般名詞/固有名詞の表記ゆれ 文字列とその原型の組のリスト をエントリ化したデータ
  23. 1. Wordcloud • “Mecabと WordCloud を使ってワードクラ ウドを作る” Notebook を参照のこと •

    https://www.dropbox.com/s/fmjsp5ml 82deqps/Mecab%20%E3%82%92%E4% BD%BF%E3%81%A3%E3%81%A6%20w ordcloud%20%E3%82%92%E4%BD%9C %E3%82%8B.ipynb?dl=0
  24. 1. Wordcloud • Wordcloud関数を用いて, ワードクラウドを出力する • Font_path で利用する日本 語フォントを指定する(今回 は同じパスに配置)

    • Mask で, プロットするマス ク画像を指定する • Stopwords に, プロットしな いタームを指定したベクト ル stop_wordsを指定する • wordc.to_file でファイルの 保存名を指定する
  25. 2. Word2vec • テキストデータを解析し, 各 単語の意味をベクトル表現 化する • 単語間の近接性などを測定 することが可能に

    • Skip-Gram Model • 入力された単語を元に周辺語 を出力する, 入力層, 隠れ層, 出力層から構成されたニュー ラルネットワークを規定する 引用; https://www.randpy.tokyo/entry/word2vec_skip_gram_model
  26. 2. Word2Vec • 文を単語に分かち書きし, そ れぞれ入力層と出力層にイ ンプットしニューラルネッ トに学習させていく • 入力層から隠れ層への重み行列;

    W 隠れ層から出力層への重み行列; W’ をそれぞれ計算する • このとき、重み行列の各行のベクトルが, 単語の特徴を示すベクトルになる 引用; https://www.randpy.tokyo/entry/word2vec_skip_gram_model
  27. 2. Word2vec • “Mecabと word2vec で解析する” Notebook を参照のこと • https://www.dropbox.com/s/kt3fxfgzx

    1i6j3g/mecab%20%E3%81%A8word2ve c%20%E3%81%A7%E8%A7%A3%E6%9 E%90%E3%81%99%E3%82%8B.ipynb? dl=0
  28. 2. Word2vec • 分かち書きしたファイルに 基づき, Word2vec モデル を生成する • このとき

    • Min_count; 単語の出現回数 • Window; 入力単語からの最 大距離 • Size; ベクトルの次元数 • Sg=1; skip-gram 形式での モデリング • iter; 学習の反復回数 • 最後にファイルを保存する
  29. Similarity Words の抽出(from 経営学者リスト) イノベーション マーケティング論 技術経営 コーポレート・ガバナンス 医療 0.92人的資源

    0.92MOT 0.98 神戸大学大学院経 営学研究科 0.93 静岡 0.91評価 0.92開発 0.92第一人者 0.92 地域 0.91ほか 0.91システム 0.92人 0.91 経営情報学 部 0.9勲 0.91知識 0.91組織論 0.91 県立大学 0.88技術 0.9マネジメント 0.9および 0.9 センター 0.88流通 0.9監事 0.88消費者 0.89 研究科 0.87分析 0.9課題 0.85にて 0.89 経営情報 0.87委員会 0.9Certified 0.85問題 0.88 研究所 0.84課題 0.9客員研究員 0.84受章 0.88 所長 0.83人 0.89技術 0.82期 0.87 長 0.82監事 0.89関係 0.82現代 0.87 准教授 0.81および 0.89プロジェクト 0.82勲 0.87 国際企業 0.8多摩大学 0.89 マーケティング 論 0.81アドバイザー 0.87 経済 0.8地域経済 0.88領域 0.81及び 0.87 研究員 0.79サービス 0.88ホスピタリティ 0.8社会学 0.86
  30. 3. Topic モデル • 文章における単語の出現確率 を推定するためのモデル • 出現する単語の種類と数が, トピック(カテゴリ) によって

    異なると仮定する • 各文章は複数のトピックによっ て構成されており, 各トピック の単語分布を合算された形で単 語が生成される https://qiita.com/icoxfog417/items/7c944cb29dd7cdf5e2b1
  31. 3. Topic モデル • 必要なパッケージ をインポートする • 元文章からターム を取り出し, キー

    ワードを抽出する • 今回のデータの場 合, 社会学者ひとり ひとりのタームが 抽出されたベクト ルが形成される 参考文献; https://paper.hatenadiary.jp/entry/2016/11/06/212149
  32. 3. Topic モデル • 出力結果 1602 ソーシャルワーク 2 1265 ソーシャル・キャピタル

    2 1524 タレント 2 1403 テレコム 2 725 テレビ 6 793 テーマ 5 559 デザイン 3 1451 デュルケーム 2 395 ドイツ 8 811 ニュース 3 1153 ネット 3 414 ネットワーク 10 310 ノンフィクション 3 33 バークレー 2 1467 フィールドワーク 3 1204 フェミニスト 2 1154 フェミニズム 3 1311 フェリス女学院大学 2 34 フランス 8 458 プロジェクト 3 415 ヘイトスピーチ 2 649 ペンネーム 2 1608 ホームレス 2 1057 ポスト 2 1058 ポストコロニアル 2 101 ポピュラー 3 679 マス 8 620 マスコミ 2 54 マスコミュニケーション 9 55 マスメディア 4 1126 マックス・ウェーバー 2 571 マックス・ヴェーバー 4
  33. まとめ; テキスト分析で出来そうなこと • 共起ネットワーク • 言葉同士の関係性を明示化し, 可視化する • WordCloud •

    みんなのなんとなくのイメージの可視化 • Word2vec • 言葉のベクトル化により, モデルへの組み込みが可能 • 被説明変数?説明変数? • Topic モデル • グルーピングの可視化 • 類似語の提案
  34. 今日の実習; その2 • 取得したテキストデータを用 いて, 分析を行う • Wordcloud の作成 •

    Word2vec モデルの作成 • Topic モデルの作成 などを試行して, 結果を出力す ること
  35. b. Twitter の API キーを取得する • Access Token & access

    token secret の Create をクリックする
  36. d. ハッシュタグに基づきデータを取得す る • 利用するパッケージ (tweepyと datetime) をインポートする • b.

    の作業で取得した Consumer_key, Consumer_secret, Access_token, Access_secret を 指定する • 検索キーワードを変数として格 納する • ツイートを取得する 参考; https://qiita.com/kngsym2018/items/3719f8da1f129793257c
  37. 5. 感情分析 • Ekman and Friesen (1971) • 表情の研究を通じ, 感情表現には普遍的

    な6つの感情 (怒り, 嫌悪, 恐怖, 喜び, 悲 しみ, 驚き) があることを示す. • ただし, 西洋文化圏と東洋文化圏では表 情の表出に違いがある. • 参照 • 日本人の基本6感情の表情は「エクマン理 論」に従うか? – 人工知能を用いて検証 • https://academist- cf.com/journal/?p=10185 • https://ocw.mit.edu/courses/brain-and- cognitive-sciences/9-00sc-introduction- to-psychology-fall-2011/emotion- motivation/discussion-emotion/ © Paul Ekman. All rights reserved.
  38. 5. 感情分析 • git から sentiment_ja パッ ケージを取得する • https://github.com/sugiyam

    ath/sentiment_ja • 展開したディレクトリ (sentiment_ja) に移動する
  39. 5. 感情分析 • 出力結果 • [{'sentence': '三田でラーメン二郎の本店でヤサイカラメアブラマシマ シの二郎を食べるのは素晴らしい', 'emotions': {'happy':

    '7.0', 'sad': '1.0', 'disgust': '1.0', 'angry': '1.0', 'fear': '1.0', 'surprise': '12.0'}}, {'sentence': '行列は切ない', 'emotions': {'happy': '1.0', 'sad': '8.0', 'disgust': '5.0', 'angry': '3.0', 'fear': '1.0', 'surprise': '1.0’}}] • Happy, sad, disgust, angry, fear, surprise で分類される
  40. 参考文献 • pythonでgensimを使ってトピックモデル(LDA)を行う • https://paper.hatenadiary.jp/entry/2016/11/06/212149 • 「OK word2vec ! "マジ卍"の意味を教えて」

    Pythonで word2vec実践してみた • https://www.randpy.tokyo/entry/python_word2vec • models.word2vec – Word2vec embeddings • https://radimrehurek.com/gensim/models/word2vec.html • 15分でできる日本語Word2Vec • https://qiita.com/makaishi2/items/63b7986f6da93dc55edd
  41. 参考文献(2) • Pythonで文字列を分割(区切り文字、改行、正規表現、文字 数) • https://note.nkmk.me/python-split-rsplit-splitlines-re/ • WindowsでNEologd辞書を比較的簡単に入れる方法 • https://qiita.com/zincjp/items/c61c441426b9482b5a48

    • Windows 10 64bit で python + Mecab • https://qiita.com/kuro_hane/items/64e39d5deeb3f876b421 • Windows10(64bit)/Python3.6でmecab-python環境構築 • http://blog.livedoor.jp/oyajieng_memo/archives/1777479.html
  42. 参考文献(3) • MeCab: Yet Another Part-of-Speech and Morphological Analyzer •

    https://taku910.github.io/mecab • mecab-ipadic-NEologd : Neologism dictionary for MeCab • https://github.com/neologd/mecab-ipadic-neologd • Word2Vecを用いた類義語の抽出が上手く行ったので、分析を まとめてみた • https://qiita.com/To_Murakami/items/cc225e7c9cd9c0ab641e • 自然言語処理による文書分類の基礎の基礎、トピックモデルを 学ぶ • https://qiita.com/icoxfog417/items/7c944cb29dd7cdf5e2b1
  43. To whom it may concern… • 今日の内容は一橋大学講義「経済学のための実践的データ分 析」の一部を加筆修正したものです • 講義資料は以下にアップロードしているので,

    ご興味あれば御 覧ください • https://speakerdeck.com/yasushihara/ • https://www.slideshare.net/yasushihara • 似たような出張編を, 7/20に早稲田大学でも開催予定です.