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

绘图结果:

相关推荐
hello kitty w23 分钟前
Python学习(11) ----- Python的泛型
windows·python·学习
没有梦想的咸鱼185-1037-166329 分钟前
AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
人工智能·python·深度学习·机器学习·chatgpt·数据分析
测试19982 小时前
Selenium自动化测试+OCR-获取图片页面小说详解
自动化测试·软件测试·python·selenium·测试工具·ocr·测试用例
闲人编程2 小时前
使用MLflow跟踪和管理你的机器学习实验
开发语言·人工智能·python·机器学习·ml·codecapsule
panplan.top2 小时前
Tornado + Motor 微服务架构(Docker + 测试 + Kubernetes)
linux·python·docker·微服务·k8s·tornado
看兵马俑的程序员2 小时前
RAG实现-本地PDF内容加载和切片
开发语言·python·pdf
是梦终空3 小时前
计算机毕业设计240—基于python+爬虫+html的微博舆情数据可视化系统(源代码+数据库)
爬虫·python·pandas·课程设计·毕业论文·计算机毕业设计·微博舆情可视化
CodeJourney.3 小时前
Python开发可视化音乐播放器教程(附代码)
数据库·人工智能·python
爱学习的小鱼gogo4 小时前
pyhton 螺旋矩阵(指针-矩阵-中等)含源码(二十六)
python·算法·矩阵·指针·经验·二维数组·逆序
言之。4 小时前
Andrej Karpathy 演讲【PyTorch at Tesla】
人工智能·pytorch·python