时间距离统计dist.py


In [1]:
from dist_time import *
import pandas as pd
from collections.abc import Iterator, Iterable, Generator
from collections import defaultdict
import re
from sqlalchemy import create_engine
from sqlalchemy.types import Integer, Text, DateTime, Float, VARCHAR
from sqlalchemy import Table, MetaData, Column
import itertools as it


MACHINE_MAP = {'PreSort': 'm', 'Unload': 'r', 'Secondary': 'c', 'Primary': 'm', 'Export':'e', 'Reload': 're'}
MACHINE_MAP_ID = {'PreSort': 'm', 'Unload': 'a', 'Secondary': 'c', 'Primary': 'm', 'Export':'e', 'Reload': 're'}

UNLOAD_MAP = {'D': 'a', 'I': 'a', 'R': 'r'}

UNLOAD_AREA_MAP = {
    'R_Unload1':'R','R_Unload2':'R','R_Unload3':'R','Unload1':'D','Unload2':'D','Unload3':'D', 
    'Unload4':'D','Unload5':'D','Unload6':'D','Unload7':'D','Unload8':'D','Unload9':'D','Unload10':'D', 
    'Unload11':'D','Unload12':'D','Unload13':'D','Unload14':'D','Unload22':'D','Unload23':'D', 
    'Unload15':'I','Unload16':'I','Unload17':'I','Unload18':'I','Unload19':'I','Unload20':'I','Unload21':'I'}
RELOAD_AREA_MAP = {
    'Reload30': 'R', 'Reload31': 'R', 'Reload32': 'R', 'Reload33': 'R', 'Reload34': 'R', 'Reload1': 'D', 'Reload2': 'D', 
    'Reload3': 'D', 'Reload4': 'D', 'Reload5': 'D', 'Reload6': 'D', 'Reload7': 'D', 'Reload8': 'D', 'Reload9': 'D', 
    'Reload10': 'D', 'Reload11': 'D', 'Reload12': 'D', 'Reload13': 'D', 'Reload14': 'D', 'Reload15': 'D', 'Reload29': 'D', 
    'Reload16': 'I', 'Reload17': 'I', 'Reload18': 'I', 'Reload19': 'I', 'Reload20': 'I', 'Reload21': 'I', 'Reload22': 'I', 
    'Reload23': 'I', 'Reload24': 'I', 'Reload25': 'I', 'Reload26': 'I', 'Reload27': 'I', 'Reload28': 'I'}


class MySQLConfig:
    HOST = '10.0.149.62'
    USER = "root"
    PASS = "root123"
    DB = "cm_erzhou_v1_1"
    CHARSET = 'utf8'

    engine = create_engine(
        f'mysql+pymysql://{USER}:{PASS}@{HOST}/{DB}?charset={CHARSET}',
        isolation_level="READ UNCOMMITTED")
    
    
def creat_table():
    db_eng = MetaData(bind=MySQLConfig.engine)
    machine_table_sche = \
    Table(
        "i_machine_distance_table",
        db_eng,
        Column("equipment_port_last", VARCHAR(length=32, )),
        Column("equipment_port_next", VARCHAR(length=32, )),
        Column("equipment_area_last", VARCHAR(length=32, )),
        Column("equipment_area_next", VARCHAR(length=32, )),
        Column("source_type", VARCHAR(length=32, )),
        Column("process_time", Float(precision=2)),
        Column("parameter_name", VARCHAR(length=32, )),
    )
    machine_table_sche.create(checkfirst=True)

def to_mysql(table_name: str, data: pd.DataFrame):
    
        try:
            data.to_sql(name=table_name,
                        con=MySQLConfig.engine,
                        if_exists='append',
                        index=0)
            print(f"mysql write table {table_name} succeed!")
            
        except Exception as exc:
            print(f"mysql write table {table_name} failed, error: {exc}.")
            raise Exception
    
def dict_to_dataframe(pd: pd, *, parameter_list: list=None):
   
    data = defaultdict(list)
    for paramer in parameter_list:
        data['process_time'].extend(list(paramer.values()))
        data ['parameter_name'].extend(list(paramer.keys()))
        
    return pd.DataFrame(data)

def df_to_excel(sheet, df):
    file_name = "d:/Git/git.jupyter/jupyter_app/ipython/py36_erzhou_input/dist_time/out/outdata.xlsx"
    df.to_excel(file_name, sheet_name=sheet, index=False)
                
v = R_Dock_dist.values()
k = R_Dock_dist.keys()
dict_list = {
    'UU': [Unload_dist],
    'NC': [NC_dist],
    'R': [R_Dock_R_PreSort_dist,R_PreSort_R_Secondary_dist,R_PreSort_D_Primary_dist,R_PreSort_S_Primary_dist ,R_PreSort_I_Export_dist],
    'D': [D_Dock_D_Primary_dist, D_Dock_S_Primary_dist, D_Primary_D_Secondary_dist, D_Primary_I_Export_dist, D_Primary_R_Secondary_dist],
    'S': [S_Primary_S_Secondary_dist, S_Secondary_D_Primary_dist, S_Secondary_I_PreSort_dist],
    'I': [I_Dock_I_PreSort_dist, I_PreSort_I_Secondary_dist, I_Export_I_Secondary_dist, I_PreSort_S_Secondary_dist, 
          I_PreSort_S_Primary_dist, I_PreSort_D_Primary_dist, I_PreSort_R_Secondary_dist]
}

NC件

  • NC_dist

In [2]:
nc_df = dict_to_dataframe(pd, parameter_list=dict_list['NC'])
nc_df['process_time'] = nc_df.process_time.apply(lambda x : '{:.1f}'.format(x/1000))
nc_df['source_type'] ='NC'
nc_df['equipment_port_last'], nc_df['equipment_port_next'] = nc_df.parameter_name.str.split('-', 1).str
nc_df['equipment_area_last'] = nc_df.equipment_port_last.apply(lambda x : UNLOAD_AREA_MAP[x])
nc_df['equipment_area_next'] = nc_df.equipment_port_next.apply(lambda x : RELOAD_AREA_MAP[x])
nc_df.equipment_port_last = nc_df.equipment_port_last.apply(lambda x : x.replace(re.sub('\d+','',x), UNLOAD_MAP[UNLOAD_AREA_MAP[x]]))
nc_df.equipment_port_next = nc_df.equipment_port_next.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP[re.sub('\d+','',x)]))

nc_df = nc_df.loc[:,['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type', 
                     'process_time','parameter_name'
                    ]]
nc_df = nc_df.sort_values(['equipment_port_last'])
nc_df = nc_df.reset_index(drop=True)
nc_df.sample(10)


Out[2]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
505 a22 re29 D D NC 251.2 Unload22-Reload29
163 a13 re10 D D NC 1693.6 Unload13-Reload10
842 r2 re12 R D NC 1170.0 R_Unload2-Reload12
576 a3 re20 D I NC 517.8 Unload3-Reload20
557 a3 re34 D R NC 925.0 Unload3-Reload34
517 a23 re25 D I NC 803.9 Unload23-Reload25
212 a15 re28 I I NC 278.8 Unload15-Reload28
756 a9 re2 D D NC 1136.3 Unload9-Reload2
864 r3 re27 R I NC 680.0 R_Unload3-Reload27
860 r3 re30 R R NC 335.0 R_Unload3-Reload30

R类

  • R_Dock_R_PreSort_dist,R_PreSort_R_Secondary_dist,R_PreSort_D_Primary_dist,R_PreSort_S_Primary_dist ,R_PreSort_I_Export_dist

In [3]:
r_df = dict_to_dataframe(pd, parameter_list=dict_list['R'])
r_df['process_time'] = r_df.process_time.apply(lambda x : '{:.1f}'.format(x/1000))
r_df['equipment_port_last'], r_df['equipment_port_next'] = r_df.parameter_name.str.split('-', 1).str
r_df['equipment_area_last'], r_df['equipment_port_last'] = r_df.equipment_port_last.str.split('_', 1).str
r_df['equipment_area_next'], r_df['equipment_port_next'] = r_df.equipment_port_next.str.split('_', 1).str
r_df.equipment_port_last = r_df.equipment_port_last.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP[re.sub('\d+','',x)]))
r_df.equipment_port_next = r_df.equipment_port_next.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP[re.sub('\d+','',x)]))
r_df['source_type'] = 'R'
r_df = r_df.loc[:,['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type',
                   'process_time', 'parameter_name'
                  ]]
r_df.sample(10)


Out[3]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
29 m5 c3 R R R 285.0 R_PreSort5-R_Secondary3
16 m2 c5 R R R 435.0 R_PreSort2-R_Secondary5
28 m5 c2 R R R 400.0 R_PreSort5-R_Secondary2
15 m2 c4 R R R 320.0 R_PreSort2-R_Secondary4
42 m3 m15 R D R 350.8 R_PreSort3-D_Primary15
63 m2 e14 R I R 633.1 R_PreSort2-I_Export14
8 m1 c2 R R R 170.0 R_PreSort1-R_Secondary2
0 r1 m1 R R R 165.0 R_Unload1-R_PreSort1
37 m2 m10 R D R 262.8 R_PreSort2-D_Primary10
60 m4 e8 R I R 398.1 R_PreSort4-I_Export8

D类

  • D_Dock_D_Primary_dist, D_Dock_S_Primary_dist, D_Primary_D_Secondary_dist, D_Primary_I_Export_dist, D_Primary_R_Secondary_dist

In [4]:
d_df = dict_to_dataframe(pd, parameter_list=dict_list['D'])
d_df['process_time'] = d_df.process_time.apply(lambda x : '{:.1f}'.format(x/1000))
d_df['equipment_port_last'], d_df['equipment_port_next'] = d_df.parameter_name.str.split('-', 1).str
# add D_ flag to unload area
d_df.equipment_port_last = d_df.equipment_port_last.where(d_df.equipment_port_last.str.startswith('D_'), 
                                                          'D_'+d_df.equipment_port_last)
d_df['equipment_area_last'], d_df['equipment_port_last'] = d_df.equipment_port_last.str.split('_', 1).str

d_df['equipment_area_next'], d_df['equipment_port_next'] = d_df.equipment_port_next.str.split('_', 1).str
d_df.equipment_port_last = d_df.equipment_port_last.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP_ID[re.sub('\d+','',x)]))
d_df.equipment_port_next = d_df.equipment_port_next.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP_ID[re.sub('\d+','',x)]))
d_df['source_type'] = 'D'
d_df = d_df.loc[:,['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type',
                   'process_time', 'parameter_name'
                  ]]
d_df.sample(10)


Out[4]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
137 m26 c3 D D D 436.3 D_Primary26-D_Secondary3
878 m11 e14 D I D 274.1 D_Primary11-I_Export14
717 m18 e8 D I D 153.7 D_Primary18-I_Export8
228 m5 c7 D D D 586.3 D_Primary5-D_Secondary7
186 m19 c5 D D D 456.3 D_Primary19-D_Secondary5
522 m19 e1 D I D 468.6 D_Primary19-I_Export1
923 m28 c1 D R D 814.3 D_Primary28-R_Secondary1
406 m15 c13 D D D 516.8 D_Primary15-D_Secondary13
992 m13 c4 D R D 456.8 D_Primary13-R_Secondary4
453 m6 c15 D D D 91.3 D_Primary6-D_Secondary15

s类

  • S_Primary_S_Secondary_dist, S_Secondary_D_Primary_dist, S_Secondary_I_PreSort_dist

In [5]:
s_df = dict_to_dataframe(pd, parameter_list=dict_list['S'])
s_df['process_time'] = s_df.process_time.apply(lambda x : '{:.1f}'.format(x/1000))
s_df['equipment_port_last'], s_df['equipment_port_next'] = s_df.parameter_name.str.split('-', 1).str
# check if hav D_ flag  else add D_
s_df.equipment_port_last = s_df.equipment_port_last.where(s_df.equipment_port_last.str.startswith('S_'), 
                                                          'S_'+s_df.equipment_port_last)
s_df['equipment_area_last'], s_df['equipment_port_last'] = s_df.equipment_port_last.str.split('_', 1).str

s_df['equipment_area_next'], s_df['equipment_port_next'] = s_df.equipment_port_next.str.split('_', 1).str
s_df.equipment_port_last = s_df.equipment_port_last.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP_ID[re.sub('\d+','',x)]))
s_df.equipment_port_next = s_df.equipment_port_next.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP_ID[re.sub('\d+','',x)]))
s_df['source_type'] = 'S'
s_df = s_df.loc[:,['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type',
                   'process_time', 'parameter_name'
                  ]]
s_df.head(10)


Out[5]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
0 m1 c1 S S S 215.0 S_Primary1-S_Secondary1
1 m1 c2 S S S 165.0 S_Primary1-S_Secondary2
2 m1 c3 S S S 125.0 S_Primary1-S_Secondary3
3 m1 c4 S S S 95.0 S_Primary1-S_Secondary4
4 m1 c5 S S S 350.0 S_Primary1-S_Secondary5
5 m1 c6 S S S 315.0 S_Primary1-S_Secondary6
6 m1 c7 S S S 315.0 S_Primary1-S_Secondary7
7 m1 c8 S S S 350.0 S_Primary1-S_Secondary8
8 m1 c9 S S S 500.0 S_Primary1-S_Secondary9
9 m1 c10 S S S 465.0 S_Primary1-S_Secondary10

I类

  • I_Dock_I_PreSort_dist, I_PreSort_I_Secondary_dist, I_Export_I_Secondary_dist, I_PreSort_S_Secondary_dist, I_PreSort_S_Primary_dist, I_PreSort_D_Primary_dist, I_PreSort_R_Secondary_dist

In [6]:
i_df = dict_to_dataframe(pd, parameter_list=dict_list['I'])
i_df['source_type'] = 'I'
i_df['process_time'] = i_df.process_time.apply(lambda x : '{:.1f}'.format(x/1000))
i_df['equipment_port_last'], i_df['equipment_port_next'] = i_df.parameter_name.str.split('-', 1).str
# check if hav D_ flag  else add D_
i_df.equipment_port_last = i_df.equipment_port_last.where(i_df.equipment_port_last.str.startswith('I_'), 
                                                          'I_'+i_df.equipment_port_last)
i_df['equipment_area_last'], i_df['equipment_port_last'] = i_df.equipment_port_last.str.split('_', 1).str

i_df['equipment_area_next'], i_df['equipment_port_next'] = i_df.equipment_port_next.str.split('_', 1).str
i_df.equipment_port_last = i_df.equipment_port_last.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP_ID[re.sub('\d+','',x)]))
i_df.equipment_port_next = i_df.equipment_port_next.apply(lambda x : x.replace(re.sub('\d+','',x), MACHINE_MAP_ID[re.sub('\d+','',x)]))

i_df = i_df.loc[:,['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type',
                   'process_time', 'parameter_name'
                  ]]
i_df.head(10)


Out[6]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
0 a15 m1 I I I 41.3 Unload15-I_PreSort1
1 a21 m10 I I I 101.3 Unload21-I_PreSort10
2 a16 m2 I I I 291.3 Unload16-I_PreSort2
3 a15 m2 I I I 106.3 Unload15-I_PreSort2
4 a16 m3 I I I 556.3 Unload16-I_PreSort3
5 a17 m4 I I I 521.3 Unload17-I_PreSort4
6 a18 m5 I I I 536.3 Unload18-I_PreSort5
7 a17 m5 I I I 656.3 Unload17-I_PreSort5
8 a18 m6 I I I 601.3 Unload18-I_PreSort6
9 a19 m7 I I I 148.3 Unload19-I_PreSort7

U-U类


In [7]:
uu_df = dict_to_dataframe(pd, parameter_list=dict_list['UU'])

uu_df['source_type'] = 'AA'

uu_df['equipment_port_last'], uu_df['equipment_port_next'] = uu_df.parameter_name.str.split('-', 1).str

uu_df['equipment_area_last'] = uu_df.equipment_port_last.apply(lambda x : UNLOAD_AREA_MAP[x])
uu_df['equipment_area_next'] = uu_df.equipment_port_next.apply(lambda x : UNLOAD_AREA_MAP[x])

uu_df.equipment_port_last = uu_df.equipment_port_last.apply(lambda x : x.replace(re.sub('\d+','',x), UNLOAD_MAP[UNLOAD_AREA_MAP[x]]))
uu_df.equipment_port_next = uu_df.equipment_port_next.apply(lambda x : x.replace(re.sub('\d+','',x), UNLOAD_MAP[UNLOAD_AREA_MAP[x]]))

uu_df = uu_df.loc[:,['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type', 
                     'process_time','parameter_name'
                    ]]

uu_df = uu_df.sort_values(['equipment_port_last', 'equipment_port_next']).reset_index(drop=True)
uu_df.head(10)


Out[7]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
0 a1 a1 D D AA 0.00 Unload1-Unload1
1 a1 a2 D D AA 8.82 Unload1-Unload2
2 a1 a3 D D AA 252.00 Unload1-Unload3
3 a1 a4 D D AA 234.00 Unload1-Unload4
4 a10 a10 D D AA 0.00 Unload10-Unload10
5 a10 a11 D D AA 234.00 Unload10-Unload11
6 a10 a12 D D AA 252.00 Unload10-Unload12
7 a10 a9 D D AA 8.82 Unload10-Unload9
8 a11 a1 D D AA 149.40 Unload11-Unload1
9 a11 a11 D D AA 0.00 Unload11-Unload11

concat

  • nc_df,r_df,d_df,s_df,i_df,uu_df

In [9]:
dist_concat = pd.concat([nc_df, r_df, d_df, s_df, i_df, uu_df], axis=0)
dist_concat = dist_concat.loc[:, ['equipment_port_last', 'equipment_port_next', 'equipment_area_last', 'equipment_area_next', 'source_type', 
                     'process_time','parameter_name']]
# dist_concat[dist_concat.equipment_port_next.str.startswith('RE')]
dist_concat.head(10)


Out[9]:
equipment_port_last equipment_port_next equipment_area_last equipment_area_next source_type process_time parameter_name
0 a1 re30 D R NC 395.0 Unload1-Reload30
1 a1 re34 D R NC 835.0 Unload1-Reload34
2 a1 re1 D D NC 206.7 Unload1-Reload1
3 a1 re29 D D NC 637.5 Unload1-Reload29
4 a1 re28 D I NC 853.2 Unload1-Reload28
5 a1 re27 D I NC 957.5 Unload1-Reload27
6 a1 re26 D I NC 1128.5 Unload1-Reload26
7 a1 re25 D I NC 1340.4 Unload1-Reload25
8 a1 re24 D I NC 1455.8 Unload1-Reload24
9 a1 re23 D I NC 1539.8 Unload1-Reload23