add new arg (no plot) + analyse data function
This commit is contained in:
parent
2357303295
commit
a994f96eea
94
drees.py
94
drees.py
@ -167,6 +167,9 @@ def get_np_data(dic_data_grouped: Dict[dt, Any]) -> Tuple[np.ndarray, np.ndarray
|
|||||||
idx_field = get_enum_field(field)
|
idx_field = get_enum_field(field)
|
||||||
np_data[idx_date, idx_age, idx_vac, idx_field] = value
|
np_data[idx_date, idx_age, idx_vac, idx_field] = value
|
||||||
logging.info("date and data generated")
|
logging.info("date and data generated")
|
||||||
|
date_start = np_date[0]
|
||||||
|
date_end = np_date[len(np_date) - 1]
|
||||||
|
logging.info(f"range period : {date_start} - {date_end}")
|
||||||
return np_data, np_date
|
return np_data, np_date
|
||||||
|
|
||||||
|
|
||||||
@ -185,7 +188,7 @@ def get_vaccine_percent(np_data: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
|
|||||||
return np_percent_vac, np_percent_unvac
|
return np_percent_vac, np_percent_unvac
|
||||||
|
|
||||||
|
|
||||||
def get_percent_age_by_date_field(
|
def get_percent_age_by_date_field_vac_splited(
|
||||||
np_data: np.ndarray, field: Field
|
np_data: np.ndarray, field: Field
|
||||||
) -> Tuple[np.ndarray, np.ndarray]:
|
) -> Tuple[np.ndarray, np.ndarray]:
|
||||||
"""
|
"""
|
||||||
@ -213,10 +216,32 @@ def get_percent_age_by_date_field(
|
|||||||
return np_percent_age_vac, np_percent_age_unvac
|
return np_percent_age_vac, np_percent_age_unvac
|
||||||
|
|
||||||
|
|
||||||
|
def get_percent_age_by_date_field(np_data: np.ndarray, field: Field) -> np.ndarray:
|
||||||
|
"""
|
||||||
|
get numpy percent age grouped by date and field
|
||||||
|
"""
|
||||||
|
np_percent_age = np.empty((len(np_data), len(AgeGroup)))
|
||||||
|
for idx_date in range(len(np_data)):
|
||||||
|
sum_effectif = np.nansum(
|
||||||
|
np.nansum(np_data[idx_date, :, :, field.value], axis=1)
|
||||||
|
)
|
||||||
|
for age_group in AgeGroup:
|
||||||
|
np_percent_age[idx_date, age_group.value] = np.round(
|
||||||
|
(
|
||||||
|
np.sum(np_data[idx_date, age_group.value, :, field.value], axis=0)
|
||||||
|
/ sum_effectif
|
||||||
|
)
|
||||||
|
* 100,
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
return np_percent_age
|
||||||
|
|
||||||
|
|
||||||
def get_plot_fig(
|
def get_plot_fig(
|
||||||
grid: Optional[bool] = True,
|
grid: Optional[bool] = True,
|
||||||
date_format: Optional[str] = DATE_FORMAT,
|
date_format: Optional[str] = DATE_FORMAT,
|
||||||
figsize: Optional[Tuple[int, int]] = None,
|
figsize: Optional[Tuple[int, int]] = None,
|
||||||
|
locator: Optional[Any] = md.MonthLocator(),
|
||||||
) -> plt.figure:
|
) -> plt.figure:
|
||||||
"""
|
"""
|
||||||
return pyplot fig, ax to plot data over range period with date formatting
|
return pyplot fig, ax to plot data over range period with date formatting
|
||||||
@ -224,7 +249,7 @@ def get_plot_fig(
|
|||||||
fig, ax = plt.subplots(figsize=figsize)
|
fig, ax = plt.subplots(figsize=figsize)
|
||||||
ax.grid(grid)
|
ax.grid(grid)
|
||||||
date_formatter = md.DateFormatter(date_format)
|
date_formatter = md.DateFormatter(date_format)
|
||||||
ax.xaxis.set_major_locator(md.AutoDateLocator())
|
ax.xaxis.set_major_locator(locator)
|
||||||
ax.xaxis.set_major_formatter(date_formatter)
|
ax.xaxis.set_major_formatter(date_formatter)
|
||||||
fig.autofmt_xdate()
|
fig.autofmt_xdate()
|
||||||
return fig, ax
|
return fig, ax
|
||||||
@ -253,7 +278,7 @@ def analyse(np_data: np.ndarray, np_date: np.ndarray) -> None:
|
|||||||
logging.info("analysing data...")
|
logging.info("analysing data...")
|
||||||
np_percent_vac, _ = get_vaccine_percent(np_data)
|
np_percent_vac, _ = get_vaccine_percent(np_data)
|
||||||
|
|
||||||
logging.info("--- vaccine mean percent ---")
|
logging.info("--- field by age vaccine mean percent ---")
|
||||||
for age_group in AgeGroup:
|
for age_group in AgeGroup:
|
||||||
for field in Field:
|
for field in Field:
|
||||||
mean_vac_percent = np.round(
|
mean_vac_percent = np.round(
|
||||||
@ -261,11 +286,43 @@ def analyse(np_data: np.ndarray, np_date: np.ndarray) -> None:
|
|||||||
)
|
)
|
||||||
print(f"{field.label} - {age_group.label} - vac : {mean_vac_percent}%")
|
print(f"{field.label} - {age_group.label} - vac : {mean_vac_percent}%")
|
||||||
|
|
||||||
|
logging.info("--- age by field and vac status mean percent ---")
|
||||||
|
for field in Field:
|
||||||
|
np_percent_age = get_percent_age_by_date_field(np_data, field)
|
||||||
|
(
|
||||||
|
np_percent_age_vac,
|
||||||
|
np_percent_age_unvac,
|
||||||
|
) = get_percent_age_by_date_field_vac_splited(np_data, field)
|
||||||
|
for age_group in AgeGroup:
|
||||||
|
percent_age_mean = np.round(
|
||||||
|
np.nanmean(np_percent_age[:, age_group.value]), 2
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"age: {age_group.label} - field: {field.label} = {percent_age_mean}%"
|
||||||
|
)
|
||||||
|
|
||||||
|
percent_age_vac_mean = np.round(
|
||||||
|
np.nanmean(np_percent_age_vac[:, age_group.value]), 2
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"age: {age_group.label} - status: vac - field: {field.label} = {percent_age_vac_mean}%"
|
||||||
|
)
|
||||||
|
|
||||||
|
percent_age_unvac_mean = np.round(
|
||||||
|
np.nanmean(np_percent_age_unvac[:, age_group.value]), 2
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"age: {age_group.label} - status: unvac - field: {field.label} = {percent_age_unvac_mean}%"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def plot_bar_age_percent_vac_status_by_field(
|
def plot_bar_age_percent_vac_status_by_field(
|
||||||
np_data_vac_status: np.ndarray, field: Field, is_vac: Optional[bool] = True
|
np_data_vac_status: np.ndarray,
|
||||||
|
np_date: np.ndarray,
|
||||||
|
field: Field,
|
||||||
|
is_vac: Optional[bool] = True,
|
||||||
) -> None:
|
) -> None:
|
||||||
fig, ax = get_plot_fig(figsize=(22, 8))
|
fig, ax = get_plot_fig(figsize=(22, 8), locator=md.WeekdayLocator())
|
||||||
bottom = np_data_vac_status[:, 0]
|
bottom = np_data_vac_status[:, 0]
|
||||||
title = "vac" if is_vac else "no vac"
|
title = "vac" if is_vac else "no vac"
|
||||||
for age_group in AgeGroup:
|
for age_group in AgeGroup:
|
||||||
@ -299,15 +356,20 @@ def plot_bar_age_percent_vac_status_by_field(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def plot_bar_age_percent_by_field(np_data: np.ndarray, field: Field) -> None:
|
def plot_bar_age_percent_by_field(
|
||||||
|
np_data: np.ndarray, np_date: np.ndarray, field: Field
|
||||||
|
) -> None:
|
||||||
"""
|
"""
|
||||||
plot percent vaccinated field group by age bar diagram
|
plot percent vaccinated field group by age bar diagram
|
||||||
"""
|
"""
|
||||||
np_percent_age_vac, np_percent_age_unvac = get_percent_age_by_date_field(
|
(
|
||||||
np_data, field
|
np_percent_age_vac,
|
||||||
|
np_percent_age_unvac,
|
||||||
|
) = get_percent_age_by_date_field_vac_splited(np_data, field)
|
||||||
|
plot_bar_age_percent_vac_status_by_field(np_percent_age_vac, np_date, field)
|
||||||
|
plot_bar_age_percent_vac_status_by_field(
|
||||||
|
np_percent_age_unvac, np_date, field, is_vac=False
|
||||||
)
|
)
|
||||||
plot_bar_age_percent_vac_status_by_field(np_percent_age_vac, field)
|
|
||||||
plot_bar_age_percent_vac_status_by_field(np_percent_age_unvac, field, is_vac=False)
|
|
||||||
|
|
||||||
|
|
||||||
def plot_cumulative_field(
|
def plot_cumulative_field(
|
||||||
@ -366,7 +428,6 @@ def plot_bar_data_by_age_field(
|
|||||||
"""
|
"""
|
||||||
display a bar graph by field and age over the data period
|
display a bar graph by field and age over the data period
|
||||||
bars display vaccine status percent
|
bars display vaccine status percent
|
||||||
a limit days period is set to have an readable plot
|
|
||||||
"""
|
"""
|
||||||
np_percent_vac, np_percent_unvac = get_vaccine_percent(np_data)
|
np_percent_vac, np_percent_unvac = get_vaccine_percent(np_data)
|
||||||
# adjust the fig size to display correctly bars and labels
|
# adjust the fig size to display correctly bars and labels
|
||||||
@ -451,6 +512,13 @@ if __name__ == "__main__":
|
|||||||
default=False,
|
default=False,
|
||||||
help="redownload data for updates",
|
help="redownload data for updates",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-np",
|
||||||
|
"--no-plot",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="redownload data for updates",
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@ -460,11 +528,11 @@ if __name__ == "__main__":
|
|||||||
file_path=os.path.join(DATA_REPOSITORY, "dress.json"), refresh=args.refresh
|
file_path=os.path.join(DATA_REPOSITORY, "dress.json"), refresh=args.refresh
|
||||||
)
|
)
|
||||||
dic_data_grouped: Dict[dt, Any] = group_by_age_date(dic_data)
|
dic_data_grouped: Dict[dt, Any] = group_by_age_date(dic_data)
|
||||||
|
|
||||||
np_data, np_date = get_np_data(dic_data_grouped)
|
np_data, np_date = get_np_data(dic_data_grouped)
|
||||||
|
|
||||||
analyse(np_data, np_date)
|
analyse(np_data, np_date)
|
||||||
|
|
||||||
|
if not args.no_plot:
|
||||||
plot_fields_args = get_age_vac_args()
|
plot_fields_args = get_age_vac_args()
|
||||||
f_fields = partial(plot_fields_by_age_vac, np_data, np_date)
|
f_fields = partial(plot_fields_by_age_vac, np_data, np_date)
|
||||||
plot_vac_percent_age_args = get_age_field_args()
|
plot_vac_percent_age_args = get_age_field_args()
|
||||||
@ -475,4 +543,4 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
for field in Field:
|
for field in Field:
|
||||||
plot_cumulative_field(np_data, np_date, field)
|
plot_cumulative_field(np_data, np_date, field)
|
||||||
plot_bar_age_percent_by_field(np_data, field)
|
plot_bar_age_percent_by_field(np_data, np_date, field)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user