ホームページ  >  記事  >  バックエンド開発  >  Python を使用して核酸検査カレンダーを作成する

Python を使用して核酸検査カレンダーを作成する

王林
王林転載
2023-05-10 14:19:06828ブラウズ

Python を使用して核酸検査カレンダーを作成する

私の座標は深センです。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 テーブルにカレンダーを生成します。

1. openpyxl を使用してテーブルを作成します

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

openpyxl は、Excel ファイルを読み書きするための Python のライブラリです。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 列を結合し、年と月を書き込み、次に 2 行目に書き込みます。左から右へ月曜日から日曜日までを書き、フォーマットします。
  • Python のカレンダー ライブラリ Calendar を使用して、今月の最初の日が何曜日であるかを返し、カレンダーの 1 日の開始位置を決定します。
  • Excelに日付を1日から順番に書いていき、日曜日になったら行を折り返して月曜日の列に戻ります。
  • その日に核酸が行われたかどうかに応じて、セルの背景色を塗りつぶします。この記事では、その日に核酸を行った場合は日付の背景を緑色(24時間核酸コードの色)に、核酸を行っていない場合は日付の背景を に設定しています。白。
  • 最後に、結果を Excel ファイルに保存します。Excel ファイルを開くと、作成されたカレンダーが表示されます。

1年カレンダーの作成

1か月カレンダーを作成したら、さらに拡張して1年カレンダーを作成してみましょう。最初に効果を説明します:

Python を使用して核酸検査カレンダーを作成する

Python を使用して核酸検査カレンダーを作成する

実装方法の紹介:

  • データ補足、核酸レコードが見つかるのは 1 か月だけであるため、2022 年 8 月を除き、この記事の他の月のデータは乱数を使用して生成されています。
  • 1 か月のカレンダーを作成するコードをカプセル化し、年と月を渡して任意の月のカレンダーを生成します。
  • Excel ファイルでは、数か月を表示する行を設計していますが、この記事では 3 か月分の行を表示します。そして、各月のカレンダーの開始セル位置を計算します。
  • 最後に、年を入力して、1 年のうち 12 か月分のカレンダーを作成し、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')

カレンダー効果:

Python を使用して核酸検査カレンダーを作成する

pyecharts の Calendar コンポーネントでもカレンダーの視覚化を実現できますが、形式は比較的固定されており、表示は比較的高密度です。

まとめ

  • この記事では、Pythonを使用して核酸検査カレンダーを作成し、核酸検査の日数を可視化します。
  • この記事では、2 つの方法を使用して 1 年間のカレンダーを表示します。
  • ソースコードが必要な場合は、公式アカウントの背景:アシスタント、パスワード「核酸カレンダー」を直接入力して完全なコードを取得してください。

以上がPython を使用して核酸検査カレンダーを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。