早稲田大学 #イノベーション研究のためのいろいろなデータさがし2020夏: 1/1

早稲田大学 #イノベーション研究のためのいろいろなデータさがし2020夏: 1/1

早稲田大学 #イノベーション研究のためのいろいろなデータさがし2020夏: 1/1
1-1. イントロダクション
1-2. スクレイピングその1; Pandas
1-3. スクレイピングその2; BeautifulSoup
1-4. API その1; RESAS
1-5. API その2; Twitter API
1-6. テキスト分析

F5f758ca2ec0de2da9781ce9391d9c6c?s=128

yasushihara

July 11, 2020
Tweet

Transcript

  1. 早稲田大学 「イノベーション研究のための いろいろなデータさがし」 2020夏: 1/1 1-1. イントロダクション 1-2. データを集めるいくつかの方法 1-3.

    スクレイピングその1; Pandas 1-4. スクレイピングその2; BeautifulSoup 1-5. API その1; RESAS 1-6. API その2; Twitter API 1-7. テキスト分析 一橋大学大学院経済学研究科 原泰史 yasushi.hara@r.hit-u.ac.jp
  2. 今日の内容 • 13:00-13:25 • 1-1. イントロダクション • 1-2. データ分析までに必要なこと •

    13:25-13:55 • 1-2. スクレイピングその1; パチンコホール • 1-3. スクレイピングその2; 補助金ポータル • 13:55-14:05 • 休憩 • 14:05-14:20 • 1-4. API その1; RESAS • 14:20-14:40 • 1-5. API その2; Twitter API • 14:40-14:55 • 1-6. テキスト分析 • 14:55-15:00 • 質疑応答
  3. 1.1 データを 分析するということ

  4. なぜ、データが必要 なのだろう?

  5. たとえば; 経営といえば ひと もの かね 情報

  6. 経営を分析する (オールドスクールな方法) ひと もの かね 情報 話を聞きにいくか、文献を調査することでなぜその企業/製品がうまく いったのか、要因を経営理論に照らし合わせて解析する(定性的調査)

  7. 経営を分析する (最近みんなが好きな手法) ひと もの かね 情報 データベースを入手するか、サーベイデータを作成し、それらの データセットを接合し合うことで、なぜその企業/製品がうまくいっ たのか、要因を経営理論に照らし合わせて解析する(定量的調査)

  8. Q. データを使えばビジネスはわかるか? もしくは、政策評価はできるか? • ちょっと昔に言われたこと • 「データはあくまで数をみているだけ。経営者の心の機微や組織体制の細やかな変容や経 営者の意思決定の変化を、細かくデータで追うことは出来ない。」 • ここ数年、実際の世の中で起きたこと

    • テキスト解析手法の進化 • 因果推論の推定手法の開発と普及 • 機械学習のあっという間の普及 • データベースの普及と重要性が認識されるようになった • データ解析に係る導入コストの低下 • as 統計ソフトを買わなくても良くなった • A. 2020年5月段階の(個人的な)答え • データがあれば、かなり色々なことがわかる。データ分析の技法は取得したほうが良い。 • データで説明しきれない特殊性や特筆性については、まだ定性分析に出来ることはある
  9. では、データを使った分析に必要なもの データ、もしくはデータベース 分析手法 分析を行うためのツール

  10. 企業活動に関連するデータベース 研究開発 調達 生産 販売 マーケ ティング 科学技術基本 調査(総務省) 企業活動基本調査

    (経済産業省) 経済センサス (総務省) 政府系 データベース 商用 データベース 帝国 データバンク 特許 データ ベース 論文 データベース (WoS, Scopus, Lends) INITIAL (Entrepedia) POSデータ (ex. インテージ) SNS (Twitter, Facebook, TikTok) 商用と政府系のデータベー スを組み合わせれば、企業 行動をデータで「辿る」こ とは可能になる
  11. 帝国データバンクデータベース (Commercial) • 一橋CAREE センターで利用可能なデータセット • パネルデータ化が可能. • アーカイブデータも利用可能(政策フォーラム午前中の岡室先生の発表) •

    ご関心のある先生方は、是非ともお問い合わせください 企業信用調査報告書に関するデータ 取引データ,出資データ,銀行取引データ 企業財務データベースに関するデータ 決算書データ 企業概要ファイルに関するデータ 取引データ,企業情報データ,銀行取引データ その他企業に関するデータ 合併データ,倒産データ
  12. 企業活動に関連するデータベース(extended) 研究開発 調達 生産 販売 マーケ ティング 研究開発に関 わる作業ログ /ノート/機器

    の稼働状況 調達や部品の調達 に関するログ/メー ル/電話のやり取り 販売価格決定 に関わる意思 決定に関わる エビデンス 企業内のログ 商用 データベース 帝国 データバンク 特許 データ ベース 論文 データベース (WoS, Scopus, Lends) INITIAL (Entrepedia) POSデータ (ex. インテージ) SNS (Twitter, Facebook, TikTok) さらに、企業内に介在する ログを組み合わせることで、 企業の意思決定をエビデン スベースに基づき実行する ことが可能になる
  13. データを「データベース化」する • 不定形データをデータ化する • JSON やXML をCSV にして、人間が読めるようにする • もしくはその逆

    • データをデータベース化する • Machine Readable • SQL, NoSQL etc… • データを管理し保持する (データマネジメント) • 大昔; 紙 • 昔; Excel • 一昔前; スタンドアロンのサーバ • ちょっと昔; パブリッククラウド (AWS, Microsoft Azure, GCP etc…) • 現代; サーバーレス
  14. 分析手法 • Step1; グラフにする • 「まずは散布図を書いてみる」 • Step2; 統計的処理を行う (平均値,

    中央値, 最大値, 最小値 etc..) • このあたりから、内生性や見せかけの回帰との戦いがはじまる • Step3; 回帰分析など, 入力と出力間の関係性を見る • 重回帰分析 • スパース推定 • 決定木分析, SVM (教師あり/教師なしの機械学習) • Step4; 因果効果を識別する • 因果関係と相関関係を識別する(次のページ)
  15. 因果識別の手法(1) 実験対象 Treated Group Control Group y x Cut-off Point

    • ランダム化比較試験 (RCT) • 対象者と非対象者を無 作為抽出して比較実験 • 回帰不連続(RD) デザイン – 回帰直線シフト 15 実験対象 Treated Group Control Group • 傾向スコアマッチン グ(PSM): – 各政策対象企業と同じ「政 策対象傾向」を持つ企業を 対照群から抽出 引用:岡室博之 (2019) 産業クラスターと地方創生:地域イノベーション政策の展開と分析方法, 一橋大学公開講座
  16. 因果識別の手法(2) • 差の差の分析(DID) • 処置群と対照群の比較 と政策前後比較の二重 差 y t Control

    Group Treated Group t+u t-s ▲t • パネル固定効果分析 • パネルデータを用いて、 各企業の固有の属性の 影響を除去 y x t+i t • 操作変数法(IV): – 内生変数を外生変数 (操作変数)に置き換 える2段階推定 Z X Y U β α 引用:岡室博之 (2019) 産業クラスターと地方創生:地域イノベーション政策の展開と分析方法, 一橋大学公開講座
  17. データサイエンスをタピオカミルクティー にしない方法 1. データを公開する. Linked Open Data を活用する. 2. データの知的財産権を明確化する.

    3. 神エクセルをなくす. (as DX の推進) 4. オープンソースソフトウェアを使う, あるいは教育する. 2020年初頭の最適解はR もしくは Python (3.x系). 5. AI という言葉に踊らされない. 使い倒す.
  18. (いくつかの)ギャップ • 願望投影型政策 (森田 2015) とEBPM • データが、推進したい施策に基づき構築される可能性 • ナラティブなストーリーとデータ解析

    • 統計的な素養を政策立案者や企業戦略の決定者すべてが有しているわけでは ない。データに基づく解析結果を広く共有するためには、ストーリーに落と し込むことが必要 • データのオープン化と、ITセキュリティ対策 • RESAS や Notebook や Linked Open Data を利用しようとしても, 自治体や 中央政府、企業のITセキュリティ上制限が掛けられており(ex. 自治体のネッ トワーク分離), 業務用PC などでこれらのツールを利用することが出来ない。
  19. Source: OECD (2017[3]), Core Skills for Public Sector Innovation, https://www.oecd.org/media/oecdorg/satellite

    sites/opsi/contents/files/OECD_OPSI-core_skills_for_public_sector_innovation-201704.pdf OECD が定義するデジタルスキル
  20. Conclusion • データサイエンスと呼ばれているものは、プログラミングスキ ルと数学とエンジニアリングスキルと因果関係を特定するため のスキルが混ざりあったもの • 政府のみなさんへ • とりあえずデータを、Machine-Readable な形で公開してください

    • PDF でも Excel でもなくて、JSON やRDF 形式だとかなりベター • 企業のみなさんへ • 組織内のデータと、外部データを組み合わせることで新たな知見を得 られる可能性が • 経済学や(実証的な規範に基づく)経営学は思ったよりも「役に立 つ」と思います
  21. 1.2 データ分析までに必要なこと

  22. データ分析の流れ なんの データ を使う か考え る 先行研 究・事 例を探 す

    データ の取得 方法を 確認す る データ をデー タベー ス or 手 入力 or 図書館 or 口コ ミ or Web ア ンケー トで入 手する 入手し たデー タの妥 当性を 確認す る データ を統計 ソフト and/or Python and/or SQL で 処理す る データ に統計 処理を 行う データ に関す る解釈 を行う 解釈さ れた データ と、そ の解釈 を Word か Jupyter Noteboo k か Tex でテキ スティ ングす る レポー トとし て先生 に送る/ 上司に 提出す る/学術 誌に投 稿する 今日メインに取り上げる内容 入手したデータに不足があれば, 別のデータソース を参照し, その入手可能性や妥当性を確認し, データ の入手作業を改めて行う
  23. データセットを 用意する方法 図書館や国会図書館で入手する データの提供元から入手する API で取得する Web アンケートで集める Web スクレイピングする/RPA

    で処理する 手入力で作成する
  24. 1. 図書館や国会図書館で入手する • 一橋大学図書館 • および, 日経BPデータベースなど, 大学が契約しているデータベース • ただし、2020年6月現在も非常にアクセスしずらい

    • 国会図書館 as known as日本最強の図書館 • デジタルデータベース • http://dl.ndl.go.jp/ • リサーチ・ナビ • https://rnavi.ndl.go.jp/rnavi/ • なにか信頼性の高いデータが必要になったら, 永田町に行けばだいたい 見つかります (学費や税金を払っている甲斐があります) • ただし、2020年6月現在もちょっとアクセスしずらい
  25. 2. データの提供元から入手する • データベースを提供する会社から入手する • JSON (グッドデザイン賞) や XML (Web

    of Science) など, その ままだと解析をそのまま行うには複雑過ぎるデータ形式で提供 される場合もあるので, 必要に応じてデータの parse 処理を行 う。 • 具体例; • Web of Science のXML データをparse してSQL に
  26. 2. データの提供元から入手する • (a.) Parsing the bibliographic data from XML

    to SQL of WoS - Pick up sufficient data to analyze - Which tag is needed? - Title? - Names Count? (as known as scientific ordering) - Publisher? - Fund information? - Name? First name? Last Name? - ID?
  27. 2. データの提供元から入手する • WoS データのSQL 化の場合 • ecrypt data from

    *.zip to *.gz format • Take 3 mins for 8.16GB • Decrypt data from *.gz to *.zip format • Take 30 mins for 20GB • Decrypt data from *.zip to *.xml format • Take 1.2 hours for 10GB • Parsing xml data into (my)sql format • Take 5.5 hours for 40.5GB • Binding separated *.sql format data into one single file for each year • Take 35 mins • Importing *sql format data into MySQL Server • Take 120 hours for 49.8GB ZIP - > GZ GZ -> ZIP ZIP -> XML XML -> SQL SQL -> SQL Server Accessin g from SQL client Finally you could get the data! Stata?R? Analyze Submissi on Revise Publis h
  28. Parsing XML-based Data to (My)SQL • Using python to parse

    XML data to SQL format. • Using generic_paser.py which distributed in Github. • https://github.com/titipata/wos_pars er • Takes 5.5 hours to parse XML data in 40.5GB into SQL format. • Then import to SQL server, it takes 1.5-3 days with 2 million entries per year.
  29. Creating Database Tables. • Write Down “Create Table” and define

    database structure. CREATE TABLE raw_data.wos_summary ( id varchar(200) NOT NULL, file_number integer NOT NULL, coll_id varchar(200), pubyear varchar(200), season varchar(200), pubmonth varchar(200), pubday varchar(200), coverdate varchar(200), edate varchar(200), vol varchar(200), issue varchar(200), voliss varchar(200), supplement varchar(200), special_issue varchar(200), part_no varchar(200), pubtype varchar(200), medium varchar(200), model varchar(200), indicator varchar(200), inpi varchar(200), is_archive varchar(200), city varchar(200), country varchar(200), has_abstract varchar(200), sortdate varchar(200), title_count varchar(200), name_count varchar(200), doctype_count varchar(200), conference_count varchar(200), language_count varchar(200), normalized_language_count varchar(200), normalized_doctype_count varchar(200), descriptive_ref_count varchar(200), reference_count varchar(200), address_count varchar(200), headings_count varchar(200), subheadings_count varchar(200), subjects_count varchar(200), fund_ack varchar(200), grants_count varchar(200), grants_complete varchar(200), keyword_count varchar(200), abstract_count varchar(200), item_coll_id varchar(200), item_ids varchar(200), item_ids_avail varchar(200), bib_id varchar(200), bib_pagecount varchar(200), bib_pagecount_type varchar(200), reviewed_language_count varchar(200), reviewed_author_count varchar(200), reviewed_year varchar(200), keywords_plus_count varchar(200), book_chapters varchar(200), book_pages varchar(200), book_notes_count varchar(200), chapterlist_count varchar(200), contributor_count varchar(200), PRIMARY KEY(`id`) ); CREATE TABLE raw_data.wos_page ( id varchar(200) NOT NULL, page_id integer NOT NULL, page_value varchar(200), page_begin varchar(200), page_end varchar(200), page_count varchar(200) ); CREATE TABLE raw_data.wos_titles ( id varchar(200) NOT NULL, title_id integer NOT NULL, title varchar(200), title_type varchar(200), lang_id varchar(200), translated varchar(200), non_english varchar(200) ); CREATE TABLE raw_data.wos_summary_names ( id varchar(200) NOT NULL, name_id integer NOT NULL, role varchar(200) NOT NULL, seq_no varchar(200), addr_no_raw varchar(200), reprint varchar(200), lang_id varchar(200), r_id varchar(200), r_id_tr varchar(200), orcid_id varchar(200), orcid_id_tr varchar(200), dais_id varchar(200), display varchar(200), display_name varchar(200), full_name varchar(200), wos_standard varchar(200), prefix varchar(200), first_name varchar(200), middle_name varchar(200), initials varchar(200), last_name varchar(200), suffix varchar(200) );
  30. 2. データの提供元から入手する • データを parse して, XML からSQL に変換 する

    • 正規化する • MySQL 上でデータを処 理可能にする • SQL の使い方は次回のモ ジュール4.2と4.3で。
  31. 3. API で取得する • Application Programming Interface • アプリケーション同士を接合するための仕組み •

    汎用的な機能を提供する. • API を経由して機能を呼び出す形でプログラムを構成することにより, 同 じAPI が実装されていれば, 別のソフトウェア上でそのまま動作できる. • データ形式にXML や JSON を利用する Web API も普及 http://e-words.jp/w/API.html
  32. 3. API で接続する • Orcid から特定の研究者の情 報をAPI 経由で取得する • 今回は

    ORCID ID 0000-0001- 9500-1150 • Orcid Public API の Client ID や Cilient secret, token を取 得し, API 経由で 原講師の最 近の論文情報を取得する
  33. 3. API で接続する • 以下の通り, 書誌情報を取得できる

  34. 3. API で接続する • 今日は3.3 で Twitter を, 第5回でRESAS API

    の使い方をご説明 する予定です。 • 参考文献 • https://github.com/ORCID/python-orcid • https://support.orcid.org/hc/en-us/articles/360006897174 • https://members.orcid.org/api/about-public-api • https://members.orcid.org/api/tutorial/read-orcid-records
  35. 4. Web アンケートでデータを集める • アンケートを Google Docs などを 使って, 集める

    • 卒論やMBA ペー パーでも見かけがち • 母集団と標本の対応 がとても曖昧になり がち • 注.まどかマギカネタ は古典
  36. 4. Web アンケートでデータを集める • 懸念点1. データの母集団が, データの収集者の想定とは異 なる可能性がある • ユースケース:

    「女性の大学生 の買うコスメの情報を集める」, 「起業への選好を調査する」 調査者が想定している母集団= ◦◦大学の女性の大学1-4年生
  37. 4. Web アンケートでデータを集める • 懸念点1. データの母集団が, データの収集者の想定とは異 なる可能性がある • アンケートのTOPページに「こ

    のアンケートは女性の大学生限 定です」と書いても, 回答者が それを守る保証はどこにもない • 記名の場合も, アンケートサイ トにBASIC なパスワードを掛 ける場合にも同様 実際のデータ集計結果= ◦◦大学の女性の大学1-4年生+α
  38. 4. Web アンケートでデータを集める • アンケート調査の段階で適切な質問票を設計出来ていないと、分 析にあたって必要な情報を入手できない可能性がある • 質問表の設計に不備があると, 質問者が欲しい結果に回答者を誘導してし まう可能性

    • 足りないデータをあとからアンケート調査しても, 調査時期が異なるので 統計的に正しい解析とは言えなくなる • 質問表の設計手法の参考文献 • 『質問紙デザインの技法[第2版]』 • 『図解 アンケート調査と統計解析がわかる本[新版]』
  39. 4. Web アンケートでデータを集める • それでも、Web アンケートじゃないとデータが集まらない場合があ る • 即時性を持つ必要のある動向調査 etc…

    • Solution • プロを使う; マクロミル市場調査レポート • https://www.macromill.com/contact/ja/reports.php?utm_source=merumaga&utm _medium=email-info&utm_campaign=HTML • ただし、この技が使えるのは可処分所得を有するMBA学生のみ • 質問の設計などに手慣れた学者を使う; • 新型コロナウィルス感染症への組織対応に関する緊急調査 : 第一報, http://pubs.iir.hit-u.ac.jp/admin/ja/pdfs/show/2390 • 著者; 原泰史:今川智美:大塚英美:岡嶋裕子:神吉直人:工藤秀雄:高永才:佐々木将人:塩谷剛:武 部理花:寺畑正英:中園宏幸:服部泰宏:藤本昌代:三崎秀央:宮尾学:谷田貝孝:中川功一:HR総研
  40. 5. Web スクレイピングする • Web スクレイピング • Python etc… でコーディングすることで,

    Web ページ上から必要な情 報を取ってくる • よくある例; Yahoo! ニュースやYahoo! ファイナンス, データを集約し ているサイトからデータを取得し, 例えば口コミ解析や時系列分析に利 用する • よく考えてみると • 株価データなどは, 実は大学図書館から「オフィシャルに」ダウンロードしてこ れる例が多い (今はできなくなってるけど) • 経済学部の卒論/修論では実はあんまり出番がない(こともないかもしれない) • 詳しくは3.2 で。
  41. 6. RPA で処理する • RPA(Robotics Process Automation; ロボティクスプロセス オートメーション)とは、現代のホワイトカラーの主要業務であ る定型的パソコン作業の効率化を図る、ルールエンジンを活用

    したソフトウェアロボットである。作業時間を圧倒的に短縮す ることができ、作業ミス無しで連続稼働が可能であるため、オ ペレーションプロセスの限界費用を低下させることができる。 • RPAはソフトウェアロボットの特徴を最大限に発揮するもので、 具体的には、定型化された表計算ソフト間のデータのやりとり、 メールのやりとり、ウェブ情報のリアルタイム収集や確認作業、 そして、それら各作業間の連携などを、プログラミングする必 要もなくマクロを作成し実行することができる. http://www.jsse.jp/~kenkyu/201631/04/20163104_115-118.pdf
  42. 7. 手入力で作成する • 人力で、雑誌や本からデータセットを作成する • 古いデータ (1980年以前) だとこの手法がどうしても中心に • 一橋大学経済研究所にはデータベース化されたデータもかなり存在

    • 極めてめんどくさいし, 入力ミスが発生する可能性
  43. 手入力すると気づくこと • 例外的な表記が, 定型なデータになっているはずなのに, とても たくさんある • 長い文章の表記 • 抜けている情報をどう表記するか

    • 「主な商品」のカッコ内をどう処理するか • 名前の姓と名の間の空白は全角にすべきか、半角にすべきか • 難しい名前をどう処理するか • 元号はデータとして起こしたほうがよいか? • 打ち込んだデータが正しく入力されているかのダブルチェック が必要
  44. データベース設計の重要性 • データをどういった形式で, どう分割して保存するか • SQL の場合; データの形式を細かく指定 (次回講義のモジュール 4.2

    と 4.3 参照) • 文字起こしの場合も, スクレイピングやRPA でデータを取得す る場合も, • 1. 元データからどのデータを取得するか • 2. 取得する場合, どういった形式でデータを取得するか • 3. 例外的なデータ/データが入力されていない場合, どう処理するか それぞれ検討する必要がある
  45. 今日のまとめ: データ分析はデータ設計・収 集までの作業で70-80%

  46. 1.3 & 1.4 Web からデータを集める

  47. Web からデータを集める • 2020年7月時点も、大学の図書館や国会図書館の機能が限定さ れているので、Web からデータを集めて分析出来る方法をご紹 介したいと思います • 秋や冬のタイミングで再び大学がクローズした場合も、卒論 etc..

    が作 成出来るように • まずは、Web スクレイピングと, Twitter API からデータ取得を 取り扱います。次回は個別のケースについてご説明出来ればと 思います
  48. Web スクレイピングする • 食べログのレ ビュー情報を取得 して, 東京のラー メン店/フレンチ レストランなラン キングを作成する

    引用; https://qiita.com/toshiyuki_tsutsui/items/f143946944a428ed105b?fbclid=IwAR1xYwmpS0xGbmbyAz7SVlETwhyguMFEYsgdg- Niap27Mj3XurUHjJoG-Bk
  49. Web スクレイピングする • 取ってきたいデータ • 店舗名:store_name • 食べログ点数:score • 口コミ件数:review_cnt

    • 口コミ文章:review
  50. Web スクレイピングする • 店名の一覧を取得する

  51. Web スクレイピングする • 引数として, self, list_url, mode を指定 する •

    requests.get で当該URL からデータが 取得できるか確認する • BeautifulSoup を用い, html の parse を行う. • soup_a_list で店名のリストを一括して 取得する • A タグの list-rst__rst-name-target 部 分からデータを取得する
  52. Web スクレイピングする • (Google Chromeの場合) F12 を押して, ソースコードを参照する • タグを確認する

  53. Web スクレイピングする 店舗名称の部分のソースコードを確認し, store_name_tag に, データの取得範囲を指定し, store_name で span内のstring を取

    得することを指定する
  54. Web スクレイピングする • 得点に関連するソースコードを確認する

  55. Web スクレイピングする • 評価点数の部分のソースコードを確認し, rating_score_tag に, データの取得範囲を指定 (bタグの, c-rating_val クラスから取

    得する) し, rating_score で span内のstring を取得することを 指定する
  56. Web スクレイピングする Tabelog 関数にラーメンのお店一覧のURLを渡す

  57. Web スクレイピングする 3.65 3.7 3.75 3.8 3.85 3.9 3.95 4

    4.05 4.1 4.15 中華そば しば田 麺尊 RAGE 饗 くろ喜 ラーメン屋 トイ・ボックス ほっこり中華そば もつけ らーめん改 中華ソバ 伊吹 八雲 真鯛らーめん 麺魚 本店 Japanese Soba Noodles 蔦 麺 みつヰ 純手打ち だるま らぁ麺やまぐち 麺屋吉左右 中華そば屋 伊藤 中華蕎麦 蘭鋳 中華蕎麦にし乃 MENSHO 迂直 煮干鰮らーめん 圓 はつね 中華そば 満鶏軒 町田汁場 しおらーめん進化 町田駅前店 麺処 びぎ屋 らぁ麺やまぐち 辣式
  58. 麺尊RAGE

  59. Web スクレイピングする ※. 著作権の都合上、口コミ内容は薄消しで

  60. Web スクレイピン グする • Wordcloud を作成 • 作り方はテキスト分析回で • マスク画像を用意

  61. 5. Web スクレイピングする • Web スクレイピングの注意 • データをダウンロードするとき • 目的は下記のものに限る。

    • * 個人や家族間で使用する * Web検索サービスを提供する * 情報解析をする ※参考:著作権法第30条・著作権法第 47条(6,7) • 対象コンテンツは下記のものに限る。 • * 文章(データベースのコンテンツの場 合はコンテンツの一部のみに留めてお く) * 画像(同上) * 音声(パブリックドメイン等のオープ ンなライセンスの物に限る) * 映像(同上) ※参考:著作権法第30条・著作権法第 47条(7) • Webサイトへアクセスする時は下 記の制限を守る。 • * robots.txt/robotsメタタグのアク セス制限内容を守る。 * robots.txtがない場合でも、サー バアクセスの間隔を1秒以上空けるよ うにする。 * Pragma:No-cacheメタタグが設 定されているページはダウンロード しない。 * rel=”nofollow”が設定されている リンクはクローラーで辿らない。 * 会員のみが閲覧できるページの場 合は利用規約を守る。 * 情報収集を禁止する措置(ex.ア クセス制限)がクローリング時に取 られていた場合は、既に取得してい た情報を含めて削除する。 ※参考:著作権法第47条(6) https://qiita.com/nezuq/items/c5e827e1827e7cb29011
  62. 5. Web スクレイピングする • その2; Panda の機能を用いて Web サイト上の表を取得する #女性アイドルのキャパ数

    url = ‘https://wasteofpops.hatenablog.com/entry/2019/05/01/000000' dfs3 = pd.read_html(url) print(dfs3) URLを指定する Web ページ上のテーブルを取得する
  63. 5. Web スクレイピングする • Panda の機能を用いて Web サイト上の表を取得する

  64. import seaborn as sns sns.jointplot(followers,cd) sns.jointplot(followers, cd, xlim=(0,10000), ylim=(0,10000), kind="scatter")

  65. equation_df=pd.concat([cd, followers], axis=1) sns.heatmap(equation_df, vmax=5000) filtered = cd[(cd >= 0)

    & (cd < 10000)] ax = sns.distplot(filtered, kde=False);
  66. パチンコホール分析 • 最寄り駅前にはパチンコ屋がふたつ • ひとつは、4/12 日急に人がいなく なった • どうやら倒産したらしい •

    もうひとつは、その後も営業 • その後、4/21 日まで営業 • 「寡占だったローカルな市場が独占 になるから、百合子に怒られても継 続して独占利潤を獲得する!これ進 研ゼミでやったやつだ!」
  67. データ収集用 Notebook • https://www.dropbox.com/s/dywtbaquu46ipty/%E3%83%91 %E3%83%81%E3%83%B3%E3%82%B3%E3%83%9B%E3%83% BC%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF_%E3 %82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94 %E3%83%B3%E3%82%B0%E7%94%A8_forDS2020.ipynb?dl= 0

  68. やったこと(データセットの選定) 1. 全国47都道府県のパチンコホールの営業/休業情報を探す 1. ググったり 2. Twitter のパチンコ垢なひとがどう情報を探しているのか確認 2. 自分で探すのは面倒なので、データベースサイトを探す

    3. 5ちゃんねるまとめサイトのうち、パチンコにフォーカスした サイトで、「営業中のパチンコホール」を教えてくれるサイ トを見つける 4. ひとつのデータソースだけだとデータの完備性に不安がある ので、複数ソースを辿れるようにする
  69. データソースの選定 • ひとつめ • ここって昔はパチンコ屋?(ここパチ?) • http://koko-pachi.com/htm/korona.index.htm • 全国のパチンコホールの営業・休業情報を掲載している •

    二つ目の、P-world に掲載されていないパチンコホールの情報も掲載してい る • ふたつめ • P-World • https://www.p-world.co.jp/index.html • パチンコホール・パチンコ機種情報が掲載 • このふたつでカバーされていない店舗情報は、Twitter 検索で取得
  70. データソースの取得 • Web スクレイピングで、まとめてデータを取ってくる • Python 3.x + Jupyter な環境で、20行くらいのコードを書く

    • 今日はここの解説がメイン • そのままだと、不必要な情報がたくさん入っているので、適宜 除去する (データクリーニング and/or データクレンジング) • データソースを確認すると、休業後の再開日が明記されている 場合がある。緊急事態宣言が延長した場合に、パチンコホール が休業要請に従わず再開するケースを想定して、定期的にデー タソースからサンプリングすることにする • 4/16 日から開始。ほぼ毎日データを16:00 時に取得する
  71. パチンコの営業/休業データを持ってくるコード • 前回の講義で解説した, Panda と Numpy を使います • 取得元の Web

    サイトの構造を確認し, 47都道府県のローマ 字表記をリストとして指定します。 • “list“として指定します • “URL” に、URL のうち変動しない部分を記載します。
  72. パチンコの営業/休業データを持ってくるコード • len 関数を使って, list の長さを取得して, それを range に放り 込み,

    for 文を廻します (前回講義参照) • Data3 という DataFrame 方式の空の箱を準備します • データの取得元のURL を、文字列を結合して作成します. • Panda の read_html 機能を用いて, url3 内にある Table タグの データをまとめて取得します. 取得したデータを data3 に放り 込みます.
  73. パチンコの営業/休業データを持ってくるコード • 作業用にラベルを付与します • .dropna を用いて, 不要なデータ部 分を削除します. • 同様に,

    B と E と F 列も不必要な データなので削除します. • その後, データが不完備なエントリ を削除します. • Label として, ファイル名を作成し ます. • data3 を to_csv メソッドを用いて 出力します. • これにより、各都道府県ごとのパチ ンコホール情報を掲載した csv ファ イルが作成されます
  74. 得られた素材 • ひとつひとつコピペするよりは全然楽 • ここから先はさらなるクリーニングが必要であります。

  75. 累計休業店舗 累計開店中店舗 1. 2020/4/8; 緊急事態宣言公布 2. 2020/4/8: 大阪府遊技業協同組合、組合員に休業を要請 3. 2020/4/11;

    東京都, パチンコ店に対する休業要請 4. 2020/4/14; 大阪府, パチンコ店に対する休業要請 7. 2020/4/24; 大阪府、休業要請に応じないパチンコ店を公表 6. 2020/4/17; パチンコホールで初の倒産公表 5. 2020/4/16; 緊急事態宣言, 全国に拡大 全国パチンコホール(7,950店) の開店/休業率の推移[2020/4/28 16:00時点] 出所: P-world, ここって昔はパチンコ屋? 休業開始日
  76. 2020/4/8; 緊急事態宣言公布 2020/4/11; 東京都, パチンコ店に対する休業要請 2020/4/8: 大阪府遊技業協同組合、組合員に休業を要請 2020/4/24; 大阪府、休業要請に応じないパチンコ店を公表 2020/4/27;

    東京都, パチンコホールの 店名公表予定を発表 出所: P-world, ここって昔はパチンコ屋? パチンコホール休業率 2020/4/24; 東京都遊協、最後通告および「除名手続き」検討 2020/4/16; 愛知県、パチンコホールに休業要請 2020/4/17; パチンコホールで初の倒産公表 2020/4/16; 緊急事態宣言, 全国に拡大 2020/4/20; 北海道、パチンコホールに休業要請 2020/4/28; 北海道、パチンコホー ルに休業再要請
  77. パチンコホール営業/休業/閉店数推移 (2020/4/2-2020/5/6) 出所: P-world, ここって昔はパチンコ屋? 大手パチンコホール数= 1219 非大手パチンコホール数= 6608

  78. Web スクレイピングその2; 補助金ポータル • 政府/地方自治体の補助金情報が網羅されたポータル • https://hojyokin-portal.jp/

  79. 補助金ポータル • 取得できそうな情報 • 補助金名 • 概要 • 地域 •

    実施機関 • 公募期間 • 上限金額・助成額 • 補助率 • 利用目的 • 対象経費 • 公式公募ページ
  80. スクレイピングの方法 1. そもそも、スクレイピングをしてもOKか確認する 2. Web の遷移構造を確認する 3. データを取得したい Web ページの構造を確認する

    コーディングする
  81. Step1. 規約を読んでみよう • ⑧IDやパスワードを不正に使用する行為 • ⑨第三者に成りすます行為 • ⑩当社が事前に許諾しない本サービス上での宣伝、広告、 勧誘、又は営業行為 •

    ⑪本サービスの他の利用者又はその他の第三者に不利益、 損害、不快感を与える行為 • ⑫本サービスの他の利用者の情報の収集 • ⑬反社会的勢力等への利益供与 • ⑭前各号の行為を直接又は間接に惹起し、又は容易にす る行為 • ⑮前各号の行為を試みること • ⑯その他、当社が不適切と合理的に判断する行為 • 第7条(禁止事項) • 登録ユーザーは、本サービスの利用にあたり、以下の各 号のいずれかに該当する行為又は該当するおそれがある と当社が合理的に判断する行為をしてはならないものと します。 • ①本サービスにより提供する情報(全部、一部を問いま せん。)を、当社の事前の同意なしに、複写もしくはそ の他の方法により再生、複製、送付、譲渡、頒布、配布、 転売又はこれらの目的で使用するために保管する行為 • ②本規約に違反する行為 • ③法令に違反する行為または犯罪行為に関連する行為 • ④公序良俗に反する行為 • ⑤当社、本サービスの他の利用者又はその他の第三者の 知的財産権、肖像権、プライバシー権、名誉、その他の 権利又は利益を侵害する行為 • ⑥当社や本サービスの運営を妨げたり、信用を毀損する 行為 • ⑦当社のシステムに対するリバースエンジニアリングそ の他の解析行為 https://hojyokin-portal.jp/rule 6や7 に抵触しない形で進めればよい?
  82. Step2 補助金の情報が掲載されているURL の構 造を確認すると、補助金ごとにID が割り 当てられており、それがURL になってい ることが確認できる URL の末尾を変更させることで、補助金

    の情報をまとめて取得することにする
  83. Step3 • Google Chrome でF12 を押して、サイトの論理構造を確認する

  84. Step3 (cont.) • 補助金 • H1タグ • class=p-subsidy__heading • 補助金の概要は

    • div タグ • Class=p-subsidy__text が指定されていることがわか る。
  85. Step3(cont.) • Table タグ • Class=“p- subsidy__table“ に、地域や実施機関や公募 期間などの情報が含まれて いることが確認出来る

  86. コーディングの流れ • 必要なパッケージをインポートする • URL を指定する • ID 分繰り返し作業を行う (for

    文) • データを取得するURL を作成する • URL にアクセス出来るか確認し、存在しない場合例外処理を行う • Panda でtable タグを一括して取得する • データを接合するために、table タグを転置する • Beautifulsoup で h1 タグと div タグから必要な情報を取得する • 次のループに行くタイミングで、20秒待つ • データを保存する
  87. コーディングの流れ(1) • 必要なパッケージをイン ポートする • URL を指定して、それを url1 に保存する •

    空の DataFrame を data4 として作成する • 今回は、新しい補助金情 報から古い順にたどる • Numpy で連番を作成する
  88. コーディングの流れ(2) • ID 分データの取得を繰り返すため、list の長さを len 関数で取得し、その回数分 繰り返す (for 文)

    • リストのうち, j 番目の値をlist から取り出 し, それを文字列にして, URL に指定する • request.urlopen(url3)で、指定したURLが 開くかテストする (try文) もしうまく動作 しない場合には, 例外処理を行う (後述) • url3 上にある table タグから、データを 取得し, dfs に保存する • 続いて, data3 にそれを追記する • 次のID にデータが接合出来るように, 取 得したテーブルを転置する (行と列を入れ 替える)
  89. コーディングの流れ(3) • Response に指定したURL から, Web ページを parse する •

    H1 タグのクラスが、p- subsidy__heading になっているもの を探し出し、それを hojyokin_namae という変数に代入 する • DIV タグのクラスが p-subsidy__text になっているものを探しだし、それ を hojyokin_shousai という変数に代 入する • 取り出したデータから、テキスト情 報を取り出す • Data3 に新しい列名 “補助金名”を作 成し、そこにtest2 を代入する • Data3 に新しい列名 “補助金概要”を 作成し、そこにtest3 を代入する
  90. コーディングの流れ(4) • 取得したデータdata3 を data4 にappend する • 次のループに動く前に、time 関数を使って20秒待つ

    • Response を閉じる • URL が開かない場合 (HTTPError)、not available と表示する • これをID 分繰り返す • データをCSV に保存する
  91. 取得結果

  92. まとめ • Web はデータの宝箱や~ (引用: 彦麻呂) • ただし, 取ってきていいデータとそうではないデータがあります •

    Web 上で「正規化されていない」データセットはたくさん眠っ ています。ご自身の業務ニーズやリサーチクエスチョンに沿っ てデータセットの種を探せば案外見つかります • こうしたデータセットと、公的なデータソースを組み合わせれ ばいろいろなことが出来ます
  93. 1.5 地域情報(RESAS)の探し方

  94. 今回利用するNotebook • Jupyter Notebook 版 • https://www.dropbox.com/s/a eu6bk2img5wg1z/RESAS%20A PI%20%E3%81%8B%E3%82%8 9%E3%83%87%E3%83%BC%E

    3%82%BF%E3%82%92%E5%8 F%96%E5%BE%97%E3%81%9 9%E3%82%8B%28ver%202019. 10.05%29.ipynb?dl=0 • Google Colaboratory 版 • https://colab.research.google. com/drive/1Tqe2LmituEjA96V jFW0EyPqOTxpXa_k7
  95. 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
  96. RESAS の収録データ http://www.kantei.go.jp/jp/singi/sousei/resas/pdf/h31-02-28-data.pdf

  97. 実習2; RESAS API からデータを取得する • https://opendata.resas- portal.go.jp/ • API経由でデータを取得する •

    右上の “RESAS-API 利用登 録・ログイン” からアカウン ト登録を行い, API キーを取 得する
  98. 実習2; RESAS API からデータを取得する • 取得したAPI キーを, などの形式で保存する(このとき, 文字コード utf-8

    で保存すること) {“X-API-KEY”:“API 登録画面に表示されたAPI キー"}
  99. 実習2; RESAS をAPI で利用する • Notebook 上で必要なライブラリをインポートする

  100. 実習2; RESAS をAPI で利用する • API キーを取得できるか確認する.

  101. 実習2; RESAS をAPI で利用する • 都道府県のコード情報 を取り込む • データを読み込む先の URL

    情報を指定 • URL とともに, APIキー を指定する • データを取り込み, 中身 を確認する
  102. 実習2. RESAS をAPI で利用する • データを取得できる

  103. 実習2. RESAS をAPI で利用する • Panda Dataframe に変換する

  104. 実習2. RESAS をAPI で利用する • 東京都の市町村コードを取得する

  105. 実習2. RESAS をAPI で利用する • 指定したURL にAPI キーを渡す • 東京23区の地域コードが取得できる

  106. 実習2. RESAS をAPI で利用する • 出力結果

  107. 実習2. RESAS を API で利用する • Panda Dataframe 形式に変換する

  108. 実習2. RESAS を API で利用する • 出力結果

  109. 実習2. RESAS をAPI で利用する • 一人あたりの固定資産税を取得する • 今回は東京都 (prefCode =

    13) 国立市 (cityCode = 13215) の データをまとめて取り出す.
  110. 実習2. RESAS をAPI で利用する • 出力結果

  111. 実習2. RESAS をAPI で利用する • Panda DataFrame 形式に変換する

  112. 実習2. RESAS をAPI で利用する • 都道府県ごとの集計値 を取得する • For 文で47都道府県分

    のデータを取得する • 創業比率のデータ • https://opendata.res as- portal.go.jp/docs/api /v1/municipality/foun dation/perYear.html
  113. Tips: For 文 • 同じ作業を繰り返すときの構文 • - Python の場合, Range

    関数 を利用することで, その範囲内 で作業を繰り返すことができる • - たとえば, for i in range (1, 48) は, 1 から48 まで i という数 字をひとつずつ増やしなながら 作業することを可能にする • For 変数名 in (繰り返す範囲): • 実行する内容
  114. 実習2. RESAS を API で利用する • データの取得結果

  115. 実習2. RESAS を API で利用する • 市町村コードを Dataframe で保存し, コードのみ取り出す

  116. 実習2. RESAS をAPI で利用する • 出力結果 • 東京都の市町村コードのみ取得 できる

  117. 実習2. RESAS を API で利用する • 先程取得した東京 都の区別コードリ ストを用い, 各区ご

    との創業比率を取 得する • DataFrame 形式に 変換し, 保存する
  118. 実習2. RESAS を API で利用する • 出力結果

  119. 実習2. RESAS をAPI で利用する • 全都道府県の市区町村コードを取得し, DataFrame として保存する

  120. 実習2. RESAS を API で利用する • データの取得結果

  121. 実習2. RESAS をAPI で利用する • 市町村レベルの企業数のデー タを取得する • https://opendata.resas- portal.go.jp/docs/api/v1/muni

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

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

    の場合 “not available” と表示させる • 企業数 (result), 市区町 村名/コード, 都道府県 名/コードを取得する • JSON からDataFrame 形式に変換して, それ をs に追記していく
  124. Tips: zip と try 関数 • Zip 関数: • 複数の要素を同時に取得すること

    を可能にする • 例外処理 (try except): • 実行中にエラーが起きた場合, 例外 処理を指定することができる 引用; https://note.nkmk.me/python-try-except-else-fina
  125. 実習2. RESAS をAPI で利用する • 出力結果 • データが取得できなかった市区 町村は not

    available と表示さ れる • それ以外のデータがリストとし て表示される
  126. 実習2. RESAS をAPI で利用する • 都道府県ごとの累計企業数を 集計する • 出力結果 s.groupby('prefName')['value'].sum()

  127. 実習2. 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)
  128. 実習2. RESAS を API で利用する • 出力結果

  129. 実習2. 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 は日本語に対応していないため, フォントを指定する作業を行う
  130. 実習2. RESAS を API で利用する • 出力結果

  131. やってみよう • RESAS のAPI を使って, 都道府県や市区町村, 産業分 類ごとにデータを取得し, 基礎統計の確認などを行う •

    たぶん(卒論や修論や博論に)使えそうなところ • Difference in Difference なモデルの設定 • Treated Group と Control Group を設定
  132. やってみよう(2) • データリストはこちら; • https://opendata.resas-portal.go.jp/docs/api/v1/index.html • 別のAPIセット: • 法人インフォ: https://hojin-info.go.jp/hojin/TopPage

    • 科研費: https://support.nii.ac.jp/ja/kaken/api/api_outline • SPARQL Endpoint については次回
  133. 1.6 SNS データをAPI で処理

  134. 利用する Notebook • Jupyter Notebook • https://www.dropbox.com/s/nl78z6nql0kx d71/Twitter%20%E3%81%AE%E3%83%87 %E3%83%BC%E3%82%BF%E3%82%92%E 5%8F%96%E5%BE%97%E3%81%99%E3%8

    2%8B_fords2020.ipynb?dl=0
  135. ユースケース; 顧客動向をオフラインではなくオンラインで把握する • あなたはオフラインマーケティングのスペシャリストです • フィジカルなマーケティング手法を用いて、これまで数々の実績を 残してきました • ところが、COVID-19 の流行により、これまでの顧客エンドポイン

    トの多くが利用できなくなりました • これまでやっていた販促物の配布ではなく、オンラインにあるデー タを用いて顧客動向を把握することにしました • まずは、自社に関連する言葉を、ソーシャルメディア上から検索す ることに • Twitter からデータを取得することにしました • ツイート数やリツイート数, Favorite 数、それから、実際のツイートの中身 も観察することにしました
  136. B2Bマーケティングフローの変化 https://note.com/shintakai/n/n39f60de2701e

  137. B2B マーケティングフローの変化 https://note.com/shintakai/n/n39f60de2701e

  138. 作業フロー 1. Twitter APIを利用するための手続きをする 2. Twitter API 経由からデータを取得するために, コーディング する

    3. 取得したデータを観察し、妥当性を検証する (4. データを整理し、レポーティングする) (とりあえず、今日は1. から 3. まで)
  139. Twitter のAPI を申請する • https://developer.twitter.com にアクセスする

  140. Twitter の API を申請する • Apply for a developer account

    をクリックする
  141. Twitter の API を申請する • 利用目的を選択する

  142. Twitter の API を申請する 必要事項を入力し, Next をクリックする

  143. Twitter の API を申請する • なぜ API を利用したいのか記入する

  144. Twitter の API を申請する • 内容を確認し, Looks Good! をクリックする

  145. Twitter の API を申請する • Submit Application をクリックする

  146. Twitter の API を申請する • E-mail でメッセージが届くので Confirmation をする

  147. Twitter の API を申請する • E-mail での Confirm を終えると, Developer

    ページに遷移する
  148. Twitter の API キーを取得する • Create an App をクリックする

  149. Twitter の API キーを取得する • “Create an App” をクリックする

  150. Twitter の API キーを取得する • Application の詳細を記入する

  151. Twitter の API キーを取得する • Create をクリックする

  152. Twitter の API キーを取得する • Keys and Tokens をクリックする

  153. Twitter の API キーを取得する • Access Token & access token

    secret の Create をクリックする
  154. Twitter の API キーを取得する • Access Token が生成される

  155. 練習. 自分のタイムライン情報を取得する • Twitter パッケージをインストールする

  156. 練習. 自分のタイムライン情報を取得する • 先程取得したAPI キー情報を指定する • Twitter に Oauth 経由でアクセスする

    • 自分のタイムライン情報を取得する
  157. 自分のタイムライン情報を取得する • 自分がフォローしているユーザーのツイートが取得される

  158. 特定のキーワードに基づきツイートを取得する(1) • 必要なパッケージ (tweppy, datetime, codecs, csv) をイン ポートする •

    API 認証に必要な Consumer Key や Access Token を指定 する • Auth に鍵を渡し, tweepy 経由でTwitter のAPI をノックする
  159. 特定のキーワードに基づきツイートを取 得する(2) • 検索キーワードをq に指定する • 別途、ツイートを取得するリスト tweets_data を作成する

  160. 特定のキーワードに基づきキーワードを 取得する • tweepy.Curserを 用い関連するツ イートを一件ずつ 取得する • ツイートのID •

    ツイートをした ユーザ名 • ツイートをした 場所 • ツイートをした 時間 • ツイートがふぁ ぼられた回数 • ツイートがリツ イートされた回 数 が取得できる
  161. 特定のキーワードに基づきツイートを取 得する • Waseda.csv というテキストファイルに書き出す • エンコーディングはutf-8 • tweets_data の内容を一行ずつ書き込んでいく

  162. 特定のキーワードに基づきツイートを取得する • 出力結果

  163. e. 取得したデータを解析する (wordcloud) • 早稲田大学 • 慶應大学

  164. e. 取得したデータを解析する(wordcloud; cont.) • 甲南大学 一橋大学

  165. SNS データは何に使える? • 消費者行動 (マーケティングっぽい) • 特定企業や産業のレピュテーションの変化 • 研究{者}の社会的なインパクトの測定 ->

    特定の研究者の名前 を含むツイートの回数, リツイートの回数, Fav 数 etc… • 具体的なテキストデータの処理技法は数回後の講義で。
  166. Tips; データが使える/使えないSNS • Mixi • Mixi graph api; http://developer.mixi.co.jp/conn ect/mixi_graph_api/

    • Twitter • API でデータを取得可能, 過去デー タに関しては要課金 • Instagram • API 提供, 審査あり; • https://developers.facebook.com /docs/instagram-api • Facebook • Graph API; https://developers.facebook.com /docs/graph-api?locale=ja_JP • スクレイピングは全面的に禁止; https://www.octoparse.jp/blog/5 -things-you-need-to-know- before-scraping-data-from- facebook/ • Tiktok • Unofficial API は発見; https://github.com/szdc/tiktok- api
  167. API を用いたデータ取得のまとめ • 鍵を手に入れる作業がまず必要です(これが意外に面倒) • データの提供方式がAPIごとに異なるので、この講義でも何回 か別のパターンをご紹介出来ればと考えています • 具体的にはRESAS •

    Web からコピペするよりも、一つ一つ画面を追いかけるよりも 複雑なデータを取得することができます
  168. 1.7 テキスト分析

  169. 1.5 の流れ • テキストを取得する • テキストを分かち書きする • 品詞を数えてみる • WordCloud

    を書いてみる
  170. 0. テキストを取得する • Twitter からデータを集めてくる (第三回参照)

  171. 0. テキストを取得する • あつまる

  172. 1. 分かち書きする • 品詞ごとに言葉を取り出す • Mecab (7.1参照)で分かち書 きする • 品詞ごとに、出てきたター

    ムの数をカウントする • While 文とif 文の組み合わせ • 参照 • https://qiita.com/ganariya/it ems/68fdcfed953f066ad4b7
  173. 1. 分かち書きする • 品詞ごとの単語数をカウントする • 名詞や動詞や記号が多い感じ

  174. Wordcloud • 言葉の出現頻度を プロットする • マスク画像を使えば 任意の画像上にプロット することが可能 http://kennycason.com/posts/2014-07-03-kumo-wordcloud.html

  175. Wordcloud • “Mecabと WordCloud を使ってワードクラ ウドを作る” Notebook を参照のこと • https://drive.google.com/open?id=1ps

    enAlby9XPL-np_yZX70GFYvZps-hGD
  176. 2. Wordcloud • 必要なパッケージをインポートする • 開くファイルを指定する • 今回は, DBpedia.org から取得した経済学者の概要を抽出し,

    UTF-8 で エンコーディングしたテキストデータとして保存 • データの取得の仕方は前回講義を参照 • マスク画像も別途用意(使わない場合はコメントアウト)
  177. 2. wordcloud • Mecab パッケージを用いて, 分かち書きを行う • Text.replace() を用いて, 改行を取り外す

    • Windows の場合には ¥r¥n
  178. 2. Wordcloud • 抽出した用語から, 助詞と助動詞を取り外す • ストップワード (解析対象に含めないターム) を指定する

  179. 2. Wordcloud • Wordcloud関数を用いて, ワードクラウドを出力する • Font_path で利用する日本 語フォントを指定する(今回 は同じパスに配置)

    • Mask で, プロットするマス ク画像を指定する • Stopwords に, プロットしな いタームを指定したベクト ル stop_wordsを指定する • wordc.to_file でファイルの 保存名を指定する
  180. 2. Wordcloud • 出力結果 • Dbpediaから取得した経済学者の概要データが, 分かち書きされている

  181. Wordcloudの出力結果 • 経済学者 • 経営学者

  182. Wordcloud の出力結果 • 社会学者 • 法学者

  183. Wordcloud の出力結果 • 一橋大学 ?

  184. Wordcloud の出力結果 • 早稲田大学 ?ハロウィンパーティー はどうやら、BOTを 拾っているらしい

  185. Wordcloud の出力結果 • 学習院大学 ?ラクロス部はどうやら すごくアクティブに SNSで活動しているらしい

  186. まとめ; これっぽい - なんとなくの傾向を可 視化する - レポートやインゼミの 表紙がこれだと相手に 対する示威行為になる 気がする

    - リアルタイムのリアク ションを可視化する (ツ イッターで時々みつけ るやつ)
  187. 続いてやりたいこと • とりあえず日本語話者がサザエさんと大学ネタとアナゴさんが 好きなことが分かったので、もうちょっと詳しく解析してみる • 今回使うものは, Word2Vec と Topic モデル

  188. Word2vec • テキストデータを解析し, 各 単語の意味をベクトル表現 化する • 単語間の近接性などを測定 することが可能に •

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

    隠れ層から出力層への重み行列; W’ をそれぞれ計算する • このとき、重み行列の各行のベクトルが, 単語の特徴を示すベクトルになる 引用; https://www.randpy.tokyo/entry/word2vec_skip_gram_model
  190. word2vec • “Mecabと word2vec で解析する” Notebook を参照のこと • https://drive.google.com/open?id=1ps enAlby9XPL-np_yZX70GFYvZps-hGD

  191. Word2vec • 必要なパッケージをインポートする • ファイルを読み込み, 分かち書きしたファイルを出力する

  192. Word2vec • 出力結果

  193. Word2vec • 分かち書きしたファイルに 基づき, Word2vec モデル を生成する • このとき •

    Min_count; 単語の出現回数 • Window; 入力単語からの最 大距離 • Size; ベクトルの次元数 • Sg=1; skip-gram 形式での モデリング • iter; 学習の反復回数 • 最後にファイルを保存する
  194. わりと時間がかかるので, コーヒーでも飲んで待つ

  195. 2. Word2Vec • 学習したファイルを読み込む • 抽出したベクトルをリストアップする

  196. 2. Word2Vec • 経営学っぽいタームが抽出されている

  197. 2. Word2vec • 特定のタームと類似している単語リストを抽出する

  198. 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
  199. 2. Word2vec • 特定タームのベクト ル表現を確認する 出力結果

  200. 2. word2vec • 語句ベクトル同士で近い言葉のリストを抽出する • 東大と一橋なので, 「組織学会」などそれっぽいタームが。

  201. 2. word2vec • 語句同士の類似度を抽出する • 一橋大学(の商学部)は九大よりは東大に近い • 一橋大学(の商学部)は経済学よりもイノベーションのほうが近い • 一橋大学(の商学部)は組織学会にとても近い

  202. 3. Topic モデル • 文章における単語の出現確率 を推定するためのモデル • 出現する単語の種類と数が, トピック(カテゴリ) によって

    異なると仮定する • 各文章は複数のトピックによっ て構成されており, 各トピック の単語分布を合算された形で単 語が生成される https://qiita.com/icoxfog417/items/7c944cb29dd7cdf5e2b1
  203. 3. Topic モデル • “トピックモデルで解析する” Notebook を参照のこと • https://drive.google.com/open?id=1psenAlby9XPL- np_yZX70GFYvZps-hGD

  204. 3. Topic モデル • 必要なパッケージ をインポートする • 元文章からターム を取り出し, キー

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

  206. 3. Topic モデル • 辞書とコーパスをそれぞれ作成する • no_below; 2回以下表示しない単語は無視する • no_abobe;

    全体の文章の10%以上に出現するタームを無視する
  207. 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
  208. 3. Topic モデル • 辞書とコーパスを読み込む

  209. 3. Topic モデル • topic_N で表示するトピック数を指定し, 出力する

  210. 3. Topic モデル

  211. まとめ; テキスト分析で出来そうなこと • WordCloud • みんなのなんとなくのイメージの可視化 • Word2vec • 言葉のベクトル化により,

    モデルへの組み込みが可能 • 被説明変数?説明変数? • Topic モデル • グルーピングの可視化 • 類似語の提案
  212. まとめ(2); じゃあ、経済学/経営学でどう使えるの? (a.) 不定形のデータをベクトル化してモデリングする (b.) 被説明変数または説明変数のひとつとして、多変量解析モデ ルに組み込む • 新規性の測定など

  213. 今日の実習 • テキストデータ取得して、そ れを用いて, 分析を行いま しょう • Wordcloud の作成 •

    Word2vec モデルの作成 • Topic モデルの作成 などを試行して, 結果を出力す ること Extended;) Dbpedia.org を使いテキスト データを取得して解析する
  214. THANKS yasushi.hara@r.hit-u.ac.jp