Python - 绘制人体生物节律

news2024/9/20 6:05:25

文章目录

    • 项目说明
      • 关于人体生物节律
      • 用到的技术
    • 代码实现
      • 获取每月有多少天
      • 计算每天到生日过了多少天
      • 计算节律
      • 绘图
    • 结果


项目说明

这里仿照 http://www.4qx.net/The_Human_Body_Clock.php 做一个人体生物节律的计算和展示

关于人体生物节律

  • 百度/维基百科 解释
    https://zh.wikipedia.org/wiki/生理节律
    https://baike.baidu.com/item/人体生物节律/9883446

基本生物节律
情绪(28天)
影响:情绪、灵敏度、创造力

体力(23天)
影响:力量、韧性、耐久力、协调性

智力(33天)
影响:分析思考、逻辑、学习能力、记忆力


次级生物节律
精神(53天)
直觉(38天)
意识(48天)
美感(43天)


用到的技术

  • 计算日期间隔
  • 图表展示,使用 pyecharts;
    https://echarts.apache.org/zh/index.html
    https://github.com/pyecharts/pyecharts
    https://github.com/pyecharts/pyecharts-gallery

代码实现

获取每月有多少天

import time  
import datetime
import os 


def get_days_4month(y, m):

    if m < 1 and m > 12:  # 保证用户输入月份是在1-12月份
        print('输入日期错误')
        return 0

    t = 0  # t 变量用于表示闰年和平年的标志位
    list_maxm = [1, 3, 5, 7, 8, 10, 12]  # 创建大月的列表
    list_litem = [4, 6, 9, 11]  # 创建小月的列表
    if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
        t = 1
    if m in list_maxm:
        d = 31  # 计算大月的天数
    elif m == 2 and t == 0:
        d = 28  # 计算平年中2月的天数
    elif m == 2 and t == 1:
        d = 29  # 计算闰年中2月的天数
    elif m in list_litem:
        d = 30  # 计算小月的天数

    return d

计算每天到生日过了多少天

format  = '%Y-%m-%d'

# 2023-02-12
def get_gap(birthday, day):
 
    d1 = datetime.datetime.strptime(birthday , format)
    d2 = datetime.datetime.strptime(day , format)
    diff = d2 - d1
    # print(diff.days)
    return diff.days

计算节律


TL_DUR = 23
QX_DUR = 28
ZL_DUR = 33


def get_rhythm(gap):
    tl_circle = int(gap / TL_DUR)
    tl_day = gap % TL_DUR

    qx_circle = int(gap / QX_DUR)
    qx_day = gap % QX_DUR

    zl_circle = int(gap / ZL_DUR)
    zl_day = gap % ZL_DUR

    # print(tl_circle, tl_day, qx_circle, qx_day, zl_circle, zl_day)
    return tl_circle, tl_day, qx_circle, qx_day, zl_circle, zl_day

绘图


from pyecharts.charts import Line
import pyecharts.options as opts
from pyecharts.faker import Faker
import webbrowser

import math



def get_gap_rate(gap_day, dur):
    rate = math.sin(math.pi * 2 * float(gap_day)/dur)
    # return round(rate, 5)
    return rate


def get_month_rhythm(year, month):

    days = get_days_4month(year, month)
    print('-- days : ', days)  

    birthday = '1991-08-26' 

    tl_arr = []
    qx_arr = []
    zl_arr = []
    day_arr = []

    for i in range(days):
        # day = '{%d}-{%02d}-{%02d}'.format(year, month, i+1) 
        day = '%d-%02d-%02d'%(year, month, i+1) 

        gap = get_gap(birthday, day)
        print('-- ', day, gap)

        tl_circle, tl_day, qx_circle, qx_day, zl_circle, zl_day = get_rhythm(gap)
        # tl_arr.append(tl_day) 
        # qx_arr.append(qx_day) 
        # zl_arr.append(zl_day) 
        day_arr.append(str(i+1))

        tl_arr.append(get_gap_rate(tl_day, TL_DUR))
        qx_arr.append(get_gap_rate(qx_day, QX_DUR))
        zl_arr.append(get_gap_rate(zl_day, ZL_DUR))


    line4=(
        Line()
        .add_xaxis(day_arr)
        .add_yaxis('体力', tl_arr, is_smooth=True, is_symbol_show=False) 
        .add_yaxis('情绪', qx_arr, is_smooth=True, is_symbol_show=False)
        .add_yaxis('智力', zl_arr, is_smooth=True, is_symbol_show=False)

        .set_global_opts(title_opts=opts.TitleOpts(title=f'人体生物节律 {year}{month}月\n生日:{birthday}'))
    )

    file_path = 'rhythm.html'
    line4.render(file_path)
    webbrowser.open("file://" + os.path.realpath(file_path))
 
year, month = 2023, 2
get_month_rhythm(year, month)

结果

请添加图片描述


是不是和该网站的效果比较接近呢?在这里插入图片描述


伊织 2023-02-20(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DaVinci 偏好设置:系统 - 内存和 GPU

偏好设置 - 系统/内存和 GPUPreferences - System/Memory and GPU内存和 GPU Memory and GPU 选项卡提供了内存配置以及 GPU 配置的相关设置。内存配置Memory Configuration系统内存System Memory列出了所用电脑的总的可用内存。限制 Resolve 内存使用到Limit Resolve memory u…

Java中如何创建和使用对象?

要想使用一个类则必须要有对象。在Java程序中可以使用new关键字创建对象&#xff0c;具体格式如下&#xff1a;类名对象名称null; 对象名称new 类名();上述格式中&#xff0c;创建对象分为声明对象和实例化对象两步&#xff0c;也可以直接通过下面的方式创建对象&#xff0c;具…

从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践

导读&#xff1a;腾讯音乐内容库数据平台旨在为应用层提供库存盘点、分群画像、指标分析、标签圈选等内容分析服务&#xff0c;高效为业务赋能。目前&#xff0c;内容库数据平台的数据架构已经从 1.0 演进到了 4.0 &#xff0c;经历了分析引擎从 ClickHouse 到 Apache Doris 的…

H5使用微信JSSDK的wx.chooseImage进行多文件上传

背景&#xff1a;项目需要用H5做一个上传多图片合成的功能页面&#xff0c;这里我先做了调查&#xff0c;调查结果是安卓在微信内核不能使用传统的input file进行多文件上传&#xff0c;只能限制每次上传一张&#xff0c;ios则不限制&#xff0c;所以H5想在微信内核进行多图片上…

实验室三维磁场电磁铁的主要用途及技术指标

产品用途&#xff1a; 北京锦正茂科技有限公司自主研发的多极电磁铁以四极电磁铁居多&#xff0c;也有五极、六极、八极等多极的应用&#xff0c;主要应用于磁滞现象研究、磁化系数测量、霍尔效应研究、磁光实验、磁场退火、核磁共振、电子顺磁共振、生物学研究、磁性测量、磁性…

实力见“证”:Tapdata 技术创新与发展潜力广受认可

Tapdata 积极拥抱各种“不确定”&#xff0c;变中求新&#xff0c;只为呈现出更加好用的产品。 而 Tapdata 在专业领域不断深耕&#xff0c;持续打磨产品能力的同时&#xff0c;也收获了诸多来自外界的肯定&#xff0c;从用户到投资人&#xff0c;从生态伙伴到技术媒体以及官方…

【Mysql系列】Mysql之窗口函数

适用场景 窗口函数适用场景: 对分组统计结果中的每一条记录进行计算的场景下, 使用窗口函数更好, 注意, 是每一条&#xff1b;因为MySQL的普通聚合函数的结果(如 group by)是每一组只有一条记录。 准备数据 创建表 create table app_product (id bigint auto_in…

4次迭代,让我的 Client 优化 100倍!泄漏一个 人人可用的极品方案!

4次迭代&#xff0c;让我的HttpClient提速100倍 在大家的生产项目中&#xff0c;经常需要通过Client组件&#xff08;HttpClient/OkHttp/JDK Connection)调用第三方接口。 尼恩的一个生产项目也不例外。 在一个高并发的中台生产项目中。有一个比较特殊的请求&#xff0c;一次…

「文档数据库之争」MongoDB和CouchDB的比较

MongoDB和CouchDB都是基于文档的NoSQL数据库类型。文档数据库又称mdocument store&#xff0c;通常用于存储半结构化数据的文档格式及其详细描述。它允许创建和更新程序&#xff0c;而不需要引用主模式。移动应用程序中的内容管理和数据处理是可以应用文档存储的两个字段。Mong…

积分球原理及积分球类型介绍

标题积分球标准型积分球LED积分球均匀光源便携式高亮度积分球均匀光源微光积分球均匀光源积分球均匀光源iSphere高光谱响应光学积分球其他分类积分球 积分球原理:由于球体内整涂有白色漫反射材料的空腔球体&#xff0c;球壁上开有采样口&#xff0c;当待测样品光源进入积分球的…

Java之关于String字符串笔试面试重点

目录 一.关于字符串的常量池 1.关于字符串产生的三种方式 2.关于字符串的常量池 3.直接赋值法和new的方式产生对象的区别 二.关于intern方法 1.情况一(已经包含) 2.情况二(已经包含) 3.情况三(未包含) 4.情况四 三.关于字符串的不可变性 1.了解字符串的不可变性 2.Str…

python+selenium使用webdriver启动chrome出现闪退现象解决

这两天发现之前开发的爬虫程序出问题了&#xff1a;谷歌浏览器出现打开立即闪退的现象&#xff0c;代码未修改过&#xff0c;检查也没有任何问题&#xff01; 查看chrome浏览器发现版本更新了 ↑&#xff08;点击chrome浏览器右上角三个点&#xff0c;最下面帮助→Google Chr…

[软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)

文章目录1. 什么是面向对象方法学&#xff1f;它有哪些优点&#xff1f;2. 什么是“对象”&#xff1f;它与传统的数据有何异同&#xff1f;3. 什么是“类”&#xff1f;4. 什么是“继承”&#xff1f;5. 什么是模型&#xff1f;开发软件为何要建模&#xff1f;6. 什么是对象模…

[软件工程导论(第六版)]第8章 维护(复习笔记)

文章目录8.1 软件维护的定义8.2 软件维护的特点8.3 软件维护过程8.4 软件的可维护性8.5 预防性维护8.6 软件再工程过程维护的基本任务&#xff1a;保证软件在一个相当长的时期能够正常运行软件工程的主要目的就是要提高软件的可维护性&#xff0c;减少软件维护所需要的工作量&a…

C语言编程规范 第一部分

、代码总体原则 1、清晰第一 清晰性是易于维护、易于重构的程序必需具备的特征。代码首先是给人读的&#xff0c;好的代码应当可以像文章一样发声朗诵出来。目前软件维护期成本占整个生命周期成本的40%~90%。根据业界经验&#xff0c;维护期变更代码的成本&#xff0c;小型系统…

Spring Batch ItemProcessor组件-默认处理器

目录 引言 概念 默认ItemProcessor ValidatingItemProcessor&#xff1a;校验处理器 ItemProcessorAdapter&#xff1a;适配器处理器 ScriptItemProcessor&#xff1a;脚本处理器 CompositeItemProcessor&#xff1a;组合处理器 自定义ItemProcessor处理器 转视频版 引…

图数据库中的 OLTP 与 OLAP 融合实践

在一些图计算的场景下&#xff0c;我们会遇到同时需要处理 OLTP 和 OLAP 的问题。而本文就给了一个 OLTP 与 OLAP 融合实践的指导思路&#xff0c;希望给你带来一点启发。 Dag Controller 介绍 Dag Controller 是 NebulaGraph 企业版的图系统&#xff0c;经过反复测试无误后已…

rabbitMq安装(小短文)--未完成

rabbitMq是在activeMq的基础上创造的&#xff0c;有前者的功能&#xff0c;比前者强&#xff0c;属于后来居上。系统环境:windows10首先下载相关软件Erlang&#xff0c;因为他是这个语言写的。https://www.erlang.org/downloads然后安装&#xff0c;并且弄到环境变量里验证是否…

Robot Framework自动化测试---元素定位

不要误认为Robot framework 只是个web UI测试工具&#xff0c;更正确的理解Robot framework是个测试框架&#xff0c;之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API。比如笔者所处工作中&#xff0c;更多的是拿Robot framework来做数据库的接口测试&#xf…

Leetcode.2257 统计网格图中没有被保卫的格子数

题目链接 Leetcode.2257 统计网格图中没有被保卫的格子数 Rating &#xff1a; 1709 题目描述 给你两个整数 m和 n表示一个下标从 0开始的 m x n网格图。同时给你两个二维整数数组 guards和 walls&#xff0c;其中 guards[i] [rowi, coli]且 walls[j] [rowj, colj]&#xff…