{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.listdir('../../scripts')\n", "import sys\n", "sys.path.append('../../Scripts')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from generate_signals import SignalGenerator\n", "from preprocess_daily import DailyPreprocessor" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "inter_no = 175\n", "Node_id = 'i0'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n", "4. 통합 테이블을 생성합니다.\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", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstatephase_sumo
0178c301704416690118433gggggg0_g
1178c30170441669011844gggggg0_y
2178c30170441669022731gggggg1__r
0178c301704416690227334GGGGGG1_g
1178c30170441669022734GGGGGG1_y
.................................
2210u60170441714033741ggggggggr3__r
0210u601704417140337465ggggggggr3_g
1210u60170441714033744ggggggggr3_y
2210u60170441714044831ggggggggr4__r
237210u601704417140448319ggggggggr4_g
\n", "

684 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 178 c30 1704416690 1 1 8 4 33 \n", "1 178 c30 1704416690 1 1 8 4 4 \n", "2 178 c30 1704416690 2 2 7 3 1 \n", "0 178 c30 1704416690 2 2 7 3 34 \n", "1 178 c30 1704416690 2 2 7 3 4 \n", ".. ... ... ... ... ... ... ... ... \n", "2 210 u60 1704417140 3 3 7 4 1 \n", "0 210 u60 1704417140 3 3 7 4 65 \n", "1 210 u60 1704417140 3 3 7 4 4 \n", "2 210 u60 1704417140 4 4 8 3 1 \n", "237 210 u60 1704417140 4 4 8 3 19 \n", "\n", " state phase_sumo \n", "0 gggggg 0_g \n", "1 gggggg 0_y \n", "2 gggggg 1__r \n", "0 GGGGGG 1_g \n", "1 GGGGGG 1_y \n", ".. ... ... \n", "2 ggggggggr 3__r \n", "0 ggggggggr 3_g \n", "1 ggggggggr 3_y \n", "2 ggggggggr 4__r \n", "237 ggggggggr 4_g \n", "\n", "[684 rows x 10 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# desired result\n", "self = SignalGenerator()\n", "self.prepare_data()\n", "self.process_history()\n", "self.process_movement()\n", "self.make_histids()\n", "self.set_timepoints()\n", "self.assign_red_yellow()\n", "self.SIGTABLE" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n" ] } ], "source": [ "self = SignalGenerator()\n", "self.prepare_data()\n", "self.process_history()\n", "self.process_movement()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "self.merge_dfs()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# 4-2. histid\n", "self.histid = self.movedur.copy()\n", "self.histid['node_id'] = self.histid['inter_no'].map(self.inter2node)\n", "histid_start = self.present_time - 600\n", "self.histid = self.histid[self.histid.start_unix > histid_start]\n", "\n", "mapping_dict = self.matching.set_index(['node_id', 'move_no'])['state'].to_dict()\n", "\n", "for i, row in self.histid.iterrows():\n", " node_id = row.node_id\n", " move_A = row.move_A\n", " move_B = row.move_B\n", " \n", " # A링의 state 지정\n", " if (node_id, move_A) in mapping_dict:\n", " state_A = mapping_dict[(node_id, move_A)]\n", " else:\n", " state_A = ''.join(self.node2init[node_id])\n", " self.histid.at[i, 'state_A'] = state_A\n", "\n", " # B링의 state 지정\n", " if (node_id, move_B) in mapping_dict:\n", " state_B = mapping_dict[(node_id, move_B)]\n", " else:\n", " state_B = ''.join(self.node2init[node_id])\n", " self.histid.at[i, 'state_B'] = state_B " ] }, { "cell_type": "code", "execution_count": 8, "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", "
inter_nostart_unixphas_Aphas_Bmove_Amove_Bdurationnode_idstate_Astate_B
101751704416540118443i0grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
111751704416540227346i0grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
121751704416540336133i0grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
131751704416540346223i0grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
141751704416540445237i0grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
.................................
2552011704417410118333i8grrrrrrrgGGrgrrrgrrrrrrrgrrGgrrr
2562011704417410225236i8grrrrrrrgrrrgrrGgrrrrrrrgrrrgGGr
2572011704417410336225i8grrrGGGrgrrrgrrrgrrrrrrrgrrrgGGr
2582011704417410446158i8grrrGGGrgrrrgrrrgrrrrrrGgrrrgrrr
2592011704417410557418i8grrGrrrrgrrrgrrrgGGrrrrrgrrrgrrr
\n", "

203 rows × 10 columns

\n", "
" ], "text/plain": [ " inter_no start_unix phas_A phas_B move_A move_B duration node_id \\\n", "10 175 1704416540 1 1 8 4 43 i0 \n", "11 175 1704416540 2 2 7 3 46 i0 \n", "12 175 1704416540 3 3 6 1 33 i0 \n", "13 175 1704416540 3 4 6 2 23 i0 \n", "14 175 1704416540 4 4 5 2 37 i0 \n", ".. ... ... ... ... ... ... ... ... \n", "255 201 1704417410 1 1 8 3 33 i8 \n", "256 201 1704417410 2 2 5 2 36 i8 \n", "257 201 1704417410 3 3 6 2 25 i8 \n", "258 201 1704417410 4 4 6 1 58 i8 \n", "259 201 1704417410 5 5 7 4 18 i8 \n", "\n", " state_A state_B \n", "10 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "11 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "12 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "13 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "14 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", ".. ... ... \n", "255 grrrrrrrgGGrgrrr grrrrrrrgrrGgrrr \n", "256 grrrrrrrgrrrgrrG grrrrrrrgrrrgGGr \n", "257 grrrGGGrgrrrgrrr grrrrrrrgrrrgGGr \n", "258 grrrGGGrgrrrgrrr grrrrrrGgrrrgrrr \n", "259 grrGrrrrgrrrgrrr gGGrrrrrgrrrgrrr \n", "\n", "[203 rows x 10 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.histid" ] }, { "cell_type": "code", "execution_count": 16, "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", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_B
44175i01704416540118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
45175i01704416540227346grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
46175i01704416540336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
47175i01704416540346223grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
48175i01704416540445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
109175i01704416720118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
110175i01704416720227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
111175i01704416720336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
112175i01704416720346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
113175i01704416720445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
173175i01704416900118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
174175i01704416900227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
175175i01704416900336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
176175i01704416900346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
177175i01704416900445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
244175i01704417080118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
245175i01704417080227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
246175i01704417080336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
247175i01704417080346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
248175i01704417080445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
306175i01704417260118443grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
307175i01704417260227345grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
308175i01704417260336133grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
309175i01704417260346222grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
310175i01704417260445237grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
357175i01704417420118438grrrgrrrgGGGGrgrrgGGrgrrrgrrrrrgrr
358175i01704417420227340grrGgrrrgrrrrrgrrgrrrgrrrgrrrrGgrr
359175i01704417420336129grrrgGGrgrrrrrgrrgrrrgrrGgrrrrrgrr
360175i01704417420346220grrrgGGrgrrrrrgrrgrrrgrrrgrrrrrgGr
361175i01704417420445233grrrgrrrgrrrrrgrGgrrrgrrrgrrrrrgGr
\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "44 175 i0 1704416540 1 1 8 4 43 \n", "45 175 i0 1704416540 2 2 7 3 46 \n", "46 175 i0 1704416540 3 3 6 1 33 \n", "47 175 i0 1704416540 3 4 6 2 23 \n", "48 175 i0 1704416540 4 4 5 2 37 \n", "109 175 i0 1704416720 1 1 8 4 43 \n", "110 175 i0 1704416720 2 2 7 3 45 \n", "111 175 i0 1704416720 3 3 6 1 33 \n", "112 175 i0 1704416720 3 4 6 2 22 \n", "113 175 i0 1704416720 4 4 5 2 37 \n", "173 175 i0 1704416900 1 1 8 4 43 \n", "174 175 i0 1704416900 2 2 7 3 45 \n", "175 175 i0 1704416900 3 3 6 1 33 \n", "176 175 i0 1704416900 3 4 6 2 22 \n", "177 175 i0 1704416900 4 4 5 2 37 \n", "244 175 i0 1704417080 1 1 8 4 43 \n", "245 175 i0 1704417080 2 2 7 3 45 \n", "246 175 i0 1704417080 3 3 6 1 33 \n", "247 175 i0 1704417080 3 4 6 2 22 \n", "248 175 i0 1704417080 4 4 5 2 37 \n", "306 175 i0 1704417260 1 1 8 4 43 \n", "307 175 i0 1704417260 2 2 7 3 45 \n", "308 175 i0 1704417260 3 3 6 1 33 \n", "309 175 i0 1704417260 3 4 6 2 22 \n", "310 175 i0 1704417260 4 4 5 2 37 \n", "357 175 i0 1704417420 1 1 8 4 38 \n", "358 175 i0 1704417420 2 2 7 3 40 \n", "359 175 i0 1704417420 3 3 6 1 29 \n", "360 175 i0 1704417420 3 4 6 2 20 \n", "361 175 i0 1704417420 4 4 5 2 33 \n", "\n", " state_A state_B \n", "44 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "45 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "46 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "47 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "48 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "109 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "110 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "111 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "112 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "113 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "173 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "174 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "175 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "176 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "177 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "244 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "245 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "246 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "247 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "248 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "306 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "307 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "308 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "309 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "310 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr \n", "357 grrrgrrrgGGGGrgrr gGGrgrrrgrrrrrgrr \n", "358 grrGgrrrgrrrrrgrr grrrgrrrgrrrrGgrr \n", "359 grrrgGGrgrrrrrgrr grrrgrrGgrrrrrgrr \n", "360 grrrgGGrgrrrrrgrr grrrgrrrgrrrrrgGr \n", "361 grrrgrrrgrrrrrgrG grrrgrrrgrrrrrgGr " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 4-3. histids\n", "new_histids = []\n", "for parent_id in self.parent_ids:\n", " for child_id in self.pa2ch[parent_id]:\n", " new_histid = self.histid.copy()[self.histid.node_id==parent_id].drop(columns=['state_A', 'state_B'])\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 = self.match6[self.match6.node_id==child_id]\n", " Arow = new_match[(new_match.phase_no==phas_A) & (new_match.ring_type=='A')]\n", "\n", " # A링의 state 지정\n", " state_A = Arow.iloc[0].state\n", " new_histid.at[i, 'state_A'] = state_A\n", "\n", " # B링의 state 지정\n", " Brow = new_match[(new_match.phase_no==phas_B) & (new_match.ring_type=='B')]\n", " state_B = Brow.iloc[0].state\n", " new_histid.at[i, 'state_B'] = state_B\n", "\n", " new_histid.at[i, 'node_id'] = child_id\n", " new_histids.append(new_histid)\n", "import pandas as pd\n", "new_histids = pd.concat(new_histids)\n", "self.histids = pd.concat([self.histid.copy(), new_histids])\n", "self.histids = self.histids.sort_values(by=['start_unix', 'node_id', 'phas_A', 'phas_B']).reset_index(drop=True)\n", "self.histids = self.histids[['inter_no', 'node_id', 'start_unix', 'phas_A', 'phas_B', 'move_A', 'move_B', 'duration', 'state_A', 'state_B']]\n", "self.histids.query('node_id==@Node_id')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "self.set_timepoints()" ] }, { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_Bphase_sumo
0178c301704418730118438gggggggggggg0
1178c301704418730227339GGGggggggGGG1
2178c301704418730335243GGGggggggGGG2
3178c301704418730446122GGGggggggGGG3
4178c301704418900118438gggggggggggg0
....................................
233210u6017044192991161828ggggggggrggggggggr0
234210u601704419299126215ggggggggrggggggggr1
235210u601704419299225243ggggggggGggggggggr2
236210u601704419299337470ggggggggrggggggggr3
237210u601704419299448324ggggggggrggggggggr4
\n", "

238 rows × 11 columns

\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "0 178 c30 1704418730 1 1 8 4 38 \n", "1 178 c30 1704418730 2 2 7 3 39 \n", "2 178 c30 1704418730 3 3 5 2 43 \n", "3 178 c30 1704418730 4 4 6 1 22 \n", "4 178 c30 1704418900 1 1 8 4 38 \n", ".. ... ... ... ... ... ... ... ... \n", "233 210 u60 1704419299 1 1 6 18 28 \n", "234 210 u60 1704419299 1 2 6 2 15 \n", "235 210 u60 1704419299 2 2 5 2 43 \n", "236 210 u60 1704419299 3 3 7 4 70 \n", "237 210 u60 1704419299 4 4 8 3 24 \n", "\n", " state_A state_B phase_sumo \n", "0 gggggg gggggg 0 \n", "1 GGGggg gggGGG 1 \n", "2 GGGggg gggGGG 2 \n", "3 GGGggg gggGGG 3 \n", "4 gggggg gggggg 0 \n", ".. ... ... ... \n", "233 ggggggggr ggggggggr 0 \n", "234 ggggggggr ggggggggr 1 \n", "235 ggggggggG ggggggggr 2 \n", "236 ggggggggr ggggggggr 3 \n", "237 ggggggggr ggggggggr 4 \n", "\n", "[238 rows x 11 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.sigtable" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "# 5-2-1 helper function of 5-2\n", "def get_red(pre_state:str, cur_state:str):\n", " assert len(pre_state) == len(cur_state), \"cur_state, nex_state의 길이가 서로 다릅니다.\"\n", " state_r = ''\n", " for c, n in zip(pre_state, cur_state):\n", " if c == n:\n", " state_r += c\n", " elif (c == 'r') and (n == 'G'):\n", " state_r += 'r'\n", " elif (c == 'G') and (n == 'r'):\n", " state_r += 'r'\n", " else:\n", " raise ValueError(f\"예상치 못한 신호조합: current={c}, next={n}\")\n", " return state_r\n", "\n", "# 5-2-2 helper function of 5-2\n", "def get_yellow(cur_state:str, nex_state:str):\n", " assert len(cur_state) == len(nex_state), \"cur_state, nex_state의 길이가 서로 다릅니다.\"\n", " state_y = ''\n", " for c, n in zip(cur_state, nex_state):\n", " if c == n:\n", " state_y += c\n", " elif (c == 'r') and (n == 'G'):\n", " state_y += 'r'\n", " elif (c == 'G') and (n == 'r'):\n", " state_y += 'y'\n", " else:\n", " raise ValueError(f\"예상치 못한 신호조합: current={c}, next={n}\")\n", " return state_y\n", "\n", "# 5-2-3 helper function of 5-2\n", "def cumulate(sig, alph):\n", " csig = [] # cumulated sig\n", " pre = pd.Series({f'phas_{alph}':None})\n", "\n", " start_time = 0\n", " elapsed = 0\n", " for i, cur in sig.iterrows():\n", " start_unix = cur.start_unix\n", " \n", " # pre, nex\n", " if i != 0:\n", " pre = sig.iloc[i-1]\n", " \n", " if i != len(sig) - 1:\n", " nex = sig.iloc[i+1]\n", " \n", " # duration\n", " if cur[f'phas_{alph}'] == nex[f'phas_{alph}']:\n", " continue\n", " if cur[f'phas_{alph}'] == pre[f'phas_{alph}']:\n", " duration = cur.duration + pre.duration\n", " else:\n", " duration = cur.duration\n", " start_times = []\n", " states = []\n", " phases = []\n", "\n", " # red\n", " if i != 0:\n", " start_time += elapsed\n", " start_times.append(start_time)\n", " states.append(get_red(pre[f'state_{alph}'], cur[f'state_{alph}']))\n", " phases.append(f'{cur[f\"phas_{alph}\"]}r')\n", "\n", " elapsed = cur[f'red_{alph}']\n", "\n", " # green\n", " if i == 0:\n", " start_time = 0\n", " else:\n", " start_time += elapsed\n", " start_times.append(start_time)\n", " states.append(cur[f'state_{alph}'])\n", " phases.append(f'{cur[f\"phas_{alph}\"]}g')\n", " if i == 0:\n", " elapsed = duration - cur[f'yellow_{alph}']\n", " else:\n", " elapsed = duration - cur[f'yellow_{alph}'] - cur[f'red_{alph}']\n", "\n", " # yellow\n", " if i != len(sig) - 1:\n", " start_time += elapsed\n", " start_times.append(start_time)\n", " states.append(get_yellow(cur[f'state_{alph}'], nex[f'state_{alph}']))\n", " phases.append(f'{cur[f\"phas_{alph}\"]}y')\n", " elapsed = cur[f'yellow_{alph}']\n", " sig_ = pd.DataFrame({'start_time':start_times, f'phas_{alph}':phases, f'state_{alph}':states})\n", " sig_['start_unix'] = start_unix\n", " csig.append(sig_)\n", " csig = pd.concat(csig).reset_index(drop=True)\n", " return csig" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.6227824687957764\n" ] } ], "source": [ "import time\n", "now = time.time()\n", "self.SIGTABLE = []\n", "for node_id in self.sigtable.node_id.unique():\n", " sig = self.sigtable.query('node_id==@node_id')\n", " for i, row in sig.iterrows():\n", " inter_no = row.inter_no\n", " phas_A = row.phas_A\n", " phas_B = row.phas_B\n", " start_unix = row.start_unix\n", " prow = self.load_prow(inter_no, start_unix)[1].iloc[0]\n", " red_A = prow[f'red_A{phas_A}']\n", " yellow_A = prow[f'yellow_A{phas_A}']\n", " red_B = prow[f'red_B{phas_B}']\n", " yellow_B = prow[f'yellow_B{phas_B}']\n", " sig.loc[i, ['red_A', 'red_B', 'yellow_A', 'yellow_B']] = red_A, red_B, yellow_A, yellow_B\n", " sig = sig.astype({'red_A': int, 'red_B': int, 'yellow_A': int, 'yellow_B': int,\n", " 'phas_A':str, 'phas_B':str})\n", " sig = sig.drop(['move_A','move_B'], axis=1)\n", "\n", " sig_A = sig[['start_unix', 'phas_A', 'duration', 'state_A', 'red_A', 'yellow_A']].reset_index(drop=True)\n", " sig_B = sig[['start_unix', 'phas_B', 'duration', 'state_B', 'red_B', 'yellow_B']].reset_index(drop=True)\n", "\n", " csig_A = cumulate(sig_A, 'A')\n", " csig_B = cumulate(sig_B, 'B')\n", "\n", " SIG = pd.merge(csig_A, csig_B, on=['start_time', 'start_unix'], how='outer')\n", " SIG = SIG.sort_values(by='start_time').reset_index(drop=True)\n", " SIG[['phas_A', 'state_A']] = SIG[['phas_A', 'state_A']].fillna(method='ffill')\n", " SIG[['phas_B', 'state_B']] = SIG[['phas_B', 'state_B']].fillna(method='ffill')\n", " SIG['phase'] = SIG['phas_A'] + \"_\" + SIG['phas_B']\n", " SIG['node_id'] = node_id\n", " SIG = SIG[['node_id', 'start_unix', 'start_time', 'phase', 'state_A', 'state_B']]\n", " SIG['duration'] = SIG['start_time'].shift(-1) - SIG['start_time']\n", " SIG = SIG[:-1]\n", " SIG['duration'] = SIG['duration'].astype(int)\n", " for row in SIG.itertuples():\n", " state = ''\n", " for a, b, in zip(row.state_A, row.state_B):\n", " if a == 'r':\n", " state += b\n", " elif b == 'r':\n", " state += a\n", " elif a == b:\n", " state += a\n", " else:\n", " raise ValueError(f\"예상되지 않은 조합 발생: a={a}, b={b}\")\n", " SIG.at[row.Index, 'state'] = state\n", " SIG = SIG.drop(columns=['start_time', 'state_A', 'state_B'])\n", " self.SIGTABLE.append(SIG)\n", "self.SIGTABLE = pd.concat(self.SIGTABLE)\n", "self.SIGTABLE\n", "print(time.time() - now)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n", "2. 중간산출물을 생성합니다.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:14<00:00, 1200.17it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2-1. 매칭 테이블들을 생성했습니다.\n", "2-2. 비보호우회전(g)을 배정했습니다.\n", "2-3. 직진 및 좌회전(G)을 배정했습니다.\n", "2-2. node2num_cycles.json를 저장했습니다.\n", "3. 이슈사항을 저장합니다.\n" ] } ], "source": [ "self = DailyPreprocessor()\n", "self.main()" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 로드합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 100%|██████████| 17280/17280 [00:15<00:00, 1135.80it/s]\n" ] } ], "source": [ "self.load_data()\n", "self.make_match1()\n", "self.make_match2()\n", "self.make_match3()\n", "self.make_match4()\n", "self.make_match5()" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 0%| | 0/17280 [00:00= 0]\n", " conns = sorted(conns, key=lambda x: x[0])\n", " state = []\n", " # i번째 connection : ci\n", " for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " # j번째 connection : cj\n", " # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n", " # 그외의 경우에는 are_foes = False (g)\n", " for j, cj in conns:\n", " # ci, cj의 합류지점이 같으면 통과\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " # ci, cj가 상충되면 are_foes를 True로 지정.\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", " self.node2init[node_id] = state\n", "\n", "# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n", "for _, row in self.matching.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'\n", "\n", "# 연등교차로\n", "for _, row in self.coord.iterrows():\n", " node_id = row.node_id\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " if not (pd.isna(inc_edge) and pd.isna(out_edge)):\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'\n", "\n", "# 유턴교차로\n", "for _, row in self.uturn.iterrows():\n", " node_id = row.child_id\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " if not (pd.isna(inc_edge) and pd.isna(out_edge)):\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'\n", "\n", "self.node2init['u00']" ] }, { "cell_type": "code", "execution_count": 135, "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", "
parent_idchild_iddirectionconditioninc_edgeout_edge
0i0u00좌회전시571500487_02571500487_01.32
1i2u20보행신호시571542810_01.51571542810_02
2i3u30보행신호시571556452_01571556452_02
3i3u31보행신호시571500475_02571500475_01.26
4i3u32보행신호시571540303_02-571540303_02
5i6u60좌회전시571500535_02-571500535_02
\n", "
" ], "text/plain": [ " parent_id child_id direction condition inc_edge out_edge\n", "0 i0 u00 북 좌회전시 571500487_02 571500487_01.32\n", "1 i2 u20 북 보행신호시 571542810_01.51 571542810_02\n", "2 i3 u30 북 보행신호시 571556452_01 571556452_02\n", "3 i3 u31 동 보행신호시 571500475_02 571500475_01.26\n", "4 i3 u32 서 보행신호시 571540303_02 -571540303_02\n", "5 i6 u60 서 좌회전시 571500535_02 -571500535_02" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.uturn" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'c30': ['g', 'g', 'g', 'g', 'g', 'g'],\n", " 'i0': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r'],\n", " 'i1': ['g', 'r', 'r', 'r', 'r', 'r', 'r', 'g', 'r', 'r'],\n", " 'i2': ['r', 'r', 'g', 'r', 'r', 'r', 'r'],\n", " 'i3': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i6': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i7': ['r', 'r', 'r', 'g', 'g', 'r', 'r'],\n", " 'i8': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i9': ['r', 'r', 'r', 'r'],\n", " 'u00': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g', 'g'],\n", " 'u20': ['g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u30': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g'],\n", " 'u31': ['g', 'g', 'g', 'g', 'r', 'g', 'g', 'g'],\n", " 'u32': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'r'],\n", " 'u60': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'r']}" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.node2init" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "self.node2inter = dict(zip(self.inter_node['node_id'], self.inter_node['inter_no']))\n", "\n", "self.parent_ids = sorted(self.inter_node[self.inter_node.inter_type=='parent'].node_id.unique())\n", "self.child_ids = sorted(self.inter_node[self.inter_node.inter_type=='child'].node_id.unique())\n", "self.uturn_ids = sorted(self.uturn.child_id.unique())\n", "self.coord_ids = sorted(self.coord.child_id.unique())\n", "\n", "ch2pa = {} # child to parent\n", "for child_id in self.child_ids:\n", " parent_no = self.inter_node[self.inter_node.node_id==child_id].inter_no.iloc[0]\n", " sub_inter_node = self.inter_node[self.inter_node.inter_no==parent_no]\n", " ch2pa[child_id] = sub_inter_node[sub_inter_node.inter_type=='parent'].iloc[0].node_id\n", "directions = ['북', '북동', '동', '남동', '남', '남서', '서', '북서'] # 정북기준 시계방향으로 8방향\n" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n", "cmatches = []\n", "for _, row in self.uturn.iterrows():\n", " child_id = row.child_id\n", " parent_id = row.parent_id\n", " direction = row.direction\n", " condition = row.condition\n", " inc_edge_id = row.inc_edge\n", " out_edge_id = row.out_edge\n", " # match5에서 parent_id에 해당하는 행들을 가져옴\n", " cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n", " cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n", " cmatch['node_id'] = child_id\n", " cmatch[['inc_edge', 'out_edge']] = np.nan\n", "\n", " # condition 별로 inc_dire, out_dire_A, out_dire_B를 정함\n", " ind = directions.index(direction)\n", " if condition == \"좌회전시\":\n", " inc_dire = direction\n", " out_dire_A = out_dire_B = directions[(ind + 2) % len(directions)]\n", " elif condition == \"보행신호시\":\n", " inc_dire = directions[(ind + 2) % len(directions)]\n", " out_dire_A = directions[(ind - 2) % len(directions)]\n", " out_dire_B = directions[(ind - 2) % len(directions)]\n", "\n", " # (inc_dire, out_dire_A, out_dire_B) 별로 inc_edge_id, out_edge_id를 정함\n", " cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n", " cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n", " if condition == '보행신호시':\n", " # 이동류번호가 17(보행신호)이면서 유턴노드방향으로 가는 신호가 없으면 (inc_edge_id, out_edge_id)를 부여한다.\n", " cmatch.loc[(cmatch.move_no==17) & (cmatch.out_dir!=direction), ['inc_edge', 'out_edge']] = [inc_edge_id, out_edge_id]\n", " # 유턴신호의 이동류번호를 19로 부여한다.\n", " cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_A), 'move_no'] = 19\n", " cmatch.loc[(cmatch.inc_dir==inc_dire) & (cmatch.out_dir==out_dire_B), 'move_no'] = 19\n", " cmatches.append(cmatch)\n" ] }, { "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
01781A20NaNNaNNaNNaNNaNNaNc30
11781B20NaNNaNNaNNaNNaNNaNc30
21782A20NaNNaNNaNNaN571542116_01-571542116_02.96c30
31782B20NaNNaNNaNNaN571542116_02.96571542116_02.164c30
41783A20NaNNaNNaNNaN571542116_01-571542116_02.96c30
51783B20NaNNaNNaNNaN571542116_02.96571542116_02.164c30
61784A20NaNNaNNaNNaN571542116_01-571542116_02.96c30
71784B20NaNNaNNaNNaN571542116_02.96571542116_02.164c30
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle \\\n", "0 178 1 A 20 NaN NaN NaN \n", "1 178 1 B 20 NaN NaN NaN \n", "2 178 2 A 20 NaN NaN NaN \n", "3 178 2 B 20 NaN NaN NaN \n", "4 178 3 A 20 NaN NaN NaN \n", "5 178 3 B 20 NaN NaN NaN \n", "6 178 4 A 20 NaN NaN NaN \n", "7 178 4 B 20 NaN NaN NaN \n", "\n", " out_angle inc_edge out_edge node_id \n", "0 NaN NaN NaN c30 \n", "1 NaN NaN NaN c30 \n", "2 NaN 571542116_01 -571542116_02.96 c30 \n", "3 NaN 571542116_02.96 571542116_02.164 c30 \n", "4 NaN 571542116_01 -571542116_02.96 c30 \n", "5 NaN 571542116_02.96 571542116_02.164 c30 \n", "6 NaN 571542116_01 -571542116_02.96 c30 \n", "7 NaN 571542116_02.96 571542116_02.164 c30 " ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "# 각 coordination node에 대하여 (inc_edge_id, out_edge_id) 부여\n", "self.coord['inter_no'] = self.coord['parent_id'].map(self.node2inter)\n", "self.coord = self.coord.rename(columns={'child_id':'node_id'})\n", "self.coord[['inc_dir', 'out_dir', 'inc_angle','out_angle']] = np.nan\n", "self.coord['move_no'] = 20\n", "self.coord = self.coord[['inter_no', 'phase_no', 'ring_type', 'move_no', 'inc_dir', 'out_dir', 'inc_angle','out_angle', 'inc_edge', 'out_edge', 'node_id']]\n", "self.coord" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "# display(coord)\n", "cmatches = pd.concat(cmatches)\n", "self.match6 = pd.concat([self.match5, cmatches, self.coord]).drop_duplicates().sort_values(by=['inter_no', 'node_id', 'phase_no', 'ring_type'])\n", "# self.match6.to_csv(os.path.join(self.path_intermediates, 'match6.csv'))\n" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'c30': ['g', 'g', 'g', 'g', 'g', 'g'],\n", " 'i0': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r'],\n", " 'i1': ['g', 'r', 'r', 'g', 'g', 'g', 'r', 'g', 'r', 'r'],\n", " 'i2': ['g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'i3': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i6': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i7': ['g', 'g', 'r', 'g', 'g', 'r', 'r'],\n", " 'i8': ['g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r',\n", " 'g',\n", " 'r',\n", " 'r',\n", " 'r'],\n", " 'i9': ['g', 'g', 'g', 'g'],\n", " 'u00': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u20': ['g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u30': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u31': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u32': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g'],\n", " 'u60': ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g']}" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.node2init" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "self.node2init = {}\n", "node_id = 'c30'\n", "node = self.net.getNode(node_id)\n", "\n", "node_id = node.getID()\n", "# 모든 connection\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", "# i번째 connection : ci\n", "for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " # j번째 connection : cj\n", " # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n", " # 그외의 경우에는 are_foes = False (g)\n", " for j, cj in conns:\n", " # ci, cj의 합류지점이 같으면 통과\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " # ci, cj가 상충되면 are_foes를 True로 지정.\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", "self.node2init[node_id] = state" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'Series' object has no attribute 'inc_edge'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[96], line 34\u001b[0m\n\u001b[0;32m 32\u001b[0m node_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mnode_id\n\u001b[0;32m 33\u001b[0m move_no \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mmove_no\n\u001b[1;32m---> 34\u001b[0m inc_edge \u001b[38;5;241m=\u001b[39m \u001b[43mrow\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minc_edge\u001b[49m\n\u001b[0;32m 35\u001b[0m out_edge \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mout_edge\n\u001b[0;32m 36\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m move_no \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m21\u001b[39m:\n", "File \u001b[1;32mc:\\Github\\sts\\sts\\lib\\site-packages\\pandas\\core\\generic.py:5989\u001b[0m, in \u001b[0;36mNDFrame.__getattr__\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 5982\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[0;32m 5983\u001b[0m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_internal_names_set\n\u001b[0;32m 5984\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_metadata\n\u001b[0;32m 5985\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_accessors\n\u001b[0;32m 5986\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_info_axis\u001b[38;5;241m.\u001b[39m_can_hold_identifiers_and_holds_name(name)\n\u001b[0;32m 5987\u001b[0m ):\n\u001b[0;32m 5988\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m[name]\n\u001b[1;32m-> 5989\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mobject\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getattribute__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", "\u001b[1;31mAttributeError\u001b[0m: 'Series' object has no attribute 'inc_edge'" ] } ], "source": [ "self.nodes = [self.net.getNode(node_id) for node_id in self.node_ids]\n", "self.node2init = {}\n", "# 모든 노드들을 순회\n", "for node in self.nodes:\n", " node_id = node.getID()\n", " # 모든 connection\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", " # i번째 connection : ci\n", " for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " # j번째 connection : cj\n", " # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n", " # 그외의 경우에는 are_foes = False (g)\n", " for j, cj in conns:\n", " # ci, cj의 합류지점이 같으면 통과\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " # ci, cj가 상충되면 are_foes를 True로 지정.\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", " self.node2init[node_id] = state\n", "\n", "# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n", "for _, row in self.matching.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'\n", "\n", "# 연등교차로에도 마찬가지로 신호가 부여되어 있는 경우에 r 부여\n", "for _, row in self.coord.iterrows():\n", " node_id = row.node_id\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'\n", "\n", "\n", "# json 파일로 저장\n", "with open(os.path.join(self.path_intermediates, 'node2init.json'), 'w') as file:\n", " json.dump(self.node2init, file)\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'Pandas' object has no attribute 'inc_edge'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[48], line 9\u001b[0m\n\u001b[0;32m 7\u001b[0m node_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mnode_id\n\u001b[0;32m 8\u001b[0m move_no \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mmove_no\n\u001b[1;32m----> 9\u001b[0m inc_edge \u001b[38;5;241m=\u001b[39m \u001b[43mrow\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minc_edge\u001b[49m\n\u001b[0;32m 10\u001b[0m out_edge \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mout_edge\n\u001b[0;32m 11\u001b[0m state \u001b[38;5;241m=\u001b[39m copy\u001b[38;5;241m.\u001b[39mdeepcopy(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnode2init)[node_id]\n", "\u001b[1;31mAttributeError\u001b[0m: 'Pandas' object has no attribute 'inc_edge'" ] } ], "source": [ "import copy\n", "# assign signals on matching\n", "self.matching['init_state'] = self.matching['node_id'].map(self.node2init)\n", "self.matching['state'] = self.matching['init_state'].map(lambda x:''.join(x))\n", "# matching의 각 행을 순회\n", "for row in self.matching.itertuples(index=True):\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " state = copy.deepcopy(self.node2init)[node_id]\n", "\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " self.matching.at[row.Index, 'state'] = ''.join(state)\n", "\n", "self.matching = self.matching.dropna(subset='state')\n", "self.matching = self.matching.reset_index(drop=True)\n", "self.matching = self.matching[['inter_no', 'node_id', 'move_no', 'state']]\n", "\n", "# assign signals on match6\n", "\n", "self.match6 = self.match6.reset_index(drop=True)\n", "self.match6['init_state'] = self.match6['node_id'].map(self.node2init)\n", "self.match6['state'] = self.match6['init_state'].map(lambda x:''.join(x))\n", "\n", "# match6의 각 행을 순회\n", "for i, row in self.match6.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " state = copy.deepcopy(self.node2init)[node_id]\n", " if (pd.isna(inc_edge)) or (pd.isna(out_edge)):\n", " continue\n", " if (move_no != 21):\n", " # print(i, node_id, move_no, ''.join(state))\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " state[index] = 'G'\n", " # print(i, node_id, move_no, index, ''.join(state))\n", " self.match6.at[i, 'state'] = ''.join(state)\n", "\n", "self.match6 = self.match6.dropna(subset='state')\n", "self.match6 = self.match6.reset_index(drop=True)\n", "self.match6 = self.match6[['inter_no', 'node_id', 'phase_no', 'ring_type', 'move_no', 'state']]\n", "self.match6" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['g', 'g', 'g', 'g', 'g', 'g', 'g']\n" ] }, { "ename": "KeyError", "evalue": "'i0'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[146], line 41\u001b[0m\n\u001b[0;32m 39\u001b[0m index \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39mgetTLLinkIndex()\n\u001b[0;32m 40\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m---> 41\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnode2init\u001b[49m\u001b[43m[\u001b[49m\u001b[43mnode_id\u001b[49m\u001b[43m]\u001b[49m[index] \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 43\u001b[0m \u001b[38;5;66;03m# 연등교차로에도 마찬가지로 신호가 부여되어 있는 경우에 r 부여\u001b[39;00m\n\u001b[0;32m 44\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m _, row \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcoord\u001b[38;5;241m.\u001b[39miterrows():\n", "\u001b[1;31mKeyError\u001b[0m: 'i0'" ] } ], "source": [ "node_id = 'i2'\n", "node = self.net.getNode(node_id)\n", "self.node2init = {}\n", "# 모든 connection\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", "# i번째 connection : ci\n", "for i, ci in conns:\n", " if ci.getTLLinkIndex() < 0:\n", " continue\n", " are_foes = False\n", " # j번째 connection : cj\n", " # 합류지점이 다르면서 상충되는 cj가 존재하면 are_foes = True (r)\n", " # 그외의 경우에는 are_foes = False (g)\n", " for j, cj in conns:\n", " # ci, cj의 합류지점이 같으면 통과\n", " if ci.getTo() == cj.getTo():\n", " continue\n", " # ci, cj가 상충되면 are_foes를 True로 지정.\n", " if node.areFoes(i, j):\n", " are_foes = True\n", " break\n", " state.append('r' if are_foes else 'g')\n", "self.node2init[node_id] = state\n", "print(state)\n", "\n", "# 어떤 연결과도 상충이 일어나지는 않지만, 신호가 부여되어 있는 경우에는 r을 부여\n", "for _, row in self.matching.iterrows():\n", " node_id = row.node_id\n", " move_no = row.move_no\n", " inc_edge = row.inc_edge\n", " out_edge = row.out_edge\n", " if move_no != 21:\n", " inc_edge = self.net.getEdge(inc_edge)\n", " out_edge = self.net.getEdge(out_edge)\n", " for conn in inc_edge.getConnections(out_edge):\n", " index = conn.getTLLinkIndex()\n", " if index >= 0:\n", " self.node2init[node_id][index] = 'r'" ] }, { "cell_type": "code", "execution_count": 161, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
141771A8180000
151771B4001176
161772A7000090
171772B3179270
181773A17NaNNaNNaNNaN
191773B18NaNNaNNaNNaN
201774A5268000
211774B1090180
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n", "14 177 1 A 8 남 북 180 000\n", "15 177 1 B 4 북 남 001 176\n", "16 177 2 A 7 북 동 000 090\n", "17 177 2 B 3 남 서 179 270\n", "18 177 3 A 17 NaN NaN NaN NaN\n", "19 177 3 B 18 NaN NaN NaN NaN\n", "20 177 4 A 5 서 북 268 000\n", "21 177 4 B 1 동 남 090 180" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.match4[self.match4.inter_no==177]" ] }, { "cell_type": "code", "execution_count": 160, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
141771A8180000-571542809_01571542811_01i2
151771B4001176571542811_02571542809_01i2
161772A7000090571542811_02571542107_01i2
171772B3179270-571542809_01571542809_01i2
181773A17NaNNaNNaNNaNNaNNaNi2
191773B18NaNNaNNaNNaNNaNNaNi2
201774A5268000-571542809_01571542811_01i2
211774B1090180571542107_02571542809_01i2
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "14 177 1 A 8 남 북 180 000 \n", "15 177 1 B 4 북 남 001 176 \n", "16 177 2 A 7 북 동 000 090 \n", "17 177 2 B 3 남 서 179 270 \n", "18 177 3 A 17 NaN NaN NaN NaN \n", "19 177 3 B 18 NaN NaN NaN NaN \n", "20 177 4 A 5 서 북 268 000 \n", "21 177 4 B 1 동 남 090 180 \n", "\n", " inc_edge out_edge node_id \n", "14 -571542809_01 571542811_01 i2 \n", "15 571542811_02 571542809_01 i2 \n", "16 571542811_02 571542107_01 i2 \n", "17 -571542809_01 571542809_01 i2 \n", "18 NaN NaN i2 \n", "19 NaN NaN i2 \n", "20 -571542809_01 571542811_01 i2 \n", "21 571542107_02 571542809_01 i2 " ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "self.match5[self.match5.node_id=='i2']" ] }, { "cell_type": "code", "execution_count": 151, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
141771A8180000-571542809_01571542811_01i2
151771B4001176571542811_02571542809_01i2
161772A7000090571542811_02571542107_01i2
171772B3179270-571542809_01571542809_01i2
181773A17NaNNaNNaNNaNNaNNaNi2
191773B18NaNNaNNaNNaNNaNNaNi2
201774A5268000-571542809_01571542811_01i2
211774B1090180571542107_02571542809_01i2
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "14 177 1 A 8 남 북 180 000 \n", "15 177 1 B 4 북 남 001 176 \n", "16 177 2 A 7 북 동 000 090 \n", "17 177 2 B 3 남 서 179 270 \n", "18 177 3 A 17 NaN NaN NaN NaN \n", "19 177 3 B 18 NaN NaN NaN NaN \n", "20 177 4 A 5 서 북 268 000 \n", "21 177 4 B 1 동 남 090 180 \n", "\n", " inc_edge out_edge node_id \n", "14 -571542809_01 571542811_01 i2 \n", "15 571542811_02 571542809_01 i2 \n", "16 571542811_02 571542107_01 i2 \n", "17 -571542809_01 571542809_01 i2 \n", "18 NaN NaN i2 \n", "19 NaN NaN i2 \n", "20 -571542809_01 571542811_01 i2 \n", "21 571542107_02 571542809_01 i2 " ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.match5[self.match5.node_id=='i2']" ] }, { "cell_type": "code", "execution_count": 148, "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", "
inter_nomove_noinc_dirout_dirinc_edgeout_edgenode_id
191771571542107_02571542809_01i2
201772-571542809_01571542107_01i2
211773-571542809_01571542809_01i2
221774571542811_02571542809_01i2
231775-571542809_01571542811_01i2
241776571542107_02571542809_01i2
251777571542811_02571542107_01i2
261778-571542809_01571542811_01i2
2717721571542811_02571542809_01i2
2817721-571542809_01571542809_01i2
2917721-571542809_01571542107_01i2
3017721571542107_02571542811_01i2
\n", "
" ], "text/plain": [ " inter_no move_no inc_dir out_dir inc_edge out_edge node_id\n", "19 177 1 동 남 571542107_02 571542809_01 i2\n", "20 177 2 서 동 -571542809_01 571542107_01 i2\n", "21 177 3 남 서 -571542809_01 571542809_01 i2\n", "22 177 4 북 남 571542811_02 571542809_01 i2\n", "23 177 5 서 북 -571542809_01 571542811_01 i2\n", "24 177 6 동 서 571542107_02 571542809_01 i2\n", "25 177 7 북 동 571542811_02 571542107_01 i2\n", "26 177 8 남 북 -571542809_01 571542811_01 i2\n", "27 177 21 북 서 571542811_02 571542809_01 i2\n", "28 177 21 서 남 -571542809_01 571542809_01 i2\n", "29 177 21 남 동 -571542809_01 571542107_01 i2\n", "30 177 21 동 북 571542107_02 571542811_01 i2" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.matching[self.matching.node_id=='i2']" ] } ], "metadata": { "kernelspec": { "display_name": "sts", "language": "python", "name": "sts" }, "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 }