diff --git a/app/main.py b/app/main.py index 1bf8acb..3c0bc3b 100644 --- a/app/main.py +++ b/app/main.py @@ -1,39 +1,69 @@ +# sourcery skip: list-comprehension +import pandas as pd import plotly.express as px import json import streamlit as st +from datetime import (datetime, + timedelta) from pathlib import Path data_dir = Path(__file__).resolve().parent.parent / 'data' -st.set_page_config(page_title='Health Data Visualization', - page_icon=':bar_chart:', - layout='wide') +st.set_page_config(page_title = 'Health Data Visualization', + page_icon = ':bar_chart:', + layout = 'wide') with open(data_dir / 'huawei_health_data.json') as f: data = json.load(f) heart_rate = [] -for i in range(len(data)): - if data[i]['type'] == 7: - heart_rate.append(float(data[i]['samplePoints'][0]['value'])) +for d in data: + if d['type'] == 7: + heart_rate.append( + { + 'rate': float(d['samplePoints'][0]['value']), + 'time': (datetime.fromtimestamp( + int(str(d['samplePoints'][0]['endTime'])[:10]) + ) + timedelta( + hours = int(data[0]['timeZone'][1:].replace('0', '')) + ) + ).strftime("%d-%m-%Y %X") + } + ) + +heart_rate = pd.DataFrame(heart_rate) +x = heart_rate['time'] +y = heart_rate['rate'] st.sidebar.header('Split Data:') average_number = st.sidebar.number_input( f'Amount of data split (0 - {len(heart_rate)-1}): ', - step=1, - min_value=0, - max_value=len(heart_rate)-1 + step = 1, + min_value = 0, + max_value = len(heart_rate)-1 ) if average_number > 1: heart_rate2 = [] + rates = list(y) - for i in range(0, len(heart_rate), average_number): - t = heart_rate[i:i + average_number] + for i in range(0, len(rates), average_number): + t = rates[i:i + average_number] heart_rate2.append(sum(t) / len(t)) - heart_rate = heart_rate2 + x = range(len(heart_rate2)) + y = heart_rate2 st.plotly_chart( - px.line(x=range(len(heart_rate)), y=heart_rate) + px.line( + x = x, y = y + ) + .update_layout( + xaxis = dict( + rangeslider = dict( + visible = True + ), + type = "-" # ['-', 'linear', 'log', 'date', 'category', 'multicategory'] + ) + ) ) \ No newline at end of file