特許データのクロス集計について

# はじめに
前回は仮のデータでクロス集計をしてみましたが、今回は実際の特許データを使ってクロス集計をしてみたいと思います。
# データフレームの作成
以前テキストマイニングを行いました特許データを流用してデータフレームを作成しました。
```python
import pandas as pd
# googleドライブの利用
from google.colab import drive
drive.mount('/content/drive')
# データの前処理
# データの読み込み(google ドライブから)
df_drone_data_1 = pd.read_csv("/content/drive/MyDrive/pat_data_drone.20181231.csv", encoding = "shift-jis")
df_drone_data_2 = pd.read_csv("/content/drive/MyDrive/pat_data_drone.20190101.csv", encoding = "shift-jis")
# データフレームの結合（縦方向）
df_drone_data = pd.concat([df_drone_data_1, df_drone_data_2], ignore_index = True)
#必要な列のみ抽出
df_drone_data = df_drone_data[['出願人/権利者', 'FI']]
#不要語の削除（出願人/権利者）
df_drone_data['出願人/権利者'] = df_drone_data['出願人/権利者'].str.replace('▲', '')
df_drone_data['出願人/権利者'] = df_drone_data['出願人/権利者'].str.replace('▼', '')
# 欠落データを削除
df_drone_data = df_drone_data.dropna()
# データフレームの確認
print(df_drone_data)
```
データフレームは以下のようになりました。行数は960行となりました。
FIのセルには多数のFIが存在することがわかります。下記出力からはわかりませんが、出願人/権利者にも同様に複数の出願人/権利者が存在すると思われます。

```:出力
           出願人/権利者                                                 FI
0          ソニー株式会社  H04N5/247,G03B15/00@U,G03B37/00@C,H04N5/222,10...
1         日本電気株式会社                G06Q50/10,G06Q30/06,350,G06Q30/0645
2       ソフトバンク株式会社  H04Q9/00,301@B,B64C39/02,B64C13/20@Z,B64C13/18...
3    一般財団法人電力中央研究所            B61B7/00@A,B64D27/24,B64C39/02,H02G1/02
4           楽天株式会社                    B64C39/02,B64C27/08,B64D45/00@Z
..             ...                                                ...
955     株式会社ＮＴＴドコモ  B64F1/36,B64D45/00@A,B64D45/00@Z,B64D47/00,B64...
956     株式会社ＮＴＴドコモ  G06Q10/08,300,B65G61/00,540,B64C39/02,B64F1/36...
957       カン、ムン　シク  G06Q50/04,G06Q50/16,G06Q50/06,G06F17/50,612@A,...
958      本郷飛行機株式会社                 H04B7/15,H04Q9/00,301@B,H04N7/18@D
959      本郷飛行機株式会社  G05D1/10,B64C39/02,B64C13/18@Z,B64D45/04@A,G08...

[960 rows x 2 columns]
```
# エクスプロード処理
このデータフレームに対してエクスプロード処理をします。

```python
# 'FI' を分割
df_drone_data['FI'] = df_drone_data['FI'].str.split(',')
# '出願人/権利者'を分割
df_drone_data['出願人/権利者'] = df_drone_data['出願人/権利者'].str.split(',')
# エクスプロード
df_drone_data = df_drone_data.explode('FI').explode('出願人/権利者')
# インデックスのリセット
df_drone_data = df_drone_data.reset_index(drop=True)
# エクスプロード処理の確認
print(df_drone_data)
```
エクスプロード処理により、960行のデータが5573行と約6倍のデータとなりました。
FIのセルには１つのFIが存在し、出願人/権利者のセルには１つの出願人/権利者が存在しますので、うまくエクスプロード処理がされたと思います。
```:出力
        出願人/権利者             FI
0       ソニー株式会社      H04N5/247
1       ソニー株式会社    G03B15/00@U
2       ソニー株式会社    G03B37/00@C
3       ソニー株式会社  H04N5/222:100
4       ソニー株式会社  H04N5/232:030
...         ...            ...
5568  本郷飛行機株式会社       G05D1/10
5569  本郷飛行機株式会社      B64C39/02
5570  本郷飛行機株式会社    B64C13/18@Z
5571  本郷飛行機株式会社    B64D45/04@A
5572  本郷飛行機株式会社     G08G5/04@A

[5573 rows x 2 columns]
```
# クロス集計
それでは試しにクロス集計してみます。
```python
# クロス集計
result1 = pd.crosstab(df_drone_data['出願人/権利者'],df_drone_data['FI'])
print(result1)
```
553行 x 1609 列の巨大クロス集計表となりました。
これでは使い物になりませんので、次にtop10に限定したクロス集計表にしたいと思います。
```:出力
FI                        A01B39/18@Z  A01B69/00:303@L  A01B69/00@B  \
出願人/権利者                                                               
つくばテクノロジー株式会社                       0                0            0   
アイシン高丘株式会社                          0                0            0   
アイホン株式会社                            0                0            0   
アウトストア・テクノロジー・エーエス                  0                0            0   
アオイコンサルタント株式会社                      0                0            0   
...                               ...              ...          ...   
ＮＥＣソリューションイノベータ株式会社                 0                0            0   
ＮＥＸＴ　Ｌｏｇｉｓｔｉｃｓ　Ｊａｐａｎ株式会社            0                0            0   
ＳＳＨ株式会社                             0                0            0   
ＴＥＡＤ株式会社                            0                0            0   
Ｚｅｒｏ　Ｔｏ　Ｉｎｆｉｎｉｔｙ株式会社                0                0            0   

FI                        A01B79/00  A01C15/00@B  A01C15/00@C  A01C15/00@D  \
出願人/権利者                                                                      
つくばテクノロジー株式会社                     0            0            0            0   
アイシン高丘株式会社                        0            0            0            0   
アイホン株式会社                          0            0            0            0   
アウトストア・テクノロジー・エーエス                0            0            0            0   
アオイコンサルタント株式会社                    0            0            0            0   
...                             ...          ...          ...          ...   
ＮＥＣソリューションイノベータ株式会社               0            0            0            0   
ＮＥＸＴ　Ｌｏｇｉｓｔｉｃｓ　Ｊａｐａｎ株式会社          0            0            0            0   
ＳＳＨ株式会社                           0            0            0            0   
ＴＥＡＤ株式会社                          0            0            0            0   
Ｚｅｒｏ　Ｔｏ　Ｉｎｆｉｎｉｔｙ株式会社              0            0            0            0   

FI                        A01C15/00@F  A01C15/14  A01C23/00@C  ...  \
出願人/権利者                                                        ...   
つくばテクノロジー株式会社                       0          0            0  ...   
アイシン高丘株式会社                          0          0            0  ...   
アイホン株式会社                            0          0            0  ...   
アウトストア・テクノロジー・エーエス                  0          0            0  ...   
アオイコンサルタント株式会社                      0          0            0  ...   
...                               ...        ...          ...  ...   
ＮＥＣソリューションイノベータ株式会社                 0          0            0  ...   
ＮＥＸＴ　Ｌｏｇｉｓｔｉｃｓ　Ｊａｐａｎ株式会社            0          0            0  ...   
ＳＳＨ株式会社                             0          0            0  ...   
ＴＥＡＤ株式会社                            0          0            0  ...   
Ｚｅｒｏ　Ｔｏ　Ｉｎｆｉｎｉｔｙ株式会社                0          0            0  ...   

FI                        H05B37/02@C  H05B45/32  H05B47/155  H05B47/16  \
出願人/権利者                                                                   
つくばテクノロジー株式会社                       0          0           0          0   
アイシン高丘株式会社                          0          0           0          0   
アイホン株式会社                            0          0           0          0   
アウトストア・テクノロジー・エーエス                  0          0           0          0   
アオイコンサルタント株式会社                      0          0           0          0   
...                               ...        ...         ...        ...   
ＮＥＣソリューションイノベータ株式会社                 0          0           0          0   
ＮＥＸＴ　Ｌｏｇｉｓｔｉｃｓ　Ｊａｐａｎ株式会社            0          0           0          0   
ＳＳＨ株式会社                             0          0           0          0   
ＴＥＡＤ株式会社                            0          0           0          0   
Ｚｅｒｏ　Ｔｏ　Ｉｎｆｉｎｉｔｙ株式会社                0          0           0          0   

FI                        H05B47/19  H05K5/02@L  H05K5/03@A  H05K7/00@F  \
出願人/権利者                                                                   
つくばテクノロジー株式会社                     0           0           0           0   
アイシン高丘株式会社                        0           0           0           0   
アイホン株式会社                          0           0           0           0   
アウトストア・テクノロジー・エーエス                0           0           0           0   
アオイコンサルタント株式会社                    0           0           0           0   
...                             ...         ...         ...         ...   
ＮＥＣソリューションイノベータ株式会社               0           0           0           0   
ＮＥＸＴ　Ｌｏｇｉｓｔｉｃｓ　Ｊａｐａｎ株式会社          0           0           0           0   
ＳＳＨ株式会社                           0           0           0           0   
ＴＥＡＤ株式会社                          0           0           0           0   
Ｚｅｒｏ　Ｔｏ　Ｉｎｆｉｎｉｔｙ株式会社              0           0           0           0   

FI                        H05K7/20@B  H05K7/20@G  
出願人/権利者                                           
つくばテクノロジー株式会社                      0           0  
アイシン高丘株式会社                         0           0  
アイホン株式会社                           0           0  
アウトストア・テクノロジー・エーエス                 0           0  
アオイコンサルタント株式会社                     0           0  
...                              ...         ...  
ＮＥＣソリューションイノベータ株式会社                0           0  
ＮＥＸＴ　Ｌｏｇｉｓｔｉｃｓ　Ｊａｐａｎ株式会社           0           0  
ＳＳＨ株式会社                            0           0  
ＴＥＡＤ株式会社                           0           0  
Ｚｅｒｏ　Ｔｏ　Ｉｎｆｉｎｉｔｙ株式会社               0           0  

[553 rows x 1609 columns]
```
# top10に限定したクロス集計表の作成
出願人/権利者とFIのtop10に限定したクロス集計表を作成します。

```python
# FIのカウント
fi_counts = df_drone_data['FI'].value_counts()
# FIをtop10で並べ替え
top_fi = fi_counts.sort_values(ascending=False).index[:10].tolist()
# 出願人/権利者のカウント
person_counts = df_drone_data['出願人/権利者'].value_counts()
# 出願人/権利者をtop10で並べ替え
top_person = person_counts.sort_values(ascending=False).index[:10].tolist()
# top10の FIと出願人でクロス集計
result2 = pd.crosstab(df_drone_data[df_drone_data['出願人/権利者'].isin(top_person)]['出願人/権利者'], df_drone_data[df_drone_data['FI'].isin(top_fi)]['FI'])
print(result2)
# CSV出力
result2.to_csv('result2.csv', index=True, encoding='utf-8')
```
完成したクロス集計表は以下となります。なんとなくうまくいった気がします。
厳密な検証をしておりませんので、問題があるようでしたらコメントをください。

|出願人/権利者　　　　　　　　　　　　　　　|B64C13/18@Z|B64C13/20@Z|B64C27/08|B64C39/02|B64D27/24|B64D47/08|B64F1/12|B64F1/36|G05D1/10|G08G5/00@A|
|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|キヤノン株式会社|0|2|2|4|0|2|0|0|0|0|
|ソフトバンク株式会社|1|3|1|7|0|3|0|2|0|0|
|トヨタ自動車株式会社|0|0|3|6|1|0|1|2|0|3|
|パロット　ドローンズ|0|3|6|10|0|3|0|0|0|0|
|株式会社エアロネクスト|0|0|14|16|3|3|2|4|0|1|
|株式会社ナイルワークス|22|11|53|61|18|8|3|26|14|10|
|株式会社荏原製作所|0|0|9|11|7|0|0|0|0|0|
|株式会社ＤＲＯＮＥ　ｉＰＬＡＢ|0|0|14|15|3|3|0|3|0|1|
|株式会社ＮＴＴドコモ|2|6|0|23|1|2|0|11|9|10|
|西武建設株式会社|2|0|12|9|3|2|1|2|0|0|
# 感想
普通に作成するとクロス集計表は巨大となってしまいますので、予め分析する企業やFIを決めておき、それらに限定したクロス集計表を作成した方がよいと感じました。

また、そもそもクロス集計表を使って、どういう分析ができるのかという問題もありますが、とりあえず作り方をマスターしておけば、いつか役に立つかもしれません。