以前のバージョンはこちら
Blocly技術資料(2023/10以前)バックアップ
ビジュアルプログラミングによるデータ処理を行う。Blocklyというオープンソースのビジュアルプログラミングを用いる。使用するプログラミング言語は主にJavascriptである。
とりあえず、WSL2のインストールから始める。以下のサイト見ながらでできる。 https://docs.microsoft.com/ja-jp/windows/wsl/install-win10
一応ここにその内容を記す。まず、管理者権限でPowerShellを開き、次のコマンドを入力する。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
次に、同じくpowershellでwindowsのどのシステムを使用しているか次のコマンドで確認する。
systeminfo | Select-String "システムの種類" → x64 や ARM64 などが表示される
コマンドプロンプトの場合はこれ
systeminfo | find "システムの種類"
次にwindowsのバージョンとビルド番号を確認する。
Windows ロゴ キー + R キー を押して、「 winver 」と入力し、 [OK] を選択する。 (または、Windows コマンド プロンプトで ver コマンドを入力)。
上図が出るので、適切なバージョンを満たしているか確認する
WSL 2 をインストールする前に、" 仮想マシン プラットフォーム " オプション機能を有効にする必要がある。
管理者として PowerShell を開き、以下を実行する。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
PCを再起動して WSL のインストールを完了し、WSL 2 に更新する。
次にWSL2Linuxカーネル更新プログラムパッケージをダウンロードする。システムがx64の場合はx64、ARM64の場合はARM64をクリックする。
ダウンロード後、ダウンロードしたファイルを実行する。
次に、次のコマンドで、新しい Linux ディストリビューションをインストールする際の既定のバージョンとして WSL 2 を設定する。
wsl --set-default-version 2
次に、Ubuntu 20.04 LTSをMicrosoft Storeからインストールする。 下のリンクに行って入手を選択する。
複数のデバイスで使うか聞かれたら必要ないと答える。
その後、起動し、ユーザー名とパスワードを設定する。もちろん、どちらも覚えるか記録しておく。
ここから、Ubuntuで作業する。Ubuntuで次のコマンドを実行する。
sudo apt update sudo apt -yV upgrade
WSL2を再起動する(Ubuntuを閉じて再度開く)。再起動後、次のコマンドを実行する。
sudo apt install apache2 apache2 -v
以下のコマンドはpythonを使用するために必要な機能をインストールしている。
sudo apt install -y build-essential libffi-dev zlib1g-dev liblzma-dev libbz2-dev libreadline-dev libsqlite3-dev git net-tools libssl-dev
ここでWSL2(Ubuntu)を再起動。 次に以下のコマンドでpyenv本体のダウンロードとインストールをする。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
次に、以下のコマンドで.bashrcの更新をする。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc source ~/.bashrc
WSL2(Ubuntu)を再起動。再起動後に次へ
以下のコマンドでpyenvがインストールできたかを確認(pyenvはLinuxにおいて、Pythonの実行環境を管理するツール。つまりいろんなバージョンのpythonを管理する有能)
pyenv -v
以下のコマンドでpythonのインストール
pyenv install 3.8.5 # 例えば,version 3.8.5 pyenv versions # インストール済みのpyenvのバージョンを確認できる pyenv global 3.8.5
以下必要なライブラリのインストール
python -m pip install pyocr matplotlib pydotplus pulp pandas scikit-learn graphviz opencv-python docopt sudo apt install tesseract-ocr libtesseract-dev tesseract-ocr-jpn sudo apt-get dist-upgrade sudo apt-get install build-essential sudo apt-get update sudo apt-get install graphviz mecab libmecab-dev mecab-ipadic-utf8
cd ~ sudo apt install swig →エラー(11) sudo apt install python3-pip sudo pip3 install mecab-python3 sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
https://www.engineer-log.com/entry/2019/10/31/tesseract5-install
下記のライブラリは必要に応じてインストールする(専門ゼミでは飛ばす)
git clone https://github.com/neologd/mecab-ipadic-neologd.git cd mecab-ipadic-neologd sudo bin/install-mecab-ipadic-neologd → 所要時間約13分 cd /etc sudo vim mecabrc # ここで:set pasteをし,aを押し,以下にコピペで変更する dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd :wq で保存
cd git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git cd ~/opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D OPENCV_GENERATE_PKGCONFIG=ON .. make -j7 → 所要時間約7分 sudo make install
(11)「E: Unable to locate package swig」の表示で,swigのインストールができない
git clone https://github.com/swig/swig.git参考「https://askubuntu.com/questions/893932/sudo-apt-get-install-swig-on-ubuntu-14-04」
ダウンロードすべきファイルを以下のzipファイルにまとめたので、これをダウンロードし任意のフォルダに置く。
エクスプローラーのパスのところで、\\wsl$と入力しEnter。アクセス許可がないと言われたら許可する。
Ubuntu-20.04 > var > www > html Ubuntu-20.04 > usr > lib > cgi-bin簡単アクセスのため、両方を右クリックで「クイックアクセスにピン止めする」
「/var/www/html」内に先ほどダウンロードしたhtmlの中身を、「/usr/lib/cgi-bin」内にcgi-binの中身を入れる。
htmlにはサイトを構成するファイル、cgi-binにはpythonで動かすデータ処理に関するファイルが入っている
次に以下のchmodコマンドでファイルのアクセス権限を変更する
sudo chmod 755 /usr/lib/cgi-bin
sudo chmod 755 /usr/lib/cgi-bin/kaiki*.cgi
sudo chmod 755 /var/www/html
例題では「回帰分析ブロック」を動かすので、以下のコマンドで「kaiki~.cgi」の編集画面を開く
sudo nano /usr/lib/cgi-bin/kaiki_Analyze.cgi sudo nano /usr/lib/cgi-bin/kaiki_keisu.cgi sudo nano /usr/lib/cgi-bin/kaiki_yosoku.cgi上のコマンドで開いた後、以下の二つの部分のzetaというところを先ほど設定した自分のユーザー名に変更する
#!/home/zeta/.pyenv/shims/python
「Ctrl+X」→「y」→「Enter」で保存する。
次のコマンドでcgiモジュールを有効にできる。これはcgi-binに入っているファイルを実行するためのmodを有効にしている。
sudo a2enmod cgid
次に、CSVファイル入れるところ作る。
cd
mkdir kaiki
sudo chmod 777 kaiki
入れるとき拒否られたら次のコマンドをubuntuで。chmodで読み込みや書き込みを他の人からでもできるようにしている。
sudo chmod 777 /var/www/html
sudo chmod 777 /usr/lib/cgi-bin
cgi-binなかったら次のコマンド。cgi-binディレクトリを作成している
mkdir /usr/lib/cgi-bin
その後以下を実行。ファイルの権限を変えてる。755にするのは、この後のウェブ上のサイトから他のパソコンからでも使えるようにするため。(しかし書き込みはできない。これについて知りたかったらchmodについて調べて)
sudo chmod 755 /usr/lib/cgi-bin
sudo chmod 755 /usr/lib/cgi-bin/kaiki.cgi
python -m pip install pandas
python -m pip install scikit-learn
以下のコマンドでエディタ開ける。
sudo nano /usr/lib/cgi-bin/kaiki.cgi
上のコマンドで開いた後、以下の二つの部分のzetaというところを自分のUbuntuのユーザー名に変える
#!/home/zeta/.pyenv/shims/python
wine.to_csv('/home/zeta/kaiki/123456.csv', header=False, index=False)
「Ctrl+X」→「y」→「Enter」で保存する。
次のコマンドでCGIモジュールを有効にできる。これはcgi-binに入っているファイルを実行するためのmodを有効にしている。
sudo a2enmod cgid
次のコマンドをWSL2上で実行するとサーバーが立ち上がる。
sudo service apache2 start
自分のWSL2のIPアドレスを調べるためにWSL2上で次のコマンドを実行する。
ifconfig
WSL2のIPアドレスはeth0のinetのところに書かれているIPアドレスである。次に自分のWindowsでそのIPアドレスをGoogle Chromeに入力し移動すると、Blocklyを開くことができる。
以下のデータを用いる。
まず、「FILE_INPUT」から入力「CSV読み込み」ブロック、「ANALYZE→DIV1」から分析「回帰分析」ブロック(上図オレンジ)、「OUTPUT」から出力「CSV出力」ブロックを取り出す。
赤ブロックの「CSVファイルを選択してください」をクリックして、先ほどのcsvを入れる
中央の歯車をクリックし、ラベルリストに左のブロックのいずれかを入れる
単回帰or重回帰、回帰予測or回帰係数を選択したら、右上の「実行」をクリックする
以下2つの手順を行う
average.jsには実行ボタンを押したときの動きが定義されている。
平均値を出すブロックとconsole.logを出すブロックの定義の仕方が以下である。
average_block.jsには、ブロックの見た目と表示されたときの動作が定義されている。
平均値を出すブロックとconsole.logを出すブロックの定義の仕方が以下である。
index.htmlにはページの構成と使うjavascriptファイルが定義されている。
toolbox.xmlにブロックを書くことによって初めて使えるようになる。
こちらからデータを送ってそのデータに基づいてサーバで処理を行ない、結果を返すものをCGIという。今回は、CGIプログラムをpythonで作る。pythonを使う理由は、機械学習やデータ処理の部分を書くことが簡単だからである。以下がpythonで書かれた拡張子.cgiのプログラムである。
このプログラムを実行できるようにjavascript内で記述することで実行できる。 実行すると、単回帰分析ができる。
今回、入力出力に使うファイルの形式が決まっているので説明する。
まず、拡張子は.csvである。そしてファイルの中身は以下のようになっている。
このファイルの入力で動作して、この形式のファイルで出力するように、pythonのデータ分析等のプログラムを作成してほしい。
作ってほしいものは、回帰分析などのデータ分析ができるものである。とりあえず、pythonで出来るデータ分析を調べて、 通常のpythonで動かしてみる。できるだけ、csvファイルやjsonファイルを使っているものが好ましい。
そして、次に入力出力を上記で説明したcsvファイルに対応させて動作させる。
入出力を変更して動いたら.cgiのプログラムを作成して先ほどのpythonのコードをコピーペーストする。
pythonのcgiプログラム(といかajaxを使ってPOST通信で動かすときのpythonプログラム)は以下のようなプログラムの形にする必要がある。コメントに書いてあるように動作する。
kaiki_yosoku.cgi
cgiプログラムの上に以下のようなおまじないをつける。zetaの部分を自分の名前に変える。これは、上が自分の使うプログラミング言語の実行コマンド(今回はpython)を入力している。下が、このcgiプログラムの文字コードを記述する。UTF-8が楽なのでUTF-8を推奨する。
#!/home/zeta/.pyenv/shims/python # -*- coding: utf-8 -*-
これは、上が自分の使うプログラミング言語の実行コマンド(今回はpython)を入力している。下が、このcgiプログラムの文字コードを記述する。UTF-8が楽なのでUTF-8を推奨する。
そしてmoduleをimportした後のところに次のおまじないをつける。 追記:ガセでした。importの後から最後のおまじないの間なら動きます。
print("Content-type: application/json")
print("\n\n")
このおまじないは、ajax通信で送られてきたものがjson形式で書かれていることをcgiプログラムに認識させている。
そして下のコードに送られてきたデータが入る。
data = sys.stdin.read()
最後にクライアントに返すためのおまじないをつける。resultの部分がクライアントに送信するものである。JSONにエンコードしているのは、ajax通信ではjsonで送られてきたものはjsonで返信しなければならない掟があるからである。
print(json.JSONEncoder().encode(result))
print('\n')
ゼミ ブロッコリー
1.横井ページの添付ファイルから、最新版のブロックが入っているzipファイルとWine ~red4
.csvをダウンロードする。
2.エクスプローラーで「\\WSl$」を打つ。アクセス許可がないと言われたら許可する。エクスプローラーのどこにあるか
3.Ubuntu > var > www > html ...①
Ubuntu > usr > lib > cgi-bin...2⃣
両方を右クリックで「クイックアクセスにピン止めする」
4.Ubuntuを開いて、①のwwwまでアクセス(cd)する
sudo chmod 777 -R html
※「ls -l」を入力すると"-rwxrwxrwx"と表示されていれば大丈夫
2⃣も同様にする(libまでアクセス)
sudo chmod 777 -R cgi-bin
⑤Ubuntuで、Ubuntu > var > logにアクセスする。
sudo chmod 777 -R apache2
⑥apache2の中の「error.log」にAjax通信に関するエラーのみ表示される
⑦cgi-binの中にある
pip install matplotlibでインストール
sudo service apache2 restartで更新
⑭課題のブロックは3つのフィル