Google ColabでPatentfieldAPIを使用したトレンド分析
こんにちは、Patentfieldの公式noteです。
Patentfield公式noteでは、PatentfieldAPIを活用した具体的な開発実装事例を紹介しています。
この記事では、PatentfieldのAPIを使ってトレンド分析を実施する方法について、解説します。
1.トレンド分析とは
特許データを活用したIPランドスケープを実施する際にトレンド分析(時系列分析)は基本的な分析手法として多用されています。先日、特許庁から発行されました「経営戦略に資するIPランドスケープ実践ガイドブック」にも、時系列整理の有効な手法であると紹介されています。
(https://www.jpo.go.jp/support/example/ip-landscape-guide/)
特許分析において出願年ベースで時系列変化を求める場合、出願年毎に分析対象データを集計する必要があります。データの集計は分析対象の特許リストをダウンロードしてエクセルでも実施する事ができますが、一般的に特許データベースの分析機能を使って、横軸が出願年のパテントマップを作成する場合が多いかと思います。
PatentfieldのAPIには、クロス集計分析機能があり、APIからのレスポンスに任意の分析軸の集計データを含める事ができますので、APIのレスポンスデータを使って、任意のパテントマップを簡単に作成する事ができます。
2.事前準備
・PatentfieldのAPIトークン(APIトークンがなくても、実行環境の構築までは可能です)
※PatentfieldのAPIサービスは有料オプションですが、無料トライアルも随時受付しています。ご興味あれば、APIトークンを発行しますので、下記URLからぜひお問合せください。
https://patentfield.com/apply#/
3.プログラミング言語、開発環境
・プログラム言語:Python
・開発環境:Google Colab
Google Colab(名称:Google Colaboratory)は、ブラウザベースの無料の開発環境で、Googleアカウントがあればインストール不要で、Pythonプログラミングを簡単に始めることができます。
4.作成したもの
今回作成したものを実行すると、以下のような出力が得られます。
時系列変化を求めたい出願人と分析軸を入力し実行すれば、ヒートマップで表現されたパテントマップを得ることができるアプリケーションです。
分析軸として、IPCやFI、テーマコード、特徴キーワード等、自由に選択する事ができますので、様々な観点のトレンド分析を容易に実施する事ができます。
Google Colab環境でPythonを使用して、PatentfieldのAPIにアクセスし、Gradioを使ってWebアプリ化しています。
Gradioは、機械学習モデルのデモを行うWebアプリケーションを簡単に作ることができるPythonのライブラリです。
5.実装
Google Calabでの実行手順は、次の通りです。
(1)ライブラリのインストール
# ライブラリインストール
!pip install requests
!pip install gradio
(2)ライブラリインポート
データの可視化にAltairというライブラリをインポートしています。
Pythonでデータの可視化では様々なライブラリがありますが、Pandas DataFrameとの相性が良いAltairを選択しました。
# ライブラリインポート
import os
import json
import requests
import gradio as gr
import pandas as pd
import altair as alt
from datetime import datetime, timedelta, timezone
(3)Googleドライブマウント
APIから取得したデータをCSVファイルとして取得するために、Googleドライブをマウントします。
# Googleドライブマウント
from google.colab import drive
drive.mount('/content/drive')
(4)CSVファイル保存関数
# CSVファイル保存関数
def save_csv_to_drive(df, prefix):
# タイムゾーンの生成
JST = timezone(timedelta(hours=+9), 'JST')
timestamp = datetime.now(JST).strftime("%Y%m%d%H%M%S")
# CSVファイル名を生成(クエリとタイムスタンプを含む)
csv_filename = f"{prefix}_{timestamp}.csv"
# Googleドライブの保存先パスを設定
drive_path = "/content/drive/My Drive/"
full_path = os.path.join(drive_path, csv_filename)
# DataFrameをCSVファイルとして保存
df.to_csv(full_path, index=False, encoding="cp932", errors="ignore")
return full_path
(5)ヒートマップ作成関数
# ヒートマップ作成関数
def make_heatmap(df, stat):
heatmap = alt.Chart(df).mark_rect().encode(
x='app_year:O',
y=f'{stat}:N',
color='nsubrecs:Q',
tooltip=['app_year', stat, 'nsubrecs']
).interactive()
return heatmap
(6)トレンド分析API
#トレンド分析API
def trend_analysis(query, stat, access_token):
# Patentfield APIエンドポイント
req_url = 'https://api.patentfield.com/api/v1/patents/search'
# Patentfield APIリクエストヘッダー
req_headers = {'Authorization': 'Token ' + access_token, 'Content-Type': 'application/json'}
# APIリクエストパラメータ
req_params = f'''
{{
"line_condition": "L:1 AND L:2",
"conditions": [
{{
"key":"cross_applicants",
"q":"{query}"
}},
{{
"key":"app_date",
"q":"2015-01-01",
"op":"greater_than_or_equal_to"
}}
],
"cross": [
{{
"key":"app_year"
}},
{{
"key":"{stat}"
}}
]
}}
'''
# API呼出
req_params = req_params.replace(' ', '')
req_params = json.loads(req_params)
response = requests.post(url=req_url, headers=req_headers, json=req_params)
# APIレスポンス処理
if response.status_code == 200:
data = response.json()
app_year_array = []
stat_array = []
nsubrecs_array = []
for attr in data['cross_records']['records']:
app_year_array.append(str(attr.get('app_year')))
stat_array.append(str(attr.get(stat)))
nsubrecs_array.append(str(attr.get('_nsubrecs')))
# Pandas DataFrameに変換
df = pd.DataFrame(list(zip(app_year_array, stat_array, nsubrecs_array)), columns = ['app_year', stat, 'nsubrecs'])
# CSVファイル保存
prefix = "TrendAnalysis"
csv_filename = save_csv_to_drive(df, prefix)
# ヒートマップ作成
heatmap = make_heatmap(df, stat)
return str(response.status_code), df, csv_filename, heatmap
else:
return str(response.status_code), pd.DataFrame(), None, None
(7)Webアプリ(Gradio)定義
# Webアプリ(Gradio)定義
with gr.Blocks() as app:
gr.Markdown("出願人トレンド分析")
with gr.Row():
with gr.Column():
access_token = gr.Textbox(label="APIアクセストークン", lines=1, placeholder="APIのアクセストークンを入力してください")
query = gr.Textbox(label="分析したい出願人", lines=1, placeholder="分析したい出願人を入力してください")
stat = gr.Dropdown(label="分析軸", choices=["ipcs", "ipc_subclasses", "ipc_maingroups", "ipc_main", "fis", "themes", "fterms", "cpcs", "wipo_techs", "jpo_sections", "jpo_l_classes", "jpo_techs", "claims_weights", "problem_weights", "technical_field_weights", "solution_weights"], value="分析したい分析軸を選択")
submit = gr.Button("APIリクエスト送信", variant="primary")
reset = gr.Button("リセット")
with gr.Column():
status_code_output = gr.Textbox(label="APIステータスコード", lines=1, interactive=False)
plot = gr.Plot(label="ヒートマップ")
with gr.Column():
response_output = gr.Dataframe()
download_fpath = gr.Text(label="ダウンロードファイルパス")
submit.click(
fn=trend_analysis,
inputs=[query, stat, access_token],
outputs=[status_code_output, response_output, download_fpath, plot]
)
reset.click(
fn=lambda: ["", pd.DataFrame(), "", ""],
inputs=[],
outputs=[query, response_output, download_fpath]
)
(8)Webアプリ(Gradio)起動
ここでWebアプリ(Gradio)を起動します。
# Webアプリ(Gradio)起動
app.launch(debug=True, height=1000)
Gradioが起動したら、分析したい出願人を入力し、分析軸を選択し、「APIリクエスト送信」ボタンを押すと、Altairで作成したトレンド分析のヒートマップがGradioに表示されます。
集計結果のリストはGoogleドライブのMy Driveに「TrendAnalysis_{YYYYMMDDhhmmss}.csv」というファイル名で保存されています。
6.おわりに
Patentfieldとは
Patentfieldは、4つの機能(プロフェッショナル検索・データ可視化・AI類似検索・AI分類予測)を組み合わせて、ワンストップで総合的な検索・分析ができる『AI特許総合検索・分析プラットフォーム』です。
無料で検索もできるので、ご興味あればぜひアクセスください。
PatentfieldのAPIについて
PatentfieldのAPI連携サービスは、情報参照だけではなく、特許検索機能をはじめPatentfieldの各機能をAPI経由で連携することで、社内で運用しているグループウェアへの組み込みや、特許検索・分析の独自アプリケーションの開発が可能になります。
AIセマンティック検索やAI分類予測などのAI機能や、PFスコアや類似キーワードの取得などPatentfieldの多彩な機能を利用して、特許に関わる社内のニーズに合わせて最適なワークフローやアプリケーションを構築できます。
次回以降も、特許検索や分析実務で役立つ開発実装例を紹介していきます。
実践的なケーススタディを通じて、みなさまの知財業務変革のヒントになればと思います。
#Python
#Google Colab
#AI
#Patentfield
#特許
#知財
#知的財産