-
-
Save ericdatakelly/e0945dbbabd8afb73a0125386b4c2942 to your computer and use it in GitHub Desktop.
making calendars in pandas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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\" > </th>\n", | |
" <th class=\"blank\" > </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\" > </th>\n", | |
" <th class=\"blank col1\" > </th>\n", | |
" <th class=\"blank col2\" > </th>\n", | |
" <th class=\"blank col3\" > </th>\n", | |
" <th class=\"blank col4\" > </th>\n", | |
" <th class=\"blank col5\" > </th>\n", | |
" <th class=\"blank col6\" > </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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
holidays | |
pandas |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment