はじめに
成長率マップとは、特定の2つの期間(基準期間と作成期間)における出願件数、出願人数等が増加あるいは減少しているデータを見いだし、増減率によってランキング表示したもので、これにより、技術開発が盛んな分野や衰退している分野を認識することができるマップとのことです。
今回はこの成長率マップを書いてみようと思います。
プログラム
今回は扇風機に関する特許データを収集し、グラフを書いてみることにします。
出願人top10抽出
まずは、成長率を計算する出願人を抽出します。今回は、扇風機の出願件数のtop10を抽出して、分析をしようと思います。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
# googleドライブの利用
from google.colab import drive
drive.mount('/content/drive')
# データの前処理
# データの読み込み(google ドライブから)
df = pd.read_csv("/content/drive/MyDrive/扇風機2010_2020.csv", encoding="shift-jis")
#必要な列のみ抽出
df = df[['出願人/権利者', '出願日']]
#不要語の削除(出願人/権利者)
df['出願人/権利者'] = df['出願人/権利者'].str.replace('▲', '')
df['出願人/権利者'] = df['出願人/権利者'].str.replace('▼', '')
#出願日を日付型に置き換え
df['出願日'] = pd.to_datetime(df['出願日'])
# ,で出願人を分割
df['出願人/権利者'] = df['出願人/権利者'].str.split(',')
# 出願人をエクスプロード
df = df.explode('出願人/権利者')
# '出願人/権利者' の頻度をカウント
top_applicants = df['出願人/権利者'].value_counts()
# 頻度の高い上位10を取得
top10_applicants = top_applicants.head(10)
print(top10_applicants)
top10は以下の企業となりました。
パナソニックIPマネジメント株式会社 87
パナソニック株式会社 35
三菱電機株式会社 33
東芝ホームテクノ株式会社 16
株式会社CMC 14
広東美的環境電器制造有限公司 13
リズム時計工業株式会社 11
ユーテック株式会社 10
美的集団股フン有限公司 10
株式会社マキタ 10
データフレーム作成
2010年から2014年を期間1とし、2015年から2019年を期間2とし、期間1の出願件数列と期間2の出願件数列を含むデータフレーム(summary_df)を作成しました。
# 出願日の範囲を設定
start_date1 = pd.to_datetime('2010-01-01')
end_date1 = pd.to_datetime('2014-12-31')
start_date2 = pd.to_datetime('2015-01-01')
end_date2 = pd.to_datetime('2019-12-31')
# top10の出願人/権利者に絞り込む
top10_df = df[df['出願人/権利者'].isin(top10_applicants.index)]
# 期間を指定して出願件数を計算
period1_counts = top10_df.loc[(top10_df['出願日'] >= start_date1) & (top10_df['出願日'] <= end_date1), '出願人/権利者'].value_counts()
period2_counts = top10_df.loc[(top10_df['出願日'] >= start_date2) & (top10_df['出願日'] <= end_date2), '出願人/権利者'].value_counts()
# 期間ごとの出願件数を新たなデータフレームに結合
summary_df = pd.DataFrame({'期間1出願件数': period1_counts, '期間2出願件数': period2_counts}).fillna(0).reset_index()
summary_df.columns = ['出願人/権利者', '期間1出願件数', '期間2出願件数']
print(summary_df)
作成されたデータフレームは以下となります。出願人ごとの、期間1出願件数、期間2出願件数のデータフレームが作成されていることがわかります。期間1の出願件数に小数点以下が表示されている理由はわかりません・・・。
出願人/権利者 期間1出願件数 期間2出願件数
0 パナソニック株式会社 34.0 1
1 パナソニックIPマネジメント株式会社 45.0 40
2 ユーテック株式会社 5.0 5
3 リズム時計工業株式会社 1.0 8
4 三菱電機株式会社 13.0 17
5 広東美的環境電器制造有限公司 0.0 10
6 東芝ホームテクノ株式会社 7.0 9
7 株式会社マキタ 6.0 3
8 株式会社CMC 2.0 12
9 美的集団股フン有限公司 0.0 7
成長率の計算
成長率(増加率)の計算は、以下の計算式としました。成長率の定義がこれでよいかは自信がありません。
増加率 = (期間2出願件数 - 期間1出願件数) / 期間1出願件数
計算した増加率については、データフレームに加えます。
# 増加率の計算
summary_df['増加率'] = (summary_df['期間2出願件数'] - summary_df['期間1出願件数']) / summary_df['期間1出願件数'].replace(0, np.nan)
# 増加率をパーセンテージに変換
summary_df['増加率'] = summary_df['増加率'] * 100
グラフ化
上記データフレームを用いてグラフを書きます。
# 増加率が正なら青、負なら赤に設定
bar_colors = ['blue' if rate > 0 else 'red' for rate in summary_df['増加率']]
# 増加率の横棒グラフを描画する
plt.barh(summary_df['出願人/権利者'], summary_df['増加率'], color=bar_colors)
plt.title('出願人ごとの成長率')
plt.xlabel('成長率 (%)')
plt.ylabel('出願人/権利者')
plt.gca().invert_yaxis() # y軸の順序を反転
plt.show()
出力されたグラフ
出力されたグラフは以下となります。青い棒グラフの企業は、出願件数が伸びている企業、赤い棒グラフの企業は出願件数が減っている企業となります。
感想
名寄せ問題
パナソニック株式会社とパナソニックIPマネジメント株式会社とは、同一企業として取り扱った方がよいとも思いますが、その場合、その他の企業も同一性があるのかないのか調べなければならなくなり、大変ですので、名寄せはしないことにしました。
名寄せをする場合には、企業のHPをみてその沿革を確認することが必要と思います。
(なお、ChatGPTに確認したところ、
1.パナソニックIPマネジメント株式会社、パナソニック株式会社、三洋電機株式会社は同一の企業グループ(パナソニックグループ)に所属しています。
2.広東美的環境電器制造有限公司と美的集団股フン有限公司は同一の企業グループ(美的グループ)に所属しています。
とのことでした(2021年時点)
このグラフは2019年までの情報があればよいので、ChatGPTに名寄せしてもらうのは一つの手かと思います。)
無限大問題
この成長率の計算方法ですと、期間1出願件数が0の場合には、成長率が無限大となり、意味のない数値となります。したがって、期間1出願件数が0の企業については、分析前に取り扱いをどうするか考えておく必要があると思いました。
このグラフでは、広東美的環境電器制造有限公司と美的集団股フン有限公司が成長率無限大となりますが、グラフには成長率0%のところに表示されるようになっていますが、そういう企業は除くか、時間軸の取り方を変更する方がよいと思いました。