当前位置: 首页 > news >正文

Python - 绘制人体生物节律

文章目录

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


项目说明

这里仿照 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 0t = 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 = 1if 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 = 33def get_rhythm(gap):tl_circle = int(gap / TL_DUR)tl_day = gap % TL_DURqx_circle = int(gap / QX_DUR)qx_day = gap % QX_DURzl_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 webbrowserimport mathdef get_gap_rate(gap_day, dur):rate = math.sin(math.pi * 2 * float(gap_day)/dur)# return round(rate, 5)return ratedef 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.lryc.cn/news/13638.html

相关文章:

  • 【NVMEM子系统】二、NVMEM驱动框架
  • 小波神经网络(WNN)的实现(Python,附源码及数据集)
  • 商标干货!所有企业都值得收藏!
  • 4次迭代,让我的 Client 优化 100倍!泄漏一个 人人可用的极品方案!
  • 并查集(高级数据结构)-蓝桥杯
  • 你是真的“C”——C语言详解求两个正数最小公倍数的3种境界
  • 【java】Spring Cloud --Feign Client超时时间配置以及单独给某接口设置超时时间方法
  • spark代码
  • 利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理
  • 星河智联Android开发
  • 【C++】关联式容器——map和set的使用
  • Promise的实现原理
  • 【MFC】数据库操作——ODBC(20)
  • 旺店通与金蝶云星空对接集成采购入库单接口
  • Linux基础-学会使用命令帮助
  • MyBatis 之四(动态SQL之 if、trim、where、set、foreach 标签)
  • PAT (Advanced Level) Practice 1006 Sign In and Sign Out
  • Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView
  • Windows PowerShell中成功进入conda虚拟环境
  • 【C++】类与对象理解和学习(中)
  • 每日英语学习(11)大英复习单词和翻译
  • x79主板M.2无法识别固态硬盘
  • 配置Tomcat性能优化
  • Hive3 安装方式详解,datagrid自定义驱动连接hive
  • 约束优化:约束优化的三种序列无约束优化方法(罚函数法)
  • 你真的会做APP UI自动化测试吗?我敢打赌百分之九十的人都不知道这个思路
  • GIT:【基础三】Git工作核心原理
  • 【1.12 golang中的指针】
  • 十五.程序环境和预处理
  • 高并发系统设计之负载均衡