<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>バイオインフォマティクス on Data Visualization Japan</title>
        <link>https://data-visualization.jp/tags/%E3%83%90%E3%82%A4%E3%82%AA%E3%82%A4%E3%83%B3%E3%83%95%E3%82%A9%E3%83%9E%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9/</link>
        <description>Recent content in バイオインフォマティクス on Data Visualization Japan</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja-jp</language>
        <lastBuildDate>Mon, 28 Dec 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://data-visualization.jp/tags/%E3%83%90%E3%82%A4%E3%82%AA%E3%82%A4%E3%83%B3%E3%83%95%E3%82%A9%E3%83%9E%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>大野 圭一朗／今あえてコードから可視化を作る場合のツール</title>
        <link>https://data-visualization.jp/code-based-viz-tools/</link>
        <pubDate>Mon, 28 Dec 2020 00:00:00 +0000</pubDate>
        
        <guid>https://data-visualization.jp/code-based-viz-tools/</guid>
        <description>&lt;p&gt;Data Visualization Japan Meetup 2020（2020年12月28・29日開催）における、大野 圭一朗さん（カリフォルニア大学サンディエゴ校 医学部）の講演です。生物学研究のためのツール開発という立場から、現代のコードベース可視化の実践を紹介します。&lt;/p&gt;
&lt;hr&gt;
&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/Sgs96_gCLMk&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;カリフォルニア大学サンディエゴ校の医学部で勤務しています、大野と申します。&lt;/p&gt;
&lt;p&gt;大学に勤務していると言っても&lt;strong&gt;研究者ではなく、あくまでソフトウェア開発者&lt;/strong&gt;という立場です。大学はある種の非営利団体なので、その中に他の団体と共同でいろんなプロジェクトが立ち上がり、そちらの組織にも名前が入っていたりするのですが、基本的にはサンディエゴをベースに大学の中でソフトウェアを開発しています。&lt;/p&gt;
&lt;p&gt;この会はオーディエンスの方がいろんな分野から来られているので、&lt;strong&gt;テクニカルなことばかりに集中してもなかなか面白くない可能性がある&lt;/strong&gt;ので、今回は長めのイントロとして私がやっているようなことをお話ししながら、最終的に技術的な部分を紹介する、という形で進めたいと思います。&lt;/p&gt;
&lt;h2 id=&#34;生物学と可視化&#34;&gt;生物学と可視化
&lt;/h2&gt;&lt;p&gt;研究室のタイトル的なものは、以前は「&lt;strong&gt;ネットワークバイオロジー&lt;/strong&gt;」を掲げていましたが、今はもっと広く「&lt;strong&gt;ゲノミクス&lt;/strong&gt;」というカテゴリーで考えていただければいいと思います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ゲノミクスという性質上、生物すべてに共通するもの&lt;/strong&gt;なので、扱う生物種は本当にいろいろです。もともとは技術的な制約から&lt;strong&gt;酵母&lt;/strong&gt;などから始まって、今は人間の疾患や哺乳類の研究をしている研究者もたくさんいます。&lt;/p&gt;
&lt;h3 id=&#34;2020年という特殊な年&#34;&gt;2020年という特殊な年
&lt;/h3&gt;&lt;p&gt;2020年の主役はこれですよね——&lt;strong&gt;コロナウイルスの実際の遺伝配列（シーケンス）&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;そういうこともあって、今年は一般のメディアも含めて&lt;strong&gt;生物学に関係する用語が飛び交った年&lt;/strong&gt;だったと思います。&lt;strong&gt;PCR（ポリメラーゼ連鎖反応）&lt;/strong&gt; という言葉を聞かない人はいないでしょうし、それに使う&lt;strong&gt;プライマー&lt;/strong&gt;、ゲノムを解析してウイルスの&lt;strong&gt;系統樹&lt;/strong&gt;を作る技術、そしてワクチンの話題で &lt;strong&gt;mRNA&lt;/strong&gt; という言葉が毎日登場する。&lt;/p&gt;
&lt;p&gt;私たちは特定の生物種を研究しているというより、&lt;strong&gt;汎用的に使える手法——いわゆるバイオインフォマティクス——でいろんな生物種を研究している&lt;/strong&gt;ので、COVID-19 に関する共同研究者の仕事を紹介しながら、可視化との関わりをお話しします。&lt;/p&gt;
&lt;h3 id=&#34;生物学のデータはほぼすべて公開されている&#34;&gt;生物学のデータはほぼすべて公開されている
&lt;/h3&gt;&lt;p&gt;生物学分野のデータは、特殊なものを除いて&lt;strong&gt;ほぼすべて公開データとして誰でもアクセスできる&lt;/strong&gt;ようになっています。&lt;/p&gt;
&lt;p&gt;リンクの先へ行くと、実際に&lt;strong&gt;リファレンスのゲノム&lt;/strong&gt;——このコロナウイルスのゲノムデータにアクセスできます。ウイルスというのは非常に効率がいいと言ったら変ですが、&lt;strong&gt;情報量としては本当に3万文字くらいで表せるゲノム情報で、今の世界をぐちゃぐちゃにしている&lt;/strong&gt;という感じです。&lt;/p&gt;
&lt;p&gt;データとしては本当に単純で、&lt;strong&gt;FASTA&lt;/strong&gt; という名前のフォーマットで、情報量もそれほど大きくありません。&lt;/p&gt;
&lt;p&gt;ただ、元のファイルには &lt;strong&gt;ATGC という文字列が並んでいるだけ&lt;/strong&gt;で、**これを見て何か分かる人間は基本的にいません。**なのでコンピュータの力を借りて、今わかっている情報をその上に乗せたり、&lt;strong&gt;ゲノムブラウザ&lt;/strong&gt;というインタラクティブなツールを使ったりしながら、研究者は日々研究しているわけです。&lt;/p&gt;
&lt;h3 id=&#34;タンパク質相互作用ネットワーク&#34;&gt;タンパク質相互作用ネットワーク
&lt;/h3&gt;&lt;p&gt;ウイルスが人間に対して何か悪さをして、最終的に疾患として現れる——それがなぜ起こるかというと、&lt;strong&gt;ウイルスのタンパク質と、ホストである人間側のタンパク質が何らかの相互作用を行う&lt;/strong&gt;からです。&lt;/p&gt;
&lt;p&gt;そういうものを解析するとき、&lt;strong&gt;相互作用はグラフ＝ネットワークとして表せる&lt;/strong&gt;ので、&lt;strong&gt;シンプルなネットワーク図で全体のインタラクションを把握できるようにする&lt;/strong&gt;わけです。&lt;/p&gt;
&lt;p&gt;この論文では、網羅的に解析した結果をネットワーク図として表しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;薬というのは「この病気が出てきたからすぐ作ろう」というのは無理&lt;/strong&gt;だというのは、今年の状況を見てこられた方は皆わかると思います。開発に非常に時間がかかるのに対して、ウイルスは待ってくれない。&lt;/p&gt;
&lt;p&gt;そこで研究者や医師が最初に考えるのは——&lt;strong&gt;すでに臨床試験が終わって他の病気に使われている薬があって、それが同じような作用機構で同じようなタンパク質をターゲットにするなら、この病気にも使えるんじゃないか&lt;/strong&gt;ということ。この &lt;strong&gt;ドラッグリパーパシング&lt;/strong&gt;の研究でこういったネットワーク可視化が実際に使われています。&lt;/p&gt;
&lt;p&gt;余談ですが、この論文は&lt;strong&gt;被引用数が970&lt;/strong&gt;。&lt;strong&gt;せいぜい半年ほどでこんな引用数が出るのは普通ではない&lt;/strong&gt;ので、いかに今、世界中の研究者がこの部分に寄ってたかって研究しているかが端的に分かる数字だと思います。&lt;/p&gt;
&lt;h3 id=&#34;生物学で使われる可視化の種類&#34;&gt;生物学で使われる可視化の種類
&lt;/h3&gt;&lt;p&gt;ネットワークは生物学で使われる可視化のごく一部です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;アライメントビュー&lt;/strong&gt; ——塩基配列やアミノ酸配列を比較するとき。昔は目でやっていた時代もあったようですが、基本は機械で並べて、&lt;strong&gt;どこが変異しているのか&lt;/strong&gt;を目で見られるようにする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ゲノムブラウザ&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;タンパク質の構造ビューア&lt;/strong&gt; ——タンパク質は&lt;strong&gt;3次元構造の状態によって働きが決まる&lt;/strong&gt;ので、その3次元の状態を見られるようにする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ネットワーク図&lt;/strong&gt; ——相互作用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;系統樹&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Nextstrain&lt;/strong&gt; に行くと、系統樹と世界中への伝播をダッシュボード的に作り上げたソフトウェアがあります。&lt;strong&gt;研究ツールと報道ツールの中間くらい&lt;/strong&gt;という印象を私は受けました。生物学で使うツールは、&lt;strong&gt;複数の異なった形のデータを統合してダッシュボード的にし、そこで探索的な可視化を行う&lt;/strong&gt;ということが割と頻繁に起こります。&lt;/p&gt;
&lt;h3 id=&#34;データ型と可視化手法の対応&#34;&gt;データ型と可視化手法の対応
&lt;/h3&gt;&lt;p&gt;COVID-19 関連研究で使われる情報を、コンピュータの用語に置き換えると——&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;生物学のデータ&lt;/th&gt;
          &lt;th&gt;計算機的には&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;遺伝子配列&lt;/td&gt;
          &lt;td&gt;文字列&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3次元構造&lt;/td&gt;
          &lt;td&gt;座標＋文字（アミノ酸）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;薬剤との相互作用&lt;/td&gt;
          &lt;td&gt;グラフ構造&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;感染経路&lt;/td&gt;
          &lt;td&gt;グラフ構造&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;系統樹&lt;/td&gt;
          &lt;td&gt;ツリー&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;つまり——&lt;strong&gt;ウイルスの研究に限らず、計算機はある種、生物を研究するためのインフラ的な立場&lt;/strong&gt;になっている。だから私のような立場の人間が存在するわけで、&lt;strong&gt;本業は生物学者のためのツールやインフラを整えること&lt;/strong&gt;です。&lt;/p&gt;
&lt;h3 id=&#34;余談--犬の年齢&#34;&gt;余談 ― 犬の年齢
&lt;/h3&gt;&lt;p&gt;私の職場から出た論文の一つに面白いものがあって、ニューヨーク・タイムズでも記事になりました。&lt;/p&gt;
&lt;p&gt;昔から「&lt;strong&gt;人間と犬の年齢を比べるときは7を掛ければいい&lt;/strong&gt;」という説がありました。俗説なのかサイエンスのデータに基づいたものなのか私は知らないのですが、&lt;strong&gt;実際に調べてみるともう少し違うカーブを描くんじゃないか&lt;/strong&gt;、というのを私の職場の大学院生が論文にして出したんです。犬という身近な動物を使った研究だったこともあって、日本語でもニュースになっているのを見つけました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ゲノミクスは生物に共通する基盤を研究している&lt;/strong&gt;ので、生物種としては本当にいろんなものを扱っています。とはいえ&lt;strong&gt;研究予算が集中するのは難易度の高い疾患&lt;/strong&gt;なので、どうしてもがんなどを研究する場合が多いです。&lt;/p&gt;
&lt;h2 id=&#34;私たちの仕事&#34;&gt;私たちの仕事
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;遺伝子から、最終的に生物上に現れるフェノタイプ（表現型）を予測したり、その関連性を調べたり&lt;/strong&gt;——そういったことを計算機を使って研究している職場です。&lt;/p&gt;
&lt;p&gt;中でも私たちは&lt;strong&gt;ネットワークやパスウェイ&lt;/strong&gt;——化学物質と人間のタンパク質、あるいはタンパク質同士が集合したコンプレックス、そういったもの同士の&lt;strong&gt;反応経路や作用の仕組み&lt;/strong&gt;を中心に研究しています。がんの研究、DNA のダメージを修復する機構、老化とは何か——そういうものを分子生物学的に研究しているのを、計算機側からサポートしています。&lt;/p&gt;
&lt;p&gt;実際に何をやっているかというと——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;解析の部分&lt;/strong&gt;：研究者が書いたプロトタイプ的なコードやアルゴリズムを、&lt;strong&gt;一般の生物学者が使えるようなツールにまとめる&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可視化の部分&lt;/strong&gt;（私が主にいるチーム）：&lt;strong&gt;新しい可視化手法そのものを開発・研究するのではなく&lt;/strong&gt;、可視化研究者が作ってある程度評価の定まった手法を組み合わせて、&lt;strong&gt;より複雑な探索的可視化ができるアプリケーションを作る&lt;/strong&gt;。あるいは論文に合わせてカスタムのツールを作って最終的な図を作成する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;バイオインフォマティクスという言葉は分かりにくいのですが、&lt;strong&gt;やっていることは意外と地味で、普通のソフトウェアエンジニアがやっているようなこと&lt;/strong&gt;です。&lt;/p&gt;
&lt;h3 id=&#34;インフラ整備とお金&#34;&gt;インフラ整備とお金
&lt;/h3&gt;&lt;p&gt;インフラ整備には必ずお金の問題が出てきます。**こういうソフトウェアは基本的にそれ自身がお金を生みません。**使う人が多くても、その人からお金を取るというよりは、&lt;strong&gt;どこかからお金をもらってきて開発する&lt;/strong&gt;という形になります。&lt;/p&gt;
&lt;p&gt;毎年いろんなグラント（助成金）に応募するのですが、面白いファンディングソースとして &lt;strong&gt;Chan Zuckerberg Initiative&lt;/strong&gt; があります。Facebook のザッカーバーグさんと奥さんがやっている慈善団体で、そこが「&lt;strong&gt;Essential Open Source Software for Science&lt;/strong&gt;」という枠を作って、&lt;strong&gt;科学研究の分野で広くインフラ的に使われているソフトウェアに対してお金を出しましょう&lt;/strong&gt;という基金を運営しています。&lt;/p&gt;
&lt;p&gt;私たちも応募して通ったのですが、サイトを見ると &lt;strong&gt;pandas、Bokeh、NumPy、Jupyter、Binder&lt;/strong&gt; など、聞いたことがあるプロジェクトがいくつもあります。&lt;strong&gt;これだけ広く使われているソフトウェアでも、持続的に開発していくのは難しいという現状&lt;/strong&gt;があるので、非常にありがたい基金です。&lt;strong&gt;日本も含めて、起業家の方なども含めてこういったサポートができるといいな&lt;/strong&gt;と思ったりしました。&lt;/p&gt;
&lt;h3 id=&#34;作っているもの&#34;&gt;作っているもの
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;NDEx&lt;/strong&gt; ——生物学方面で使うネットワークやパスウェイの共有サイトのようなものです。&lt;strong&gt;Pfizer や Roche&lt;/strong&gt; といった製薬会社も資金を出してくれています。パブリックにできないデータについては、彼らが自前のサーバーにデプロイして機密性のあるデータをそちらで使う。それとは別に私たちがパブリックのサーバーも運営していて、&lt;strong&gt;キュレーターが、たとえば今年なら COVID-19 関連の信頼性のあるネットワークデータをコレクションとしてまとめる&lt;/strong&gt;、といったことをしています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cytoscape&lt;/strong&gt; ——汎用のネットワーク可視化ソフトです。比較的大規模なものから、人間が手で描くようなパスウェイ図まで可視化できます。&lt;strong&gt;もともとは私のボスが2003年ごろに開発し始めたもので、2020年現在も続いている。この「継続させる」というのが非常に難しいのがこの分野のソフトウェアの特徴&lt;/strong&gt;ですが、なんとか生き残っています。&lt;/p&gt;
&lt;h2 id=&#34;カスタムツールを作る&#34;&gt;カスタムツールを作る
&lt;/h2&gt;&lt;p&gt;私たちに関して言うと&lt;strong&gt;探索的な可視化ツールを作る&lt;/strong&gt;のですが、データの特殊性もあってニーズが複雑で、&lt;strong&gt;研究者が見たいものも研究内容によってだいぶ変わる&lt;/strong&gt;ので、カスタムのツールを作る必要性はずっとあります。&lt;/p&gt;
&lt;p&gt;最近作っているのが &lt;strong&gt;HiView&lt;/strong&gt; です。&lt;strong&gt;巨大なネットワークに対して階層的なクラスタリングを行い、その階層を circle packing で表現して、どんどん展開して中に入っていけるブラウザ&lt;/strong&gt;と、それに対応する各種データを表示するダッシュボードです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ、技術的な要素を見ていくと特殊なことは何もやっていません。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;階層構造の部分：&lt;strong&gt;D3 の circle packing&lt;/strong&gt; をベースに、インタラクションを後から追加&lt;/li&gt;
&lt;li&gt;ネットワーク（node-link diagram）：&lt;strong&gt;Cytoscape.js&lt;/strong&gt;（これも私たちのチームが作っている JavaScript ライブラリ）&lt;/li&gt;
&lt;li&gt;バーチャートなど：1から作る必要もないので &lt;strong&gt;react-vis&lt;/strong&gt;（Uber が最初に作ったライブラリ）&lt;/li&gt;
&lt;li&gt;UI：&lt;strong&gt;Material-UI&lt;/strong&gt;（大元のデザインは Google、オープンソースの実装として React で使える）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使っている技術の要素は本当にシンプル&lt;/strong&gt;です。つまり——&lt;strong&gt;基本的なパターンはだいたい有り物のツールでカバーできる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**データの種類と量が決まれば、自ずと使える手法が決まり、最近は実装まで手に入る。**このあたりは昔に比べるとずいぶん楽になったと思います。&lt;/p&gt;
&lt;p&gt;手法についても、**何を見せたいかがあって、データの種類と量が決まれば、「これは散布図」「これはヒストグラム」とかなり自動的に決まってくる。**チートシートのようなサイトもいくつかあるので、&lt;strong&gt;必要なものが実装も含めて手に入るかをまず調べるのが、最近は大事&lt;/strong&gt;になってきています。&lt;/p&gt;
&lt;h3 id=&#34;それでも自分でコードを書く必要があるケース&#34;&gt;それでも自分でコードを書く必要があるケース
&lt;/h3&gt;&lt;p&gt;大きく3つだと思います。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;大量のデータがある&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;比較的複雑なインタラクションが必要&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可視化手法自体を作らなければならない&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;3つ目はどちらかというと可視化自体を研究している研究者の領域なので、私はあまり踏み込みません。今日は&lt;strong&gt;1と2&lt;/strong&gt;について実例を交えてお話しします。&lt;/p&gt;
&lt;h3 id=&#34;問題の複雑さ&#34;&gt;問題の複雑さ
&lt;/h3&gt;&lt;p&gt;一番簡単なのは&lt;strong&gt;単一種類のデータを可視化したい&lt;/strong&gt;というケース。これは Excel でもライブラリでも比較的簡単に作れます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;データ型が増えれば、それに対応する違う種類のチャートを作らなければならない。&lt;strong&gt;逆に&lt;/strong&gt;データは単一でもものすごい量がある&lt;/strong&gt;と、既存の手法にただ読み込ませるだけで大丈夫か、というケースが出てくる。&lt;/p&gt;
&lt;p&gt;そして&lt;strong&gt;大量の、いろんな種類のデータをそれぞれ相互につなげて、アクションに基づいて見え方が変わる&lt;/strong&gt;——そうなるとかなり複雑になっていきます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私が主に作業しているのはこのあたりで、構成要素自体は1から作らなくても、量的な問題や特殊なインタラクションに時間を割いています。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;-複雑なインタラクション--plotly-dash&#34;&gt;① 複雑なインタラクション ― Plotly Dash
&lt;/h2&gt;&lt;p&gt;**Tableau のようなコマーシャルツールでもある程度双方向性のあるダッシュボードは作れます。**もちろん限界があって、&lt;strong&gt;描きたいコンポーネントがなかったり、必要なインタラクションがなかったり&lt;/strong&gt;する場合はどうしても自分で書かざるを得ない。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただ、ほとんどの人——特に分析自体をやって最終的な可視化まで作っている人——にとって、JavaScript で1から書くのはハードルが高い。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;いま、データ分析者にとって &lt;strong&gt;Python&lt;/strong&gt; は非常に大きな存在です。&lt;strong&gt;「Python で1から書けてしまえば楽だろうな」と思っている人は多い&lt;/strong&gt;と思います。&lt;/p&gt;
&lt;p&gt;そこで &lt;strong&gt;Plotly Dash&lt;/strong&gt; です。&lt;strong&gt;JavaScript を書かなくてもインタラクティブな Web アプリケーション／ダッシュボードが作れてしまう&lt;/strong&gt;ツールキットです。&lt;/p&gt;
&lt;p&gt;Plotly（カナダの会社だと思います）のビジネスモデルはエンタープライズエディションの方で、&lt;strong&gt;可視化部分はオープンソース&lt;/strong&gt;なので、Dash も基本機能は全部フリーで使えます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;実例を見るのが一番早い&lt;/strong&gt;と思いますが、基本的な部品が全部揃っているので、&lt;strong&gt;それを組み合わせて割と複雑なダッシュボードを Python のみで構築できる。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;今は「1か0か」ではなく、こういう中間的なツールキットもある&lt;/strong&gt;ので、データ分析側にいる人はこのあたりも考慮するといいと思います。&lt;/p&gt;
&lt;p&gt;ちょっとびっくりしたのですが、**英語の書籍も出ていないような気がするのに、日本語で書籍が出ていました。**興味がある方は見てもらうと実際どういうものか分かると思います。&lt;/p&gt;
&lt;p&gt;また、Plotly から&lt;strong&gt;私たちのカナダのコラボレーター&lt;/strong&gt;——Cytoscape.js を作っている同僚——にアプローチがあって、&lt;strong&gt;Cytoscape.js を Dash で使えるコンポーネント「Dash Cytoscape」&lt;/strong&gt; が用意されています。その解説もこの日本語書籍にはかなりページを割いて書いてあります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;もちろん限界はあって、描画部分までいじりたくなると、最終的にはモダンフロントエンドと呼ばれるジャングルに入るしかない。&lt;strong&gt;ただ&lt;/strong&gt;そこまで行く前に、今公開されているコンポーネントで目的のアプリケーションが作れるかどうかをちゃんと試した方がいい。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私の同僚もこれで作り始めたのはいいけれど、データ量的に対応できなくて最終的に私に仕事が回ってきたこともある&lt;/strong&gt;ので、そのあたりの見積もりも大事です。&lt;/p&gt;
&lt;h2 id=&#34;-大量のデータ--deckgl&#34;&gt;② 大量のデータ ― deck.gl
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;可視化のアプリケーションを書く＝ほぼ Web ブラウザで見る&lt;/strong&gt;という流れになってきています。&lt;/p&gt;
&lt;p&gt;私は&lt;strong&gt;ネットワーク描画&lt;/strong&gt;をかなり長く扱っているのですが、&lt;strong&gt;100万や200万といったノード・エッジをシンプルな node-link diagram で表す&lt;/strong&gt;——そんなものをブラウザで実行するのは、&lt;strong&gt;昔はあまり考えられませんでした。今は技術的に可能になってきている。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;ユースケース&#34;&gt;ユースケース
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;エッジ数の多い密なネットワークを、シンプルに node-link で表示したい。でも数がめちゃくちゃ多い。&lt;strong&gt;そして&lt;/strong&gt;全体の傾向を見たい&lt;/strong&gt;——クラスタリングを施した後、クラスター同士が密に固まった状態をざっと表示して、&lt;strong&gt;同時に Google マップのようにズームイン・ズームアウトもできるといいよね&lt;/strong&gt;という、&lt;strong&gt;無茶なお願いをしてくる人がいる&lt;/strong&gt;わけです。&lt;/p&gt;
&lt;p&gt;有り物で自由にそういうことができるものはないので、&lt;strong&gt;作るとしたらどのくらいの手間か&lt;/strong&gt;を考え始めました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;私たちは最終的なアプリケーションを作る人間で、解きたい課題があってそれに技術を持ってくる形&lt;/strong&gt;なので、&lt;strong&gt;CG の専門家もいないし GPU に詳しい人間もいない。&lt;strong&gt;できるだけ&lt;/strong&gt;ハイレベルな API を持つライブラリ&lt;/strong&gt;があればな、と探していたところ——都合のいいものがありました。&lt;/p&gt;
&lt;h3 id=&#34;deckgl&#34;&gt;deck.gl
&lt;/h3&gt;&lt;p&gt;もともと &lt;strong&gt;Uber&lt;/strong&gt; が作っていたライブラリです。&lt;/p&gt;
&lt;p&gt;彼らのサイトを見ると**地理空間データの例が非常に多い。**日本だと食べ物の配達のイメージが強いと思いますが、&lt;strong&gt;彼らがメインで最初に始めたのは配車サービス&lt;/strong&gt;なので、そちらのデータを可視化したい欲求があったのだと思います。&lt;/p&gt;
&lt;p&gt;**ただ実際は汎用的なツールです。**もともと Uber で作られましたが、&lt;strong&gt;今後は比較的オープンな体制で作っていくことも決定している&lt;/strong&gt;ようなので、ロックインもあまり心配しなくて大丈夫だと思います。&lt;/p&gt;
&lt;p&gt;deck.gl を使った例として &lt;strong&gt;kepler.gl&lt;/strong&gt; があります。地理空間データを手間少なく地図に重ねて表示できるツールで、&lt;strong&gt;下で走っているのが deck.gl&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;**よく間違われるのですが、例が地理空間可視化ばかりなだけで、実際は汎用のツールキットなのでいろんなことができます。**Uber は自動運転の研究もやっていたので、&lt;strong&gt;その結果を可視化するようなものも全部これで作っている&lt;/strong&gt;と、開発者のワークショップで聞きました。&lt;/p&gt;
&lt;h3 id=&#34;なぜ自分たちで作ろうと思ったか&#34;&gt;なぜ自分たちで作ろうと思ったか
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;100万を超えるエッジやノードを持ったデータの概要（オーバービュー）を見たい&lt;/strong&gt;というのが主なモチベーションです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;クラスター同士がそれぞれ近い場所に集まって、カラーコーディングされて、必要に応じてさらにデータレイヤーを上に乗せられる&lt;/strong&gt;——そういう&lt;strong&gt;巨大な白地図のようなものが作れればいいな&lt;/strong&gt;というので始まりました。&lt;/p&gt;
&lt;h3 id=&#34;deckgl-の考え方--レイヤーの集合&#34;&gt;deck.gl の考え方 ― レイヤーの集合
&lt;/h3&gt;&lt;p&gt;deck.gl は&lt;strong&gt;レイヤーの集合&lt;/strong&gt;で作ります。基本的な考えは「&lt;strong&gt;可視化したいものを、いくつかのレイヤーに分割して表現できないか&lt;/strong&gt;」。散布図用のレイヤー、直線を引くだけのシンプルなレイヤー——そういうプリセットを重ね合わせて作ります。&lt;/p&gt;
&lt;p&gt;グラフを描画したい場合は、&lt;strong&gt;ノードを表示し、ラベルを付け、ノード同士を線で繋ぎ、必要に応じて背景を描く。&lt;strong&gt;つまり&lt;/strong&gt;ノードレイヤーとエッジレイヤーを別々に既存のもので作ればいい。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;技術スタックは下から——&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;WebGL&lt;/strong&gt;（ブラウザ技術）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;luma.gl&lt;/strong&gt;（Uber が作った、WebGL に対するもう少し高レベルな API のラッパー）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;レイヤー自体の描き方は割と簡単に切り替えられる&lt;/strong&gt;ので、2次元から3次元に切り替えて、&lt;strong&gt;複数のレイヤーが重なった3次元空間の表現——2.5次元と呼んだりします——もやろうと思えばできます。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;実例&#34;&gt;実例
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;40万ノードくらい&lt;/strong&gt;のものです。&lt;strong&gt;あらかじめ Python でクラスタリングを施し、レイアウトしたものを描画しています。&lt;strong&gt;さすがに&lt;/strong&gt;分析やレイアウトをオンザフライでやるのは現実的ではない&lt;/strong&gt;ので、そこは別でやっています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただズームやパンといった基本的な部分については、このくらい何も考えずにやっても普通に描けるパフォーマンスが、今の機械・ライブラリ・ブラウザのおかげで出るようになっている。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;50万ノード&lt;/strong&gt;くらい入れると、ここまで行くと&lt;strong&gt;もう単なるメッシュにしか見えない&lt;/strong&gt;のですが、&lt;strong&gt;何も考えずとも比較的こういうものを deck.gl で作れる&lt;/strong&gt;ということが確認できました。&lt;/p&gt;
&lt;h3 id=&#34;d3js-とどう違うのか&#34;&gt;D3.js とどう違うのか
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;ちゃんとライブラリに合った役割を割り当てるのが大事&lt;/strong&gt;です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;D3.js&lt;/strong&gt;：&lt;strong&gt;カラーパレットの生成や circle packing の計算といった、数学的なライブラリとして使う&lt;/strong&gt;のは今でも非常に便利。&lt;strong&gt;それが今後のメインの使い方として正しくなってくる&lt;/strong&gt;と思います&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt;：&lt;strong&gt;ひたすら力技で大量のデータを描く&lt;/strong&gt;ユースケースに異常に向いている&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし&lt;strong&gt;巨大なデータを一気に描画する場合、その場で解析やレイアウトを行うのは現実的ではない&lt;/strong&gt;ので、&lt;strong&gt;その部分は大きな計算機であらかじめ計算しておいて、どこかに蓄積する。&lt;strong&gt;こういう&lt;/strong&gt;役割分担が今後は大事&lt;/strong&gt;になってくると思います。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;D3.js でチャートを作る作業自体は面白い&lt;/strong&gt;んですけれども、&lt;strong&gt;最近はいろんなものがすでにあるので、既存のものを利用する。「自前で作らないと気が済まない」という欲求と戦うのが、今後は結構大事&lt;/strong&gt;だと思います。&lt;/p&gt;
&lt;p&gt;今の段階では単純にメモリに流し込んだものを無理やり描いているだけなので、実用的なアプリケーションにするには、&lt;strong&gt;1000万といったオブジェクトがあってもダイナミックにロードすれば、ブラウザでも十分扱える&lt;/strong&gt;はずで、そういう仕組みができないかを今やっている最中です。&lt;/p&gt;
&lt;p&gt;生物学的な話からスタートしましたが、まとめとしては——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;比較的複雑なアプリケーションを作る場合でも、必要なツールキットは非常によく整備されている。まずそれを使えないかよく考える&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;足りない場合は、中間的な Dash を使う&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;それでもできない場合は、deck.gl で自前のレンダリングを書く&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;作る側としてはどんどん便利な世界になってきている&lt;/strong&gt;ので、ぜひこのあたりも試してみてください。以上です。&lt;/p&gt;</description>
        </item>
        
    </channel>
</rss>
