{ "cells": [ { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "path_root = os.path.dirname(os.path.dirname(os.path.abspath('.')))\n", "path_tables_draft = os.path.join(path_root, 'draft', 'data', 'tables')\n", "path_tables = os.path.join(path_root,'data', 'tables')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "alphs = ['A', 'B']\n", "now = datetime.now()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CRSRD_IDPLAN_NOHOURMINCYCLOFFSETRINGA_PHASE1RINGA_PHASE2RINGA_PHASE3RINGA_PHASE4...RINGA_PHASE8RINGB_PHASE1RINGB_PHASE2RINGB_PHASE3RINGB_PHASE4RINGB_PHASE5RINGB_PHASE6RINGB_PHASE7RINGB_PHASE8LAST_MDFCN_DT
01751001605737395529...03739255900002024-07-12 16:50:38.378729
11751701704040425533...04042295900002024-07-12 16:50:38.378729
21751901802843455537...04345335900002024-07-12 16:50:38.378729
3175118301901846485541...04648375900002024-07-12 16:50:38.378729
41761001501313773400...0377340000002024-07-12 16:50:38.378729
\n", "

5 rows × 23 columns

\n", "
" ], "text/plain": [ " CRSRD_ID PLAN_NO HOUR MIN CYCL OFFSET RINGA_PHASE1 RINGA_PHASE2 \\\n", "0 175 1 0 0 160 57 37 39 \n", "1 175 1 7 0 170 40 40 42 \n", "2 175 1 9 0 180 28 43 45 \n", "3 175 1 18 30 190 18 46 48 \n", "4 176 1 0 0 150 131 37 73 \n", "\n", " RINGA_PHASE3 RINGA_PHASE4 ... RINGA_PHASE8 RINGB_PHASE1 RINGB_PHASE2 \\\n", "0 55 29 ... 0 37 39 \n", "1 55 33 ... 0 40 42 \n", "2 55 37 ... 0 43 45 \n", "3 55 41 ... 0 46 48 \n", "4 40 0 ... 0 37 73 \n", "\n", " RINGB_PHASE3 RINGB_PHASE4 RINGB_PHASE5 RINGB_PHASE6 RINGB_PHASE7 \\\n", "0 25 59 0 0 0 \n", "1 29 59 0 0 0 \n", "2 33 59 0 0 0 \n", "3 37 59 0 0 0 \n", "4 40 0 0 0 0 \n", "\n", " RINGB_PHASE8 LAST_MDFCN_DT \n", "0 0 2024-07-12 16:50:38.378729 \n", "1 0 2024-07-12 16:50:38.378729 \n", "2 0 2024-07-12 16:50:38.378729 \n", "3 0 2024-07-12 16:50:38.378729 \n", "4 0 2024-07-12 16:50:38.378729 \n", "\n", "[5 rows x 23 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plan = pd.read_csv(os.path.join(path_tables_draft, 'plan.csv'))\n", "plan = plan.drop(columns=[f'red_{alph}{i}' for alph in alphs for i in range(1,9)])\n", "plan = plan.drop(columns=[f'yellow_{alph}{i}' for alph in alphs for i in range(1,9)])\n", "plan['PLAN_NO'] = 1\n", "plan['LAST_MDFCN_DT'] = now\n", "plan = plan.rename(columns={'inter_no':'CRSRD_ID',\n", " 'start_hour':'HOUR',\n", " 'start_minute':'MIN',\n", " 'cycle':'CYCL',\n", " 'offset':'OFFSET'})\n", "plan = plan.rename(columns={f'dura_{alph}{i}':f'RING{alph}_PHASE{i}' for alph in alphs for i in range(1,9)})\n", "TC_IF_TOD_DAY_PLAN = plan[['CRSRD_ID', 'PLAN_NO', 'HOUR', 'MIN', 'CYCL', 'OFFSET']\n", " + [f'RING{alph}_PHASE{i}' for alph in alphs for i in range(1,9)]\n", " + ['LAST_MDFCN_DT']]\n", "TC_IF_TOD_DAY_PLAN.head()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CRSRD_IDMNTHDAYPLAN_NOLAST_MDFCN_DT
01751112024-07-12 16:50:38.378729
11752912024-07-12 16:50:38.378729
217521012024-07-12 16:50:38.378729
317521112024-07-12 16:50:38.378729
417521212024-07-12 16:50:38.378729
\n", "
" ], "text/plain": [ " CRSRD_ID MNTH DAY PLAN_NO LAST_MDFCN_DT\n", "0 175 1 1 1 2024-07-12 16:50:38.378729\n", "1 175 2 9 1 2024-07-12 16:50:38.378729\n", "2 175 2 10 1 2024-07-12 16:50:38.378729\n", "3 175 2 11 1 2024-07-12 16:50:38.378729\n", "4 175 2 12 1 2024-07-12 16:50:38.378729" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "holidays = [(1,1), (2,9), (2,10), (2,11), (2,12), (3,1), (4,10), (5,1), (5,5), (5,6), (5,15), (6,6), (8,15), (9, 16), (9,17), (9,18), (10,3), (10,9), (12,25)]\n", "TC_IF_TOD_HOLIDAY_PLAN = []\n", "CRSRD_IDs = sorted(TC_IF_TOD_DAY_PLAN.CRSRD_ID.unique())\n", "for CRSRD_ID in CRSRD_IDs:\n", " for (MNTH, DAY) in holidays:\n", " TC_IF_TOD_HOLIDAY_PLAN.append({'CRSRD_ID':CRSRD_ID,'MNTH':MNTH, 'DAY':DAY, 'PLAN_NO':1, 'LAST_MDFCN_DT':now})\n", "TC_IF_TOD_HOLIDAY_PLAN = pd.DataFrame(TC_IF_TOD_HOLIDAY_PLAN)\n", "TC_IF_TOD_HOLIDAY_PLAN.head()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CRSRD_IDPLAN_NOPHASERINGA_FLOWRINGA_RED_SECRINGA_YELLO_SECRINGA_MIN_SECRINGB_FLOWRINGB_RED_SECRINGB_YELLO_SECRINGB_MIN_SECLAST_MDFCN_DT
017511-114-1-114-12024-07-12 16:50:38.378729
117512-114-1-114-12024-07-12 16:50:38.378729
217513-114-1-114-12024-07-12 16:50:38.378729
317514-114-1-114-12024-07-12 16:50:38.378729
417515-114-1-114-12024-07-12 16:50:38.378729
\n", "
" ], "text/plain": [ " CRSRD_ID PLAN_NO PHASE RINGA_FLOW RINGA_RED_SEC RINGA_YELLO_SEC \\\n", "0 175 1 1 -1 1 4 \n", "1 175 1 2 -1 1 4 \n", "2 175 1 3 -1 1 4 \n", "3 175 1 4 -1 1 4 \n", "4 175 1 5 -1 1 4 \n", "\n", " RINGA_MIN_SEC RINGB_FLOW RINGB_RED_SEC RINGB_YELLO_SEC RINGB_MIN_SEC \\\n", "0 -1 -1 1 4 -1 \n", "1 -1 -1 1 4 -1 \n", "2 -1 -1 1 4 -1 \n", "3 -1 -1 1 4 -1 \n", "4 -1 -1 1 4 -1 \n", "\n", " LAST_MDFCN_DT \n", "0 2024-07-12 16:50:38.378729 \n", "1 2024-07-12 16:50:38.378729 \n", "2 2024-07-12 16:50:38.378729 \n", "3 2024-07-12 16:50:38.378729 \n", "4 2024-07-12 16:50:38.378729 " ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plan = pd.read_csv(os.path.join(path_tables_draft, 'plan.csv'))\n", "plan = plan.drop(columns=[f'dura_{alph}{i}' for alph in alphs for i in range(1,9)]\n", " +['start_hour', 'start_minute', 'cycle', 'offset'])\n", "TC_IF_TOD_RED_YELLO = []\n", "for row in plan.itertuples():\n", " for i in range(1,9):\n", " TC_IF_TOD_RED_YELLO.append({\n", " 'CRSRD_ID': row.inter_no,\n", " 'PLAN_NO': 1,\n", " 'PHASE': i,\n", " 'RINGA_FLOW': -1,\n", " 'RINGA_RED_SEC': getattr(row, f'red_A{i}'),\n", " 'RINGA_YELLO_SEC': getattr(row, f'yellow_A{i}'),\n", " 'RINGA_MIN_SEC': -1,\n", " 'RINGB_FLOW': -1,\n", " 'RINGB_RED_SEC': getattr(row, f'red_B{i}'),\n", " 'RINGB_YELLO_SEC': getattr(row, f'yellow_B{i}'),\n", " 'RINGB_MIN_SEC': -1,\n", " 'LAST_MDFCN_DT':now})\n", "TC_IF_TOD_RED_YELLO = pd.DataFrame(TC_IF_TOD_RED_YELLO)\n", "TC_IF_TOD_RED_YELLO.head()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CRSRD_IDSUN_PLAN_NOMON_PLAN_NOTUE_PLAN_NOWED_PLAN_NOTHU_PLAN_NOFRI_PLAN_NOSAT_PLAN_NOLAST_MDFCN_DT
017511111112024-07-12 16:50:38.378729
117611111112024-07-12 16:50:38.378729
217711111112024-07-12 16:50:38.378729
317811111112024-07-12 16:50:38.378729
420111111112024-07-12 16:50:38.378729
\n", "
" ], "text/plain": [ " CRSRD_ID SUN_PLAN_NO MON_PLAN_NO TUE_PLAN_NO WED_PLAN_NO THU_PLAN_NO \\\n", "0 175 1 1 1 1 1 \n", "1 176 1 1 1 1 1 \n", "2 177 1 1 1 1 1 \n", "3 178 1 1 1 1 1 \n", "4 201 1 1 1 1 1 \n", "\n", " FRI_PLAN_NO SAT_PLAN_NO LAST_MDFCN_DT \n", "0 1 1 2024-07-12 16:50:38.378729 \n", "1 1 1 2024-07-12 16:50:38.378729 \n", "2 1 1 2024-07-12 16:50:38.378729 \n", "3 1 1 2024-07-12 16:50:38.378729 \n", "4 1 1 2024-07-12 16:50:38.378729 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TC_IF_TOD_WEEK_PLAN = []\n", "\n", "for CRSRD_ID in CRSRD_IDs:\n", " TC_IF_TOD_WEEK_PLAN.append({\n", " 'CRSRD_ID':CRSRD_ID,\n", " 'SUN_PLAN_NO':1,\n", " 'MON_PLAN_NO':1,\n", " 'TUE_PLAN_NO':1,\n", " 'WED_PLAN_NO':1,\n", " 'THU_PLAN_NO':1,\n", " 'FRI_PLAN_NO':1,\n", " 'SAT_PLAN_NO':1,\n", " 'LAST_MDFCN_DT':now,\n", " })\n", "TC_IF_TOD_WEEK_PLAN = pd.DataFrame(TC_IF_TOD_WEEK_PLAN)\n", "TC_IF_TOD_WEEK_PLAN.head()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PHASE_DTCRSRD_IDRINGA_PHASE1RINGA_PHASE2RINGA_PHASE3RINGA_PHASE4RINGA_PHASE5RINGA_PHASE6RINGA_PHASE7RINGA_PHASE8RINGB_PHASE1RINGB_PHASE2RINGB_PHASE3RINGB_PHASE4RINGB_PHASE5RINGB_PHASE6RINGB_PHASE7RINGB_PHASE8LAST_MDFCN_DT
02024-01-05 00:01:592063335262600003335262600002024-07-12 16:50:38.378729
12024-01-05 00:02:201783839402300003839402300002024-07-12 16:50:38.378729
22024-01-05 00:02:20201242417581700024241758170002024-07-12 16:50:38.378729
32024-01-05 00:02:2020239101000000391010000002024-07-12 16:50:38.378729
42024-01-05 00:02:301773620682600003620682600002024-07-12 16:50:38.378729
\n", "
" ], "text/plain": [ " PHASE_DT CRSRD_ID RINGA_PHASE1 RINGA_PHASE2 RINGA_PHASE3 \\\n", "0 2024-01-05 00:01:59 206 33 35 26 \n", "1 2024-01-05 00:02:20 178 38 39 40 \n", "2 2024-01-05 00:02:20 201 24 24 17 \n", "3 2024-01-05 00:02:20 202 39 101 0 \n", "4 2024-01-05 00:02:30 177 36 20 68 \n", "\n", " RINGA_PHASE4 RINGA_PHASE5 RINGA_PHASE6 RINGA_PHASE7 RINGA_PHASE8 \\\n", "0 26 0 0 0 0 \n", "1 23 0 0 0 0 \n", "2 58 17 0 0 0 \n", "3 0 0 0 0 0 \n", "4 26 0 0 0 0 \n", "\n", " RINGB_PHASE1 RINGB_PHASE2 RINGB_PHASE3 RINGB_PHASE4 RINGB_PHASE5 \\\n", "0 33 35 26 26 0 \n", "1 38 39 40 23 0 \n", "2 24 24 17 58 17 \n", "3 39 101 0 0 0 \n", "4 36 20 68 26 0 \n", "\n", " RINGB_PHASE6 RINGB_PHASE7 RINGB_PHASE8 LAST_MDFCN_DT \n", "0 0 0 0 2024-07-12 16:50:38.378729 \n", "1 0 0 0 2024-07-12 16:50:38.378729 \n", "2 0 0 0 2024-07-12 16:50:38.378729 \n", "3 0 0 0 2024-07-12 16:50:38.378729 \n", "4 0 0 0 2024-07-12 16:50:38.378729 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TL_IF_SIGL_CYCL = pd.read_csv(os.path.join(path_tables_draft, 'history.csv'))\n", "TL_IF_SIGL_CYCL = TL_IF_SIGL_CYCL.rename(columns={**{'inter_no':'CRSRD_ID', 'end_unix':'PHASE_DT'},\n", " **{f'dura_{alph}{i}':f'RING{alph}_PHASE{i}' for alph in alphs for i in range(1,9)}})\n", "TL_IF_SIGL_CYCL = TL_IF_SIGL_CYCL[['PHASE_DT', 'CRSRD_ID'] + [f'RING{alph}_PHASE{i}' for alph in alphs for i in range(1,9)]]\n", "TL_IF_SIGL_CYCL['PHASE_DT'] = TL_IF_SIGL_CYCL['PHASE_DT'].apply(lambda x:datetime.fromtimestamp(x))\n", "TL_IF_SIGL_CYCL['LAST_MDFCN_DT'] = now\n", "TL_IF_SIGL_CYCL.head()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idinter_type
0175i0parent
1175u00child
2176i1parent
3177i2parent
4177u20child
5178i3parent
6178u30child
7178u31child
8178u32child
9201i8parent
10202i9parent
11206i7parent
12210i6parent
13210u60child
14178c30child
\n", "
" ], "text/plain": [ " inter_no node_id inter_type\n", "0 175 i0 parent\n", "1 175 u00 child\n", "2 176 i1 parent\n", "3 177 i2 parent\n", "4 177 u20 child\n", "5 178 i3 parent\n", "6 178 u30 child\n", "7 178 u31 child\n", "8 178 u32 child\n", "9 201 i8 parent\n", "10 202 i9 parent\n", "11 206 i7 parent\n", "12 210 i6 parent\n", "13 210 u60 child\n", "14 178 c30 child" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inter_node = pd.read_csv(os.path.join(path_tables_draft, 'inter_node.csv'))\n", "inter_node" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[175, 176, 177, 178, 201, 202, 206, 210]\n", "['i0', 'u00', 'i1', 'i2', 'u20', 'i3', 'u30', 'u31', 'u32', 'i8', 'i9', 'i7', 'i6', 'u60', 'c30']\n", "{'i0': 175, 'u00': 175, 'i1': 176, 'i2': 177, 'u20': 177, 'i3': 178, 'u30': 178, 'u31': 178, 'u32': 178, 'i8': 201, 'i9': 202, 'i7': 206, 'i6': 210, 'u60': 210, 'c30': 178}\n", "{175: ['i0', 'u00'], 176: ['i1'], 177: ['i2', 'u20'], 178: ['i3', 'u30', 'u31', 'u32', 'c30'], 201: ['i8'], 202: ['i9'], 206: ['i7'], 210: ['i6', 'u60']}\n", "{175: 'i0', 176: 'i1', 177: 'i2', 178: 'i3', 201: 'i8', 202: 'i9', 206: 'i7', 210: 'i6'}\n", "{'i0': 'parent', 'u00': 'child', 'i1': 'parent', 'i2': 'parent', 'u20': 'child', 'i3': 'parent', 'u30': 'child', 'u31': 'child', 'u32': 'child', 'i8': 'parent', 'i9': 'parent', 'i7': 'parent', 'i6': 'parent', 'u60': 'child', 'c30': 'child'}\n", "{'u00': 'i0', 'u20': 'i2', 'u30': 'i3', 'u31': 'i3', 'u32': 'i3', 'u60': 'i6', 'c30': 'i3'}\n", "{'i0': ['u00'], 'i2': ['u20'], 'i3': ['u30', 'u31', 'u32', 'c30'], 'i6': ['u60']}\n" ] } ], "source": [ "inter_nos = sorted(inter_node['inter_no'].unique())\n", "node_ids = list(inter_node['node_id'])\n", "node2inter = dict(zip(inter_node['node_id'], inter_node['inter_no']))\n", "inter2nodes = {inter:[key for key, value in node2inter.items() if value == inter] for inter in node2inter.values()}\n", "inter2node = dict(zip(inter_node[inter_node.inter_type=='parent']['inter_no'], inter_node[inter_node.inter_type=='parent']['node_id']))\n", "node2type = dict(zip(inter_node['node_id'], inter_node['inter_type']))\n", "child2parent = dict()\n", "for child_id in list(inter_node[inter_node.inter_type=='child']['node_id'].unique()):\n", " inter_no = inter_node[inter_node.node_id==child_id].iloc[0].inter_no\n", " parent_id = inter_node[inter_node.inter_no==inter_no][inter_node[inter_node.inter_no==inter_no].inter_type=='parent'].iloc[0].node_id\n", " child2parent[child_id] = parent_id\n", "parent2childs = {parent_id:[key for key, value in child2parent.items() if value == parent_id] for parent_id in child2parent.values()}\n", "print(inter_nos)\n", "print(node_ids)\n", "print(node2inter)\n", "print(inter2nodes)\n", "print(inter2node)\n", "print(node2type)\n", "print(child2parent)\n", "print(parent2childs)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nointer_nameinter_latinter_longroup_nomain_phase_no
0175한솔삼거리(한솔마을3거리)37.36857127.1147832
1176느티마을4단지37.36724127.1148032
2177한솔6단지(정자동사무소)37.36619127.1148032
3178신기4거리37.36346127.1148032
4201느티마을4거리37.36854127.1098432
\n", "
" ], "text/plain": [ " inter_no inter_name inter_lat inter_lon group_no main_phase_no\n", "0 175 한솔삼거리(한솔마을3거리) 37.36857 127.11478 3 2\n", "1 176 느티마을4단지 37.36724 127.11480 3 2\n", "2 177 한솔6단지(정자동사무소) 37.36619 127.11480 3 2\n", "3 178 신기4거리 37.36346 127.11480 3 2\n", "4 201 느티마을4거리 37.36854 127.10984 3 2" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inter_info = pd.read_csv(os.path.join(path_tables_draft, 'inter_info.csv'))\n", "inter_info.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{175: '한솔삼거리(한솔마을3거리)', 176: '느티마을4단지', 177: '한솔6단지(정자동사무소)', 178: '신기4거리', 201: '느티마을4거리', 202: '느티마을 안촌유치원', 206: '상록마을 321동', 210: '상록4거리(상록마을입구4거리)'}\n", "{175: (37.36857, 127.11478), 176: (37.36724, 127.1148), 177: (37.36619, 127.1148), 178: (37.36346, 127.1148), 201: (37.36854, 127.10984), 202: (37.36855, 127.11241), 206: (37.36483, 127.10981), 210: (37.36347, 127.10982)}\n", "{175: 2, 176: 2, 177: 2, 178: 2, 201: 2, 202: 2, 206: 2, 210: 2}\n" ] } ], "source": [ "inter2name = dict(zip(inter_info['inter_no'], inter_info['inter_name']))\n", "inter2LL = dict(zip(inter_info['inter_no'], zip(inter_info['inter_lat'], inter_info['inter_lon'])))\n", "inter2mp = dict(zip(inter_info['inter_no'], inter_info['main_phase_no']))\n", "print(inter2name)\n", "print(inter2LL)\n", "print(inter2mp)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CRSRD_IDCRSRD_NMCRSRD_TYPECTRLER_TYPETRFLIG_TYPENODE_IDLTTDLGTDPPC_TYPEMAIN_PHASELOS_YNUSE_YNFRST_REG_DTLAST_MDFCN_DTMAIN_CRSRD_IDGRP_NO
0175한솔삼거리(한솔마을3거리)0-1-1i037.36857127.11478-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i01
1175한솔삼거리(한솔마을3거리)1-1-1u0037.36857127.11478-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i01
2176느티마을4단지0-1-1i137.36724127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i11
3177한솔6단지(정자동사무소)0-1-1i237.36619127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i21
4177한솔6단지(정자동사무소)1-1-1u2037.36619127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i21
5178신기4거리0-1-1i337.36346127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i31
6178신기4거리1-1-1u3037.36346127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i31
7178신기4거리1-1-1u3137.36346127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i31
8178신기4거리1-1-1u3237.36346127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i31
9201느티마을4거리0-1-1i837.36854127.10984-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i81
10202느티마을 안촌유치원0-1-1i937.36855127.11241-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i91
11206상록마을 321동0-1-1i737.36483127.10981-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i71
12210상록4거리(상록마을입구4거리)0-1-1i637.36347127.10982-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i61
13210상록4거리(상록마을입구4거리)1-1-1u6037.36347127.10982-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i61
14178신기4거리1-1-1c3037.36346127.11480-12-1-12024-07-12 16:36:43.7022672024-07-12 16:36:43.702267i31
\n", "
" ], "text/plain": [ " CRSRD_ID CRSRD_NM CRSRD_TYPE CTRLER_TYPE TRFLIG_TYPE NODE_ID \\\n", "0 175 한솔삼거리(한솔마을3거리) 0 -1 -1 i0 \n", "1 175 한솔삼거리(한솔마을3거리) 1 -1 -1 u00 \n", "2 176 느티마을4단지 0 -1 -1 i1 \n", "3 177 한솔6단지(정자동사무소) 0 -1 -1 i2 \n", "4 177 한솔6단지(정자동사무소) 1 -1 -1 u20 \n", "5 178 신기4거리 0 -1 -1 i3 \n", "6 178 신기4거리 1 -1 -1 u30 \n", "7 178 신기4거리 1 -1 -1 u31 \n", "8 178 신기4거리 1 -1 -1 u32 \n", "9 201 느티마을4거리 0 -1 -1 i8 \n", "10 202 느티마을 안촌유치원 0 -1 -1 i9 \n", "11 206 상록마을 321동 0 -1 -1 i7 \n", "12 210 상록4거리(상록마을입구4거리) 0 -1 -1 i6 \n", "13 210 상록4거리(상록마을입구4거리) 1 -1 -1 u60 \n", "14 178 신기4거리 1 -1 -1 c30 \n", "\n", " LTTD LGTD PPC_TYPE MAIN_PHASE LOS_YN USE_YN \\\n", "0 37.36857 127.11478 -1 2 -1 -1 \n", "1 37.36857 127.11478 -1 2 -1 -1 \n", "2 37.36724 127.11480 -1 2 -1 -1 \n", "3 37.36619 127.11480 -1 2 -1 -1 \n", "4 37.36619 127.11480 -1 2 -1 -1 \n", "5 37.36346 127.11480 -1 2 -1 -1 \n", "6 37.36346 127.11480 -1 2 -1 -1 \n", "7 37.36346 127.11480 -1 2 -1 -1 \n", "8 37.36346 127.11480 -1 2 -1 -1 \n", "9 37.36854 127.10984 -1 2 -1 -1 \n", "10 37.36855 127.11241 -1 2 -1 -1 \n", "11 37.36483 127.10981 -1 2 -1 -1 \n", "12 37.36347 127.10982 -1 2 -1 -1 \n", "13 37.36347 127.10982 -1 2 -1 -1 \n", "14 37.36346 127.11480 -1 2 -1 -1 \n", "\n", " FRST_REG_DT LAST_MDFCN_DT MAIN_CRSRD_ID GRP_NO \n", "0 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i0 1 \n", "1 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i0 1 \n", "2 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i1 1 \n", "3 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i2 1 \n", "4 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i2 1 \n", "5 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i3 1 \n", "6 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i3 1 \n", "7 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i3 1 \n", "8 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i3 1 \n", "9 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i8 1 \n", "10 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i9 1 \n", "11 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i7 1 \n", "12 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i6 1 \n", "13 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i6 1 \n", "14 2024-07-12 16:36:43.702267 2024-07-12 16:36:43.702267 i3 1 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TM_FA_CRSRD = []\n", "for node_id in node_ids:\n", " inter_no = node2inter[node_id]\n", " TM_FA_CRSRD.append({\n", " 'CRSRD_ID':inter_no,\n", " 'CRSRD_NM':inter2name[inter_no],\n", " 'CRSRD_TYPE':0 if node2type[node_id]=='parent' else 1,\n", " 'CTRLER_TYPE':-1,\n", " 'TRFLIG_TYPE':-1,\n", " 'NODE_ID':node_id,\n", " 'LTTD':inter2LL[inter_no][0],\n", " 'LGTD':inter2LL[inter_no][1],\n", " 'PPC_TYPE':-1,\n", " 'MAIN_PHASE':inter2mp[inter_no],\n", " 'LOS_YN':-1,\n", " 'USE_YN':-1,\n", " 'FRST_REG_DT':now,\n", " 'LAST_MDFCN_DT':now,\n", " 'MAIN_CRSRD_ID':inter2node[inter_no],\n", " 'GRP_NO':1\n", " })\n", "TM_FA_CRSRD = pd.DataFrame(TM_FA_CRSRD)\n", "TM_FA_CRSRD" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c:\\Github\\snits_siggen\\draft\\data\\tables\\angle_old.csv\n" ] } ], "source": [ "print(os.path.join(path_tables_draft, 'angle_old.csv'))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CRSRD_IDPHASERINGFLOW_NOSTOS_NOSIGL_ANGLE
01751A-10179004
11751B-10003176
21752A-10001095
31752B-10179271
41753A-10092270
.....................
1232106B-10NaN
1242107A-10NaN
1252107B-10NaN
1262108A-10NaN
1272108B-10NaN
\n", "

128 rows × 6 columns

\n", "
" ], "text/plain": [ " CRSRD_ID PHASE RING FLOW_NO STOS_NO SIGL_ANGLE\n", "0 175 1 A -1 0 179004\n", "1 175 1 B -1 0 003176\n", "2 175 2 A -1 0 001095\n", "3 175 2 B -1 0 179271\n", "4 175 3 A -1 0 092270\n", ".. ... ... ... ... ... ...\n", "123 210 6 B -1 0 NaN\n", "124 210 7 A -1 0 NaN\n", "125 210 7 B -1 0 NaN\n", "126 210 8 A -1 0 NaN\n", "127 210 8 B -1 0 NaN\n", "\n", "[128 rows x 6 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "angle = pd.read_csv(os.path.join(path_tables_draft, 'angle_old.csv'), dtype={f'angle_{alph}{i}':str for alph in alphs for i in range(1,9)}, index_col=0)\n", "\n", "TN_IF_SIGL_FLOW = []\n", "for row in angle.itertuples():\n", " inter_no = row.inter_no\n", " for i in range(1,9):\n", " for alph in alphs:\n", " TN_IF_SIGL_FLOW.append({\n", " 'CRSRD_ID':inter_no,\n", " 'PHASE':i,\n", " 'RING':alph,\n", " 'FLOW_NO':-1,\n", " 'STOS_NO':0,\n", " 'SIGL_ANGLE':getattr(row, f'angle_{alph}{i}')\n", " })\n", "TN_IF_SIGL_FLOW = pd.DataFrame(TN_IF_SIGL_FLOW)\n", "TN_IF_SIGL_FLOW" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "TC_IF_TOD_DAY_PLAN.to_csv(os.path.join(path_tables, 'TC_IF_TOD_DAY_PLAN.csv'), index=0)\n", "TC_IF_TOD_HOLIDAY_PLAN.to_csv(os.path.join(path_tables, 'TC_IF_TOD_HOLIDAY_PLAN.csv'), index=0)\n", "TC_IF_TOD_RED_YELLO.to_csv(os.path.join(path_tables, 'TC_IF_TOD_RED_YELLO.csv'), index=0)\n", "TC_IF_TOD_WEEK_PLAN.to_csv(os.path.join(path_tables, 'TC_IF_TOD_WEEK_PLAN.csv'), index=0)\n", "TL_IF_SIGL_CYCL.to_csv(os.path.join(path_tables, 'TL_IF_SIGL_CYCL.csv'), index=0)\n", "TM_FA_CRSRD.to_csv(os.path.join(path_tables, 'TM_FA_CRSRD.csv'), index=0)\n", "TN_IF_SIGL_FLOW.to_csv(os.path.join(path_tables, 'TN_IF_SIGL_FLOW.csv'), index=0)" ] } ], "metadata": { "kernelspec": { "display_name": "siggen", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }