有価証券報告書のR&D部分をみつつ特許データ探索（ダッシュボード作成）

#0.はじめに
##動機
特許の情報を分析する際には、特許だけじゃなくて他の情報もみましょうねと長く言われてきてますが、自分としては特許検索とは別にネット検索でしこしこみたり、エクセルにメモを取ったりしながら、特許の情報と他の情報を行ったり来たりすることがあり結構面倒だった。
そこで特許検索を中心にしつつ、いろんな情報を参照できるダッシュボードがあるといいなあと思い、作ることに。
まずは、かなり綺麗に情報が入っている有価証券報告書と、その中の「研究開発について」の部分の文章を一覧にしようと検討。。
「研究開発について」の部分の文章はこんな感じで、その企業がどんな研究開発を進めようとしているか書いてあり参考になる。


>６【研究開発活動】当社グループは、電子デバイスシステム、ファインテックシステム、科学・医用システム、産業・ＩＴシステムの各セグメントで、製品競争力の強化と新製品の開発、新規事業製品の開発に取り組んでおります。これらの活動に係る当連結会計年度の研究開発費は20,163百万円であり、セグメントごとの研究開発成果は、以下の通りであります。電子デバイスシステム半導体市場では、PC需要が減少する一方で、サーバー及びスマートフォンが成長したことから、モバイル機器向けのアプリケーションプロセッサ及びメモリー(NAND、DRAM)が堅調でした。先端デバイスにおいては、マルチパターニング(Multi-Patterning)技術による14～16nm世代製品の量産比率が高まるとともに、10nm世代の試作ライン構築及び7nm世代の開発がスタートしました。また、各メモリーメーカーは3D-NANDの量産に注力しています。このように、微細化とともに、ロジック・メモリーとも三次元構造化が進み、最先端のデバイス製造では、工程数増加に対応する高生産性、複雑構造化へ対応し・・・（以下略）

##先行するサービスなどで利用できるものがないか？
どっかに有価証券報告書のテキストデータをAPIなどで提供してくれるサービスないかな、と思い探したところ、[バフェットコード](https://www.buffett-code.com/)と、[CoARiJ](https://github.com/chakki-works/CoARiJ)があったがどちらもちょっとだけ要求に満たず。
しょうがないので、R&D部分のテキスト抽出とBiGQueryに格納するのは自分でやることに。


#1.結果
* [作れた](https://datastudio.google.com/reporting/a6dfe2f1-a03b-4a3d-b42e-f9f0c31ea476)
* DataStudioは便利！


#2.構成
## 2-1　構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385220/a875e7ac-fbea-9b6f-615b-4710a4f242dd.png)


##2-2 利用させたもらったコードやデータなど
*[CoARiJ](https://github.com/chakki-works/CoARiJ)
*EDINETから有価証券報告書データを取得してくる[この記事](https://qiita.com/XBRLJapan/items/27e623b8ca871740f352)
*おなじみ[Google Patents Public Datasets](https://cloud.google.com/blog/products/gcp/google-patents-public-datasets-connecting-public-paid-and-private-patent-data)



#2-3 SQLなど説明
* Google Patents から情報取得SQLの部分：Google patentsへのurlと、Googleが抽出してくれた、特許文中の特徴的なワードは、通常の特許のテーブルには入ってないため、２つのテーブルをJOINするとこが少し苦労した。

<details><summary>特許版のSQL</summary><div>

```sql

WITH gpat AS (
SELECT 
      publication_number as pubnum,
      top_terms,
      url
FROM patents-public-data.google_patents_research.publications
),

pat AS (
SELECT publication_number as pubnum,
       filing_date as appday,
       STRING_AGG(DISTINCT title.text) as title,
       #STRING_AGG(DISTINCT abstract.text) as abst,
       STRING_AGG(DISTINCT appls.name,'|') as applicants
FROM `patents-public-data.patents.publications`,UNNEST(title_localized) as title,UNNEST(abstract_localized) as abstract,UNNEST(assignee_harmonized) as appls
WHERE SUBSTR(publication_number,0,2) = 'JP' AND filing_date > 20100101
GROUP BY pubnum,filing_date
)

SELECT gpat.pubnum,
       gpat.url,
       gpat.top_terms,
       pat.title,
       #pat.abst,
       pat.applicants,
       pat.appday
FROM gpat
INNER JOIN pat
ON gpat.pubnum = pat.pubnum

```

</div></details>

最終的にDataStudioに出力したテーブル

| Field name | Type    | Mode     | 説明  | 
|------------|---------|----------|--------------|
| pubnum     | STRING  | NULLABLE |公報番号              |
| url        | STRING  | NULLABLE |googlepatentへのリンクURL|
| top_terms  | STRING  | REPEATED |google抽出の特徴語 |
| title      | STRING  | NULLABLE |タイトル              |
| applicants | STRING  | NULLABLE |出願人       |
| appday     | INTEGER | NULLABLE |出願日        |



<hr>
* 有価証券報告書側

pythonでEDINETからxbrl形式のデータを取ってきて、coarijでR&D部分（「研究開発について」部分）を抜き出す。
同時にsudachiを使って分かち書きをしておいて、BigQueryに投入し、[前回作成したSQL](https://qiita.com/niship2/items/278e3f66b95344fdc9ec)でtfidfを計算して格納する。



<details><summary>有価証券報告書側SQL</summary><div>
↓tfidf計算のためのテーブル生成

```sql

#分かち書きされた文章からtfidf計算して格納するSQL
#～SQL発行しすぎて履歴からどこかへ消えちゃった＼(^o^)／ｵﾜﾀ

```

tfidf>0.01で抽出するSQL↓

```sql

SELECT id,
      year,
      comname,
      secCode,
      wakatiwd,
      STRING_AGG(tfidf.word) as tfidf_word,
      COUNT(tfidf.word) as tfidf_count,
      LENGTH(wakatiwd) as textlen 
FROM ~~(秘密).SecuritiesReport_tfidf,UNNEST(tfidfs) as tfidf
WHERE tfidf.tf_idf > 0.01
GROUP BY id,year,comname,secCode,wakatiwd

```

</div></details>

最終的にDataStudioに出力したテーブル

| Field name  | Type    | Mode     | 説明   |
|-------------|---------|----------|--------|
| id          | STRING  | NULLABLE | EDINETで付与される文書ID |
| year        | INTEGER | NULLABLE | 報告書の提出年       |
| comname     | STRING  | NULLABLE | 企業名       |
| secCode     | INTEGER | NULLABLE | 証券コード       |
| wakatiwd    | STRING  | NULLABLE | R&D部分をsudachiで分かち書きした結果       |
| tfidf_word  | STRING  | NULLABLE | tfidfで       |
| tfidf_count | INTEGER | NULLABLE | tfidfの       |
| textlen     | INTEGER | NULLABLE |        |






#3.完成版
[こんな感じ](https://datastudio.google.com/reporting/a6dfe2f1-a03b-4a3d-b42e-f9f0c31ea476)に。
左側の有価証券報告書のR&D部分の文章をみつつ、何か気になる技術用語が出てきたら、英語だけど検索ワードを設定して、結果を右側の特許リストなどに反映させる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385220/e2fd06a9-0036-8a93-3140-156f52575c0f.png)



#4.バージョンアップ
次に追加していきたい機能などのリスト

* 左側のR&D文章から抽出したワードの中から、技術用語っぽい言葉を抜き出して、右側の検索欄に入れる。
* ワードのふくらまし（特許版word2vecや技術用語辞書などで）
* pipeline(今回は2020年6月までの有価証券報告書データだったけど、バッチ的にやるよりは毎月くらいの頻度で自動的にBigQueryに入れてたい)
* 実は外国のはもっと簡単にとれるんじゃないか（[BigQueryのPublicDataSetにそれっぽいものが](https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=sec_quarterly_financials&page=dataset)）
* 他のデータソース（法規制とか社会トレンドなど）も一緒に見られるといいなど検討中。。
* 研究開発費は入れないと
* 何か画面デザインが気に入らない。BIツールのレイアウトとか結構修行が必要そう。
* [こういうの](http://blog.1smartworks.com/2017/04/blog-post_4.html?m=1)もあったので、他のテキスト部分も取得しておけば良かった！
* 母集団に応じてリアルタイムでtfidfを変更するもの。今回最初に作ったら激重でたびたびフリーズしたので、泣く泣く全体で計算した。tfidfはそもそも当初の状態が理想なので、何とかならないか検討中。



#5修正
* 有価証券報告書の文中を部分一致などでテキスト検索可能に。
* 特許の要約文を部分一致などでテキスト検索可能に。