#はじめに
現在0歳児の育児にぴよログアプリを活用しています。
このアプリでは、スマホで入力した内容をテキストでエクスポートすることができます。
このデータを使って何かできないだろうか と思ったのが発端です。
#目的
ぴよログのアプリの情報を使い、赤ちゃんの成長を客観的データに基づき見える化し、「お!育ってる育ってる!」とグラフを眺めることで、育児のモチベーションを上げる。
(グラフを見てモチベが上がる人は限られる気もするが)
#処理フロー
ぴよログ → GAS → Raspberry pi(Shell + Python) → LINE
ぴよログからエクスポートしてGmailに送信すると、自動的にグラフ化された結果がLINEに送信されます。
※ぴよログ→GASだけで完結可能ですが、眠っていたラズパイとShell, Pythonの勉強がしたかったので、この構成にしています。
※なお本業はH/Wエンジニアです。S/Wはド素人。
#ぴよログのエクスポート形式
ぴよログからエクスポートされたテキストデータ(1日分)はこんな感じ。
【ぴよログ】2020年5月
2020/5/1(金)
子供の名前 (0歳xxか月xx日)
02:25 起きる(3時間15分)
02:30 おしっこ
02:50 寝る
03:50 おしっこ
05:40 起きる(2時間50分)
05:55 ミルク 130ml
~略~
22:45 寝る
母乳合計 左 0分 / 右 0分
ミルク合計 9回 840ml
睡眠合計 13時間40分
おしっこ合計 9回
うんち合計 1回
#見える化する内容
1~3の傾向がビジュアルで分かるように簡単なグラフにします。
- 1日で1度にミルクを最大で何ml飲んだか?
- 1日で合計どれくらい飲んでいるか?
- 現在まで累積で何ml飲んだか?
#ラズパイでの処理
主要部分のみコードを抜粋。
###必要な項目のみリスト化
# ぴよログのミルク,うんち等の項目のみをリストにする
def get_piyolog_all_items(texts):
days = []
all_items = []
for month in texts:
# textを改行で分割
lines = month.splitlines()
# numpy配列にする
array = np.array(lines)
for index, item in enumerate(array):
# 日付取得
if item == "----------" and index < len(array) - 1:
day = array[index + 1]
days.append(day)
# 空行無視&記録したい項目かを時刻(hh:mm)で判断
if item != "" and check_item(item):
# 日時と項目を配列に格納
day_items = [day] + item.split()
all_items.append(day_items)
return all_items
###ミルクの最大値・累積値を計算
def get_each_day_milks(select, days, all_items):
for item in all_items:
# ミルクの要素を抽出
if item[2] == "ミルク":
milk = item[3]
milk = int(milk.replace("ml", ""))
all_milks.append([item[0], item[1], milk])
for day in days:
for array_milk in all_milks:
# 1日の最大ミルク量
if day == array_milk[0] and day_milk_max < array_milk[2]:
# 最大値をいったん保存
tmp_max_milk = array_milk
# その日の最大値を更新
day_milk_max = array_milk[2]
# 1日の合計ミルク量
if day == array_milk[0]:
day_milk_sum += array_milk[2]
# 0は記録しない
if tmp_max_milk != 0:
# 最大ミルクリストに追加
max_milks.append(tmp_max_milk)
# 合計ミルクリストに追加
sum_milks.append([day, "", day_milk_sum])
# 累積ミルクリストに追加
all_milk_acc += day_milk_sum
acc_milks.append([day, "", all_milk_acc])
# 初期化
day_milk_max = 0
day_milk_sum = 0
# return
if select == "max":
return max_milks
elif select == "sum":
return sum_milks
elif select == "acc":
return acc_milks
else:
return "error!"
###LINEにPOST
# LINEに画像を送信する
def send_picture_to_line(PICTURE_PATH):
url = LINE_URL
token = LINE_TOKEN
headers = {"Authorization": "Bearer " + token}
# メッセージ
payload = {"message": "send picture"}
# 画像
files = {"imageFile": open(PICTURE_PATH, "rb")}
# post
requests.post(url, data=payload, headers=headers, files=files)
#結果
###1日で飲んだ最大のミルク量
新生児期(生後0日~30日)は著しくミルクを飲む量が増えていることがわかりますね!育ってる!
###1日で飲んだミルクの合計値の推移
こちらも新生児期を過ぎると、ほぼ毎日1000ml飲んでいるぐらい。
最終日がガクッと下がっているのは、日の途中のデータだったから。
###これまでに飲んだミルクの累計値
当然ですが右肩上がりです。当たり前のグラフかもしれませんが、こうやって順調に右肩上がりである ということを確認できるだけでも、ママやパパは安心できる。
傾きが緩やかになってきたら、体調が悪い?と気づけるかも。
#その他
睡眠時間の合計や睡眠時間の平均値の推移も見える化すると成長がわかるかもしれない。
生後80日で60000ml=60000g飲んでいる。体重は我が子の場合は3500g増えたから、
60000-3500=56500gの大半はおしっことうんちになったと思われる。