利用Python制作簡(jiǎn)易的核酸檢測(cè)日歷
我的坐標(biāo)是深圳,2022年以來(lái),大部分時(shí)候要求24小時(shí),少部分時(shí)候要求48小時(shí),更少的時(shí)候要求72小時(shí),沒有更長(zhǎng)的情況。
本文根據(jù)我的核酸檢測(cè)記錄,制作成日歷,將核酸檢測(cè)記錄可視化到日歷中。
錄入數(shù)據(jù)
核酸檢測(cè)記錄能查到的最早時(shí)間范圍是一個(gè)月,以前的檢測(cè)記錄沒有提前保存,所以先用8月份的數(shù)據(jù)制作日歷。
查詢8月份的檢測(cè)記錄,錄入到代碼中。
# coding=utf-8 from datetime import datetime # 核酸檢測(cè)數(shù)據(jù),1表示當(dāng)天做了核酸,0表示當(dāng)天未做核酸 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] }
如果當(dāng)天做了核酸,用1表示,如果當(dāng)天未做核酸,用0表示。
8月的日期使用Python標(biāo)準(zhǔn)庫(kù)datetime生成。
制作日歷
本文使用Python庫(kù)openpyxl在excel表格中生成日歷。
1.使用openpyxl創(chuàng)建表格
import openpyxl # 創(chuàng)建一個(gè)workbook對(duì)象,而且會(huì)在workbook中至少創(chuàng)建一個(gè)表worksheet wb = openpyxl.Workbook() # 獲取當(dāng)前活躍的worksheet,默認(rèn)就是第一個(gè)worksheet ws = wb.active
openpyxl是Python中用于讀寫excel文件的庫(kù),pip install openpyxl安裝即可使用。
2.定義表格初始化和單元格設(shè)置的函數(shù)
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)
定義一個(gè)將表格顏色填充成白色的函數(shù),對(duì)表格初始化處理,將背景設(shè)置成純白,日歷看起來(lái)更美觀。
定義一個(gè)用于處理單元格格式的函數(shù),后面直接調(diào)用函數(shù)給單元格設(shè)置格式,方便重復(fù)使用。
3.實(shí)現(xiàn)日歷
import calendar # 將表格填充成白色 init_sheet(ws) # 設(shè)置年月單元格的邊框 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) # 寫入內(nèi)容和設(shè)置格式 ws.cell(row=1, column=1).value = '2022年8月' set_cell_style(ws, r=1, c=1, color='418CFA') # 寫入星期一至星期日,并設(shè)置格式 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') # 獲取一個(gè)月的天數(shù)和第一天是星期幾 monthday = calendar.monthrange(2022, 8) # 設(shè)置日歷的日期 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 # 設(shè)置單元格格式 set_cell_style(ws, r=row, c=col, color='000000') # 根據(jù)核酸結(jié)果填充顏色 if my_nucleic['nucleic'][i] == 1: ws.cell(row=row, column=col).fill = PatternFill('solid', fgColor='009B3C') # 設(shè)置行高 for i in range(1, row+1): ws.row_dimensions[i].height = 30 # 保存表格 wb.save(filename='show_august_nucleic.xlsx') wb.close()
日歷效果:
可以看到,8月份我只有4天沒有做核酸,大部分時(shí)間都是保持24小時(shí)。
代碼實(shí)現(xiàn)介紹:
- 先合并首行的前7列單元格,寫入年月,然后在第二行從左到右寫入星期一到星期日,并設(shè)置格式。
- 使用Python的日歷庫(kù)calendar返回當(dāng)前月第一天是星期幾,然后確定日歷的1號(hào)的起始位置。
- 從1號(hào)開始,依次在excel中寫入日期,當(dāng)列到達(dá)星期日時(shí),換行并回到星期一的列。
- 根據(jù)當(dāng)天是否做了核酸,給單元格填充背景顏色。本文中如果當(dāng)天做了核酸,則日期的背景設(shè)置為綠色(24小時(shí)核酸碼的顏色),如果未做核酸,則日期的背景設(shè)置為白色。
- 最后將結(jié)果保存到excel文件中,打開excel文件即可看到制作的日歷。
制作一年的日歷
制作了一個(gè)月的日歷后,繼續(xù)擴(kuò)展做一年的日歷,先看一下效果:
實(shí)現(xiàn)方式介紹:
- 數(shù)據(jù)補(bǔ)充,由于只能查到一個(gè)月的核酸記錄,所以本文除2022年8月外,其他月份的數(shù)據(jù)用隨機(jī)數(shù)生成。
- 對(duì)制作一個(gè)月日歷的代碼進(jìn)行封裝,傳入年和月,就可以生成任意一個(gè)月的日歷。
- 在excel文件中,自己設(shè)計(jì)一排展示幾個(gè)月,本文一排展示3個(gè)月。并計(jì)算每個(gè)月日歷的起始單元格位置。
- 最后傳入年份,依次將一年12個(gè)月的日歷制作出來(lái),展示在一個(gè)頁(yè)面上。只要有數(shù)據(jù),可以對(duì)任意一年的日歷進(jìn)行可視化。(代碼較長(zhǎng),可在文末獲取完整代碼)
按年的另一種展示方式:
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='核酸檢測(cè)日歷', 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')
日歷效果:
pyecharts中的Calendar組件也可以實(shí)現(xiàn)日歷可視化,不過格式比較固定,展示得比較密集。
- 本文用python制作了核酸檢測(cè)的日歷,對(duì)核酸檢測(cè)的天數(shù)進(jìn)行可視化。
- 本文用了兩種方式實(shí)現(xiàn)一年的日歷展示。
到此這篇關(guān)于利用Python制作簡(jiǎn)易的核酸檢測(cè)日歷的文章就介紹到這了,更多相關(guān)Python日歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解python __init__.py 和 __all__作用
導(dǎo)入文件夾包的時(shí)候,會(huì)運(yùn)行寫在該文件夾包下的__init__.py文件,這主要是__init__.py的作用,本文結(jié)合示例代碼介紹了python __init__.py 和 __all__作用,感興趣的朋友一起看看吧2023-02-02python使用websocket庫(kù)發(fā)送WSS請(qǐng)求
WebSocket是一種在客戶端和服務(wù)器之間進(jìn)行雙向通信的協(xié)議,Python中有許多WebSocket庫(kù)可供選擇,其中一個(gè)常用的是websocket庫(kù),使用該庫(kù)可以輕松地發(fā)送WSS請(qǐng)求,需要的朋友可以參考下2023-10-10YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別
這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(五)字符分割與識(shí)別,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下2023-04-04Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類示例
這篇文章主要介紹了Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類,結(jié)合實(shí)例形式分析了Python sqlacodegen安裝技巧ORM實(shí)體類相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06使用django-guardian實(shí)現(xiàn)django-admin的行級(jí)權(quán)限控制的方法
這篇文章主要介紹了使用django-guardian實(shí)現(xiàn)django-admin的行級(jí)權(quán)限控制的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-10-10Python 強(qiáng)大的信號(hào)庫(kù) blinker 入門詳細(xì)教程
這篇文章主要介紹了Python 強(qiáng)大的信號(hào)庫(kù) blinker 入門教程,信號(hào)的特點(diǎn)就是發(fā)送端通知訂閱者發(fā)生了什么,使用信號(hào)分為 3 步:定義信號(hào),監(jiān)聽信號(hào),發(fā)送信號(hào),需要的朋友可以參考下2022-02-02python性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)
這篇文章主要為大家介紹了python性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07