スマートフォン用の表示で見るさんごー日記。映画や本やゲームの感想をゆるく記録したり、プログラミングの勉強をゆるく記録するゆるい日記です。プログラミングシェアするBookmark!FacebookTwitterGoogle+PocketRのigraphというライブラリの使い方について、日本語の資料が少ないような気がするので調べた事をメモしておく。機械学習」のソーシャルグラフ解析の章で出てきたのだけど、subgraphという関数がマトモに動いてくれなくて困った。基本的な使い方やライブラリで使っているデータの構造についても理解を深めていきたい。↓igraphパッケージの公式らしきサイト。homeigraphはネットワーク解析を効率的に行うためのツールの集まり。R、python、Cのパッケージが作られているようです。igraphの関数リストigraphにはたくさんのライブラリ関数が含まれている。以下のページで一覧を見れます。800個以上あるみたいです。pagesこれだけあったら自分が知りたい関数についての記事が都合よく見つからないわけだ。igraphの利用者も少ないだろうし。基本的な所を一つずつ見ていくとしよう。igraphクラスigraphはigraphクラスという特殊なクラスを持っています。igraphパッケージに含まれる関数を使って様々な形のソーシャルグラフを作る事ができるようです。「make_〇〇」という名前の関数で作れます。全部試してないけど以下のものがigraph形式のグラフを作る関数のようです。graphいくつか試してみます。make_ring()make_ring()とかは分かりやすいですね。輪っかに繋がった形のグラフを生成します。plot(g)make_star()星型のグラフを作ります。mode引数にin、outを指定すると有向グラフになります。modeに"undirected"を指定すると無向グラフになります。plot(g)make_tree()ツリー型のグラフを作ります。枝分かれするノードの数を指定するようです。plot(g)他にもいろいろありますが、とりあえずこんな感じ。igraphのグラフの確認方法いろいろグラフ情報の表示グラフを格納した変数名を打ち込むと、グラフの情報がサマリーで表示されます。5->10このフォーマットのルールを知らないと読めないので、ルールを簡単にメモしておきます。1行目の以下の部分を分解して見ていきます。igraphである事を表す。グラフの種類を表す4つ文字。1つめは無向グラフ「U」、または有向グラフは「D」を示す。2つ目は頂点に名前がついているかどうかで、名前付きなら「N」、そうでなければ「-」。3つ目は重みエッジ属性が設定されているかどうかで、重み付けされていれば「W」、そうでなければ「-」。4つ目は2部グラフかどうかで、2部グラフなら「B」、そうでなければ「-」となります。グラフの頂点の数と、辺の数。グラフの名前があれば表示される。グラフの形式を表す文字。以下のページを参考にしました。pages次に2行目の以下の部分を分けて見ていきます。オプションの属性を表示しますよ。いうような意味だと思う。name属性の種類と型を表している。gはグラフ、cは文字列を表す。種類はgの他にv(頂点)、e(エッジ)がある。型はn(数値)、l(論理値)、x(その他)がある。children属性の種類と型を表している。gはグラフ、bは数値を表す。mode属性の種類と肩を表している。gはグラフ、cは文字列を表している。役に立つ情報じゃないようなきがする...以下のページを参考にしました。pagesグラフの属性を見る(graph_attr_names)graph_attr_names()関数を使ってグラフの属性リストを取得できます。"mode"この木構造型のグラフにはname、children、modeという3つの属性がある事が分かります。各属性の値を見るには以下のようにします。"out"グラフの頂点リストを取得する(V)頂点(vertices)のリストを見るには以下のようにします。10この例では1~10の数字が割り振られた10個の頂点がある事が分かります。グラフのエッジリストを取得する(E)エッジのリストを見るには以下のようにします。5->109個のエッジがある事が分かります。頂点IDとエッジIDigraphには頂点とエッジに固有のIDというものが割り振られています。頂点IDは常に1から始まる連続した数値になります。頂点IDは1から始まります。頂点に名前をつけると、その後は名前で頂点にアクセスすることが出来るようになります。(逆に名前を付けてしまうとIDは分からなくような気がするが、基本的にはどの関数でも頂点に名前でアクセスできるので困らないようです。)サブグラフソーシャルグラフの1部分を抜き出して新しいグラフを作ることができます。これをサブグラフと呼ぶようです。induced_subgraph()という関数でサブグラフを生成することが出来ます。1:7)以下plotの結果。機械学習」という本に掲載されているRのサンプルコードがエラーを吐いてしまい動かなくて困っていました。ソーシャルグラフの分析」の以下のコードです。idこのエラーの原因は単純で、サブグラフの生成条件として渡している頂点のIDが元のグラフには存在しないという事を意味しています。すると動くと思います。"out")))なんで0って入れてたんでしょうね。igraphの昔のバージョンは動いていたのだろうか。ここでけっこうハマってしまいました。隣接ノードの抽出(neighbors)neighbors()という関数を使って、指定したノードに隣接するノードのリストを取得できる。隣接しているノードの方向を指定することもできます。10リング上のグラフで試すと、1のノードの左右に繋がっているノードのインデックスとして「2」と「10」が返ってきているのが分かります。全てのノード間の最短距離を取得するshortest.paths()を使うと、グラフに含まれる全てのノードのお互いの距離を得る事ができます。出力はn×nの行列になります。0随時追記していこうと思います。21:11Rのigraphライブラリの使い方メモ関連記事2017-08-20無職生活。2017/08/19の食費620円、摂取カロリー2900Kcal、体重67Kcal。「エウレカセブン」というアニメを見始めました。過去問題を解きながらメモ。ワンチップマイコンに関...2017-03-19無職生活。2017/03/19の食費1048円、摂取カロリー1300Kcal、体重...今日の夕飯も奥さんのリクエストでオムライスになりました。飽...2017-03-19無職生活。アスパラ肉巻きを初めて作った日。2017/03/18の食費0円、摂取カロリー2450Kca...今日もダメな無職人間らしく1日ゲームをして過ごしました。...2017-02-27FF14日記。DPSで10時間シャキらなかった話。サブストーリークエストを一通りクリアしました。三闘神、アレ...シェアするBookmark!FacebookTwitterGoogle+PocketPRこのブログは、管理人の「さんごー」が株式投資、プログラミング、映画やゲームなどの趣味について書き綴っている雑記ブログです。最近は脱社畜、フリーランスエンジニアを目指しながら、副業として株式投資を学んでいます。映画鑑賞や読書、ゲームも大好きなので、レビューや攻略日記を書いたりもします。よろしければ読者登録、ツイッターフォローして頂けるととても励みになります。