はじめに
こちらの投稿を拝見しました。
-
100回すごいなぁと思いつつ、自分の献血のデータを確認してみたところ、30回弱といったところでした。100回には遠く及ばないですが、データを表示する・調べるにはまぁまぁの数かなと思いました。
-
また、以前からグラフや数字がかっこよく並ぶダッシュボード(管理画面)を作成したいと思っていましたが、データとして何を表示したらよいかと思案していました。これはなかなかいいデータではないかと思ったので、献血データを一画面でグラフで見られるようにしたいと思います。
-
Vue.jsのテンプレートをダウンロードして必要なところを変更しながら作成してみたいと思います。Google検索で、「Vue.js ダッシュボード テンプレート」といった感じで調べればいい感じのものがたくさん見つかります。
今回使用したのはこちら
https://coreui.io/vue/
# clone the repo
$ git clone https://github.com/coreui/coreui-free-vue-admin-template.git CoreUI-Vue
# go into app's directory
$ cd CoreUI-Vue
# install app's dependencies
$ npm install
# serve with hot reload at localhost:8080
$ npm run serve
データ
-
献血サイトを確認しながらGoogleSpreadSheetに、データを作成。(ここは先の記事を参考にスクレイピングでもOKかと思いますが、私は手で作成しました)
-
自分の検査結果をベースに、適当に中身の数値を変更してサンプルデータ とします。
-
データの更新を自動で実施したい場合は、参考記事のとおり、スクレイピングするくらいしか思いつきません。
-
そこまで頻度よく更新しなくてもよい場合は、献血をするたびにスプレッドシートを手で更新でもよいかなとは思います。(今後どのくらいの頻度で献血するかにもよりますが、値を更新すればグラフに反映しますので、そのあたりはモチベーションになるかもしれません)
デモサイト
デモサイトはこちら
(献血データは、自分の結果をベースに適当に数値を変更しているサンプルデータ)
①Dashboard:現在の献血回数・100回まであと何回・前回の献血日・血圧/脈拍に加えて各検査結果データ15グラフ
②生化学検査結果:7グラフ(説明付き)
③血球計数検査結果:8グラフ(説明付き)
コード(APIによるデータ取得とグラフパラメータセット部分)
グラフデータは、親コンポーネントでaxiosにて一括で取得します。また、各グラフのタイトルや説明、グラフに必要な値をパラメータ化して、オブジェクトに持たせておき、子コンポーネントに渡す形です(Propsを使用する)。
サンプル
<script>
export default {
// 省略
data () {
return {
// 省略
}
},
created () {
axios.get(apiurl).then(response => {
this.apidata = response.data.values
this.makeInfo() // ヘッダー情報・説明テキストの取得設定
})
this.dval1 = {
label1: '血圧(最高)', colum1: 3,
label2: '血圧(最低)', colum2: 4,
label3: '脈拍', colum3: 5,
maxGraph: 180,
minGraph: 30
}
this.dval2 = {
title:'(2) ALT(GPT)', label: 'ALT(GPT)', colum: 6, maxValue: 49, minValue: 8, maxGraph: 70, minGraph: 0
}
this.dval3 = {
title:'(3) γ-GTP', label: 'γ-GTP', colum: 7, maxValue: 68, minValue: 9, maxGraph: 80, minGraph: 0
}
// 以下省略
},
methods: {
// 説明テキストの取得設定
makeInfo () {
for (var i = 1; i <= this.apidata.length; i++) {
if (i === 4) {
var k = 1
for (var j = 0; j <= 20; j++) {
if (j > 5) {
var additem = {
id: k,
text: this.apidata[3][j]
}
this.items.push(additem)
k = k + 1
}
}
}
// 最終行の回数と日付の設定
if (i === this.apidata.length) {
this.numbertime = this.apidata[i-1][0]
this.lastdate = this.apidata[i-1][1]
this.moretime = 100 - this.numbertime
}
}
}
}
}
</script>
まとめ
-
やはり数字の羅列よりは、グラフのほうがわかりやすく、注意すべき指標もパッと見で判断できます。
-
献血サイトでもこんなグラフが見れたらよいな、と思うような画面をつくることができました。(本家は直前3回分しか見れません。今後すべてのデータが見れようになればいいですが)
-
ダッシュボードを作ってみたかったのですが、よい題材がなかったので、とてもよい例になりました。
最後に
- 目指せ献血100回