我的坐标是深圳。从2022年开始,大部分时间需要24小时,少数需要48小时,更少的时候需要72小时,不再有案例。本文根据我的核酸检测记录做一个日历,将核酸检测记录可视化到日历中。输入数据的核酸检测记录中可以查到最早的时间范围是一个月,之前的检测记录没有提前保存,所以先用8月份的数据做一个日历。查询8月份的测试记录,输入代码。#coding=utf-8fromdatetimeimportdatetime#核酸检测数据,1表示当天做了核酸,0表示当天没有做核酸my_nucleic={'date':[datetime.strftime(datetime(2022,8,i+1),'%Y-%m-%d')foriinrange(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创建表importopenpyxl#创建工作簿对象,工作簿中至少会创建一个表worksheetwb=openpyxl.Workbook()#获取当前活动的工作表,默认为第一个工作表ws=wb.activeopenpyxl是Python中读写excel文件的库,安装pipinstallopenpyxl后即可使用。2.定义表格初始化和单元格设置函数fromopenpyxl.stylesimportPatternFill,Font,Alignment,Border,Sidedefinit_sheet(ws):forrinrange(100):forcinrange(100):ws.cell(row=r+1,column=c+1).fill=PatternFill('solid',fgColor='000000')defset_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(horizo??ntal='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.实现日历导入日历#填充表格为白色init_sheet(ws)#设置年月单元格的边框side=Side(style="medium",color="004B3C")forcolinrange(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='August2022'set_cell_style(ws,r=1,c=1,color='418CFA')#写周一到周日,设置格式title_data=['周一','周二','周三','周四','周五','周六','周日']forcolinrange(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],3foriinrange(len(my_nucleic['date'])):如果col<7:ws.cell(row=row,column=col+1).value=i+1col+=1否则:col=0row+=1ws.cell(row=row,column=col+1).value=i+1col+=1#设置单元格格式set_cell_style(ws,r=row,c=col,color='000000')#根据核酸结果填充颜色ifmy_nucleic['nucleic'][i]==1:ws.cell(row=row,column=col).fill=PatternFill('solid',fgColor='009B3C')#Setrowheightforiinrange(1,row+1):ws.row_dimensions[i].height=30#Saveformwb.save(filename='show_august_nucleic.xlsx')wb.close()calendar效果:大家可以看到,8月份,我只做了4天没做核酸,大部分时间都是24小时,从左到右写MondaythroughSunday,设置格式。使用Python的日历库calendar返回当月第一天是星期几,然后判断日历第一天的起始位置。从1号开始,把日期一个一个写在excel中,当列到星期天的时候,换行回到星期一的列。根据当天是否做核酸填充单元格背景色。本文中,如果当天做核酸,日期背景设置为绿色(24小时核酸码颜色),如果没有做核酸,日期背景设置为白色。最后将结果保存到excel文件中,打开excel文件就可以看到制作出来的日历了。制作一年历制作一个月历后,继续扩充,制作一年历。先来看看效果:实现方法介绍:数据补充。由于只能查到一个月的核酸记录,本文排除了2022年和8月以外,其他月份的数据都是随机数生成的。封装制作月历的代码,传入年月生成任意月份的日历。在excel文件中,设计一行显示几个月,本文连续显示3个月。并计算每个月历的起始单元格位置。最后传入年份,依次产生一年12个月的日历,显示在一页上。只要数据可用,任何年份的日历都可以可视化。(代码比较长,可以在文末获取完整代码)按年的另一种显示方式:frompyechartsimportoptionsasoptsfrompyecharts.chartsimportCalendarimportpandasaspdnucleic_df=pd.DataFrame()foriinrange(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']]forrow_index,nucleic_df.iterrows()中的row_data]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="水平",is_piecewise=假,range_color=["white","white","green"],pos_top="250px",pos_left='50px')).render('my_nucleic.html')日历效果:pyecharts中的Calendar组件也可以实现了日历的可视化,但是格式比较固定,显示比较密集。总结本文利用python制作核酸检测日历,可视化核酸检测天数。本文使用两种方法实现一年的日历显示。如需源码,只需在后台输入公众号:助手,输入密码“核酸日历”即可获取完整代码。
