Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ericdatakelly/e0945dbbabd8afb73a0125386b4c2942 to your computer and use it in GitHub Desktop.
Save ericdatakelly/e0945dbbabd8afb73a0125386b4c2942 to your computer and use it in GitHub Desktop.
making calendars in pandas
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "90db0e5a-6a3a-4dc6-bd06-e0c04ef4e584",
"metadata": {},
"source": [
"# what will we learn when _we make calendars in pandas?_\n",
"\n",
"below we are going to make calendars using pandas and explore the pandas api while we're at it. we'll explore different parts of thr `pandas` api like: \n",
"* `pandas.date_range` to begin our work with the calendar\n",
"* `pandas.DataFrame.assign` to set new columns on our dataframe\n",
"* `df.apply(pandas.Series)` to wide dataframes on container elements\n",
"* `pandas.DataFrame.unstack` to change the shape of our dataframe by translating row indexes to columns.\n",
"* `pandas.DataFrame.style` to use a dataframe to provide cell level styling in our output.\n",
"* we used `pandas.DataFrame.groupby` in a for loop, as an iterator, which is quite a powerful technique for inspecting grouped operations\n",
"<!-- TEASER_END -->"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "616c0c26-8395-4bd2-a15d-09bc44190cdd",
"metadata": {},
"outputs": [],
"source": [
" import pandas"
]
},
{
"cell_type": "markdown",
"id": "cf1aa19a-c74b-430d-98a0-1ca3e87842ff",
"metadata": {},
"source": [
"to start with, we'll use `pandas` date/time tooling to construct the days of the year."
]
},
{
"cell_type": "markdown",
"id": "a885b658-01f7-4ddc-813c-ef268fe652bc",
"metadata": {},
"source": [
"`pandas.date_range` is basically a smart `range` function for dates, we've defined the steps to be daily between the start and stop dates. it is really wise in `pandas` to work with your time and dates using their `pandas` types, there are better api affordances that remaining in an integer timestamp or time formatted string."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0feb8ab5-fcda-4fef-b379-381d1840771c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'our dates index has 369 days'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" start, stop = \"2020-12-28\", \"2021-12-31\"\n",
" dates: pandas.Index = pandas.date_range(start, stop, freq=\"D\")\n",
" F\"our dates index has {len(dates)} days\" "
]
},
{
"cell_type": "markdown",
"id": "c8ba04bf-2f55-4b13-875c-3a7aaf960bac",
"metadata": {},
"source": [
"it would really if our `calendar` demonstrated something practical which is why we'll import the third party `holidays` library; the calendars we draw will highlight holidays.\n",
"\n",
" pip install holidays"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7f5aa6b3-bc7e-4bb0-83f2-54a937835c23",
"metadata": {},
"outputs": [],
"source": [
" import holidays"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2157884f-7c04-4dac-afc2-bbfeeb2e0e3d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'there are 262 different calendars included in `holidays`'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" F\"\"\"there are {len([y for x, y in vars(holidays).items() if isinstance(y, type) and issubclass(y, holidays.HolidayBase)])} different calendars included in `holidays`\"\"\""
]
},
{
"cell_type": "markdown",
"id": "c1ae7d47-af11-4c6f-8656-a42624ab928d",
"metadata": {},
"source": [
"for demonstration we'll restrict our holidays to just the `us` for now."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "03bdbf05-cf6e-4f9f-898e-86736bc4cee8",
"metadata": {},
"outputs": [],
"source": [
" us: holidays.HolidayBase = holidays.UnitedStates()"
]
},
{
"cell_type": "markdown",
"id": "ab16adb9-439e-473b-8164-034daf27d241",
"metadata": {},
"source": [
"to start with we'll provide the form of our indexes and columns of our `DataFrame`"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c29cedf6-aca6-4e5f-9e23-81f141628b48",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>week</th>\n",
" <th>month</th>\n",
" <th>day</th>\n",
" <th>dayofweek</th>\n",
" <th>holiday</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [year, week, month, day, dayofweek, holiday]\n",
"Index: []"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" df: pandas.DataFrame = pandas.DataFrame(None, dates.rename(\"date\"), \"year week month day dayofweek holiday\".split())\n",
" df.dropna()"
]
},
{
"cell_type": "markdown",
"id": "a851505a-4f32-4041-828f-f932b39deb48",
"metadata": {},
"source": [
"we'll introduce the `pandas.DataFrame.assign` method that lets you assign new columns using keyword parameters. this is just a way another way of setting items using normal python syntax"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d395be51-8455-4c6e-8e64-a77a4d49b22b",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>week</th>\n",
" <th>month</th>\n",
" <th>day</th>\n",
" <th>dayofweek</th>\n",
" <th>holiday</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2020-12-28</th>\n",
" <td>2020</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-29</th>\n",
" <td>2020</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" year week month day dayofweek holiday\n",
"date \n",
"2020-12-28 2020 NaN NaN NaN NaN NaN\n",
"2020-12-29 2020 NaN NaN NaN NaN NaN"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" df = df.assign(year=dates.year)\n",
" df.head(2)"
]
},
{
"cell_type": "markdown",
"id": "f35408d9-ad8f-4ddf-aee6-18b67f7cc550",
"metadata": {},
"source": [
"multiple columns can be assigned at once, and below we'll fill out the rest out dataset."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a163da7b-9baa-4c37-bdf8-b1b9c64ede7c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>week</th>\n",
" <th>month</th>\n",
" <th>day</th>\n",
" <th>dayofweek</th>\n",
" <th>holiday</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2020-12-28</th>\n",
" <td>2020</td>\n",
" <td>NaN</td>\n",
" <td>12</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020-12-29</th>\n",
" <td>2020</td>\n",
" <td>NaN</td>\n",
" <td>12</td>\n",
" <td>29</td>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" year week month day dayofweek holiday\n",
"date \n",
"2020-12-28 2020 NaN 12 28 0 False\n",
"2020-12-29 2020 NaN 12 29 1 False"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" df = df.assign(\n",
" month=dates.month, \n",
" dayofweek=dates.dayofweek, \n",
" day=dates.day, \n",
" holiday=df.index.map(us.__contains__)\n",
" )\n",
" df.head(2)"
]
},
{
"cell_type": "markdown",
"id": "c1a5afe4-8811-47fd-a1a5-68692dce2654",
"metadata": {},
"source": [
"`pandas` api has changed and we need to use the new [`pandas.Timestamp.isocalendar`](https://pandas.pydata.org/docs/reference/api/pandas.Timestamp.isocalendar.html) to expand a datetime index into the ISO year, week number, and weekday. which is the new way to access the weekofyear; direct access to `dates.index.weekofyear` is being deprecated.\n",
"\n",
"to get the day of the week we prepare an the isocalendar and assign the week column."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "63d026f3-80b4-496d-b94e-d013ec36c971",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>week</th>\n",
" <th>month</th>\n",
" <th>day</th>\n",
" <th>dayofweek</th>\n",
" <th>holiday</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2021-02-07</th>\n",
" <td>2021</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>7</td>\n",
" <td>6</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021-06-22</th>\n",
" <td>2021</td>\n",
" <td>25</td>\n",
" <td>6</td>\n",
" <td>22</td>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" year week month day dayofweek holiday\n",
"date \n",
"2021-02-07 2021 5 2 7 6 False\n",
"2021-06-22 2021 25 6 22 1 False"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" iso: pandas.DataFrame = dates.isocalendar()\n",
" df = df.assign(\n",
" week=iso.week\n",
" )\n",
" df.sample(2)"
]
},
{
"cell_type": "markdown",
"id": "e6c355f0-cdac-4d7c-9775-999b29f3f523",
"metadata": {},
"source": [
"for a `calendar` we'll want to group days into months. which we can acheive with a few steps in `pandas`.\n",
"\n",
"it is really hard to avoid importing `numpy`, and we will use the standard library `calendar` module zhoosh up our calendars."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "b388a070-9f0d-4ddb-a0c6-f1bfdbbfb044",
"metadata": {},
"outputs": [],
"source": [
" import numpy, calendar"
]
},
{
"cell_type": "markdown",
"id": "26da2ee4-0801-4682-a2a3-786d69244f6f",
"metadata": {},
"source": [
"`calendar` provides localized names for the days and months."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "eb1f6ade-4c57-4141-8be3-0dc47e674423",
"metadata": {},
"outputs": [],
"source": [
" month_names, day_names = list(calendar.month_name), list(calendar.day_name)"
]
},
{
"cell_type": "markdown",
"id": "8da236fa-ab57-4c34-899e-05252a036392",
"metadata": {},
"source": [
"display the calendars"
]
},
{
"cell_type": "markdown",
"id": "3580d8e6-9656-4c0d-a201-6ff36d76ff0f",
"metadata": {},
"source": [
"we're near the place where we can present our calendars. all we need to do is iterate through the months"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "afe481fb-e698-4c24-8cd2-ef08f798ad59",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>day</th>\n",
" <th>holiday</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th>month</th>\n",
" <th>week</th>\n",
" <th>dayofweek</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">2021</th>\n",
" <th>10</th>\n",
" <th>39</th>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <th>37</th>\n",
" <th>0</th>\n",
" <td>13</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" day holiday\n",
"year month week dayofweek \n",
"2021 10 39 4 1 False\n",
" 9 37 0 13 False"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" df = df.set_index([\"year\", \"month\", \"week\", \"dayofweek\"])\n",
" df.sample(2)"
]
},
{
"cell_type": "markdown",
"id": "93f2d6f4-eb84-4627-8855-a06a29edb8c1",
"metadata": {},
"source": [
"`style_calendar` is meant to style a single month dataframe. we'll discuss the design choices following the code."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "94b9faa8-312a-4c3d-bd7c-55089055000c",
"metadata": {},
"outputs": [],
"source": [
" background = {\n",
" True: \"\"\"background-color: yellow; color: black;\"\"\",\n",
" False: \"\"\"background-color: purple;\"\"\",\n",
" numpy.nan: \"\"\"font-size: 0px;\"\"\"\n",
" }"
]
},
{
"cell_type": "markdown",
"id": "bf73ad61-d0da-4eec-83c2-ad9f4f44175e",
"metadata": {},
"source": [
"for each day, we need to align it with a holiday. we're going to acheive this by unstacking the `dayofweek` which moves the row index to columns, and creates a multiindex. this index of `months` and `days` same so that access to their values are natural later on."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "0ae3b324-d674-4a4d-b688-c8a91b996f40",
"metadata": {},
"outputs": [],
"source": [
" months = df.unstack(\"dayofweek\")\n",
" days = months[\"day\"].fillna(0).astype(int)"
]
},
{
"cell_type": "markdown",
"id": "3d4d7ba1-01d1-42be-b94a-55e936a1a86d",
"metadata": {},
"source": [
"what follows is kind of a holiday calendar using the pandas style attribute."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "2ec168bf-72ce-4d90-b42d-d9f886252f05",
"metadata": {},
"outputs": [],
"source": [
" def bg_color(x):\n",
" return months[\"holiday\"].loc[x.name].apply(background.get)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "96e9c732-f07f-4712-9181-6dba90b4c7f2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\">\n",
"#T_aac3e_row0_col0, #T_aac3e_row0_col1, #T_aac3e_row0_col2, #T_aac3e_row0_col3, #T_aac3e_row0_col4, #T_aac3e_row0_col5, #T_aac3e_row0_col6, #T_aac3e_row1_col0, #T_aac3e_row1_col1, #T_aac3e_row1_col2, #T_aac3e_row1_col3, #T_aac3e_row1_col4, #T_aac3e_row1_col5, #T_aac3e_row1_col6, #T_aac3e_row2_col0, #T_aac3e_row2_col1, #T_aac3e_row2_col2, #T_aac3e_row2_col3, #T_aac3e_row2_col4, #T_aac3e_row2_col5, #T_aac3e_row2_col6 {\n",
" background-color: purple;\n",
"}\n",
"</style>\n",
"<table id=\"T_aac3e_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"blank\" >&nbsp;</th>\n",
" <th class=\"blank\" >&nbsp;</th>\n",
" <th class=\"index_name level0\" >dayofweek</th>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" <tr>\n",
" <th class=\"index_name level0\" >year</th>\n",
" <th class=\"index_name level1\" >month</th>\n",
" <th class=\"index_name level2\" >week</th>\n",
" <th class=\"blank col0\" >&nbsp;</th>\n",
" <th class=\"blank col1\" >&nbsp;</th>\n",
" <th class=\"blank col2\" >&nbsp;</th>\n",
" <th class=\"blank col3\" >&nbsp;</th>\n",
" <th class=\"blank col4\" >&nbsp;</th>\n",
" <th class=\"blank col5\" >&nbsp;</th>\n",
" <th class=\"blank col6\" >&nbsp;</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th id=\"T_aac3e_level0_row0\" class=\"row_heading level0 row0\" rowspan=\"3\">2021</th>\n",
" <th id=\"T_aac3e_level1_row0\" class=\"row_heading level1 row0\" >12</th>\n",
" <th id=\"T_aac3e_level2_row0\" class=\"row_heading level2 row0\" >49</th>\n",
" <td id=\"T_aac3e_row0_col0\" class=\"data row0 col0\" >6</td>\n",
" <td id=\"T_aac3e_row0_col1\" class=\"data row0 col1\" >7</td>\n",
" <td id=\"T_aac3e_row0_col2\" class=\"data row0 col2\" >8</td>\n",
" <td id=\"T_aac3e_row0_col3\" class=\"data row0 col3\" >9</td>\n",
" <td id=\"T_aac3e_row0_col4\" class=\"data row0 col4\" >10</td>\n",
" <td id=\"T_aac3e_row0_col5\" class=\"data row0 col5\" >11</td>\n",
" <td id=\"T_aac3e_row0_col6\" class=\"data row0 col6\" >12</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_aac3e_level1_row1\" class=\"row_heading level1 row1\" >2</th>\n",
" <th id=\"T_aac3e_level2_row1\" class=\"row_heading level2 row1\" >6</th>\n",
" <td id=\"T_aac3e_row1_col0\" class=\"data row1 col0\" >8</td>\n",
" <td id=\"T_aac3e_row1_col1\" class=\"data row1 col1\" >9</td>\n",
" <td id=\"T_aac3e_row1_col2\" class=\"data row1 col2\" >10</td>\n",
" <td id=\"T_aac3e_row1_col3\" class=\"data row1 col3\" >11</td>\n",
" <td id=\"T_aac3e_row1_col4\" class=\"data row1 col4\" >12</td>\n",
" <td id=\"T_aac3e_row1_col5\" class=\"data row1 col5\" >13</td>\n",
" <td id=\"T_aac3e_row1_col6\" class=\"data row1 col6\" >14</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_aac3e_level1_row2\" class=\"row_heading level1 row2\" >5</th>\n",
" <th id=\"T_aac3e_level2_row2\" class=\"row_heading level2 row2\" >18</th>\n",
" <td id=\"T_aac3e_row2_col0\" class=\"data row2 col0\" >3</td>\n",
" <td id=\"T_aac3e_row2_col1\" class=\"data row2 col1\" >4</td>\n",
" <td id=\"T_aac3e_row2_col2\" class=\"data row2 col2\" >5</td>\n",
" <td id=\"T_aac3e_row2_col3\" class=\"data row2 col3\" >6</td>\n",
" <td id=\"T_aac3e_row2_col4\" class=\"data row2 col4\" >7</td>\n",
" <td id=\"T_aac3e_row2_col5\" class=\"data row2 col5\" >8</td>\n",
" <td id=\"T_aac3e_row2_col6\" class=\"data row2 col6\" >9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x7f0b3c839610>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" days.sample(3).style.apply(\n",
" lambda x: months[\"holiday\"].loc[x.name].apply(background.get), axis=1\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "f8f0356d-2532-498a-a547-9033818695ae",
"metadata": {},
"source": [
"personally, i'd like a little more control over the composition of our calendars. we'll do this by mixing the `IPython` display objects and pandas."
]
},
{
"cell_type": "markdown",
"id": "41a8fe9a-4c17-4f6e-894b-1857744d075b",
"metadata": {},
"source": [
"style each month using the `pandas.DataFrame.style` attribute"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "7961317c-3b4f-4dc8-95ef-6fdd83afd089",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{(2020, 12): <pandas.io.formats.style.Styler at 0x7f0b3b46b1c0>,\n",
" (2021, 1): <pandas.io.formats.style.Styler at 0x7f0b3b46b370>,\n",
" (2021, 2): <pandas.io.formats.style.Styler at 0x7f0b3b46b4f0>,\n",
" (2021, 3): <pandas.io.formats.style.Styler at 0x7f0b3b46b670>,\n",
" (2021, 4): <pandas.io.formats.style.Styler at 0x7f0b3b46b9a0>,\n",
" (2021, 5): <pandas.io.formats.style.Styler at 0x7f0b3b46bb80>,\n",
" (2021, 6): <pandas.io.formats.style.Styler at 0x7f0b3b46bd60>,\n",
" (2021, 7): <pandas.io.formats.style.Styler at 0x7f0b3b46bf40>,\n",
" (2021, 8): <pandas.io.formats.style.Styler at 0x7f0b3b3b7160>,\n",
" (2021, 9): <pandas.io.formats.style.Styler at 0x7f0b3b454f10>,\n",
" (2021, 10): <pandas.io.formats.style.Styler at 0x7f0b3b454e50>,\n",
" (2021, 11): <pandas.io.formats.style.Styler at 0x7f0b3b454970>,\n",
" (2021, 12): <pandas.io.formats.style.Styler at 0x7f0b3b454d00>}"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" monthly = dict(\n",
" (i, g.style.hide_index().apply(bg_color, axis=1))\n",
" for i, g in days.groupby([\"year\", \"month\"])\n",
" )\n",
" monthly"
]
},
{
"cell_type": "markdown",
"id": "1af7f0ea-cddf-4f96-a45c-f50267a17bca",
"metadata": {},
"source": [
"construct raw html beginning with the `monthly` styled dataframes, and combine them into a parent container with the selector `div.calendars`. we put a heading for each month."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "a73769c9-7e6d-4de9-b242-c4caae77ea2d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div class=\"calendars\"><div class=\"month\"><h2>December 2020</h2><style type=\"text/css\">\n",
"#T_845e6_row0_col0, #T_845e6_row0_col1, #T_845e6_row0_col2, #T_845e6_row0_col3 {\n",
" background-color: purple;\n",
"}\n",
"#T_845e6_row0_col4, #T_845e6_row0_col5, #T_845e6_row0_col6 {\n",
" font-size: 0px;\n",
"}\n",
"</style>\n",
"<table id=\"T_845e6_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_845e6_row0_col0\" class=\"data row0 col0\" >28</td>\n",
" <td id=\"T_845e6_row0_col1\" class=\"data row0 col1\" >29</td>\n",
" <td id=\"T_845e6_row0_col2\" class=\"data row0 col2\" >30</td>\n",
" <td id=\"T_845e6_row0_col3\" class=\"data row0 col3\" >31</td>\n",
" <td id=\"T_845e6_row0_col4\" class=\"data row0 col4\" >0</td>\n",
" <td id=\"T_845e6_row0_col5\" class=\"data row0 col5\" >0</td>\n",
" <td id=\"T_845e6_row0_col6\" class=\"data row0 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>January 2021</h2><style type=\"text/css\">\n",
"#T_343f9_row0_col0, #T_343f9_row0_col1, #T_343f9_row0_col2, #T_343f9_row0_col3, #T_343f9_row0_col4, #T_343f9_row0_col5, #T_343f9_row0_col6, #T_343f9_row1_col0, #T_343f9_row1_col1, #T_343f9_row1_col2, #T_343f9_row1_col3, #T_343f9_row1_col4, #T_343f9_row1_col5, #T_343f9_row1_col6, #T_343f9_row2_col1, #T_343f9_row2_col2, #T_343f9_row2_col3, #T_343f9_row2_col4, #T_343f9_row2_col5, #T_343f9_row2_col6, #T_343f9_row3_col0, #T_343f9_row3_col1, #T_343f9_row3_col2, #T_343f9_row3_col3, #T_343f9_row3_col4, #T_343f9_row3_col5, #T_343f9_row3_col6, #T_343f9_row4_col5, #T_343f9_row4_col6 {\n",
" background-color: purple;\n",
"}\n",
"#T_343f9_row2_col0, #T_343f9_row4_col4 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"#T_343f9_row4_col0, #T_343f9_row4_col1, #T_343f9_row4_col2, #T_343f9_row4_col3 {\n",
" font-size: 0px;\n",
"}\n",
"</style>\n",
"<table id=\"T_343f9_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_343f9_row0_col0\" class=\"data row0 col0\" >4</td>\n",
" <td id=\"T_343f9_row0_col1\" class=\"data row0 col1\" >5</td>\n",
" <td id=\"T_343f9_row0_col2\" class=\"data row0 col2\" >6</td>\n",
" <td id=\"T_343f9_row0_col3\" class=\"data row0 col3\" >7</td>\n",
" <td id=\"T_343f9_row0_col4\" class=\"data row0 col4\" >8</td>\n",
" <td id=\"T_343f9_row0_col5\" class=\"data row0 col5\" >9</td>\n",
" <td id=\"T_343f9_row0_col6\" class=\"data row0 col6\" >10</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_343f9_row1_col0\" class=\"data row1 col0\" >11</td>\n",
" <td id=\"T_343f9_row1_col1\" class=\"data row1 col1\" >12</td>\n",
" <td id=\"T_343f9_row1_col2\" class=\"data row1 col2\" >13</td>\n",
" <td id=\"T_343f9_row1_col3\" class=\"data row1 col3\" >14</td>\n",
" <td id=\"T_343f9_row1_col4\" class=\"data row1 col4\" >15</td>\n",
" <td id=\"T_343f9_row1_col5\" class=\"data row1 col5\" >16</td>\n",
" <td id=\"T_343f9_row1_col6\" class=\"data row1 col6\" >17</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_343f9_row2_col0\" class=\"data row2 col0\" >18</td>\n",
" <td id=\"T_343f9_row2_col1\" class=\"data row2 col1\" >19</td>\n",
" <td id=\"T_343f9_row2_col2\" class=\"data row2 col2\" >20</td>\n",
" <td id=\"T_343f9_row2_col3\" class=\"data row2 col3\" >21</td>\n",
" <td id=\"T_343f9_row2_col4\" class=\"data row2 col4\" >22</td>\n",
" <td id=\"T_343f9_row2_col5\" class=\"data row2 col5\" >23</td>\n",
" <td id=\"T_343f9_row2_col6\" class=\"data row2 col6\" >24</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_343f9_row3_col0\" class=\"data row3 col0\" >25</td>\n",
" <td id=\"T_343f9_row3_col1\" class=\"data row3 col1\" >26</td>\n",
" <td id=\"T_343f9_row3_col2\" class=\"data row3 col2\" >27</td>\n",
" <td id=\"T_343f9_row3_col3\" class=\"data row3 col3\" >28</td>\n",
" <td id=\"T_343f9_row3_col4\" class=\"data row3 col4\" >29</td>\n",
" <td id=\"T_343f9_row3_col5\" class=\"data row3 col5\" >30</td>\n",
" <td id=\"T_343f9_row3_col6\" class=\"data row3 col6\" >31</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_343f9_row4_col0\" class=\"data row4 col0\" >0</td>\n",
" <td id=\"T_343f9_row4_col1\" class=\"data row4 col1\" >0</td>\n",
" <td id=\"T_343f9_row4_col2\" class=\"data row4 col2\" >0</td>\n",
" <td id=\"T_343f9_row4_col3\" class=\"data row4 col3\" >0</td>\n",
" <td id=\"T_343f9_row4_col4\" class=\"data row4 col4\" >1</td>\n",
" <td id=\"T_343f9_row4_col5\" class=\"data row4 col5\" >2</td>\n",
" <td id=\"T_343f9_row4_col6\" class=\"data row4 col6\" >3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>February 2021</h2><style type=\"text/css\">\n",
"#T_feb45_row0_col0, #T_feb45_row0_col1, #T_feb45_row0_col2, #T_feb45_row0_col3, #T_feb45_row0_col4, #T_feb45_row0_col5, #T_feb45_row0_col6, #T_feb45_row1_col0, #T_feb45_row1_col1, #T_feb45_row1_col2, #T_feb45_row1_col3, #T_feb45_row1_col4, #T_feb45_row1_col5, #T_feb45_row1_col6, #T_feb45_row2_col1, #T_feb45_row2_col2, #T_feb45_row2_col3, #T_feb45_row2_col4, #T_feb45_row2_col5, #T_feb45_row2_col6, #T_feb45_row3_col0, #T_feb45_row3_col1, #T_feb45_row3_col2, #T_feb45_row3_col3, #T_feb45_row3_col4, #T_feb45_row3_col5, #T_feb45_row3_col6 {\n",
" background-color: purple;\n",
"}\n",
"#T_feb45_row2_col0 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_feb45_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_feb45_row0_col0\" class=\"data row0 col0\" >1</td>\n",
" <td id=\"T_feb45_row0_col1\" class=\"data row0 col1\" >2</td>\n",
" <td id=\"T_feb45_row0_col2\" class=\"data row0 col2\" >3</td>\n",
" <td id=\"T_feb45_row0_col3\" class=\"data row0 col3\" >4</td>\n",
" <td id=\"T_feb45_row0_col4\" class=\"data row0 col4\" >5</td>\n",
" <td id=\"T_feb45_row0_col5\" class=\"data row0 col5\" >6</td>\n",
" <td id=\"T_feb45_row0_col6\" class=\"data row0 col6\" >7</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_feb45_row1_col0\" class=\"data row1 col0\" >8</td>\n",
" <td id=\"T_feb45_row1_col1\" class=\"data row1 col1\" >9</td>\n",
" <td id=\"T_feb45_row1_col2\" class=\"data row1 col2\" >10</td>\n",
" <td id=\"T_feb45_row1_col3\" class=\"data row1 col3\" >11</td>\n",
" <td id=\"T_feb45_row1_col4\" class=\"data row1 col4\" >12</td>\n",
" <td id=\"T_feb45_row1_col5\" class=\"data row1 col5\" >13</td>\n",
" <td id=\"T_feb45_row1_col6\" class=\"data row1 col6\" >14</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_feb45_row2_col0\" class=\"data row2 col0\" >15</td>\n",
" <td id=\"T_feb45_row2_col1\" class=\"data row2 col1\" >16</td>\n",
" <td id=\"T_feb45_row2_col2\" class=\"data row2 col2\" >17</td>\n",
" <td id=\"T_feb45_row2_col3\" class=\"data row2 col3\" >18</td>\n",
" <td id=\"T_feb45_row2_col4\" class=\"data row2 col4\" >19</td>\n",
" <td id=\"T_feb45_row2_col5\" class=\"data row2 col5\" >20</td>\n",
" <td id=\"T_feb45_row2_col6\" class=\"data row2 col6\" >21</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_feb45_row3_col0\" class=\"data row3 col0\" >22</td>\n",
" <td id=\"T_feb45_row3_col1\" class=\"data row3 col1\" >23</td>\n",
" <td id=\"T_feb45_row3_col2\" class=\"data row3 col2\" >24</td>\n",
" <td id=\"T_feb45_row3_col3\" class=\"data row3 col3\" >25</td>\n",
" <td id=\"T_feb45_row3_col4\" class=\"data row3 col4\" >26</td>\n",
" <td id=\"T_feb45_row3_col5\" class=\"data row3 col5\" >27</td>\n",
" <td id=\"T_feb45_row3_col6\" class=\"data row3 col6\" >28</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>March 2021</h2><style type=\"text/css\">\n",
"#T_b199b_row0_col0, #T_b199b_row0_col1, #T_b199b_row0_col2, #T_b199b_row0_col3, #T_b199b_row0_col4, #T_b199b_row0_col5, #T_b199b_row0_col6, #T_b199b_row1_col0, #T_b199b_row1_col1, #T_b199b_row1_col2, #T_b199b_row1_col3, #T_b199b_row1_col4, #T_b199b_row1_col5, #T_b199b_row1_col6, #T_b199b_row2_col0, #T_b199b_row2_col1, #T_b199b_row2_col2, #T_b199b_row2_col3, #T_b199b_row2_col4, #T_b199b_row2_col5, #T_b199b_row2_col6, #T_b199b_row3_col0, #T_b199b_row3_col1, #T_b199b_row3_col2, #T_b199b_row3_col3, #T_b199b_row3_col4, #T_b199b_row3_col5, #T_b199b_row3_col6, #T_b199b_row4_col0, #T_b199b_row4_col1, #T_b199b_row4_col2 {\n",
" background-color: purple;\n",
"}\n",
"#T_b199b_row4_col3, #T_b199b_row4_col4, #T_b199b_row4_col5, #T_b199b_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"</style>\n",
"<table id=\"T_b199b_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_b199b_row0_col0\" class=\"data row0 col0\" >1</td>\n",
" <td id=\"T_b199b_row0_col1\" class=\"data row0 col1\" >2</td>\n",
" <td id=\"T_b199b_row0_col2\" class=\"data row0 col2\" >3</td>\n",
" <td id=\"T_b199b_row0_col3\" class=\"data row0 col3\" >4</td>\n",
" <td id=\"T_b199b_row0_col4\" class=\"data row0 col4\" >5</td>\n",
" <td id=\"T_b199b_row0_col5\" class=\"data row0 col5\" >6</td>\n",
" <td id=\"T_b199b_row0_col6\" class=\"data row0 col6\" >7</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_b199b_row1_col0\" class=\"data row1 col0\" >8</td>\n",
" <td id=\"T_b199b_row1_col1\" class=\"data row1 col1\" >9</td>\n",
" <td id=\"T_b199b_row1_col2\" class=\"data row1 col2\" >10</td>\n",
" <td id=\"T_b199b_row1_col3\" class=\"data row1 col3\" >11</td>\n",
" <td id=\"T_b199b_row1_col4\" class=\"data row1 col4\" >12</td>\n",
" <td id=\"T_b199b_row1_col5\" class=\"data row1 col5\" >13</td>\n",
" <td id=\"T_b199b_row1_col6\" class=\"data row1 col6\" >14</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_b199b_row2_col0\" class=\"data row2 col0\" >15</td>\n",
" <td id=\"T_b199b_row2_col1\" class=\"data row2 col1\" >16</td>\n",
" <td id=\"T_b199b_row2_col2\" class=\"data row2 col2\" >17</td>\n",
" <td id=\"T_b199b_row2_col3\" class=\"data row2 col3\" >18</td>\n",
" <td id=\"T_b199b_row2_col4\" class=\"data row2 col4\" >19</td>\n",
" <td id=\"T_b199b_row2_col5\" class=\"data row2 col5\" >20</td>\n",
" <td id=\"T_b199b_row2_col6\" class=\"data row2 col6\" >21</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_b199b_row3_col0\" class=\"data row3 col0\" >22</td>\n",
" <td id=\"T_b199b_row3_col1\" class=\"data row3 col1\" >23</td>\n",
" <td id=\"T_b199b_row3_col2\" class=\"data row3 col2\" >24</td>\n",
" <td id=\"T_b199b_row3_col3\" class=\"data row3 col3\" >25</td>\n",
" <td id=\"T_b199b_row3_col4\" class=\"data row3 col4\" >26</td>\n",
" <td id=\"T_b199b_row3_col5\" class=\"data row3 col5\" >27</td>\n",
" <td id=\"T_b199b_row3_col6\" class=\"data row3 col6\" >28</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_b199b_row4_col0\" class=\"data row4 col0\" >29</td>\n",
" <td id=\"T_b199b_row4_col1\" class=\"data row4 col1\" >30</td>\n",
" <td id=\"T_b199b_row4_col2\" class=\"data row4 col2\" >31</td>\n",
" <td id=\"T_b199b_row4_col3\" class=\"data row4 col3\" >0</td>\n",
" <td id=\"T_b199b_row4_col4\" class=\"data row4 col4\" >0</td>\n",
" <td id=\"T_b199b_row4_col5\" class=\"data row4 col5\" >0</td>\n",
" <td id=\"T_b199b_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>April 2021</h2><style type=\"text/css\">\n",
"#T_c673d_row0_col0, #T_c673d_row0_col1, #T_c673d_row0_col2, #T_c673d_row4_col5, #T_c673d_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_c673d_row0_col3, #T_c673d_row0_col4, #T_c673d_row0_col5, #T_c673d_row0_col6, #T_c673d_row1_col0, #T_c673d_row1_col1, #T_c673d_row1_col2, #T_c673d_row1_col3, #T_c673d_row1_col4, #T_c673d_row1_col5, #T_c673d_row1_col6, #T_c673d_row2_col0, #T_c673d_row2_col1, #T_c673d_row2_col2, #T_c673d_row2_col3, #T_c673d_row2_col4, #T_c673d_row2_col5, #T_c673d_row2_col6, #T_c673d_row3_col0, #T_c673d_row3_col1, #T_c673d_row3_col2, #T_c673d_row3_col3, #T_c673d_row3_col4, #T_c673d_row3_col5, #T_c673d_row3_col6, #T_c673d_row4_col0, #T_c673d_row4_col1, #T_c673d_row4_col2, #T_c673d_row4_col3, #T_c673d_row4_col4 {\n",
" background-color: purple;\n",
"}\n",
"</style>\n",
"<table id=\"T_c673d_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_c673d_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_c673d_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_c673d_row0_col2\" class=\"data row0 col2\" >0</td>\n",
" <td id=\"T_c673d_row0_col3\" class=\"data row0 col3\" >1</td>\n",
" <td id=\"T_c673d_row0_col4\" class=\"data row0 col4\" >2</td>\n",
" <td id=\"T_c673d_row0_col5\" class=\"data row0 col5\" >3</td>\n",
" <td id=\"T_c673d_row0_col6\" class=\"data row0 col6\" >4</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_c673d_row1_col0\" class=\"data row1 col0\" >5</td>\n",
" <td id=\"T_c673d_row1_col1\" class=\"data row1 col1\" >6</td>\n",
" <td id=\"T_c673d_row1_col2\" class=\"data row1 col2\" >7</td>\n",
" <td id=\"T_c673d_row1_col3\" class=\"data row1 col3\" >8</td>\n",
" <td id=\"T_c673d_row1_col4\" class=\"data row1 col4\" >9</td>\n",
" <td id=\"T_c673d_row1_col5\" class=\"data row1 col5\" >10</td>\n",
" <td id=\"T_c673d_row1_col6\" class=\"data row1 col6\" >11</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_c673d_row2_col0\" class=\"data row2 col0\" >12</td>\n",
" <td id=\"T_c673d_row2_col1\" class=\"data row2 col1\" >13</td>\n",
" <td id=\"T_c673d_row2_col2\" class=\"data row2 col2\" >14</td>\n",
" <td id=\"T_c673d_row2_col3\" class=\"data row2 col3\" >15</td>\n",
" <td id=\"T_c673d_row2_col4\" class=\"data row2 col4\" >16</td>\n",
" <td id=\"T_c673d_row2_col5\" class=\"data row2 col5\" >17</td>\n",
" <td id=\"T_c673d_row2_col6\" class=\"data row2 col6\" >18</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_c673d_row3_col0\" class=\"data row3 col0\" >19</td>\n",
" <td id=\"T_c673d_row3_col1\" class=\"data row3 col1\" >20</td>\n",
" <td id=\"T_c673d_row3_col2\" class=\"data row3 col2\" >21</td>\n",
" <td id=\"T_c673d_row3_col3\" class=\"data row3 col3\" >22</td>\n",
" <td id=\"T_c673d_row3_col4\" class=\"data row3 col4\" >23</td>\n",
" <td id=\"T_c673d_row3_col5\" class=\"data row3 col5\" >24</td>\n",
" <td id=\"T_c673d_row3_col6\" class=\"data row3 col6\" >25</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_c673d_row4_col0\" class=\"data row4 col0\" >26</td>\n",
" <td id=\"T_c673d_row4_col1\" class=\"data row4 col1\" >27</td>\n",
" <td id=\"T_c673d_row4_col2\" class=\"data row4 col2\" >28</td>\n",
" <td id=\"T_c673d_row4_col3\" class=\"data row4 col3\" >29</td>\n",
" <td id=\"T_c673d_row4_col4\" class=\"data row4 col4\" >30</td>\n",
" <td id=\"T_c673d_row4_col5\" class=\"data row4 col5\" >0</td>\n",
" <td id=\"T_c673d_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>May 2021</h2><style type=\"text/css\">\n",
"#T_ebbe5_row0_col0, #T_ebbe5_row0_col1, #T_ebbe5_row0_col2, #T_ebbe5_row0_col3, #T_ebbe5_row0_col4, #T_ebbe5_row5_col1, #T_ebbe5_row5_col2, #T_ebbe5_row5_col3, #T_ebbe5_row5_col4, #T_ebbe5_row5_col5, #T_ebbe5_row5_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_ebbe5_row0_col5, #T_ebbe5_row0_col6, #T_ebbe5_row1_col0, #T_ebbe5_row1_col1, #T_ebbe5_row1_col2, #T_ebbe5_row1_col3, #T_ebbe5_row1_col4, #T_ebbe5_row1_col5, #T_ebbe5_row1_col6, #T_ebbe5_row2_col0, #T_ebbe5_row2_col1, #T_ebbe5_row2_col2, #T_ebbe5_row2_col3, #T_ebbe5_row2_col4, #T_ebbe5_row2_col5, #T_ebbe5_row2_col6, #T_ebbe5_row3_col0, #T_ebbe5_row3_col1, #T_ebbe5_row3_col2, #T_ebbe5_row3_col3, #T_ebbe5_row3_col4, #T_ebbe5_row3_col5, #T_ebbe5_row3_col6, #T_ebbe5_row4_col0, #T_ebbe5_row4_col1, #T_ebbe5_row4_col2, #T_ebbe5_row4_col3, #T_ebbe5_row4_col4, #T_ebbe5_row4_col5, #T_ebbe5_row4_col6 {\n",
" background-color: purple;\n",
"}\n",
"#T_ebbe5_row5_col0 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_ebbe5_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_ebbe5_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_ebbe5_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_ebbe5_row0_col2\" class=\"data row0 col2\" >0</td>\n",
" <td id=\"T_ebbe5_row0_col3\" class=\"data row0 col3\" >0</td>\n",
" <td id=\"T_ebbe5_row0_col4\" class=\"data row0 col4\" >0</td>\n",
" <td id=\"T_ebbe5_row0_col5\" class=\"data row0 col5\" >1</td>\n",
" <td id=\"T_ebbe5_row0_col6\" class=\"data row0 col6\" >2</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_ebbe5_row1_col0\" class=\"data row1 col0\" >3</td>\n",
" <td id=\"T_ebbe5_row1_col1\" class=\"data row1 col1\" >4</td>\n",
" <td id=\"T_ebbe5_row1_col2\" class=\"data row1 col2\" >5</td>\n",
" <td id=\"T_ebbe5_row1_col3\" class=\"data row1 col3\" >6</td>\n",
" <td id=\"T_ebbe5_row1_col4\" class=\"data row1 col4\" >7</td>\n",
" <td id=\"T_ebbe5_row1_col5\" class=\"data row1 col5\" >8</td>\n",
" <td id=\"T_ebbe5_row1_col6\" class=\"data row1 col6\" >9</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_ebbe5_row2_col0\" class=\"data row2 col0\" >10</td>\n",
" <td id=\"T_ebbe5_row2_col1\" class=\"data row2 col1\" >11</td>\n",
" <td id=\"T_ebbe5_row2_col2\" class=\"data row2 col2\" >12</td>\n",
" <td id=\"T_ebbe5_row2_col3\" class=\"data row2 col3\" >13</td>\n",
" <td id=\"T_ebbe5_row2_col4\" class=\"data row2 col4\" >14</td>\n",
" <td id=\"T_ebbe5_row2_col5\" class=\"data row2 col5\" >15</td>\n",
" <td id=\"T_ebbe5_row2_col6\" class=\"data row2 col6\" >16</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_ebbe5_row3_col0\" class=\"data row3 col0\" >17</td>\n",
" <td id=\"T_ebbe5_row3_col1\" class=\"data row3 col1\" >18</td>\n",
" <td id=\"T_ebbe5_row3_col2\" class=\"data row3 col2\" >19</td>\n",
" <td id=\"T_ebbe5_row3_col3\" class=\"data row3 col3\" >20</td>\n",
" <td id=\"T_ebbe5_row3_col4\" class=\"data row3 col4\" >21</td>\n",
" <td id=\"T_ebbe5_row3_col5\" class=\"data row3 col5\" >22</td>\n",
" <td id=\"T_ebbe5_row3_col6\" class=\"data row3 col6\" >23</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_ebbe5_row4_col0\" class=\"data row4 col0\" >24</td>\n",
" <td id=\"T_ebbe5_row4_col1\" class=\"data row4 col1\" >25</td>\n",
" <td id=\"T_ebbe5_row4_col2\" class=\"data row4 col2\" >26</td>\n",
" <td id=\"T_ebbe5_row4_col3\" class=\"data row4 col3\" >27</td>\n",
" <td id=\"T_ebbe5_row4_col4\" class=\"data row4 col4\" >28</td>\n",
" <td id=\"T_ebbe5_row4_col5\" class=\"data row4 col5\" >29</td>\n",
" <td id=\"T_ebbe5_row4_col6\" class=\"data row4 col6\" >30</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_ebbe5_row5_col0\" class=\"data row5 col0\" >31</td>\n",
" <td id=\"T_ebbe5_row5_col1\" class=\"data row5 col1\" >0</td>\n",
" <td id=\"T_ebbe5_row5_col2\" class=\"data row5 col2\" >0</td>\n",
" <td id=\"T_ebbe5_row5_col3\" class=\"data row5 col3\" >0</td>\n",
" <td id=\"T_ebbe5_row5_col4\" class=\"data row5 col4\" >0</td>\n",
" <td id=\"T_ebbe5_row5_col5\" class=\"data row5 col5\" >0</td>\n",
" <td id=\"T_ebbe5_row5_col6\" class=\"data row5 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>June 2021</h2><style type=\"text/css\">\n",
"#T_740c6_row0_col0, #T_740c6_row4_col3, #T_740c6_row4_col4, #T_740c6_row4_col5, #T_740c6_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_740c6_row0_col1, #T_740c6_row0_col2, #T_740c6_row0_col3, #T_740c6_row0_col4, #T_740c6_row0_col5, #T_740c6_row0_col6, #T_740c6_row1_col0, #T_740c6_row1_col1, #T_740c6_row1_col2, #T_740c6_row1_col3, #T_740c6_row1_col4, #T_740c6_row1_col5, #T_740c6_row1_col6, #T_740c6_row2_col0, #T_740c6_row2_col1, #T_740c6_row2_col2, #T_740c6_row2_col3, #T_740c6_row2_col4, #T_740c6_row2_col6, #T_740c6_row3_col0, #T_740c6_row3_col1, #T_740c6_row3_col2, #T_740c6_row3_col3, #T_740c6_row3_col4, #T_740c6_row3_col5, #T_740c6_row3_col6, #T_740c6_row4_col0, #T_740c6_row4_col1, #T_740c6_row4_col2 {\n",
" background-color: purple;\n",
"}\n",
"#T_740c6_row2_col5 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_740c6_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_740c6_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_740c6_row0_col1\" class=\"data row0 col1\" >1</td>\n",
" <td id=\"T_740c6_row0_col2\" class=\"data row0 col2\" >2</td>\n",
" <td id=\"T_740c6_row0_col3\" class=\"data row0 col3\" >3</td>\n",
" <td id=\"T_740c6_row0_col4\" class=\"data row0 col4\" >4</td>\n",
" <td id=\"T_740c6_row0_col5\" class=\"data row0 col5\" >5</td>\n",
" <td id=\"T_740c6_row0_col6\" class=\"data row0 col6\" >6</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_740c6_row1_col0\" class=\"data row1 col0\" >7</td>\n",
" <td id=\"T_740c6_row1_col1\" class=\"data row1 col1\" >8</td>\n",
" <td id=\"T_740c6_row1_col2\" class=\"data row1 col2\" >9</td>\n",
" <td id=\"T_740c6_row1_col3\" class=\"data row1 col3\" >10</td>\n",
" <td id=\"T_740c6_row1_col4\" class=\"data row1 col4\" >11</td>\n",
" <td id=\"T_740c6_row1_col5\" class=\"data row1 col5\" >12</td>\n",
" <td id=\"T_740c6_row1_col6\" class=\"data row1 col6\" >13</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_740c6_row2_col0\" class=\"data row2 col0\" >14</td>\n",
" <td id=\"T_740c6_row2_col1\" class=\"data row2 col1\" >15</td>\n",
" <td id=\"T_740c6_row2_col2\" class=\"data row2 col2\" >16</td>\n",
" <td id=\"T_740c6_row2_col3\" class=\"data row2 col3\" >17</td>\n",
" <td id=\"T_740c6_row2_col4\" class=\"data row2 col4\" >18</td>\n",
" <td id=\"T_740c6_row2_col5\" class=\"data row2 col5\" >19</td>\n",
" <td id=\"T_740c6_row2_col6\" class=\"data row2 col6\" >20</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_740c6_row3_col0\" class=\"data row3 col0\" >21</td>\n",
" <td id=\"T_740c6_row3_col1\" class=\"data row3 col1\" >22</td>\n",
" <td id=\"T_740c6_row3_col2\" class=\"data row3 col2\" >23</td>\n",
" <td id=\"T_740c6_row3_col3\" class=\"data row3 col3\" >24</td>\n",
" <td id=\"T_740c6_row3_col4\" class=\"data row3 col4\" >25</td>\n",
" <td id=\"T_740c6_row3_col5\" class=\"data row3 col5\" >26</td>\n",
" <td id=\"T_740c6_row3_col6\" class=\"data row3 col6\" >27</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_740c6_row4_col0\" class=\"data row4 col0\" >28</td>\n",
" <td id=\"T_740c6_row4_col1\" class=\"data row4 col1\" >29</td>\n",
" <td id=\"T_740c6_row4_col2\" class=\"data row4 col2\" >30</td>\n",
" <td id=\"T_740c6_row4_col3\" class=\"data row4 col3\" >0</td>\n",
" <td id=\"T_740c6_row4_col4\" class=\"data row4 col4\" >0</td>\n",
" <td id=\"T_740c6_row4_col5\" class=\"data row4 col5\" >0</td>\n",
" <td id=\"T_740c6_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>July 2021</h2><style type=\"text/css\">\n",
"#T_e6695_row0_col0, #T_e6695_row0_col1, #T_e6695_row0_col2, #T_e6695_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_e6695_row0_col3, #T_e6695_row0_col4, #T_e6695_row0_col5, #T_e6695_row1_col1, #T_e6695_row1_col2, #T_e6695_row1_col3, #T_e6695_row1_col4, #T_e6695_row1_col5, #T_e6695_row1_col6, #T_e6695_row2_col0, #T_e6695_row2_col1, #T_e6695_row2_col2, #T_e6695_row2_col3, #T_e6695_row2_col4, #T_e6695_row2_col5, #T_e6695_row2_col6, #T_e6695_row3_col0, #T_e6695_row3_col1, #T_e6695_row3_col2, #T_e6695_row3_col3, #T_e6695_row3_col4, #T_e6695_row3_col5, #T_e6695_row3_col6, #T_e6695_row4_col0, #T_e6695_row4_col1, #T_e6695_row4_col2, #T_e6695_row4_col3, #T_e6695_row4_col4, #T_e6695_row4_col5 {\n",
" background-color: purple;\n",
"}\n",
"#T_e6695_row0_col6, #T_e6695_row1_col0 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_e6695_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_e6695_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_e6695_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_e6695_row0_col2\" class=\"data row0 col2\" >0</td>\n",
" <td id=\"T_e6695_row0_col3\" class=\"data row0 col3\" >1</td>\n",
" <td id=\"T_e6695_row0_col4\" class=\"data row0 col4\" >2</td>\n",
" <td id=\"T_e6695_row0_col5\" class=\"data row0 col5\" >3</td>\n",
" <td id=\"T_e6695_row0_col6\" class=\"data row0 col6\" >4</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_e6695_row1_col0\" class=\"data row1 col0\" >5</td>\n",
" <td id=\"T_e6695_row1_col1\" class=\"data row1 col1\" >6</td>\n",
" <td id=\"T_e6695_row1_col2\" class=\"data row1 col2\" >7</td>\n",
" <td id=\"T_e6695_row1_col3\" class=\"data row1 col3\" >8</td>\n",
" <td id=\"T_e6695_row1_col4\" class=\"data row1 col4\" >9</td>\n",
" <td id=\"T_e6695_row1_col5\" class=\"data row1 col5\" >10</td>\n",
" <td id=\"T_e6695_row1_col6\" class=\"data row1 col6\" >11</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_e6695_row2_col0\" class=\"data row2 col0\" >12</td>\n",
" <td id=\"T_e6695_row2_col1\" class=\"data row2 col1\" >13</td>\n",
" <td id=\"T_e6695_row2_col2\" class=\"data row2 col2\" >14</td>\n",
" <td id=\"T_e6695_row2_col3\" class=\"data row2 col3\" >15</td>\n",
" <td id=\"T_e6695_row2_col4\" class=\"data row2 col4\" >16</td>\n",
" <td id=\"T_e6695_row2_col5\" class=\"data row2 col5\" >17</td>\n",
" <td id=\"T_e6695_row2_col6\" class=\"data row2 col6\" >18</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_e6695_row3_col0\" class=\"data row3 col0\" >19</td>\n",
" <td id=\"T_e6695_row3_col1\" class=\"data row3 col1\" >20</td>\n",
" <td id=\"T_e6695_row3_col2\" class=\"data row3 col2\" >21</td>\n",
" <td id=\"T_e6695_row3_col3\" class=\"data row3 col3\" >22</td>\n",
" <td id=\"T_e6695_row3_col4\" class=\"data row3 col4\" >23</td>\n",
" <td id=\"T_e6695_row3_col5\" class=\"data row3 col5\" >24</td>\n",
" <td id=\"T_e6695_row3_col6\" class=\"data row3 col6\" >25</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_e6695_row4_col0\" class=\"data row4 col0\" >26</td>\n",
" <td id=\"T_e6695_row4_col1\" class=\"data row4 col1\" >27</td>\n",
" <td id=\"T_e6695_row4_col2\" class=\"data row4 col2\" >28</td>\n",
" <td id=\"T_e6695_row4_col3\" class=\"data row4 col3\" >29</td>\n",
" <td id=\"T_e6695_row4_col4\" class=\"data row4 col4\" >30</td>\n",
" <td id=\"T_e6695_row4_col5\" class=\"data row4 col5\" >31</td>\n",
" <td id=\"T_e6695_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>August 2021</h2><style type=\"text/css\">\n",
"#T_671a4_row0_col0, #T_671a4_row0_col1, #T_671a4_row0_col2, #T_671a4_row0_col3, #T_671a4_row0_col4, #T_671a4_row0_col5, #T_671a4_row5_col2, #T_671a4_row5_col3, #T_671a4_row5_col4, #T_671a4_row5_col5, #T_671a4_row5_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_671a4_row0_col6, #T_671a4_row1_col0, #T_671a4_row1_col1, #T_671a4_row1_col2, #T_671a4_row1_col3, #T_671a4_row1_col4, #T_671a4_row1_col5, #T_671a4_row1_col6, #T_671a4_row2_col0, #T_671a4_row2_col1, #T_671a4_row2_col2, #T_671a4_row2_col3, #T_671a4_row2_col4, #T_671a4_row2_col5, #T_671a4_row2_col6, #T_671a4_row3_col0, #T_671a4_row3_col1, #T_671a4_row3_col2, #T_671a4_row3_col3, #T_671a4_row3_col4, #T_671a4_row3_col5, #T_671a4_row3_col6, #T_671a4_row4_col0, #T_671a4_row4_col1, #T_671a4_row4_col2, #T_671a4_row4_col3, #T_671a4_row4_col4, #T_671a4_row4_col5, #T_671a4_row4_col6, #T_671a4_row5_col0, #T_671a4_row5_col1 {\n",
" background-color: purple;\n",
"}\n",
"</style>\n",
"<table id=\"T_671a4_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_671a4_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_671a4_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_671a4_row0_col2\" class=\"data row0 col2\" >0</td>\n",
" <td id=\"T_671a4_row0_col3\" class=\"data row0 col3\" >0</td>\n",
" <td id=\"T_671a4_row0_col4\" class=\"data row0 col4\" >0</td>\n",
" <td id=\"T_671a4_row0_col5\" class=\"data row0 col5\" >0</td>\n",
" <td id=\"T_671a4_row0_col6\" class=\"data row0 col6\" >1</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_671a4_row1_col0\" class=\"data row1 col0\" >2</td>\n",
" <td id=\"T_671a4_row1_col1\" class=\"data row1 col1\" >3</td>\n",
" <td id=\"T_671a4_row1_col2\" class=\"data row1 col2\" >4</td>\n",
" <td id=\"T_671a4_row1_col3\" class=\"data row1 col3\" >5</td>\n",
" <td id=\"T_671a4_row1_col4\" class=\"data row1 col4\" >6</td>\n",
" <td id=\"T_671a4_row1_col5\" class=\"data row1 col5\" >7</td>\n",
" <td id=\"T_671a4_row1_col6\" class=\"data row1 col6\" >8</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_671a4_row2_col0\" class=\"data row2 col0\" >9</td>\n",
" <td id=\"T_671a4_row2_col1\" class=\"data row2 col1\" >10</td>\n",
" <td id=\"T_671a4_row2_col2\" class=\"data row2 col2\" >11</td>\n",
" <td id=\"T_671a4_row2_col3\" class=\"data row2 col3\" >12</td>\n",
" <td id=\"T_671a4_row2_col4\" class=\"data row2 col4\" >13</td>\n",
" <td id=\"T_671a4_row2_col5\" class=\"data row2 col5\" >14</td>\n",
" <td id=\"T_671a4_row2_col6\" class=\"data row2 col6\" >15</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_671a4_row3_col0\" class=\"data row3 col0\" >16</td>\n",
" <td id=\"T_671a4_row3_col1\" class=\"data row3 col1\" >17</td>\n",
" <td id=\"T_671a4_row3_col2\" class=\"data row3 col2\" >18</td>\n",
" <td id=\"T_671a4_row3_col3\" class=\"data row3 col3\" >19</td>\n",
" <td id=\"T_671a4_row3_col4\" class=\"data row3 col4\" >20</td>\n",
" <td id=\"T_671a4_row3_col5\" class=\"data row3 col5\" >21</td>\n",
" <td id=\"T_671a4_row3_col6\" class=\"data row3 col6\" >22</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_671a4_row4_col0\" class=\"data row4 col0\" >23</td>\n",
" <td id=\"T_671a4_row4_col1\" class=\"data row4 col1\" >24</td>\n",
" <td id=\"T_671a4_row4_col2\" class=\"data row4 col2\" >25</td>\n",
" <td id=\"T_671a4_row4_col3\" class=\"data row4 col3\" >26</td>\n",
" <td id=\"T_671a4_row4_col4\" class=\"data row4 col4\" >27</td>\n",
" <td id=\"T_671a4_row4_col5\" class=\"data row4 col5\" >28</td>\n",
" <td id=\"T_671a4_row4_col6\" class=\"data row4 col6\" >29</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_671a4_row5_col0\" class=\"data row5 col0\" >30</td>\n",
" <td id=\"T_671a4_row5_col1\" class=\"data row5 col1\" >31</td>\n",
" <td id=\"T_671a4_row5_col2\" class=\"data row5 col2\" >0</td>\n",
" <td id=\"T_671a4_row5_col3\" class=\"data row5 col3\" >0</td>\n",
" <td id=\"T_671a4_row5_col4\" class=\"data row5 col4\" >0</td>\n",
" <td id=\"T_671a4_row5_col5\" class=\"data row5 col5\" >0</td>\n",
" <td id=\"T_671a4_row5_col6\" class=\"data row5 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>September 2021</h2><style type=\"text/css\">\n",
"#T_584e6_row0_col0, #T_584e6_row0_col1, #T_584e6_row4_col4, #T_584e6_row4_col5, #T_584e6_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_584e6_row0_col2, #T_584e6_row0_col3, #T_584e6_row0_col4, #T_584e6_row0_col5, #T_584e6_row0_col6, #T_584e6_row1_col1, #T_584e6_row1_col2, #T_584e6_row1_col3, #T_584e6_row1_col4, #T_584e6_row1_col5, #T_584e6_row1_col6, #T_584e6_row2_col0, #T_584e6_row2_col1, #T_584e6_row2_col2, #T_584e6_row2_col3, #T_584e6_row2_col4, #T_584e6_row2_col5, #T_584e6_row2_col6, #T_584e6_row3_col0, #T_584e6_row3_col1, #T_584e6_row3_col2, #T_584e6_row3_col3, #T_584e6_row3_col4, #T_584e6_row3_col5, #T_584e6_row3_col6, #T_584e6_row4_col0, #T_584e6_row4_col1, #T_584e6_row4_col2, #T_584e6_row4_col3 {\n",
" background-color: purple;\n",
"}\n",
"#T_584e6_row1_col0 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_584e6_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_584e6_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_584e6_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_584e6_row0_col2\" class=\"data row0 col2\" >1</td>\n",
" <td id=\"T_584e6_row0_col3\" class=\"data row0 col3\" >2</td>\n",
" <td id=\"T_584e6_row0_col4\" class=\"data row0 col4\" >3</td>\n",
" <td id=\"T_584e6_row0_col5\" class=\"data row0 col5\" >4</td>\n",
" <td id=\"T_584e6_row0_col6\" class=\"data row0 col6\" >5</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_584e6_row1_col0\" class=\"data row1 col0\" >6</td>\n",
" <td id=\"T_584e6_row1_col1\" class=\"data row1 col1\" >7</td>\n",
" <td id=\"T_584e6_row1_col2\" class=\"data row1 col2\" >8</td>\n",
" <td id=\"T_584e6_row1_col3\" class=\"data row1 col3\" >9</td>\n",
" <td id=\"T_584e6_row1_col4\" class=\"data row1 col4\" >10</td>\n",
" <td id=\"T_584e6_row1_col5\" class=\"data row1 col5\" >11</td>\n",
" <td id=\"T_584e6_row1_col6\" class=\"data row1 col6\" >12</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_584e6_row2_col0\" class=\"data row2 col0\" >13</td>\n",
" <td id=\"T_584e6_row2_col1\" class=\"data row2 col1\" >14</td>\n",
" <td id=\"T_584e6_row2_col2\" class=\"data row2 col2\" >15</td>\n",
" <td id=\"T_584e6_row2_col3\" class=\"data row2 col3\" >16</td>\n",
" <td id=\"T_584e6_row2_col4\" class=\"data row2 col4\" >17</td>\n",
" <td id=\"T_584e6_row2_col5\" class=\"data row2 col5\" >18</td>\n",
" <td id=\"T_584e6_row2_col6\" class=\"data row2 col6\" >19</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_584e6_row3_col0\" class=\"data row3 col0\" >20</td>\n",
" <td id=\"T_584e6_row3_col1\" class=\"data row3 col1\" >21</td>\n",
" <td id=\"T_584e6_row3_col2\" class=\"data row3 col2\" >22</td>\n",
" <td id=\"T_584e6_row3_col3\" class=\"data row3 col3\" >23</td>\n",
" <td id=\"T_584e6_row3_col4\" class=\"data row3 col4\" >24</td>\n",
" <td id=\"T_584e6_row3_col5\" class=\"data row3 col5\" >25</td>\n",
" <td id=\"T_584e6_row3_col6\" class=\"data row3 col6\" >26</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_584e6_row4_col0\" class=\"data row4 col0\" >27</td>\n",
" <td id=\"T_584e6_row4_col1\" class=\"data row4 col1\" >28</td>\n",
" <td id=\"T_584e6_row4_col2\" class=\"data row4 col2\" >29</td>\n",
" <td id=\"T_584e6_row4_col3\" class=\"data row4 col3\" >30</td>\n",
" <td id=\"T_584e6_row4_col4\" class=\"data row4 col4\" >0</td>\n",
" <td id=\"T_584e6_row4_col5\" class=\"data row4 col5\" >0</td>\n",
" <td id=\"T_584e6_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>October 2021</h2><style type=\"text/css\">\n",
"#T_5b5c0_row0_col0, #T_5b5c0_row0_col1, #T_5b5c0_row0_col2, #T_5b5c0_row0_col3 {\n",
" font-size: 0px;\n",
"}\n",
"#T_5b5c0_row0_col4, #T_5b5c0_row0_col5, #T_5b5c0_row0_col6, #T_5b5c0_row1_col0, #T_5b5c0_row1_col1, #T_5b5c0_row1_col2, #T_5b5c0_row1_col3, #T_5b5c0_row1_col4, #T_5b5c0_row1_col5, #T_5b5c0_row1_col6, #T_5b5c0_row2_col1, #T_5b5c0_row2_col2, #T_5b5c0_row2_col3, #T_5b5c0_row2_col4, #T_5b5c0_row2_col5, #T_5b5c0_row2_col6, #T_5b5c0_row3_col0, #T_5b5c0_row3_col1, #T_5b5c0_row3_col2, #T_5b5c0_row3_col3, #T_5b5c0_row3_col4, #T_5b5c0_row3_col5, #T_5b5c0_row3_col6, #T_5b5c0_row4_col0, #T_5b5c0_row4_col1, #T_5b5c0_row4_col2, #T_5b5c0_row4_col3, #T_5b5c0_row4_col4, #T_5b5c0_row4_col5, #T_5b5c0_row4_col6 {\n",
" background-color: purple;\n",
"}\n",
"#T_5b5c0_row2_col0 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_5b5c0_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_5b5c0_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_5b5c0_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_5b5c0_row0_col2\" class=\"data row0 col2\" >0</td>\n",
" <td id=\"T_5b5c0_row0_col3\" class=\"data row0 col3\" >0</td>\n",
" <td id=\"T_5b5c0_row0_col4\" class=\"data row0 col4\" >1</td>\n",
" <td id=\"T_5b5c0_row0_col5\" class=\"data row0 col5\" >2</td>\n",
" <td id=\"T_5b5c0_row0_col6\" class=\"data row0 col6\" >3</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_5b5c0_row1_col0\" class=\"data row1 col0\" >4</td>\n",
" <td id=\"T_5b5c0_row1_col1\" class=\"data row1 col1\" >5</td>\n",
" <td id=\"T_5b5c0_row1_col2\" class=\"data row1 col2\" >6</td>\n",
" <td id=\"T_5b5c0_row1_col3\" class=\"data row1 col3\" >7</td>\n",
" <td id=\"T_5b5c0_row1_col4\" class=\"data row1 col4\" >8</td>\n",
" <td id=\"T_5b5c0_row1_col5\" class=\"data row1 col5\" >9</td>\n",
" <td id=\"T_5b5c0_row1_col6\" class=\"data row1 col6\" >10</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_5b5c0_row2_col0\" class=\"data row2 col0\" >11</td>\n",
" <td id=\"T_5b5c0_row2_col1\" class=\"data row2 col1\" >12</td>\n",
" <td id=\"T_5b5c0_row2_col2\" class=\"data row2 col2\" >13</td>\n",
" <td id=\"T_5b5c0_row2_col3\" class=\"data row2 col3\" >14</td>\n",
" <td id=\"T_5b5c0_row2_col4\" class=\"data row2 col4\" >15</td>\n",
" <td id=\"T_5b5c0_row2_col5\" class=\"data row2 col5\" >16</td>\n",
" <td id=\"T_5b5c0_row2_col6\" class=\"data row2 col6\" >17</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_5b5c0_row3_col0\" class=\"data row3 col0\" >18</td>\n",
" <td id=\"T_5b5c0_row3_col1\" class=\"data row3 col1\" >19</td>\n",
" <td id=\"T_5b5c0_row3_col2\" class=\"data row3 col2\" >20</td>\n",
" <td id=\"T_5b5c0_row3_col3\" class=\"data row3 col3\" >21</td>\n",
" <td id=\"T_5b5c0_row3_col4\" class=\"data row3 col4\" >22</td>\n",
" <td id=\"T_5b5c0_row3_col5\" class=\"data row3 col5\" >23</td>\n",
" <td id=\"T_5b5c0_row3_col6\" class=\"data row3 col6\" >24</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_5b5c0_row4_col0\" class=\"data row4 col0\" >25</td>\n",
" <td id=\"T_5b5c0_row4_col1\" class=\"data row4 col1\" >26</td>\n",
" <td id=\"T_5b5c0_row4_col2\" class=\"data row4 col2\" >27</td>\n",
" <td id=\"T_5b5c0_row4_col3\" class=\"data row4 col3\" >28</td>\n",
" <td id=\"T_5b5c0_row4_col4\" class=\"data row4 col4\" >29</td>\n",
" <td id=\"T_5b5c0_row4_col5\" class=\"data row4 col5\" >30</td>\n",
" <td id=\"T_5b5c0_row4_col6\" class=\"data row4 col6\" >31</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>November 2021</h2><style type=\"text/css\">\n",
"#T_fdc7e_row0_col0, #T_fdc7e_row0_col1, #T_fdc7e_row0_col2, #T_fdc7e_row0_col3, #T_fdc7e_row0_col4, #T_fdc7e_row0_col5, #T_fdc7e_row0_col6, #T_fdc7e_row1_col0, #T_fdc7e_row1_col1, #T_fdc7e_row1_col2, #T_fdc7e_row1_col4, #T_fdc7e_row1_col5, #T_fdc7e_row1_col6, #T_fdc7e_row2_col0, #T_fdc7e_row2_col1, #T_fdc7e_row2_col2, #T_fdc7e_row2_col3, #T_fdc7e_row2_col4, #T_fdc7e_row2_col5, #T_fdc7e_row2_col6, #T_fdc7e_row3_col0, #T_fdc7e_row3_col1, #T_fdc7e_row3_col2, #T_fdc7e_row3_col4, #T_fdc7e_row3_col5, #T_fdc7e_row3_col6, #T_fdc7e_row4_col0, #T_fdc7e_row4_col1 {\n",
" background-color: purple;\n",
"}\n",
"#T_fdc7e_row1_col3, #T_fdc7e_row3_col3 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"#T_fdc7e_row4_col2, #T_fdc7e_row4_col3, #T_fdc7e_row4_col4, #T_fdc7e_row4_col5, #T_fdc7e_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"</style>\n",
"<table id=\"T_fdc7e_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_fdc7e_row0_col0\" class=\"data row0 col0\" >1</td>\n",
" <td id=\"T_fdc7e_row0_col1\" class=\"data row0 col1\" >2</td>\n",
" <td id=\"T_fdc7e_row0_col2\" class=\"data row0 col2\" >3</td>\n",
" <td id=\"T_fdc7e_row0_col3\" class=\"data row0 col3\" >4</td>\n",
" <td id=\"T_fdc7e_row0_col4\" class=\"data row0 col4\" >5</td>\n",
" <td id=\"T_fdc7e_row0_col5\" class=\"data row0 col5\" >6</td>\n",
" <td id=\"T_fdc7e_row0_col6\" class=\"data row0 col6\" >7</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_fdc7e_row1_col0\" class=\"data row1 col0\" >8</td>\n",
" <td id=\"T_fdc7e_row1_col1\" class=\"data row1 col1\" >9</td>\n",
" <td id=\"T_fdc7e_row1_col2\" class=\"data row1 col2\" >10</td>\n",
" <td id=\"T_fdc7e_row1_col3\" class=\"data row1 col3\" >11</td>\n",
" <td id=\"T_fdc7e_row1_col4\" class=\"data row1 col4\" >12</td>\n",
" <td id=\"T_fdc7e_row1_col5\" class=\"data row1 col5\" >13</td>\n",
" <td id=\"T_fdc7e_row1_col6\" class=\"data row1 col6\" >14</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_fdc7e_row2_col0\" class=\"data row2 col0\" >15</td>\n",
" <td id=\"T_fdc7e_row2_col1\" class=\"data row2 col1\" >16</td>\n",
" <td id=\"T_fdc7e_row2_col2\" class=\"data row2 col2\" >17</td>\n",
" <td id=\"T_fdc7e_row2_col3\" class=\"data row2 col3\" >18</td>\n",
" <td id=\"T_fdc7e_row2_col4\" class=\"data row2 col4\" >19</td>\n",
" <td id=\"T_fdc7e_row2_col5\" class=\"data row2 col5\" >20</td>\n",
" <td id=\"T_fdc7e_row2_col6\" class=\"data row2 col6\" >21</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_fdc7e_row3_col0\" class=\"data row3 col0\" >22</td>\n",
" <td id=\"T_fdc7e_row3_col1\" class=\"data row3 col1\" >23</td>\n",
" <td id=\"T_fdc7e_row3_col2\" class=\"data row3 col2\" >24</td>\n",
" <td id=\"T_fdc7e_row3_col3\" class=\"data row3 col3\" >25</td>\n",
" <td id=\"T_fdc7e_row3_col4\" class=\"data row3 col4\" >26</td>\n",
" <td id=\"T_fdc7e_row3_col5\" class=\"data row3 col5\" >27</td>\n",
" <td id=\"T_fdc7e_row3_col6\" class=\"data row3 col6\" >28</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_fdc7e_row4_col0\" class=\"data row4 col0\" >29</td>\n",
" <td id=\"T_fdc7e_row4_col1\" class=\"data row4 col1\" >30</td>\n",
" <td id=\"T_fdc7e_row4_col2\" class=\"data row4 col2\" >0</td>\n",
" <td id=\"T_fdc7e_row4_col3\" class=\"data row4 col3\" >0</td>\n",
" <td id=\"T_fdc7e_row4_col4\" class=\"data row4 col4\" >0</td>\n",
" <td id=\"T_fdc7e_row4_col5\" class=\"data row4 col5\" >0</td>\n",
" <td id=\"T_fdc7e_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
"<div class=\"month\"><h2>December 2021</h2><style type=\"text/css\">\n",
"#T_7d870_row0_col0, #T_7d870_row0_col1, #T_7d870_row4_col5, #T_7d870_row4_col6 {\n",
" font-size: 0px;\n",
"}\n",
"#T_7d870_row0_col2, #T_7d870_row0_col3, #T_7d870_row0_col4, #T_7d870_row0_col5, #T_7d870_row0_col6, #T_7d870_row1_col0, #T_7d870_row1_col1, #T_7d870_row1_col2, #T_7d870_row1_col3, #T_7d870_row1_col4, #T_7d870_row1_col5, #T_7d870_row1_col6, #T_7d870_row2_col0, #T_7d870_row2_col1, #T_7d870_row2_col2, #T_7d870_row2_col3, #T_7d870_row2_col4, #T_7d870_row2_col5, #T_7d870_row2_col6, #T_7d870_row3_col0, #T_7d870_row3_col1, #T_7d870_row3_col2, #T_7d870_row3_col3, #T_7d870_row3_col6, #T_7d870_row4_col0, #T_7d870_row4_col1, #T_7d870_row4_col2, #T_7d870_row4_col3 {\n",
" background-color: purple;\n",
"}\n",
"#T_7d870_row3_col4, #T_7d870_row3_col5, #T_7d870_row4_col4 {\n",
" background-color: yellow;\n",
" color: black;\n",
"}\n",
"</style>\n",
"<table id=\"T_7d870_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"col_heading level0 col0\" >0</th>\n",
" <th class=\"col_heading level0 col1\" >1</th>\n",
" <th class=\"col_heading level0 col2\" >2</th>\n",
" <th class=\"col_heading level0 col3\" >3</th>\n",
" <th class=\"col_heading level0 col4\" >4</th>\n",
" <th class=\"col_heading level0 col5\" >5</th>\n",
" <th class=\"col_heading level0 col6\" >6</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_7d870_row0_col0\" class=\"data row0 col0\" >0</td>\n",
" <td id=\"T_7d870_row0_col1\" class=\"data row0 col1\" >0</td>\n",
" <td id=\"T_7d870_row0_col2\" class=\"data row0 col2\" >1</td>\n",
" <td id=\"T_7d870_row0_col3\" class=\"data row0 col3\" >2</td>\n",
" <td id=\"T_7d870_row0_col4\" class=\"data row0 col4\" >3</td>\n",
" <td id=\"T_7d870_row0_col5\" class=\"data row0 col5\" >4</td>\n",
" <td id=\"T_7d870_row0_col6\" class=\"data row0 col6\" >5</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_7d870_row1_col0\" class=\"data row1 col0\" >6</td>\n",
" <td id=\"T_7d870_row1_col1\" class=\"data row1 col1\" >7</td>\n",
" <td id=\"T_7d870_row1_col2\" class=\"data row1 col2\" >8</td>\n",
" <td id=\"T_7d870_row1_col3\" class=\"data row1 col3\" >9</td>\n",
" <td id=\"T_7d870_row1_col4\" class=\"data row1 col4\" >10</td>\n",
" <td id=\"T_7d870_row1_col5\" class=\"data row1 col5\" >11</td>\n",
" <td id=\"T_7d870_row1_col6\" class=\"data row1 col6\" >12</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_7d870_row2_col0\" class=\"data row2 col0\" >13</td>\n",
" <td id=\"T_7d870_row2_col1\" class=\"data row2 col1\" >14</td>\n",
" <td id=\"T_7d870_row2_col2\" class=\"data row2 col2\" >15</td>\n",
" <td id=\"T_7d870_row2_col3\" class=\"data row2 col3\" >16</td>\n",
" <td id=\"T_7d870_row2_col4\" class=\"data row2 col4\" >17</td>\n",
" <td id=\"T_7d870_row2_col5\" class=\"data row2 col5\" >18</td>\n",
" <td id=\"T_7d870_row2_col6\" class=\"data row2 col6\" >19</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_7d870_row3_col0\" class=\"data row3 col0\" >20</td>\n",
" <td id=\"T_7d870_row3_col1\" class=\"data row3 col1\" >21</td>\n",
" <td id=\"T_7d870_row3_col2\" class=\"data row3 col2\" >22</td>\n",
" <td id=\"T_7d870_row3_col3\" class=\"data row3 col3\" >23</td>\n",
" <td id=\"T_7d870_row3_col4\" class=\"data row3 col4\" >24</td>\n",
" <td id=\"T_7d870_row3_col5\" class=\"data row3 col5\" >25</td>\n",
" <td id=\"T_7d870_row3_col6\" class=\"data row3 col6\" >26</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_7d870_row4_col0\" class=\"data row4 col0\" >27</td>\n",
" <td id=\"T_7d870_row4_col1\" class=\"data row4 col1\" >28</td>\n",
" <td id=\"T_7d870_row4_col2\" class=\"data row4 col2\" >29</td>\n",
" <td id=\"T_7d870_row4_col3\" class=\"data row4 col3\" >30</td>\n",
" <td id=\"T_7d870_row4_col4\" class=\"data row4 col4\" >31</td>\n",
" <td id=\"T_7d870_row4_col5\" class=\"data row4 col5\" >0</td>\n",
" <td id=\"T_7d870_row4_col6\" class=\"data row4 col6\" >0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div></div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" HTML(\"\"\"<div class=\"calendars\">%s</div>\"\"\" %\"\\n\".join([\n",
" \"\"\"<div class=\"month\"><h2>%s %i</h2>%s</div>\"\"\"%(\n",
" month_names[i[1]], i[0], monthly[i].render())\n",
" for i in monthly\n",
" ]))"
]
},
{
"cell_type": "markdown",
"id": "d889f8aa-7aa9-475e-abac-2fd5786647c7",
"metadata": {},
"source": [
"using the prior html output, and `div.calendars` as a reference we use the modern css [`grid` display layout](https://css-tricks.com/snippets/css/complete-guide-grid/). this results in the calendars being reorganized by the browser."
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "45a51ad0-892d-4cfb-bd04-290aa1db5bbd",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
" .calendars {\n",
" display: grid;\n",
" grid-template-columns: 1fr 1fr 1fr;\n",
" }\n",
" </style>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" HTML(\n",
" \"\"\"<style>\n",
" .calendars {\n",
" display: grid;\n",
" grid-template-columns: 1fr 1fr 1fr;\n",
" }\n",
" </style>\"\"\"\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "e7b1f912-a981-4c67-a381-e988662680ac",
"metadata": {},
"source": [
"## recap\n",
"\n",
"we've managed most of your goal using `pandas` until we needed to customize the display, at that point we combined knowledge of __html__ and __css__ to gain extra control over our display. we used a few interesting `pandas.DataFrame` features like:\n",
"\n",
"* `pandas.date_range` to begin our work with the calendar\n",
"* `pandas.DataFrame.assign` to set new columns on our dataframe\n",
"* `df.apply(pandas.Series)` to wide dataframes on container elements\n",
"* `pandas.DataFrame.unstack` to change the shape of our dataframe by translating row indexes to columns.\n",
"* `pandas.DataFrame.style` to use a dataframe to provide cell level styling in our output.\n",
"* we used `pandas.DataFrame.groupby` in a for loop, as an iterator, which is quite a powerful technique for inspecting grouped operations"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9977cbbd-1fa1-4a88-9377-251f701b317f",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment