質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

957閲覧

データフレームからネットワークグラフを生成したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/01/24 09:45

日本のイベントをまとめたデータフレーム【df_event】があります。
df_event["協賛会社"]のデータを一つのイベントで複数ある会社をnetworkグラフにしたいと思っています。
(【イメージ画像】のようにどの会社同士の繋がりが強いかを可視化したいです。)

【df_event】
|イベント名|都道府県名|開催|協賛会社|
|:--|:--:|--:|
|〇〇祭り|北海道|1989|F社|A社、D社|G社|
|□□大会|北海道|1975|A社、B社、E社|B社|H社|
|・|・|・|・|・|
|△△パーティー|東京都|2013|G社、H社|C社、D社|B社、F社|
|●●祭|神奈川県|1982|D社|E社、F社、A社|G社|
|・|・|・|・|・|
|✖︎✖︎生誕祭|大阪府|1969|I社|G社、B社|A社|
|■■ディナーショー|大阪府|2004|A社、F社|C社|A社、C社、H社|
|・|・|・|・|・|・|
|▲▲イベント|沖縄|1997|B社、C社、D社、F社|A社|H社|

【イメージ画像】
イメージ説明
イメージ説明

networkxやgraphvizに初めて挑戦するのでヒントだけでもいただけたらと思います。
どなたかお力添えをよろしくお願いいたします。。
※【イメージ画像】が手書きで見にくく申し訳ありません。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「共起ネットワーク」と呼ばれるようなものが目的に近いのかなという感じがします。

シンプルに共起頻度を取ってやってみました。

python

1from itertools import combinations 2from collections import defaultdict 3 4import networkx as nx 5import matplotlib.pyplot as plt 6 7data = [["F"], 8 ["A", "B", "E"], 9 ["G", "H"], 10 ["D", "I"], 11 ["A", "F"], 12 ["B", "C", "D", "F"]] 13 14d = defaultdict(int) 15 16for x in data: 17 for pair in combinations(sorted(x), 2): 18 d[pair] += 1 19 20g = nx.Graph() 21g.add_nodes_from(sorted(set([y for x in data for y in x]))) 22 23for pair, coef in d.items(): 24 g.add_edge(pair[0], pair[1], weight=coef) 25 26plt.figure() 27pos = nx.spring_layout(g, k=0.3) 28nx.draw_networkx_nodes(g, pos, ) 29nx.draw_networkx_labels( 30 g, pos, fontsize=15, font_family='TakaoPGothic', font_weight='bold') 31 32edge_width = [d["weight"] for (u, v, d) in g.edges(data=True)] 33nx.draw_networkx_edges(g, pos, width=edge_width) 34 35plt.savefig("result.png") 36

イメージ説明

使う値が頻度で良いのか、Jaccardにするのか、はたまた他の類似度を使うのかは、分析の目的によると思います。


※私自身あまりnetworkxに慣れていないので(何回か使ったこと自体はあるんですが)、手っ取り早くコードを書くためにページを参考にしています。参考にしてください。

いるかのボックス: Pythonで共起ネットワークを作成する
Pythonを使って文章から共起ネットワークを作る - 見習いデータサイエンティストの隠れ家

投稿2020/01/25 10:42

編集2020/01/25 10:43
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/26 06:22

ありがとうございます! いただいたご回答とリンクを元に試行錯誤してみますm(_ _)m
guest

0

あくまで一例ですが、協賛会社をノードとするのであれば、おそらくイベント名が重要だと思います。そこで、イベントごとにダミー変数を生成して、ある企業がそのイベントに参加していたかどうかを1 or 0で生成したベクトルを作ります。これはpd.get_dummiesというpandasの機能を使えばできると思うので、よかったら試して見てください。

そして、各企業との間での相関係数を求めて、それを相関行列にしてネットワークで可視化すれば、一先ず希望のものが求まると思います。もし都道府県が重要なのであれば要素として追加しても良いと思いますし、そのあとの工夫のやり方は沢山あると思います。

一応、自分が初めてだった頃に使用したネットワーク分析のサイトをここにいくつか上げておくので、よかったら参考にして見てください。どうやって企業ごとの相関係数を抽出するかが論点で、ここが突破できればあとは可視化するだけだと思います。頑張ってください!

・ネットワーク分析の指標を個人的に一番数学を使わずに分かりやすくまとめてあります。
https://www.ajimatics.com/entry/2018/01/30/133238

・networkxの入門と実際の事例
https://qiita.com/tomov3/items/64f7315474747fc01a6c
https://www.dskomei.com/entry/2019/04/07/021028
https://datumstudio.jp/blog/networkx%E3%81%A7%E5%85%A8%E5%9B%BD%E5%90%8D%E5%AD%97%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F

投稿2020/01/24 13:03

bamboo-nova

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/25 08:13

ご回答ありがとうございます! いただいたヒントを元に試行錯誤してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問