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,23 @@
|
|
1
|
+
|
2
|
+
import matplotlib.ticker as ticker
|
3
|
+
|
4
|
+
def setup_y_tick_lim_label_zero_line(ax, ls_ylim, display_unit, formatter,
|
5
|
+
fontsize=None):
|
6
|
+
|
7
|
+
if fontsize is None:
|
8
|
+
fontsize = 13
|
9
|
+
|
10
|
+
# move the y_tick to the right
|
11
|
+
ax.yaxis.tick_right()
|
12
|
+
ax.yaxis.set_label_position("right")
|
13
|
+
ax.tick_params(axis='y', right=True, length=5, pad=9, labelsize=fontsize)
|
14
|
+
ax.set_ylim(ls_ylim)
|
15
|
+
|
16
|
+
# set y label
|
17
|
+
ax.set_ylabel(f"Daily Usage ({display_unit})", labelpad=18, fontsize=fontsize)
|
18
|
+
|
19
|
+
# set yaxis formatter
|
20
|
+
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter(formatter))
|
21
|
+
|
22
|
+
# plot the zero value horizontal line
|
23
|
+
ax.axhline(y=0, color='k', linestyle=':', zorder=-1)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
from .patch_missing_dates import patch_missing_dates
|
2
|
+
from .patch_missing_columns_for_ooh_and_sign import patch_missing_columns_for_ooh_and_sign
|
3
|
+
from .groupby_date_and_ooh_current_period import groupby_date_and_ooh_current_period
|
4
|
+
|
5
|
+
# from .groupby_date_and_ooh_current_period import groupby_date_and_ooh_current_period
|
6
|
+
|
7
|
+
from cache_return import cache_return
|
8
|
+
|
9
|
+
|
10
|
+
@cache_return
|
11
|
+
def preprocessing_for_barchart(df_meta_with_value_bld):
|
12
|
+
|
13
|
+
# main operation
|
14
|
+
df_pivot_working_hours_with_sign_sorted, period_current = groupby_date_and_ooh_current_period(df_meta_with_value_bld)
|
15
|
+
|
16
|
+
# patch the missing ooh columns and period index
|
17
|
+
df_pivot_working_hours_with_sign_sorted = patch_missing_columns_for_ooh_and_sign(df_pivot_working_hours_with_sign_sorted)
|
18
|
+
df_pivot_working_hours_with_sign_sorted = patch_missing_dates(df_pivot_working_hours_with_sign_sorted, period_current)
|
19
|
+
|
20
|
+
return df_pivot_working_hours_with_sign_sorted, period_current
|
21
|
+
# pass
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
def groupby_date_and_ooh_current_period(df_meta_with_value):
|
6
|
+
|
7
|
+
# select data only for the current period
|
8
|
+
|
9
|
+
period_current = df_meta_with_value["period"].max()
|
10
|
+
df_meta_with_value_current = df_meta_with_value.loc[df_meta_with_value["period"]==period_current]
|
11
|
+
|
12
|
+
df_meta_with_value_current['neg_sign'] = df_meta_with_value_current['W'].lt(0)
|
13
|
+
|
14
|
+
# Conversion into MWh
|
15
|
+
w_to_mw_para = 1./1000/1000
|
16
|
+
min_to_hour_para = 1./60
|
17
|
+
reading_interval_in_mins=10
|
18
|
+
|
19
|
+
wm_to_mwh_parameter = w_to_mw_para * min_to_hour_para
|
20
|
+
reading_to_mwh_parameter = reading_interval_in_mins * wm_to_mwh_parameter
|
21
|
+
|
22
|
+
# Conversion into MWh
|
23
|
+
# reading_to_mwh_parameter = 1./1000
|
24
|
+
|
25
|
+
# todo: Better to change to df_meta_value_building
|
26
|
+
df_grouped_working_hours_current_period_with_sign = df_meta_with_value_current.groupby(['neg_sign', "date", 'out_of_hours'])["W"].sum() * reading_to_mwh_parameter # Div 1000 for convertion to MWh
|
27
|
+
|
28
|
+
# df_grouped_working_hours_current_period = df_grouped_working_hours_current_period_with_sign.droplevel('neg_sign')
|
29
|
+
# # select only the maximum period
|
30
|
+
# df_grouped_working_hours_multiple_period_unstack = df_grouped_working_hours_multiple_period.unstack(["period"])
|
31
|
+
# period_current = df_grouped_working_hours_multiple_period_unstack.columns[-1]
|
32
|
+
# df_grouped_working_hours = df_grouped_working_hours_multiple_period_unstack.loc[:, period_current]
|
33
|
+
|
34
|
+
# todo: fill missing group index
|
35
|
+
df_pivot_working_hours_with_sign_sorted = df_grouped_working_hours_current_period_with_sign.unstack(['neg_sign', 'out_of_hours']).sort_index(axis=1,
|
36
|
+
level=1,
|
37
|
+
ascending=False)
|
38
|
+
|
39
|
+
return df_pivot_working_hours_with_sign_sorted, period_current
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
def patch_missing_columns_for_ooh_and_sign(df_pivot_working_hours_with_sign):
|
5
|
+
|
6
|
+
columns_for_sign = [True, False]
|
7
|
+
columns_for_ooh = [True, False]
|
8
|
+
|
9
|
+
required_columns_for_ooh_and_sign = pd.MultiIndex.from_product([columns_for_sign, columns_for_ooh])
|
10
|
+
|
11
|
+
# required_columns_for_ooh = [True, False]
|
12
|
+
existing_columns_for_ooh_and_sign = df_pivot_working_hours_with_sign.columns
|
13
|
+
|
14
|
+
for column in required_columns_for_ooh_and_sign:
|
15
|
+
if column not in existing_columns_for_ooh_and_sign:
|
16
|
+
df_pivot_working_hours_with_sign[column] = 0
|
17
|
+
|
18
|
+
return df_pivot_working_hours_with_sign
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
|
3
|
+
def patch_missing_dates(df_pivot_working_hours, period_current):
|
4
|
+
|
5
|
+
start_date = period_current.start_time.date()
|
6
|
+
end_date = period_current.end_time.date()
|
7
|
+
|
8
|
+
# firstly ensuring that the start and finish date are not missing
|
9
|
+
if start_date not in df_pivot_working_hours.index:
|
10
|
+
df_pivot_working_hours.loc[start_date] = 0
|
11
|
+
|
12
|
+
if end_date not in df_pivot_working_hours.index:
|
13
|
+
df_pivot_working_hours.loc[end_date] = 0
|
14
|
+
|
15
|
+
# convert the date index to full datetime, so it can be used to adjust frequency
|
16
|
+
df_pivot_working_hours.index = pd.to_datetime(df_pivot_working_hours.index)
|
17
|
+
df_pivot_working_hours_patched = df_pivot_working_hours.asfreq('1D', fill_value=0).fillna(0)
|
18
|
+
|
19
|
+
# convert the full datetime frequency to date following the original format
|
20
|
+
df_pivot_working_hours_patched.index = df_pivot_working_hours_patched.index.date
|
21
|
+
|
22
|
+
return df_pivot_working_hours_patched
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
import io
|
4
|
+
|
5
|
+
from .preprocessing_for_energy_meter_with_benchmarking import preprocessing_for_energy_meter_with_benchmarking
|
6
|
+
from .energy_meter_with_benchmarking import energy_meter_with_benchmarking
|
7
|
+
|
8
|
+
|
9
|
+
def generate_energy_meter_with_benchmarking(df_meta_with_value_building, floor_size,
|
10
|
+
industry = "office",
|
11
|
+
size_in_sqm = True,
|
12
|
+
conv_mwh_price = 190,
|
13
|
+
currency = 'GBP',
|
14
|
+
fontsize = 13,
|
15
|
+
directory_to_savefig=None):
|
16
|
+
|
17
|
+
consumption_mwh_cur, consumption_mwh_pre, days_in_period = preprocessing_for_energy_meter_with_benchmarking(df_meta_with_value_building)
|
18
|
+
|
19
|
+
print('consumption_mwh_building_total: ', consumption_mwh_cur) # debug
|
20
|
+
energy_meter_with_benchmarking(consumption_mwh_cur, consumption_mwh_pre, floor_size,
|
21
|
+
industry=industry,
|
22
|
+
period=days_in_period,
|
23
|
+
size_in_sqm=size_in_sqm,
|
24
|
+
conv_mwh_price=conv_mwh_price,
|
25
|
+
currency=currency,
|
26
|
+
fontsize=fontsize)
|
27
|
+
|
28
|
+
png_name = 'monthly_total_and_bm_latest.png'
|
29
|
+
if directory_to_savefig == None:
|
30
|
+
png_object = io.BytesIO()
|
31
|
+
plt.savefig(png_object, format='png', dpi=200,transparent=True, bbox_inches='tight', pad_inches=0)
|
32
|
+
plt.close()
|
33
|
+
return {png_name: png_object}
|
34
|
+
else:
|
35
|
+
png_path = directory_to_savefig + png_name
|
36
|
+
plt.savefig(png_path, format='png', dpi=200,transparent=True, bbox_inches='tight', pad_inches=0)
|
37
|
+
plt.close()
|
38
|
+
return {png_name: png_path}
|
39
|
+
|
40
|
+
|
41
|
+
# Path(directory_to_savefig).mkdir(parents=True, exist_ok=True)
|
42
|
+
# plt.savefig(directory_to_savefig+"monthly_total_and_bm_latest.png", format='png', dpi=200,transparent=True, bbox_inches='tight', pad_inches=0)
|
@@ -0,0 +1,66 @@
|
|
1
|
+
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
|
4
|
+
from os import path
|
5
|
+
|
6
|
+
from .energy_meter_design import energy_meter_design
|
7
|
+
from .benchmarking_design import benchmarking_design
|
8
|
+
|
9
|
+
|
10
|
+
def energy_meter_with_benchmarking(consumption_mwh_cur, consumption_mwh_pre, floor_size,
|
11
|
+
image_folder=None,
|
12
|
+
size_in_sqm = True,
|
13
|
+
industry = "office",
|
14
|
+
period = 30,
|
15
|
+
conv_mwh_co2 = 0.233,
|
16
|
+
conv_mwh_price = 190,
|
17
|
+
fx = 0.2, # fancy box x-axis value
|
18
|
+
fy = 0.3, # fancy box y-axis value
|
19
|
+
fs = 0.6, # fancy box scale factor
|
20
|
+
kwh_per_sqm_good = 10.33,
|
21
|
+
kwh_per_sqm_typical = 14.5,
|
22
|
+
currency = 'GBP',
|
23
|
+
fontsize=13, # please note that the other fontsizes haven't been tested yet
|
24
|
+
# directory_to_savefig = './figures/'
|
25
|
+
):
|
26
|
+
|
27
|
+
if image_folder == None:
|
28
|
+
image_folder = path.join(path.dirname(__file__), '_assets_/')
|
29
|
+
|
30
|
+
plt.style.use('seaborn-white')
|
31
|
+
fig, ax = plt.subplots(figsize=(5, 5.5))
|
32
|
+
|
33
|
+
if size_in_sqm:
|
34
|
+
floor_sqm = floor_size
|
35
|
+
else:
|
36
|
+
floor_sqm = floor_size * 0.0929
|
37
|
+
|
38
|
+
if industry == "office":
|
39
|
+
floor_sqm_as_office = floor_sqm
|
40
|
+
elif industry == "food service":
|
41
|
+
# (not working on 26 Nov 24): https://cdn2.hubspot.net/hubfs/5055051/Offers/Energy%20Benchmarking%20Report%20-%20Iota.pdf?utm_campaign=Offer%3A%20Energy%20Benchmarking%20Report&utm_medium=email&_hsmi=72631957&_hsenc=p2ANqtz-8urx_6ejMPQ25rp-u0vAHPq0cmKPTvL18SQTEf22gtrdDV2x7wGnd5kkP40_bx3M5hOWp3tysnbPI4JjWriJEp2fb5o7PzNF5D9VFqQNjYVLVxKtE&utm_content=72631957&utm_source=hs_automation
|
42
|
+
# added on 26 Nov 24: https://www.betterbuildingspartnership.co.uk/sites/default/files/media/attachment/REEB%202023%20Benchmarks_0.pdf
|
43
|
+
floor_sqm_as_office = floor_sqm * 56/15 # 56/15 food service/office
|
44
|
+
|
45
|
+
floor_sqm_as_office_for_month = floor_sqm_as_office * period / 30 # default days in a month
|
46
|
+
|
47
|
+
|
48
|
+
energy_meter_design(ax, consumption_mwh_cur, consumption_mwh_pre, image_folder,
|
49
|
+
conv_mwh_co2=conv_mwh_co2,
|
50
|
+
conv_mwh_price=conv_mwh_price,
|
51
|
+
fx=fx, fy=fy, fs=fs,
|
52
|
+
currency=currency,
|
53
|
+
fontsize=fontsize)
|
54
|
+
benchmarking_design(ax, consumption_mwh_cur, floor_sqm_as_office_for_month,
|
55
|
+
fx=fx, fy=fy-0.12, fs=fs,
|
56
|
+
kwh_per_sqm_good=kwh_per_sqm_good,
|
57
|
+
kwh_per_sqm_typical=kwh_per_sqm_typical,
|
58
|
+
fontsize=fontsize
|
59
|
+
)
|
60
|
+
ax.set_xlim(0, 1) # shouldn't be modified
|
61
|
+
ax.set_ylim(-1, 2)
|
62
|
+
|
63
|
+
plt.axis('off')
|
64
|
+
# Specify the directory to save figures, if it does not exist, create it
|
65
|
+
# Path(directory_to_savefig).mkdir(parents=True, exist_ok=True)
|
66
|
+
# plt.savefig(directory_to_savefig+"Monthly_total_and_bm_latest.png", format='png', dpi=200,transparent=True, bbox_inches='tight', pad_inches=0)
|
@@ -0,0 +1,194 @@
|
|
1
|
+
|
2
|
+
import matplotlib.patches as mpatches
|
3
|
+
import matplotlib.text as mpltext
|
4
|
+
|
5
|
+
from .ruler_anno_shink_cf import ruler_anno_shink_cf
|
6
|
+
|
7
|
+
|
8
|
+
cd = {"tomato": '#FF836A',"aquablue": '#6DC2B3',"peach": '#FED6D2',"darkgrey": '#9F9D9C',"potato": '#FEF8C8',
|
9
|
+
"cyan": '#B6E4E1',"dimgray":'#696969',"Seafoam":'#87e0cf',"gainsboro":'#DCDCDC'}
|
10
|
+
|
11
|
+
|
12
|
+
def benchmarking_design(ax, consumption_mwh_cur, floor_sqm,
|
13
|
+
kwh_per_sqm_good = 10.33,
|
14
|
+
kwh_per_sqm_typical = 14.5,
|
15
|
+
fx = 0.2, # fancy box x-axis value
|
16
|
+
fy = 0.18, # fancy box y-axis value
|
17
|
+
fs = 0.6, # fancy box scale factor
|
18
|
+
fontsize = 13
|
19
|
+
):
|
20
|
+
|
21
|
+
|
22
|
+
mwh_good = floor_sqm * kwh_per_sqm_good / 1000
|
23
|
+
mwh_typical = floor_sqm * kwh_per_sqm_typical / 1000
|
24
|
+
|
25
|
+
mwh_btw_good_typical = mwh_typical - mwh_good
|
26
|
+
|
27
|
+
key_values_list = [mwh_typical + mwh_btw_good_typical,
|
28
|
+
mwh_good - mwh_btw_good_typical,
|
29
|
+
consumption_mwh_cur + mwh_btw_good_typical/2,
|
30
|
+
consumption_mwh_cur - mwh_btw_good_typical/2]
|
31
|
+
|
32
|
+
ticks_max = max(key_values_list)
|
33
|
+
ticks_min = min(key_values_list)
|
34
|
+
|
35
|
+
ticks_values_list = [ticks_min, mwh_good, mwh_typical, ticks_max]
|
36
|
+
ticks_range = ticks_max - ticks_min
|
37
|
+
|
38
|
+
## ruler settings
|
39
|
+
ru_x = 0 # the x-axis of benchmarking ruler
|
40
|
+
ru_y = 0 # the x-axis of benchmarking ruler
|
41
|
+
ru_w = 1 # the width of benchmarking ruler
|
42
|
+
ru_h = 0.08 # the height of benchmarking ruler
|
43
|
+
|
44
|
+
rp_edgecolor = 'k' # edgecolor of the ruler body parts
|
45
|
+
rp_note_fontsize = fontsize - 5 # the fontsize of notes on ruler parts # please note that the other sizes except default 13 haven't been tested yet
|
46
|
+
|
47
|
+
# ruler body - part one - good
|
48
|
+
rp_x = ru_x # the x-axis value of this part
|
49
|
+
rp_y = ru_y - 0.07 # the y-axis value of this part
|
50
|
+
rp_w = ru_w * (ticks_values_list[1]-ticks_values_list[0])/ticks_range # the width value of this part
|
51
|
+
rp_h = ru_h
|
52
|
+
rp_c = cd["aquablue"]
|
53
|
+
ruler_body_part_one = mpatches.Rectangle([fx+rp_x*fs, fy+rp_y*fs],
|
54
|
+
rp_w*fs, rp_h*fs, facecolor=rp_c, edgecolor=rp_edgecolor, lw=1)
|
55
|
+
|
56
|
+
# print('ruler_body_part_one rp_w*fs, rp_h*fs: ', rp_w*fs, rp_h*fs)
|
57
|
+
rpa_x = rp_x + rp_w/2.0 # ruler body part annotation - x axis
|
58
|
+
rpa_y = rp_y # ruler body part annotation - y axis
|
59
|
+
bar_width = rp_w*fs
|
60
|
+
part = 'part_one'
|
61
|
+
rpa_text = ruler_anno_shink_cf(bar_width, part)
|
62
|
+
|
63
|
+
|
64
|
+
ax.annotate(rpa_text, (fx+fs*rpa_x, fx+fs*rpa_y), color='w', weight='bold',
|
65
|
+
fontsize=rp_note_fontsize, ha='center', va='center')
|
66
|
+
|
67
|
+
# ruler body - part two - normal
|
68
|
+
rp_x = rp_x + rp_w # the x-axis value of this part
|
69
|
+
rp_y = ru_y - 0.07 # the y-axis value of this part
|
70
|
+
rp_w = ru_w * (ticks_values_list[2]-ticks_values_list[1])/ticks_range # the width value of this part
|
71
|
+
rp_h = ru_h
|
72
|
+
rp_c = cd["potato"]
|
73
|
+
ruler_body_part_two = mpatches.Rectangle([fx+rp_x*fs, fy+rp_y*fs],
|
74
|
+
rp_w*fs, rp_h*fs, facecolor=rp_c, edgecolor=rp_edgecolor, lw=1)
|
75
|
+
|
76
|
+
# print('ruler_body_part_two rp_w*fs, rp_h*fs: ', rp_w*fs, rp_h*fs)
|
77
|
+
rpa_x = rp_x + rp_w/2.0 # ruler body part annotation - x axis
|
78
|
+
rpa_y = rp_y # ruler body part annotation - y axis
|
79
|
+
bar_width = rp_w*fs
|
80
|
+
part = 'part_two'
|
81
|
+
rpa_text = ruler_anno_shink_cf(bar_width, part)
|
82
|
+
|
83
|
+
ax.annotate(rpa_text, (fx+fs*rpa_x, fx+fs*rpa_y), color='#9F9D9C', weight='bold',
|
84
|
+
fontsize=rp_note_fontsize, ha='center', va='center')
|
85
|
+
|
86
|
+
# ruler body - part three - poor
|
87
|
+
rp_x = rp_x + rp_w # the x-axis value of this part
|
88
|
+
rp_y = ru_y - 0.07 # the y-axis value of this part
|
89
|
+
rp_w = ru_w * (ticks_values_list[3]-ticks_values_list[2])/ticks_range # the width value of this part
|
90
|
+
rp_h = ru_h
|
91
|
+
rp_c = cd["tomato"]
|
92
|
+
ruler_body_part_thr = mpatches.Rectangle([fx+rp_x*fs, fy+rp_y*fs],
|
93
|
+
rp_w*fs, rp_h*fs, facecolor=rp_c, edgecolor=rp_edgecolor, lw=1)
|
94
|
+
|
95
|
+
# print('ruler_body_part_three rp_w*fs, rp_h*fs: ', rp_w*fs, rp_h*fs)
|
96
|
+
rpa_x = rp_x + rp_w/2.0 # ruler body part annotation - x axis
|
97
|
+
rpa_y = rp_y # ruler body part annotation - y axis
|
98
|
+
bar_width = rp_w*fs
|
99
|
+
part = 'part_three'
|
100
|
+
rpa_text = ruler_anno_shink_cf(bar_width, part)
|
101
|
+
|
102
|
+
ax.annotate(rpa_text, (fx+fs*rpa_x, fx+fs*rpa_y), color='w', weight='bold',
|
103
|
+
fontsize=rp_note_fontsize, ha='center', va='center')
|
104
|
+
|
105
|
+
ax.add_artist(ruler_body_part_one)
|
106
|
+
ax.add_artist(ruler_body_part_two)
|
107
|
+
ax.add_artist(ruler_body_part_thr)
|
108
|
+
|
109
|
+
|
110
|
+
# ruler ticks labels
|
111
|
+
|
112
|
+
rt_fs = fontsize # the fontsize of ruler ticks labels
|
113
|
+
rt_c = "grey" # the font color of ruler ticks labels
|
114
|
+
rt_va = u'bottom'
|
115
|
+
rt_ha = u'center'
|
116
|
+
rt_fontweight = "light"
|
117
|
+
|
118
|
+
ru_rt_y = -0.18 # ruler ticks y-axis in relation to the ruler y-axis
|
119
|
+
|
120
|
+
tick = ticks_values_list[0]
|
121
|
+
rt_x = ru_x + (tick-ticks_min)/ticks_range
|
122
|
+
rt_y = ru_y + ru_rt_y
|
123
|
+
tick_value = f"{tick:1.1f}"
|
124
|
+
tick_label_one = mpltext.Text(x=fx+rt_x*fs, y=fy+rt_y*fs, text=f'{tick_value}',
|
125
|
+
va=rt_va, color=rt_c, ha=rt_ha, fontweight=rt_fontweight, fontsize=rt_fs)
|
126
|
+
|
127
|
+
tick = ticks_values_list[1]
|
128
|
+
tick_pct = (tick-ticks_min)/ticks_range
|
129
|
+
rt_x = ru_x + tick_pct
|
130
|
+
rt_y = ru_y + ru_rt_y
|
131
|
+
|
132
|
+
# conditionally remove the tick_value label when it's too close to the edges
|
133
|
+
if (tick_pct < 0.2) or (tick_pct > 0.8):
|
134
|
+
tick_value = ''
|
135
|
+
else:
|
136
|
+
tick_value = f"{tick:1.1f}"
|
137
|
+
tick_label_two = mpltext.Text(x=fx+rt_x*fs, y=fy+rt_y*fs, text=f'{tick_value}',
|
138
|
+
va=rt_va, color=rt_c, ha=rt_ha, fontweight=rt_fontweight, fontsize=rt_fs)
|
139
|
+
|
140
|
+
tick = ticks_values_list[2]
|
141
|
+
tick_pct = (tick-ticks_min)/ticks_range
|
142
|
+
rt_x = ru_x + tick_pct
|
143
|
+
rt_y = ru_y + ru_rt_y
|
144
|
+
|
145
|
+
# conditionally remove the tick_value label when it's too close to the edges
|
146
|
+
if (tick_pct < 0.2) or (tick_pct > 0.8):
|
147
|
+
tick_value = ''
|
148
|
+
else:
|
149
|
+
tick_value = f"{tick:1.1f}"
|
150
|
+
tick_label_thr = mpltext.Text(x=fx+rt_x*fs, y=fy+rt_y*fs, text=f'{tick_value}',
|
151
|
+
va=rt_va, color=rt_c, ha=rt_ha, fontweight=rt_fontweight, fontsize=rt_fs)
|
152
|
+
|
153
|
+
tick = ticks_values_list[3]
|
154
|
+
rt_x = ru_x + (tick-ticks_min)/ticks_range
|
155
|
+
rt_y = ru_y + ru_rt_y
|
156
|
+
tick_value = f"{tick:1.1f}"
|
157
|
+
tick_label_four = mpltext.Text(x=fx+rt_x*fs, y=fy+rt_y*fs, text=f'{tick_value}',
|
158
|
+
va=rt_va, color=rt_c, ha=rt_ha, fontweight=rt_fontweight, fontsize=rt_fs)
|
159
|
+
|
160
|
+
ax.add_artist(tick_label_one)
|
161
|
+
ax.add_artist(tick_label_two)
|
162
|
+
ax.add_artist(tick_label_thr)
|
163
|
+
ax.add_artist(tick_label_four)
|
164
|
+
|
165
|
+
# ruler indicator
|
166
|
+
indicator_value = consumption_mwh_cur
|
167
|
+
rih_x = ru_x + (indicator_value-ticks_min)/ticks_range # x-axis value of the ruler indicator head
|
168
|
+
rih_y = ru_y + 0.084 # y-axis value of the ruler indicator head
|
169
|
+
rih_r = 0.045
|
170
|
+
|
171
|
+
indicator_head = mpatches.Circle((fx+(rih_x)*fs, fy+rih_y*fs), rih_r*fs,
|
172
|
+
fc="w", color = "w", ec="k", lw=1.3, zorder=10
|
173
|
+
) #path_effects=[path_effects.withSimplePatchShadow()]
|
174
|
+
|
175
|
+
rib_x = ru_x + (indicator_value-ticks_min)/ticks_range # x-axis value of the ruler indicator head
|
176
|
+
rib_y = ru_y - 0.09 # y-axis value of the ruler indicator head
|
177
|
+
rib_w = 0.02
|
178
|
+
rib_h = ru_h * 2
|
179
|
+
|
180
|
+
indicator_body = mpatches.Rectangle([fx+(rib_x-rib_w/2)*fs, fy+rib_y*fs], rib_w*fs, rib_h*fs,
|
181
|
+
fc="w", ec="k", lw=1.3, zorder=10) #path_effects=[path_effects.withSimplePatchShadow()]
|
182
|
+
ax.add_artist(indicator_body)
|
183
|
+
ax.add_artist(indicator_head)
|
184
|
+
|
185
|
+
## title
|
186
|
+
|
187
|
+
tt_x = ru_x + ru_w/2
|
188
|
+
tt_y = ru_y - 0.26
|
189
|
+
#title = f"BBP Benchmarking (REEB)"
|
190
|
+
#tt_c = '#9F9D9C'
|
191
|
+
#title_text = mpltext.Text(x=fx+tt_x*fs, y=fy+tt_y*fs, text=f'{title}',
|
192
|
+
#va="center", ha="center", color=tt_c, fontweight="normal", fontsize=12) #fontfamily='serif'
|
193
|
+
|
194
|
+
#ax.add_artist(title_text)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# ruler annotation shinking config
|
4
|
+
|
5
|
+
config_dict = {'full_name': {'size_lim': 0.11, 'names': {'part_one': "GOOD", 'part_two': 'NORM', 'part_three': 'POOR'}},
|
6
|
+
'shrink_name': {'size_lim': 0.08, 'names': {'part_one': "GD", 'part_two': 'NR', 'part_three': 'PR'}},
|
7
|
+
'short_name': {'size_lim': 0.06, 'names': {'part_one': "G", 'part_two': 'N', 'part_three': 'P'}},
|
8
|
+
'null_name': {'size_lim': 0.05, 'names': {'part_one': "", 'part_two': '', 'part_three': ''}},
|
9
|
+
}
|
10
|
+
|
11
|
+
def ruler_anno_shink_cf(bar_width, part):
|
12
|
+
|
13
|
+
if bar_width > config_dict['full_name']['size_lim']:
|
14
|
+
rpa_text = config_dict['full_name']['names'][part]
|
15
|
+
elif bar_width > config_dict['shrink_name']['size_lim']:
|
16
|
+
rpa_text = config_dict['shrink_name']['names'][part]
|
17
|
+
elif bar_width > config_dict['short_name']['size_lim']:
|
18
|
+
rpa_text = config_dict['short_name']['names'][part]
|
19
|
+
else:
|
20
|
+
rpa_text = config_dict['null_name']['names'][part]
|
21
|
+
|
22
|
+
return rpa_text
|
23
|
+
|
24
|
+
|