私の座標は深センです。2022 年以降、ほとんどの場合は 24 時間である必要があり、48 時間である必要がある場合も数回ありますが、要求される頻度はさらに低くなります。 72時間になることはもうありません。
この記事は私の核酸検査記録をもとにカレンダー化しており、核酸検査記録をカレンダー上に可視化しています。
核酸検査記録を見つけることができる最も早い時間範囲は 1 か月です。以前の検査記録は事前に保存されていないため、次のデータは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 テーブルにカレンダーを生成します。
import openpyxl # 创建一个workbook对象,而且会在workbook中至少创建一个表worksheet wb = openpyxl.Workbook() # 获取当前活跃的worksheet,默认就是第一个worksheet ws = wb.active
openpyxl は、Excel ファイルを読み書きするための Python のライブラリです。pip install openpyxl がインストールされた後に使用できます。 。
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)
テーブルの色を白で塗りつぶし、テーブルを初期化し、背景を に設定する関数を定義します。真っ白でカレンダーがより美しく見えます。
セルの書式設定を処理する関数を定義し、その関数を直接呼び出してセルを再利用しやすいように書式設定します。
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()
カレンダーの効果:
8 月であることがわかります。核酸なしでやったのは4日間だけで、ほとんどの時間は24時間そのままでした。
コード実装の概要:
1か月カレンダーを作成したら、さらに拡張して1年カレンダーを作成してみましょう。最初に効果を説明します:
実装方法の紹介:
年別の別の表示方法:
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')
カレンダー効果:
pyecharts の Calendar コンポーネントでもカレンダーの視覚化を実現できますが、形式は比較的固定されており、表示は比較的高密度です。
以上がPython を使用して核酸検査カレンダーを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。