{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "import sumolib\n", "import copy\n", "from tqdm import tqdm\n", "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-01-05 08:25:00\n", "2024-01-05 08:30:00\n", "2024-01-05 08:35:00\n", "2024-01-05 08:45:00\n" ] } ], "source": [ "midnight = int(datetime(2024, 1, 5, 0, 0, 0).timestamp())\n", "next_day = int(datetime(2024, 1, 6, 0, 0, 0).timestamp())\n", "fmins = range(midnight, next_day, 300)\n", "m = 105 # m ranges from 26 to 287\n", "# sigtable 시작시각 : 현재시각 - 1200 = 08:25\n", "# 시뮬레이션 시작시각 : 현재시각 - 900 = 08:30\n", "# 시뮬레이션 종료시각 : 현재시각 - 600 = 08:35\n", "# 현재시각 : 08:45\n", "present_time = fmins[m]\n", "sigtable_start = fmins[m] - 1200\n", "sim_start = fmins[m] - 900\n", "sim_end = fmins[m] - 600\n", "print(datetime.fromtimestamp(sigtable_start))\n", "print(datetime.fromtimestamp(sim_start))\n", "print(datetime.fromtimestamp(sim_end))\n", "print(datetime.fromtimestamp(present_time))\n", "net = sumolib.net.readNet('../../Data/networks/sn.net.xml')\n", "inter_node = pd.read_csv('../../data/tables/inter_node.csv', index_col=0)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n" ] } ], "source": [ "histid = pd.read_csv(f'../../Data/tables/histids/histids_{fmins[50]}.csv', index_col=0)\n", "print(sorted(histid.node_id.unique()))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{175: 'u00', 176: 'i1', 177: 'u20', 178: 'c30', 210: 'u60', 206: 'i7', 201: 'i8', 202: 'i9'}\n", "{'i0': 175, 'u00': 175, 'i1': 176, 'i2': 177, 'u20': 177, 'i3': 178, 'u30': 178, 'u31': 178, 'u32': 178, 'c30': 178, 'i6': 210, 'u60': 210, 'i7': 206, 'i8': 201, 'i9': 202}\n", "{'u00': 'i0', 'u20': 'i2', 'u30': 'i3', 'u31': 'i3', 'u32': 'i3', 'c30': 'i3'}\n", "{'i0': ['u00'], 'i1': [], 'i2': ['u20'], 'i3': ['c30', 'u30', 'u31', 'u32'], 'i6': [], 'i7': [], 'i8': [], 'i9': []}\n", "['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n", "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n", "['c30', 'u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n" ] } ], "source": [ "inter2node = dict(zip(inter_node['inter_no'], inter_node['node_id']))\n", "node2inter = dict(zip(inter_node['node_id'], inter_node['inter_no']))\n", "ch2pa = {'u00': 'i0', 'u20': 'i2', 'u30': 'i3', 'u31': 'i3', 'u32': 'i3', 'c30': 'i3'}\n", "pa2ch = {'i0':['u00'], 'i1':[], 'i2':['u20'], 'i3':['c30', 'u30', 'u31', 'u32'], 'i6':[], 'i7':[], 'i8':[], 'i9':[]}\n", "node_ids = sorted(inter_node.node_id.unique())\n", "parent_ids = sorted(inter_node[inter_node.inter_type=='parent'].node_id.unique())\n", "child_ids = sorted(inter_node[inter_node.inter_type=='child'].node_id.unique())\n", "\n", "print(inter2node)\n", "print(node2inter)\n", "print(ch2pa)\n", "print(pa2ch)\n", "print(node_ids)\n", "print(parent_ids)\n", "print(child_ids)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1704411900 2024-01-05 08:45:00\n" ] }, { "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", "
node_idstart_unixphas_Aphas_Bdurationinc_edge_Aout_edge_Ainc_edge_Bout_edge_B
0i217044107391140-571542809_01571542811_01571542811_02571542809_01
1i217044107392225571542811_02571542107_01-571542809_01571542809_01
2i217044107393371NaNNaNNaNNaN
3i217044107394434-571542809_01571542811_01571542107_02571542809_01
4i617044107601124-571542115_01571500535_01NaNNaN
..............................
163i017044116303426571545870_02571510153_01571510153_02571545870_01
164i017044116304433571510153_02571500487_01571510153_02571545870_01
165i117044116701137-571542810_01-571542797_02.99571542797_02.99571542810_01
166i117044116702293-571542810_01-571542797_02.99-571542810_01571543469_01
167i117044116703340571543469_02-571542797_02.99NaNNaN
\n", "

168 rows × 9 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 i2 1704410739 1 1 40 -571542809_01 \n", "1 i2 1704410739 2 2 25 571542811_02 \n", "2 i2 1704410739 3 3 71 NaN \n", "3 i2 1704410739 4 4 34 -571542809_01 \n", "4 i6 1704410760 1 1 24 -571542115_01 \n", ".. ... ... ... ... ... ... \n", "163 i0 1704411630 3 4 26 571545870_02 \n", "164 i0 1704411630 4 4 33 571510153_02 \n", "165 i1 1704411670 1 1 37 -571542810_01 \n", "166 i1 1704411670 2 2 93 -571542810_01 \n", "167 i1 1704411670 3 3 40 571543469_02 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "0 571542811_01 571542811_02 571542809_01 \n", "1 571542107_01 -571542809_01 571542809_01 \n", "2 NaN NaN NaN \n", "3 571542811_01 571542107_02 571542809_01 \n", "4 571500535_01 NaN NaN \n", ".. ... ... ... \n", "163 571510153_01 571510153_02 571545870_01 \n", "164 571500487_01 571510153_02 571545870_01 \n", "165 -571542797_02.99 571542797_02.99 571542810_01 \n", "166 -571542797_02.99 -571542810_01 571543469_01 \n", "167 -571542797_02.99 NaN NaN \n", "\n", "[168 rows x 9 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "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", "
node_idphase_noring_typeinc_edgeout_edge
0i01A-571542797_02571500487_01
1i01B-571500487_01571542797_02
2i02A-571500487_01571545870_01
3i02B-571542797_02571510153_01
4i03A571545870_02571510153_01
..................
111u602BNaNNaN
112u603ANaNNaN
113u603BNaNNaN
114u604ANaNNaN
115u604BNaNNaN
\n", "

116 rows × 5 columns

\n", "
" ], "text/plain": [ " node_id phase_no ring_type inc_edge out_edge\n", "0 i0 1 A -571542797_02 571500487_01\n", "1 i0 1 B -571500487_01 571542797_02\n", "2 i0 2 A -571500487_01 571545870_01\n", "3 i0 2 B -571542797_02 571510153_01\n", "4 i0 3 A 571545870_02 571510153_01\n", ".. ... ... ... ... ...\n", "111 u60 2 B NaN NaN\n", "112 u60 3 A NaN NaN\n", "113 u60 3 B NaN NaN\n", "114 u60 4 A NaN NaN\n", "115 u60 4 B NaN NaN\n", "\n", "[116 rows x 5 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(fmins[m], datetime.fromtimestamp(fmins[m]))\n", "histid = pd.read_csv(f'../../Data/tables/histids/histids_{fmins[m]}.csv', index_col=0)\n", "match6 = pd.read_csv('../../Data/tables/matching/match6.csv', index_col=0)\n", "histid = histid.reset_index(drop=True)\n", "histid = histid.drop(columns=['inter_no'])\n", "match6 = match6[['node_id', 'phase_no', 'ring_type', 'inc_edge', 'out_edge']].reset_index(drop=True)\n", "display(histid)\n", "display(match6)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['i0', 'i1', 'i2', 'i3', 'i6', 'i8', 'i9']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted(histid.node_id.unique())" ] }, { "cell_type": "code", "execution_count": 7, "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", "
node_idstart_unixphas_Aphas_Bdurationinc_edge_Aout_edge_Ainc_edge_Bout_edge_B
0i217044107391140-571542809_01571542811_01571542811_02571542809_01
1i217044107392225571542811_02571542107_01-571542809_01571542809_01
2i217044107393371NaNNaNNaNNaN
3i217044107394434-571542809_01571542811_01571542107_02571542809_01
4u2017044107391140NaNNaNNaNNaN
..............................
313u0017044116303426NaNNaNNaNNaN
314u0017044116304433NaNNaNNaNNaN
315i117044116701137-571542810_01-571542797_02.99571542797_02.99571542810_01
316i117044116702293-571542810_01-571542797_02.99-571542810_01571543469_01
317i117044116703340571543469_02-571542797_02.99NaNNaN
\n", "

318 rows × 9 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 i2 1704410739 1 1 40 -571542809_01 \n", "1 i2 1704410739 2 2 25 571542811_02 \n", "2 i2 1704410739 3 3 71 NaN \n", "3 i2 1704410739 4 4 34 -571542809_01 \n", "4 u20 1704410739 1 1 40 NaN \n", ".. ... ... ... ... ... ... \n", "313 u00 1704411630 3 4 26 NaN \n", "314 u00 1704411630 4 4 33 NaN \n", "315 i1 1704411670 1 1 37 -571542810_01 \n", "316 i1 1704411670 2 2 93 -571542810_01 \n", "317 i1 1704411670 3 3 40 571543469_02 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "0 571542811_01 571542811_02 571542809_01 \n", "1 571542107_01 -571542809_01 571542809_01 \n", "2 NaN NaN NaN \n", "3 571542811_01 571542107_02 571542809_01 \n", "4 NaN NaN NaN \n", ".. ... ... ... \n", "313 NaN NaN NaN \n", "314 NaN NaN NaN \n", "315 -571542797_02.99 571542797_02.99 571542810_01 \n", "316 -571542797_02.99 -571542810_01 571543469_01 \n", "317 -571542797_02.99 NaN NaN \n", "\n", "[318 rows x 9 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "new_histids = []\n", "for parent_id in parent_ids:\n", " for child_id in pa2ch[parent_id]:\n", " new_histid = histid.copy()[histid.node_id==parent_id]\n", " new_histid[['inc_edge_A', 'out_edge_A', 'inc_edge_B', 'out_edge_B']] = np.nan\n", " for i, row in new_histid.iterrows():\n", " phas_A = row.phas_A\n", " phas_B = row.phas_B\n", " new_match = match6[match6.node_id==child_id]\n", " Arow = new_match[(new_match.phase_no==phas_A) & (new_match.ring_type=='A')]\n", " if ~ Arow[['inc_edge', 'out_edge']].isna().all().all():\n", " inc_edge = Arow.iloc[0].inc_edge\n", " out_edge = Arow.iloc[0].out_edge\n", " new_histid.loc[i, ['inc_edge_A', 'out_edge_A']] = [inc_edge, out_edge]\n", " Brow = new_match[(new_match.phase_no==phas_B) & (new_match.ring_type=='B')]\n", " if ~ Brow[['inc_edge', 'out_edge']].isna().all().all():\n", " inc_edge = Brow.iloc[0].inc_edge\n", " out_edge = Brow.iloc[0].out_edge\n", " new_histid.loc[i, ['inc_edge_B', 'out_edge_B']] = [inc_edge, out_edge]\n", " new_histid.loc[i, 'node_id'] = child_id\n", " new_histids.append(new_histid)\n", "histid_child = pd.concat(new_histids)\n", "histids = pd.concat([histid.copy(), histid_child])\n", "histids = histids.sort_values(by=['start_unix', 'node_id', 'phas_A', 'phas_B']).reset_index(drop=True)\n", "display(histids)" ] }, { "cell_type": "code", "execution_count": 143, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node_idstart_unixphas_Aphas_Bdurationinc_edge_Aout_edge_Ainc_edge_Bout_edge_B
18u0017044107801140NaNNaNNaNNaN
19u0017044107802242571500487_02571500487_01.32NaNNaN
20u0017044107803329NaNNaNNaNNaN
21u0017044107803426NaNNaNNaNNaN
22u0017044107804433NaNNaNNaNNaN
79u0017044109501140NaNNaNNaNNaN
80u0017044109502242571500487_02571500487_01.32NaNNaN
81u0017044109503329NaNNaNNaNNaN
82u0017044109503426NaNNaNNaNNaN
83u0017044109504433NaNNaNNaNNaN
146u0017044111201140NaNNaNNaNNaN
147u0017044111202242571500487_02571500487_01.32NaNNaN
148u0017044111203329NaNNaNNaNNaN
149u0017044111203426NaNNaNNaNNaN
150u0017044111204433NaNNaNNaNNaN
199u0017044112901140NaNNaNNaNNaN
200u0017044112902242571500487_02571500487_01.32NaNNaN
201u0017044112903329NaNNaNNaNNaN
202u0017044112903426NaNNaNNaNNaN
203u0017044112904433NaNNaNNaNNaN
257u0017044114601140NaNNaNNaNNaN
258u0017044114602242571500487_02571500487_01.32NaNNaN
259u0017044114603329NaNNaNNaNNaN
260u0017044114603426NaNNaNNaNNaN
261u0017044114604433NaNNaNNaNNaN
310u0017044116301140NaNNaNNaNNaN
311u0017044116302242571500487_02571500487_01.32NaNNaN
312u0017044116303329NaNNaNNaNNaN
313u0017044116303426NaNNaNNaNNaN
314u0017044116304433NaNNaNNaNNaN
\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "18 u00 1704410780 1 1 40 NaN \n", "19 u00 1704410780 2 2 42 571500487_02 \n", "20 u00 1704410780 3 3 29 NaN \n", "21 u00 1704410780 3 4 26 NaN \n", "22 u00 1704410780 4 4 33 NaN \n", "79 u00 1704410950 1 1 40 NaN \n", "80 u00 1704410950 2 2 42 571500487_02 \n", "81 u00 1704410950 3 3 29 NaN \n", "82 u00 1704410950 3 4 26 NaN \n", "83 u00 1704410950 4 4 33 NaN \n", "146 u00 1704411120 1 1 40 NaN \n", "147 u00 1704411120 2 2 42 571500487_02 \n", "148 u00 1704411120 3 3 29 NaN \n", "149 u00 1704411120 3 4 26 NaN \n", "150 u00 1704411120 4 4 33 NaN \n", "199 u00 1704411290 1 1 40 NaN \n", "200 u00 1704411290 2 2 42 571500487_02 \n", "201 u00 1704411290 3 3 29 NaN \n", "202 u00 1704411290 3 4 26 NaN \n", "203 u00 1704411290 4 4 33 NaN \n", "257 u00 1704411460 1 1 40 NaN \n", "258 u00 1704411460 2 2 42 571500487_02 \n", "259 u00 1704411460 3 3 29 NaN \n", "260 u00 1704411460 3 4 26 NaN \n", "261 u00 1704411460 4 4 33 NaN \n", "310 u00 1704411630 1 1 40 NaN \n", "311 u00 1704411630 2 2 42 571500487_02 \n", "312 u00 1704411630 3 3 29 NaN \n", "313 u00 1704411630 3 4 26 NaN \n", "314 u00 1704411630 4 4 33 NaN \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "18 NaN NaN NaN \n", "19 571500487_01.32 NaN NaN \n", "20 NaN NaN NaN \n", "21 NaN NaN NaN \n", "22 NaN NaN NaN \n", "79 NaN NaN NaN \n", "80 571500487_01.32 NaN NaN \n", "81 NaN NaN NaN \n", "82 NaN NaN NaN \n", "83 NaN NaN NaN \n", "146 NaN NaN NaN \n", "147 571500487_01.32 NaN NaN \n", "148 NaN NaN NaN \n", "149 NaN NaN NaN \n", "150 NaN NaN NaN \n", "199 NaN NaN NaN \n", "200 571500487_01.32 NaN NaN \n", "201 NaN NaN NaN \n", "202 NaN NaN NaN \n", "203 NaN NaN NaN \n", "257 NaN NaN NaN \n", "258 571500487_01.32 NaN NaN \n", "259 NaN NaN NaN \n", "260 NaN NaN NaN \n", "261 NaN NaN NaN \n", "310 NaN NaN NaN \n", "311 571500487_01.32 NaN NaN \n", "312 NaN NaN NaN \n", "313 NaN NaN NaN \n", "314 NaN NaN NaN " ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "histids[histids.node_id=='u00']" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31', 'u32']\n", "[, , , , , , , , , , , , ]\n" ] } ], "source": [ "node_ids = sorted(histids.node_id.unique())\n", "nodes = [net.getNode(node_id) for node_id in node_ids]\n", "print(node_ids)\n", "print(nodes)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c30 rrrrrr\n", "i0 grrrgrrrgrrrrrgrr\n", "i1 grrrrrrgrr\n", "i2 rrggrrr\n", "i3 grrrrgrrrrgrrrrgrrrr\n", "i6 grrrgrrrrgrrgrrr\n", "i8 grrrrrrrgrrrgrrr\n", "i9 rrrr\n", "u00 ggggrgggg\n", "u20 ggrggg\n", "u30 ggggrggg\n", "u31 ggggrggg\n", "u32 gggggggr\n" ] } ], "source": [ "node2init = {}\n", "for node in nodes:\n", " node_id = node.getID()\n", " conns = [(c.getJunctionIndex(), c) for c in node.getConnections()]\n", " conns = [c for c in conns if c[0] >= 0]\n", " conns = sorted(conns, key=lambda x: x[0])\n", " state = []\n", " for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " for j, cj in conns:\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", " node2init[node_id] = state\n", "\n", "# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n", "for _, row in histids.iterrows():\n", " node_id = row['node_id']\n", " inc_edge_A = row.inc_edge_A\n", " inc_edge_B = row.inc_edge_B\n", " out_edge_A = row.out_edge_A\n", " out_edge_B = row.out_edge_B\n", "\n", " if pd.isna(inc_edge_A) or pd.isna(out_edge_A):\n", " pass\n", " else:\n", " inc_edge_A = net.getEdge(inc_edge_A)\n", " out_edge_A = net.getEdge(out_edge_A)\n", " for conn in inc_edge_A.getConnections(out_edge_A):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " node2init[node_id][index] = 'r'\n", "\n", " if pd.isna(inc_edge_B) or pd.isna(out_edge_B):\n", " pass\n", " else:\n", " inc_edge_B = net.getEdge(inc_edge_B)\n", " out_edge_B = net.getEdge(out_edge_B)\n", " for conn in inc_edge_B.getConnections(out_edge_B):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " node2init[node_id][index] = 'r'\n", "for node_id in node_ids:\n", " print(node_id, \"\".join(node2init[node_id]))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1704411900\n", "2024-01-05 08:45:00\n" ] }, { "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", "
node_idstart_unixphase_sumodurationstatestart_dt
0i21704410739040GGggGGG2024-01-05 08:25:39
1i21704410739125rrggrrr2024-01-05 08:25:39
2i21704410739271rrggrrr2024-01-05 08:25:39
3i21704410739334rrggGGG2024-01-05 08:25:39
4u201704410739040ggrggg2024-01-05 08:25:39
.....................
313u001704411630326ggggrgggg2024-01-05 08:40:30
314u001704411630433ggggrgggg2024-01-05 08:40:30
315i11704411670037gGGGGGrgrr2024-01-05 08:41:10
316i11704411670193grrGGGGgrr2024-01-05 08:41:10
317i11704411670240grrrrrrgGG2024-01-05 08:41:10
\n", "

318 rows × 6 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state start_dt\n", "0 i2 1704410739 0 40 GGggGGG 2024-01-05 08:25:39\n", "1 i2 1704410739 1 25 rrggrrr 2024-01-05 08:25:39\n", "2 i2 1704410739 2 71 rrggrrr 2024-01-05 08:25:39\n", "3 i2 1704410739 3 34 rrggGGG 2024-01-05 08:25:39\n", "4 u20 1704410739 0 40 ggrggg 2024-01-05 08:25:39\n", ".. ... ... ... ... ... ...\n", "313 u00 1704411630 3 26 ggggrgggg 2024-01-05 08:40:30\n", "314 u00 1704411630 4 33 ggggrgggg 2024-01-05 08:40:30\n", "315 i1 1704411670 0 37 gGGGGGrgrr 2024-01-05 08:41:10\n", "316 i1 1704411670 1 93 grrGGGGgrr 2024-01-05 08:41:10\n", "317 i1 1704411670 2 40 grrrrrrgGG 2024-01-05 08:41:10\n", "\n", "[318 rows x 6 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(present_time)\n", "print(datetime.fromtimestamp(present_time))\n", "sigtable = histids.copy()\n", "sigtable['init_state'] = sigtable['node_id'].map(node2init)\n", "sigtable['state'] = sigtable['init_state'].map(lambda x:''.join(x))\n", "for i, row in sigtable.iterrows():\n", " node_id = row.node_id\n", " inc_edge_A = row.inc_edge_A\n", " inc_edge_B = row.inc_edge_B\n", " out_edge_A = row.out_edge_A\n", " out_edge_B = row.out_edge_B\n", " state = copy.deepcopy(node2init)[node_id]\n", "\n", " if pd.isna(inc_edge_A) or pd.isna(out_edge_A):\n", " continue\n", " else:\n", " inc_edge_A = net.getEdge(inc_edge_A)\n", " out_edge_A = net.getEdge(out_edge_A)\n", " for conn in inc_edge_A.getConnections(out_edge_A):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " sigtable.at[i, 'state'] = ''.join(state)\n", "\n", " if pd.isna(inc_edge_B) or pd.isna(out_edge_B):\n", " continue\n", " else:\n", " inc_edge_B = net.getEdge(inc_edge_B)\n", " out_edge_B = net.getEdge(out_edge_B)\n", " for conn in inc_edge_B.getConnections(out_edge_B):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " sigtable.at[i, 'state'] = ''.join(state)\n", "sigtable = sigtable.dropna(subset='state')\n", "sigtable = sigtable.reset_index(drop=True)\n", "sigtable['phase_sumo'] = sigtable.groupby(['node_id', 'start_unix']).cumcount()\n", "sigtable = sigtable[sigtable.start_unix >= sigtable_start]\n", "sigtable = sigtable[['node_id', 'start_unix', 'phase_sumo', 'duration', 'state']]\n", "sigtable = sigtable.sort_values(by=['start_unix', 'node_id'])\n", "sigtable['start_dt'] = sigtable['start_unix'].apply(lambda x:datetime.fromtimestamp(x))\n", "display(sigtable)" ] }, { "cell_type": "code", "execution_count": 134, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
node_idstart_unixphase_sumodurationstatestart_dt
0c3017044107900_g33rrrrrr2024-01-05 08:26:30
1c3017044107900_y4rrrrrr2024-01-05 08:26:30
2c3017044107901__r1rrrrrr2024-01-05 08:26:30
3c3017044107901_g34GGGGGG2024-01-05 08:26:30
4c3017044107901_y4GGGGGG2024-01-05 08:26:30
5c3017044107902__r1GGGGGG2024-01-05 08:26:30
6c3017044107902_g37GGGGGG2024-01-05 08:26:30
7c3017044107902_y4GGGGGG2024-01-05 08:26:30
8c3017044107903__r1GGGGGG2024-01-05 08:26:30
9c3017044107903_g16GGGGGG2024-01-05 08:26:30
10c3017044107903_y4yyyyyy2024-01-05 08:26:30
11c3017044109500__r1rrrrrr2024-01-05 08:29:10
12c3017044109500_g33rrrrrr2024-01-05 08:29:10
13c3017044109500_y4rrrrrr2024-01-05 08:29:10
14c3017044109501__r1rrrrrr2024-01-05 08:29:10
15c3017044109501_g34GGGGGG2024-01-05 08:29:10
16c3017044109501_y4GGGGGG2024-01-05 08:29:10
17c3017044109502__r1GGGGGG2024-01-05 08:29:10
18c3017044109502_g37GGGGGG2024-01-05 08:29:10
19c3017044109502_y4GGGGGG2024-01-05 08:29:10
20c3017044109503__r1GGGGGG2024-01-05 08:29:10
21c3017044109503_g16GGGGGG2024-01-05 08:29:10
22c3017044109503_y4yyyyyy2024-01-05 08:29:10
23c3017044111100__r1rrrrrr2024-01-05 08:31:50
24c3017044111100_g33rrrrrr2024-01-05 08:31:50
25c3017044111100_y4rrrrrr2024-01-05 08:31:50
26c3017044111101__r1rrrrrr2024-01-05 08:31:50
27c3017044111101_g34GGGGGG2024-01-05 08:31:50
28c3017044111101_y4GGGGGG2024-01-05 08:31:50
29c3017044111102__r1GGGGGG2024-01-05 08:31:50
30c3017044111102_g37GGGGGG2024-01-05 08:31:50
31c3017044111102_y4GGGGGG2024-01-05 08:31:50
32c3017044111103__r1GGGGGG2024-01-05 08:31:50
33c3017044111103_g16GGGGGG2024-01-05 08:31:50
34c3017044111103_y4yyyyyy2024-01-05 08:31:50
35c3017044112700__r1rrrrrr2024-01-05 08:34:30
36c3017044112700_g33rrrrrr2024-01-05 08:34:30
37c3017044112700_y4rrrrrr2024-01-05 08:34:30
38c3017044112701__r1rrrrrr2024-01-05 08:34:30
39c3017044112701_g34GGGGGG2024-01-05 08:34:30
40c3017044112701_y4GGGGGG2024-01-05 08:34:30
41c3017044112702__r1GGGGGG2024-01-05 08:34:30
42c3017044112702_g37GGGGGG2024-01-05 08:34:30
43c3017044112702_y4GGGGGG2024-01-05 08:34:30
44c3017044112703__r1GGGGGG2024-01-05 08:34:30
45c3017044112703_g16GGGGGG2024-01-05 08:34:30
46c3017044112703_y4yyyyyy2024-01-05 08:34:30
47c3017044114300__r1rrrrrr2024-01-05 08:37:10
48c3017044114300_g33rrrrrr2024-01-05 08:37:10
49c3017044114300_y4rrrrrr2024-01-05 08:37:10
50c3017044114301__r1rrrrrr2024-01-05 08:37:10
51c3017044114301_g34GGGGGG2024-01-05 08:37:10
52c3017044114301_y4GGGGGG2024-01-05 08:37:10
53c3017044114302__r1GGGGGG2024-01-05 08:37:10
54c3017044114302_g37GGGGGG2024-01-05 08:37:10
55c3017044114302_y4GGGGGG2024-01-05 08:37:10
56c3017044114303__r1GGGGGG2024-01-05 08:37:10
57c3017044114303_g16GGGGGG2024-01-05 08:37:10
58c3017044114303_y4yyyyyy2024-01-05 08:37:10
59c3017044115900__r1rrrrrr2024-01-05 08:39:50
\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state start_dt\n", "0 c30 1704410790 0_g 33 rrrrrr 2024-01-05 08:26:30\n", "1 c30 1704410790 0_y 4 rrrrrr 2024-01-05 08:26:30\n", "2 c30 1704410790 1__r 1 rrrrrr 2024-01-05 08:26:30\n", "3 c30 1704410790 1_g 34 GGGGGG 2024-01-05 08:26:30\n", "4 c30 1704410790 1_y 4 GGGGGG 2024-01-05 08:26:30\n", "5 c30 1704410790 2__r 1 GGGGGG 2024-01-05 08:26:30\n", "6 c30 1704410790 2_g 37 GGGGGG 2024-01-05 08:26:30\n", "7 c30 1704410790 2_y 4 GGGGGG 2024-01-05 08:26:30\n", "8 c30 1704410790 3__r 1 GGGGGG 2024-01-05 08:26:30\n", "9 c30 1704410790 3_g 16 GGGGGG 2024-01-05 08:26:30\n", "10 c30 1704410790 3_y 4 yyyyyy 2024-01-05 08:26:30\n", "11 c30 1704410950 0__r 1 rrrrrr 2024-01-05 08:29:10\n", "12 c30 1704410950 0_g 33 rrrrrr 2024-01-05 08:29:10\n", "13 c30 1704410950 0_y 4 rrrrrr 2024-01-05 08:29:10\n", "14 c30 1704410950 1__r 1 rrrrrr 2024-01-05 08:29:10\n", "15 c30 1704410950 1_g 34 GGGGGG 2024-01-05 08:29:10\n", "16 c30 1704410950 1_y 4 GGGGGG 2024-01-05 08:29:10\n", "17 c30 1704410950 2__r 1 GGGGGG 2024-01-05 08:29:10\n", "18 c30 1704410950 2_g 37 GGGGGG 2024-01-05 08:29:10\n", "19 c30 1704410950 2_y 4 GGGGGG 2024-01-05 08:29:10\n", "20 c30 1704410950 3__r 1 GGGGGG 2024-01-05 08:29:10\n", "21 c30 1704410950 3_g 16 GGGGGG 2024-01-05 08:29:10\n", "22 c30 1704410950 3_y 4 yyyyyy 2024-01-05 08:29:10\n", "23 c30 1704411110 0__r 1 rrrrrr 2024-01-05 08:31:50\n", "24 c30 1704411110 0_g 33 rrrrrr 2024-01-05 08:31:50\n", "25 c30 1704411110 0_y 4 rrrrrr 2024-01-05 08:31:50\n", "26 c30 1704411110 1__r 1 rrrrrr 2024-01-05 08:31:50\n", "27 c30 1704411110 1_g 34 GGGGGG 2024-01-05 08:31:50\n", "28 c30 1704411110 1_y 4 GGGGGG 2024-01-05 08:31:50\n", "29 c30 1704411110 2__r 1 GGGGGG 2024-01-05 08:31:50\n", "30 c30 1704411110 2_g 37 GGGGGG 2024-01-05 08:31:50\n", "31 c30 1704411110 2_y 4 GGGGGG 2024-01-05 08:31:50\n", "32 c30 1704411110 3__r 1 GGGGGG 2024-01-05 08:31:50\n", "33 c30 1704411110 3_g 16 GGGGGG 2024-01-05 08:31:50\n", "34 c30 1704411110 3_y 4 yyyyyy 2024-01-05 08:31:50\n", "35 c30 1704411270 0__r 1 rrrrrr 2024-01-05 08:34:30\n", "36 c30 1704411270 0_g 33 rrrrrr 2024-01-05 08:34:30\n", "37 c30 1704411270 0_y 4 rrrrrr 2024-01-05 08:34:30\n", "38 c30 1704411270 1__r 1 rrrrrr 2024-01-05 08:34:30\n", "39 c30 1704411270 1_g 34 GGGGGG 2024-01-05 08:34:30\n", "40 c30 1704411270 1_y 4 GGGGGG 2024-01-05 08:34:30\n", "41 c30 1704411270 2__r 1 GGGGGG 2024-01-05 08:34:30\n", "42 c30 1704411270 2_g 37 GGGGGG 2024-01-05 08:34:30\n", "43 c30 1704411270 2_y 4 GGGGGG 2024-01-05 08:34:30\n", "44 c30 1704411270 3__r 1 GGGGGG 2024-01-05 08:34:30\n", "45 c30 1704411270 3_g 16 GGGGGG 2024-01-05 08:34:30\n", "46 c30 1704411270 3_y 4 yyyyyy 2024-01-05 08:34:30\n", "47 c30 1704411430 0__r 1 rrrrrr 2024-01-05 08:37:10\n", "48 c30 1704411430 0_g 33 rrrrrr 2024-01-05 08:37:10\n", "49 c30 1704411430 0_y 4 rrrrrr 2024-01-05 08:37:10\n", "50 c30 1704411430 1__r 1 rrrrrr 2024-01-05 08:37:10\n", "51 c30 1704411430 1_g 34 GGGGGG 2024-01-05 08:37:10\n", "52 c30 1704411430 1_y 4 GGGGGG 2024-01-05 08:37:10\n", "53 c30 1704411430 2__r 1 GGGGGG 2024-01-05 08:37:10\n", "54 c30 1704411430 2_g 37 GGGGGG 2024-01-05 08:37:10\n", "55 c30 1704411430 2_y 4 GGGGGG 2024-01-05 08:37:10\n", "56 c30 1704411430 3__r 1 GGGGGG 2024-01-05 08:37:10\n", "57 c30 1704411430 3_g 16 GGGGGG 2024-01-05 08:37:10\n", "58 c30 1704411430 3_y 4 yyyyyy 2024-01-05 08:37:10\n", "59 c30 1704411590 0__r 1 rrrrrr 2024-01-05 08:39:50" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sigtable = []\n", "for node_id, group in sigtable.groupby('node_id'):\n", " new_rows_list = []\n", " for i in range(1, len(group)):\n", " prev_row = group.iloc[i-1:i].copy()\n", " next_row = group.iloc[i:i+1].copy()\n", " new_rows = pd.concat([prev_row, prev_row, next_row]).reset_index(drop=True)\n", " new_rows.loc[0, 'phase_sumo'] = str(prev_row.phase_sumo.iloc[0]) + '_g'\n", " new_rows.loc[0, 'duration'] = new_rows.loc[0, 'duration'] - 5\n", " new_rows.loc[1, 'phase_sumo'] = str(prev_row.phase_sumo.iloc[0]) + '_y'\n", " new_rows.loc[1, 'duration'] = 4\n", " yellow_state = ''\n", " red_state = ''\n", " for a, b in zip(prev_row.state.iloc[0], next_row.state.iloc[0]):\n", " if a == 'G' and b == 'r':\n", " yellow_state += 'y'\n", " red_state += 'r'\n", " else:\n", " yellow_state += a\n", " red_state += a\n", " new_rows.loc[2, 'phase_sumo'] = str(next_row.phase_sumo.iloc[0]) + '__r'\n", " new_rows.loc[2, 'duration'] = 1\n", " new_rows.loc[1, 'state'] = yellow_state\n", " new_rows.loc[2, 'state'] = red_state\n", " new_rows_list.append(new_rows)\n", " next_row['phase_sumo'] = str(next_row.phase_sumo.iloc[0]) + '_g'\n", " next_row['duration'] -= 5\n", " # next_row.loc['duration'] -= 5\n", " new_rows_list.append(next_row)\n", " new_rows = pd.concat(new_rows_list)\n", " Sigtable.append(new_rows)\n", "Sigtable = pd.concat(Sigtable).sort_values(by=['node_id', 'start_unix', 'phase_sumo']).reset_index(drop=True)\n", "Sigtable[:60]" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-01-05 08:25:00\n", "2024-01-05 08:30:00\n", "2024-01-05 08:35:00\n", "2024-01-05 08:45:00\n" ] } ], "source": [ "# sigtable 시작시각 : 현재시각 - 1200 = 08:25\n", "# 시뮬레이션 시작시각 : 현재시각 - 900 = 08:30\n", "# 시뮬레이션 종료시각 : 현재시각 - 600 = 08:35\n", "# 현재시각 : 08:45\n", "print(datetime.fromtimestamp(sigtable_start))\n", "print(datetime.fromtimestamp(sim_start))\n", "print(datetime.fromtimestamp(sim_end))\n", "print(datetime.fromtimestamp(present_time))" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "c30\n", "i0\n", "i1\n", "i2\n", "i3\n", "i6\n", "i8\n", "i9\n", "u00\n", "u20\n", "u30\n", "u31\n", "u32\n" ] } ], "source": [ "for k, g in Sigtable.groupby('node_id'):\n", " print(k)" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ] } ], "source": [ "offsets = {}\n", "SIGTABLE = []\n", "for node_id, group in Sigtable.groupby('node_id'):\n", " lsbs = group[group['start_unix'] < sim_start]['start_unix'].max() # the last start_unix before sim_start\n", " offsets[node_id] = lsbs - sim_start\n", " group = group[(group['start_unix'] < sim_end) & (group['start_unix'] >= lsbs)]\n", " SIGTABLE.append(group)\n", "SIGTABLE = pd.concat(SIGTABLE)\n", "\n", "strings = ['\\n']\n", "for node_id, group in Sigtable.groupby('node_id'):\n", " strings.append(f' \\n')\n", " for i, row in group.iterrows():\n", " duration = row.duration\n", " state = row.state\n", " strings.append(f' \\n')\n", " strings.append(' \\n')\n", "strings.append('')\n", "strings = ''.join(strings)\n", "# 저장\n", "path_output = '../../Data/networks/sn.add.xml'\n", "with open(path_output, 'w') as f:\n", " f.write(strings)\n", "\n", "print(strings)" ] } ], "metadata": { "kernelspec": { "display_name": "rts", "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 }