創作意欲とか物欲とか、そういう類のものスマートフォン用の表示で見る創作意欲とか物欲とか、そういう類のもの2019-04-29ネットワーク可視化ツール「Cytoscape」を自動操作して楽する話—PowerShellでCyREST-APIを叩く—Cytoscapeすこし前に"ネットワーク可視化ツール「Cytoscape」に雑に入門して手っ取り早く使う話"と題して、オープンソースの可視化ツールCytoscapeに、Excelデータを読み込ませる簡単なやり方について書きましたが、なかなか手数が多いので、繰り返しやる時にはかなり面倒です。そんな時、面倒な読み込みの手順を自動化して、ワンクリックでさくっとグラフ化できたら最高だと思いませんか?できるんです。「CyREST-API」ならね。「layout/degree-circle」コマンドスタイルの適用とかフィルターとかまとめまずはフワッと概要を紹介するので、御託はいらねえって方は下の「やってみる」まで読み飛ばしてください。Interface」の略です、よくわかりませんね。意訳すると「Cytoscapeがhttp://localhost:1234にWebサーバーを立ててるから、そこにコマンドを投げればCytoscapeが操作できるよ、使えるコマンドはAPIのリファレンスを見てね」という感じの機能です、だいたい。こんな雰囲気もう少しおおざっぱに言うと、Webでよく使われている「REST-API」という、アプリ同士を連携させるための仕組みを使って、他ののアプリからCytoscapeを操作できるという仕組みです。Windows標準環境でCyREST-APIを使いたい自動操作のインターフェースは見つかりましたが、これをどこから操作するかが次の課題です。調べるとPythonとかRを使う情報が多いようですが、いま僕が使えるのはWindows7~8環境で、あんまり追加のソフトを入れられないものとします。Windowsでcurlコマンド?※このへん僕の理解が曖昧なので、間違いがあれば適宜読み替えてください。REST-APIってのを使うときは、Linux環境なら元々入っているcurlというツール使うのが簡単そうです。qiita.comところがWindows7~8の場合、標準環境にcurlは入っていません(10なら入ってるらしい)。そこで登場するのが「PowerShell」です、これはコマンドプロンプトの上位互換?な感じのツールです。tonari-it.comPowerShellにはcurlに相当するInvoke-WebRequestというコマンドが用意されていて、しかもなんとエイリアス(名前のショートカット?)が設定されているため、curlと打っても使えます!やってみようさて、ここまでのところは僕もよくわかっていないで書いているので、さっさと実践編に移りたいと思います。PowerShellの基本的な使い方については、いろいろわかりやすい情報があるので、ここでは解説しません。ISE」を使うのが簡単そうです。tonari-it.com前の記事の例題をつかって解説していこうと思います。at-you-key.hatenablog.comこんな流れになります。Excelでデータセットを用意するCytoscapeを起動するPowerShellスクリプトを実行するデータセット(Excelファイル)の読み込みレイアウトを適用スタイルを適用フィルターでデータの絞り込みデータセットの列数が14を超えてはいけないデータセットの用意については前の記事の通りですが、CyREST-APIを使うにあたって1つ注意点があって、列数が14を超えると読み込みがうまくいきません。なにか回避方法があるのかもしれませんが、とりあえず14を超えなければうまく読み込めるようです。僕はこれのせいでかなりハマりました。CyREST-APIの立ち上げCytoscapeを起動すればCyREST-APIも有効になります。Webブラウザでhttp://localhost:1234/v1を開いてみて、下のようなJsonが返ってきたらちゃんと動いています。}}メニューバーの「Help」→「Automation」にCyREST-APIのリファレンスがあるので、基本的にはここを熟読しつつトライ&エラーで使い方を探っていけば良いと思います。API」がありますが、呼び出し方はどちらも同じで、前者はアプリ全体の操作系、後者はデータの細かい操作系の機能です、たぶん。データセットの読み込みさあ、ここからがPowerShellの出番です。ちなみに、データセットはC:/temp/nobita.xlsxに保存していることとします*1。file」コマンドコードはこんな感じ、Cytoscapeを起動しておいてから実行すれば、たちどころにネットワーク図が表示されるはずです。1コマンドの実行に必要なURIとBodyを変数に格納しておいてからInvoke-WebRequestに突っ込んでいます。fileコマンドを指定していますね。webtan.impress.co.jpbodyそして、ここでコマンドの実行に必要な項目を指定しています。"1"}'Bodyに何を書けばいいかは、前述のリファレンスを読んでみてください。一つだけ注意すべきは、"file"の欄に入れるパスに日本語が含まれると、文字エンコードの泥沼にハマるのでお気をつけて。Invoke-WebRequestこれがAPIにリクエストを送信している部分ですね、前述のとおり「curl」に置き換えても動いてくれます。オプションが多くて読みづらいってときは、いいところで改行して行末に「`」を付けると、1つのコマンドとして処理してくれます。sleep最後の行に処理待ちのタイマーを入れてみました。秒数指定なので、この場合だと1秒待ちです。1もっと良い処理待ち方法があるのかもしれませんが、とりあえず動くのでここはこれで。実行した結果はこちら。読み込みができたら、次はレイアウトを変えてみましょう。今回は見た目の変化が見えやすそうなDegree-circleレイアウト*2を設定してみます。1こっちはだいぶ簡潔ですね。リファレンスを見るとBodyで設定できるプロパティは色々あるようですが、ぜんぶOptionalなので、とりあえず試すだけなら空欄でも動きます。ここまでのコマンドを実行すると、画面はこんな感じ。スタイルの適用とかフィルターとかここはまだ手を出せていないので、そのうち試して追記します。まとめPowerShellの実行ボタンを押すたびに、シュバババッとグラフが作られていって爽快です。今回使った以外にも沢山のコマンドがあって、やりたいこともまだあるので、もう少し知見がたまったらまたそのうち書こうと思います。*1:パスに日本語が含まれると、文字エンコードの泥沼にハマるのでお気をつけて。*2:つながっているエッジの数に応じて、6時方向から時計回りにノードを並べるレイアウトです。...さて、Cytoscape関係の4本目です。ネットワ...2019-07-20ネットワーク可視化ツール「Cytoscape」で描いた大きな図を印刷する話—CyREST+Image...さて、またCytoscapeネタを1発。はてなブログPro物作りやガジェットの事を書いていきます。(1)検索スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。