Jupyter Notebookで特許分析(7)

さて、前回までで、母集合の主要な数値指標等を見てきました。

市場としては椅子タイプが牽引してきて、最近は、椅子タイプの安価版としてシートタイプが出てきていること。上位の出願人はおおむねこの椅子タイプを中心に出願を行っており、市場でのシェア上位も上位出願人と合っているといった内容でした。

これからマッサージ機市場に参入する方策を検討しているというシチュエーションでしたので、この椅子タイプに参入していくプランは描きにくいところです。したがって、椅子タイプを外して出願動向を見て、参入の方策を検討していくことにしましょう。

マッサージ機のFターム4C100を見るとCA03からCA09が家庭用の椅子タイプに対応するようです(CA11とCA12も椅子タイプの下位分類ですが、普通の家庭用の椅子タイプからは外れると考えました)。これらCA03からCA09を除外した集合を作ってその数値指標を見ていきましょう。

下記のようにCA03からCA09をFタームに含む案件の公報番号のリストCA03list及び含まない案件のリストNOTCA03listを作成します。

CA03list = df1.loc[df1['Fターム'].str.contains('(4C100 CA03|4C100 CA04|4C100 CA05|4C100 CA06|4C100 CA07|4C100 CA08|4C100 CA09)'), '公報番号']
NOTCA03list = df1.loc[~df1['Fターム'].str.contains('(4C100 CA03|4C100 CA04|4C100 CA05|4C100 CA06|4C100 CA07|4C100 CA08|4C100 CA09)'), '公報番号']
 作成したリストにより、CA03からCA09をFタームに含む案件のデータフレームdf10及び含まない案件のデータフレームdf11を作成します。
df10 = df2[df2['公報番号'].isin(CA03list)]
df11 = df2[df2['公報番号'].isin(NOTCA03list)]
まずは、CA03からCA09をFタームに含む案件の出願年別出願件数推移を見てみます。
p3 = Line(df10['公報番号'].groupby(df10['出願日'].dt.year).count(), plot_width=600, plot_height=200, legend = False)
p3.xaxis.axis_label = '出願年'
p3.yaxis.axis_label = '出願件数'
show(p3)
2006年以降出願件数は下がり続けています。安価な製品としてシートタイプを投入していても、シートタイプの投入にあたり、新たな技術要素の開発は活発ではなかったようです。
次に、CA03からCA09をFタームに含まない案件の出願年別出願件数推移を見てみます。
p4 = Line(df11['公報番号'].groupby(df11['出願日'].dt.year).count(), plot_width=600, plot_height=200, legend = False)
p4.xaxis.axis_label = '出願年'
p4.yaxis.axis_label = '出願件数'
show(p4)
 
こちらは100件前後で比較的安定しており、大きな動きは内容です。
次に、CA03からCA09をFタームに含まない案件の上位出願人別の出願年別出願件数推移を見てみます。
df12 = df11[df11['出願人'].isin(df11['公報番号'].groupby(df11['出願人']).count().nlargest(10).index)]
df12 = df12.pivot_table(index=df12['出願日'].dt.year, columns='出願人', values='公報番号', aggfunc='count')
df12
出願人 コーニンクレッカフィリップスエレクトロニクスエヌヴィ ツインバード工業株式会社 パナソニック株式会社 パナソニック電工株式会社 ファミリーイナダ株式会社 大東電機工業株式会社 日立マクセル株式会社 株式会社MTG 花王株式会社 TOTO株式会社
出願日
2006 1.0 2.0 5.0 5.0 2.0 NaN NaN NaN 2.0 9.0
2007 1.0 3.0 5.0 3.0 3.0 NaN 1.0 NaN NaN 10.0
2008 2.0 3.0 5.0 2.0 NaN 3.0 1.0 NaN 1.0 7.0
2009 NaN 7.0 15.0 1.0 NaN 3.0 1.0 NaN 1.0 1.0
2010 2.0 NaN 15.0 10.0 3.0 1.0 NaN 5.0 3.0 NaN
2011 NaN NaN 13.0 NaN NaN 1.0 NaN 7.0 3.0 1.0
2012 NaN 2.0 15.0 NaN 1.0 3.0 4.0 3.0 3.0 1.0
2013 2.0 NaN 7.0 NaN 1.0 3.0 10.0 6.0 1.0 NaN
2014 2.0 3.0 7.0 NaN 1.0 3.0 6.0 4.0 NaN NaN
2015 4.0 NaN 3.0 NaN 6.0 3.0 8.0 NaN 2.0 NaN
2016 NaN NaN 1.0 NaN 2.0 1.0 NaN 3.0 NaN NaN
パナソニックの出願件数が上位出願人の中では突出しており、他の出願人は上位といってもそれほど多くの出願を行っているわけではありません。
グラフも描いてみます。
p5 = Line(df12, plot_width=800, plot_height=400)
p5.xaxis.axis_label = '出願年'
p5.yaxis.axis_label = '出願件数'
p5.legend.location = "top_right"
p5.legend.label_text_font_size = '5pt'
show(p5)
 
次は、CA03からCA09をFタームに含まない案件の出願人別Fターム別の件数表を作成していきます。
df13 = df6[df6['公報番号'].isin(NOTCA03list)]
df14 = df13[(df13['出願人'].isin(df11['公報番号'].groupby(df11['出願人']).count().nlargest(10).index)) & (df13['Fターム'].isin(df13['公報番号'].groupby(df13['Fターム']).count().nlargest(10).index))]
df15 = df14.pivot_table(index='出願人', columns='Fターム', values='公報番号', aggfunc='count', margins=True)
df15 = df15.sort_values(by=["All"], ascending=False)
df15 = df15.sort_values(by=["All"], axis=1, ascending=False)
df15 = df15.drop("All", axis=1)
df15 = df15.drop("All", axis=0)
df15
Fターム 4C100 CA01 4C100 BB03 4C100 DA01 4C100 DA10 4C100 DA02 4C100 BB01 4C100 BB05 4C100 DA08 4C100 DA05 4C100 AF06
出願人
パナソニック株式会社 39.0 35.0 32.0 16.0 16.0 3.0 14.0 5.0 4.0 5.0
株式会社MTG 26.0 2.0 1.0 7.0 19.0 23.0 1.0 12.0 2.0 3.0
日立マクセル株式会社 19.0 4.0 NaN 13.0 14.0 12.0 10.0 10.0 4.0 7.0
大東電機工業株式会社 6.0 18.0 4.0 10.0 1.0 2.0 3.0 3.0 7.0 3.0
ツインバード工業株式会社 18.0 19.0 17.0 NaN 1.0 NaN NaN NaN NaN 1.0
パナソニック電工株式会社 12.0 12.0 7.0 3.0 4.0 1.0 7.0 1.0 2.0 1.0
花王株式会社 15.0 NaN 10.0 2.0 2.0 15.0 NaN 2.0 2.0 NaN
ファミリーイナダ株式会社 5.0 12.0 3.0 7.0 2.0 NaN 5.0 6.0 4.0 2.0
TOTO株式会社 1.0 3.0 1.0 7.0 NaN NaN 15.0 3.0 13.0 NaN
コーニンクレッカフィリップスエレクトロニクスエヌヴィ 7.0 7.0 NaN 2.0 5.0 NaN NaN 1.0 1.0 1.0
グラフも描いてみます。
count3 = []
for x in df15.apply(tuple):
    count3.extend(x)

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

p6 = HeatMap(data, x='Fターム', y='出願人',values='件数', title='出願人別Fターム別件数', stat=None)
show(p6)
上位のFタームとしては、CA01:手持ち、BB03:モータが並びますが、あとは部位に関わるDAの分類がいくつか並び、その中で最上位の部位はDA01:頭部でありDA10:脚、DA02:顔と続く、あとは動力源としてBB01:人力、BB05:ポンプ等が並びます。椅子タイプ以外での参入方針検討のため、ここまで調べた傾向を整理してみます。上位出願人はパナソニック以外はそれほど出願件数は多くない、最上位の製品タイプはCA01:手持ちであり、製品として手持ちタイプに人気があり、出願も行われているようだ、部位としてはDA01:頭部、DA02:顔等の頭を対象とするものやDA10:脚を対象とするものに人気があり、出願も行われているようだ。
これらの状況を踏まえて、ある程度市場で人気がある「手持ち」タイプで、部位を絞って市場参入の戦略を検討を進めるのがよいだろう。
ここから先は、企画、営業、開発等の様々な部署とも情報交換して進めていったほうが良いだろう。そのために、部位毎での出願傾向のグラフや部位別な具体的な出願を参照するためのリストも用意しておいたほうが良いだろう。
そのために、DA00からDA20までの部位に関わるFタームに絞って、出願傾向を見てみる。
df16 = df13.loc[df13['Fターム'].str.contains('(4C100 DA00|4C100 DA01|4C100 DA02|4C100 DA03|4C100 DA04|4C100 DA05|4C100 DA06|4C100 DA07|4C100 DA08|4C100 DA09|4C100 DA10|4C100 DA11|4C100 DA12|4C100 DA20)')]
df16 = df16[(df16['出願人'].isin(df11['公報番号'].groupby(df11['出願人']).count().nlargest(10).index))]
df17 = df16.pivot_table(index='出願人', columns='Fターム', values='公報番号', aggfunc='count')
count3 = []
for x in df17.apply(tuple):
    count3.extend(x)

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

p7 = HeatMap(data, x='Fターム', y='出願人',values='件数', title='出願人別Fターム別件数', stat=None)
show(p7)

DA07:乳房とDA12:体腔が少なく、DA01-02の頭が多く次いで、DA10の脚が次いで多いといった傾向が見られます。体腔はどのようにマッサージするのか分かりませんが、何件かある公報には書いてあるのでしょう。この情報を元に「手持ち」で「手のひら」とか具体的なアイデアを様々な部署と情報交換して検討していこう。そんな感じでとりあえずの分析を終了します。

いかがでしょうか、多少具体的なイメージでマッサージ機を事例にJupyterを用いた分析について解説してきました。何回か順に分けた説明になったため、Jupyter上での操作内容としては少々煩雑になっています。実際に作業を行う場面では繰り返し行うデータフレームの操作は関数として定義して呼び出して使った方がすっきりして良いと思います。

コメントを残す

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

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

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