Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データマイニング - グラフデータと経路
Search
Y. Yamamoto
PRO
June 13, 2025
Science
1
120
データマイニング - グラフデータと経路
1. グラフとは
2. 経路
Y. Yamamoto
PRO
June 13, 2025
Tweet
Share
More Decks by Y. Yamamoto
See All by Y. Yamamoto
データベース10: 拡張実体関連モデル
trycycle
PRO
0
670
データマイニング - グラフ構造の諸指標
trycycle
PRO
0
60
データベース09: 実体関連モデル上の一貫性制約
trycycle
PRO
0
680
2021年度-基盤研究B-研究計画調書
trycycle
PRO
0
30
機械学習 - ニューラルネットワーク入門
trycycle
PRO
0
770
データベース08: 実体関連モデルとは?
trycycle
PRO
0
660
機械学習 - SVM
trycycle
PRO
1
810
機械学習 - K近傍法 & 機械学習のお作法
trycycle
PRO
0
1.1k
データベース06: SQL (3/3) 副問い合わせ
trycycle
PRO
1
540
Other Decks in Science
See All in Science
創薬における機械学習技術について
kanojikajino
16
5.3k
オンプレミス環境にKubernetesを構築する
koukimiura
0
250
白金鉱業Meetup Vol.16_【初学者向け発表】 数理最適化のはじめの一歩 〜身近な問題で学ぶ最適化の面白さ〜
brainpadpr
11
2.2k
統計学入門講座 第1回スライド
techmathproject
0
330
Valuable Lessons Learned on Kaggle’s ARC AGI LLM Challenge (PyDataGlobal 2024)
ianozsvald
0
390
安心・効率的な医療現場の実現へ ~オンプレAI & ノーコードワークフローで進める業務改革~
siyoo
0
230
深層学習を用いた根菜類の個数カウントによる収量推定法の開発
kentaitakura
0
150
局所保存性・相似変換対称性を満たす機械学習モデルによる数値流体力学
yellowshippo
1
270
テンソル分解による糖尿病の組織特異的遺伝子発現の統合解析を用いた関連疾患の予測
tagtag
2
180
Collective Predictive Coding Hypothesis and Beyond (@Japanese Association for Philosophy of Science, 26th October 2024)
tanichu
0
130
動的トリートメント・レジームを推定するDynTxRegimeパッケージ
saltcooky12
0
110
Ignite の1年間の軌跡
ktombow
0
130
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Six Lessons from altMBA
skipperchong
28
3.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
4 Signs Your Business is Dying
shpigford
184
22k
Visualization
eitanlees
146
16k
Practical Orchestrator
shlominoach
188
11k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Transcript
グラフデータ ⼭本 祐輔 名古屋市⽴⼤学 データサイエンス研究科
[email protected]
第9回 データマイニング (グラフ分析入門) ⼭本祐輔
クリエイティブコモンズライセンス (CC BY-NC-SA 4.0)
クエスチョン Q. 「グラフ」と聞いて 思い浮かべるものは?
グラフと⾔えば グラフ グラフ チャート データ構造 CS/DSに学んだ人で「右」のグラフが頭によぎらないのはマズい…
「データ構造」としてのグラフ § “点”と “ つながり”によって表されるデータ § 事物間の関係性を抽象化する強⼒なデータ構造 § “ネットワーク”と呼ぶことも
グラフデータの例(1/5)- ウェブページのリンク
グラフデータの例(1/5)- ウェブページのリンク
グラフデータの例(2/5)- ⼈物関係 画像出典: https://ebookjapan.yahoo.co.jp/content/author/243/ Aさん Bさん Cさん Dさん Eさん 友⼈関係
グラフデータの例(2/5)- ⼈物関係 画像出典: https://ebookjapan.yahoo.co.jp/content/author/243/ Aさん Bさん Cさん Dさん Eさん M
F O A L D 対⽴ 恋 恋 恋 友 婚姻 C A B E D
グラフデータの例(3/5) - 路線図 画像出典: https://www.kotsu.city.nagoya.jp/jp/pc/subway/routemap.html
グラフデータの例(4/5) - 購買・出版 ユーザA ユーザB い ろ は に ほ
出版社X 出版社Y 出版社Z 出版 出版 出版 購⼊ 購⼊ 購⼊
グラフデータの例(5/5) 画像出典2: https://www.researchgate.net/ 画像出典1: https://commons.wikimedia.org/ 分⼦構造 化学反応
関係性を表すデータはグラフとして抽象化できる ウェブ構造 分⼦構造・化学反応 経路情報 購買・製造情報 グラフ化 グラフ化 抽象化の目を養えば,グラフデータは身近にあることが分かる!!
グラフデータに抽象化するとできること グラフの中での点の重要度を評価できる グラフ中の特徴的なグループを発見できる グラフ中の点同士の関係性を評価・予測できる グラフの構造を定量的に分析できる 橋渡し役の点,多くの点と繋がっている点の発⾒etc. コミュニティの発⾒,分極している点群の発⾒etc. 点同⼠をつなぐ最短経路の発⾒,点と点がつながる可能性の予測etc. グラフ全体の特徴の評価,頻出する関係(つながり)の発⾒etc.
グラフの定義 1 Definition of Graph
グラフ § 事物間の関係性を抽象化する強⼒なデータ構造 § “点”と “ つながり”によって表されるデータ ノード エッジ
グラフの数学的定義 グラフを構成する要素 ノード (頂点; vertex) ノード間の連結関係 エッジ (枝; edge) グラフ(graph)
ノードの集合とエッジの集合から構成されるデータ 2 3 4 1 5 6
グラフの数学的定義 グラフを構成する要素 ノード (頂点; vertex) ノード間の連結関係 エッジ (枝; edge) グラフ(graph)
ノードの集合とエッジの集合から構成されるデータ 2 3 4 1 5 6
グラフの数学的定義 グラフを構成する要素 ノード (頂点; vertex) ノード間の連結関係 エッジ (枝; edge) グラフ(graph)
ノードの集合とエッジの集合から構成されるデータ 2 3 4 1 5 6
グラフの数学的な定義の例 G = (V, E) V = {1, 2, 3,
4, 5, 6} E = {(1, 2), (2, 3), (4, 3), (3, 5), (4, 6), (5, 6)} ノード集合→ エッジ集合→ 2 3 4 1 5 6
有向グラフと無向グラフ 2 3 4 1 5 6 有向グラフ エッジに⽅向性がある 2
3 4 1 5 6 無向グラフ エッジに⽅向性がない (双⽅向に関係があるとも⾔える)
重み付きグラフ 名古屋 京都 ⼤阪 ⾦沢 東京 40分 90分 150分 100分
25分 グラフはエッジに重みを設定することが可能 例: 移動コスト, 関係の強さ 本講義では断りがない限り,枝の重みは考えない
NetworkX グラフの処理のためのPythonライブラリ NetworkX ⾏列計算の 効率化 汎⽤機械学習 汎⽤機械学習 グラフ深層学習
例題1 以下の有向グラフをNetworkXで定義してみよう 2 4 3 1 0
グラフの定義 on NetworkX import networkx as nx コード中で頻繁にnetworkxライブラリを参照 するので,短い名前でアクセスできるように 略称を付けておく
2 4 3 1 0
グラフの定義 on NetworkX import networkx as nx V = [0,
1, 2, 3, 4] E = [ (0, 1), (1, 0), (1, 2), (2, 4), (3, 1), (4, 2), (4, 3)] ← ノードの定義 ← エッジの定義 2 4 3 1 0
グラフの定義 on NetworkX import networkx as nx V = [0,
1, 2, 3, 4] E = [ (0, 1), (1, 0), (1, 2), (2, 4), (3, 1), (4, 2), (4, 3)] G = nx.DiGraph() G.add_nodes_from(V) G.add_edges_from(E) ← 空の有向グラフを⽤意 ← ノード, エッジの追加 2 4 3 1 0
グラフの定義 on NetworkX import networkx as nx V = [0,
1, 2, 3, 4] E = [ (0, 1), (1, 0), (1, 2), (2, 4), (3, 1), (4, 2), (4, 3)] G = nx.DiGraph() G.add_nodes_from(V) G.add_edges_from(E) nx.draw(G) ← グラフの可視化 2 4 3 1 0
例題2 以下の無向グラフをNetworkXで定義してみよう 2 4 3 1 0
無向グラフの定義 on NetworkX import networkx as nx V = [0,
1, 2, 3, 4] E = [ (0, 1), (1, 0), (1, 2), (2, 4), (3, 1), (4, 2), (4, 3)] G = nx.Graph() G.add_nodes_from(V) G.add_edges_from(E) nx.draw(G) 2 4 3 1 0 ← 無向グラフはDiGraphではなくGraph
ノード,エッジの確認 on NetworkX V = G.nodes() 2 4 3 1
0 ← グラフGのノード集合にアクセス E = G.edges() ← グラフGのノード集合にアクセス for e in E: print(e) ← エッジ集合をひとつずつ確認
隣接⾏列 (Adjacency Matrix ) (1/4) § グラフにおけるノードの接続関係を⽰す⾏列 § N個のノードを持つグラフの隣接⾏列のサイズは(N, N)
隣接⾏列は正⽅⾏列!! 2 4 3 1 0 𝐴 = 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0
隣接⾏列 (Adjacency Matrix ) (2/4) 2 4 3 1 0
𝐴 = 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 重みなしグラフの場合 隣接⾏列のa⾏b列の要素が1 → a番⽬のノードからb番⽬の要素へのエッジが存在する 隣接⾏列のa⾏b列の要素が0 → a番⽬のノードからb番⽬の要素へのエッジが存在しない 0⾏⽬ 1列⽬ ノード0から ノード1へのエッジが存在
隣接⾏列 (Adjacency Matrix ) (3/4) 2 4 3 1 0
𝐴 = 0 1 0 0 0 1 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 重みなしグラフの場合 隣接⾏列のa⾏b列の要素が1 → a番⽬のノードからb番⽬の要素へのエッジが存在する 隣接⾏列のa⾏b列の要素が0 → a番⽬のノードからb番⽬の要素へのエッジが存在しない 無向グラフの場合,隣接行列は対称行列になる
隣接⾏列 (Adjacency Matrix ) (4/4) 𝐴 = 0 1 0
0 0 1 0 3 0 0 0 0 0 0 0.5 0 8 0 0 0 0 0 2 0.5 0 重み付きグラフの場合 a番⽬のノードからb番⽬の要素へのエッジが存在する場合 → 隣接⾏列のa⾏b列の要素の値は重みの値 a番⽬のノードからb番⽬の要素へのエッジが存在しない場合 → 隣接⾏列のa⾏b列の要素の値はゼロ 2 4 3 1 0 1 3 0.5 0.5 2 8
隣接⾏列の取得 on NetworkX 2 4 3 1 0 import networkx
as nx V = [0, 1, 2, 3, 4] E = [ (0, 1), (1, 2), (2, 4), (3, 1), (4, 3)] G = nx.Graph() G.add_nodes_from(V) G.add_edges_from(E) A = nx.adjacency_matrix(G).toarray() NumPy形式に変換 neighbors_from_1 = list(G.neighbors(1)) ノード1の隣接ノード
Hands-on タイム 以下のURLにアクセスして, 第9回のクイズQ1を解いてみよう https://graphnote.hontolab.org/ 36
経路 2 Path
経路 2 4 3 1 0 § グラフ上のエッジをたどって,あるノードから 別ノードに移動する際に通るノードの系列 §
ノード間の経路が複数ある場合もある ノード4からノード2への経路 (4, 2) (4, 3, 1, 2) …
到達可能性 ノード nx からノード ny への経路が存在するとき nx から ny へ到達可能という
ノード0からノード3へは 到達可能 ノード3からノード0へは 到達不可能 2 4 3 1 0
隣接⾏列と到達可能性(1/4) 2 4 3 1 0 𝐴 = 0 1
0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 重みなし行列の場合,隣接行列のべき乗を 計算することで到達可能性を調べられる
隣接⾏列と到達可能性(2/4) 2 4 3 1 0 𝐴2 = 0 1
0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 ノード0が接続しているノード ノード2に 接続しているノード
隣接⾏列と到達可能性(3/4) 2 4 3 1 0 𝐴2 = 0 0
1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 ノード0から2ホップで 到達できるノード
隣接⾏列と到達可能性(4/4) 2 4 3 1 0 𝐴3 = 0 0
0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 2 1 0 ノード4から3ホップで 到達できるノード ノード4からノード2へは 経路が2つあることを意味
Hands-on タイム 以下のURLにアクセスして, 第9回のクイズQ2を解いてみよう https://graphnote.hontolab.org/ 44
距離 ノード nx からノード ny への最短経路の長さ (or エッジの重み合計)を距離と呼ぶ 2 4
3 1 0 ノード4からノード2へは 最短経路は(4, 2) ノード4からノード2への 距離は1
距離⾏列 グラフに属する全ノード間の距離を表記した行列 2 4 3 1 0 𝐷 = 0
1 2 4 3 ∞ 0 1 3 2 ∞ 3 0 2 1 ∞ 1 2 0 3 ∞ 2 1 1 0 たどり着けない ノードの距離は∞ ノード1から ノード3への距離は3
[参考] 最短経路発⾒や距離計算のための効率的なアルゴリム 幅優先探索 重みなしグラフ限定で効率的 ダイクストラ法 指定したノードから他の全ノードへの最短経路を⾼速に探索 ワーシャルフロイド法 グラフに属する全ノード間の最短経路を⾼速に探索 行列のべき乗計算はグラフが大きくなるとコストが大きい…
最短経路アルゴリズム on NetworkX shortest_paths = dict( nx.single_source_all_shortest_paths(G, 3) ) all_shortest_paths
= dict( nx.all_pairs_shortest_paths(G) ) D = nx.floyd_warshall_numpy(G) # ワーシャルフロイド法で距離⾏列を計算 # ダイクストラ法で全ノード間の最短経路を取得 # ダイクストラ法でノード3から他ノードへの最短経路を取得
Hands-on タイム 以下のURLにアクセスして, 第9回のクイズQ3を解いてみよう https://graphnote.hontolab.org/ 49
回 実施日 トピック 9 06/13 グラフデータ 10 06/20 グラフ構造の諸指標 11
06/27 ノードの中心性 12 07/04 コミュニティ発見 13 07/11 ウェブグラフ 14 07/18 グラフ埋め込み 15 07/25 総合演習 – 社会ネットワーク分析 授業計画 50