如何用Python制作我的核酸检测日历
本篇内容介绍了“如何用Python制作我的核酸检测日历”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
录入数据
核酸检测记录能查到的最早时间范围是一个月,以前的检测记录没有提前保存,所以先用8月份的数据制作日历。
查询8月份的检测记录,录入到代码中。
#coding=utf-8fromdatetimeimportdatetime#核酸检测数据,1表示当天做了核酸,0表示当天未做核酸my_nucleic={'date':[datetime.strftime(datetime(2023,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#创建一个workbook对象,而且会在workbook中至少创建一个表worksheetwb=openpyxl.Workbook()#获取当前活跃的worksheet,默认就是第一个worksheetws=wb.active
openpyxl是Python中用于读写excel文件的库,pip install openpyxl安装即可使用。
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(horizontal='right',vertical='center')side=Side(,color="004B3C")ws.cell(row=r,column=c).border=Border(top=side,bottom=side,left=side,right=side)
定义一个将表格颜色填充成白色的函数,对表格初始化处理,将背景设置成纯白,日历看起来更美观。
定义一个用于处理单元格格式的函数,后面直接调用函数给单元格设置格式,方便重复使用。
3.实现日历
importcalendar#将表格填充成白色init_sheet(ws)#设置年月单元格的边框side=Side(,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='2023年8月'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(2023,8)#设置日历的日期col,row=monthday[0],3foriinrange(len(my_nucleic['date'])):ifcol<7:ws.cell(row=row,column=col+1).value=i+1col+=1else: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')#设置行高foriinrange(1,row+1):ws.row_dimensions[i].height=30#保存表格wb.save(filename='show_august_nucleic.xlsx')wb.close()
日历效果:
可以看到,8月份我只有4天没有做核酸,大部分时间都是保持24小时。
代码实现介绍:
先合并首行的前7列单元格,写入年月,然后在第二行从左到右写入星期一到星期日,并设置格式。
使用Python的日历库calendar返回当前月第一天是星期几,然后确定日历的1号的起始位置。
从1号开始,依次在excel中写入日期,当列到达星期日时,换行并回到星期一的列。
根据当天是否做了核酸,给单元格填充背景颜色。本文中如果当天做了核酸,则日期的背景设置为绿色(24小时核酸码的颜色),如果未做核酸,则日期的背景设置为白色。
最后将结果保存到excel文件中,打开excel文件即可看到制作的日历。
制作一年的日历
制作了一个月的日历后,继续扩展做一年的日历,先看一下效果:
实现方式介绍:
数据补充,由于只能查到一个月的核酸记录,所以本文除2023年8月外,其他月份的数据用随机数生成。
对制作一个月日历的代码进行封装,传入年和月,就可以生成任意一个月的日历。
在excel文件中,自己设计一排展示几个月,本文一排展示3个月。并计算每个月日历的起始单元格位置。
最后传入年份,依次将一年12个月的日历制作出来,展示在一个页面上。只要有数据,可以对任意一年的日历进行可视化。(代码较长,可在文末获取完整代码)
按年的另一种展示方式:
frompyechartsimportoptionsasoptsfrompyecharts.chartsimportCalendarimportpandasaspdnucleic_df=pd.DataFrame()foriinrange(12):month_nucleic=made_data(2023,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,row_datainnucleic_df.iterrows()]cal=Calendar(init_opts=opts.InitOpts(width='900px',height='500px'))cal.add('',data,calendar_opts=opts.CalendarOpts(range_="2023",daylabel_opts=opts.CalendarDayLabelOpts(first_day=1,name_map=''))).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')
日历效果:
pyecharts中的Calendar组件也可以实现日历可视化,不过格式比较固定,展示得比较密集。
“如何用Python制作我的核酸检测日历”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注主机评测网网站,小编将为大家输出更多高质量的实用文章!