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

慶應義塾大学 #経済学のためのいろいろなデータさがし 2020夏: 1/2

慶應義塾大学 #経済学のためのいろいろなデータさがし 2020夏: 1/2

慶應義塾大学「経済学のためのいろいろなデータさがし」2020夏: 1/2
1-1. イントロダクション
1-2. スクレイピングその1; パチンコホール
1-3. スクレイピングその2; 補助金ポータル
1-4. API その1; RESAS
1-5. API その2; Twitter API

一橋大学大学院経済学研究科
原泰史
[email protected]

yasushihara

July 08, 2020
Tweet

More Decks by yasushihara

Other Decks in Education

Transcript

  1. 慶應義塾大学 「経済学のための いろいろなデータさがし」 2020夏: 1/2 1-1. イントロダクション 1-2. スクレイピングその1; Pandas

    1-3. スクレイピングその2; BeautifulSoup 1-4. API その1; RESAS 1-5. API その2; Twitter API 一橋大学大学院経済学研究科 原泰史 [email protected]
  2. 今日の内容 • 16:30-16:45 • 1-1. イントロダクション「データ分析までに必要なこと」 • 16:45-17:00 • 1-2.

    スクレイピングその1; パチンコホール • 17:00-17:15 • 1-3. スクレイピングその2; 補助金ポータル • 17:15-17:30 • 1-4. API その1; RESAS • 17:30-17:45 • 1-5. API その2; Twitter API • 17:45-18:00 • 質疑応答
  3. データ分析の流れ なんの データ を使う か考え る 先行研 究・事 例を探 す

    データ の取得 方法を 確認す る データ をデー タベー ス or 手 入力 or 図書館 or 口コ ミ or Web ア ンケー トで入 手する 入手し たデー タの妥 当性を 確認す る データ を統計 ソフト and/or Python and/or SQL で 処理す る データ に統計 処理を 行う データ に関す る解釈 を行う 解釈さ れた データ と、そ の解釈 を Word か Jupyter Noteboo k か Tex でテキ スティ ングす る レポー トとし て先生 に送る/ 上司に 提出す る/学術 誌に投 稿する 今日メインに取り上げる内容 前回/前々回で 取り上げた内容 レポートでやって いただく内容 入手したデータに不足があれば, 別のデータソース を参照し, その入手可能性や妥当性を確認し, データ の入手作業を改めて行う
  4. 1. 図書館や国会図書館で入手する • 一橋大学図書館 • および, 日経BPデータベースなど, 大学が契約しているデータベース • ただし、2020年6月現在も非常にアクセスしずらい

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

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

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

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

    ORCID ID 0000-0001- 9500-1150 • Orcid Public API の Client ID や Cilient secret, token を取 得し, API 経由で 原講師の最 近の論文情報を取得する
  13. 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
  14. 4. Web アンケートでデータを集める • アンケートを Google Docs などを 使って, 集める

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

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

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

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

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

    したソフトウェアロボットである。作業時間を圧倒的に短縮す ることができ、作業ミス無しで連続稼働が可能であるため、オ ペレーションプロセスの限界費用を低下させることができる。 • RPAはソフトウェアロボットの特徴を最大限に発揮するもので、 具体的には、定型化された表計算ソフト間のデータのやりとり、 メールのやりとり、ウェブ情報のリアルタイム収集や確認作業、 そして、それら各作業間の連携などを、プログラミングする必 要もなくマクロを作成し実行することができる. http://www.jsse.jp/~kenkyu/201631/04/20163104_115-118.pdf
  21. 手入力すると気づくこと • 例外的な表記が, 定型なデータになっているはずなのに, とても たくさんある • 長い文章の表記 • 抜けている情報をどう表記するか

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

    と 4.3 参照) • 文字起こしの場合も, スクレイピングやRPA でデータを取得す る場合も, • 1. 元データからどのデータを取得するか • 2. 取得する場合, どういった形式でデータを取得するか • 3. 例外的なデータ/データが入力されていない場合, どう処理するか それぞれ検討する必要がある
  23. Web スクレイピングする • 食べログのレ ビュー情報を取得 して, 東京のラー メン店/フレンチ レストランなラン キングを作成する

    引用; https://qiita.com/toshiyuki_tsutsui/items/f143946944a428ed105b?fbclid=IwAR1xYwmpS0xGbmbyAz7SVlETwhyguMFEYsgdg- Niap27Mj3XurUHjJoG-Bk
  24. Web スクレイピングする • 引数として, self, list_url, mode を指定 する •

    requests.get で当該URL からデータが 取得できるか確認する • BeautifulSoup を用い, html の parse を行う. • soup_a_list で店名のリストを一括して 取得する • A タグの list-rst__rst-name-target 部 分からデータを取得する
  25. 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 迂直 煮干鰮らーめん 圓 はつね 中華そば 満鶏軒 町田汁場 しおらーめん進化 町田駅前店 麺処 びぎ屋 らぁ麺やまぐち 辣式
  26. 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
  27. 5. Web スクレイピングする • その2; Panda の機能を用いて Web サイト上の表を取得する #女性アイドルのキャパ数

    url = ‘https://wasteofpops.hatenablog.com/entry/2019/05/01/000000' dfs3 = pd.read_html(url) print(dfs3) URLを指定する Web ページ上のテーブルを取得する
  28. パチンコホール分析 • 最寄り駅前にはパチンコ屋がふたつ • ひとつは、4/12 日急に人がいなく なった • どうやら倒産したらしい •

    もうひとつは、その後も営業 • その後、4/21 日まで営業 • 「寡占だったローカルな市場が独占 になるから、百合子に怒られても継 続して独占利潤を獲得する!これ進 研ゼミでやったやつだ!」
  29. やったこと(データセットの選定) 1. 全国47都道府県のパチンコホールの営業/休業情報を探す 1. ググったり 2. Twitter のパチンコ垢なひとがどう情報を探しているのか確認 2. 自分で探すのは面倒なので、データベースサイトを探す

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

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

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

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

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

    B と E と F 列も不必要な データなので削除します. • その後, データが不完備なエントリ を削除します. • Label として, ファイル名を作成し ます. • data3 を to_csv メソッドを用いて 出力します. • これにより、各都道府県ごとのパチ ンコホール情報を掲載した csv ファ イルが作成されます
  35. 累計休業店舗 累計開店中店舗 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, ここって昔はパチンコ屋? 休業開始日
  36. 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; 北海道、パチンコホー ルに休業再要請
  37. 補助金ポータル • 取得できそうな情報 • 補助金名 • 概要 • 地域 •

    実施機関 • 公募期間 • 上限金額・助成額 • 補助率 • 利用目的 • 対象経費 • 公式公募ページ
  38. Step1. 規約を読んでみよう • ⑧IDやパスワードを不正に使用する行為 • ⑨第三者に成りすます行為 • ⑩当社が事前に許諾しない本サービス上での宣伝、広告、 勧誘、又は営業行為 •

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

    • div タグ • Class=p-subsidy__text が指定されていることがわか る。
  40. コーディングの流れ • 必要なパッケージをインポートする • URL を指定する • ID 分繰り返し作業を行う (for

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

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

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

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

    • Response を閉じる • URL が開かない場合 (HTTPError)、not available と表示する • これをID 分繰り返す • データをCSV に保存する
  45. まとめ • Web はデータの宝箱や~ (引用: 彦麻呂) • ただし, 取ってきていいデータとそうではないデータがあります •

    Web 上で「正規化されていない」データセットはたくさん眠っ ています。ご自身の業務ニーズやリサーチクエスチョンに沿っ てデータセットの種を探せば案外見つかります • こうしたデータセットと、公的なデータソースを組み合わせれ ばいろいろなことが出来ます
  46. 今回利用する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
  47. 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
  48. 実習2; RESAS API からデータを取得する • https://opendata.resas- portal.go.jp/ • API経由でデータを取得する •

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

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

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

    関数 を利用することで, その範囲内 で作業を繰り返すことができる • - たとえば, for i in range (1, 48) は, 1 から48 まで i という数 字をひとつずつ増やしなながら 作業することを可能にする • For 変数名 in (繰り返す範囲): • 実行する内容
  52. 実習2. RESAS を API で利用する • 先程取得した東京 都の区別コードリ ストを用い, 各区ご

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

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

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

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

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

    available と表示さ れる • それ以外のデータがリストとし て表示される
  58. 実習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)
  59. 実習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 は日本語に対応していないため, フォントを指定する作業を行う
  60. やってみよう • RESAS のAPI を使って, 都道府県や市区町村, 産業分 類ごとにデータを取得し, 基礎統計の確認などを行う •

    たぶん(卒論や修論や博論に)使えそうなところ • Difference in Difference なモデルの設定 • Treated Group と Control Group を設定
  61. ユースケース; 顧客動向をオフラインではなくオンラインで把握する • あなたはオフラインマーケティングのスペシャリストです • フィジカルなマーケティング手法を用いて、これまで数々の実績を 残してきました • ところが、COVID-19 の流行により、これまでの顧客エンドポイン

    トの多くが利用できなくなりました • これまでやっていた販促物の配布ではなく、オンラインにあるデー タを用いて顧客動向を把握することにしました • まずは、自社に関連する言葉を、ソーシャルメディア上から検索す ることに • Twitter からデータを取得することにしました • ツイート数やリツイート数, Favorite 数、それから、実際のツイートの中身 も観察することにしました
  62. 作業フロー 1. Twitter APIを利用するための手続きをする 2. Twitter API 経由からデータを取得するために, コーディング する

    3. 取得したデータを観察し、妥当性を検証する (4. データを整理し、レポーティングする) (とりあえず、今日は1. から 3. まで)
  63. 特定のキーワードに基づきツイートを取得する(1) • 必要なパッケージ (tweppy, datetime, codecs, csv) をイン ポートする •

    API 認証に必要な Consumer Key や Access Token を指定 する • Auth に鍵を渡し, tweepy 経由でTwitter のAPI をノックする
  64. 特定のキーワードに基づきキーワードを 取得する • tweepy.Curserを 用い関連するツ イートを一件ずつ 取得する • ツイートのID •

    ツイートをした ユーザ名 • ツイートをした 場所 • ツイートをした 時間 • ツイートがふぁ ぼられた回数 • ツイートがリツ イートされた回 数 が取得できる
  65. SNS データは何に使える? • 消費者行動 (マーケティングっぽい) • 特定企業や産業のレピュテーションの変化 • 研究{者}の社会的なインパクトの測定 ->

    特定の研究者の名前 を含むツイートの回数, リツイートの回数, Fav 数 etc… • 具体的なテキストデータの処理技法は数回後の講義で。
  66. 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