江崎? ライフログをまとめたcsvからhtmlを編集する
1.センサからラズパイで生体・環境データを取得
2.生体・環境データをライフログとしてクラウドに保存
3.PCでライフログをcsvファイルに書き込み、保存
4.実行コードでcsvファイルからデータを搾取
5.とってきたデータをもとに処理
6.出力したコーピング表示テキスト及びhtmlの作成
7.htmlの公開設定
8.別端末から閲覧
1からやるとIoTから始めなければいけないので今回はライフログcsvファイルをあらかじめ用意し,4から始める。
最終的に図のhtmlが別端末からみれればOK(実際の数値や文章は違うかも)
#ref(): File not found: "1.jpg" at page "ライフログからコーピングhtmlを作成"
・ライフログ(3日間で研究室の各場所1分程度ぐるぐるした)
開いてみるのは大丈夫ですが絶対に書き加えないでください。絶対に上書き保存しないでください
・実行コード
・決定木実行コード
・決定木用csvファイル
これらのファイルを保存しモジュールをpip installしまくった後,processing_data_1.pyを実行すると以下の出力とデンドログラムが得られ、htmlがedgeで開かれる。
1.ライフログcsvファイルから行のラベルを作って読み込む
2.csvファイルのうちGSR、心拍、マイクラベル、時刻のリストを作成
3.デンドログラム制作。マイクラベルがある要素にはそのマイクラベルも表示
4.コマンドプロンプトに各データのクラスター番号配列を出力(数字はデンドログラムの表示順)
ユーグリッド距離2000で仕分けている。2000以内は同じグループとみなす。
このクラスター番号は行動ごとに与えられた番号と認識しておいてください
5.変数にテキトーな文字列を入れてhtmlファイルを作成
6.デンドログラムを表示。htmlをedgeで開く
ユーグリッド距離2000で分けた結果ライフログは7つのクラスターに分けられた.デンドログラムはその7つを色分けしている.
デンドログラムは左からクラスターごとに,距離が近い順に並べられている.
クラスターの中に,マイクラベルが存在するライフログが一つは存在する.他はマイクラベルがない.
出力したクラスター配列は時系列である.番号はデンドログラムの左からクラスターごとに順に振り分けられる.
つまりクラスター配列の最初の数字は7なのでデンドログラムでいう右端の緑色に当たる.
よってライフログの序盤10個のデータは会議室のデータと分かる.
逆に配列の終盤は6が続いている.dん度ログラムから黒色,パソコン作業とわかる
よって(ライフログ内では)現在コイツはパソコンパチパチしていることになる.
さらに言うとライフログは約5秒に一回取得する.配列では6が30個以上続いているのでコイツは2分半ぐらいパチパチしていると分かる。
最終的に以下を処理
3人組(A,b,c)で分かれて7つの変数を出力させる。
暇なったらDの応用やってください
今回用意したライフログで表示できたら確認用の研究用ライフログでも試す?
| 担当 | A | B | B | A | C | C | A | D |
| コード変数 | now_time | location | situation | total_time | stress_data | state | cope | figure |
| html | Today | 場所 | 状況 | 経過時間 | ストレス予測値 | 状態 | 指令 | 画像 |
datatimeは時間を扱うライブラリ。
group(クラスター番号)配列は時系列なのでどの行動がどれだけ続いているかが分かる。
ライフログからはだいたい2分くらいと思われる。
行動経過時間(total_time)はgroup配列をもとに行動が開始された時刻(start_time)と最新の時刻(now_time)を単純に引き算すれば求められる
コーピングに関しては本来はストレス予測値も参考にするが経過時間をもとにコーピング内容を変える
今回は基準を「1分」とし経過時間(total_time)が1分以上だった場合指令(cope)を発動する(未満だったら「なし」と表示)
指令は「経過時間が○○で、行動は○○なので、○○しなさい」の形式で、○○の部分はif文で細かく仕分け。
今回のライフログの直近の行動は「パソコン作業」なのでそれに応じたストレス対策法をググってひょうじさせる
◎余裕があったら現在の行動よりひとつ前の行動に対しても同じ処理をしてみる
クラスター番号から最新の行動が何か調べる
1.group配列をさかのぼり,最新のクラスター番号と一致する、かつ、マイクラベルが存在する時
2.そのマイクラベルを出力し、locationとsituationに分割する。(マイクラベルは必ず2単語になるようにしてある)
この際,マイクラベルにはほとんどがnanというfloat型の値が入っている(というか値がない)
予測に使うのはGSRと心拍、そして自己評価のストレス値(1,5,8)
まずpipでsklearnをインストールし、決定木を可視化するためにgraphvizをインストールする必要がある。
http://ruby.kyoto-wu.ac.jp/info-com/Softwares/Graphviz/
まずdecision_tree.pyのpathを指定後、実行する。同じフォルダにtree.pngという決定木画像が作られる。一応最初の状態でもモデルは作られてる
コードでは、GSR
GSR(G)と心拍(S)を説明変数、ストレス値(T)を目的変数としている
このコードを関数として編集し直し、引数(最新のGSR、心拍)に対し予測値(ストレス値)を出力するようにする
ちなみになんかなっげーエラー[-i]とかがでたら引数と目的変数がマッチしていないと思われる
processing_data_1.pyではGSRと心拍のデータをリスト化してあるのでその値を関数にぶっこむ
これで最新値の(=現在)のstress_dataがわかる
stress_dataに応じてstateを決定する。(1だったら”健康”みたいな)
人間は文字羅列よりわかりやすいロゴを見せられた方が危険度を認知しやすい。
そこでコーピング文章の最後に予測値によって違う図(3種を)見せる。
※追記やり方判明した
1.3種の図を用意する
2.stateの値でstr型変数「figure」を適切な図の名前に変更する
3.html編集の部分で[<img src=' + figure + ' width="60">]ってかく
(例)
3人とも実行できたら誰か1人で3人分のコードをコピペしてまとめて実行し,最初の図のような全表示のhtmlを表示させる。
それができたら以下の通りISSで設定し別端末でもみれるようにする。
1.PC(Windowsの場合)htmlがある📁のパスを通す.
Internet Information service (IIS)のDefault WebSiteの「機能ビュー」の「詳細設定」で📁物理パスを設定.
さらに「既定のドキュメント」に追加.
2.こうするとPCと同一Wi-Fi内でのみ「http://(PCの物理アドレス)」でグラスにhtmlが表示される.
・IISの設定