如何做一张类似于github commit的炫酷微信步数表
- 工具
一部iPhone手机 ;python环境;pyecharts - 到“健康”里导出数据,注意此时导出的是xml文件,而我们做数据处理一般会用csv。
这里使用了 开源代码,直接下载名称为 applehealthdata.py 的脚本文件。然后,将之前下载好的 导出.xml 与该脚本文件放置在同一目录下方。为了防止报错,这里需要将 导出.xml 更名为 export.xml。接下来,使用 Python 2 执行该脚本:python applehealthdata.py export.xml。你会得到一系列csv文件。注意是Python 2 ,因为这个开源项目是很久之前的了。 - 处理步数文件
找到StepCpunt.py文件,但是iphone记录步数是一天之中分好几次计数的,需要再处理一下文件,累加出一天的步数,用到了pandas。 - pyecharts展示
没有安装pyecharts的,pip3 install 安装一下。
import pandas as pd
from pyecharts.charts import Calendar
import datetime
from pyecharts import options as opts
df = pd.read_csv(
"path.csv")
df1 = df.loc[:, "endDate"]
df2 = df.loc[:, "value"]
day = []
step = []
for x in df1:
x = x.split(" ")[0]
day.append(x)
for x in df2:
step.append(x)
zip1 = list(zip(day, step))
zip1.sort(key=lambda x: x[0])
new_step = []
delete = []
tmp = 0
for i in range(1, len(zip1)):
if zip1[i][0] == zip1[i - 1][0]:
tmp += zip1[i - 1][1]
delete.append(i - 1)
else:
tmp += zip1[i - 1][1]
new_step.append(tmp)
tmp = 0
new_step.append(tmp)
print(new_step)
print(len(new_step))
day.sort()
for i in delete:
day[i] = 0
new_day = []
for x in day:
if x != 0:
new_day.append(x)
print(new_day)
print(new_day[-1])
print(len(new_day))
print(new_day.index("2019-01-01"))
print(new_day.index("2019-12-31"))
year_step = new_step[124:489]
print(len(year_step))
def calendar_interval() -> Calendar:
begin = datetime.date(2019, 1, 1)
end = datetime.date(2019, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), year_step[i]]
for i in range(0, (end - begin).days + 1, 1)]
calendar = (
Calendar(init_opts=opts.InitOpts(width="1200px")).add(
"日历", data, calendar_opts=opts.CalendarOpts(range_="2019")).
set_global_opts(
title_opts=opts.TitleOpts(title="2019步数统计"),
visualmap_opts=opts.VisualMapOpts(
max_=25000,
min_=0,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
),
)
)
return calendar
calendar_interval().render("./calendar.html")
- 如果有必要的话,将html转换为png,pdf等格式
pyecharts-snapshot
这个snapshot pdf , eps,gif,png,gif都能转。这最后一步是需要翻墙的,因为会用到chromium内核。翻墙我推荐搭个vps+ssr,网上也有很多教程了。最后即可得到自己的步数图。
最终类似效果,我放的是random数据。