energy-reports-pkg 0.6.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- energy_reports_pkg-0.6.14.dist-info/METADATA +10 -0
- energy_reports_pkg-0.6.14.dist-info/RECORD +221 -0
- energy_reports_pkg-0.6.14.dist-info/WHEEL +5 -0
- energy_reports_pkg-0.6.14.dist-info/top_level.txt +1 -0
- mindsett_energy_reports_pkg/config/__init__.py +6 -0
- mindsett_energy_reports_pkg/config/email/__init__.py +37 -0
- mindsett_energy_reports_pkg/config/monday/__init__.py +8 -0
- mindsett_energy_reports_pkg/config/monday/auth/__init__.py +7 -0
- mindsett_energy_reports_pkg/config/monday/columns_concerned/__init__.py +22 -0
- mindsett_energy_reports_pkg/config/postgresdb/__init__.py +33 -0
- mindsett_energy_reports_pkg/config/postgresdb/table/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_building/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_building_total/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_cache/__init__.py +30 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_iot/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_mailing/__init__.py +15 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_meta/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_occupancy/__init__.py +3 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_on_off/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_org/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_price/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_schedule/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_sqm/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_timezone/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/sharepoint/__init__.py +12 -0
- mindsett_energy_reports_pkg/config/sharepoint/excel/__init__.py +5 -0
- mindsett_energy_reports_pkg/config/sharepoint/excel/columns_concerned/__init__.py +7 -0
- mindsett_energy_reports_pkg/config/smtp/__init__.py +10 -0
- mindsett_energy_reports_pkg/jobs/databricks_job.py +31 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/__init__.py +14 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/launchInteractiveProcess.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardColumnNotMatch/__init__.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardNotFound/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorException/__init__.py +4 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoColumInBoard/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoGroupsInBoard/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoItemInGroup/__init__.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorPageNotSupported/__init__.py +7 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/__init__.py +8 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/__init__.py +40 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardById.py +13 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardLogsById.py +33 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchColumnValueByGroup.py +103 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchGroups.py +19 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConf.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByBoard.py +83 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByGroup.py +89 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchColumnIdsByName.py +23 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIds.py +30 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIdsMatch.py +20 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/column/__init__.py +2 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/launchInteractiveProcess.py +7 -0
- mindsett_energy_reports_pkg/libs/__init__.py +4 -0
- mindsett_energy_reports_pkg/libs/cache_return/__init__.py +47 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/load_cf_from_db/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/__init__.py +52 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/__init__.py +57 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/get_mailing_list/__init__.py +25 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/__init__.py +50 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/columns_concerned/__init__.py +22 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/get_last_update_time/__init__.py +26 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/__init__.py +27 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/load_cf_from_db/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/__init__.py +28 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/__init__.py +13 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/__init__.py +57 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/columns_concerned/__init__.py +8 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/# __init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/__init__.py +19 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/get_mailing_list/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/uuid_for_nona/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/__init__.py +30 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/get_excel_file_from_link/__init__.py +30 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/load_excel_as_df/__init__.py +45 -0
- mindsett_energy_reports_pkg/libs/generate_dag_id/__init__.py +20 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/__init__.py +42 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/__version__.py +8 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_airflow/__init__.py +47 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/__init__.py +25 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/databricks/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/local/__init__.py +13 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/__init__.py +15 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/connect_lake_and_fetch_json/__init__.py +19 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/datalake/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/__init__.py +2 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/__init__.py +119 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_end_time/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_period_range/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_schedule_records/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time/__init__.py +6 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time_co2_barchart/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/__init__.py +93 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/email_report/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/__init__.py +75 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/load_energy_price/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_building/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_org/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/check_and_keep_valid/__init__.py +36 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_sqm/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_timezone/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/__init__.py +43 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/__init__.py +71 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/plot_temperature_graph/__init__.py +35 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/plot_the_legend/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/generate_day_code/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/generate_day_code/generate_day_code_list/__init__.py +38 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_label_and_get_pos_bot_range/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_label_and_get_pos_bot_range/get_pos_bot_and_ylim/__init__.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_tick_lim_label_zero_line/__init__.py +23 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/__init__.py +21 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/groupby_date_and_ooh_current_period/__init__.py +39 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/patch_missing_columns_for_ooh_and_sign/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/patch_missing_dates/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/__init__.py +66 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/benchmarking_design/__init__.py +194 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/benchmarking_design/ruler_anno_shink_cf/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/energy_meter_design/__init__.py +233 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/preprocessing_for_energy_meter_with_benchmarking/__init__.py +23 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/__init__.py +41 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_avg_action_time/__init__.py +61 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_biggest_ooh/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_total_ooh/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/preprocessing_for_statement/__init__.py +85 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/__init__.py +49 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/set_x_label_prepare_xtick/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/set_x_tick_and_lim/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/setup_y_tick_lim_label_zero_line/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/__init__.py +43 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/patch_missing_ooh_periods_sign/__init__.py +23 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/__init__.py +56 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/__init__.py +109 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/colors/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/hatches/__init__.py +2 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_centre_pct/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/get_phase_markers/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/get_tick_values/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/__init__.py +108 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/ruler_anno_shink_cf/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/ruler_symbol_cf/__init__.py +35 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/__init__.py +87 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_gap_for_visibility/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_to_inner_ring/__init__.py +32 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_values_for_better_visibility/__init__.py +27 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/annotate_pct_on_pies/__init__.py +21 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/generate_pct_fmt/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/__init__.py +36 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_arrow/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_name/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_pct/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_sum/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/get_legend_handles/__init__.py +22 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_phases/__init__.py +37 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/group_and_pivot/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/__init__.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_change_pct_and_sort_and_trim_cols/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_entries_to_display/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_rank_overall_protect/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_subgroup_sum_and_rank/__init__.py +22 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_sum_for_curr_and_prev/__init__.py +20 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/write_multicell_with_styles.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/__init__.py +162 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/__init__.py +78 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/__init__.py +32 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_iot_data/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_iot_data/load_iot_data_partition/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_metadata/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_metadata/get_meta_statement/__init__.py +32 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/query_building_total/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/__init__.py +20 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/exchange_group_name_column/__init__.py +10 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/validate_data_not_empty/__init__.py +9 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/select_sites_and_emails/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/utils_/__init__.py +17 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_obj/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/utils_/color_dict/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/utils_/delete_files_in_directory/__init__.py +15 -0
- mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__init__.py +66 -0
- mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__version__.py +4 -0
- mindsett_energy_reports_pkg/mdl/utils_/generate_time_partition_list/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_group_with_others/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/__init__.py +37 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/get_pos_bot_and_ylim/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/utils_/modify_group_names/__init__.py +17 -0
- mindsett_energy_reports_pkg/mdl/utils_/patch_missing_periods/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/utils_/plot_stacked_barchart/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/utils_/send_email/__init__.py +73 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/check_table_existence/__init__.py +25 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_new_schema/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_table/__init__.py +73 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/empty_table/__init__.py +11 -0
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
from fetch_sharepoint_info import fetch_sharepoint_info
|
3
|
+
|
4
|
+
from .check_and_keep_valid import check_and_keep_valid
|
5
|
+
from .load_timezone import load_timezone
|
6
|
+
from .load_sqm import load_sqm
|
7
|
+
from .attach_id_to_buildings import attach_id_to_buildings
|
8
|
+
from .apply_price_from_db import apply_price_from_db
|
9
|
+
|
10
|
+
def load_config(engine,
|
11
|
+
sharepoint,
|
12
|
+
table_name_org,
|
13
|
+
table_name_building,
|
14
|
+
table_name_timezone,
|
15
|
+
table_name_sqm,
|
16
|
+
table_name_price,
|
17
|
+
table_name_cache,
|
18
|
+
table_columns_cache,
|
19
|
+
monday=None, # making if optional here, so in the future it can be ignored from the outer layer of functions
|
20
|
+
sync_source=None,
|
21
|
+
cfg_src_type=None):
|
22
|
+
|
23
|
+
if cfg_src_type is None:
|
24
|
+
cfg_src_type = 'sharepoint' # default to sharepoint as suggested by Pat
|
25
|
+
|
26
|
+
|
27
|
+
if cfg_src_type == 'sharepoint':
|
28
|
+
|
29
|
+
df_config_raw = fetch_sharepoint_info(engine,
|
30
|
+
sharepoint,
|
31
|
+
table_name_cache,
|
32
|
+
table_columns_cache,
|
33
|
+
sync_source=sync_source)
|
34
|
+
|
35
|
+
elif cfg_src_type == 'monday':
|
36
|
+
|
37
|
+
from fetch_monday_info import fetch_monday_info
|
38
|
+
|
39
|
+
if monday is None:
|
40
|
+
raise Exception('[ERROR]: the config for monday is not provided, but cfg_src_type is monday!')
|
41
|
+
|
42
|
+
df_config_raw = fetch_monday_info(engine,
|
43
|
+
monday.auth.TOKEN,
|
44
|
+
table_name_cache,
|
45
|
+
table_columns_cache,
|
46
|
+
monday.board_id,
|
47
|
+
columns_concerned=monday.columns_concerned,
|
48
|
+
email_prefix=monday.email_prefix,
|
49
|
+
sync_monday=sync_source)
|
50
|
+
|
51
|
+
else:
|
52
|
+
raise Exception('[ERROR]: please choose the cfg_src_type from options [sharepoint, monday].')
|
53
|
+
|
54
|
+
|
55
|
+
df_config = attach_id_to_buildings(engine, df_config_raw, table_name_org, table_name_building,
|
56
|
+
caching=False) # df_config has to be the same name, so not renaming it here
|
57
|
+
|
58
|
+
df_tz = load_timezone(engine, table_name_timezone)
|
59
|
+
df_config_tz = df_config.merge(df_tz, on='building_id', how='left')
|
60
|
+
|
61
|
+
df_sqm = load_sqm(engine, table_name_sqm)
|
62
|
+
df_config_tz_sqm = df_config_tz.merge(df_sqm, on='building_id', how='left')
|
63
|
+
|
64
|
+
df_config_tz_price = apply_price_from_db(engine, table_name_price, df_config_tz_sqm)
|
65
|
+
# df_price = load_energy_price(engine, table_name_price)
|
66
|
+
# df_config_tz_sqm = df_config_tz_sqm.rename(columns={'conv_mwh_price': 'conv_mwh_price_bak'})
|
67
|
+
# # df_config_tz_sqm_no_price = df_config_tz_sqm.drop(columns=['conv_mwh_price'])
|
68
|
+
# df_config_tz_price = df_config_tz_sqm.merge(df_price, on='building_id', how='left')
|
69
|
+
# df_config_tz_price['conv_mwh_price'] = df_config_tz_price['conv_mwh_price'].fillna(df_config_tz_price['conv_mwh_price_bak'])
|
70
|
+
# df_config_tz_price = df_config_tz_price.drop(columns=['conv_mwh_price_bak'])
|
71
|
+
|
72
|
+
df_config_vld = check_and_keep_valid(df_config_tz_price)
|
73
|
+
|
74
|
+
return df_config_vld
|
75
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
from .load_energy_price import load_energy_price
|
3
|
+
|
4
|
+
def apply_price_from_db(engine, table_name_price, df_config_tz_sqm):
|
5
|
+
|
6
|
+
df_price = load_energy_price(engine, table_name_price)
|
7
|
+
df_config_tz_sqm = df_config_tz_sqm.rename(columns={'conv_mwh_price': 'conv_mwh_price_bak'})
|
8
|
+
# df_config_tz_sqm_no_price = df_config_tz_sqm.drop(columns=['conv_mwh_price'])
|
9
|
+
df_config_tz_price = df_config_tz_sqm.merge(df_price, on='building_id', how='left')
|
10
|
+
df_config_tz_price['conv_mwh_price'] = df_config_tz_price['conv_mwh_price'].fillna(df_config_tz_price['conv_mwh_price_bak'])
|
11
|
+
df_config_tz_price = df_config_tz_price.drop(columns=['conv_mwh_price_bak'])
|
12
|
+
|
13
|
+
return df_config_tz_price
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
def load_energy_price(engine, table_name):
|
4
|
+
|
5
|
+
with engine.connect() as conn:
|
6
|
+
|
7
|
+
query = f"""select space_id as building_id, price*1000 as conv_mwh_price, start as start_time from {table_name};""" # meta.space_annotations
|
8
|
+
df_price_all = pd.read_sql_query(query, con=conn)
|
9
|
+
|
10
|
+
df_price_latest = df_price_all.loc[df_price_all.groupby('building_id').start_time.idxmax()].drop(columns='start_time')
|
11
|
+
|
12
|
+
return df_price_latest
|
13
|
+
|
14
|
+
# def load_energy_price():
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
from .load_building import load_building
|
3
|
+
from .load_org import load_org
|
4
|
+
|
5
|
+
from cache_return import cache_return
|
6
|
+
|
7
|
+
@cache_return
|
8
|
+
def attach_id_to_buildings(engine, df_config, table_org_name, table_building_name):
|
9
|
+
|
10
|
+
df_org = load_org(engine, table_org_name)
|
11
|
+
df_building = load_building(engine, table_building_name, caching=False)
|
12
|
+
df_bld_org = df_building.merge(df_org, on='org_id', how='left').dropna()
|
13
|
+
# df_config_bld_id = df_config.merge(df_bld_org, on=['building_name', 'org'], how='left')
|
14
|
+
# df_config = df_config.drop(columns=['building_name', 'org'])
|
15
|
+
df_config_bld_id = df_config.merge(df_bld_org, on='building_id', how='left')
|
16
|
+
is_missing_bld_name = df_config_bld_id.building_id.isna().any()
|
17
|
+
|
18
|
+
if is_missing_bld_name: # this part may not be very necessary after change the mergy on building_id
|
19
|
+
df_config_bld_name_missing = df_config_bld_id.loc[df_config_bld_id['building_name'].isna()]
|
20
|
+
|
21
|
+
missed_buildings = df_config_bld_name_missing['item_name'].to_list()
|
22
|
+
raise Exception(f"The name(s) for building id(s) {missed_buildings} cannot be found!")
|
23
|
+
|
24
|
+
return df_config_bld_id.drop(columns=['item_name', 'group_name'])
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
from cache_return import cache_return
|
4
|
+
|
5
|
+
@cache_return
|
6
|
+
def load_building(engine, table_name):
|
7
|
+
|
8
|
+
with engine.connect() as conn:
|
9
|
+
|
10
|
+
query = f""" select id as building_id
|
11
|
+
,name as building_name
|
12
|
+
,org_id
|
13
|
+
from {table_name} """ # meta.space_annotations
|
14
|
+
|
15
|
+
df_building = pd.read_sql_query(query, con=conn)
|
16
|
+
|
17
|
+
df_building.building_name = df_building.building_name.str.strip()
|
18
|
+
|
19
|
+
return df_building
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
def load_org(engine, table_name):
|
4
|
+
|
5
|
+
with engine.connect() as conn:
|
6
|
+
|
7
|
+
query = f""" select id as org_id, name as org from {table_name} """ # meta.space_annotations
|
8
|
+
|
9
|
+
df_org = pd.read_sql_query(query, con=conn)
|
10
|
+
|
11
|
+
df_org.org = df_org.org.str.strip()
|
12
|
+
|
13
|
+
return df_org
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
def check_and_keep_valid(df_config):
|
3
|
+
|
4
|
+
df_config = df_config.fillna('')
|
5
|
+
|
6
|
+
# df_config = keep_valid(df_config, columns=['industry', 'floor_size', 'conv_mwh_price', 'timezone'])
|
7
|
+
|
8
|
+
no_industry = (df_config.industry == '')
|
9
|
+
no_floor_size = (df_config.floor_size.isna())
|
10
|
+
|
11
|
+
# print('df_config.conv_mwh_price: ', df_config.conv_mwh_price)
|
12
|
+
|
13
|
+
no_conv_mwh_price = (df_config.conv_mwh_price == 0)
|
14
|
+
no_timezone = (df_config.timezone.isna())
|
15
|
+
|
16
|
+
not_ready = (no_industry | no_floor_size | no_conv_mwh_price | no_timezone)
|
17
|
+
|
18
|
+
to_report = (df_config.publish | df_config.testing)
|
19
|
+
|
20
|
+
not_ready_but_report = (not_ready & to_report)
|
21
|
+
|
22
|
+
df_not_ready_but_report = df_config.loc[not_ready_but_report]
|
23
|
+
|
24
|
+
if df_not_ready_but_report.shape[0] > 0:
|
25
|
+
|
26
|
+
print('df_not_ready_but_report.T: ', df_not_ready_but_report.T)
|
27
|
+
|
28
|
+
raise Exception('df_not_ready_but_report is not empty, please double check the config of [industry, floor_size, conv_mwh_price, timezone] for these sites!')
|
29
|
+
|
30
|
+
df_config_ready = df_config.loc[~not_ready]
|
31
|
+
|
32
|
+
# quit()
|
33
|
+
|
34
|
+
return df_config_ready
|
35
|
+
|
36
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
def load_sqm(engine, table_name):
|
4
|
+
|
5
|
+
with engine.connect() as conn:
|
6
|
+
|
7
|
+
query = f""" select space_id as building_id, sqm as floor_size from {table_name};""" # meta.space_annotations
|
8
|
+
|
9
|
+
df_tz = pd.read_sql_query(query, con=conn)
|
10
|
+
|
11
|
+
return df_tz
|
mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_timezone/__init__.py
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
def load_timezone(engine, table_name):
|
4
|
+
|
5
|
+
with engine.connect() as conn:
|
6
|
+
|
7
|
+
query = f""" select space_id as building_id, value as timezone from {table_name} where key ='timezone' """ # meta.space_annotations
|
8
|
+
|
9
|
+
df_tz = pd.read_sql_query(query, con=conn)
|
10
|
+
|
11
|
+
return df_tz
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
import matplotlib
|
3
|
+
matplotlib.use('Agg') # turn off the display graphs
|
4
|
+
|
5
|
+
from .preparing_source_data import preparing_source_data
|
6
|
+
from .generate_components import generate_components
|
7
|
+
from .generate_report import generate_report
|
8
|
+
|
9
|
+
def prepare_report(cf, site_obj,
|
10
|
+
debug=False,
|
11
|
+
report_file_folder=None,
|
12
|
+
directory_to_savefile=None):
|
13
|
+
|
14
|
+
df_meta_with_value, df_meta_with_value_building = preparing_source_data(cf.postgresdb,
|
15
|
+
site_obj,
|
16
|
+
debug=debug,
|
17
|
+
caching=False)
|
18
|
+
|
19
|
+
# currently site_name is used for building_occupancy
|
20
|
+
components = generate_components(cf.postgresdb, df_meta_with_value, df_meta_with_value_building, site_obj,
|
21
|
+
fontsize=13,
|
22
|
+
directory_to_savefile=directory_to_savefile)
|
23
|
+
|
24
|
+
|
25
|
+
current_period = df_meta_with_value.period.max() # + pd.offsets.Week()
|
26
|
+
|
27
|
+
try: # handle the case where insights statement is not provided
|
28
|
+
report_file_dict = generate_report(site_obj.site_name, current_period,
|
29
|
+
statements_list=site_obj.insight_statements,
|
30
|
+
organisation=site_obj.org_name,
|
31
|
+
components=components,
|
32
|
+
files_folder=directory_to_savefile,
|
33
|
+
figures_folder=directory_to_savefile,
|
34
|
+
report_file_folder=report_file_folder)
|
35
|
+
except:
|
36
|
+
report_file_dict = generate_report(site_obj.site_name, current_period,
|
37
|
+
organisation=site_obj.org_name,
|
38
|
+
components=components,
|
39
|
+
files_folder=directory_to_savefile,
|
40
|
+
figures_folder=directory_to_savefile,
|
41
|
+
report_file_folder=report_file_folder)
|
42
|
+
|
43
|
+
return report_file_dict, current_period
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import matplotlib.pyplot as plt
|
2
|
+
plt.rcParams['figure.max_open_warning'] = 300
|
3
|
+
|
4
|
+
from .generate_insight_statements import generate_insight_statements
|
5
|
+
from .generate_piechart_with_phase import generate_piechart_with_phase
|
6
|
+
from .generate_energy_meter_with_benchmarking import generate_energy_meter_with_benchmarking
|
7
|
+
from .generate_daily_barchart_with_temp import generate_daily_barchart_with_temp
|
8
|
+
from .generate_period_barchart import generate_period_barchart
|
9
|
+
|
10
|
+
def generate_components(postgresdb, df_meta_with_value, df_meta_with_value_building, site_obj,
|
11
|
+
fontsize=None,
|
12
|
+
directory_to_savefile=None):
|
13
|
+
|
14
|
+
insight_statements = generate_insight_statements(postgresdb, df_meta_with_value,
|
15
|
+
asset_group=site_obj.asset_group,
|
16
|
+
# fixed_group_to_filter=site_obj.fixed_group_to_filter,
|
17
|
+
directory_to_savefile=directory_to_savefile)
|
18
|
+
|
19
|
+
piechart_with_phase = generate_piechart_with_phase(df_meta_with_value,
|
20
|
+
fontsize=fontsize,
|
21
|
+
directory_to_savefig=directory_to_savefile)
|
22
|
+
|
23
|
+
energy_meter_with_benchmarking = generate_energy_meter_with_benchmarking(df_meta_with_value_building, site_obj.floor_size,
|
24
|
+
size_in_sqm=site_obj.size_in_sqm,
|
25
|
+
conv_mwh_price=site_obj.conv_mwh_price,
|
26
|
+
industry=site_obj.industry,
|
27
|
+
currency=site_obj.currency,
|
28
|
+
fontsize=fontsize,
|
29
|
+
directory_to_savefig=directory_to_savefile)
|
30
|
+
|
31
|
+
daily_barchart_with_temp = generate_daily_barchart_with_temp(df_meta_with_value,
|
32
|
+
fontsize=fontsize,
|
33
|
+
directory_to_savefig=directory_to_savefile)
|
34
|
+
|
35
|
+
period_barchart = generate_period_barchart(df_meta_with_value_building,
|
36
|
+
fontsize=fontsize,
|
37
|
+
directory_to_savefig=directory_to_savefile)
|
38
|
+
|
39
|
+
# if directory_to_savefile == None:
|
40
|
+
components = {
|
41
|
+
**insight_statements,
|
42
|
+
**piechart_with_phase,
|
43
|
+
**energy_meter_with_benchmarking,
|
44
|
+
**daily_barchart_with_temp,
|
45
|
+
**period_barchart
|
46
|
+
}
|
47
|
+
return components
|
@@ -0,0 +1,40 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
from datetime import date
|
4
|
+
import io
|
5
|
+
|
6
|
+
from .preprocessing_for_barchart import preprocessing_for_barchart
|
7
|
+
from .plot_shifted_daily_barchart_with_temp import plot_shifted_daily_barchart_with_temp
|
8
|
+
|
9
|
+
def generate_daily_barchart_with_temp(df_meta_with_value,
|
10
|
+
sr_temp=None,
|
11
|
+
fontsize=None, # please note that the other fontsizes haven't been tested yet
|
12
|
+
directory_to_savefig=None):
|
13
|
+
|
14
|
+
df_pivot_working_hours_sorted, period_current = preprocessing_for_barchart(df_meta_with_value)
|
15
|
+
|
16
|
+
# df_pivot_working_hours_sorted[(True, True)] -= [0.2, 0.1, 0.05, 0.15, 0.08, 0.12, 0.21]
|
17
|
+
# df_pivot_working_hours_sorted[(True, False)] -= [0.12, 0.16, 0.08, 0.12, 0.21, 0.05, 0.15]
|
18
|
+
# df_pivot_working_hours_sorted[True] = df_pivot_working_hours_sorted[True] *0.5
|
19
|
+
# df_pivot_working_hours_sorted[True] -= 0.4*df_pivot_working_hours_sorted[False]
|
20
|
+
|
21
|
+
# df_pivot_working_hours_sorted_reset = df_pivot_working_hours_sorted.reset_index(drop=True)
|
22
|
+
# sr_temp = df_pivot_working_hours_sorted_reset[True].sum(axis=1).abs()
|
23
|
+
|
24
|
+
|
25
|
+
plot_shifted_daily_barchart_with_temp(df_pivot_working_hours_sorted,
|
26
|
+
sr_temp=sr_temp,
|
27
|
+
fontsize=fontsize)
|
28
|
+
|
29
|
+
png_name = 'daily_barchart_with_temp.png'
|
30
|
+
|
31
|
+
if directory_to_savefig == None:
|
32
|
+
png_object = io.BytesIO()
|
33
|
+
plt.savefig(png_object, format='png', dpi=200)
|
34
|
+
plt.close()
|
35
|
+
return {png_name: png_object}
|
36
|
+
else:
|
37
|
+
png_path = directory_to_savefig + png_name
|
38
|
+
plt.savefig(png_path, format='png', dpi=200)
|
39
|
+
plt.close()
|
40
|
+
return {png_name: png_path}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
|
4
|
+
from .setup_x_tick_lim import setup_x_tick_lim
|
5
|
+
from .setup_y_tick_lim_label_zero_line import setup_y_tick_lim_label_zero_line
|
6
|
+
from .plot_temperature_graph import plot_temperature_graph
|
7
|
+
from .plot_the_legend import plot_the_legend
|
8
|
+
|
9
|
+
from mdl.utils_ import get_pos_bot_range_unit_format
|
10
|
+
from mdl.utils_ import plot_stacked_barchart
|
11
|
+
|
12
|
+
|
13
|
+
def plot_shifted_daily_barchart_with_temp(df_pivot_working_hours_sorted,
|
14
|
+
sr_temp=None,
|
15
|
+
tick_range_temp=None,
|
16
|
+
fs=None,
|
17
|
+
fontsize=None):
|
18
|
+
|
19
|
+
if fs is None:
|
20
|
+
fs = (8, 3.5)
|
21
|
+
|
22
|
+
fig, ax = plt.subplots(1, 1, figsize=fs)
|
23
|
+
|
24
|
+
plt.style.use('seaborn-v0_8-white')# set ggplot style
|
25
|
+
|
26
|
+
# df_pivot_working_hours_sorted_reset_pos, \
|
27
|
+
# sr_pivot_working_hours_sorted_reset_bot, \
|
28
|
+
# ytick_range = setup_y_label_and_get_pos_bot_range(ax, df_pivot_working_hours_sorted,
|
29
|
+
# fontsize=fontsize)
|
30
|
+
|
31
|
+
df_pivot_working_hours_sorted_reset_pos, \
|
32
|
+
sr_pivot_working_hours_sorted_reset_bot, \
|
33
|
+
ytick_range, \
|
34
|
+
display_unit, \
|
35
|
+
formatter = get_pos_bot_range_unit_format(df_pivot_working_hours_sorted,
|
36
|
+
pad_pct_above_max=0.3)
|
37
|
+
|
38
|
+
# plot the positive part with the bottom line shifted
|
39
|
+
plot_stacked_barchart(ax, df_pivot_working_hours_sorted_reset_pos,
|
40
|
+
bottom=sr_pivot_working_hours_sorted_reset_bot,
|
41
|
+
tick_range=ytick_range)
|
42
|
+
|
43
|
+
# setup x, y tick, limit, label, and zero lines
|
44
|
+
setup_x_tick_lim(ax, df_pivot_working_hours_sorted,
|
45
|
+
fontsize=fontsize)
|
46
|
+
|
47
|
+
# set the layout and adjust if the temperature data exists
|
48
|
+
legend_bbox_to_anchor = None # default to: (0.5, 0.99)
|
49
|
+
tight_layout_rect = (0, 0, 0.93, 1) # intentionally add some padding on the right hand side
|
50
|
+
subplots_adjust_left = None
|
51
|
+
subplots_adjust_right = 0.785 # 0.92 #
|
52
|
+
|
53
|
+
if sr_temp is not None:
|
54
|
+
if sr_temp.shape[0] > 0:
|
55
|
+
plot_temperature_graph(ax, sr_temp,
|
56
|
+
fontsize=fontsize,
|
57
|
+
tick_range=tick_range_temp)
|
58
|
+
# tight_layout_rect=(0, 0, 0.94, 1)
|
59
|
+
legend_bbox_to_anchor=(0.37, 0.99)
|
60
|
+
# subplots_adjust_left = 0.08
|
61
|
+
|
62
|
+
setup_y_tick_lim_label_zero_line(ax, ytick_range, display_unit, formatter,
|
63
|
+
fontsize=fontsize)
|
64
|
+
|
65
|
+
# plot the legend
|
66
|
+
plot_the_legend(ax, fontsize=fontsize,
|
67
|
+
bbox_to_anchor=legend_bbox_to_anchor)
|
68
|
+
|
69
|
+
fig.tight_layout(rect=tight_layout_rect)
|
70
|
+
fig.subplots_adjust(left=subplots_adjust_left,
|
71
|
+
right=subplots_adjust_right)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
import matplotlib.ticker as ticker
|
3
|
+
|
4
|
+
|
5
|
+
def plot_temperature_graph(ax, sr_temp, fontsize=None, tick_range=None, label=None):
|
6
|
+
|
7
|
+
if label is None:
|
8
|
+
label = 'Temperature'
|
9
|
+
|
10
|
+
if fontsize is None:
|
11
|
+
fontsize = 13
|
12
|
+
|
13
|
+
# todo: month information can be removed df_occupancy
|
14
|
+
|
15
|
+
# df_occupancy_cur.reset_index(drop=True, inplace=True)
|
16
|
+
|
17
|
+
# the right y axis
|
18
|
+
ax_r = ax.twinx() # instantiate a second axes that shares the same x-axis
|
19
|
+
ax_r.yaxis.tick_left()
|
20
|
+
ax_r.yaxis.set_label_position("left")
|
21
|
+
ax_r.tick_params(axis='y', left=True, length=2, labelsize=fontsize)
|
22
|
+
ax_r.set_ylabel(u'\N{DEGREE SIGN}'+'C', labelpad=5, fontsize=fontsize)
|
23
|
+
ax_r.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.1f'))
|
24
|
+
|
25
|
+
if tick_range is None:
|
26
|
+
tick_value_o_max = sr_temp.max()
|
27
|
+
tick_value_o_min = sr_temp.min()
|
28
|
+
tick_value_o_var = tick_value_o_max - tick_value_o_min
|
29
|
+
tick_range = [tick_value_o_min - tick_value_o_var*0.5, tick_value_o_max + tick_value_o_var*0.5]
|
30
|
+
|
31
|
+
ax_r.set_ylim(tick_range)
|
32
|
+
ax_r.plot(sr_temp, color= 'k', lw=0.1, ls='dashed', marker=".", ms=6, mec="k", label=label)
|
33
|
+
ax_r.legend(loc='upper right', bbox_to_anchor=(0.92, 0.99), fontsize=fontsize, ncol=2)
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
def plot_the_legend(ax,
|
4
|
+
fontsize=None,
|
5
|
+
bbox_to_anchor=None):
|
6
|
+
|
7
|
+
if fontsize is None:
|
8
|
+
fontsize = 13
|
9
|
+
|
10
|
+
if bbox_to_anchor is None:
|
11
|
+
bbox_to_anchor=(0.5, 0.99)
|
12
|
+
|
13
|
+
# plot the legend
|
14
|
+
ax.legend()
|
15
|
+
legends = ax.get_legend()
|
16
|
+
orig_handles = legends.legend_handles[:2]
|
17
|
+
# for handle in orig_handles:
|
18
|
+
# print(f"{handle.set(ec='k') = }")
|
19
|
+
|
20
|
+
# adj_handles = [handle.set(ec='k') for handle in orig_handles]
|
21
|
+
_ = ax.legend(handles=orig_handles,
|
22
|
+
labels=['Total', 'In Hours'],
|
23
|
+
loc='upper center',
|
24
|
+
bbox_to_anchor=bbox_to_anchor,
|
25
|
+
fontsize=fontsize,
|
26
|
+
ncol=2)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
import matplotlib.ticker as ticker
|
3
|
+
|
4
|
+
from .generate_day_code import generate_day_code
|
5
|
+
|
6
|
+
def setup_x_tick_lim(ax, df_pivot_working_hours_sorted,
|
7
|
+
fontsize=None):
|
8
|
+
|
9
|
+
if fontsize is None:
|
10
|
+
fontsize = 13
|
11
|
+
|
12
|
+
day_code_list = generate_day_code(df_pivot_working_hours_sorted)
|
13
|
+
df_pivot_working_hours_sorted_reset = df_pivot_working_hours_sorted.reset_index(drop=True)
|
14
|
+
|
15
|
+
# set up the x-ticks and xlim
|
16
|
+
ax.tick_params(axis='x', which='major', pad=8, length=2, labelsize=fontsize)
|
17
|
+
|
18
|
+
x_tick_pad = 1.5
|
19
|
+
top_index = df_pivot_working_hours_sorted_reset.index.min() - x_tick_pad
|
20
|
+
bot_index = df_pivot_working_hours_sorted_reset.index.max() + x_tick_pad
|
21
|
+
ax.set_xlim([top_index, bot_index])
|
22
|
+
|
23
|
+
# fixing xticks with matplotlib.ticker "FixedLocator": UserWarning: FixedFormatter should only be used together with FixedLocator
|
24
|
+
ticks_loc = ax.get_xticks().tolist()
|
25
|
+
ax.xaxis.set_major_locator(ticker.FixedLocator(ticks_loc))
|
26
|
+
ax.set_xticklabels(day_code_list, fontsize=fontsize)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
from .generate_day_code_list import generate_day_code_list
|
4
|
+
|
5
|
+
|
6
|
+
def generate_day_code(df_pivot_working_hours):
|
7
|
+
|
8
|
+
datetime_list = list(pd.to_datetime(df_pivot_working_hours.index))
|
9
|
+
|
10
|
+
day_code_list = generate_day_code_list(datetime_list)
|
11
|
+
|
12
|
+
day_code_list.insert(0,"") # for making spaces at the start
|
13
|
+
day_code_list.insert(0,"")
|
14
|
+
# day_code_list.insert(0,"")
|
15
|
+
day_code_list.append("") # for making spaces at the end
|
16
|
+
day_code_list.append("")
|
17
|
+
|
18
|
+
return day_code_list
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
def generate_day_code_list(datetime_list):
|
4
|
+
|
5
|
+
previous_day_month = None
|
6
|
+
previous_day_year = None
|
7
|
+
day_code_list = []
|
8
|
+
|
9
|
+
len_dates = len(datetime_list)
|
10
|
+
|
11
|
+
for item in datetime_list:
|
12
|
+
weekday_str = item.day_name()[0]
|
13
|
+
|
14
|
+
# handle the case that for monthly reports, the day numbers will be very close to each other
|
15
|
+
if (len_dates < 20) or (weekday_str=='M'):
|
16
|
+
day_str = "\n"+str(item.day)
|
17
|
+
else:
|
18
|
+
day_str = "\n "
|
19
|
+
|
20
|
+
# the month and year are only added when it starts or changes
|
21
|
+
|
22
|
+
if item.month == previous_day_month:
|
23
|
+
month_str = ""
|
24
|
+
else:
|
25
|
+
month_str = " "+str(item.strftime("%b"))
|
26
|
+
previous_day_month = item.month
|
27
|
+
|
28
|
+
if item.year == previous_day_year:
|
29
|
+
year_str = ''
|
30
|
+
else:
|
31
|
+
year_str = " "+str(item.year)
|
32
|
+
previous_day_year = item.year
|
33
|
+
|
34
|
+
day_code = weekday_str+day_str+'\n'+month_str+year_str
|
35
|
+
|
36
|
+
day_code_list.append(day_code)
|
37
|
+
|
38
|
+
return day_code_list
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
import matplotlib.ticker as ticker
|
3
|
+
|
4
|
+
from .get_pos_bot_and_ylim import get_pos_bot_and_ylim
|
5
|
+
|
6
|
+
def setup_y_label_and_get_pos_bot_range(ax, df_pivot_working_hours_sorted,
|
7
|
+
fontsize=None):
|
8
|
+
|
9
|
+
if fontsize is None:
|
10
|
+
fontsize = 13
|
11
|
+
|
12
|
+
df_pivot_working_hours_sorted_reset = df_pivot_working_hours_sorted.reset_index(drop=True)
|
13
|
+
|
14
|
+
df_pivot_working_hours_sorted_reset_pos, \
|
15
|
+
df_pivot_working_hours_sorted_reset_bot, \
|
16
|
+
ytick_range = get_pos_bot_and_ylim(df_pivot_working_hours_sorted_reset,
|
17
|
+
pad_pct_above_max = 0.3)
|
18
|
+
|
19
|
+
max_y_tick = max([abs(y_tick) for y_tick in ytick_range])
|
20
|
+
|
21
|
+
if max_y_tick > 0.1: # 100 kwh = 0.1 mwh as switching point for unit as kwh or mwh
|
22
|
+
ax.set_ylabel("Daily Usage (MWh)", labelpad=14, fontsize=fontsize)
|
23
|
+
|
24
|
+
#ax_l.set_yticks(np.arange(0, tick_range_e, 0.1))
|
25
|
+
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.1f'))
|
26
|
+
else:
|
27
|
+
df_pivot_working_hours_sorted_reset = df_pivot_working_hours_sorted_reset.mul(1000)
|
28
|
+
|
29
|
+
# after the change of units, the dfs and limits should be updated
|
30
|
+
df_pivot_working_hours_sorted_reset_pos, \
|
31
|
+
df_pivot_working_hours_sorted_reset_bot, \
|
32
|
+
ytick_range = get_pos_bot_and_ylim(df_pivot_working_hours_sorted_reset,
|
33
|
+
pad_pct_above_max = 0.3)
|
34
|
+
|
35
|
+
ax.set_ylabel("Daily Usage (kWh)", labelpad=14, fontsize=fontsize)
|
36
|
+
|
37
|
+
#ax_l.set_yticks(np.arange(0, tick_range_e, 0.1))
|
38
|
+
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.0f'))
|
39
|
+
|
40
|
+
return df_pivot_working_hours_sorted_reset_pos, df_pivot_working_hours_sorted_reset_bot, ytick_range
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
def get_pos_bot_and_ylim(df_pivot_working_hours_sorted_reset,
|
3
|
+
pad_pct_above_max = None):
|
4
|
+
|
5
|
+
if pad_pct_above_max is None:
|
6
|
+
pad_pct_above_max = 0.2
|
7
|
+
|
8
|
+
# make the index unique for later processing
|
9
|
+
df_pivot_working_hours_sorted_reset_pos = df_pivot_working_hours_sorted_reset[False]
|
10
|
+
sr_pivot_working_hours_sorted_reset_bot = df_pivot_working_hours_sorted_reset[True].sum(axis=1)
|
11
|
+
|
12
|
+
# get the maximum and minimum values
|
13
|
+
zero_line = 0
|
14
|
+
tick_value_e_max = max(zero_line, df_pivot_working_hours_sorted_reset.sum(axis=1).max()) # ensure that the 0 line is still showing
|
15
|
+
tick_value_e_min = min(zero_line, sr_pivot_working_hours_sorted_reset_bot.min()) # ensure that the 0 line is still showing
|
16
|
+
tick_value_e_var = tick_value_e_max - tick_value_e_min
|
17
|
+
|
18
|
+
# add padding to the boundary values to make the range
|
19
|
+
|
20
|
+
if abs(tick_value_e_min) > (tick_value_e_max*0.01): # if the abs value of tick_value_e_min is very small, then set zero as the lowest range
|
21
|
+
pad_pct_below_min = 0.05
|
22
|
+
else:
|
23
|
+
pad_pct_below_min = 0
|
24
|
+
|
25
|
+
tick_range_e_max = tick_value_e_max + tick_value_e_var*pad_pct_above_max
|
26
|
+
tick_range_e_min = tick_value_e_min - tick_value_e_var*pad_pct_below_min
|
27
|
+
|
28
|
+
ls_ylim = [tick_range_e_min, tick_range_e_max]
|
29
|
+
|
30
|
+
return df_pivot_working_hours_sorted_reset_pos, sr_pivot_working_hours_sorted_reset_bot, ls_ylim
|