如何炫酷的做一张微信步数表

如何做一张类似于github commit的炫酷微信步数表

  1. 工具
    一部iPhone手机 ;python环境;pyecharts
  2. 到“健康”里导出数据,注意此时导出的是xml文件,而我们做数据处理一般会用csv。
    这里使用了 开源代码,直接下载名称为 applehealthdata.py 的脚本文件。然后,将之前下载好的 导出.xml 与该脚本文件放置在同一目录下方。为了防止报错,这里需要将 导出.xml 更名为 export.xml。接下来,使用 Python 2 执行该脚本:python applehealthdata.py export.xml。你会得到一系列csv文件。注意是Python 2 ,因为这个开源项目是很久之前的了。
  3. 处理步数文件
    找到StepCpunt.py文件,但是iphone记录步数是一天之中分好几次计数的,需要再处理一下文件,累加出一天的步数,用到了pandas。
  4. 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)
# print(day)

for x in df2:
    step.append(x)
# print(step)

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")

  1. 如果有必要的话,将html转换为png,pdf等格式
    pyecharts-snapshot
    这个snapshot pdf , eps,gif,png,gif都能转。这最后一步是需要的,因为会用到chromium内核。我推荐搭个vps+ssr,网上也有很多教程了。最后即可得到自己的步数图。
    如何炫酷的做一张微信步数表_第1张图片最终类似效果,我放的是random数据。

你可能感兴趣的:(笔记,python,数据分析,csv)