网络编程
位置:首页>> 网络编程>> Python编程>> 利用Python制作简易的核酸检测日历

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

作者:小斌哥r  发布时间:2022-02-04 00:55:53 

标签:Python,日历

我的坐标是深圳,2022年以来,大部分时候要求24小时,少部分时候要求48小时,更少的时候要求72小时,没有更长的情况。

本文根据我的核酸检测记录,制作成日历,将核酸检测记录可视化到日历中。

录入数据

核酸检测记录能查到的最早时间范围是一个月,以前的检测记录没有提前保存,所以先用8月份的数据制作日历。

查询8月份的检测记录,录入到代码中。

# coding=utf-8
from datetime import datetime
# 核酸检测数据,1表示当天做了核酸,0表示当天未做核酸
my_nucleic = {
  'date': [datetime.strftime(datetime(2022, 8, i+1), '%Y-%m-%d') for i in range(31)],
  '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]
}

如果当天做了核酸,用1表示,如果当天未做核酸,用0表示。

8月的日期使用Python标准库datetime生成。

制作日历

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

1.使用openpyxl创建表格

import openpyxl
# 创建一个workbook对象,而且会在workbook中至少创建一个表worksheet
wb = openpyxl.Workbook()
# 获取当前活跃的worksheet,默认就是第一个worksheet
ws = wb.active

openpyxl是Python中用于读写excel文件的库,pip install openpyxl安装即可使用。

2.定义表格初始化和单元格设置的函数

from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
def init_sheet(ws):
  for r in range(100):
      for c in range(100):
          ws.cell(row=r+1, column=c+1).fill = PatternFill('solid', fgColor='000000')
def set_cell_style(ws, r, c, color):
  ws.cell(row=r, column=c).fill = PatternFill('solid', fgColor=color)
  ws.cell(row=r, column=c).font = Font(name="微软雅黑", size=14, bold=True)
  ws.cell(row=r, column=c).alignment = Alignment(horizontal='right', vertical='center')
  side = Side(style="medium", color="004B3C")
  ws.cell(row=r, column=c).border = Border(top=side, bottom=side, left=side, right=side)

定义一个将表格颜色填充成白色的函数,对表格初始化处理,将背景设置成纯白,日历看起来更美观。

定义一个用于处理单元格格式的函数,后面直接调用函数给单元格设置格式,方便重复使用。

3.实现日历

import calendar
# 将表格填充成白色
init_sheet(ws)
# 设置年月单元格的边框
side = Side(style="medium", color="004B3C")
for col in range(7):
  ws.cell(row=1, column=col+1).border = Border(top=side, bottom=side, left=side, right=side)
# 合并年月单元格
ws.merge_cells(start_row=1, start_column=1, end_row=1, end_column=7)
# 写入内容和设置格式
ws.cell(row=1, column=1).value = '2022年8月'
set_cell_style(ws, r=1, c=1, color='418CFA')
# 写入星期一至星期日,并设置格式
title_data = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
for col in range(7):
  ws.cell(row=2, column=col+1).value = title_data[col]
  set_cell_style(ws, r=2, c=col+1, color='418CFA')
# 获取一个月的天数和第一天是星期几
monthday = calendar.monthrange(2022, 8)
# 设置日历的日期
col, row = monthday[0], 3
for i in range(len(my_nucleic['date'])):
  if col < 7:
      ws.cell(row=row, column=col + 1).value = i+1
      col += 1
  else:
      col = 0
      row += 1
      ws.cell(row=row, column=col + 1).value = i+1
      col += 1
  # 设置单元格格式
  set_cell_style(ws, r=row, c=col, color='000000')
  # 根据核酸结果填充颜色
  if my_nucleic['nucleic'][i] == 1:
      ws.cell(row=row, column=col).fill = PatternFill('solid', fgColor='009B3C')
# 设置行高
for i in range(1, row+1):
  ws.row_dimensions[i].height = 30
# 保存表格
wb.save(filename='show_august_nucleic.xlsx')
wb.close()

日历效果:

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

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

代码实现介绍:

  •  先合并首行的前7列单元格,写入年月,然后在第二行从左到右写入星期一到星期日,并设置格式。

  •  使用Python的日历库calendar返回当前月第一天是星期几,然后确定日历的1号的起始位置。

  •  从1号开始,依次在excel中写入日期,当列到达星期日时,换行并回到星期一的列。

  •  根据当天是否做了核酸,给单元格填充背景颜色。本文中如果当天做了核酸,则日期的背景设置为绿色(24小时核酸码的颜色),如果未做核酸,则日期的背景设置为白色。

  •  最后将结果保存到excel文件中,打开excel文件即可看到制作的日历。

制作一年的日历

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

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

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

实现方式介绍:

  •  数据补充,由于只能查到一个月的核酸记录,所以本文除2022年8月外,其他月份的数据用随机数生成。

  •  对制作一个月日历的代码进行封装,传入年和月,就可以生成任意一个月的日历。

  •  在excel文件中,自己设计一排展示几个月,本文一排展示3个月。并计算每个月日历的起始单元格位置。

  •  最后传入年份,依次将一年12个月的日历制作出来,展示在一个页面上。只要有数据,可以对任意一年的日历进行可视化。(代码较长,可在文末获取完整代码)

按年的另一种展示方式:

from pyecharts import options as opts
from pyecharts.charts import Calendar
import pandas as pd
nucleic_df = pd.DataFrame()
for i in range(12):
  month_nucleic = made_data(2022, i+1)
  month_df = pd.DataFrame(month_nucleic)
  nucleic_df = pd.concat([nucleic_df, month_df])
data = [[row_data['date'], row_data['nucleic']] for row_index, row_data in nucleic_df.iterrows()]
cal = Calendar(init_opts=opts.InitOpts(width='900px', height='500px'))
cal.add(
  '', data, calendar_opts=opts.CalendarOpts(range_="2022",
                          daylabel_opts=opts.CalendarDayLabelOpts(first_day=1, name_map='cn'))
).set_series_opts(
  label_opts=opts.LabelOpts(font_size=12)
).set_global_opts(
  title_opts=opts.TitleOpts(title='核酸检测日历', pos_left='450', pos_top='0',
      title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
  visualmap_opts=opts.VisualMapOpts(
      max_=1, min_=0, orient="horizontal", is_piecewise=False,
      range_color=["white", "white", "green"], pos_top="250px", pos_left='50px'
  ),
).render('my_nucleic.html')

日历效果:

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

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

  •  本文用python制作了核酸检测的日历,对核酸检测的天数进行可视化。

  •  本文用了两种方式实现一年的日历展示。

来源:https://mp.weixin.qq.com/s/g73rLFc8g_O5DsPNlkGqyA

0
投稿

猜你喜欢

  • Mysql数据库是一个多用户,多线程的关系型数据库,是一个客户机/服务器结构的应用程序。它是对个人用户和商业用户是免费的. Mysql数据库
  • 1.   想学asyncio,得先了解协程携程的意义:计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状
  • django-pagination这是一个python包,来自github上的一个项目,很容易用。不过这是一个懒人工具,好吧(工具理性)。不
  • UDPUDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大
  • 在 asp 应用中,经常用到 Session 对象来保存用户临时私有数据,而 asp 的 Session 对象是依赖于浏览器的 Cookie
  • 记一次在写cli脚本的时候,碰到的一个问题。问题自己是写服务端的,有时候会写一些cli脚本去跑测试。习惯main.go写主流程,其他子文件写
  • 本文实例分析了Python减少循环层次和缩进的技巧。分享给大家供大家参考,具体如下:我们知道Python中冒号和缩进代表大括号,这样写已经可
  • 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式。一、准备工作1.扫雷游
  • 建立池连接可以显著提高应用程序的性能和可缩放性。SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户
  • 在python 开发web程序时,需要调用第三方的相关接口,在调用时,需要对请求进行签名。需要用到unix时间戳。 在python里,在网上
  • 多表查询1. 增删改一对多:先一后多,外键可以为对象或依赖表的主键(publish and book)publish = Publish.o
  • 本文实例为大家分享了python实现双链表的具体代码,供大家参考,具体内容如下实现双链表需要注意的地方1、如何插入元素,考虑特殊情况:头节点
  • 前言随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,,我们往往需要在此时对我们的网站
  • 这一版,对虹软的功能进行了一些封装,添加了人脸特征比对,比对结果保存到文件,和从文件提取特征进行比对,大体功能基本都已经实现,可以进行下一步
  • 相对于 Ajax,服务端 XMLHTTP 就是在服务端使用 XMLHttpRequest 对象了。虽然说,在服务端使用异步请求是比较不方便的
  • 下面的这个函数实现的功能是列出某文件夹下的所有文件,以文件名字母排序,先数字后字母再到中文。<%   
  • Oracle 背景资料 在介绍 Oracle9i 之前我们先介绍一些关于Oracle 公司的资料,让各位朋友更多了解 Oracle。 197
  • 摘要:本文主要是讲解怎么样替换某一列的一个值。应用场景:假如我们有以下的数据集:我们想把里面不是pre的字符串全部换成Nonpre,我们要怎
  • 这几天做了一个专题,放到服务器后发现从首页链接到专题页面正常,但是从专题页面跳转到首页就会出现乱码。很是蹊跷,专题页面和首页没有共同的文件,
  • 好多次在不同场合,都听到有同行提到“做产品比做设计更有前途”,或者“别做设计了,做产品吧”类似的观点。我不认为它们之间有什么可比性,因为这么
手机版 网络编程 asp之家 www.aspxhome.com