Slide 1

Slide 1 text

一橋大学 「経済学のための 実践的データ分析」 2020春: 3/10 3.データの集め方 3.1.データ分析までに必要なこと 3.2.スクレイピングでデータ取得 3.3.SNS情報をAPI経由で取得 3.4.レポート1のご説明 一橋大学大学院経済学研究科 原泰史 [email protected]

Slide 2

Slide 2 text

今日の内容 • 13:00-13:15 • プレ講義 [録画なし] • 13:15-13:35 • 3.1データ分析までに必 要なこと[録画あり] • 13:35-13:40 • インターミッション[録画な し] • 13:40-14:00 • 3.2スクレイピングでデー タ処理[録画あり] • 14:00-14:05 • インターミッション2[録画 なし] • 14:05-14:25 • 3.3 SNS データをAPI で処理[録画] • 14:25-14:30 • インターミッション3 [録画 なし] • 14:30-14:50 • 3.4レポート1のご説明 [録画]

Slide 3

Slide 3 text

3.1 データ分析までに必要なこと

Slide 4

Slide 4 text

データ分析の流れ なんの データ を使う か考え る 先行研 究・事 例を探 す データ の取得 方法を 確認す る データ をデー タベー ス or 手 入力 or 図書館 or 口コ ミ or Web ア ンケー トで入 手する 入手し たデー タの妥 当性を 確認す る データ を統計 ソフト and/or Python and/or SQL で 処理す る データ に統計 処理を 行う データ に関す る解釈 を行う 解釈さ れた データ と、そ の解釈 を Word か Jupyter Noteboo k か Tex でテキ スティ ングす る レポー トとし て先生 に送る/ 上司に 提出す る/学術 誌に投 稿する 今日メインに取り上げる内容 前回/前々回で 取り上げた内容 レポートでやって いただく内容 入手したデータに不足があれば, 別のデータソース を参照し, その入手可能性や妥当性を確認し, データ の入手作業を改めて行う

Slide 5

Slide 5 text

データセットを 用意する方法 図書館や国会図書館で入手する データの提供元から入手する API で取得する Web アンケートで集める Web スクレイピングする/RPA で処理する 手入力で作成する

Slide 6

Slide 6 text

1. 図書館や国会図書館で入手する • 一橋大学図書館 • および, 日経BPデータベースなど, 大学が契約しているデータベース • ただし、2020年5月現在非常にアクセスしずらい • 国会図書館 as known as日本最強の図書館 • デジタルデータベース • http://dl.ndl.go.jp/ • リサーチ・ナビ • https://rnavi.ndl.go.jp/rnavi/ • なにか信頼性の高いデータが必要になったら, 永田町に行けばだいたい 見つかります (学費や税金を払っている甲斐があります) • ただし、2020年5月現在非常にアクセスしずらい

Slide 7

Slide 7 text

2. データの提供元から入手する • データベースを提供する会社から入手する • JSON (グッドデザイン賞) や XML (Web of Science) など, その ままだと解析をそのまま行うには複雑過ぎるデータ形式で提供 される場合もあるので, 必要に応じてデータの parse 処理を行 う。 • 具体例; • Web of Science のXML データをparse してSQL に

Slide 8

Slide 8 text

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?

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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) );

Slide 12

Slide 12 text

2. データの提供元から入手する • データを parse して, XML からSQL に変換 する • 正規化する • MySQL 上でデータを処 理可能にする • SQL の使い方は次回のモ ジュール4.2と4.3で。

Slide 13

Slide 13 text

3. API で取得する • Application Programming Interface • アプリケーション同士を接合するための仕組み • 汎用的な機能を提供する. • API を経由して機能を呼び出す形でプログラムを構成することにより, 同 じAPI が実装されていれば, 別のソフトウェア上でそのまま動作できる. • データ形式にXML や JSON を利用する Web API も普及 http://e-words.jp/w/API.html

Slide 14

Slide 14 text

3. API で接続する • Orcid から特定の研究者の情 報をAPI 経由で取得する • 今回は ORCID ID 0000-0001- 9500-1150 • Orcid Public API の Client ID や Cilient secret, token を取 得し, API 経由で 原講師の最 近の論文情報を取得する

Slide 15

Slide 15 text

3. API で接続する • 以下の通り, 書誌情報を取得できる

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

4. Web アンケートでデータを集める • アンケートを Google Docs などを 使って, 集める • 卒論やMBA ペー パーでも見かけがち • 母集団と標本の対応 がとても曖昧になり がち • 注.まどかマギカネタ は古典

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

4. Web アンケートでデータを集める • 懸念点1. データの母集団が, データの収集者の想定とは異 なる可能性がある • アンケートのTOPページに「こ のアンケートは女性の大学生限 定です」と書いても, 回答者が それを守る保証はどこにもない • 記名の場合も, アンケートサイ トにBASIC なパスワードを掛 ける場合にも同様 実際のデータ集計結果= ○○大学の女性の大学1-4年生+α

Slide 20

Slide 20 text

4. Web アンケートでデータを集める • アンケート調査の段階で適切な質問票を設計出来ていないと、分 析にあたって必要な情報を入手できない可能性がある • 質問表の設計に不備があると, 質問者が欲しい結果に回答者を誘導してし まう可能性 • 足りないデータをあとからアンケート調査しても, 調査時期が異なるので 統計的に正しい解析とは言えなくなる • 質問表の設計手法の参考文献 • 『質問紙デザインの技法[第2版]』 • 『図解 アンケート調査と統計解析がわかる本[新版]』

Slide 21

Slide 21 text

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総研

Slide 22

Slide 22 text

5. Web スクレイピングする • Web スクレイピング • Python etc… でコーディングすることで, Web ページ上から必要な情 報を取ってくる • よくある例; Yahoo! ニュースやYahoo! ファイナンス, データを集約し ているサイトからデータを取得し, 例えば口コミ解析や時系列分析に利 用する • よく考えてみると • 株価データなどは, 実は大学図書館から「オフィシャルに」ダウンロードしてこ れる例が多い (今はできなくなってるけど) • 経済学部の卒論/修論では実はあんまり出番がない(こともないかもしれない) • 詳しくは3.2 で。

Slide 23

Slide 23 text

6. RPA で処理する • RPA(Robotics Process Automation; ロボティクスプロセス オートメーション)とは、現代のホワイトカラーの主要業務であ る定型的パソコン作業の効率化を図る、ルールエンジンを活用 したソフトウェアロボットである。作業時間を圧倒的に短縮す ることができ、作業ミス無しで連続稼働が可能であるため、オ ペレーションプロセスの限界費用を低下させることができる。 • RPAはソフトウェアロボットの特徴を最大限に発揮するもので、 具体的には、定型化された表計算ソフト間のデータのやりとり、 メールのやりとり、ウェブ情報のリアルタイム収集や確認作業、 そして、それら各作業間の連携などを、プログラミングする必 要もなくマクロを作成し実行することができる. http://www.jsse.jp/~kenkyu/201631/04/20163104_115-118.pdf

Slide 24

Slide 24 text

7. 手入力で作成する • 人力で、雑誌や本からデータセットを作成する • 古いデータ (1980年以前) だとこの手法がどうしても中心に • 一橋大学経済研究所にはデータベース化されたデータもかなり存在 • 極めてめんどくさいし, 入力ミスが発生する可能性

Slide 25

Slide 25 text

手入力すると気づくこと • 例外的な表記が, 定型なデータになっているはずなのに, とても たくさんある • 長い文章の表記 • 抜けている情報をどう表記するか • 「主な商品」のカッコ内をどう処理するか • 名前の姓と名の間の空白は全角にすべきか、半角にすべきか • 難しい名前をどう処理するか • 元号はデータとして起こしたほうがよいか? • 打ち込んだデータが正しく入力されているかのダブルチェック が必要

Slide 26

Slide 26 text

データベース設計の重要性 • データをどういった形式で, どう分割して保存するか • SQL の場合; データの形式を細かく指定 (次回講義のモジュール 4.2 と 4.3 参照) • 文字起こしの場合も, スクレイピングやRPA でデータを取得す る場合も, • 1. 元データからどのデータを取得するか • 2. 取得する場合, どういった形式でデータを取得するか • 3. 例外的なデータ/データが入力されていない場合, どう処理するか それぞれ検討する必要がある

Slide 27

Slide 27 text

今日のまとめ: データ分析はデータ設計・収 集までの作業で70-80%

Slide 28

Slide 28 text

2.2 Web からデータを集める

Slide 29

Slide 29 text

Web からデータを集める • 2020年5月時点では、大学の図書館や国会図書館が閉まってい るので、Web からデータを集めて分析出来る方法をまずはご紹 介したいと思います • 秋や冬のタイミングで再び大学がクローズした場合も、卒論 etc.. が作 成出来るように • まずは、3.2 Web スクレイピングと, 3.3 Twitter API からデー タ取得を取り扱います。来週はSQL の使い方と、具体的なデー タセットの拾い方をご説明します

Slide 30

Slide 30 text

Web スクレイピングする • 食べログのレ ビュー情報を取得 して, 東京のラー メン店/フレンチ レストランなラン キングを作成する 引用; https://qiita.com/toshiyuki_tsutsui/items/f143946944a428ed105b?fbclid=IwAR1xYwmpS0xGbmbyAz7SVlETwhyguMFEYsgdg- Niap27Mj3XurUHjJoG-Bk

Slide 31

Slide 31 text

Web スクレイピングする • 取ってきたいデータ • 店舗名:store_name • 食べログ点数:score • 口コミ件数:review_cnt • 口コミ文章:review

Slide 32

Slide 32 text

Web スクレイピングする • 店名の一覧を取得する

Slide 33

Slide 33 text

Web スクレイピングする • 引数として, self, list_url, mode を指定 する • requests.get で当該URL からデータが 取得できるか確認する • BeautifulSoup を用い, html の parse を行う. • soup_a_list で店名のリストを一括して 取得する • A タグの list-rst__rst-name-target 部 分からデータを取得する

Slide 34

Slide 34 text

Web スクレイピングする • (Google Chromeの場合) F12 を押して, ソースコードを参照する • タグを確認する

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Web スクレイピングする • 得点に関連するソースコードを確認する

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Web スクレイピングする Tabelog 関数にラーメンのお店一覧のURLを渡す

Slide 39

Slide 39 text

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 迂直 煮干鰮らーめん 圓 はつね 中華そば 満鶏軒 町田汁場 しおらーめん進化 町田駅前店 麺処 びぎ屋 らぁ麺やまぐち 辣式

Slide 40

Slide 40 text

麺尊RAGE

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

5. Web スクレイピングする • Panda の機能を用いて Web サイト上の表を取得する

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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);

Slide 48

Slide 48 text

パチンコホール分析 • 最寄り駅前にはパチンコ屋がふたつ • ひとつは、4/12 日急に人がいなく なった • どうやら倒産したらしい • もうひとつは、その後も営業 • その後、4/21 日まで営業 • 「寡占だったローカルな市場が独占 になるから、百合子に怒られても継 続して独占利潤を獲得する!これ進 研ゼミでやったやつだ!」

Slide 49

Slide 49 text

データ収集用 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

Slide 50

Slide 50 text

やったこと(データセットの選定) 1. 全国47都道府県のパチンコホールの営業/休業情報を探す 1. ググったり 2. Twitter のパチンコ垢なひとがどう情報を探しているのか確認 2. 自分で探すのは面倒なので、データベースサイトを探す 3. 5ちゃんねるまとめサイトのうち、パチンコにフォーカスした サイトで、「営業中のパチンコホール」を教えてくれるサイ トを見つける 4. ひとつのデータソースだけだとデータの完備性に不安がある ので、複数ソースを辿れるようにする

Slide 51

Slide 51 text

データソースの選定 • ひとつめ • ここって昔はパチンコ屋?(ここパチ?) • http://koko-pachi.com/htm/korona.index.htm • 全国のパチンコホールの営業・休業情報を掲載している • 二つ目の、P-world に掲載されていないパチンコホールの情報も掲載してい る • ふたつめ • P-World • https://www.p-world.co.jp/index.html • パチンコホール・パチンコ機種情報が掲載 • このふたつでカバーされていない店舗情報は、Twitter 検索で取得

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

パチンコの営業/休業データを持ってくるコード • 前回の講義で解説した, Panda と Numpy を使います • 取得元の Web サイトの構造を確認し, 47都道府県のローマ 字表記をリストとして指定します。 • “list“として指定します • “URL” に、URL のうち変動しない部分を記載します。

Slide 54

Slide 54 text

パチンコの営業/休業データを持ってくるコード • len 関数を使って, list の長さを取得して, それを range に放り 込み, for 文を廻します (前回講義参照) • Data3 という DataFrame 方式の空の箱を準備します • データの取得元のURL を、文字列を結合して作成します. • Panda の read_html 機能を用いて, url3 内にある Table タグの データをまとめて取得します. 取得したデータを data3 に放り 込みます.

Slide 55

Slide 55 text

パチンコの営業/休業データを持ってくるコード • 作業用にラベルを付与します • .dropna を用いて, 不要なデータ部 分を削除します. • 同様に, B と E と F 列も不必要な データなので削除します. • その後, データが不完備なエントリ を削除します. • Label として, ファイル名を作成し ます. • data3 を to_csv メソッドを用いて 出力します. • これにより、各都道府県ごとのパチ ンコホール情報を掲載した csv ファ イルが作成されます

Slide 56

Slide 56 text

得られた素材 • ひとつひとつコピペするよりは全然楽 • ここから先はさらなるクリーニングが必要であります。

Slide 57

Slide 57 text

累計休業店舗 累計開店中店舗 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, ここって昔はパチンコ屋? 休業開始日

Slide 58

Slide 58 text

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; 北海道、パチンコホー ルに休業再要請

Slide 59

Slide 59 text

パチンコホール営業/休業/閉店数推移 (2020/4/2-2020/5/6) 出所: P-world, ここって昔はパチンコ屋? 大手パチンコホール数= 1219 非大手パチンコホール数= 6608

Slide 60

Slide 60 text

まとめ • Web はデータの宝箱や~ (引用: 彦麻呂) • ただし, 取ってきていいデータとそうではないデータがあります • Web 上で「正規化されていない」データセットはたくさん眠っ ています。ご自身の業務ニーズやリサーチクエスチョンに沿っ てデータセットの種を探せば案外見つかります • こうしたデータセットと、公的なデータソースを組み合わせれ ばいろいろなことが出来ます

Slide 61

Slide 61 text

3.3 SNS データをAPI で処理

Slide 62

Slide 62 text

利用する 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

Slide 63

Slide 63 text

ユースケース; 顧客動向をオフラインではなくオンラインで把握する • あなたはオフラインマーケティングのスペシャリストです • フィジカルなマーケティング手法を用いて、これまで数々の実績を 残してきました • ところが、COVID-19 の流行により、これまでの顧客エンドポイン トの多くが利用できなくなりました • これまでやっていた販促物の配布ではなく、オンラインにあるデー タを用いて顧客動向を把握することにしました • まずは、自社に関連する言葉を、ソーシャルメディア上から検索す ることに • Twitter からデータを取得することにしました • ツイート数やリツイート数, Favorite 数、それから、実際のツイートの中身 も観察することにしました

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

作業フロー 1. Twitter APIを利用するための手続きをする 2. Twitter API 経由からデータを取得するために, コーディング する 3. 取得したデータを観察し、妥当性を検証する (4. データを整理し、レポーティングする) (とりあえず、今日は1. から 3. まで)

Slide 67

Slide 67 text

Twitter のAPI を申請する • https://developer.twitter.com にアクセスする

Slide 68

Slide 68 text

Twitter の API を申請する • Apply for a developer account をクリックする

Slide 69

Slide 69 text

Twitter の API を申請する • 利用目的を選択する

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

Twitter の API を申請する • E-mail での Confirm を終えると, Developer ページに遷移する

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

Twitter の API キーを取得する • Access Token & access token secret の Create をクリックする

Slide 82

Slide 82 text

Twitter の API キーを取得する • Access Token が生成される

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

特定のキーワードに基づきツイートを取得する(1) • 必要なパッケージ (tweppy, datetime, codecs, csv) をイン ポートする • API 認証に必要な Consumer Key や Access Token を指定 する • Auth に鍵を渡し, tweepy 経由でTwitter のAPI をノックする

Slide 87

Slide 87 text

特定のキーワードに基づきツイートを取 得する(2) • 検索キーワードをq に指定する • 別途、ツイートを取得するリスト tweets_data を作成する

Slide 88

Slide 88 text

特定のキーワードに基づきキーワードを 取得する • tweepy.Curserを 用い関連するツ イートを一件ずつ 取得する • ツイートのID • ツイートをした ユーザ名 • ツイートをした 場所 • ツイートをした 時間 • ツイートがふぁ ぼられた回数 • ツイートがリツ イートされた回 数 が取得できる

Slide 89

Slide 89 text

特定のキーワードに基づきツイートを取 得する • Waseda.csv というテキストファイルに書き出す • エンコーディングはutf-8 • tweets_data の内容を一行ずつ書き込んでいく

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

SNS データは何に使える? • 消費者行動 (マーケティングっぽい) • 特定企業や産業のレピュテーションの変化 • 研究{者}の社会的なインパクトの測定 -> 特定の研究者の名前 を含むツイートの回数, リツイートの回数, Fav 数 etc… • 具体的なテキストデータの処理技法は数回後の講義で。

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

API を用いたデータ取得のまとめ • 鍵を手に入れる作業がまず必要です(これが意外に面倒) • データの提供方式がAPIごとに異なるので、この講義でも何回 か別のパターンをご紹介出来ればと考えています • 具体的にはRESAS • Web からコピペするよりも、一つ一つ画面を追いかけるよりも 複雑なデータを取得することができます

Slide 96

Slide 96 text

3.4 レポート1回目のお知らせ

Slide 97

Slide 97 text

レポートの内容 • 概要 • 指定された4つのデータセット (FIFA19, COVID-19, Airbnb, パチンコホー ル) からひとつを選び、 Jupyter Notebook 上で解析し, 重回帰分析を行う • レポートでは • (1) 被説明変数と説明変数の関係性 • (2) R二乗項の値 • (3) VIF 値による, 多重共線性のチェック などを報告した上で, 構築したモデルについて考察を行うこと • 提出期間: - 2019/5/26 15:00:00 (JST) • 提出方法: • Slack のDM で、Notebook ファイルもしくは Google Colaboratory へのリン クを送信すること

Slide 98

Slide 98 text

レポートの内容(2) • 引用文献がある場合, 末尾に明記すること • 文字数は問わない

Slide 99

Slide 99 text

notebook (その1; FIFA19) Google Colaboratory 版 https://colab.research.google.com/drive/1 h7NY4ByUp5MkB1-eU__Lp8jAwTMLTFiT Jupyter Notebook 版 https://www.dropbox.com/s/y3xiinmkp6w 6lbj/fifa19%20%E3%81%AE%E3%83%87%E 3%83%BC%E3%82%BF%E3%81%A7%E5%8 D%98%E5%9B%9E%E5%B8%B0%E3%81% A8%E9%87%8D%E5%9B%9E%E5%B8%B0 %E5%88%86%E6%9E%90%E3%82%92%E8 %A1%8C%E3%81%A3%E3%81%9F%E7%B5 %90%E6%9E%9C..ipynb?dl=0

Slide 100

Slide 100 text

Notebook (その2; Airbnb) Jupyter Notebook 版 https://www.dropbox.com/s/x0d4yr2eiy5a z07/Airbnb%20%E3%81%AE%E3%83%87% E3%83%BC%E3%82%BF%E3%81%A7%E5% 9B%9E%E5%B8%B0%E5%88%86%E6%9E% 90%E3%82%92%E8%A1%8C%E3%81%A3% E3%81%9F%E7%B5%90%E6%9E%9C.ipynb ?dl=0 Google Colaboratory 版 https://colab.research.google.com/drive/1 tdkQ2ucGz1IlY1Auoabywpkq0FMQLQoJ

Slide 101

Slide 101 text

データセット(FIFA19) CSV ファイル https://www.dropbox.com/s/n6vvh772nut nr75/data2.csv?dl=0 XLSX ファイル https://www.dropbox.com/s/7vl5p1vsfo3k bsf/data.xlsx?dl=0

Slide 102

Slide 102 text

データセット(Airbnb) • CSV ファイル • https://www.dropbox.com/s/2y32zvncbu2l6ex/AB_NYC_2019_2.csv ?dl=0 • XLSX ファイル • https://www.dropbox.com/s/klrc47m9uurcrgn/AB_NYC_2019_2.xlsx ?dl=0

Slide 103

Slide 103 text

データセット • パチンコとCOVID-19 データは、Slack で配布

Slide 104

Slide 104 text

データセット (その1) • FIFA19 Datasets; クロスセクションデータ • https://www.kaggle.com/karangadiya/fifa19 FIFA 19 に収録されている フットボールプレイヤー選手 の能力値や市場価値をまとめたデータ

Slide 105

Slide 105 text

データセット(その1)

Slide 106

Slide 106 text

データセット(その3) • New York City Airbnb Open Data • https://www.kaggle.com/dgomonov/new-york-city-airbnb-open- data

Slide 107

Slide 107 text

データセット(その3) • Columns • Id; listing ID • Name; name of the listing • host_id; host ID • host_name; name of the host • neighbourhood_grouplocation • neighbourhoodarea • Latitude; latitude coordinates • Longitude; longitude coordinates • room_type; listing space type • Price; price in dollars • minimum_nights; amount of nights minimum • number_of_reviews; number of reviews • last_review; latest review • reviews_per_month; number of reviews per month • calculated_host_listings_count; amount of listing per host • availability_365; number of days when listing is available for booking

Slide 108

Slide 108 text

データセット(その3)

Slide 109

Slide 109 text

分析について • どのデータセットを使うかはおまかせします • どれを説明変数/被説明変数にするかはおまかせします • サラリー and/or 市場価値 and/or 能力? • ダミー変数の作成などもおまかせします

Slide 110

Slide 110 text

FIFA19 データの場合, 考えうる仮説 • 選手の加齢は市場価値を押し下げる • クラブの移籍は選手のサラリーを押し上げる • 国際的な認知度は選手の市場価値を押し上げる • 現在の契約終了年までの期間が短いほど、市場価値を上げる • 南米出身の選手は、欧州出身の選手に比べサラリーの水準が低 い • Etc…

Slide 111

Slide 111 text

Notebook の解説 • データを取り込み, 重回帰分析まで行った結果を Anaconda/Jupyter Notebook バージョン, Google Colaboratory バージョンでそれぞれご用意しました • 被説明変数と説明変数を適宜入れ替えれば, ご自身のレポート にお使い頂けます

Slide 112

Slide 112 text

Notebook の解説 やっていること ・Excel にしたデータをJupyter Notebook に取り込む (同じディレクトリにデータを 入れておくこと) ・シートの1枚目 (0番目) を input_sheet_df にインポートする ・input_sheet_df.head(10) で, データの 10番目までを表示する Messi や Ronaldo, Suarez などのデータ が表示されていることが確認できる

Slide 113

Slide 113 text

Notebook の解説 やっていること ・説明変数と被説明変数をそれぞれの列か ら取り出す (.iloc [行, 列]で, 行を指定せず 列のみを指定する) ・scipy.stats.lingress(説明変数, 被説明変 数) で単回帰を回す ・散布図および, 単回帰分析の結果をアウ トプットする

Slide 114

Slide 114 text

Notebook の解説 被説明変数; overall (ゲーム上での総合評価) 説明変数; age (年齢) 年齢が高くなるほど, 総合的な評価が高くなる -> おそらく, 評価の高くない選手は引退している

Slide 115

Slide 115 text

Notebook の解説 sm.OLS(被説明変数, 定数項+説明変数) で回帰分析 を行い, 結果を表として出力する 被説明変数; overall (ゲーム上での総合評価) 説明変数; age (年齢) 定数項および説明変数はそれぞれプラスに有意だが, R修正項は高くない。

Slide 116

Slide 116 text

Notebook の解説 sm.OLS(被説明変数, 定数項+説明変数) で回帰分析 を行い, 結果を表として出力する 被説明変数; wage (年俸) 説明変数; age (年齢) 定数項はマイナス, 説明変数はプラスに有意だが, R修正項はかなり高くない。

Slide 117

Slide 117 text

Notebook の解説 • plt.scatter パッケージを用い, wage (年俸)とage(年齢) をプ ロットする • 30歳までは年俸は上昇してい くが, その後下方トレンドが あることが確認できる • いくつか外れ値があることが 確認できる

Slide 118

Slide 118 text

Notebook の解説 • Seaborn パッケージで, ヒス トグラムと散布図を同時にプ ロットする • 年齢はF分布, 年俸はべき乗分 布に近いことが確認できる • 外れ値はメッシやクリスティ アーノロナウドなど.

Slide 119

Slide 119 text

Notebook の解説 • 同様に, 重回帰分析を sm.OLS パッケージを用いて 行う • 説明変数が空の行を削除する (x_list.drop… 以下) • 年齢とレピュテーション, 契 約満期までの残り年数および 評価値はプラスに有意, 定数 項はマイナスに有意, 利き足 ダミーは有意であるとはいえ ないことが確認できる

Slide 120

Slide 120 text

Notebook の解説 • VIF値を確認する (第二回の講 義参照) • いずれも10は超えてないこと が確認できる

Slide 121

Slide 121 text

Notebook の解説 • sns.pairplot を使って, 変数間 の散布図および, ヒストグラ ムを表示する • .savefig を用いて, 出力結果を 保存する

Slide 122

Slide 122 text

わかること ・年俸の分布はかなりskew ・年齢と年俸の単回帰の傾きは, 右利きと 左利きでかなり違う(メッシエフェクト?) ・年齢が高くなると, 残りの契約期間は短 くなる(自明) ・国際的なレピュテーションと, 総合的な 評価は正の関係 ・年齢と総合的な評価もやはり正の関係 (生存バイアス)

Slide 123

Slide 123 text

みなさんにレポートでやって頂きたいこ と • Python + Notebook に慣れていただく • 被説明変数と説明変数の組み合わせを考えてみる • 変数を自分で作り出す • 与えられている変数から, 自分で変数を作成する • 他のデータセットを引っ張ってくる。特に Airbnb の場合, このテーブ ルにあるパラメータだけだと, あんまりおもしろくない(おもしろくな い)。 • ある程度説明力 (ここではとりあえずR修正2乗値) の高い誘導 形 (reduced form) のモデルを作り出す

Slide 124

Slide 124 text

レポートの評価方法 • Excellent • データおよび適切な分析手法に基づき、独自の視点で十分に考察がなされている • Good • データおよび適切な分析手法に基づき、独自の視点で考察がなされている • Fair • データに対して分析が行われているが、一般的な範囲での考察にとどまる • Bad • 考察がなされていない,あるいはデータの解析が十分に行われていない • Failed • 断りなく他者の見解を引用している,その他不正行為に相当する

Slide 125

Slide 125 text

レポートの評価基準 • 説明の順序は適切か.特に重要な項目の抜けや漏れはないか. • 原典からの引用内容に事実誤認はないか. • 誤字脱字(誤植)はないか.文法上の誤りはないか.文法ルー ルが統一されているか. • 文章は明快か.誤解を招くような内容・表現はないか. • 参照,引用のルールに準拠しているか.剽窃はないか. • 不正行為に相当する事項はないか. • 提出期限を厳守しているか.

Slide 126

Slide 126 text

次回予定.データの取得と前処理 (Web スクレイ ピング, RPA, API そして手入力) / SQL の使い方 • データといっても、そのほとんどは実のところ定型化されていません。Web サ イトや書籍や国会図書館から手作業でひとつひとつ入力し、あるいは、Web ス クレイピングやAPI, RPA を用いて, Web から取得する必要があります。データ 分析は、こうした事前の作業が作業全体の60-70パーセントを占めています。こ うした手続きの具体例について、座学を用いて紹介した後、雑誌や Web に掲載 されたデータを取得する手法についてご紹介します。 • 後半では, SQL の使い方について概要を説明します。大量のデータを運用し活用 するためには、データベースを用いると便利です。Google BigQuery を用い、 データから必要な情報を抽出し、データ同士を接合する方法について簡単に解説 を行います。また続いて, Google Big Query を用いて解析を行いますまた, 必要 に応じて MySQL サーバおよび MySQL Workbench の導入方法、多変量データ の展開方法について解説します。

Slide 127

Slide 127 text

次回: SQL ことはじめ • 大量のデータを運用し活用するためには、データベースを用い ると便利です。MySQL を用い、データから必要な情報を抽出 し、データ同士を接合する方法について簡単に解説を行い、続 いて実データを用いて解析を行います。MySQL Workbench および MySQL サーバのインストール方法について解説し、 データのSQL サーバへの展開方法について解説します。

Slide 128

Slide 128 text

リレーショナル・データベース • Excel のようにひとつのテーブルですべてのデータを管理する のではなく, キーを介して複数のテーブルから構成されるデー タベース 5/14/2020 128 中間試験の成績 ・学籍番号 ・問1の得点 ・問nの得点 期末試験の成績 ・学籍番号 ・問1の得点 ・問nの得点 平常点の成績 ・学籍番号 ・出席点 ・小テストの得点 総合成績 ・学籍番号 ・総合得点(=中間試 験+期末試験+平常点) ・最終成績

Slide 129

Slide 129 text