Jupyter Notebookで特許分析(5)

前回までの処理手順を踏襲して、今回は新しいデータで分析を行ってみます。家電量販店等で並んでいるマッサージ機のデータを用いてみます。Fターム「4C100」の2006年以降出願分になります。処理内容はおおむね前回まで説明した内容と同じですので、Jupyter Notebookの画面のみで説明は飛ばしていきます。

import pandas as pd
import numpy as np
df1 = pd.read_excel('patentdata2.xlsx')
df1.head()
公報番号 出願日 公開日 出願人 発明者 IPC8 FI Fターム 名称 要約 審査・権利状況
0 特開2017-159091 2013-08-30 2017-09-14 日立マクセル株式会社 品川崇;木村智昭;末次諒子;手塚佳佑 A61H 7/00@AFI(JP) A61H 7/00 322 E 4C100 AD02;4C100 BA02;4C100 BB05;4C100 BC12;4C… マッサージ装置 【課題】装置本体部と押圧部とを一体化して操作を行いやすくすると共に、まとめて取り扱うことがで… 審査請求
1 特開2017-158925 2016-03-11 2017-09-14 パナソニックIPマネジメント株式会社 飯村直之;若林美津恵;柴武志 A61H 7/00@AFI(JP);A45D 97/00@ALI(JP) A61H 7/00 300 G;A45D 97/00 4C100 AA04;4C100 AA15;4C100 CA01;4C100 DA01 頭皮ケア装置、施術突起構造体、当該施術突起構造体で用いられるカバーおよび芯材 【課題】本体部が大型化してしまうのを抑制しつつ、施術突起の配置本数を増やすことのできる頭皮ケ… 出願
2 特開2017-158919 2016-03-11 2017-09-14 パナソニックIPマネジメント株式会社 湯川隆志;森川大輔;泉中健志;渥美紗知子 A61B 5/05@AFI(JP);A61H 7/00@ALI(JP) A61B 5/05 C;A61H 7/00 323 S 4C100 AD11;4C100 BA02;4C100 BA09;4C100 BB03;4C… 生体状態評価装置及びマッサージ機 【課題】汗に伴う生体状態評価の誤差を抑えることができるマッサージ機を提供する。【解決手段】マ… 出願
3 特開2017-158918 2016-03-11 2017-09-14 パナソニックIPマネジメント株式会社 湯川隆志;森川大輔;泉中健志;渥美紗知子 A61H 7/00@AFI(JP) A61H 7/00 323 S;A61H 7/00 323 L 4C100 AD17;4C100 BA03;4C100 BA09;4C100 BA10;4C… 生体状態評価装置及びマッサージ機 【課題】生体状態評価の精度を向上させることができるマッサージ機を提供する。【解決手段】マッサ… 出願
4 特開2017-158834 2016-03-10 2017-09-14 ファミリーイナダ株式会社 佐々木泉 A61H 7/00@AFI(JP) A61H 7/00 323 H;A61H 7/00 323 K 4C100 AD11;4C100 BA07;4C100 BB03;4C100 BC03;4C… マッサージ機 【課題】各部位に対して十分な強さでマッサージできるマッサージ機を提供することを目的とする。【… 出願
df1['公報番号'].groupby(df1['出願日'].dt.year).count()
出願年毎の出願件数データになります。後で、グラフ作成に用います。
出願日
2006    245
2007    236
2008    223
2009    201
2010    204
2011    206
2012    185
2013    183
2014    154
2015    149
2016     33
2017      1
Name: 公報番号, dtype: int64
apns = df1['出願人'].map(lambda x: x.split(";"))
ser1 = pd.Series(np.hstack(apns.values))
unique_apns = ser1.str.strip().unique()
unique_apns.sort()
def filter_df_by_apn(df, apn):
    apn_df = df.loc[df['出願人'].map(lambda x: apn in x)].copy()
    apn_df['出願人'] = apn
    return apn_df
apn_df_list =[filter_df_by_apn(df1, apn) for apn in unique_apns]
df2 = pd.concat(apn_df_list)
df2 = df2.loc[:,['公報番号','出願人','出願日']]
df2.sort_values('公報番号', inplace=True)
df2.head()
公報番号 出願人 出願日
2019 特表2008-532591 グリーンベルグロナルドアラン 2006-03-09
2018 特表2008-532697 エフケイエイディストリビューティングシーオー.ディー/ビー/エイホームディクス,インク. 2006-03-14
2017 特表2008-532714 エフケイエイディストリビューティングシーオー.ディー/ビー/エイホームディクス,インク. 2006-03-16
2016 特表2008-541900 ハンスグローエアーゲー 2006-05-20
2015 特表2008-546460 ウォーカー,ステファン 2006-06-19
df2['公報番号'].groupby([df2['出願人'], df2['出願日'].dt.year]).count()
出願人                                           出願日 
▲ケイ▼泰健康器材有限公司                                 2011     2
▲許▼敬▲鳳▼                                       2007     1
▲高▼島広雄                                        2015     1
あまの葉株式会社                                      2007     1
しげるテック株式会社                                    2009     1
アイコンフォートリミテッド                                 2013     1
アイシン精機株式会社                                    2013     1
                                              2014     2
                                              2015     2
アクアロール                                        2010     1
アドウィン・コリア・コーポレーション                            2006     1
アナスターシヴァヴヴェッスィファビオディアナスターシヴァヴヴェッスィファビオ        2007     1
アナトミックフォーカスリミテッド                              2014     1
アフン,クワングウー                                    2007     1
アルインコ株式会社                                     2011     1
アースライトマッサージテーブルズインコーポレイテッド                    2008     1
アース製薬株式会社                                     2009     1
インデルム                                         2015     1
インプラスフットケア,エルエルシー                             2016     1
イー―リー,ロク                                      2014     1
ウォーカー,ステファン                                   2006     1
エイチエルディーヘルシーライフディバイセズリミテッド                    2006     1
エイベックス,エルエルシー                                 2009     1
エスディーバイオテクノロジーズカンパニーリミテッド                     2016     1
エスパンシオーネマーケティングエッセ.ピ.ア.                       2010     1
エス・エム・ジェイ株式会社                                 2011     1
エヌビーエス株式会社                                    2011     1
エフケイエイディストリビューティングシーオー.ディー/ビー/エイホームディクス,インク.  2006     3
エポコラム機工株式会社                                   2011     1
エムシーヘルステック,エセ.エレ.                             2011     1
                                                      ..
高倉淳                                           2012     1
高木二朗太                                         2010     1
高橋ひとみ                                         2012     1
高橋博文                                          2011     1
高橋眞幸                                          2009     2
高田晴透                                          2011     1
鳥居諭                                           2012     1
麻野井英次                                         2008     1
黄智煥                                           2009     1
黄潤景                                           2015     1
黒岩明                                           2012     1
黒木薫                                           2011     2
                                              2012     1
黒田精工株式会社                                      2006     1
                                              2009     1
BBJハイテック株式会社                                  2009     1
JSR株式会社                                       2008     1
KAATSUJAPAN株式会社                               2006     1
                                              2012     1
NSファーファ・ジャパン株式会社                              2014     1
NTN株式会社                                       2010     2
NTTテクノクロス株式会社                                 2015     1
RIZAPグループ株式会社                                 2013     1
TBCグループ株式会社                                   2011     1
TOTO株式会社                                      2006    12
                                              2007    13
                                              2008     7
                                              2009     1
                                              2011     1
                                              2012     1
Name: 公報番号, Length: 872, dtype: int64
import difflib as diff
for (str1, str2) in [
    (str1, str2)
    for str1 in unique_apns
    for str2 in unique_apns
    if str1 < str2
    ]:
    # 類似度を計算、0.0~1.0 で結果が返る
    s = diff.SequenceMatcher(None, str1, str2).ratio()
    if s > 0.7:
        print (str1, "<->", str2)
        print ("match ratio:", s, "\n")
しげるテック株式会社 <-> エムテック株式会社
match ratio: 0.7368421052631579 

アイシン精機株式会社 <-> アルインコ株式会社
match ratio: 0.7368421052631579 

アルインコ株式会社 <-> ライオン株式会社
match ratio: 0.7058823529411765 

アース製薬株式会社 <-> パーパス株式会社
match ratio: 0.7058823529411765 

アース製薬株式会社 <-> 小林製薬株式会社
match ratio: 0.7058823529411765 

エヌビーエス株式会社 <-> エース消毒株式会社
match ratio: 0.7368421052631579 

エポコラム機工株式会社 <-> エレコム株式会社
match ratio: 0.7368421052631579 

エムテック株式会社 <-> エレコム株式会社
match ratio: 0.7058823529411765 

エムテック株式会社 <-> テイ・エステック株式会社
match ratio: 0.7619047619047619 

エレクトロメド・インコーポレイテッド <-> エレクトロメド,インコーポレイテッド
match ratio: 0.9444444444444444 

エレクトロメド・インコーポレイテッド <-> エレメメディカルインコーポレイテッド
match ratio: 0.7222222222222222 

エレクトロメド・インコーポレイテッド <-> エレメ・メディカル・インコーポレイテッド
match ratio: 0.7368421052631579 

エレクトロメド,インコーポレイテッド <-> エレメメディカルインコーポレイテッド
match ratio: 0.7222222222222222 

エレメメディカルインコーポレイテッド <-> エレメ・メディカル・インコーポレイテッド
match ratio: 0.9473684210526315 

エレメメディカルインコーポレイテッド <-> ダイナサームメディカル,インコーポレイテッド
match ratio: 0.75 

エレメメディカルインコーポレイテッド <-> パーフュジアメディカルインコーポレーテッド
match ratio: 0.717948717948718 

エレメ・メディカル・インコーポレイテッド <-> ダイナサームメディカル,インコーポレイテッド
match ratio: 0.7142857142857143 

エース消毒株式会社 <-> パーパス株式会社
match ratio: 0.7058823529411765 

オリンパス株式会社 <-> パーパス株式会社
match ratio: 0.7058823529411765 

オリンパス株式会社 <-> ライオン株式会社
match ratio: 0.7058823529411765 

オリンパス株式会社 <-> リンナイ株式会社
match ratio: 0.7058823529411765 

コーニンクレッカフィリップスエヌヴェ <-> コーニンクレッカフィリップスエレクトロニクスエヌヴィ
match ratio: 0.7727272727272727 

スライヴ株式会社 <-> ライオン株式会社
match ratio: 0.75 

セバシア,インコーポレイテッド <-> セルイージスデバイシィズインコーポレイテッド
match ratio: 0.7027027027027027 

セーレン株式会社 <-> ヤーマン株式会社
match ratio: 0.75 

セーレン株式会社 <-> 東洋レヂン株式会社
match ratio: 0.7058823529411765 

ソニー株式会社 <-> パナソニック株式会社
match ratio: 0.7058823529411765 

ソニー株式会社 <-> ユーズ株式会社
match ratio: 0.7142857142857143 

タイコヘイルスケアグループエルピー <-> タイコ・ヘルスケアー・グループ・エルピー
match ratio: 0.8648648648648649 

テイアサイエンス・インコーポレーテツド <-> テイライフサイエンスインコーポレイテッド
match ratio: 0.7692307692307693 

トッレグロサパスクアル,ドミンゴ <-> トッレグロサパスクアル,ホセ
match ratio: 0.8 

トヨタ紡織株式会社 <-> トヨタ自動車株式会社
match ratio: 0.7368421052631579 

トヨタ自動車株式会社 <-> 日産自動車株式会社
match ratio: 0.7368421052631579 

ハントリーテクノロジーリミテッド <-> ハントレイテクノロジーリミテッド
match ratio: 0.875 

パナソニック株式会社 <-> パナソニック電工株式会社
match ratio: 0.9090909090909091 

パナソニック株式会社 <-> パナソニックIPマネジメント株式会社
match ratio: 0.7142857142857143 

パラマウントベッド株式会社 <-> フランスベッド株式会社
match ratio: 0.75 

パーパス株式会社 <-> 東京パーツ株式会社
match ratio: 0.7058823529411765 

ファイテン株式会社 <-> ライオン株式会社
match ratio: 0.7058823529411765 

ベス工業株式会社 <-> 栗田工業株式会社
match ratio: 0.75 

ベス工業株式会社 <-> 金澤工業株式会社
match ratio: 0.75 

ヤマハ株式会社 <-> ヤーマン株式会社
match ratio: 0.8 

上海榮泰健康科技股▲ふん▼有限公司 <-> 慧坦科技股▲ふん▼有限公司
match ratio: 0.7333333333333333 

中西電機工業株式会社 <-> 大東電機工業株式会社
match ratio: 0.8 

九州日立マクセル株式会社 <-> 日立マクセル株式会社
match ratio: 0.9090909090909091 

光▲いく▼金▲屬▼有限公司 <-> 光▲いく▼金屬有限公司
match ratio: 0.9166666666666666 

公立大学法人高知工科大学 <-> 国立大学法人高知大学
match ratio: 0.8181818181818182 

国立大学法人大分大学 <-> 国立大学法人東京大学
match ratio: 0.8 

国立大学法人大分大学 <-> 国立大学法人東北大学
match ratio: 0.8 

国立大学法人大分大学 <-> 国立大学法人高知大学
match ratio: 0.8 

国立大学法人大分大学 <-> 国立大学法人鳥取大学
match ratio: 0.8 

国立大学法人東京大学 <-> 国立大学法人東北大学
match ratio: 0.9 

国立大学法人東京大学 <-> 国立大学法人高知大学
match ratio: 0.8 

国立大学法人東京大学 <-> 国立大学法人鳥取大学
match ratio: 0.8 

国立大学法人東北大学 <-> 国立大学法人高知大学
match ratio: 0.8 

国立大学法人東北大学 <-> 国立大学法人鳥取大学
match ratio: 0.8 

国立大学法人高知大学 <-> 国立大学法人鳥取大学
match ratio: 0.8 

大阪瓦斯株式会社 <-> 東京瓦斯株式会社
match ratio: 0.75 

大阪瓦斯株式会社 <-> 東邦瓦斯株式会社
match ratio: 0.75 

川本産業株式会社 <-> 紀伊産業株式会社
match ratio: 0.75 

日本発條株式会社 <-> 日本電気株式会社
match ratio: 0.75 

日本電信電話株式会社 <-> 日本電気株式会社
match ratio: 0.7777777777777778 

有限会社トウイング <-> 有限会社トーイチ
match ratio: 0.7058823529411765 

有限会社上川製作所 <-> 有限会社村製作所
match ratio: 0.8235294117647058 

有限会社村製作所 <-> 株式会社村田製作所
match ratio: 0.7058823529411765 

東京パーツ株式会社 <-> 東京瓦斯株式会社
match ratio: 0.7058823529411765 

東京瓦斯株式会社 <-> 東邦瓦斯株式会社
match ratio: 0.875 

栗田工業株式会社 <-> 金澤工業株式会社
match ratio: 0.75 

栗田工業株式会社 <-> 黒田精工株式会社
match ratio: 0.75 

株式会社アイアイ <-> 株式会社アイセン
match ratio: 0.75 

株式会社アイセン <-> 株式会社アドバンス
match ratio: 0.7058823529411765 

株式会社アイセン <-> 株式会社アンス
match ratio: 0.8 

株式会社アイセン <-> 株式会社セコ
match ratio: 0.7142857142857143 

株式会社アイティボックス <-> 株式会社アテックス
match ratio: 0.8571428571428571 

株式会社アコーズ <-> 株式会社コニー
match ratio: 0.8 

株式会社アコーズ <-> 株式会社コーセー
match ratio: 0.75 

株式会社アコーズ <-> 株式会社セコ
match ratio: 0.7142857142857143 

株式会社アスク <-> 株式会社アテックス
match ratio: 0.75 

株式会社アスク <-> 株式会社アドバンス
match ratio: 0.75 

株式会社アスク <-> 株式会社アンス
match ratio: 0.8571428571428571 

株式会社アスク <-> 株式会社ミクロ
match ratio: 0.7142857142857143 

株式会社アテックス <-> 株式会社アンス
match ratio: 0.75 

株式会社アテックス <-> 株式会社テスコム
match ratio: 0.7058823529411765 

株式会社アテックス <-> 株式会社フューテック
match ratio: 0.7368421052631579 

株式会社アドバンス <-> 株式会社アンス
match ratio: 0.875 

株式会社クロシオ <-> 株式会社タオ
match ratio: 0.7142857142857143 

株式会社クロシオ <-> 株式会社ミクロ
match ratio: 0.8 

株式会社コジット <-> 株式会社コレッド
match ratio: 0.75 

株式会社コジット <-> 株式会社セコ
match ratio: 0.7142857142857143 

株式会社コニー <-> 株式会社コーセー
match ratio: 0.8 

株式会社コニー <-> 株式会社セコ
match ratio: 0.7692307692307693 

株式会社コレッド <-> 株式会社セコ
match ratio: 0.7142857142857143 

株式会社コーセー <-> 株式会社セコ
match ratio: 0.7142857142857143 

株式会社セコ <-> 株式会社テスコム
match ratio: 0.7142857142857143 

株式会社タオ <-> 株式会社タダノ
match ratio: 0.7692307692307693 

株式会社タオ <-> 株式会社ヒラタ
match ratio: 0.7692307692307693 

株式会社タオ <-> 株式会社マルタカ
match ratio: 0.7142857142857143 

株式会社タダノ <-> 株式会社ヒラタ
match ratio: 0.7142857142857143 

株式会社デンソー <-> 株式会社プロンテー
match ratio: 0.7058823529411765 

株式会社ヒラタ <-> 株式会社ライズ
match ratio: 0.7142857142857143 

株式会社ライズ <-> 株式会社レアーライブ
match ratio: 0.7058823529411765 

株式会社山利製作所 <-> 株式会社山田精密製作所
match ratio: 0.8 

株式会社山利製作所 <-> 株式会社惣田製作所
match ratio: 0.7777777777777778 

株式会社山利製作所 <-> 株式会社村田製作所
match ratio: 0.7777777777777778 

株式会社山利製作所 <-> 株式会社神田製作所
match ratio: 0.7777777777777778 

株式会社山利製作所 <-> 株式会社鹿浜製作所
match ratio: 0.7777777777777778 

株式会社山田精密製作所 <-> 株式会社惣田製作所
match ratio: 0.8 

株式会社山田精密製作所 <-> 株式会社村田製作所
match ratio: 0.8 

株式会社山田精密製作所 <-> 株式会社神田製作所
match ratio: 0.8 

株式会社惣田製作所 <-> 株式会社村田製作所
match ratio: 0.8888888888888888 

株式会社惣田製作所 <-> 株式会社神田製作所
match ratio: 0.8888888888888888 

株式会社惣田製作所 <-> 株式会社鹿浜製作所
match ratio: 0.7777777777777778 

株式会社村田製作所 <-> 株式会社神田製作所
match ratio: 0.8888888888888888 

株式会社村田製作所 <-> 株式会社鹿浜製作所
match ratio: 0.7777777777777778 

株式会社永和工学 <-> 株式会社真和
match ratio: 0.7142857142857143 

株式会社神田製作所 <-> 株式会社鹿浜製作所
match ratio: 0.7777777777777778 

株式会社H&E <-> 株式会社HNS
match ratio: 0.7142857142857143 

株式会社HNS <-> 株式会社JSV
match ratio: 0.7142857142857143 

株式会社INAX <-> 株式会社LIXIL
match ratio: 0.7058823529411765 

株式会社JSV <-> 株式会社Joy
match ratio: 0.7142857142857143 

深▲せん▼市▲軽▼松科技股▲分▼有限公司 <-> 深▲せん▼市倍軽松科技股▲ふん▼有限公司
match ratio: 0.85 

深▲せん▼市▲軽▼松科技股▲分▼有限公司 <-> 深▲せん▼市倍軽松科技股分有限公司
match ratio: 0.8648648648648649 

深▲せん▼市倍軽松科技股▲ふん▼有限公司 <-> 深▲せん▼市倍軽松科技股分有限公司
match ratio: 0.8648648648648649 
df2.loc[df2['出願人'] == 'エレクトロメド,インコーポレイテッド', '出願人'] = 'エレクトロメド・インコーポレイテッド'
df2.loc[df2['出願人'] == 'エレメメディカルインコーポレイテッド', '出願人'] = 'エレメ・メディカル・インコーポレイテッド'
df2.loc[df2['出願人'] == 'コーニンクレッカフィリップスエヌヴェ', '出願人'] = 'コーニンクレッカフィリップスエレクトロニクスエヌヴィ'
df2.loc[df2['出願人'] == 'タイコヘイルスケアグループエルピー', '出願人'] = 'タイコ・ヘルスケアー・グループ・エルピー'
df2.loc[df2['出願人'] == 'パナソニックIPマネジメント株式会社', '出願人'] = 'パナソニック株式会社'
df2.loc[df2['出願人'] == '光▲いく▼金▲屬▼有限公司', '出願人'] = '光▲いく▼金屬有限公司'
df3 = df2['公報番号'].groupby([df2['出願人'], df2['出願日'].dt.year]).count()
df2['公報番号'].groupby(df2['出願人']).count().nlargest(10)
出願人のTOP10件数です。
出願人
パナソニック株式会社      335
ファミリーイナダ株式会社    212
株式会社フジ医療器       119
日立マクセル株式会社      114
三洋電機株式会社        110
大東電機工業株式会社      104
パナソニック電工株式会社    100
TOTO株式会社         35
株式会社MTG          29
ツインバード工業株式会社     20
Name: 公報番号, dtype: int64
fts = df1['Fターム'].map(lambda x: x.split(';'))
ser2 = pd.Series(np.hstack(fts.values))
unique_fts = ser2.str.strip().unique()
unique_fts.sort()
def filter_df_by_ft(df, ft):
    ft_df = df.loc[df['Fターム'].map(lambda x: ft in x)].copy()
    ft_df['Fターム'] = ft
    return ft_df
ft_df_list =[filter_df_by_ft(df1, ft) for ft in unique_fts]
df4 = pd.concat(ft_df_list)
df4 = df4.loc[:,['公報番号','Fターム','出願日']]
df4.sort_values('公報番号', inplace=True)
df4.head()
公報番号 Fターム 出願日
2019 特表2008-532591 4C074 BB01 2006-03-09
2019 特表2008-532591 4C100 BB05 2006-03-09
2019 特表2008-532591 4C074 FF09 2006-03-09
2019 特表2008-532591 4C074 AA10 2006-03-09
2019 特表2008-532591 4C074 DD01 2006-03-09
df5 = df4.copy()
df5['Fターム'] = df5['Fターム'].str[0:5]
df5.head()
公報番号 Fターム 出願日
2019 特表2008-532591 4C074 2006-03-09
2019 特表2008-532591 4C100 2006-03-09
2019 特表2008-532591 4C074 2006-03-09
2019 特表2008-532591 4C074 2006-03-09
2019 特表2008-532591 4C074 2006-03-09
df5 = df5.drop_duplicates()
df5.head()
公報番号 Fターム 出願日
2019 特表2008-532591 4C074 2006-03-09
2019 特表2008-532591 4C100 2006-03-09
2018 特表2008-532697 4C094 2006-03-14
2018 特表2008-532697 4C074 2006-03-14
2018 特表2008-532697 4C100 2006-03-14
df6 = pd.merge(df2, df4, on='公報番号')
df6.head()
分割した出願人データと分割したFタームデータを合体させました。出願日が重複しているのでxやyのラベルが付加されていますが気にしないでください。
公報番号 出願人 出願日_x Fターム 出願日_y
0 特表2008-532591 グリーンベルグロナルドアラン 2006-03-09 4C074 BB01 2006-03-09
1 特表2008-532591 グリーンベルグロナルドアラン 2006-03-09 4C100 BB05 2006-03-09
2 特表2008-532591 グリーンベルグロナルドアラン 2006-03-09 4C074 FF09 2006-03-09
3 特表2008-532591 グリーンベルグロナルドアラン 2006-03-09 4C074 AA10 2006-03-09
4 特表2008-532591 グリーンベルグロナルドアラン 2006-03-09 4C074 DD01 2006-03-09
df4['公報番号'].groupby(df4['Fターム']).count().nlargest(10)
FタームのTOP10件数です。
Fターム
4C100 DA05    768
4C100 DA10    686
4C100 BB03    608
4C100 BB05    572
4C100 CA06    514
4C100 CA01    489
4C100 DA06    395
4C100 AD02    350
4C100 BB01    350
4C100 CA03    327
Name: 公報番号, dtype: int64
df7 = df6[(df6['出願人'].isin(df2['公報番号'].groupby(df2['出願人']).count().nlargest(10).index)) & (df6['Fターム'].isin(df4['公報番号'].groupby(df4['Fターム']).count().nlargest(10).index))]
df8 = df7.pivot_table(index='出願人', columns='Fターム', values='公報番号', aggfunc='count', margins=True)
df8 = df8.sort_values(by=["All"], ascending=False)
df8 = df8.sort_values(by=["All"], axis=1, ascending=False)
df8 = df8.drop("All", axis=1)
df8 = df8.drop("All", axis=0)
df8
出願人別Fターム別出願件数表です。
Fターム 4C100 DA05 4C100 DA10 4C100 CA06 4C100 BB03 4C100 BB05 4C100 DA06 4C100 CA03 4C100 AD02 4C100 CA01 4C100 BB01
出願人
パナソニック株式会社 137.0 95.0 123.0 121.0 94.0 78.0 77.0 65.0 39.0 6.0
ファミリーイナダ株式会社 119.0 101.0 108.0 90.0 83.0 76.0 73.0 47.0 6.0 1.0
株式会社フジ医療器 75.0 61.0 57.0 37.0 62.0 42.0 37.0 43.0 NaN NaN
日立マクセル株式会社 55.0 53.0 48.0 38.0 55.0 27.0 27.0 36.0 19.0 12.0
三洋電機株式会社 41.0 65.0 42.0 34.0 41.0 31.0 26.0 32.0 NaN NaN
パナソニック電工株式会社 53.0 25.0 43.0 36.0 39.0 16.0 32.0 20.0 12.0 1.0
大東電機工業株式会社 43.0 54.0 37.0 56.0 13.0 17.0 23.0 8.0 6.0 5.0
株式会社MTG 2.0 7.0 NaN 3.0 2.0 4.0 1.0 3.0 26.0 23.0
TOTO株式会社 17.0 10.0 5.0 3.0 20.0 9.0 1.0 4.0 1.0 NaN
ツインバード工業株式会社 NaN NaN NaN 19.0 NaN NaN NaN NaN 18.0 NaN
df9 = df2[df2['出願人'].isin(df2['公報番号'].groupby(df2['出願人']).count().nlargest(10).index)]
df9 = df9.pivot_table(index=df9['出願日'].dt.year, columns='出願人', values='公報番号', aggfunc='count')
df9
出願人別出願件数推移です。
出願人 ツインバード工業株式会社 パナソニック株式会社 パナソニック電工株式会社 ファミリーイナダ株式会社 三洋電機株式会社 大東電機工業株式会社 日立マクセル株式会社 株式会社フジ医療器 株式会社MTG TOTO株式会社
出願日
2006 2.0 15.0 33.0 25.0 25.0 3.0 7.0 31.0 NaN 12.0
2007 3.0 29.0 23.0 33.0 12.0 2.0 10.0 38.0 1.0 13.0
2008 3.0 28.0 22.0 25.0 19.0 10.0 9.0 8.0 NaN 7.0
2009 7.0 47.0 7.0 11.0 24.0 14.0 2.0 5.0 NaN 1.0
2010 NaN 48.0 15.0 8.0 21.0 12.0 14.0 2.0 5.0 NaN
2011 NaN 56.0 NaN 15.0 9.0 10.0 9.0 7.0 7.0 1.0
2012 2.0 38.0 NaN 16.0 NaN 13.0 25.0 7.0 3.0 1.0
2013 NaN 33.0 NaN 18.0 NaN 14.0 13.0 6.0 6.0 NaN
2014 3.0 26.0 NaN 27.0 NaN 9.0 11.0 2.0 4.0 NaN
2015 NaN 7.0 NaN 29.0 NaN 12.0 14.0 11.0 NaN NaN
2016 NaN 8.0 NaN 5.0 NaN 5.0 NaN 2.0 3.0 NaN
ここまでで、基礎的な件数データの準備は終わったので、グラフを書いていきます。今回はbokehを使っていきます。まずは、集合全体での出願年別出願件数推移から。
from bokeh.charts import output_notebook, Bar, Line, HeatMap, show
from bokeh.palettes import RdYlGn6
output_notebook()

p1 = Line(df1['公報番号'].groupby(df1['出願日'].dt.year).count(), plot_width=600, plot_height=200, legend = False)
p1.xaxis.axis_label = '出願年'
p1.yaxis.axis_label = '出願件数'
show(p1)
次に、上位の出願人別出願年別出願件数推移を作成します。
p2 = Line(df9, plot_width=800, plot_height=400)
p2.xaxis.axis_label = '出願年'
p2.yaxis.axis_label = '出願件数'
p2.legend.location = "top_right"
show(p2)
 
count3 = []
for x in df8.apply(tuple):
    count3.extend(x)

data = {
  '出願人': list(df8.index) * len(df8.columns),
  'Fターム':  [item for item in list(df8.columns) for i in range(len(df8.index))],
  '件数':   count3,
}

p3 = HeatMap(data, x='Fターム', y='出願人',values='件数', title='出願人別Fターム別件数', stat=None)
show(p3)
 
こんな感じで、Jupyter Notebook上でグラフ作成まで行うこともできます。前回の記事でも述べましたが、データフレームはExcelに出力することもできるので、Jupyter Notebook上ではなくExcel上でグラフ作成することもできます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

%d人のブロガーが「いいね」をつけました。