Files
testing123/section_1_graph_export_module/counselling_interval_script.py
2026-05-21 08:40:24 -04:00

190 lines
8.6 KiB
Python

# FILE: counselling_interval_script.py
# CREATED: 1/12/25
# AUTHOR: Vincent Allen
# CONTACT: vincent@vtallen.com valle276@live.kutztown.edu
# PURPOSE:
# This library file implements control code needed to take the input yearly satisfaction survey data obtained through
# the satisfaction survey scorecard in Neoserra and pass it to the library functions that generate the graph images.
# No data cleaning is required for the files in this dataset as the scorecard does that for us. We are just taking the data and showing it per
# center instead of network wide. The network wide stat is retained through a horizontal line.
# Third party libraries
import pandas as pd
# Python modules
import sys
import os.path
import argparse
import json
# Custom modules
from section_1_graph_library_module import ( #pyright:ignore
make_interval_snapshot_chart
)
from pasbdc_data_cleaning import clean_center_name #pyright:ignore
from constants_module import NEOSERRA_COLUMNS, OUT_COLUMNS
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--signuptostartcsv",
type=str,
required=True,
help='The path to the dataset containing the "Average # of Days between Client Sign-up and Client Start Date" from the Neoserra scorecard. If provided the graph will be generated')
parser.add_argument("--signuptostartfigure",
type=str,
required=False,
default="signuptostart",
help='The filename to give the sign up to client start date graph.')
parser.add_argument("--signuptocounsellingcsv",
type=str,
required=True,
help='The path to the dataset containing the "Average # of Days between Client Sign-up and 1st Counseling Session" from the Neoserra scorecard. If provided the graph will be generated')
parser.add_argument("--signuptocounsellingfigure",
type=str,
required=False,
default="signuptocounselling",
help='The filename to give the sign up to first counselling graph.')
parser.add_argument("--starttocounsellingcsv",
type=str,
required=True,
help='The path to the dataset containing the "Average # of Days between Client Start Date to 1st Counseling Session" from the Neoserra scorecard. If provided the graph will be generated')
parser.add_argument("--starttocounsellingfigure",
type=str,
required=False,
default="starttocounselling",
help='The filename to give the sign up to first counselling graph.')
parser.add_argument("--initialtofollowupcsv",
type=str,
required=True,
help='The path to the dataset containing the "Average # of Days between Initial Counseling in the period to 1st Followup Counseling" from the Neoserra scorecard. If provided the graph will be generated')
parser.add_argument("--initialtofollowupfigure",
type=str,
required=False,
default="initialtofollowup",
help='The filename to give the inital session to follow up graph.')
parser.add_argument("--trainingtocounsellingcsv",
type=str,
required=True,
help='The path to the dataset containing the "Avg. # of Days between Training in the period to 1st Counseling Session" from the Neoserra scorecard. If provided the graph will be generated')
parser.add_argument("--trainingtocounsellingfigure",
type=str,
required=False,
default="trainingtocounselling",
help='The filename to give the inital session to follow up graph.')
parser.add_argument("--fiscalyear",
type=str,
required=True,
help="The fiscal year tag to place at the end of graph titles to indicate which year the data came from.")
parser.add_argument("--outpath",
type=str,
required=True,
help="The base directory path to place generated files into.")
parser.add_argument("--report",
type=str,
required=False,
default="counselling-interval",
help="The name to give the graphs of this report. Will be used by the word code to determine what report the grpahs belong to."
)
parser.add_argument("--mapping",
type=str,
required=False,
help="Path to a JSON file to override default column names mappings.")
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
# Handle optional JSON mapping override
if args.mapping:
NEOSERRA_COLUMNS.apply_json_mapping(args.mapping)
OUT_COLUMNS.apply_json_mapping(args.mapping)
# Ensure output directory exists
if not os.path.exists(args.outpath):
try:
os.makedirs(args.outpath)
except OSError as e:
print(f"Error creating output directory: {e}")
sys.exit(1)
if args.signuptostartcsv:
signup_to_start_df = pd.read_csv(args.signuptostartcsv)
# Filter out a testing record that can appear in this data set
signup_to_start_df = signup_to_start_df[signup_to_start_df[NEOSERRA_COLUMNS.center] != 'API Testing Sandbox']
clean_center_name(signup_to_start_df )
fig = make_interval_snapshot_chart(
signup_to_start_df,
title=f"Average Days between Client Sign-up and Client Start Date",
fiscal_year_tag=args.fiscalyear,
col_interval_data_value=NEOSERRA_COLUMNS.interval_data_value,
col_neo_center=NEOSERRA_COLUMNS.center
)
fig.write_image(os.path.join(args.outpath, f"{args.report}_{args.signuptostartfigure}_.png"))
if args.signuptocounsellingcsv:
signup_to_counselling_df = pd.read_csv(args.signuptocounsellingcsv)
clean_center_name(signup_to_counselling_df )
fig = make_interval_snapshot_chart(
signup_to_counselling_df ,
title=f"Average Days between Client Sign-up and 1st Counseling Session",
fiscal_year_tag=args.fiscalyear,
col_interval_data_value=NEOSERRA_COLUMNS.interval_data_value,
col_neo_center=NEOSERRA_COLUMNS.center
)
fig.write_image(os.path.join(args.outpath, f"{args.report}_{args.signuptocounsellingfigure}_.png"))
if args.starttocounsellingcsv:
start_to_counselling_df = pd.read_csv(args.starttocounsellingcsv)
clean_center_name(start_to_counselling_df )
fig = make_interval_snapshot_chart(
start_to_counselling_df,
title=f"Average Days between Client Start Date and 1st Counseling Session",
fiscal_year_tag=args.fiscalyear,
col_interval_data_value=NEOSERRA_COLUMNS.interval_data_value,
col_neo_center=NEOSERRA_COLUMNS.center
)
fig.write_image(os.path.join(args.outpath, f"{args.report}_{args.starttocounsellingfigure}_.png"))
if args.initialtofollowupcsv:
inital_to_followup_df = pd.read_csv(args.initialtofollowupcsv)
clean_center_name(inital_to_followup_df )
fig = make_interval_snapshot_chart(
inital_to_followup_df ,
title=f"Average Days between Initial Counseling and 1st Followup Counseling",
fiscal_year_tag=args.fiscalyear,
col_interval_data_value=NEOSERRA_COLUMNS.interval_data_value,
col_neo_center=NEOSERRA_COLUMNS.center
)
fig.write_image(os.path.join(args.outpath, f"{args.report}_{args.initialtofollowupfigure}_.png"))
if args.trainingtocounsellingcsv:
training_to_counselling_df = pd.read_csv(args.trainingtocounsellingcsv)
clean_center_name(training_to_counselling_df )
fig = make_interval_snapshot_chart(
training_to_counselling_df,
title=f"Average Days between Training and 1st Counseling Session",
fiscal_year_tag=args.fiscalyear,
col_interval_data_value=NEOSERRA_COLUMNS.interval_data_value,
col_neo_center=NEOSERRA_COLUMNS.center
)
fig.write_image(os.path.join(args.outpath, f"{args.report}_{args.trainingtocounsellingfigure}_.png"))