设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间07 现在时间07 缓存数据 给自己一个目标,给自己一个希望,给自己一份爱、一份温暖,只为今天快乐,不为昨天烦恼,自己照顾好自己,我的朋友。

给自己一个目标,给自己一个希望,给自己一份爱、一份温暖,只为今天快乐,不为昨天烦恼,自己照顾好自己,我的朋友。

查看: 499|回复: 0

利用Python制作简易的核酸检测日历

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3143
  • 最近打卡:2023-08-27 04:25:52
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
361
主题
337
精华
0
金钱
4199
积分
723
注册时间
2022-12-25
最后登录
2025-3-13

发表于 2023-2-10 22:47:25 | 显示全部楼层 |阅读模式
我的坐标是深圳,2022年以来,大部分时候要求24小时,少部分时候要求48小时,更少的时候要求72小时,没有更长的情况。
本文根据我的核酸检测记录,制作成日历,将核酸检测记录可视化到日历中。

录入数据

核酸检测记录能查到的最早时间范围是一个月,以前的检测记录没有提前保存,所以先用8月份的数据制作日历。
查询8月份的检测记录,录入到代码中。
  1. # coding=utf-8
  2. from datetime import datetime
  3. # 核酸检测数据,1表示当天做了核酸,0表示当天未做核酸
  4. my_nucleic = {
  5.    'date': [datetime.strftime(datetime(2022, 8, i+1), '%Y-%m-%d') for i in range(31)],
  6.    'nucleic': [1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  7. }
复制代码
如果当天做了核酸,用1表示,如果当天未做核酸,用0表示。
8月的日期使用Python标准库datetime生成。

制作日历

本文使用Python库openpyxl在excel表格中生成日历。

1.使用openpyxl创建表格
  1. import openpyxl
  2. # 创建一个workbook对象,而且会在workbook中至少创建一个表worksheet
  3. wb = openpyxl.Workbook()
  4. # 获取当前活跃的worksheet,默认就是第一个worksheet
  5. ws = wb.active
复制代码
openpyxl是Python中用于读写excel文件的库,pip install openpyxl安装即可使用。

2.定义表格初始化和单元格设置的函数
  1. from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
  2. def init_sheet(ws):
  3.    for r in range(100):
  4.        for c in range(100):
  5.            ws.cell(row=r+1, column=c+1).fill = PatternFill('solid', fgColor='000000')
  6. def set_cell_style(ws, r, c, color):
  7.    ws.cell(row=r, column=c).fill = PatternFill('solid', fgColor=color)
  8.    ws.cell(row=r, column=c).font = Font(name="微软雅黑", size=14, bold=True)
  9.    ws.cell(row=r, column=c).alignment = Alignment(horizontal='right', vertical='center')
  10.    side = Side(style="medium", color="004B3C")
  11.    ws.cell(row=r, column=c).border = Border(top=side, bottom=side, left=side, right=side)
复制代码
定义一个将表格颜色填充成白色的函数,对表格初始化处理,将背景设置成纯白,日历看起来更美观。
定义一个用于处理单元格格式的函数,后面直接调用函数给单元格设置格式,方便重复使用。

3.实现日历
  1. import calendar
  2. # 将表格填充成白色
  3. init_sheet(ws)
  4. # 设置年月单元格的边框
  5. side = Side(style="medium", color="004B3C")
  6. for col in range(7):
  7.    ws.cell(row=1, column=col+1).border = Border(top=side, bottom=side, left=side, right=side)
  8. # 合并年月单元格
  9. ws.merge_cells(start_row=1, start_column=1, end_row=1, end_column=7)
  10. # 写入内容和设置格式
  11. ws.cell(row=1, column=1).value = '2022年8月'
  12. set_cell_style(ws, r=1, c=1, color='418CFA')
  13. # 写入星期一至星期日,并设置格式
  14. title_data = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
  15. for col in range(7):
  16.    ws.cell(row=2, column=col+1).value = title_data[col]
  17.    set_cell_style(ws, r=2, c=col+1, color='418CFA')
  18. # 获取一个月的天数和第一天是星期几
  19. monthday = calendar.monthrange(2022, 8)
  20. # 设置日历的日期
  21. col, row = monthday[0], 3
  22. for i in range(len(my_nucleic['date'])):
  23.    if col < 7:
  24.        ws.cell(row=row, column=col + 1).value = i+1
  25.        col += 1
  26.    else:
  27.        col = 0
  28.        row += 1
  29.        ws.cell(row=row, column=col + 1).value = i+1
  30.        col += 1
  31.    # 设置单元格格式
  32.    set_cell_style(ws, r=row, c=col, color='000000')
  33.    # 根据核酸结果填充颜色
  34.    if my_nucleic['nucleic'][i] == 1:
  35.        ws.cell(row=row, column=col).fill = PatternFill('solid', fgColor='009B3C')
  36. # 设置行高
  37. for i in range(1, row+1):
  38.    ws.row_dimensions[i].height = 30
  39. # 保存表格
  40. wb.save(filename='show_august_nucleic.xlsx')
  41. wb.close()
复制代码
日历效果:
234834emti6m4p4cpd5tcj.jpeg

可以看到,8月份我只有4天没有做核酸,大部分时间都是保持24小时。
代码实现介绍:

  • 先合并首行的前7列单元格,写入年月,然后在第二行从左到右写入星期一到星期日,并设置格式。
  • 使用Python的日历库calendar返回当前月第一天是星期几,然后确定日历的1号的起始位置。
  • 从1号开始,依次在excel中写入日期,当列到达星期日时,换行并回到星期一的列。
  • 根据当天是否做了核酸,给单元格填充背景颜色。本文中如果当天做了核酸,则日期的背景设置为绿色(24小时核酸码的颜色),如果未做核酸,则日期的背景设置为白色。
  • 最后将结果保存到excel文件中,打开excel文件即可看到制作的日历。

制作一年的日历

制作了一个月的日历后,继续扩展做一年的日历,先看一下效果:
234834jh8kzcmyiza5g888.jpeg

234834h7wx0meecx5epl5u.jpeg

实现方式介绍:

  • 数据补充,由于只能查到一个月的核酸记录,所以本文除2022年8月外,其他月份的数据用随机数生成。
  • 对制作一个月日历的代码进行封装,传入年和月,就可以生成任意一个月的日历。
  • 在excel文件中,自己设计一排展示几个月,本文一排展示3个月。并计算每个月日历的起始单元格位置。
  • 最后传入年份,依次将一年12个月的日历制作出来,展示在一个页面上。只要有数据,可以对任意一年的日历进行可视化。(代码较长,可在文末获取完整代码)
按年的另一种展示方式:
  1. from pyecharts import options as opts
  2. from pyecharts.charts import Calendar
  3. import pandas as pd
  4. nucleic_df = pd.DataFrame()
  5. for i in range(12):
  6.    month_nucleic = made_data(2022, i+1)
  7.    month_df = pd.DataFrame(month_nucleic)
  8.    nucleic_df = pd.concat([nucleic_df, month_df])
  9. data = [[row_data['date'], row_data['nucleic']] for row_index, row_data in nucleic_df.iterrows()]
  10. cal = Calendar(init_opts=opts.InitOpts(width='900px', height='500px'))
  11. cal.add(
  12.    '', data, calendar_opts=opts.CalendarOpts(range_="2022",
  13.                            daylabel_opts=opts.CalendarDayLabelOpts(first_day=1, name_map='cn'))
  14. ).set_series_opts(
  15.    label_opts=opts.LabelOpts(font_size=12)
  16. ).set_global_opts(
  17.    title_opts=opts.TitleOpts(title='核酸检测日历', pos_left='450', pos_top='0',
  18.        title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
  19.    visualmap_opts=opts.VisualMapOpts(
  20.        max_=1, min_=0, orient="horizontal", is_piecewise=False,
  21.        range_color=["white", "white", "green"], pos_top="250px", pos_left='50px'
  22.    ),
  23. ).render('my_nucleic.html')
复制代码
日历效果:
234835w86q3p98vvcz7q82.jpeg

pyecharts中的Calendar组件也可以实现日历可视化,不过格式比较固定,展示得比较密集。

  • 本文用python制作了核酸检测的日历,对核酸检测的天数进行可视化。
  • 本文用了两种方式实现一年的日历展示。
到此这篇关于利用Python制作简易的核酸检测日历的文章就介绍到这了,更多相关Python日历内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表