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

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

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

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

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

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等。


    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参数进行初始设置:

    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%以上

详细内容参考开元老师的小课堂:如何划分自行车功率训练强度区 - 知乎Note:本文引自我们的公号“LOCOMO耐力运动研究院”: 如何划分功率训练强度区上期我们介绍了FTP的定义及测试方法。今天来聊一聊有了FTP之后该做什么?其实通常来说,当我们测好FTP,会把其当做一个基准值,由此就…https://zhuanlan.zhihu.com/p/356084873

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:

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

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

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

绘图结果:

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个POCO中Parse解析复杂JSON格式数据的示例代码: 假设我们有以下JSON格式的数据: ```json { "name": "John", "age": 30, "address": { "street": "123 Main St", "city": "Anytown", "state": "CA", "zip": "12345" }, "phoneNumbers": [ { "type": "home", "number": "555-555-1234" }, { "type": "work", "number": "555-555-5678" } ] } ``` 我们可以定义一个POCO类来表示这个JSON数据: ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } public List<PhoneNumber> PhoneNumbers { get; set; } } public class Address { public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Zip { get; set; } } public class PhoneNumber { public string Type { get; set; } public string Number { get; set; } } ``` 然后,我们可以使用POCO中的Parse方法来解析JSON数据: ```csharp string json = @"{ ""name"": ""John"", ""age"": 30, ""address"": { ""street"": ""123 Main St"", ""city"": ""Anytown"", ""state"": ""CA"", ""zip"": ""12345"" }, ""phoneNumbers"": [ { ""type"": ""home"", ""number"": ""555-555-1234"" }, { ""type"": ""work"", ""number"": ""555-555-5678"" } ] }"; Person person = Person.Parse(json); ``` 在POCO类中,我们可以定义一个静态的Parse方法来解析JSON数据: ```csharp public static class JsonParser { public static T Parse<T>(string json) { return JsonConvert.DeserializeObject<T>(json); } } public class Person { public string Name { get; set; } public int Age { get; set; } public Address Address { get; set; } public List<PhoneNumber> PhoneNumbers { get; set; } public static Person Parse(string json) { return JsonParser.Parse<Person>(json); } } public class Address { public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Zip { get; set; } } public class PhoneNumber { public string Type { get; set; } public string Number { get; set; } } ``` 这样,我们就可以使用POCO中的Parse方法来解析复杂的JSON格式数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值