特許のネットワーク分析(2).R

要約

・方針は大きく2つある
・隣接行列よりは個別の要素間対応で書いた方が筋は良さそう

前回

対応関係を作る、その方針

 点と点との間のつながりを表すネットワークグラフを描くためには、点と点がどのように繋がっているか、その対応関係を示すデータが必要だ。まずは作り方の方針を検討しよう。

 1つ目は隣接行列と呼ばれるもの。
 点はノード、つながりがエッジで、全ノードを縦横に並べた正方行列を作り、i行j列に1があればノードiとノードjが繋がっていると示すのが隣接行列だ。
 隣接行列を作るには、まず全ノードを洗い出す必要がある。そのうえで、繋がっているところにだけ1を入れてとなる。洗い出すだけなら、特に心配はない。stringr::の適切な関数を使ってマルチアンサーの出願人を分割し、wideな形式を作った上で、longな形式に変換してあげれば、1列にすべての出願が重複ありで並ぶ。
 ただしこれだけではノード間の対応関係、すなわち、ある出願人がどの別の出願人とマルチアンサーにされているかという情報が失われる。
 そう考えると、まずはマルチアンサーになっている=出願人が複数いる行/リスト要素ごとに考えてみるのがよさそうだ。
 そのうえで、行/リスト要素ごとにマルチアンサーを分解して出願人を洗い出して縦横に同じ軸を配した正方行列を作り、正方行列の対角成分だけがすべて0であとは1=自ノードそのものへのエッジは作らずに他ノードとの間にはエッジを作るようにするという風にして、最後にそれら正方行列をより大きなマトリクスの対角線上に並べていけば、重複は残るものの隣接行列を作るということは可能そうだ。

 一方で、正方行列を作るのではなくて、出願人すべての1対1組み合わせを作れば、もう一つの方法、つまりエッジの接続元と接続先で表現したn行2列の行列を作ることもできる。
 行/リスト要素ごとに作ったそれら子行列を、最終的には母集合全体についてかきあつめて一つに合体することを考えた時には、なんとなく後者のn行2列を作っていく方が筋が良さそうに思える。
 対応関係に重複があっても、エッジに特に重みづけをするのでなければ、とりあえず無視してもよさそうだし、エッジの数を重みとして利用したい場合なんかでも、group_by()して集計しなおしたらできるのかなどうなのかなと、比較的楽そうに処理できそうな気もする。

 そういうわけで、今回はn行2列の子行列を作って合体させていく方針を取ることにする。

予想される付随的検討

 出願人同士のつながりを調べたい一方で、多くの特許は出願人が1者しかいない、いわゆる単願だ。従って、処理中のあるタイミングで単願を省いて、単願でないもの(共願)に絞って子行列を作ってやる必要がある。
 他には、出願人が3者以上の場合には2者ずつのつながりを重複なく作る、すなわちnC2個の組み合わせを作る必要がある。
 当然、マルチアンサーをばらしたり、ネットワークグラフを作る関数を探す必要はあるのだけれど、こっちは目星はすでについている(separate(), igraph::)。
 とはいえ、正しく関数を使うためには入力すべき型(class)が正しくなければいけない。Rは様々なパッケージがあってシンプルに複雑な処理が行える一方で、入出力の型に気を配る必要がある。というか、それで散々失敗してきたのだった(笑)。

というわけで、今日はここまで。

いいなと思ったら応援しよう!