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

#経済学のための実践的データ分析 3.4 データベースとは?/SQL の使い方

yasushihara
September 27, 2019

#経済学のための実践的データ分析 3.4 データベースとは?/SQL の使い方

#経済学のための実践的データ分析
一橋大学経済学部/経済学研究科 38 番教室
原泰史 [email protected]

Contents
- そもそも, データベースとは?
- SQL とは. リレーショナル・データベース. グラフ・データベースの紹介
- From Scratch からSQL の解析環境を構築しよう (Windows 編, Mac 編)
- Google Big Query で多変量データの分析に慣れてみよう

yasushihara

September 27, 2019
Tweet

More Decks by yasushihara

Other Decks in Education

Transcript

  1. 講義の予定 • 次回 3.5: 10/1 • データの可用性とプライバシー • 次次回 3.6:

    10/4 • データベースを用いた分析(1) 特許/論文データベース • レポート1回目の提出は講義開始時間まで
  2. 今日の内容. SQL ことはじめ • 大量のデータを運用し活用するためには、データベースを用い ると便利です。MySQL を用い、データから必要な情報を抽出 し、データ同士を接合する方法について簡単に解説を行い、続 いて実データを用いて解析を行います。 •

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

    ・学籍番号 ・問1の得点 ・問nの得点 期末試験の成績 ・学籍番号 ・問1の得点 ・問nの得点 平常点の成績 ・学籍番号 ・出席点 ・小テストの得点 総合成績 ・学籍番号 ・総合得点(=中間試 験+期末試験+平常点) ・最終成績
  4. 今日の内容 (105分) 1: データベースことはじめ 2: データベースを触ってみ る (オンプレミスバージョン) 3: データベースを触ってみ

    る (クラウドバージョン) 4: レポート (第一回) の説明 Appendix A. Mac にSQL 環境 を展開する方法 Appendix B. TXT/CSV ファ イルからSQL サーバにデー タをインポートする
  5. SQL を使うと 便利なこと • Q. “なんで SQL を使うん ですか?Excel かStata

    で いいんじゃないですか?” • A1. データ量 1270万件のデータを人間の 手やExcelで作業するのは無 理!(ときどきそういうこと をする学者さんいるけど) リレーショナルデータベース を使って処理したほうがはや い! 2019/9/23 8
  6. SQL を使うと便利なこと • A2. Excel の限界 • 1048576列 • これ以上は分割しないと

    ワークシートで処理できない • CPUのファン音が唸りをあげる • 腱鞘炎にもなる 2019/9/23 10
  7. データベースの種類 • RDB(OLTP; Online Transaction Processing) • DocDB • グラフDB

    • Hadoop • RDB(DWH) Hadoop (HDFS+MapReduce) • Apache Hadoop • CloudEra • MapR • Hortonworks RDB(DWH) • Oracle Exadata • Teradata • Netezza • RedShift KVS/DocDB KVS • Cassandra • Redis DocDB • MongoDB • CouchBase RDB(OLTP) • Oracle • SQL Server • MySQL • PostgreSQL GraphDB • Neo4j • Datadog • OrientDB 引用: RDB技術者のためのNoSQLガイド スケールアウトできる スケールアウトできない スループット重視 オペレーション用途
  8. 昨今のデータセット • データ量 (Volume) が増大している • 処理速度 (Velocity) が増大している •

    多様性 (Variety) が増加している • 正規化かつ、構造が固定されたデータ以外も扱うことが増えている • 具体例 • ソーシャルメディアに投稿されたテキスト • メタデータ • センシングデータ • メール • 取引データ 引用: RDB技術者のためのNoSQLガイド
  9. 構造データと半構造データ データの分類 説明 データの例 非リレーショ ナルデータ 非構造データ バイナリや テキスト形 式など,

    データの構 造化が行わ れていない 半構造データ (ex. XML/JSON) 構造はある がスキーマ がない。頻 繁に構造が 変わる。 リレーショナ ルデータ 構造化データ (ex. RDBMS) スキーマが あり, 構造 が変わらな い。 電子 メール テキス ト・音声 データ システ ムログ オフィ ス文章 経理・財 務・人事 商品・ 在庫 営業・ CRM 決済・ 残高 センサ リング 情報 口コミ SNS 健康・ 医療 データ 統計 データ 行政 データ 他社保 有デー タ 引用: RDB技術者のためのNoSQLガイド
  10. データモデルごとの違い (cont.) • キーバリューストア (KVS) • スケールアウトして, 大量データに対するクエリを高速に応答できる。 キーでアクセスするシンプルな使い方がメイン •

    ドキュメントDB • KVSの特徴に加えてJSONを扱う機能が豊富。スキーマレス (データ構 造を事前に定義する必要がなく、値の型も固定されない)。 • RDB • グラフDB • スケールアウトには適さない。RDB以上に複雑なデータ処理が可能。
  11. グラフDBのデータ構造 :ラベル ノード 属性 {キー: バリュー, キー:バリュー} :ラベル ノード 属性

    {キー: バリュー, キー:バリュー} :タイプ 属性 {キー: バリュー, キー:バリュー} 関係性 ラベル; 同じ種類のノードを識別するためのドメインの定義 ノード; RDB におけるレコードに相当。複数の属性を{キー:バリュー}で保持出来る 関係性; ノードとノードの間に存在, ノード間のつながりを表現する. 属性; RDB におけるカラム.
  12. 社会科学{経済学, 経営学, 法学, 社会学} の 研究でグラフDBが利用できそうなケース • 企業間の取引関係の分析, SCM の分析

    • 労使関係の分析 • 空間情報データ • 研究者同士の引用 (前方引用, 広報引用関係, 共著関係の分析 • 論文データベース • 特許データベース • 口コミの生成過程の分析
  13. 主なデータベースの違い RDB(OTLP) KVS/DocDB RDB(DWH) Hadoop 重視する性能 ターンアラウンド タイム ターンアラウンド タイム

    スループット スループット 主な用途 オペレーション オペレーション 分析 分析 機能拡張モデル スケールアップ スケールアウト スケールアップ スケールアウト 応答時間 数ミリ秒 数ミリ秒 数秒-数分 数分-数時間 データモデル リレーショナルモ デル キーバリュー、 JSON リレーショナルモ デル 行データモデル データ量 -1TB -100TB -100TB -10PB 主に使うクエリ CRUD, トランザク ション CRUD ロード, 抽出, 集計 ロード, 集計 台数 1-2台 (正副構成) 3台-20台 1-2台 (正副構成) 10-100台 レプリケーション オプション デフォルト オプション デフォルト 引用: RDB技術者のためのNoSQLガイド
  14. PATSTAT のモデル図 5/14/2015 27 • テーブルとテーブルをつなぎ合わせ るIDがあり • IDを介して複数のテーブルの関係性 (リレーショナル)

    が構築されている • これらのテーブルをつなぎ合わせる ことで、複雑なデータの解析を行う ことができる
  15. 日本に属する組織または個人が2014年に出願した特許のう ち, 他国の組織または企業とどのくらいコラボレーションを しているのか調べてみる • クエリ • SELECT COUNT(*) AS

    numberOfCommonApplications, p1.doc_std_name as name1, p1.person_ctry_code as cc1, p2.doc_std_name as name2, p2.person_ctry_code as cc2 FROM tls206_person p1 JOIN tls207_pers_appln pa1 ON p1.person_id = pa1.person_id JOIN tls207_pers_appln pa2 ON pa1.appln_id = pa2.appln_id JOIN tls206_person p2 ON pa2.person_id = p2.person_id join tls201_appln p3 on pa1.appln_id = p3.appln_id WHERE p1.person_ctry_code = 'JP' AND p3.appln_filing_date >= '2014-01-01' AND p3.appln_filing_date <= '2014-12-31‘ AND pa1.appln_id > 0 AND pa2.appln_id > 0 AND p1.person_ctry_code <> p2.person_ctry_code GROUP by p1.doc_std_name, p1.person_ctry_code, p2.doc_std_name, p2.person_ctry_code ORDER BY numberOfCommonApplications DESC, p1.doc_std_name ASC, p2.doc_std_name ASC 5/14/2015 28 クエリ; データを取り出す上での約束事を明記 したもの
  16. コラボレーション国ランキング US 855 (空白) 489 GB 131 DE 105 KR

    101 CN 82 CA 59 SG 57 FR 57 NL 27 SA 20 CH 18 BE 18 IL 15 TH 14 LU 13 IN 11 5/14/2015 29
  17. 企業ランキング PANASONIC CORP 100 SONY CORP 81 SHARP KK 46

    KOBE STEEL LTD 41 FUJITSU LTD 36 TAKEDA PHARMACEUTICAL 28 NISSAN MOTOR 27 OTSUKA PHARMA CO LTD 23 HONDA MOTOR CO LTD 23 NIPPON STEEL & SUMITOMO METAL 20 TEXAS INSTRUMENTS JAPAN 20 TOSHIBA KK 20 CANON KK 20 HADANO HIROYUKI 19 NEC CORP 16 SHIONOGI & CO 14 SAWADA HARUKO 13 TOSHIBA TECHNO CT INC 13 SUGIO TOSHIYASU 13 IBM JAPAN 12 SATO YOSHITAKA 11 KYOCERA CORP 11 UNITIKA LTD 10 TATEISHI TAKAAKI 10 MASAKI TAKAKI 10 FUNAI ELECTRIC CO 10 5/14/2015 30
  18. コラボレーション国x企業 国名 PANASON IC CORP SONY CORP SHARP KK KOBE

    STEEL LTD FUJI TSU LTD TAKEDA PHARMAC EUTICAL NISS AN MOT OR HONDA MOTOR CO LTD OTSUKA PHARMA CO LTD TOS HIB A KK TEXAS INSTRUME NTS JAPAN NIPPON STEEL & SUMITOMO METAL CA N O N KK 総 計 (空 白) 68 6 40 33 14 27 1 5 3 16 21 3 US 6 56 3 7 5 21 5 10 12 4 12 9 GB 9 3 17 8 7 5 1 50 CN 12 1 10 6 1 1 31 FR 1 4 10 15 KR 8 8 DE 3 4 7 SG 6 6 BE 3 1 4 MY 4 4 5/14/2015 31
  19. a. オンプレミスな実習コース (所要時間 90分~105分) 1. リレーショナルデータベース (MySQL) の環境をローカル (自 分の

    PC and/or Mac) に構築するため, MySQL Server と MySQL Workbench を導入する 2. Manaba からデータをダウンロードし, MySQL 上にデプロイ する 3. 展開したデータを MySQL Workbench を使って, 初期的な解 析を行う 4. JupyterNotebook からデータを読み込み初期的な解析をする
  20. (1) 特許データベース (patR) • app_info 出願経過 テーブル 9/23/2019 36 フィール

    ド名 型 インデックス 内容(カッコ内は コード表インデッ クス) 1 app_num varchar(20) 出願番号:すべて半角(B0010) 2 count int(11) ワーク用カウンタ 3 title varchar(255) 発明の名称 4 app_date date 出願日 5 renewal_dat e date 更新日付:出願マスタ 6 id bigint(20) 元処理番号 7 pat_app_nu m varchar(10) 原出願記事番号(B0010) 8 app_type varchar(4) 原出願記事関連種別(B0310,C0025) 9 pub_num varchar(10) 公開番号 10 pub_date date 公開日 11 exam_pub_n um varchar(10) 公告番号 12 exam_pub_d ate date 公告日 13 intl_app_nu m varchar(12) 国際出願番号 14 pry_cnty char(2) 筆頭優先権主張国 15 num_claim_ app int(11) 請求項の数:出願時 16 num_claim_ examed int(11) 請求項の数:公告決定時 17 num_claim_r eg int(11) 請求項の数:登録査定時 18 reg_num varchar(19) 特許番号または登録番号 19 reg_date date 登録日 20 rej_rsn char(2) 拒絶理由条文コード(C0710) 21 cnln_cl char(2) 本権利抹消識別(C0780) 22 term_dat e date 本権利消滅年月日 23 pry_clai m_date date 優先権主張日 24 dspn_ex am_date date 審査最終処分日 25 dspn_ex am_code char(3) 審査最終処分種別コード(C0360) 26 apnum varchar( 13) MUL ‘JPP’をapp_numの先頭につけた文字列 27 fin_decn char(1) 査定種別コード(C0350) 28 fin_decn _date date 査定発送日 29 trans_su bm_date date 翻訳文提出日 30 trans_pu b_num varchar( 10) 公表番号 31 idp int(11) PRI 本テーブルの固有行番号 32 num_clai m_reg_i nfo int(11) 請求項の数(登録情報) 33 udate date ワーク用日付フィールド 34 IPC8 varchar( 255) 国際特許分類第8版 35 acc_exa m_mark char(1) 早期審査マーク(C0240)
  21. (1)特許データベース (patR) • citation 引用情報 テーブル 9/23/2019 37 フィール ド名

    型 インデッ クス 内容 (カッコ 内はコー ド表イン デック ス) 1 citing varchar(1 0) MUL 引用特許 出願番号 (B0010) 2 cited varchar(1 0) MUL 被引用特 許出願番 号(B0010) 3 type int(11) MUL 種別(1: 審査官引 用 2:特許公 報に記載 された引 用 3:上記両 方に記載 の引用) フィールド名 型 インデックス 内容(カッコ 内はコード表 インデック ス) 1 ids int(11) PRI 固有行番号 2 name text 氏名 3 addr text 住所 4 prefecture char(2) 住所の国県 コード (C0050) 5 id_num varchar(9) 出願人コード (B0070) 6 req_type char(1) 個法官別コー ド(C0070) 7 type int(11) ワーク用 8 name1024 varchar(1024 ) MUL 氏名のイン デックス文字 列 9 addr1024 varchar(1024 ) MUL 住所のイン デックス文字 列 • applicant 出願人
  22. (1) patR • inventor 発明者テーブル 9/23/2019 38 フィールド名 型 インデックス

    内容(カッコ 内はコード表 インデック ス) 1 name text 氏名 2 addr text 住所 3 req_type char(1) 個法官別コー ド(C0070) 4 organization Varchar(255) 所属する組織 の名称 5 ids int(11) PRI 固有行番号 6 name1024 varchar(1024 ) MUL 氏名のイン デックス文字 列 7 addr1024 varchar(1024 ) MUL 住所のイン デックス文字 列 フィールド名 型 インデックス 内容(カッコ内 はコード表イン デックス) 1 apnum varchar(13) MUL ‘JPP’+出願番号 (B0010) 2 app_num varchar(10) MUL 出願番号(B0010) 3 pub_num varchar(10) MUL 公開番号 4 intl_app_num varchar(12) MUL 国際出願番号 5 intl_pub_num varchar(12) MUL 国際公開番号 6 trans_pub_num varchar(10) MUL 公表番号 7 exam_pub_num varchar(10) MUL 公告番号 8 reg_num varchar(10) MUL 特許番号または 登録番号 9 ref_pub_num varchar(13) MUL 文献公開番号 10 ref_trans_pub_n um varchar(13) MUL 文献公表番号 11 ref_examd_pub_ num varchar(13) MUL 文献公告番号 12 ref_reg_num varchar(13) MUL 文献登録番号 13 ref_intl_pub_nu m varchar(13) MUL 文献国際公開番 号 • numbers 番号表テーブル
  23. SQL を使ったデータ分析 • 材料 • MySQL サーバ: オープンソース型データベース。 • RDBMS

    (Relational Database Management System) • MySQL Workbench: MySQL の開発用コンソール • サンプルデータ • Manaba に展開済み • 7z 形式で圧縮しているため, 解凍が必要 2019/9/23 39
  24. 1. MySQL サーバのイ ンストール • 次ページ以降を参照のこと Windows のみなさま • Appendix

    の, “macOS Mojave に MAMP or MySQL Serverと MySQL Workbench をインストールする” を参 照の上, MAMP をインストールするか, 個別に MySQL サーバと MySQL Workbench をインストールすること Mac のみなさま
  25. 1-1. MySQL サーバをインストールしよう • Available Products から “MySQL Server –

    X64” と “MySQL Workbench” を選び ⇒ をクリックして、 Products/Features to be Installed に移 動させる 2019/9/23 45
  26. 1-1.MySQL サーバをインストールしよう • Config Type • Development machine • TCP/IP

    3306 • Open Firewall Port for Network Access チェック ボックスを外す 2019/9/23 49
  27. 1-1.MySQL サーバをインストールしよう • MySQL Root Password を 指定する • Repeat

    Password に同じ パスワードを指定すること 2019/9/23 50
  28. 1-2. MySQL Workbench でMySQL サーバ に接続する • Password を入力する •

    Test Connection をクリック する • 以下のメッセージが出ればOK 2019/9/23 59
  29. 2-2. 今日使うデータ(IIP パテントデータ ベース) • 特許庁の『整理標準化 デー タ』(2013 年度提供分ま で)を基に作成された研究用

    特許データベース • 「1964000001」以降の出願 番号を持つ特許(出願)を含 む • 今回は, (ダウンロード時間の 都合上)一部分のみを切り出し たデータで解析します 2019/9/23 64
  30. 2-2. IIP パテントデータベース • 出願テーブル • 出願番号 • 登録番号 •

    出願日 • 登録日 • IPC番号 • 請求項 (claim の数) などが記載されている 2019/9/23 66
  31. 2-3. データベースをMySQL サーバにインポートする • ここからしないといけないこと • (1) データベースをつくる • (2)

    テーブルをつくる 2019/9/23 68 68 中間試験の成績 ・学籍番号 ・問1の得点 ・問nの得点 期末試験の成績 ・学籍番号 ・問1の得点 ・問nの得点 平常点の成績 ・学籍番号 ・出席点 ・小テストの得点 総合成績 ・学籍番号 ・総合得点(=中間試 験+期末試験+平常点) ・最終成績 これがテーブ ル これがデータベース
  32. 2-3. パテントデータベースをMySQL サー バにインポートする • ダウンロードした hara_space_ap2.7z を解凍する • 解凍するためにソフトウェアのインストールが必要

    • Windows の場合 • https://sevenzip.osdn.jp/ から7zip をダウンロードしてインストール • Mac の場合 • The Unarchiver (https://itunes.apple.com/us/app/the- unarchiver/id425424353?mt=12&v0=WWW-NAUS-ITUHOME- NEWAPPLICATIONS&ign-mpt=uo%3D2) を App Store からインストール • 参考文献; https://qiita.com/ntkgcj/items/afe4863c40680d72a755 • 解凍し, SQL ファイルを取得する
  33. 2-3. パテントデータベースをMySQL サー バにインポートする Import from Self-Comtained File の ...

    から解凍したSQL ファイルを選択する “New” から新しいスキーマを作成する “Start Import” をクリックする
  34. 2-4. MySQL を使ってデータベースを解析し てみる 2019/9/23 77 ・とりあえず、データの 中身を観てみる ・”select *

    from ap;” とタ イプして、雷マークをク リックする ・数秒待つと、先ほどイ ンポートしたデータが表 示される
  35. 2-4. MySQL を使ってIIP パテントデータ ベースを解析してみる • この命令は何をやっているの か? 2019/9/23 79

    select class1,count(*) as count from ap2 group by class1 order by count; Select – 次に書くデータを取得してね 今回の場合; class1 という変数ごとに , その件数を count してね. Count した値の変数名として, count と 名付けてね From – 次のテーブルからデータを取ってきてね 今回の場合; ap2 テーブルからデータを取ってきてね group by – 同じラベル同士の変数はグループを作成してね 今回の場合; class1 で記載された分類ごとにデータを集約してね Order by – 数字の大小で出力結果を並べ替えてね 今回の場合; count の値で並べ替えてね
  36. ここからの作業 • やりたいこと 1. 特定の企業の特許出願数を数える 2. 特定の企業 (企業名の変遷などを名寄せしたもの) ごとの特許出 願数やIPC分類を数える

    3. 特定の産業ごとの特許出願数やIPC分類を数える • 材料 1. IIP パテントデータベース 2. NISTEP 企業名辞書 3. NISTEP 企業名辞書とIIP パテントデータベースの接合テーブル 2019/9/25 85
  37. 材料1. 出願人テーブル • 出願人(applicant)テーブルの中身を確認する 2019/9/23 86 コラム名 変数の形式 主キー ida

    Int(10) YES seq Int(3) ida_seq Varchar(14) name Mediumtext address Mediumtext idname Varchar(10) country_pref Varchar(5) kohokan Varchar(3)
  38. 下ごしらえ1 出願テーブルと出願人テーブルの接合 • やりたいこと • 特定の会社の年毎の出願数を知りたい • 特定の会社のIPC分類ごとの出願数を知りたい • そのためには

    • 出願テーブルと出願人テーブルを接合して、特定の会社が、どういう 特許を、いくつ出しているのか抽出する 2019/9/23 88
  39. 下ごしらえ1 出願テーブルと出願人テーブルの接合 • MySQL Workbench 上で以下のクエリを打ち込む ・この命令は何をしているのか? 1行目: idaとadateとrdateとclassとclaimとida_seqの情報を取ってきてね 2行目:

    ap テーブルを参照するよ 3行目: applicant テーブルも参照するよ. このとき, applicant の ida フィールドと ap の ida フィールドを キーにして, applicant のデータを取り出してね 4行目: applicant.name が 松下電器産業株式会社 なものを持ってきてね. 2019/9/23 90 select ap.ida, ap.adate, ap.rdate, ap.class1, ap.claim1, applicant.ida_seq from ap inner join applicant on applicant.ida = ap.ida where applicant.name like "松下電器産業株式会社";
  40. SQL 構文の話 • SELECT: • 1 つ以上のテーブルから選択された行を取得するために使用する • Where: •

    選択されるために行が満たす必要のある 1 つまたは複数の条件 • Join: • Inner Join:指定したカラムについて同じ値を持つレコード同士を結びつける • Left Join: • 左のテーブルを基準にして、指定したカラムについて同じ値を持つレコード同士を結びつ ける。値が右のテーブルにあり左のテーブルにない場合は INNER JOIN 同様結果に含まれ ないが、値が左のテーブルにあり右のテーブルにない場合は INNER JOIN と異なり 右の テーブルのカラムには全て NULL がパディングされ、結果に含まれる。 • Right Join: • 右のテーブルを基準にして、指定されたカラムについて同じ値を持つレコード同士を結び つける。 2019/9/23 91 https://dev.mysql.com/doc/refman/5.6/ja/
  41. 下ごしらえ1 出願テーブルと出願人テーブルの接合 • 行に class1, 値に ida を入れ て, ida

    の個数を数えるように 設定する • 降順に並べ替える • (「松下電器産業」の)IPC 分 類ごとの特許出願数が確認で きる 2019/9/23 98
  42. 下ごしらえ1 出願テーブルと出願人テーブルの接合 • グラフにする (Excel 2016 の 場合) • ピボットグラフをクリックする

    • [縦棒]を選び、OK をクリッ クする 2019/9/23 99 0 5000 10000 15000 20000 25000 30000 35000 40000 G11B G02F F23D G09F C04B G10H F16C G10K F23Q B23Q B05D B65B H03C C10M F02G F02P F17C G10B A61C A61D A63C A63H B31B F02N D01D F01D B24C G09D E04G F02C G06J A41B F42C D02G B63H
  43. 下ごしらえ1 出願テーブルと出願人テーブルの接合 • 年ごとの出願数を求めてみる • 行に adate, 値はida (個数)を指 定する

    • Excel 2016 の場合, 自動的に年 を取り出してくれる • Excel2013 の場合は、自分で left 関数などを使って切り出す必要が ある • 四半期のデータは必要がないので 取り出す • 年毎の出願数が表示される 2019/9/23 101
  44. 下ごしらえ1 出願テーブルと出願人テーブルの接合 • グラフにする 2019/9/23 102 0 2000 4000 6000

    8000 10000 12000 14000 16000 18000 20000 1963年 1965年 1967年 1969年 1971年 1973年 1975年 1977年 1979年 1981年 1983年 1985年 1987年 1989年 1991年 1993年 1995年 1997年 1999年 2001年 2003年 2005年 2007年
  45. 材料2. NISTEP企業名辞書 • 企業名, 企業名の変遷などを 納めたデータベース • “産業セクターのイノベーション分析・研究に用い るデータベースの中心に位置付けられ、特許情報 や国内営利企業(以下、「企業」と呼ぶ)に関す

    る各種調査情報など、外部データから指定した企 業に関する情報を抽出するためのハブとしての役 割を担う” • 日本の会社データ(東洋経済新報社), IIP パテン トデータベース, 証券コードなどとの接続が可 能 • “企業名の読み、本社所在地、業種など、外部デー タに含まれる数多くの企業から分析対象である企 業を正しく特定しデータ抽出するための支援、お よび、合併や企業名称の変遷を考慮したデータの 収集など、企業を中心としたイノベーション分 析・研究における核となる機能を持つ” • 使いみち • いくつかのデータベースをつなぎ合わせることで、 企業の活動を定量的に計測することが可能になる 2019/9/23 104 comp_id 出願人テーブル/ida_sequence 証券コード 又は EDINETコード 企業ID comp_id 外部データ 接続テーブル 東洋経済会社コード 日本の会社データ4万社 (東洋経済新報社) NISTEPによるファイル公開範囲 (一般財団法人知的財産研究所より入手のこと) (必要に応じて利用者が購入のこと) IIPパテントデータベース IIPパテントデータベース (2015年版) との接続用 日本の会社データ4万社との接続用 NISTEP企業名辞書 外部データ 接続テーブル 証券コード、EDINETコードを持つ 企業情報データ (財務・株価データなど) (必要に応じて利用者が準備のこと) 外部データ 接続テーブル (将来予定) 企業名と住所をキーと した汎用接続テーブル 企業統計調査データ など (必要に応じて利用者が準備のこと) 外 部 デ ー タ 外 部 デ ー タ NISTEP企業名辞書は、 Ver.2015_1よりRDB構 造に変更された
  46. 材料2. NISTEP 企業名辞書 • カバーする企業群 ①特許出願数累積100件以上 • IIPパテントデータベースの2014年版(iipdb20140417)において、1970年以降の企 業の変遷(名称変更、合併)を考慮した特許出願の集約を行い、累積出願数が100件 を超える企業を特定し掲載

    • ②株式上場企業 • 2012年1月時点の全上場企業と以降2015年3月までに新規(又は再)上場した企業を 掲載 • ③特許出願数の伸び率大 • 近年起業し活躍するベンチャー企業など、条件①では取りこぼす可能性がある企業の 抽出を目的とする。 • 1970年以降の企業の変遷を考慮した年ごとの出願数を把握し、それらデータを用い て3年、5年、7年の各期間で1年ごと移動させた線形フィットを行い、大きな回帰係 数(出願数増分)を持つ企業を抽出 • 抽出企業には条件①および②から抽出した企業が含まれるが、それら企業を除いた中 から上位500社強を抽出して掲載を行っている。 2019/9/23 106
  47. 材料2. NISTEP 企業名辞書 • 掲載企業数 2019/9/23 107 ①出願数100件以上 ②上場企業 ③出願数伸び率大

    掲載企業 数 ✔ 569 ✔ 2,510 ✔ 533 ✔ ✔ 219 ✔ ✔ 1,422 ✔ ✔ 13 ✔ ✔ ✔ 1,080 三条件以外 148 合計 6,494
  48. 材料2. NISTEP 企業名辞書 • 構成テーブル 2019/9/23 108 番号 テーブル名称 概要

    論理名 物理名 1 企 業 名 辞 書 メ インテーブル 1_comp_nam e_main_TB L 企業名、企業id等のメインの情報、お よびパネルデータとして整備をする必 要がなく、最新の情報のみ保持すれば よいデータを保管 2 沿革テーブル 2_comp_histor y_TBL 名称変更や吸収合併などの事象が発生し た際に発生した年、事象の種類を保管 3 所 在 地 テ ー ブ ル 3_address_TB L 企業の所在地に関する情報を保管 本社、本店、移転など複数の住所情報の 保管、パネル化が可能 4 企 業 規 模 テ ー ブル 4_comp_size_ TBL 資本金、従業員数、中小企業基本法によ る企業規模情報を保管 規模測定年ごとのパネル化が可能 5 業 種 ( 証 券 コ ー ド 協 会 ) テーブル 5_ind_class_ts e_TBL 証券コード協議会の定める当該企業の業 種区分を保管 属する分類が変更された際のパネル化が 可能 6 業 種 ( 日 本 標 準 産 業 分 類 ) テーブル 6_ind_class_js ic_TBL 主業の日本標準産業分類を保管 属する分類が変更された際のパネル化が 可能 7 EDINETコード テーブル 7_edinet_code _TBL EDINETのコードを保管 コードが変更された際のパネル化が可能 8 証 券 コ ー ド テーブル 8_sec_code_T BL 証券コードを保管 コードが変更された際のパネル化が可能 9 連 結 企 業 テ ー ブル 9_consolidate _TBL 連結子会社である場合の親企業情報を保 管 連結関係の変化のパネル化が可能 10 データ登録条件マス ターテーブル 10_reg_reason_MT BL 企業が企業名辞書に登録された理由に関するマスター テーブル 11 企業名称使用開始事 象マスターテーブル 21_use_name_start_ event_MTBL 新設、旧名称からの名称変更等、企業名称の使用が開始 された場合の使用開始事象に関するマスターテーブル 12 企業名称使用終了事 象マスターテーブル 22_use_name_end_e vent_MTBL 名称変更、吸収合併など、企業名称の使用が終了した場 合の使用終了事象に関するマスターテーブル 13 事業所区分マスター テーブル 31_office_class_MT BL 住所情報の本社、本店、事業所等を判定するためのマス ターテーブル 14 業種(証券コード協 会)マスターテーブ ル 51_tse_MTBL 証券コード協議会の定める業種区分に関するマスター テーブル 15 業種(日本標準産業 分類)マスターテー ブル 61_jsic_MTBL 日本標準産業分類に関するマスターテーブル 平成25年10月改定・平成26年4月1日施行に準拠 16 企業連結事象発生マ スターテーブル 91_consolidate1_MT BL 連結事象が発生した場合の発生理由(子会社化等)に関す るマスターテーブル 17 企業連結事象終了マ スターテーブル 92_consolidate2_MT BL 連結事象が終了した場合の発生理由(他社の子会社と なった、独立した等)
  49. 材料2. NISTEP 企業名辞書 • ER図 2019/9/23 109 企業名辞書メインテーブル (1_comp_name_main_TBL) 企業id

    企業名称 ふりがな 法人格コード 英語名称 URL データ登録理由id データ登録日 データ更新日 沿革テーブル (2_comp_history_TBL) 企業id 名称使用開始年 名称使用開始事象id 事象発生前企業id 名称使用終了年 名称使用終了事象id 事象発生後企業id データ登録日 データ更新日 企業名称使用開始事象マスターテーブル (21_use_name_start_event_MTBL) 事象id 事象概要 データ登録日 データ更新日 1…N 連結企業テーブル (9_consolidate_TBL) 企業id 連結事象発生年 連結事象発生事象id 連結事象発生前連結企業id 連結先連結企業id 連結事象終了年 連結事象終了事象id 連結事象終了後連結企業id データ登録日 データ更新日 所在地テーブル (3_address_TBL) 企業id 所在地利用開始年 所在地利用終了年 本店・本社コード 所在地 都道府県コード 地方自治体コード 住所コード 緯度 経度 データ登録日 データ更新日 EDINETコードテーブル (7_edinet_code_TBL) 企業id EDINETコード確認年 EDINETコード データ登録日 データ更新日 企業規模テーブル (4_comp_size_TBL) 企業id 企業規模測定年 中小企業基本法 資本金階級 従業員数階級 データ登録日 データ更新日 業種(証券コード協会)テーブル (5_ind_class_tse_TBL) 企業id 東証33分類開始年 東証33分類終了年 東証33分類コード データ登録日 データ更新日 事業所区分マスターテーブル (31_office_class_MTBL) 本店・本社コード 概要 データ登録日 データ更新日 N…1 1…1 企業名称使用終了事象マスターテーブル (22_use_name_end_event_MTBL) 事象id 事象概要 データ登録日 データ更新日 1…1 1…1 企業連結事象発生マスターテーブル (91_consolidate1_MTBL) 事象id 事象概要 データ登録日 データ更新日 企業連結事象終了マスターテーブル (92_consolidate2_MTBL) 事象id 事象概要 データ登録日 データ更新日 1…1 1…1 証券コードテーブル (8_sec_code_TBL) 企業id 証券コード 上場市場 上場日 上場廃止日 ISINコード データ登録日 データ更新日 業種(日本標準産業分類)テーブル (6_ind_class_jsic_TBL) 企業id JSIC開始年 JSIC終了年 JSIC分類番号 データ登録日 データ更新日 業種(証券コード協会)マスターテーブル (51_tse_MTBL) 東証33分類コード 東証33分類版 東証33分類大分類 東証33分類小分類 データ登録日 データ更新日 業種(日本標準産業分類)マスターテーブル (61_jsic_MTBL) JSIC分類番号 JSIC版 JSIC大分類 JSIC中分類 JSIC小分類 データ登録日 データ更新日 1…1 1…1 データ登録条件マスターテーブル (10_reg_reason_MTBL) 理由id 登録理由 データ登録日 データ更新日 1…1
  50. 材料2. NISTEP 企業名辞書 • RDB はわかりにくいので、EXCEL 版も提供されている • 企業ID, 沿革ID,

    EDINETコード, 証券コード, 企業規模, 産業分類 などが確認できる 2019/9/23 110
  51. 材料2. NISTEP 企業名辞書 • 企業名辞書メインテーブル 2019/9/23 111 企業名辞書メインテーブル [1_comp_name_main_TBL] フィールド名

    データ型 重複 NULL 主 キー 外部キー 説明 論理名 物理名 企業番号 comp_id 数値 (整数) N N Y 企業(企業名称ごと)に 固有に付与した番号 沿革番号 history_i d 数値 (整数) Y N 同一企業の変遷レコード をグループ化して扱うた めの番号 企業名称 comp_na me 文字列 Y Y 企業の名称(変遷名称も 含む) ふりがな read 文字列 Y Y 上記企業名称のふりがな 法人格 コード comp_co de 文字列 Y Y 企業の法人格を表すコー ド(下表参照) 英語名称 e_name 文字列 Y Y 企業の英語名称 URL url 文字列 Y Y 企業のウェブページの URL データ登 録理由番 号 reg_reas on_id 数値 (整数) Y Y データ登録理由マスター テーブルの理由番号 当該企業の辞書掲載条件 データ 登録日 reg_date 年月日 Y N データを本テーブルに登 録した日 データ 更新日 up_date 年月日 Y N 既登録データの情報更新 した日
  52. 材料2. NISTEP 企業名辞書 • 企業規模テーブル 2019/9/23 112 企業規模テーブル [4_comp_size_TBL] フィールド名

    データ型 重複 NULL 主 キー 外部キー 詳細 論理名 物理名 企業番号 comp_id 数値(整 数) Y N Y 企業名辞書メインテーブ ルの企業番号 企業(企業名称ごと)に 固有に付与した番号 企 業 規 模 測定年 judg_year YEAR Y N Y 企業規模を確認した年 中 小 企 業 基本法 comp_size _law 文字列 Y Y 中小企業基本法に準拠し 判定した企業規模 資本金 階級 comp_size _cap 文字列 Y Y 資本金の該当階級 100万円未満 100万円以上 1000万円以上 2000万円以上 5000万円以上 1億円以上 10億円以上 従 業 員 数 階級 comp_size _emp 文字列 Y Y 従業員数の該当階級 5人未満 5~29人 30~99人 100~299人 300~999人 1,000~4,999人 5,000人以上 データ 登録日 reg_date 年月日 Y N データを本テーブルに登 録した日 データ 更新日 up_date 年月日 Y N 既登録データの情報更新 した日
  53. 材料2. NISTEP 企業名辞書 • 業績 (証券コード協会) テーブル 2019/9/23 113 業種(証券コード協会)テーブル

    [5_ind_class_tse_TBL] フィールド名 データ型 重複 NULL 主キー 外部キー 詳細 論理名 物理名 企業番号 comp_id 数値 (整数) Y N Y 企業名辞書メインテーブ ルの企業番号 企業(企業名称ごと)に 固有に付与した番号 業種分類開 始年 inds_year YEAR Y Y 証券コード協会の業種分 類の確認初年 業種分類終 了年 inde_year YEAR Y Y 証券コード協会の業種分 類の確認最終年 業 種 分 類 コード ind_code 数値(4 桁整数) Y N Y 業種(証券コード協会) マスターテーブルの分類 コード 証券コード協会の分類該 当業種 データ 登録日 reg_date 年月日 Y N データを本テーブルに登 録した日 データ 更新日 up_date 年月日 Y N 既登録データの情報更新 した日
  54. 材料3. NISTEP 企業名辞書とIIP パテント データベースとの接続テーブル • 企業名辞書と外部データであるIIPパテントデータベース (2015年版)を連携させるための接続テーブル • 企業名辞書メインテーブルの企業idとIIPパテントデータベースの出願

    人テーブルのida_seqフィールドを関係付け接続する 2019/9/23 114 フィールド名 データ型 説明 論理名 物理名 企業番号 comp_i d 数値(整 数) 企業(企業名称ごと)に固有に付 与した番号 IIP パ テ ン ト 出 願 番 号 + 記 載 順序 ida_seq 文字列 上記企業番号の企業が出願人であ る特許
  55. 材料3. NISTEP 企業名辞書とIIP パテント データベースとの接続テーブル • ER図 2019/9/23 115 企業名辞書メインテーブル

    (1_comp_name_main_TBL) 企業番号 企業名称 ふりがな 法人格コード 英語名称 URL データ登録理由id データ登録日 データ更新日 IIPパテントデータベースとの接 続テーブル 企業番号 I出願番号+記載順序 IIPパテントデータベース 出願人テーブル 出願番号 記載順序 出願番号+記載順序 出願人名 出願人住所 出願人番号 住所コード 個法官コード
  56. 特定の企業 (パナソニック; 名寄せ済み) の特許出願数やIPC分類を数える • 方法 1. NISTEP企業名辞書をSQL サーバにインポートする 2.

    NISTEP企業名辞書とIIPパテントデータベースの接続テーブルをSQL サーバにインポートする 3. NISTEP 企業名辞書を使い、パナソニック子会社の情報を把握する。 これにより、企業ID (comp_id) と沿革ID (history_id)情報を取得する 4. NISTEP企業名辞書とIIPパテントデータベースの接続テーブルに記載 されている comp_id 情報から、パナソニックが特許出願した ida_seq 情報を取り出す 5. Ida_seq に基づき、当該特許の出願年や公開年やclaim, IPC 情報を取 り出す 2019/9/23 118
  57. 2-3. パナソニックな企業群を history_id から特定する • comp_name が”パナソ ニック” な企業の、 history_id

    と comp_id を 確認する • NISTEP企業名辞書メイン テーブルを使う • Comp_id = 1 • History_id = 1006752 で あることを確認 • History_id = 1006752 であ る企業を探索する 2019/9/23 123
  58. 2-3. パナソニックな企業群を history_id から特定する • History_id = 1006752 である企業 を検索する

    • パナソニック • 松下電器産業 • 松下電工 • 松下電子工業 • パナソニック電工 • 松下冷機 • 松下通信工業 • 松下電池工業 • 松下住設機器 • パナソニックモバイルコミュニケー ションズ • パナソニックモバイル が該当することがわかる 2019/9/23 124
  59. 2-4. NISTEP企業名辞書とiip パテント データベース接続テーブルを接合する • IIP パテントデータベース接続テーブルに、NISTEP企業名辞書 メインテーブルにある history_id と

    comp_name を接合し, 新 しいテーブルとして保存する • 一行目に create table ct_dic_iip2 と指定し, クエリの結果を新しい テーブルに保存する 2019/9/23 126
  60. 2-4. NISTEP企業名辞書とiip パテント データベース接続テーブルを接合する • データの状態を確認 • 従来の接続テーブルに、history_id と comp_name

    の情報が追 加されている • この段階で、パナソニックが出願した特許の出願年と数が確認 できる 2019/9/23 127
  61. 2-5. IIP パテントデータベースと接合し, パナソ ニック (名寄せ済み) の特許, IPC 分類情報を抽 出する

    • 2-4. でつくったテーブルと, IIP パテントデータベースのap テーブルをida で接合する • Left 関数を使い, ct_dic_iip2 テーブルの ida_seq について先頭から10 文字分取り出し, それをapテーブルのida とマッチさせる • History_id=1006752 のデータを取り出す 2019/9/23 128
  62. 2-5. IIP パテントデータベースと接合し, パナソ ニック (名寄せ済み) の特許, IPC 分類情報を抽 出する

    • Excelでグラフにする • 各企業体ごとの特許数 2019/9/23 130 0 5000 10000 15000 20000 25000 <1984/1/5 1985年 1987年 1989年 1991年 1993年 1995年 1997年 1999年 2001年 2003年 2005年 2007年 2009年 2011年 2013年 松下冷機 松下電池工業 松下電子工業 松下電工 松下電器産業 松下通信工業 松下住設機器 パナソニック電工
  63. 2-5. IIP パテントデータベースと接合し, パナソ ニック (名寄せ済み) の特許, IPC 分類情報を抽 出する

    2019/9/23 131 0 5000 10000 15000 20000 25000 30000 35000 H01L H04M H04R A61B A47K E03D G01B B65D H01P E03C G01D B28B C09D B29B G06Q B25B F23C F23Q B66B B62M F16D F27B C12N F15B C07K B28D B41C B62H E01H B67D B60C B64D B66C B27L B07B D02G D21J G10D B64G C01D G10C F22G G03D A41B G21C F16S B44B B64C
  64. 環境構築ってめんどくさい • 2. で示したように, SQL を使った解析を行うためには 1. SQL のサーバを構築する 2.

    データを展開する 3. データに対してクエリを発行して解析する の流れを踏まえる必要があり, 特に 1. や2. はオペレーションシステムや 言語環境への依存があるため, いささか面倒です.
  65. Google Big Query でクエリを打ってみる(1) • 以下の内容を、クエリエディタに打ち込む SELECT name, gender, SUM(number)

    AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10
  66. SQL 構文の話 • SELECT: • 1 つ以上のテーブルから選択された行を取得するために使用する • Where: •

    選択されるために行が満たす必要のある 1 つまたは複数の条件 • Join: • Inner Join:指定したカラムについて同じ値を持つレコード同士を結びつける • Left Join: • 左のテーブルを基準にして、指定したカラムについて同じ値を持つレコード同士を結びつ ける。値が右のテーブルにあり左のテーブルにない場合は INNER JOIN 同様結果に含まれ ないが、値が左のテーブルにあり右のテーブルにない場合は INNER JOIN と異なり 右の テーブルのカラムには全て NULL がパディングされ、結果に含まれる。 • Right Join: • 右のテーブルを基準にして、指定されたカラムについて同じ値を持つレコード同士を結び つける。 2019/9/26 142 https://dev.mysql.com/doc/refman/5.6/ja/
  67. Google Big Query でクエリを打ってみる(1) • 以下の内容を、クエリエディタに打ち込む SELECT name, gender, SUM(number)

    AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10 翻訳; (1.) Select Name と gender と number の合計値を取得 して, number の合計値は total という名前に してね (2.) From `bigquery-public- data.usa_names.usa_1910_2013` というテーブルからデータを取ってきてね (3.) Order by Total の数字が大きな順にしてね (4.) LIMIT 最初から10番目までにしてね
  68. 今日の実習(20分程度) • Google Big Query + Google データポータルを使って, 大規模 データの解析をやってみましょう

    • 注意 • Sandbox 状態で解析すること • 大量データを解析して保持した場合 && クレジットカード情報を登録している場 合, 使用料を Google さんから請求されます • 2. で説明したオンプレミスな分析環境も, もし関心あればやっ てみてください.
  69. 利用できるデータセット • Word Development Indicators • Google Patent • US

    Census Data • US Residential Real Estate Data • Stackoverflow など, 楽しそうなデータ が並んでいる
  70. 成績評価(1) • 平常レポート (40パーセント; 必須) • 講義計画に示したように、複数の回で学生にはレポートを課します。 レポートは Word/PowerPoint形式のメールあるいは, github

    経由で の提出が求められます(どの方法を採用するかは、初回の講義で決定し ます)。 • レポートには、(A.) 利用したデータセットとその内容, (B.) 分析の問 い, (C.) 分析手法, (D.) 分析結果 を明記する必要があります。ページ 数や文字数は問いませんが, これらの内容が含まれており, 講義中にア ナウンスする評価手法を満たす場合, 高い得点を得ることが出来ます。 • 平常点 (10パーセント) • 本講義は実習が多く含まれており, また取り扱うデータセットや内容も 多彩です。そのため、受講者同士が協力する必要があります。こうし た受講者の態度を評価するために、平常点を設けます。
  71. 成績評価(2) • 最終レポート (40パーセント; 必須) • 講義の最終回では最終レポートの報告会を行います。受講者は3名から4名か ら構成されるグループで、最終レポートの報告を行う必要があります(人数は 受講者の人数により変更される可能性があります)。最終レポートでは、プレ ゼンテーションの方法を学生は自由に選ぶことが出来ます。PowerPoint

    以 外にも、Prezi などのアクティブプレゼンテーションツールや、他のプレゼ ンテーション手法を用いることが出来ます(プレゼンテーションツールについ ては、必要であれば講義内で説明する機会を設けます)。最終レポートでは、 以下の点について評価を行います。 (A.) グループ内の役割分担 (B.) データセットのユニークさおよび、それが適切に処理されているか (C.) 分析手法のユニークさおよび、それが適切に解析されているか (D.) プレゼンテーションのユニークさ (E.) 質疑応答にうまくリプライすることが出来ているか • 最終レポートの360°グループ評価 (10パーセント) • 3. の最終レポートについて、グループの自己評価および他のグループからの 評価を行います。3. で挙げた評価ポイントに基づき、グループメンバーおよ び他のグループは評価を行います。
  72. References (for today’s lecture) • PATSTAT ONLINE (beta) • http://www.epo.org/searching/subscription/patstat-online.html

    • SQL Self-Study Course • http://documents.epo.org/projects/babylon/eponet.nsf/0/55df36d61f27cd b2c1257b1600323d91/$FILE/patstat_introduction_sql_en.pdf • Data Elements of PATSTAT Raw Data • http://documents.epo.org/projects/babylon/eponet.nsf/0/95da6bccf12e5 4a1c1257aa1002e2d1d/$FILE/patstat_data%20elements_v1.1.pdf • 永田晃也(2004)知的財産マネジメント, 中央経済社 • 後藤晃、元橋一之(2005) 特許データベースの開発とイノベーショ ン, https://database.iip.or.jp/patentdb/ • 中村健太 (2015) IIP パテントデータベース ユーザーマニュアル, https://database.iip.or.jp/patentdb/readme_j_2015july.pdf
  73. 参考. テキストデータからSQL にデータを インポートする場合 • Table Name を指定する: ap •

    Column Name/Data Type を それぞれ指定する • Ida は int(11) • その他は text を指定 • 設定が終わったら Apply をク リックする 2019/9/23 208
  74. 参考. テキストデータからSQL にデータを インポートする場合 • CSV/TXT ファイルからデータを読み込み, SQL にインポートする •

    Load data ⇒ “” で囲んでいる箇所からデータを読み込んでね • Into table ⇒ iippatentdb2015.ap にデータを収納してね • Fields terminated by ‘¥t’ ⇒ データはタブ区切りになっているからね • Ignore 1 lines ⇒ 最初の一行目は無視してね 2019/9/23 210 load data local infile "C:¥¥Users¥¥ya- hara¥¥Downloads¥¥ap¥¥ap.txt“ into table iippatentdb2015.ap Fields terminated by '¥t’ ignore 1 lines