0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WORDCLOUDをCYTOSCAPEにマッピング

Last updated at Posted at 2022-06-07

内容

  • 業務で機械学習をやっています
  • テキストマイニングのビジュアル化を検討していて、CYTOSCAPE.JSにたどり着きました。
  • 今後はREACT+GATSBY+CYTOSCAPE+FASTAPI+PYTORCHを使ったMLアプリを作っていきます

Cytoscape.JS

  • WEB-APIでPYTHONでWORDCLOUDをSVGで返し、CYTOSCAPEにマッピングします
  • cy.filter('node[id = "a"]').css() ---> ここでCSSプロパティを追加できます
index.html

<body>
  <div id="cy" ></div>
  <button id="btn">image add</button>
</body>

<script>
  var myData = [
    { data: { id: "a", parent: "o" } }
  ];

  var cy = window.cy = cytoscape({
    container: document.getElementById("cy"),
    elements: myData
  });

// htmlのオブジェクトボタン
//  document.getElementById("btn").addEventListener("click", function () {
//    cy.filter('node[id = "a"]').css('background-image', 'image.svg')
//  });

//こっちの方がスマート
cy.on('mouseover', 'node', function(evt){
  var node = evt.target;
  node.css('background-image', 'image.svg');
});

</script>

VIZ.JS

  • nodesは、オブジェクトとして宣言必要
  • shapeの定義が無いと、SVGが表示されない
  • imageはdummyを張り付けている → 無いとエラーがでる
index.html
<script>
    var nodes = new vis.DataSet([
      { id: 1, shape: "circularImage", image: "dummy.png" },
      { id: 2, shape: "circularImage", image: "dummy.png" },
    ]);

    network = new vis.Network(container, data, options);

    network.on("click", function(properties) {
          nodes.update({ id: properties.nodes[0], image: 'image.svg' });
        });
    });

SVGをAPIで持ってくる場合

index.js

      const params = {
        id: 番号,
      };
      const query = new URLSearchParams(params);//GETのクエリを渡す
      fetch(apiurl + "/wordcloud?" + query.toString())
        .then((r) => r.text())
        .then((data) => {
          data = data
            .replaceAll("\\", "")   //apiからのレスポンス中のゴミ削除
            .slice(1)         //apiからのレスポンス中のゴミ削除
            .slice(0, -1);      //apiからのレスポンス中のゴミ削除
     svg = "data:image/svg+xml;utf8," + encodeURIComponent(data);//SVGストリングで渡す

API設計

事前にTEXTはTFIDFベクトル化して、テーブルに入っている前提

python.py

def get_wordcloud(dics, cutoff=5)->WordCloud:

    df = pd.DataFrame(list(dics.items()),columns=['word', 'tfidf'])
    df = df.astype({'word': 'str', 'tfidf': 'float'})
    df = df.sort_values(by='tfidf', ascending=False).head(cutoff)
    dict_parse = dict(zip(df['word'], df['tfidf']))

    if dict_parse:
        wc = WordCloud(
            width=800,
        prefer_horizontal=1,
        background_color='white',
        include_numbers=True,
       font_path='C:\Windows\Fonts\meiryo.ttc',
        stopwords=STOPWORDS).generate_from_frequencies(dict_parse)
   
      return wc.to_svg()#SVG文字列としてresponse-bodyに返す 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?