{ "cells": [ { "cell_type": "code", "execution_count": 59, "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": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-01-05 08:20: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 = 100 # m ranges from 26 to 287\n", "present_time = fmins[m]\n", "sim_start = fmins[m] - 600\n", "sim_end = fmins[m] - 300\n", "print(datetime.fromtimestamp(fmins[m]))\n", "net = sumolib.net.readNet('../../Data/networks/SN_sample.net.xml')\n", "inter_node = pd.read_csv('../../data/tables/inter_node.csv', index_col=0)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{175: 'u00', 176: 'i1', 177: 'u20', 178: 'c30', 201: 'i8', 202: 'i9', 206: 'i7', 210: 'i6'}\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, 'c30': 178}\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']\n", "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n", "['c30', 'u00', 'u20', 'u30', 'u31', 'u32']\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": 62, "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
0i317044095101138571540304_02571556450_01571556450_02571540304_01
1i317044095102239571556450_02571500475_01571540304_02571540303_01
2i317044095103342571540303_02.21571556450_01571540303_02.21571500475_01
3i317044095104421-571500475_01571540303_01-571500475_01571540304_01
4i917044095101146571510152_02-571510152_01571510152_01571510152_01.65
..............................
88i817044101801130-571500569_01571500583_02-571500569_01571500618_01
89i817044101802236571500618_02571500583_02571500618_02571500617_01
90i817044101803318571500617_02571500618_01571500618_02571500617_01
91i817044101804458571500617_02571500618_01571500617_02571500569_01
92i817044101805518571500583_01571500617_01571500583_01571500569_01
\n", "

93 rows × 9 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 i3 1704409510 1 1 38 571540304_02 \n", "1 i3 1704409510 2 2 39 571556450_02 \n", "2 i3 1704409510 3 3 42 571540303_02.21 \n", "3 i3 1704409510 4 4 21 -571500475_01 \n", "4 i9 1704409510 1 1 46 571510152_02 \n", ".. ... ... ... ... ... ... \n", "88 i8 1704410180 1 1 30 -571500569_01 \n", "89 i8 1704410180 2 2 36 571500618_02 \n", "90 i8 1704410180 3 3 18 571500617_02 \n", "91 i8 1704410180 4 4 58 571500617_02 \n", "92 i8 1704410180 5 5 18 571500583_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "0 571556450_01 571556450_02 571540304_01 \n", "1 571500475_01 571540304_02 571540303_01 \n", "2 571556450_01 571540303_02.21 571500475_01 \n", "3 571540303_01 -571500475_01 571540304_01 \n", "4 -571510152_01 571510152_01 571510152_01.65 \n", ".. ... ... ... \n", "88 571500583_02 -571500569_01 571500618_01 \n", "89 571500583_02 571500618_02 571500617_01 \n", "90 571500618_01 571500618_02 571500617_01 \n", "91 571500618_01 571500617_02 571500569_01 \n", "92 571500617_01 571500583_01 571500569_01 \n", "\n", "[93 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
..................
111u602B571500535_02-571500535_02
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 571500535_02 -571500535_02\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": [ "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": 63, "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
0c3017044095101138NaNNaNNaNNaN
1c3017044095102239571542116_01-571542116_02.96571542116_02.96571542116_02.164
2c3017044095103342571542116_01-571542116_02.96571542116_02.96571542116_02.164
3c3017044095104421571542116_01-571542116_02.96571542116_02.96571542116_02.164
4i317044095101138571540304_02571556450_01571556450_02571540304_01
..............................
195i817044101801130-571500569_01571500583_02-571500569_01571500618_01
196i817044101802236571500618_02571500583_02571500618_02571500617_01
197i817044101803318571500617_02571500618_01571500618_02571500617_01
198i817044101804458571500617_02571500618_01571500617_02571500569_01
199i817044101805518571500583_01571500617_01571500583_01571500569_01
\n", "

200 rows × 9 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 c30 1704409510 1 1 38 NaN \n", "1 c30 1704409510 2 2 39 571542116_01 \n", "2 c30 1704409510 3 3 42 571542116_01 \n", "3 c30 1704409510 4 4 21 571542116_01 \n", "4 i3 1704409510 1 1 38 571540304_02 \n", ".. ... ... ... ... ... ... \n", "195 i8 1704410180 1 1 30 -571500569_01 \n", "196 i8 1704410180 2 2 36 571500618_02 \n", "197 i8 1704410180 3 3 18 571500617_02 \n", "198 i8 1704410180 4 4 58 571500617_02 \n", "199 i8 1704410180 5 5 18 571500583_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "0 NaN NaN NaN \n", "1 -571542116_02.96 571542116_02.96 571542116_02.164 \n", "2 -571542116_02.96 571542116_02.96 571542116_02.164 \n", "3 -571542116_02.96 571542116_02.96 571542116_02.164 \n", "4 571556450_01 571556450_02 571540304_01 \n", ".. ... ... ... \n", "195 571500583_02 -571500569_01 571500618_01 \n", "196 571500583_02 571500618_02 571500617_01 \n", "197 571500618_01 571500618_02 571500617_01 \n", "198 571500618_01 571500617_02 571500569_01 \n", "199 571500617_01 571500583_01 571500569_01 \n", "\n", "[200 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", "\n", "new_histids = pd.concat(new_histids)\n", "sigtable = pd.concat([histid.copy(), new_histids])\n", "sigtable = sigtable.sort_values(by=['start_unix', 'node_id', 'phas_A', 'phas_B']).reset_index(drop=True)\n", "display(sigtable)" ] }, { "cell_type": "code", "execution_count": 64, "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(sigtable.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": 65, "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 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", "\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": 66, "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", "
node_idstart_unixphase_sumodurationstatestart_dt
0c301704409510039GGGGGG2024-01-05 08:05:10
1c301704409510142GGGGGG2024-01-05 08:05:10
2c301704409510221GGGGGG2024-01-05 08:05:10
3i31704409510038gGGGrgrrrrgGGGrgrrrr2024-01-05 08:05:10
4i31704409510139grrrGgrrrrgrrrGgrrrr2024-01-05 08:05:10
.....................
112i81704410180030grrrrrrrgGGGgrrr2024-01-05 08:16:20
113i81704410180136grrrrrrrgrrrgGGG2024-01-05 08:16:20
114i81704410180218grrrGGGrgrrrgGGr2024-01-05 08:16:20
115i81704410180358grrrGGGGgrrrgrrr2024-01-05 08:16:20
116i81704410180418gGGGrrrrgrrrgrrr2024-01-05 08:16:20
\n", "

117 rows × 6 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state \\\n", "0 c30 1704409510 0 39 GGGGGG \n", "1 c30 1704409510 1 42 GGGGGG \n", "2 c30 1704409510 2 21 GGGGGG \n", "3 i3 1704409510 0 38 gGGGrgrrrrgGGGrgrrrr \n", "4 i3 1704409510 1 39 grrrGgrrrrgrrrGgrrrr \n", ".. ... ... ... ... ... \n", "112 i8 1704410180 0 30 grrrrrrrgGGGgrrr \n", "113 i8 1704410180 1 36 grrrrrrrgrrrgGGG \n", "114 i8 1704410180 2 18 grrrGGGrgrrrgGGr \n", "115 i8 1704410180 3 58 grrrGGGGgrrrgrrr \n", "116 i8 1704410180 4 18 gGGGrrrrgrrrgrrr \n", "\n", " start_dt \n", "0 2024-01-05 08:05:10 \n", "1 2024-01-05 08:05:10 \n", "2 2024-01-05 08:05:10 \n", "3 2024-01-05 08:05:10 \n", "4 2024-01-05 08:05:10 \n", ".. ... \n", "112 2024-01-05 08:16:20 \n", "113 2024-01-05 08:16:20 \n", "114 2024-01-05 08:16:20 \n", "115 2024-01-05 08:16:20 \n", "116 2024-01-05 08:16:20 \n", "\n", "[117 rows x 6 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigtable['init_state'] = sigtable['node_id'].map(node2init)\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[['node_id', 'start_unix', 'phase_sumo', 'duration', 'state']]\n", "sigtable = sigtable.sort_values(by=['start_unix', 'node_id'])\n", "sigtable_dt = sigtable.copy() #[sigtable.start_unix >= fmins[m]-420]\n", "sigtable_dt['start_dt'] = sigtable_dt['start_unix'].apply(lambda x:datetime.fromtimestamp(x))\n", "display(sigtable_dt)\n", "# 시뮬레이션 시작시각 : 현재시각 - 600 = 08:20\n", "# 시뮬레이션 종료시각 : 현재시각 - 300 = 08:15\n", "# 현재시각 : present_time, PT = 08:10\n", "# PT-900 ... PT-600 ... PT-300 ... PT" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1704409800\n", "1704410100\n", "1704410400\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_sumodurationstate
0c301704409510039GGGGGG
1c301704409510142GGGGGG
2c301704409510221GGGGGG
3i31704409510038gGGGrgrrrrgGGGrgrrrr
4i31704409510139grrrGgrrrrgrrrGgrrrr
5i31704409510242grrrrgrrrrgrrrrgGGGG
6i31704409510321grrrrgGGGGgrrrrgrrrr
7i91704409510046GGGG
8u301704409510021ggggGggg
9u311704409510038ggggGggg
10i01704409590040gGGrgrrrgGGGGrgrr
11i01704409590142grrGgrrrgrrrrGgrr
12i01704409590229grrrgGGGgrrrrrgrr
13i01704409590326grrrgGGrgrrrrrgGr
14i01704409590433grrrgrrrgrrrrrgGG
15u001704409590042ggggGgggg
16i11704409630037gGGGGGrgrr
17i11704409630193grrGGGGgrr
18i11704409630240grrrrrrgGG
19c301704409670039GGGGGG
20c301704409670142GGGGGG
21c301704409670221GGGGGG
22i31704409670038gGGGrgrrrrgGGGrgrrrr
23i31704409670139grrrGgrrrrgrrrGgrrrr
24i31704409670242grrrrgrrrrgrrrrgGGGG
25i31704409670321grrrrgGGGGgrrrrgrrrr
26i91704409670049GGGG
27u301704409670021ggggGggg
28u311704409670038ggggGggg
29i21704409720040GGggGGG
30i21704409720125rrggrrr
31i21704409720234rrggGGG
32u201704409720071ggGggg
33i01704409760040gGGrgrrrgGGGGrgrr
34i01704409760142grrGgrrrgrrrrGgrr
35i01704409760229grrrgGGGgrrrrrgrr
36i01704409760326grrrgGGrgrrrrrgGr
37i01704409760433grrrgrrrgrrrrrgGG
38u001704409760042ggggGgggg
39i11704409800037gGGGGGrgrr
40i11704409800193grrGGGGgrr
41i11704409800240grrrrrrgGG
42c301704409830039GGGGGG
43c301704409830142GGGGGG
44c301704409830221GGGGGG
45i31704409830038gGGGrgrrrrgGGGrgrrrr
46i31704409830139grrrGgrrrrgrrrGgrrrr
47i31704409830242grrrrgrrrrgrrrrgGGGG
48i31704409830321grrrrgGGGGgrrrrgrrrr
49u301704409830021ggggGggg
50u311704409830038ggggGggg
51i91704409840046GGGG
52i81704409860030grrrrrrrgGGGgrrr
53i81704409860136grrrrrrrgrrrgGGG
54i81704409860218grrrGGGrgrrrgGGr
55i81704409860358grrrGGGGgrrrgrrr
56i81704409860418gGGGrrrrgrrrgrrr
57i21704409890040GGggGGG
58i21704409890125rrggrrr
59i21704409890234rrggGGG
\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state\n", "0 c30 1704409510 0 39 GGGGGG\n", "1 c30 1704409510 1 42 GGGGGG\n", "2 c30 1704409510 2 21 GGGGGG\n", "3 i3 1704409510 0 38 gGGGrgrrrrgGGGrgrrrr\n", "4 i3 1704409510 1 39 grrrGgrrrrgrrrGgrrrr\n", "5 i3 1704409510 2 42 grrrrgrrrrgrrrrgGGGG\n", "6 i3 1704409510 3 21 grrrrgGGGGgrrrrgrrrr\n", "7 i9 1704409510 0 46 GGGG\n", "8 u30 1704409510 0 21 ggggGggg\n", "9 u31 1704409510 0 38 ggggGggg\n", "10 i0 1704409590 0 40 gGGrgrrrgGGGGrgrr\n", "11 i0 1704409590 1 42 grrGgrrrgrrrrGgrr\n", "12 i0 1704409590 2 29 grrrgGGGgrrrrrgrr\n", "13 i0 1704409590 3 26 grrrgGGrgrrrrrgGr\n", "14 i0 1704409590 4 33 grrrgrrrgrrrrrgGG\n", "15 u00 1704409590 0 42 ggggGgggg\n", "16 i1 1704409630 0 37 gGGGGGrgrr\n", "17 i1 1704409630 1 93 grrGGGGgrr\n", "18 i1 1704409630 2 40 grrrrrrgGG\n", "19 c30 1704409670 0 39 GGGGGG\n", "20 c30 1704409670 1 42 GGGGGG\n", "21 c30 1704409670 2 21 GGGGGG\n", "22 i3 1704409670 0 38 gGGGrgrrrrgGGGrgrrrr\n", "23 i3 1704409670 1 39 grrrGgrrrrgrrrGgrrrr\n", "24 i3 1704409670 2 42 grrrrgrrrrgrrrrgGGGG\n", "25 i3 1704409670 3 21 grrrrgGGGGgrrrrgrrrr\n", "26 i9 1704409670 0 49 GGGG\n", "27 u30 1704409670 0 21 ggggGggg\n", "28 u31 1704409670 0 38 ggggGggg\n", "29 i2 1704409720 0 40 GGggGGG\n", "30 i2 1704409720 1 25 rrggrrr\n", "31 i2 1704409720 2 34 rrggGGG\n", "32 u20 1704409720 0 71 ggGggg\n", "33 i0 1704409760 0 40 gGGrgrrrgGGGGrgrr\n", "34 i0 1704409760 1 42 grrGgrrrgrrrrGgrr\n", "35 i0 1704409760 2 29 grrrgGGGgrrrrrgrr\n", "36 i0 1704409760 3 26 grrrgGGrgrrrrrgGr\n", "37 i0 1704409760 4 33 grrrgrrrgrrrrrgGG\n", "38 u00 1704409760 0 42 ggggGgggg\n", "39 i1 1704409800 0 37 gGGGGGrgrr\n", "40 i1 1704409800 1 93 grrGGGGgrr\n", "41 i1 1704409800 2 40 grrrrrrgGG\n", "42 c30 1704409830 0 39 GGGGGG\n", "43 c30 1704409830 1 42 GGGGGG\n", "44 c30 1704409830 2 21 GGGGGG\n", "45 i3 1704409830 0 38 gGGGrgrrrrgGGGrgrrrr\n", "46 i3 1704409830 1 39 grrrGgrrrrgrrrGgrrrr\n", "47 i3 1704409830 2 42 grrrrgrrrrgrrrrgGGGG\n", "48 i3 1704409830 3 21 grrrrgGGGGgrrrrgrrrr\n", "49 u30 1704409830 0 21 ggggGggg\n", "50 u31 1704409830 0 38 ggggGggg\n", "51 i9 1704409840 0 46 GGGG\n", "52 i8 1704409860 0 30 grrrrrrrgGGGgrrr\n", "53 i8 1704409860 1 36 grrrrrrrgrrrgGGG\n", "54 i8 1704409860 2 18 grrrGGGrgrrrgGGr\n", "55 i8 1704409860 3 58 grrrGGGGgrrrgrrr\n", "56 i8 1704409860 4 18 gGGGrrrrgrrrgrrr\n", "57 i2 1704409890 0 40 GGggGGG\n", "58 i2 1704409890 1 25 rrggrrr\n", "59 i2 1704409890 2 34 rrggGGG" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(sim_start)\n", "print(sim_end)\n", "print(present_time)\n", "sigtable[:60]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(sigtable.start_unix.max() - sigtable.start_unix.min())\n", "print(datetime.fromtimestamp(fmins[m - 1]))\n", "print(datetime.fromtimestamp(fmins[m]))\n", "print(datetime.fromtimestamp(sigtable.start_unix.max()))\n", "print(datetime.fromtimestamp(sigtable.start_unix.min()))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sigtable1 = sigtable.copy()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sorted(sigtable.node_id.unique())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "strings = ['\\n']\n", "for key, group in sigtable.groupby(['start_unix', 'node_id']):\n", " start_unix = key[0]\n", " node_id = key[1]\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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "strings = ['\\n']\n", "for key, group in sigtable.groupby(['start_unix', 'node_id']):\n", " start_unix = key[0]\n", " node_id = key[1]\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_sample.tll.xml'\n", "with open(path_output, 'w') as f:\n", " f.write(strings)\n", "print(strings)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "strings = ['\\n']\n", "for key, group in sigtable.groupby(['start_unix', 'node_id']):\n", " start_unix = key[0]\n", " node_id = key[1]\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_sample.tll.xml'\n", "with open(path_output, 'w') as f:\n", " f.write(strings)\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 }