{ "cells": [ { "cell_type": "code", "execution_count": 99, "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": 100, "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": 101, "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": 102, "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": 103, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1704410400 2024-01-05 08:20: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
0i017044089101140-571542797_02571500487_01-571500487_01571542797_02
1i017044089102242-571500487_01571545870_01-571542797_02571510153_01
2i017044089103329571545870_02571510153_01571545870_02571542797_02
3i017044089103426571545870_02571510153_01571510153_02571545870_01
4i017044089104433571510153_02571500487_01571510153_02571545870_01
..............................
210i817044101801130-571500569_01571500583_02-571500569_01571500618_01
211i817044101802236571500618_02571500583_02571500618_02571500617_01
212i817044101803318571500617_02571500618_01571500618_02571500617_01
213i817044101804458571500617_02571500618_01571500617_02571500569_01
214i817044101805518571500583_01571500617_01571500583_01571500569_01
\n", "

215 rows × 9 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 i0 1704408910 1 1 40 -571542797_02 \n", "1 i0 1704408910 2 2 42 -571500487_01 \n", "2 i0 1704408910 3 3 29 571545870_02 \n", "3 i0 1704408910 3 4 26 571545870_02 \n", "4 i0 1704408910 4 4 33 571510153_02 \n", ".. ... ... ... ... ... ... \n", "210 i8 1704410180 1 1 30 -571500569_01 \n", "211 i8 1704410180 2 2 36 571500618_02 \n", "212 i8 1704410180 3 3 18 571500617_02 \n", "213 i8 1704410180 4 4 58 571500617_02 \n", "214 i8 1704410180 5 5 18 571500583_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "0 571500487_01 -571500487_01 571542797_02 \n", "1 571545870_01 -571542797_02 571510153_01 \n", "2 571510153_01 571545870_02 571542797_02 \n", "3 571510153_01 571510153_02 571545870_01 \n", "4 571500487_01 571510153_02 571545870_01 \n", ".. ... ... ... \n", "210 571500583_02 -571500569_01 571500618_01 \n", "211 571500583_02 571500618_02 571500617_01 \n", "212 571500618_01 571500618_02 571500617_01 \n", "213 571500618_01 571500617_02 571500569_01 \n", "214 571500617_01 571500583_01 571500569_01 \n", "\n", "[215 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": [ "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": 104, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['i0', 'i1', 'i2', 'i3', 'i6', 'i8', 'i9']" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted(histid.node_id.unique())" ] }, { "cell_type": "code", "execution_count": 105, "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
0i017044089101140-571542797_02571500487_01-571500487_01571542797_02
1i017044089102242-571500487_01571545870_01-571542797_02571510153_01
2i017044089103329571545870_02571510153_01571545870_02571542797_02
3i017044089103426571545870_02571510153_01571510153_02571545870_01
4i017044089104433571510153_02571500487_01571510153_02571545870_01
..............................
406i817044101801130-571500569_01571500583_02-571500569_01571500618_01
407i817044101802236571500618_02571500583_02571500618_02571500617_01
408i817044101803318571500617_02571500618_01571500618_02571500617_01
409i817044101804458571500617_02571500618_01571500617_02571500569_01
410i817044101805518571500583_01571500617_01571500583_01571500569_01
\n", "

411 rows × 9 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 i0 1704408910 1 1 40 -571542797_02 \n", "1 i0 1704408910 2 2 42 -571500487_01 \n", "2 i0 1704408910 3 3 29 571545870_02 \n", "3 i0 1704408910 3 4 26 571545870_02 \n", "4 i0 1704408910 4 4 33 571510153_02 \n", ".. ... ... ... ... ... ... \n", "406 i8 1704410180 1 1 30 -571500569_01 \n", "407 i8 1704410180 2 2 36 571500618_02 \n", "408 i8 1704410180 3 3 18 571500617_02 \n", "409 i8 1704410180 4 4 58 571500617_02 \n", "410 i8 1704410180 5 5 18 571500583_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B \n", "0 571500487_01 -571500487_01 571542797_02 \n", "1 571545870_01 -571542797_02 571510153_01 \n", "2 571510153_01 571545870_02 571542797_02 \n", "3 571510153_01 571510153_02 571545870_01 \n", "4 571500487_01 571510153_02 571545870_01 \n", ".. ... ... ... \n", "406 571500583_02 -571500569_01 571500618_01 \n", "407 571500583_02 571500618_02 571500617_01 \n", "408 571500618_01 571500618_02 571500617_01 \n", "409 571500618_01 571500617_02 571500569_01 \n", "410 571500617_01 571500583_01 571500569_01 \n", "\n", "[411 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": 106, "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": 107, "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 \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": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "411" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(histids)" ] }, { "cell_type": "code", "execution_count": 109, "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", "
node_idstart_unixphas_Aphas_Bdurationinc_edge_Aout_edge_Ainc_edge_Bout_edge_Binit_state
0i017044089101140-571542797_02571500487_01-571500487_01571542797_02[g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ...
1i017044089102242-571500487_01571545870_01-571542797_02571510153_01[g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ...
2i017044089103329571545870_02571510153_01571545870_02571542797_02[g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ...
3i017044089103426571545870_02571510153_01571510153_02571545870_01[g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ...
4i017044089104433571510153_02571500487_01571510153_02571545870_01[g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ...
.................................
406i817044101801130-571500569_01571500583_02-571500569_01571500618_01[]
407i817044101802236571500618_02571500583_02571500618_02571500617_01[]
408i817044101803318571500617_02571500618_01571500618_02571500617_01[]
409i817044101804458571500617_02571500618_01571500617_02571500569_01[]
410i817044101805518571500583_01571500617_01571500583_01571500569_01[]
\n", "

411 rows × 10 columns

\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "0 i0 1704408910 1 1 40 -571542797_02 \n", "1 i0 1704408910 2 2 42 -571500487_01 \n", "2 i0 1704408910 3 3 29 571545870_02 \n", "3 i0 1704408910 3 4 26 571545870_02 \n", "4 i0 1704408910 4 4 33 571510153_02 \n", ".. ... ... ... ... ... ... \n", "406 i8 1704410180 1 1 30 -571500569_01 \n", "407 i8 1704410180 2 2 36 571500618_02 \n", "408 i8 1704410180 3 3 18 571500617_02 \n", "409 i8 1704410180 4 4 58 571500617_02 \n", "410 i8 1704410180 5 5 18 571500583_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B \\\n", "0 571500487_01 -571500487_01 571542797_02 \n", "1 571545870_01 -571542797_02 571510153_01 \n", "2 571510153_01 571545870_02 571542797_02 \n", "3 571510153_01 571510153_02 571545870_01 \n", "4 571500487_01 571510153_02 571545870_01 \n", ".. ... ... ... \n", "406 571500583_02 -571500569_01 571500618_01 \n", "407 571500583_02 571500618_02 571500617_01 \n", "408 571500618_01 571500618_02 571500617_01 \n", "409 571500618_01 571500617_02 571500569_01 \n", "410 571500617_01 571500583_01 571500569_01 \n", "\n", " init_state \n", "0 [g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ... \n", "1 [g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ... \n", "2 [g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ... \n", "3 [g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ... \n", "4 [g, r, r, r, g, r, r, r, g, r, r, r, r, r, g, ... \n", ".. ... \n", "406 [] \n", "407 [] \n", "408 [] \n", "409 [] \n", "410 [] \n", "\n", "[411 rows x 10 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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_Binit_statestate
401u3217044101502239NaNNaNNaNNaN[g, g, g, g, g, g, g, r]NaN
402u3217044101503342NaNNaNNaNNaN[g, g, g, g, g, g, g, r]NaN
403u3217044101504421NaNNaNNaNNaN[g, g, g, g, g, g, g, r]NaN
404i917044101601146571510152_02-571510152_01571510152_01571510152_01.65[r, r, r, r]GGGG
405i9170441016022114NaNNaNNaNNaN[r, r, r, r]NaN
406i817044101801130-571500569_01571500583_02-571500569_01571500618_01[]
407i817044101802236571500618_02571500583_02571500618_02571500617_01[]
408i817044101803318571500617_02571500618_01571500618_02571500617_01[]
409i817044101804458571500617_02571500618_01571500617_02571500569_01[]
410i817044101805518571500583_01571500617_01571500583_01571500569_01[]
\n", "
" ], "text/plain": [ " node_id start_unix phas_A phas_B duration inc_edge_A \\\n", "401 u32 1704410150 2 2 39 NaN \n", "402 u32 1704410150 3 3 42 NaN \n", "403 u32 1704410150 4 4 21 NaN \n", "404 i9 1704410160 1 1 46 571510152_02 \n", "405 i9 1704410160 2 2 114 NaN \n", "406 i8 1704410180 1 1 30 -571500569_01 \n", "407 i8 1704410180 2 2 36 571500618_02 \n", "408 i8 1704410180 3 3 18 571500617_02 \n", "409 i8 1704410180 4 4 58 571500617_02 \n", "410 i8 1704410180 5 5 18 571500583_01 \n", "\n", " out_edge_A inc_edge_B out_edge_B init_state \\\n", "401 NaN NaN NaN [g, g, g, g, g, g, g, r] \n", "402 NaN NaN NaN [g, g, g, g, g, g, g, r] \n", "403 NaN NaN NaN [g, g, g, g, g, g, g, r] \n", "404 -571510152_01 571510152_01 571510152_01.65 [r, r, r, r] \n", "405 NaN NaN NaN [r, r, r, r] \n", "406 571500583_02 -571500569_01 571500618_01 [] \n", "407 571500583_02 571500618_02 571500617_01 [] \n", "408 571500618_01 571500618_02 571500617_01 [] \n", "409 571500618_01 571500617_02 571500569_01 [] \n", "410 571500617_01 571500583_01 571500569_01 [] \n", "\n", " state \n", "401 NaN \n", "402 NaN \n", "403 NaN \n", "404 GGGG \n", "405 NaN \n", "406 \n", "407 \n", "408 \n", "409 \n", "410 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigtable = histids.copy()\n", "sigtable['init_state'] = sigtable['node_id'].map(node2init)\n", "display(sigtable)\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", "display(sigtable[-10:])\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:10\n", "# # 시뮬레이션 종료시각 : 현재시각 - 300 = 08:15\n", "# # 현재시각 : present_time, PT = 08:20\n", "# # PT-900 ... PT-600 ... PT-300 ... PT" ] }, { "cell_type": "code", "execution_count": 12, "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
0i01704408910040gGGrgrrrgGGGGrgrr2024-01-05 07:55:10
1i01704408910142grrGgrrrgrrrrGgrr2024-01-05 07:55:10
2i01704408910229grrrgGGGgrrrrrgrr2024-01-05 07:55:10
3i01704408910326grrrgGGrgrrrrrgGr2024-01-05 07:55:10
4i01704408910433grrrgrrrgrrrrrgGG2024-01-05 07:55:10
.....................
250i81704410180030grrrrrrrgGGGgrrr2024-01-05 08:16:20
251i81704410180136grrrrrrrgrrrgGGG2024-01-05 08:16:20
252i81704410180218grrrGGGrgrrrgGGr2024-01-05 08:16:20
253i81704410180358grrrGGGGgrrrgrrr2024-01-05 08:16:20
254i81704410180418gGGGrrrrgrrrgrrr2024-01-05 08:16:20
\n", "

255 rows × 6 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase_sumo duration state \\\n", "0 i0 1704408910 0 40 gGGrgrrrgGGGGrgrr \n", "1 i0 1704408910 1 42 grrGgrrrgrrrrGgrr \n", "2 i0 1704408910 2 29 grrrgGGGgrrrrrgrr \n", "3 i0 1704408910 3 26 grrrgGGrgrrrrrgGr \n", "4 i0 1704408910 4 33 grrrgrrrgrrrrrgGG \n", ".. ... ... ... ... ... \n", "250 i8 1704410180 0 30 grrrrrrrgGGGgrrr \n", "251 i8 1704410180 1 36 grrrrrrrgrrrgGGG \n", "252 i8 1704410180 2 18 grrrGGGrgrrrgGGr \n", "253 i8 1704410180 3 58 grrrGGGGgrrrgrrr \n", "254 i8 1704410180 4 18 gGGGrrrrgrrrgrrr \n", "\n", " start_dt \n", "0 2024-01-05 07:55:10 \n", "1 2024-01-05 07:55:10 \n", "2 2024-01-05 07:55:10 \n", "3 2024-01-05 07:55:10 \n", "4 2024-01-05 07:55:10 \n", ".. ... \n", "250 2024-01-05 08:16:20 \n", "251 2024-01-05 08:16:20 \n", "252 2024-01-05 08:16:20 \n", "253 2024-01-05 08:16:20 \n", "254 2024-01-05 08:16:20 \n", "\n", "[255 rows x 6 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigtable = histids.copy()\n", "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:10\n", "# 시뮬레이션 종료시각 : 현재시각 - 300 = 08:15\n", "# 현재시각 : present_time, PT = 08:20\n", "# PT-900 ... PT-600 ... PT-300 ... PT" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1704409800 2024-01-05 08:10:00\n", "1704410100 2024-01-05 08:15:00\n", "1704410400 2024-01-05 08:20:00\n" ] } ], "source": [ "print(sim_start, datetime.fromtimestamp(sim_start))\n", "print(sim_end, datetime.fromtimestamp(sim_end))\n", "print(present_time,datetime.fromtimestamp(present_time))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'sigtable_dt' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[11], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m node_id \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28msorted\u001b[39m(\u001b[43msigtable_dt\u001b[49m\u001b[38;5;241m.\u001b[39mnode_id\u001b[38;5;241m.\u001b[39munique()):\n\u001b[0;32m 2\u001b[0m sig1 \u001b[38;5;241m=\u001b[39m sigtable_dt[sigtable_dt\u001b[38;5;241m.\u001b[39mnode_id\u001b[38;5;241m==\u001b[39mnode_id]\n\u001b[0;32m 3\u001b[0m dt_min \u001b[38;5;241m=\u001b[39m sig1\u001b[38;5;241m.\u001b[39mstart_dt\u001b[38;5;241m.\u001b[39mmin()\n", "\u001b[1;31mNameError\u001b[0m: name 'sigtable_dt' is not defined" ] } ], "source": [ "for node_id in sorted(sigtable_dt.node_id.unique()):\n", " sig1 = sigtable_dt[sigtable_dt.node_id==node_id]\n", " dt_min = sig1.start_dt.min()\n", " dt_max = sig1.start_dt.max()\n", " print(node_id, dt_min, dt_max)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'sigtable_dt' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[12], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m sig1 \u001b[38;5;241m=\u001b[39m \u001b[43msigtable_dt\u001b[49m[sigtable_dt\u001b[38;5;241m.\u001b[39mnode_id\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mi2\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 2\u001b[0m dts \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msorted\u001b[39m(sig1\u001b[38;5;241m.\u001b[39mstart_dt\u001b[38;5;241m.\u001b[39munique())\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(dt_min)\n", "\u001b[1;31mNameError\u001b[0m: name 'sigtable_dt' is not defined" ] } ], "source": [ "sig1 = sigtable_dt[sigtable_dt.node_id=='i2']\n", "dts = sorted(sig1.start_dt.unique())\n", "print(dt_min)\n", "print(dt_min.strftime('%H:%M:%S'))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-01-05 08:08:40\n", "08:08:40\n" ] } ], "source": [ "sig1 = sigtable_dt[sigtable_dt.node_id=='i2']\n", "dt_min = sig1.start_dt.min()\n", "print(dt_min)\n", "print(dt_min.strftime('%H:%M:%S'))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "i0 2024-01-05 08:06:30 2024-01-05 08:12:10\n", "i1 2024-01-05 08:07:10 2024-01-05 08:15:40\n", "i2 2024-01-05 08:08:40 2024-01-05 08:14:20\n", "i3 2024-01-05 08:05:10 2024-01-05 08:15:50\n", "i6 2024-01-05 08:11:50 2024-01-05 08:14:40\n", "i7 NaT NaT\n", "i8 2024-01-05 08:11:00 2024-01-05 08:16:20\n", "i9 2024-01-05 08:05:10 2024-01-05 08:16:00\n" ] } ], "source": [ "for node_id in parent_ids:\n", " sig1 = sigtable_dt[sigtable_dt.node_id==node_id]\n", " dt_min = sig1.start_dt.min()\n", " dt_max = sig1.start_dt.max()\n", " print(node_id, dt_min, dt_max)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "670\n", "2024-01-05 08:15:00\n", "2024-01-05 08:20:00\n", "2024-01-05 08:16:20\n", "2024-01-05 08:05:10\n" ] } ], "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": 36, "metadata": {}, "outputs": [], "source": [ "sigtable1 = sigtable.copy()\n" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['c30', 'i0', 'i1', 'i2', 'i3', 'i6', 'i8', 'i9', 'u00', 'u20', 'u30', 'u31']" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted(sigtable.node_id.unique())" ] }, { "cell_type": "code", "execution_count": 38, "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": 39, "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" ] } ], "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": 40, "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" ] } ], "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 }