예제 #1
0
def main():
    """ Main entry point of the app """
    logger.info("CMPC Wide Area Distribution Main Loop")

    files_yaml = yaml_tools.read_yaml('../configs', 'files.yaml')

    old_path = os_tools.Change_Working_Path('../Data')
    # Station_filename = 'Station Location a375a0647.xlsx'
    Station_filename = files_yaml['Station_Spreadsheet']['filename']
    Transformer_filename = files_yaml['Transformer_Spreadsheet']['filename']
    Breaker_filename = files_yaml['Breaker_Spreadsheet']['filename']
    Relay_filename = files_yaml['Relay_Spreadsheet']['filename']
    Circuit_Switcher_filename = files_yaml['Circuit_Switcher_Spreadsheet'][
        'filename']
    Metalclad_Switchgear_filename = files_yaml[
        'Metalclad_Switchgear_Spreadsheet']['filename']
    Transformer_Risk_filename = files_yaml['Transformer_Risk_Spreadsheet'][
        'filename']
    Summer_Load_Filename = files_yaml['Summer_Load_Spreadsheet']['filename']
    Winter_Load_Filename = files_yaml['Winter_Load_Spreadsheet']['filename']
    Fault_Reporting_Proiritization_filename = files_yaml[
        'East_Doc_Fault_Report_Spreadsheet']['filename']
    Fault_Reporting_Proiritization_filename1 = files_yaml[
        'West_Doc_Fault_Report_Spreadsheet']['filename']
    Associated_Breaker_Details_filename = files_yaml[
        'Associated_Breaker_Spreadsheet']['filename']
    High_Side_Protection = files_yaml['High_Side_Protection_Spreadsheet'][
        'filename']

    Excel_Files = [
        Station_filename, Transformer_filename, Breaker_filename,
        Relay_filename, Metalclad_Switchgear_filename, Summer_Load_Filename,
        Winter_Load_Filename, Circuit_Switcher_filename
    ]

    # poolo = Pool(processes=15)

    High_Side_Protection_DF = Excel_to_Pandas(
        Associated_Breaker_Details_filename,
        check_update=False,
        SheetName='High Side Protection')

    High_Side_Protection_DF = High_Side_Protection_DF[1]

    Associated_Breaker_DetailsDF = Excel_to_Pandas(
        Associated_Breaker_Details_filename,
        check_update=False,
        SheetName='Associated Breaker Details')
    Associated_Breaker_DetailsDF = Associated_Breaker_DetailsDF[1]
    # Import Excel files
    # df_listo = pool.map(Excel_to_Pandas, Excel_Files)

    pool = Pool(processes=cpu_count())
    df_list = pool.map(
        smart_excel_to_pandas.smart_excel_to_pandas.Smart_Excel_to_Pandas,
        Excel_Files)
    pool.close()
    pool.join()

    Excel_Files = [
        Fault_Reporting_Proiritization_filename,
        Fault_Reporting_Proiritization_filename1
    ]

    pool = Pool(processes=cpu_count())
    # df_list.append(pool.starmap(smart_excel_to_pandas.smart_excel_to_pandas.Smart_Excel_to_Pandas,
    #                           [(Excel_Files[0],None), (Excel_Files[1],None)]))
    df_list1 = pool.map(Excel_to_Pandas, Excel_Files)

    df_list = df_list + df_list1
    pool.close()
    pool.join()

    # df_list[next(i for i, t in enumerate(df_list) if t[0] == Fault_Reporting_Proiritization_filename)][1] = pd.concat([
    df = pd.concat([
        df_list[next(i for i, t in enumerate(df_list)
                     if t[0] == Fault_Reporting_Proiritization_filename)][1],
        df_list[next(i for i, t in enumerate(df_list)
                     if t[0] == Fault_Reporting_Proiritization_filename1)][1]
    ],
                   axis=0,
                   ignore_index=True)
    tup = (Fault_Reporting_Proiritization_filename, df)
    df_list = df_list + [tup]
    del df_list[10]

    Transformer_RiskDF = Cleanup_Dataframe(
        pd.read_csv(Transformer_Risk_filename))

    # Data Cleanup

    AIStationDF = Station.station_df_cleanup(
        df_list[next(i for i, t in enumerate(df_list)
                     if t[0] == Station_filename)][1],
        df_list[next(i for i, t in enumerate(df_list)
                     if t[0] == Metalclad_Switchgear_filename)][1])

    PowerTransformerDF = PowerTransformer.transformer_df_cleanup(df_list[next(
        i for i, t in enumerate(df_list) if t[0] == Transformer_filename)][1])
    Outdoor_BreakerDF = breaker_df_cleanup(df_list[next(
        i for i, t in enumerate(df_list) if t[0] == Breaker_filename)][1])
    RelayDataDF = relay_df_cleanup(df_list[next(i
                                                for i, t in enumerate(df_list)
                                                if t[0] == Relay_filename)][1])
    Summer_LoadDF = summer_load_df_cleanup(df_list[next(
        i for i, t in enumerate(df_list) if t[0] == Summer_Load_Filename)][1])

    Winter_LoadDF = summer_load_df_cleanup(df_list[next(
        i for i, t in enumerate(df_list) if t[0] == Winter_Load_Filename)][1])

    Fault_Reporting_ProiritizationDF = FRP.Fault_Reporting_Proiritization_df_cleanup(
        df_list[next(i for i, t in enumerate(df_list)
                     if t[0] == Fault_Reporting_Proiritization_filename)][1])

    Circuit_Switcher_df = CS_df_cleanup(df_list[next(
        i for i, t in enumerate(df_list)
        if t[0] == Circuit_Switcher_filename)][1])
    os_tools.Change_Working_Path(old_path)
    # Create new date in the dataframes
    Fault_Reporting_ProiritizationDF = FRP.Fault_Reporting_Proiritization_df_create_data(
        Fault_Reporting_ProiritizationDF)
    Summer_LoadDF = summer_load_df_create_data(Summer_LoadDF, AIStationDF)
    Winter_LoadDF = summer_load_df_create_data(Winter_LoadDF, AIStationDF)
    AIStationDF = Station.station_df_create_data(AIStationDF,
                                                 PowerTransformerDF,
                                                 Outdoor_BreakerDF)
    PowerTransformerDF = PowerTransformer.transformer_df_create_data(
        PowerTransformerDF, Transformer_RiskDF, Summer_LoadDF, Winter_LoadDF,
        AIStationDF)
    Outdoor_BreakerDF = breaker_df_create_data(
        Outdoor_BreakerDF, PowerTransformerDF,
        Fault_Reporting_ProiritizationDF)
    Outdoor_BreakerDF = Add_Associated_XMR_Details(
        Outdoor_BreakerDF, Associated_Breaker_DetailsDF)
    Outdoor_BreakerDF = Match_Missing_Breakers_to_XFMR(Outdoor_BreakerDF,
                                                       PowerTransformerDF)

    RelayDataDF = relay_df_create_data(RelayDataDF, PowerTransformerDF,
                                       Outdoor_BreakerDF)
    AIStationDF = Station.add_Risk_to_Stationdf(AIStationDF,
                                                PowerTransformerDF)
    AIStationDF = Station.add_Criticality_to_Stationdf(AIStationDF,
                                                       PowerTransformerDF)
    AIStationDF = Station.add_MVA_Exceeded_Stationdf(AIStationDF,
                                                     PowerTransformerDF)

    # Outdoor_BreakerDF = Outdoor_Breaker.add_Relay_Outdoor_BreakerDF(RelayDataDF, Outdoor_BreakerDF)
    Outdoor_BreakerDF = Outdoor_Breaker.add_Relay2_Outdoor_BreakerDF(
        RelayDataDF, Outdoor_BreakerDF)
    PowerTransformerDF = PowerTransformer.Add_fused_Bank_to_PowerTransformerDF(
        PowerTransformerDF, RelayDataDF)

    AIStationDF = Station.Add_Fused_Bank_to_Stationdf(AIStationDF,
                                                      PowerTransformerDF)
    PowerTransformerDF = PowerTransformer.Add_Feeder_Protection_on_Bank(
        PowerTransformerDF, Outdoor_BreakerDF)
    PowerTransformerDF = PowerTransformer.Add_FD_DEV_STATUS_on_Bank(
        PowerTransformerDF, Outdoor_BreakerDF)
    AIStationDF = Station.Add_Feeder_Protection_on_Station(
        PowerTransformerDF, AIStationDF)
    AIStationDF = Station.Add_Bus_Tie_at_Station(AIStationDF,
                                                 Outdoor_BreakerDF)
    # PowerTransformerDF = PowerTransformer.add_Xfmer_Diff_Protection_PowerTransformerDF(RelayDataDF, PowerTransformerDF)
    PowerTransformerDF = PowerTransformer.add_Xfmer2_Diff_Protection_PowerTransformerDF(
        RelayDataDF, PowerTransformerDF)
    PowerTransformerDF = PowerTransformer.Add_High_Side_Interrupter_PowerTransformerDF(
        PowerTransformerDF, High_Side_Protection_DF)
    AIStationDF = Station.Add_Xfmer_Diff_Protection_on_Station(
        PowerTransformerDF, AIStationDF)
    AIStationDF = Station.Add_CS_count_on_Station(Circuit_Switcher_df,
                                                  AIStationDF)
    AIStationDF = Station.Add_FID_count_equal_XFMER_count(AIStationDF)
    AIStationDF = Station.Suggested_Approach_Station(AIStationDF)
    PowerTransformerDF = PowerTransformer.Suggested_Approach_Bank(
        PowerTransformerDF)

    # AIStationDF = pandas_tools.add_colunms_to_df(AIStationDF.copy(),)
    AIStationDF = Station.Suggested_Approach_Station2(
        AIStationDF, PowerTransformerDF.copy())
    AIStationDF = Station.Add_Needed_MVA_Station(AIStationDF.copy(),
                                                 PowerTransformerDF.copy())
    AIStationDF = Station.Add_Suggested_Solution_Station(AIStationDF.copy())

    # PowerTransformerDF.query('Suggested_Approach_Bank.str.contains("Component")', engine=python)
    dr.main(
        PowerTransformerDF.query(
            'Suggested_Approach_Bank.str.contains("Component") or Suggested_Approach_Bank.str.contains("Rebuild")'
        ))

    #dr.main(PowerTransformerDF.query('Suggested_Approach_Bank.str.contains("Rebuild")'))

    # Analytics
    df = PowerTransformerDF.groupby(
        [
            'Feeder_Protection', 'Xfmer_Diff_Protection',
            'High_Side_Interrupter', 'Suggested_Approach_Bank'
        ],
        dropna=False).size().reset_index().rename(columns={0: 'count'})
    df.to_excel('Bank Analytics.xlsx')

    df = AIStationDF.groupby([
        'Single_Phase_Station', 'FIDequalXFMER', 'Xfmer_Diff_Protection',
        'Bus_Equal_XFMER', 'Feeder_Protection', 'Suggested_Approach_Station'
    ],
                             dropna=False).size().reset_index().rename(
                                 columns={0: 'count'})
    df.to_excel('Analytics.xlsx')
    # Select columns to keep
    # AIStationDF = AIStationDF[
    #   ['Region', 'Work_Center', 'Maximo_Code', 'Station_Name', 'STATION_STR_TYPE', 'Age', 'Single_Phase_Station',
    #   'Has_Fused_Bank', 'XFMER_Count', 'BUS_TIE_Count',  'Max_Risk_Index_at_Station', 'Max_MVA_Exceeded', 'Mean_Feeder_Age', 'Feeder_Protection'
    #  ]]

    AIStationDF = AIStationDF[[
        'Region', 'Work_Center', 'Maximo_Code', 'Station_Name',
        'Single_Phase_Station', 'Has_Fused_Bank', 'XFMER_Count',
        'Transformer_Sum_Criticality_at_Station',
        'Suggested_Approach_Station2', 'Suggested_Solution'
    ]]

    PowerTransformerDF = PowerTransformerDF[[
        'Region', 'Work_Center', 'Station_Name', 'Maximo_Code', 'Age',
        'MAXIMUM_MVA', 'HV_NOM_KV', 'LV_NOM_KV', 'Risk_Index_(Normalized)',
        'Max_Projected_Summer_Load', 'Max_Projected_Winter_Load', 'NUM_PH',
        'Feeder_Protection', 'Xfmer_Diff_Protection', 'High_Side_Interrupter',
        'Suggested_Approach_Bank'
    ]]

    Outdoor_BreakerDF = Outdoor_BreakerDF[[
        'Region', 'Work_Center', 'Station_Name', 'Maximo_Code', 'Age',
        'BKR_SERVICE', 'SELF_CONTAINED', 'Manufacturer', 'BKR_MECH_MOD',
        'BKR_INTERR', 'Associated_XFMR', 'DOC_Fault_Reporting_Prioritization',
        'Feeder_Protection', 'FD_DEV_STATUS'
    ]]

    # Create a Pandas Excel writer using XlsxWriter as the engine.
    writer = pd.ExcelWriter('../CMPC_WideArea_AIS.xlsx', engine='xlsxwriter')

    # Convert the dataframe to an XlsxWriter Excel object.
    AIStationDF.to_excel(writer, sheet_name='Stations', index=False)
    PowerTransformerDF.to_excel(writer, sheet_name='Transformers', index=False)
    Outdoor_BreakerDF.to_excel(writer,
                               sheet_name='Outdoor Breakers',
                               index=False)
    RelayDataDF.to_excel(writer, sheet_name='Relay', index=False)
    Summer_LoadDF.to_excel(writer, sheet_name='Summer Load', index=False)
    Winter_LoadDF.to_excel(writer, sheet_name='Winter Load', index=False)
    # Circuit_Switcher_df.to_excel(writer, sheet_name='Circuit Switcher', index=False)
    # Close the Pandas Excel writer and output the Excel file.
    writer.save()