Add volunteer frequency histogram code.
This commit is contained in:
parent
f42974dcd7
commit
9d088cf93c
5 changed files with 130 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -18,3 +18,6 @@ video.webm
|
||||||
|
|
||||||
# Optional env file for some environments
|
# Optional env file for some environments
|
||||||
env
|
env
|
||||||
|
|
||||||
|
# Diagnostic output
|
||||||
|
output.svg
|
||||||
|
|
|
@ -5,6 +5,7 @@ from files.__main__ import app
|
||||||
from files.commands.cron import cron_app_worker
|
from files.commands.cron import cron_app_worker
|
||||||
from files.commands.seed_db import seed_db
|
from files.commands.seed_db import seed_db
|
||||||
from files.commands.volunteer_janitor_recalc import volunteer_janitor_recalc
|
from files.commands.volunteer_janitor_recalc import volunteer_janitor_recalc
|
||||||
|
from files.commands.volunteer_janitor_histogram import volunteer_janitor_histogram_cmd
|
||||||
from files.commands.cron_setup import cron_setup
|
from files.commands.cron_setup import cron_setup
|
||||||
import files.classes
|
import files.classes
|
||||||
|
|
||||||
|
|
35
files/commands/volunteer_janitor_histogram.py
Normal file
35
files/commands/volunteer_janitor_histogram.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
from files.classes.volunteer_janitor import VolunteerJanitorRecord
|
||||||
|
|
||||||
|
from files.__main__ import app, db_session
|
||||||
|
|
||||||
|
@app.cli.command('volunteer_janitor_histogram')
|
||||||
|
def volunteer_janitor_histogram_cmd():
|
||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
result_set = db_session().query(VolunteerJanitorRecord.recorded_utc).all()
|
||||||
|
|
||||||
|
# convert the result into a pandas DataFrame
|
||||||
|
df = pd.DataFrame(result_set, columns=['recorded_utc'])
|
||||||
|
|
||||||
|
# convert the date column to datetime
|
||||||
|
df['recorded_utc'] = pd.to_datetime(df['recorded_utc'])
|
||||||
|
|
||||||
|
# set 'recorded_utc' as the index of the DataFrame
|
||||||
|
df.set_index('recorded_utc', inplace=True)
|
||||||
|
|
||||||
|
# resample the data to daily frequency
|
||||||
|
df_resampled = df.resample('D').size()
|
||||||
|
|
||||||
|
# plot the resampled DataFrame
|
||||||
|
df_resampled.plot(kind='line')
|
||||||
|
plt.title('Density of Dates over Time')
|
||||||
|
plt.xlabel('Date')
|
||||||
|
plt.ylabel('Count')
|
||||||
|
|
||||||
|
# save the figure in SVG format
|
||||||
|
plt.savefig('output.svg', format='svg')
|
||||||
|
print(len(result_set))
|
90
poetry.lock
generated
90
poetry.lock
generated
|
@ -1363,6 +1363,70 @@ files = [
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
|
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pandas"
|
||||||
|
version = "2.0.2"
|
||||||
|
description = "Powerful data structures for data analysis, time series, and statistics"
|
||||||
|
category = "dev"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pandas-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122"},
|
||||||
|
{file = "pandas-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181"},
|
||||||
|
{file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145"},
|
||||||
|
{file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c"},
|
||||||
|
{file = "pandas-2.0.2-cp310-cp310-win32.whl", hash = "sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86"},
|
||||||
|
{file = "pandas-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8"},
|
||||||
|
{file = "pandas-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f"},
|
||||||
|
{file = "pandas-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d"},
|
||||||
|
{file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba"},
|
||||||
|
{file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee"},
|
||||||
|
{file = "pandas-2.0.2-cp311-cp311-win32.whl", hash = "sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456"},
|
||||||
|
{file = "pandas-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08"},
|
||||||
|
{file = "pandas-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c"},
|
||||||
|
{file = "pandas-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b"},
|
||||||
|
{file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0"},
|
||||||
|
{file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2"},
|
||||||
|
{file = "pandas-2.0.2-cp38-cp38-win32.whl", hash = "sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08"},
|
||||||
|
{file = "pandas-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79"},
|
||||||
|
{file = "pandas-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8"},
|
||||||
|
{file = "pandas-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774"},
|
||||||
|
{file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44"},
|
||||||
|
{file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5"},
|
||||||
|
{file = "pandas-2.0.2-cp39-cp39-win32.whl", hash = "sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77"},
|
||||||
|
{file = "pandas-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea"},
|
||||||
|
{file = "pandas-2.0.2.tar.gz", hash = "sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
numpy = {version = ">=1.21.0", markers = "python_version >= \"3.10\""}
|
||||||
|
python-dateutil = ">=2.8.2"
|
||||||
|
pytz = ">=2020.1"
|
||||||
|
tzdata = ">=2022.1"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"]
|
||||||
|
aws = ["s3fs (>=2021.08.0)"]
|
||||||
|
clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"]
|
||||||
|
compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"]
|
||||||
|
computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"]
|
||||||
|
excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"]
|
||||||
|
feather = ["pyarrow (>=7.0.0)"]
|
||||||
|
fss = ["fsspec (>=2021.07.0)"]
|
||||||
|
gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"]
|
||||||
|
hdf5 = ["tables (>=3.6.1)"]
|
||||||
|
html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"]
|
||||||
|
mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"]
|
||||||
|
output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"]
|
||||||
|
parquet = ["pyarrow (>=7.0.0)"]
|
||||||
|
performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"]
|
||||||
|
plot = ["matplotlib (>=3.6.1)"]
|
||||||
|
postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"]
|
||||||
|
spss = ["pyreadstat (>=1.1.2)"]
|
||||||
|
sql-other = ["SQLAlchemy (>=1.4.16)"]
|
||||||
|
test = ["hypothesis (>=6.34.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"]
|
||||||
|
xml = ["lxml (>=4.6.3)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pillow"
|
name = "pillow"
|
||||||
version = "9.3.0"
|
version = "9.3.0"
|
||||||
|
@ -1741,6 +1805,18 @@ python-engineio = ">=4.3.0"
|
||||||
asyncio-client = ["aiohttp (>=3.4)"]
|
asyncio-client = ["aiohttp (>=3.4)"]
|
||||||
client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
|
client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pytz"
|
||||||
|
version = "2023.3"
|
||||||
|
description = "World timezone definitions, modern and historical"
|
||||||
|
category = "dev"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"},
|
||||||
|
{file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "qrcode"
|
name = "qrcode"
|
||||||
version = "7.3.1"
|
version = "7.3.1"
|
||||||
|
@ -2083,6 +2159,18 @@ files = [
|
||||||
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
|
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tzdata"
|
||||||
|
version = "2023.3"
|
||||||
|
description = "Provider of IANA time zone data"
|
||||||
|
category = "dev"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2"
|
||||||
|
files = [
|
||||||
|
{file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
|
||||||
|
{file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ua-parser"
|
name = "ua-parser"
|
||||||
version = "0.16.1"
|
version = "0.16.1"
|
||||||
|
@ -2346,4 +2434,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "~3.10" # updating to 3.11 causes instability; see https://github.com/themotte/rDrama/issues/446
|
python-versions = "~3.10" # updating to 3.11 causes instability; see https://github.com/themotte/rDrama/issues/446
|
||||||
content-hash = "8be89e30e9cbd8607184f0fa3f96d18dd7e48b47e9a6cd41440f13c807cdcec6"
|
content-hash = "b97cdf54a01257851bd007b5f8c52c4805dbd7f5b14b55f31df00bcce5376f51"
|
||||||
|
|
|
@ -47,6 +47,8 @@ optional = true
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
pytest = "*"
|
pytest = "*"
|
||||||
tabulate = "*"
|
tabulate = "*"
|
||||||
|
pandas = "*"
|
||||||
|
matplotlib = "*"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["poetry-core>=1.0.0"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue