一橋大学 #経済学のための実践的データ分析 2020秋: 3/12

F5f758ca2ec0de2da9781ce9391d9c6c?s=47 yasushihara
September 22, 2020

一橋大学 #経済学のための実践的データ分析 2020秋: 3/12

一橋大学 #経済学のための実践的データ分析 2020秋: 3/12

3.データの集め方
3.1.データ分析までに必要なこと
3.2.スクレイピングでデータ取得
3.3.SNS情報をAPI経由で取得
3.4.レポート1のご説明

一橋大学大学院経済学研究科
原泰史
yasushi.hara@r.hit-u.ac.jp

F5f758ca2ec0de2da9781ce9391d9c6c?s=128

yasushihara

September 22, 2020
Tweet

Transcript

  1. 一橋大学 「経済学のための 実践的データ分析」 2020秋: 3/12 3.データの集め方 3.1.データ分析までに必要なこと 3.2.スクレイピングでデータ取得 3.3.SNS情報をAPI経由で取得 3.4.レポート1のご説明

    一橋大学大学院経済学研究科 原泰史 yasushi.hara@r.hit-u.ac.jp
  2. 今日の内容 • 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:20 • 3.3 SNS データをAPI で処理[録画] • 14:20-14:25 • インターミッション3 [録画 なし] • 14:25-14:45 • 3.4レポート1のご説明 [録画]
  3. 3.1 データ分析までに必要なこと

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

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

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

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

    of Science) など, その ままだと解析をそのまま行うには複雑過ぎるデータ形式で提供 される場合もあるので, 必要に応じてデータの parse 処理を行 う。 • 具体例; • Web of Science のXML データをparse してSQL に
  8. 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?
  9. 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
  10. 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.
  11. 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) );
  12. 2. データの提供元から入手する • データを parse して, XML からSQL に変換 する

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

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

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

  16. 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
  17. 4. Web アンケートでデータを集める • アンケートを Google Docs などを 使って, 集める

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

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

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

    • 足りないデータをあとからアンケート調査しても, 調査時期が異なるので 統計的に正しい解析とは言えなくなる • 質問表の設計手法の参考文献 • 『質問紙デザインの技法[第2版]』 • 『図解 アンケート調査と統計解析がわかる本[新版]』
  21. 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総研
  22. 5. Web スクレイピングする • Web スクレイピング • Python etc… でコーディングすることで,

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

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

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

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

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

  28. 3.2 Web からデータを集める

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

    が作 成出来るように • まずは、3.2 Web スクレイピングと, 3.3 Twitter API からデー タ取得を取り扱います。来週はSQL の使い方と、具体的なデー タセットの拾い方をご説明します
  30. Web スクレイピングする • 食べログのレ ビュー情報を取得 して, 東京のラー メン店/フレンチ レストランなラン キングを作成する

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

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

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

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

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

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

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

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

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

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

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

  43. 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
  44. 5. Web スクレイピングする • その2; Panda の機能を用いて Web サイト上の表を取得する #女性アイドルのキャパ数

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

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

  47. 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);
  48. パチンコホール分析 • 最寄り駅前にはパチンコ屋がふたつ • ひとつは、4/12 日急に人がいなく なった • どうやら倒産したらしい •

    もうひとつは、その後も営業 • その後、4/21 日まで営業 • 「寡占だったローカルな市場が独占 になるから、百合子に怒られても継 続して独占利潤を獲得する!これ進 研ゼミでやったやつだ!」
  49. データ収集用 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

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

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

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

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

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

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

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

  57. 累計休業店舗 累計開店中店舗 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, ここって昔はパチンコ屋? 休業開始日
  58. 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; 北海道、パチンコホー ルに休業再要請
  59. パチンコホール営業/休業/閉店数推移 (2020/4/2-2020/5/6) 出所: P-world, ここって昔はパチンコ屋? 大手パチンコホール数= 1219 非大手パチンコホール数= 6608

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

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

  62. 利用する 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
  63. ユースケース; 顧客動向をオフラインではなくオンラインで把握する • あなたはオフラインマーケティングのスペシャリストです • フィジカルなマーケティング手法を用いて、これまで数々の実績を 残してきました • ところが、COVID-19 の流行により、これまでの顧客エンドポイン

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    特定の研究者の名前 を含むツイートの回数, リツイートの回数, Fav 数 etc… • 具体的なテキストデータの処理技法は数回後の講義で。
  94. 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
  95. API を用いたデータ取得のまとめ • 鍵を手に入れる作業がまず必要です(これが意外に面倒) • データの提供方式がAPIごとに異なるので、この講義でも何回 か別のパターンをご紹介出来ればと考えています • 具体的にはRESAS •

    Web からコピペするよりも、一つ一つ画面を追いかけるよりも 複雑なデータを取得することができます
  96. 3.4 レポート1回目のお知らせ

  97. レポートの内容 • 概要 • 指定された4つのデータセット (FIFA19, COVID-19, Airbnb, パチンコホー ル)

    からひとつを選び、 Jupyter Notebook 上で解析し, 重回帰分析を行う • レポートでは • (1) 被説明変数と説明変数の関係性 • (2) R二乗項の値 • (3) VIF 値による, 多重共線性のチェック などを報告した上で, 構築したモデルについて考察を行うこと • 提出期間: - 2020/10/6 13:15:00 (JST) • 提出方法: • Slack のDM で、Notebook ファイルもしくは Google Colaboratory へのリン クを送信すること
  98. レポートの内容(2) • 引用文献がある場合, 末尾に明記すること • 文字数は問わない

  99. 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
  100. 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
  101. データセット(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

  102. データセット(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
  103. データセット • パチンコとCOVID-19 データは、Slack で配布

  104. データセット (その1) • FIFA19 Datasets; クロスセクションデータ • https://www.kaggle.com/karangadiya/fifa19 FIFA 19

    に収録されている フットボールプレイヤー選手 の能力値や市場価値をまとめたデータ
  105. データセット(その1)

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

    data
  107. データセット(その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
  108. データセット(その3)

  109. 分析について • どのデータセットを使うかはおまかせします • どれを説明変数/被説明変数にするかはおまかせします • サラリー and/or 市場価値 and/or

    能力? • ダミー変数の作成などもおまかせします
  110. FIFA19 データの場合, 考えうる仮説 • 選手の加齢は市場価値を押し下げる • クラブの移籍は選手のサラリーを押し上げる • 国際的な認知度は選手の市場価値を押し上げる •

    現在の契約終了年までの期間が短いほど、市場価値を上げる • 南米出身の選手は、欧州出身の選手に比べサラリーの水準が低 い • Etc…
  111. Notebook の解説 • データを取り込み, 重回帰分析まで行った結果を Anaconda/Jupyter Notebook バージョン, Google Colaboratory

    バージョンでそれぞれご用意しました • 被説明変数と説明変数を適宜入れ替えれば, ご自身のレポート にお使い頂けます
  112. Notebook の解説 やっていること ・Excel にしたデータをJupyter Notebook に取り込む (同じディレクトリにデータを 入れておくこと) ・シートの1枚目

    (0番目) を input_sheet_df にインポートする ・input_sheet_df.head(10) で, データの 10番目までを表示する Messi や Ronaldo, Suarez などのデータ が表示されていることが確認できる
  113. Notebook の解説 やっていること ・説明変数と被説明変数をそれぞれの列か ら取り出す (.iloc [行, 列]で, 行を指定せず 列のみを指定する)

    ・scipy.stats.lingress(説明変数, 被説明変 数) で単回帰を回す ・散布図および, 単回帰分析の結果をアウ トプットする
  114. Notebook の解説 被説明変数; overall (ゲーム上での総合評価) 説明変数; age (年齢) 年齢が高くなるほど, 総合的な評価が高くなる

    -> おそらく, 評価の高くない選手は引退している
  115. Notebook の解説 sm.OLS(被説明変数, 定数項+説明変数) で回帰分析 を行い, 結果を表として出力する 被説明変数; overall (ゲーム上での総合評価)

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

    説明変数; age (年齢) 定数項はマイナス, 説明変数はプラスに有意だが, R修正項はかなり高くない。
  117. Notebook の解説 • plt.scatter パッケージを用い, wage (年俸)とage(年齢) をプ ロットする •

    30歳までは年俸は上昇してい くが, その後下方トレンドが あることが確認できる • いくつか外れ値があることが 確認できる
  118. Notebook の解説 • Seaborn パッケージで, ヒス トグラムと散布図を同時にプ ロットする • 年齢はF分布,

    年俸はべき乗分 布に近いことが確認できる • 外れ値はメッシやクリスティ アーノロナウドなど.
  119. Notebook の解説 • 同様に, 重回帰分析を sm.OLS パッケージを用いて 行う • 説明変数が空の行を削除する

    (x_list.drop… 以下) • 年齢とレピュテーション, 契 約満期までの残り年数および 評価値はプラスに有意, 定数 項はマイナスに有意, 利き足 ダミーは有意であるとはいえ ないことが確認できる
  120. Notebook の解説 • VIF値を確認する (第二回の講 義参照) • いずれも10は超えてないこと が確認できる

  121. Notebook の解説 • sns.pairplot を使って, 変数間 の散布図および, ヒストグラ ムを表示する •

    .savefig を用いて, 出力結果を 保存する
  122. わかること ・年俸の分布はかなりskew ・年齢と年俸の単回帰の傾きは, 右利きと 左利きでかなり違う(メッシエフェクト?) ・年齢が高くなると, 残りの契約期間は短 くなる(自明) ・国際的なレピュテーションと, 総合的な

    評価は正の関係 ・年齢と総合的な評価もやはり正の関係 (生存バイアス)
  123. みなさんにレポートでやって頂きたいこ と • Python + Notebook に慣れていただく • 被説明変数と説明変数の組み合わせを考えてみる •

    変数を自分で作り出す • 与えられている変数から, 自分で変数を作成する • 他のデータセットを引っ張ってくる。特に Airbnb の場合, このテーブ ルにあるパラメータだけだと, あんまりおもしろくない(おもしろくな い)。 • ある程度説明力 (ここではとりあえずR修正2乗値) の高い誘導 形 (reduced form) のモデルを作り出す
  124. レポートの評価方法 • Excellent • データおよび適切な分析手法に基づき、独自の視点で十分に考察がなされている • Good • データおよび適切な分析手法に基づき、独自の視点で考察がなされている •

    Fair • データに対して分析が行われているが、一般的な範囲での考察にとどまる • Bad • 考察がなされていない,あるいはデータの解析が十分に行われていない • Failed • 断りなく他者の見解を引用している,その他不正行為に相当する
  125. レポートの評価基準 • 説明の順序は適切か.特に重要な項目の抜けや漏れはないか. • 原典からの引用内容に事実誤認はないか. • 誤字脱字(誤植)はないか.文法上の誤りはないか.文法ルー ルが統一されているか. • 文章は明快か.誤解を招くような内容・表現はないか.

    • 参照,引用のルールに準拠しているか.剽窃はないか. • 不正行為に相当する事項はないか. • 提出期限を厳守しているか.
  126. 次回予定.データの取得と前処理 (Web スクレイ ピング, RPA, API そして手入力) / SQL の使い方

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

    および MySQL サーバのインストール方法について解説し、 データのSQL サーバへの展開方法について解説します。
  128. リレーショナル・データベース • Excel のようにひとつのテーブルですべてのデータを管理する のではなく, キーを介して複数のテーブルから構成されるデー タベース 9/21/2020 128 中間試験の成績

    ・学籍番号 ・問1の得点 ・問nの得点 期末試験の成績 ・学籍番号 ・問1の得点 ・問nの得点 平常点の成績 ・学籍番号 ・出席点 ・小テストの得点 総合成績 ・学籍番号 ・総合得点(=中間試 験+期末試験+平常点) ・最終成績
  129. THANKS yasushi.hara@r.hit-u.ac.jp