fit parse解析佳明.fit 运动数据,模仿zwift数据展示

fitparse是一个用于解析 Garmin .FIT 文件的Python库。

本文中主要用到fitparse库来解析、提取数据;maplotlib库用来进行可视化绘制。

定义get_fit_list函数,其功能为:读取fit文件中的全部数据,并返回一个list。

使用fitparse.FitFile()函数读取fit文件,返回一个FitFile对象,使用list方法将其转换成list,其中每个元素为一个DataMessage对象。

python 复制代码
def get_fit_list(file_name):
    m_fit_file = fitparse.FitFile(file_name)
    return list(m_fit_file.get_messages())

获取数据list后,使用DataMessage.get_value()方法获取指定的字段。例如heartrate、 power、 cadence等。

python 复制代码
    m_fit_file = get_fit_list(file_name)
    for i in m_fit_file:
        m_heart_rate.append(i.get_value('heart_rate'))
        m_power.append(i.get_value('power'))

matplotlib参数进行初始设置:

python 复制代码
    matplotlib.rc('figure', figsize=(40, 10))  # 图片大小,单位厘米
    matplotlib.rc('font', size=20)  # 字体大小
    matplotlib.rc('axes', grid=False)  # 是否显示网格
    matplotlib.rc('axes', facecolor='white')  # 背景颜色
    plt.title('Entire Workout')
    plt.xlabel('Time(s)')  # 横坐标

划分功率区间zone1到zone7,将功率数据分类,具体分类见下表:

区间 含义 功率
zone1 主动恢复区 FTP的55%以下
zone2 有氧耐力区 FTP的55%~75%
zone3 节奏强度或高阶有氧区 FTP的75%~90%
zone4 乳酸强度区 FTP的90%~105%
zone5 最大摄氧量强度区 FTP的105%~120%
zone6 无氧能力强度区 FTP的120%~150%
zone7 神经肌肉能力区 FTP的150%以上

详细内容参考开元老师的文章:zhuanlan.zhihu.com/p/356084873

python 复制代码
data_len = len(m_power)
    z1 = [0] * data_len
    z2 = [0] * data_len
    z3 = [0] * data_len
    z4 = [0] * data_len
    z5 = [0] * data_len
    z6 = [0] * data_len
    z7 = [0] * data_len
    for i in range(len(m_power)):
        df = m_power[i]
        if df != None:
            if df >= 0 and df <= 0.5 * ftp:
                z1[i] = df
            if df > 0.5 * ftp and df <= 0.75 * ftp:
                z2[i] = df
            if df > 0.75 * ftp and df <= 0.9 * ftp:
                z3[i] = df
            if df > 0.9 * ftp and df <= 1.05 * ftp:
                z4[i] = df
            if df > 1.05 * ftp and df <= 1.2 * ftp:
                z5[i] = df
            if df > 1.2 * ftp and df <= 1.5 * ftp:
                z6[i] = df
            if df > 1.5 * ftp:
                z7[i] = df

绘制心率曲线图,并标记max heart rate:

ini 复制代码
    plt.plot(m_heart_rate, label='HeartRate', linewidth=1, color='red')
    max_HR = max(m_heart_rate)
    max_HR_Index = m_heart_rate.index(max_HR)
    max_hr = 'Max HR:' + str(max_HR)
    plt.annotate(max_hr, (max_HR_Index, max_HR), color='red')

根据功率区间按照不同颜色绘图:

ini 复制代码
    _x = np.arange(len(m_power))
    plt.bar(_x, z1, color='grey')
    plt.bar(_x, z2, color='royalblue')
    plt.bar(_x, z3, color='lime')
    plt.bar(_x, z4, color='orange')
    plt.bar(_x, z5, color='red')
    plt.bar(_x, z6, color='firebrick')
    plt.bar(_x, z7, color='darkred')
    plt.savefig("fit_analyze.jpg")

绘图结果:

相关推荐
子午13 小时前
【民族服饰识别系统】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积网络+resnet50算法
人工智能·python·深度学习
QxQ么么18 小时前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
执笔论英雄18 小时前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
小徐敲java20 小时前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
猫头虎20 小时前
如何解决 pip install 编译报错 fatal error: hdf5.h: No such file or directory(h5py)问题
人工智能·python·pycharm·开源·beautifulsoup·ai编程·pip
p***233620 小时前
python的sql解析库-sqlparse
数据库·python·sql
陈奕昆20 小时前
n8n实战营Day1课时3:高频节点解析+Webhook表单同步Excel实操
人工智能·python·n8n
深蓝电商API20 小时前
动态 Token、加密参数逆向全流程:从原理到实战破解
爬虫·python
qq_17082750 CNC注塑机数采20 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
java1234_小锋21 小时前
基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 切割车牌矩阵获取车牌字符
python·深度学习·cnn·车牌识别