#author("2021-09-16T04:13:30+00:00","","") #author("2023-05-17T08:20:06+00:00","","") #topicpath #setlinebreak(on) ---- #contents ---- https://11.gigafile.nu/0923-b9941fcd7dc628fe9e5eacf37525f5c6b ---- 推測するな,計測せよ これから、ビジュアルプログラミングにおけるデータ分析支援システムと題して奥原研究室、沼田賢一が発表していきます . ---- それではまず研究の背景を説明します。近年企業などでsociety5.0に向けた世間にあふれるさまざまな情報を収集しビッグデータとして様々な処理や分析によって情報を扱うことが増えています。 これらのデータは膨大であるため一般的にプログラミング言語を使って処理されています。 そしてこのビッグデータというものは大量で、高頻度な多様性があるデータとして定義されていて、ライフログデータや顧客データ購買データなどが例として挙げられます その主な活用方法としては需要の予測やコストの削減、仕入れの最適化など様々なものがあります ---- そして,このようなビッグデータをプログラミングで扱う際の問題点としてはまず、プログラミング初心者にとって,そもそもプログラミングが手にかけづらいというユーザアビリティの低さと、 このようなデータを簡単に分析する手法が存在しないという点が挙げられます。 このような中で、本研究の目的としては、 プログラミングの初心者でも扱いやすい環境の開発と,その中でデータを処理できるように することとで,最終的には外部に公開し複数人から利用できるようにすることです。 ---- それでは,先ほど挙げたソサエティゴーテンゼロについて説明していきたいと思います. ソサエティゴーテンゼロとは,サイバー空間とフィジカル空間を高度に融合させたシステムで、 経済発展と社会課題の解決を両立する人間社会のことです。 そして,society 5.0のサイバー空間上で Web サービスと組み合わせて,ユーザーがフィジカル空間上でデータを分析できるようにすることでソサエティ5.0の実現したいと考えています。 このようなIT を利用した人々の生活をあらゆる面でより良い方向に変化させるようなことをデジタルトランスメーションと言います。 ---- 本研究では、WEB サービスを使って行くにあたって、サーバーサイドプログラミングという技術を使います。 これは http 通信を行った後にユーザーからの入力に対し処理を非同期通信を使って,Webサーバー上でプログラミングの実行をし、その結果を Web ブラウザに対して送信するシステムになります。 このようなサーバーサイドプログラミングを使うことで、クライアント側のみであれば HTML や CSS と JavaScript といった言語の制約がありますが,サーバー側による処理を挟むことでそれ以外の言語を使うことができます。 ---- 今回プログラミング初心者でも使いやすい環境を作るためにビジュアルプログラミング言語というものを使います. これはプログラムを英語の文字で記述するのではなく、視覚的なオブジェクトで記述するプログラミング言語のことで、 プログラムの組み立て方を学ぶのに有効であると注目されています. ビジュアルプログラミング言語には,おもにブロックタイプやフロータイプ,独自ルールタイプなどが挙げられますが、今回はブロックタイプのビジュアルプログラミング言語を使っていきます。 そしてこのブロックタイプのものには機械学習を使って課題を解決するクラウドサービス マゼランブロックスや 教育用で作られ、様々なアプリケーションに応用されて使われているblocklyなどがあります。 そしてこのブロッコリーの応用して使われているサービスとしてスクラッチやメイクコードなどが存在します. ---- そして先に挙げたブロッコリーというものは Google が提供しているオープンソースのライブラリで簡単な記述で自分だけのビジュアルプログラミング言語を作ることができます。 またブロッコリーで用意してあるブロック以外にも、 他にユーザーが好きなブロックを作成することができるカスタムブロックという機能があり、拡張性が高いものとなっています。 本研究では、このカスタムブロックの機能を使って,ビジュアルプログラミング上でビッグデータを処理できるブロックを作っていきます。 ---- このようなカスタムブロックを作るには,3つの工程があります. 一つ目はブロックの定義です。 作成したいブロックの色や表示する文字などの外観と,そのブロックに接続する数値やテキストといった入力と出力の型を決めます. ---- 二つ名ブロックの動作についての定義です。 例えば二つの数値の平均値を出すブロックを作成する時は、 入力される2つの数字の和を取ってそれを2で割るという計算の部分を書きます。 最後にブロッコリーのカテゴリーを決めます。 これは、 ブロックが複数ある場合カテゴリーを分けることで、使いたいブロックをすぐに 見つけて使うことができるようになります。 ---- このようなカスタムブロックは、クライアントが持つ外部からのデータを入力として読み込む機能が実装されていないけどいない点と, ブラウザベースの JavaScript を使ったクライアントの処理で完結しているため, データ分析関連の処理をできる他言語のライブラリを使うことができない点が、問題点として挙げられます。 本研究では以下の三つの提案手法から問題点を解決していきたいと思います。 ---- まずは,提案手法の1つ目のAjax通信と呼ばれる。 サーバーサイドプログラミングの技術について説明していきたいと思います. 通常ウェブページは http 通信を使ってブラウザとサーバーでやりとりします。 Ajax通信を用いると、このブラウザに変わって画面遷移をせずにJavaScriptが、サーバーとやり取りすることができます。 今回であれば、クライアント側で読み込んだデータをajax 通信を介してサーバーで処理することができます。 ---- 次にデータ分析をするにあたって,機械学習ライブラリを用いるので説明していきたいと思います。 今回はAjax通信によってクライアントからのデータをサーバーで処理する時に common Gateway interface と呼ばれるプログラムを使います. これは CGI と言って Python で記述することができます。 pythonには以下の図のような多岐にわたるライブラリが存在し、その中でも機械学習ライブラリのサイキットラーンを今回使用しました。 ---- 次にこれまでなかったブロッコリーの入力データの読み込みを実装するにあたって、入力データの形式を揃えることにしました。 入力データは,すべてCSV に統一することにしました。 入力に必要なデータとしては、入力データ数と,説明変数と目的変数,データのラベル名とデータの型、対応するデータなどが必要です。 ---- ここからは作成したブロックを紹介していきます. まずは,ファイルを読み込むブロックです。 外観は以下のようになっていて、ファイルを選択してくださいから,クライアント側の入力データを選択して、 クライアント側での処理で入力データを JSON に置き換えブロック自体にデータを保持することができます。 ---- 次に,出力ブロックです.データ分析し終えた結果をクライアント側で、ダウンロードできるようにするためのブロックを作りました。 出力したいデータの出力形式に合わせて,以下の図にあるようなブロックを選んで,はめ込むことでそれにあった出力結果のデータをダウンロードすることができます。 ---- 最後にデータ分析系のブロックを紹介していきたいと思います. ブロックの外観は以下のようになっています.ブロックの中にファイルの読み込みブロックを入れて入力データを入れることで,そのデータをブロックにあった分析をすることができます。 今回作った回帰分析のブロックでは,出力として予測値の結果や回帰係数,切片,決定係数などの値を得ることができます. ---- 次に,紹介するクラスター分析のブロックも同様に入力データを読み込みます.出力としては,デンドログラムの画像を返すことにしました.サーバーからクライアントに結果の画像を送る際には, BASE 64型に変換してクライアント側に渡しています. なので,結果のダウンロードする時には画像のダウンロードブロックでエンコードして値を返すことで画像をダウンロードできます。 動画で実際にお見せしたいと思います。 ---- 考察としては今回ビジュアルプログラミング言語のブロッコリーを使って、プログラミング初心者にも扱いやすいも開発をすることができました。 今回作成したブロックを以下のように組み合わせることで,簡単にブロッコリーを使って, 回帰分析やクラスター分析などのデータ分析を行い,その結果を画像や CSV ファイルでダウンロードできるようにすることができました ---- 最後にまとめです 本研究はビジュアルプログラミング言語におけるデータ分析システムを開発しました. Ajax通信を使ってBlockly 上で線形回帰,非線形回帰,クラスター分析などの計算ができるようになりました. 今後の課題としては,外部に公開できるようにすることです. 1.今回作ったシステムを使って新たにデータ分析をするブロックを作ることはできるか 今回作ったシステムを使って,そこで新たなブロックを作成することはできませんが, Googleが公開しているBlocklyのサンプルにjavascriptを使った簡単な処理をする ブロックならブロックリー上で作成する ことはできます. 2.他にもデータ分析するブロックはありますか はい,時間の関係で紹介できませんでしたが,フーリエ変換して周波数成分を出すブロックと, 決定木分析を出すブロックと,主成分分析を出すブロックとベイズ推定を出すブロクと,線形計画問題 を出すブロックと,文章の類似度を出すブロック,そしてOCRのブロックなどを作成しました. 3.ブロックタイプを選んだ理由 もともとビジュアルプログラミング言語には,ブロックタイプやフロータイプ,独自ルールタイプなどがありましたが,そのなかでブロックタイプの Blocklyを使った理由としては,フリーのオープンソースのライブラリとして使えるというところと,ブロックを自作して作れるところでこのブロックり~を選びました.