🔖

【自然言語処理】【Python】共起ネットワークの作り方を理解する

2022/09/10に公開

はじめに

自然言語処理をはじめたら、一度は作ってみたいのが共起ネットワークではないかと思います。
私自身、共起ネットワークについては、書籍やネット記事を参考にしながら、これまで何度も作ってきました。
しかしながら、文章→共起行列→共起ネットワークとなる一連の過程において、特に共起行列を作成するコードの理解が十分ではないと思い至り、今回、勉強もかねて、共起行列の作成過程を残すことにしました。
共起ネットワークに興味を持たれている方の参考になればと思います。

共起ネットワーク

単語どおしのつながりを可視化してくれる手法で、文章の構造的な特徴を直感的に理解するのによく利用されます。
文書(text)を文章(sentence)に分割したのち、同一文章中に同時に出現する単語(word)の組みを数えあげることで共起行列を作成し、これをネットワークで可視化します。
ネットワークはノード(丸) と、ノードとノードを結ぶエッジ(線) で構成されます。
ノードの大きさは単語の単独での出現の多さ、エッジの太さは共起数の多さを示します。

 

形態素解析ライブラリーのMeCabと辞書NEologdのインストール

今回は形態素解析にMeCabを使います。辞書は優秀なNEologdを使います。

!apt-get -q -y install sudo file mecab libmecab-dev mecab-ipadic-utf8 git curl python-mecab > /dev/null
!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git > /dev/null 
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n > /dev/null 2>&1
!pip install mecab-python3 > /dev/null

# シンボリックリンクによるエラー回避
!ln -s /etc/mecabrc /usr/local/etc/mecabrc

 

stopwordの指定

共起ネットワークに用いない単語をstopwordとして指定します。
一般的なstopword1と、今回のタスク(有価証券報告書に記載されている経営方針)に合わせたstopword2をあわせて、リストにしています。

!wget http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/Filter/StopWord/word/Japanese.txt

#stopwordsの指定
with open("/content/Japanese.txt","r") as f:
    stopwords1 = f.read().split("\n")

stopwords2 =["以下","ため","当社","当行","場合","影響","可能性","経営",
            "業績","状況","グループ","こと","平成","年","月","期","当","他",
            "等","お","これ","a","b","c","%","以上","もの","株式会社",
            "経営方針","もの","とも","ある","よる","的","化","*"]
stopwords = list(set(stopwords1+stopwords2))

 

名詞のみを抽出するトークナイザー(関数)の作成

import re
def mecab_tokenizer(text):

    replaced_text = text.lower()
    replaced_text = re.sub(r'[【】]', ' ', replaced_text)       # 【】の除去
    replaced_text = re.sub(r'[()()]', ' ', replaced_text)     # ()の除去
    replaced_text = re.sub(r'[[]\[\]]', ' ', replaced_text)   # []の除去
    replaced_text = re.sub(r'[@@]\w+', '', replaced_text)  # メンションの除去
    replaced_text = re.sub(r'\d+\.*\d*', '', replaced_text) #数字を0にする

    path = "-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd"
    mecab = MeCab.Tagger(path)
    parsed_lines = mecab.parse(replaced_text).split("\n")[:-2]
    
    # #表層形を取得
    # surfaces = [l.split('\t')[0] for l in parsed_lines]
    #原形を取得
    token_list = [l.split("\t")[1].split(",")[6] for l in parsed_lines]
    #品詞を取得
    pos = [l.split('\t')[1].split(",")[0] for l in parsed_lines]
    # 名詞のみに絞り込み
    target_pos = ["名詞"]
    token_list = [t for t, p in zip(token_list, pos) if p in target_pos]
    
    # stopwordsの除去
    token_list = [t for t in token_list if t  not in stopwords]
    
    # ひらがなのみの単語を除く
    kana_re = re.compile("^[ぁ-ゖ]+$")
    token_list = [t for t in token_list if not kana_re.match(t)]
    
    return token_list

 

共起ネットワークにする文書の用意

三菱UFJ銀行が2022年3月期の有価証券報告書で記載している「経営方針、経営環境および対処すべき課題」を選びました。(長いです)

text="(1) 経営方針わが国は少子高齢化や人口減少等の課題を抱え、世界的にも低成長が常態化しつつあります。また、環境・社会課題への意識の高まりや、デジタル技術進展に伴う異業種の金融事業への新規参入の継続、足元では新型コロナウイルス感染症の影響や、インフレーション懸念等、当行を取り巻く経営環境は過去に例を見ない速さで大きく変化しています。MUFGグループは、この変化を正しく読み解いたうえでそれを飛躍のチャンスに変え、新しい時代において社会をリードする存在でありたいと考えています。2021年4月に「世界が進むチカラになる。」を存在意義(パーパス)として設定し、2021年度からの3年間を対象として中期経営計画では「企業変革」、「成長戦略」、「構造改革」を主要戦略の3本柱として掲げ、2021年度はこれら戦略をMUFGグループ一眼で推進し、成果を挙げることができました。2022年も、環境変化に応じたビジネスモデルを作り上げ、また、その結果として収益力向上及びROEの改善を実現することを通じて、お客さま・社員をはじめとする全てのステークホルダーの期待に応えてまいります。中期経営計画では、めざす姿として「金融とデジタルの力で未来を切り拓くNo.1ビジネスパートナー」を掲げています。そこには変化の激しい時代において、「全てのステークホルダーが次へ、前へ進むためのチカラになりたい」という思いを込めております。「デジタル」、「サステナビリティ経営」、「挑戦・スピード」をテーマに変革を進め、お客さまと社会の課題に徹底的に向き合い、課題解決に努めてまいります。これらの取組みを通じた経営方針のキーワードは三つ、「デジタルトランスフォーメーション」、「強靭性」、「エンゲージメント」です。一つ目は、「会社のあり方をデジタル化する」。実際にはリアルとのバランスではありますが、社会のデジタルシフトに対応するために、第一に掲げました。二つ目は、「事業としての強靭性の重視」です。今回の危機で、MUFGはどんな環境においても信頼され続ける存在でなければならないと、改めて考えさせられました。金融機関としての健全性を確保して、経営資源をMUFGグループの有する強みのある領域へと重点配置いたします。最後が、「エンゲージメント重視の経営」です。これは、大きな変化が会社ひいては社員一人ひとりに求められるなか、変革の方向性に対する共感性を大切にし、社員間や組織間、お客さまとの間、また社会とも共感できる、皆が参画意識を感じられる、魅力的な会社にしていきたいと考えるものです。(2) 経営環境当年度の金融経済環境でありますが、世界経済は、数次に及ぶ新型コロナウイルス感染症拡大の波に直面しつつも、ワクチンの普及等を受けた経済活動正常化の動きや各国政府の対策等を背景に、総じて回復を続けました。一方で、コロナ禍の行動制限が残るなかでの需要回復は、各種の供給制約を通じて、世界的なインフレ圧力の高まりをもたらしました。第4四半期に入ると、ロシア・ウクライナ情勢の急転に起因して主要先進国中心に厳しい対露経済制裁措置が導入され、ロシアの生産シェアが高い原油や天然ガス、小麦等の資源・穀物価格急騰や経済の先行き不透明感の高まりにより企業や家計のマインドが世界的に悪化しました。わが国では、新型コロナウイルス感染症拡大時に緊急事態宣言の発出やまん延防止等重点措置の適用といった感染対策が講じられ、経済活動正常化との両立が模索されました。金融情勢に目を転じますと、株価は、景気の回復基調等を背景に概ね高値圏で推移しましたが、期末にかけてはロシア・ウクライナ情勢を受け大きく値を下げる場面もみられました。金利については、景気回復やインフレ率の高まりを受け、米欧では金融政策正常化に向けた動きが明確化し、市中金利は上昇傾向で推移しました。わが国では日本銀行が大規模な金融緩和政策を維持しており、短期金利は低水準を続けましたが、米欧での金利上昇に連れ長期金利は期末にかけてやや上昇しました。ドル円相場は、日米金利差の拡大を背景に円が売られ易い展開が続き、年度末には一時1ドル125円台となるなど円安・ドル高の動きが大きく加速しました。(3) 対処すべき課題主たる戦略の柱として掲げている「企業変革」、「成長戦略」、「構造改革」をMUFGグループの各事業会社、事業本部、コーポレートセンターが一体で推進しています。「企業変革」では、会社のありようを変える、変革を進めていくという観点から、「デジタルトランスフォーメーション」、「環境・社会課題への貢献」に取り組むとともに、スピードと挑戦をキーワードに「カルチャー改革」を推進します。「成長戦略」では、収益力を強化すべく、「ウェルスマネジメント」、「経営課題解決型アプローチ」、「アジアビジネス」、「GCIB & Global Markets」、「グローバルAM(アセットマネジメント)/IS(インベスターサービス)」を推進します。「構造改革」では、強靭性の確保に向け、「経費・RWAコントロール」、「基盤・プラットフォーム改革」及び低採算事業の見直しや新規ビジネスへの挑戦といった「事業ポートフォリオ見直し」を推進します。なお、一部の施策では、足元の新型コロナウイルス感染症への対応の影響等により進捗に遅れが生じる可能性もございますが、今後影響については慎重に見極めてまいります。MUFGグループは、お客さま、社員等、ステークホルダーの安全確保を最優先とし、社会機能の維持に不可欠な金融インフラとして、事業者の資金繰り支援等の施策を通じ、お客さま・社員をはじめとする全てのステークホルダーの皆さまの期待に応えてまいります。(A)  企業変革① デジタルトランスフォーメーション(DX)あらゆるお客さまに対するデジタルサービス接点の強化、商品・サービスのデジタル化を推進します。デジタルを活用した業務量削減に取り組んでまいります。② 環境・社会課題への貢献「気候変動」、「少子・高齢化」、「インクルージョン&ダイバーシティ」を優先課題とし、事業戦略、リスク管理、社会貢献施策を展開します。③ カルチャー改革(スピード・挑戦する文化)存在意義(パーパス)起点での行動を促し、自由闊達な企業風土を醸成し、戦略のスピードアップや社員の自律的な挑戦を促進します。(B)  成長戦略④ ウェルスマネジメント総合的な資産運用を支援するためのインフラ整備や人材投入、法人オーナーへのソリューション提供を通じてビジネスを強化してまいります。⑤ 経営課題解決型アプローチ法人のお客さまの経営課題に向き合い、リスクテイク力を強化し、グループ一体で課題解決に取り組んでまいります。⑥ アジアビジネス連結子会社のアユタヤ銀行(タイ)、ダナモン銀行(インドネシア)を中心に、アジアを面で捉え成長を取込みつつ、デジタル化を推進します。⑦ GCIB & Global Markets機関投資家との取引拡大を通じ、資産回転・フロービジネス(O&D/OtoD※、クロスセル)を強化してまいります。※Origination & Distribution/Origination to Distributionの略称ファイナンスを組成し、投資家に販売する業務施策。「O&D」は当該業務施策全般を指す総称であるのに対し、特に、投資家ニーズを起点に案件を組成する取り組みを「OtoD」という。⑧ グローバルAM/IS業界成長が望める海外資産運用・管理領域において、MUFGグループの強みを活かした受託ビジネスを推進します。(C)  構造改革⑨ 経費・RWAコントロール成長に必要な投資は行いつつ、ベース経費の削減を徹底します。RWAは、高採算案件への張り返しにより、コントロールします。⑩ 基盤・プラットフォーム改革デジタルシフトに必要な投資を効率的・効果的に実施します。改革に必要な手続・ルールの簡素化、意思決定プロセスの見直しに取り組んでまいります。⑪ 事業ポートフォリオ見直し低採算事業の見直しによりROE向上に取り組んでまいります。異業種を含めた他社との連携により事業力を強化します。(4) 目標とする経営指標当行の親会社である三菱UFJフィナンシャル・グループの本中期経営計画では、中期経営計画の最終年度である2023年度の財務目標の水準を以下の通り設定しております(2021年5月公表)。〔ROE目標・資本運営のターゲット〕〔ROE目標達成に向けての3つのドライバー〕*1 バーゼルⅢ規制見直しの最終化によるリスク・アセット増加影響を反映させた試算値。その他有価証券評価差額金を除く*2 親会社株主に帰属する当期純利益*3 中長期の経費率目標(60%程度)は不変(5) 人材戦略① 基本方針MUFG Wayのもと、人事マネジメントの基本的な考え方を示した「MUFG人事プリンシプル」に基づき、「信頼・信用」「プロフェッショナリズムとチームワーク」「成長と挑戦」を共有すべき価値観として、グループ各社が人事運営方針を立案、遂行しています。② 社員の挑戦を促すカルチャー改革MUFGグループでは、今中期経営計画を「変革と挑戦」の3年間と位置づけ、カルチャー改革を進めています。人材戦略においても、グループ内外で多様な経験に挑戦することができるキャリアチャレンジ制度の提供を通じて、社員の「成長と挑戦」を強く後押ししています。③ 価値創造を担う人材の育成・確保MUFGグループの持続的成長に向けて、さまざまな領域で活躍するプロフェッショナル人材を確保すべく、グループ各社で、各種研修・OJT等を実施しています。また、新事業への進出・展開等にあたっては、新たな分野の専門性を有する、即戦力となる人材が必要になることから、外部人材の積極的な採用も進めています。④ インクルージョン&ダイバーシティMUFGグループは、サステナビリティ経営の優先10課題の一つに「インクルージョン&ダイバーシティ」を掲げ、多様な価値観やバックグラウンド、就業意識を持つ社員が互いに尊重・切磋琢磨し、一人ひとりが成長・活躍できる組織・カルチャーの醸成に取り組んでいます。経営トップのコミットメントのもと、2024年3月末の国内の女性マネジメント(課長以上のラインマネジメント)比率を20%にするとの目標を設定しています(2022年度に同目標値を18%から20%に引き上げ)。⑤ 働き方改革及び健康経営の推進MUFGグループは、社員が持てる力を最大限発揮するために、サステナビリティ経営の優先10課題の一つに「働き方改革の推進」を掲げ、リモートワークやペーパレス化等のインフラ整備を進めるなど、社員の自由で柔軟な働き方を後押ししています。また、社員の人権の尊重や、明るく働きやすい職場環境づくりの一環として、心身の健康促進に取り組んでいます。(6) 気候変動への取り組みMUFGグループでは、持続可能な社会の実現に貢献するため、優先的に取り組む環境・社会課題の一つに「気候変動対応・環境保全」を掲げています。MUFGは、PCAF(Partnership for Carbon Accounting Financials)、NZBA(Net Zero Banking Alliance)及びGFANZ(Glasgow Financial Alliance for Net Zero)をはじめとする、気候変動に対処するためのさまざまなイニシアティブに参画しています。また、金融安定理事会(FSB)によって設立された、気候関連財務情報開示タスクフォース(Task Force on Climate-related Financial Disclosures:TCFD)の提言を支持しています。① ガバナンス気候変動に関する課題は、取締役会の監督のもと、経営会議がその傘下に様々な委員会を設置して管理しています。サステナビリティ委員会は、経営会議傘下の委員会で、Chief Sustainability Officerが委員長を務めています。同委員会では気候変動のリスクや機会を含めた気候変動に関する課題への取り組み方針を定期的に審議するとともに、MUFGグループの取り組みの進捗状況をモニタリングしています。サステナビリティ委員会は、経営会議へ報告を行い、必要に応じて取締役会へも報告を行っています。MUFGグループでは、気候変動に関するリスクをトップリスクと位置づけており、経営会議傘下の委員会である投融資委員会、与信委員会、リスク管理委員会において、それぞれの専門性を踏まえた検討を行っています。これらの各委員会は、経営会議へ報告を行っています。また、投融資委員会、リスク管理委員会は、取締役会傘下委員会であるリスク委員会に報告を行い、グループ全体のリスク管理に関する事項及びトップリスクに関する事項について審議・報告を行っています。業務執行の意思決定機関として経営会議を設置し、取締役会の決定した基本方針に基づき、経営に関する全般的重要事項を協議決定しております。取締役会は、事業戦略、リスク管理、財務監視に沿って、気候変動に関する事項の管理を監督します。監督は、PDCAサイクルに基づいて行われます。取締役会は、気候変動に関連する事項を最優先事項と位置づけ、年次計画に基づき定期的に、又は必要に応じて、議論・審議を行っています。ガバナンス体制の詳細については、「第4 提出会社の状況 4 コーポレート・ガバナンスの状況等」を参照してください。② 戦略MUFGグループは、地球温暖化問題に取り組むグローバル金融機関としての責任を認識し、お客さまに提供する商品・サービスや、事業活動に伴う環境負荷を低減するための施策を通じて、脱炭素社会への移行に向けた取り組みを支援していきます。MUFGグループは、金融機関として、気候変動関連のリスクを二つのカテゴリーに分類し、取り組みを進めています。一つは、異常な暴風雨や洪水などの悪天候事象の深刻化や頻度の増加、気温や海面水位の上昇、降水量や降水分布の変化などの気候パターンの長期的な変化などによる物理的損害から生じるリスクであり、「物理的リスク」と分類される。もう一つは、脱炭素社会への移行に関連して生じるリスクであり、規制、市場の選好、技術の変化などから生じるリスクであり、「移行リスク」と分類されます。MUFGグループは、お客さまの目標達成を支援し、脱炭素社会への移行に貢献するための、持続可能な金融ソリューションを提供する能力を高めるべく、気候変動に対応した商品・サービスの拡充に努めています。例えば、再生可能エネルギー事業や、プラスの環境影響が見込まれるスタートアップ企業などへの融資に取り組んでいます。③ リスク管理現在、気候変動に関するリスク管理は、上述のガバナンス体制のもと、グループ全体の視点から、気候変動に関するリスクとその潜在的なポートフォリオ、事業、財務への影響をより的確に把握、測定、低減することを目的として、リスク管理枠組みの中に統合されています。MUFGグループのリスク管理フレームワークは、物理的リスクと移行リスクに対処することを意図しています。また、ファイナンス※において、環境・社会に係るリスクを管理する枠組みとして、「MUFG環境・社会ポリシーフレームワーク」を制定しています。石炭火力発電や鉱業(石炭)、石油・ガス等、気候変動を含む環境・社会への影響が懸念される特定のセクターについては、ファイナンスにおけるポリシーを定めるとともに、ファイナンスの対象となる事業の環境・社会に対するリスク又は影響を特定し、評価するためのデューデリジェンスのプロセスを導入しています。※ MUFGの主要子会社である銀行、信託及び三菱UFJ証券ホールディングスの法人のお客さま向けの与信及び債券・株式引受を指します。気候変動関連のリスクについては、「第2 事業の状況 2 事業等のリスク」を、リスク管理フレームワークについては、「第4 提出会社の状況 4 コーポレート・ガバナンスの状況等」を参照してください。④ 指標と目標2021年5月、MUFGグループは、2050年末までに投融資ポートフォリオの温室効果ガス排出量をネットゼロに、2030年末までにMUFGグループの温室効果ガスの純排出量をゼロにするという目標を発表しました。これらの目標は、パリ協定の合意事項を支持するとともに、MUFGグループにとって気候変動に関連するリスクと機会を最優先課題として認識していることを示しています。"

 

共起行列の作成

テキストから共起行列を作成する一連のプログラムは以下の通りです。
後ほど詳しく見ていきたいと思います。

import itertools
sentences = [mecab_tokenizer(sentence) for sentence in text.split("。")]
sentences_combs = [list(itertools.combinations(sentence,2)) for sentence in sentences]
words_combs = [[tuple(sorted(words)) for words in sentence] for sentence in sentences_combs]
target_combs = []
for words_comb in words_combs:
    target_combs.extend(words_comb)
 
import collections
ct = collections.Counter(target_combs)

import pandas as pd
df = pd.DataFrame([{"1番目" : i[0][0], "2番目": i[0][1], "count":i[1]} for i in ct.most_common()])
df.head(20)

共起行列のアウトプット

 

共起行列の作成過程

1. 名詞だけを要素とするリストの作成(文章単位)

テキストデータを"。"で区切って、ひとつひとつ文章を取り出し、名詞のみを抽出する形態素解析を行う。
できあがるのは、名詞だけを要素とする文章単位のリスト。

import itertools
sentences = [mecab_tokenizer(sentence) for sentence in text.split("。")]
sentences[0]

0番目の出力結果

['わが国', '少子高齢化', '人口減少', '課題', '世界的', '成長', '常態']

2. 文章単位で名詞のコンビ(共起)を作る

1.の文章単位の中で、単語のコンビ(共起)を作る。

sentences_combs = [list(itertools.combinations(sentence,2)) for sentence in sentences]
sentences_combs[0]

0番目の出力結果

0番目の文章の中で、単語のコンビができています。

[('わが国', '少子高齢化'),
 ('わが国', '人口減少'),
 ('わが国', '課題'),
 ('わが国', '世界的'),
 ('わが国', '成長'),
 ('わが国', '常態'),
 ('少子高齢化', '人口減少'),
 ('少子高齢化', '課題'),
 ('少子高齢化', '世界的'),
 ('少子高齢化', '成長'),
 ('少子高齢化', '常態'),
 ('人口減少', '課題'),
 ('人口減少', '世界的'),
 ('人口減少', '成長'),
 ('人口減少', '常態'),
 ('課題', '世界的'),
 ('課題', '成長'),
 ('課題', '常態'),
 ('世界的', '成長'),
 ('世界的', '常態'),
 ('成長', '常態')]

3. 単語の並びをソートする

(A,B)と (B,A)の並びを、(A,B)に統一させます。これにより、同じ単語のコンビなのに、別々にカウントしないようにします。

words_combs = [[tuple(sorted(words)) for words in sentence] for sentence in sentences_combs]
words_combs[0]

0番目の出力結果

[('わが国', '少子高齢化'),
 ('わが国', '人口減少'),
 ('わが国', '課題'),
 ('わが国', '世界的'),
 ('わが国', '成長'),
 ('わが国', '常態'),
 ('人口減少', '少子高齢化'),
 ('少子高齢化', '課題'),
 ('世界的', '少子高齢化'),
 ('少子高齢化', '成長'),
 ('少子高齢化', '常態'),
 ('人口減少', '課題'),
 ('世界的', '人口減少'),
 ('人口減少', '成長'),
 ('人口減少', '常態'),
 ('世界的', '課題'),
 ('成長', '課題'),
 ('常態', '課題'),
 ('世界的', '成長'),
 ('世界的', '常態'),
 ('常態', '成長')]

4. 単語のコンビを一つのリストにします。

単語のコンビについて、これまでは文章単位で分けていましたが、ここで、一つのリストに集約します。

target_combs = []
for words_comb in words_combs:
    target_combs.extend(words_comb)
target_combs[:10]

10番目までの出力結果

[('わが国', '少子高齢化'),
 ('わが国', '人口減少'),
 ('わが国', '課題'),
 ('わが国', '世界的'),
 ('わが国', '成長'),
 ('わが国', '常態'),
 ('人口減少', '少子高齢化'),
 ('少子高齢化', '課題'),
 ('世界的', '少子高齢化'),
 ('少子高齢化', '成長')]

5. 単語のコンビの数を数える

リストに格納されている単語のコンビの数をカウントします。

import collections
ct = collections.Counter(target_combs)
ct.most_common()[:10]

カウント数が多い単語のコンビ上位10位

これが共起行列となります。

[(('リスク', '委員会'), 17),
 (('環境', '社会'), 13),
 (('委員会', '委員会'), 13),
 (('リスク', 'リスク管理'), 13),
 (('リスク管理', '委員会'), 12),
 (('リスク', '気候変動'), 11),
 (('報告', '委員会'), 11),
 (('リスク管理', '気候変動'), 10),
 (('傘下', '委員会'), 10),
 (('挑戦', '改革'), 8)]

 

共起ネットワークの作成

共起行列をもとに共起ネットワークを作成していきます。
共起ネットワークを描画するのに、ここではPyvisを使いたいと思います。

1. ライブラリーのインストール

!pip install pyvis==0.2.1

2. ネットワークの定義

def kyoki_word_network(df):
    from pyvis.network import Network
    import pandas as pd

    
    got_net = Network(height="1000px", width="95%", bgcolor="#FFFFFF", font_color="black", notebook=True)

    got_net.force_atlas_2based()
    got_data = df[:150]

    sources = got_data['1番目']#count
    targets = got_data['2番目']#first
    weights = got_data['count']#second

    edge_data = zip(sources, targets, weights)

    for e in edge_data:
        src = e[0]
        dst = e[1]
        w = e[2]

        got_net.add_node(src, src, title=src)
        got_net.add_node(dst, dst, title=dst)
        got_net.add_edge(src, dst, value=w)

    neighbor_map = got_net.get_adj_list()

    for node in got_net.nodes:
        node["title"] += " Neighbors:<br>" + "<br>".join(neighbor_map[node["id"]])
        node["value"] = len(neighbor_map[node["id"]])

    got_net.show_buttons(filter_=['physics'])
    return got_net

3. 実行

got_net = kyoki_word_network(df)
got_net.show("kyoki.html")

4. 描画

googleコラボで描画するためには以下のコードが必要となります。

from IPython.display import HTML
HTML("/content/kyoki.html")

5. 共起ネットワーク

ネットワークとしては美しくないですが、単語の共起関係がよくわかるネットワークだと思います。

 

さいごに

いかがでしたでしょうか。
今回のブログ作成を通じて、私自身、共起ネットワーク生成に対する理解が深まりました。
次回以降では、共起の単純な出現頻度ではなく、jacard係数やコサイン類似度を考慮したネットワークを作っていきたいと思います。

Discussion