{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import numpy as np\n", "import sys\n", "import copy\n", "sys.path.append('../../Scripts')\n", "from preprocess_daily import DailyPreprocessor\n", "from generate_signals import SignalGenerator" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n", "4. 통합 테이블을 생성합니다.\n" ] } ], "source": [ "self = SignalGenerator()\n", "self.prepare_data() # 1 \n", "self.process_history() # 2\n", "self.process_movement() # 3\n", "self.make_histids() # 4\n", "self.set_timepoints() # 5-1\n", "self.assign_red_yellow() # 5-2" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['i0', 'i1', 'i2', 'i3', 'i6', 'i7', 'i8', 'i9']\n", "['u00', 'u20', 'u30', 'u31', 'u32', 'u60']\n", "['c30']\n" ] } ], "source": [ "print(self.parent_ids)\n", "print(self.uturn_ids)\n", "print(self.coord_ids)" ] }, { "cell_type": "code", "execution_count": 4, "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", "
node_idstart_unixphasedurationstate
0i017044183301g_1g39gGGrgrrrgGGGGrgrr
1i017044183301y_1y4gyyrgrrrgyyyyrgrr
2i017044183302r_2r1grrrgrrrgrrrrrgrr
3i017044183302g_2g40grrGgrrrgrrrrGgrr
4i017044183302y_2y4grrygrrrgrrrrygrr
5i017044183303r_3r1grrrgGGrgrrrrrgrr
6i017044183303g_3g28grrrgGGGgrrrrrgrr
7i017044183303g_3y4grrrgGGygrrrrrgrr
8i017044183303g_4r1grrrgGGrgrrrrrgGr
9i017044183303g_4g17grrrgGGrgrrrrrgGr
10i017044183303y_4g4grrrgyyrgrrrrrgGr
11i017044183304r_4g1grrrgrrrgrrrrrgGr
12i017044183304g_4g32grrrgrrrgrrrrrgGG
13i017044183304y_4y4grrrgrrrgrrrrrgyy
14i017044185101r_1r1grrrgrrrgrrrrrgrr
15i017044185101g_1g38gGGrgrrrgGGGGrgrr
16i017044185101y_1y4gyyrgrrrgyyyyrgrr
17i017044185102r_2r1grrrgrrrgrrrrrgrr
18i017044185102g_2g40grrGgrrrgrrrrGgrr
19i017044185102y_2y4grrygrrrgrrrrygrr
20i017044185103r_3r1grrrgGGrgrrrrrgrr
21i017044185103g_3g28grrrgGGGgrrrrrgrr
22i017044185103g_3y4grrrgGGygrrrrrgrr
23i017044185103g_4r1grrrgGGrgrrrrrgGr
24i017044185103g_4g17grrrgGGrgrrrrrgGr
25i017044185103y_4g4grrrgyyrgrrrrrgGr
26i017044185104r_4g1grrrgrrrgrrrrrgGr
27i017044185104g_4g32grrrgrrrgrrrrrgGG
28i017044185104y_4y4grrrgrrrgrrrrrgyy
29i017044186901r_1r1grrrgrrrgrrrrrgrr
30i017044186901g_1g38gGGrgrrrgGGGGrgrr
31i017044186901y_1y4gyyrgrrrgyyyyrgrr
32i017044186902r_2r1grrrgrrrgrrrrrgrr
33i017044186902g_2g40grrGgrrrgrrrrGgrr
34i017044186902y_2y4grrygrrrgrrrrygrr
35i017044186903r_3r1grrrgGGrgrrrrrgrr
36i017044186903g_3g28grrrgGGGgrrrrrgrr
37i017044186903g_3y22grrrgGGygrrrrrgrr
\n", "
" ], "text/plain": [ " node_id start_unix phase duration state\n", "0 i0 1704418330 1g_1g 39 gGGrgrrrgGGGGrgrr\n", "1 i0 1704418330 1y_1y 4 gyyrgrrrgyyyyrgrr\n", "2 i0 1704418330 2r_2r 1 grrrgrrrgrrrrrgrr\n", "3 i0 1704418330 2g_2g 40 grrGgrrrgrrrrGgrr\n", "4 i0 1704418330 2y_2y 4 grrygrrrgrrrrygrr\n", "5 i0 1704418330 3r_3r 1 grrrgGGrgrrrrrgrr\n", "6 i0 1704418330 3g_3g 28 grrrgGGGgrrrrrgrr\n", "7 i0 1704418330 3g_3y 4 grrrgGGygrrrrrgrr\n", "8 i0 1704418330 3g_4r 1 grrrgGGrgrrrrrgGr\n", "9 i0 1704418330 3g_4g 17 grrrgGGrgrrrrrgGr\n", "10 i0 1704418330 3y_4g 4 grrrgyyrgrrrrrgGr\n", "11 i0 1704418330 4r_4g 1 grrrgrrrgrrrrrgGr\n", "12 i0 1704418330 4g_4g 32 grrrgrrrgrrrrrgGG\n", "13 i0 1704418330 4y_4y 4 grrrgrrrgrrrrrgyy\n", "14 i0 1704418510 1r_1r 1 grrrgrrrgrrrrrgrr\n", "15 i0 1704418510 1g_1g 38 gGGrgrrrgGGGGrgrr\n", "16 i0 1704418510 1y_1y 4 gyyrgrrrgyyyyrgrr\n", "17 i0 1704418510 2r_2r 1 grrrgrrrgrrrrrgrr\n", "18 i0 1704418510 2g_2g 40 grrGgrrrgrrrrGgrr\n", "19 i0 1704418510 2y_2y 4 grrygrrrgrrrrygrr\n", "20 i0 1704418510 3r_3r 1 grrrgGGrgrrrrrgrr\n", "21 i0 1704418510 3g_3g 28 grrrgGGGgrrrrrgrr\n", "22 i0 1704418510 3g_3y 4 grrrgGGygrrrrrgrr\n", "23 i0 1704418510 3g_4r 1 grrrgGGrgrrrrrgGr\n", "24 i0 1704418510 3g_4g 17 grrrgGGrgrrrrrgGr\n", "25 i0 1704418510 3y_4g 4 grrrgyyrgrrrrrgGr\n", "26 i0 1704418510 4r_4g 1 grrrgrrrgrrrrrgGr\n", "27 i0 1704418510 4g_4g 32 grrrgrrrgrrrrrgGG\n", "28 i0 1704418510 4y_4y 4 grrrgrrrgrrrrrgyy\n", "29 i0 1704418690 1r_1r 1 grrrgrrrgrrrrrgrr\n", "30 i0 1704418690 1g_1g 38 gGGrgrrrgGGGGrgrr\n", "31 i0 1704418690 1y_1y 4 gyyrgrrrgyyyyrgrr\n", "32 i0 1704418690 2r_2r 1 grrrgrrrgrrrrrgrr\n", "33 i0 1704418690 2g_2g 40 grrGgrrrgrrrrGgrr\n", "34 i0 1704418690 2y_2y 4 grrygrrrgrrrrygrr\n", "35 i0 1704418690 3r_3r 1 grrrgGGrgrrrrrgrr\n", "36 i0 1704418690 3g_3g 28 grrrgGGGgrrrrrgrr\n", "37 i0 1704418690 3g_3y 22 grrrgGGygrrrrrgrr" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "node_id = self.parent_ids[0]\n", "self.SIGTABLE[self.SIGTABLE.node_id==node_id]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1. 데이터를 준비합니다.\n", "1-1. 네트워크가 로드되었습니다.\n", "1-2. 테이블들이 로드되었습니다.\n", "2. 신호이력 테이블을 변환합니다.\n", "3. 이동류정보 테이블을 변환합니다.\n", "4. 통합 테이블을 생성합니다.\n" ] } ], "source": [ "self = SignalGenerator()\n", "self.prepare_data() # 1 \n", "self.process_history() # 2\n", "self.process_movement() # 3\n", "self.make_histids() # 4\n", "self.set_timepoints() # 5-1" ] }, { "cell_type": "code", "execution_count": 14, "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", "
inter_nonode_idstart_unixphas_Aphas_Bmove_Amove_Bdurationstate_Astate_Bphase_sumo
86206i71704418700118445rrrggGGGGrggrr0
87206i7170441870022171853rrrggrrrrrggrr1
88206i71704418700338426rrrggGGGGrggrr2
89206i7170441870044171826rrrggrrrrrggrr3
90206i71704418850118445rrrggGGGGrggrr0
91206i7170441885022171853rrrggrrrrrggrr1
92206i71704418850338426rrrggGGGGrggrr2
93206i7170441885044171826rrrggrrrrrggrr3
94206i71704419000118445rrrggGGGGrggrr0
95206i7170441900022171853rrrggrrrrrggrr1
96206i71704419000338426rrrggGGGGrggrr2
97206i7170441900044171826rrrggrrrrrggrr3
98206i71704419150118445rrrggGGGGrggrr0
99206i7170441915022171853rrrggrrrrrggrr1
100206i71704419150338426rrrggGGGGrggrr2
101206i7170441915044171826rrrggrrrrrggrr3
\n", "
" ], "text/plain": [ " inter_no node_id start_unix phas_A phas_B move_A move_B duration \\\n", "86 206 i7 1704418700 1 1 8 4 45 \n", "87 206 i7 1704418700 2 2 17 18 53 \n", "88 206 i7 1704418700 3 3 8 4 26 \n", "89 206 i7 1704418700 4 4 17 18 26 \n", "90 206 i7 1704418850 1 1 8 4 45 \n", "91 206 i7 1704418850 2 2 17 18 53 \n", "92 206 i7 1704418850 3 3 8 4 26 \n", "93 206 i7 1704418850 4 4 17 18 26 \n", "94 206 i7 1704419000 1 1 8 4 45 \n", "95 206 i7 1704419000 2 2 17 18 53 \n", "96 206 i7 1704419000 3 3 8 4 26 \n", "97 206 i7 1704419000 4 4 17 18 26 \n", "98 206 i7 1704419150 1 1 8 4 45 \n", "99 206 i7 1704419150 2 2 17 18 53 \n", "100 206 i7 1704419150 3 3 8 4 26 \n", "101 206 i7 1704419150 4 4 17 18 26 \n", "\n", " state_A state_B phase_sumo \n", "86 rrrggGG GGrggrr 0 \n", "87 rrrggrr rrrggrr 1 \n", "88 rrrggGG GGrggrr 2 \n", "89 rrrggrr rrrggrr 3 \n", "90 rrrggGG GGrggrr 0 \n", "91 rrrggrr rrrggrr 1 \n", "92 rrrggGG GGrggrr 2 \n", "93 rrrggrr rrrggrr 3 \n", "94 rrrggGG GGrggrr 0 \n", "95 rrrggrr rrrggrr 1 \n", "96 rrrggGG GGrggrr 2 \n", "97 rrrggrr rrrggrr 3 \n", "98 rrrggGG GGrggrr 0 \n", "99 rrrggrr rrrggrr 1 \n", "100 rrrggGG GGrggrr 2 \n", "101 rrrggrr rrrggrr 3 " ] }, "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_idstart_unixphasedurationstate
0i717044187001g_1g41GGrggGG
1i717044187001y_1y4yyrggyy
2i717044187002r_2r0rrrggrr
3i717044187002r_2g0rrrggrr
4i717044187002g_2r0rrrggrr
..................
66i717044191502y_2y4rrrggrr
67i717044191503g_3r0rrrggGG
68i717044191503g_3g0GGrggGG
69i717044191503r_3r0rrrggrr
70i717044191503r_3g22GGrggrr
\n", "

71 rows × 5 columns

\n", "
" ], "text/plain": [ " node_id start_unix phase duration state\n", "0 i7 1704418700 1g_1g 41 GGrggGG\n", "1 i7 1704418700 1y_1y 4 yyrggyy\n", "2 i7 1704418700 2r_2r 0 rrrggrr\n", "3 i7 1704418700 2r_2g 0 rrrggrr\n", "4 i7 1704418700 2g_2r 0 rrrggrr\n", ".. ... ... ... ... ...\n", "66 i7 1704419150 2y_2y 4 rrrggrr\n", "67 i7 1704419150 3g_3r 0 rrrggGG\n", "68 i7 1704419150 3g_3g 0 GGrggGG\n", "69 i7 1704419150 3r_3r 0 rrrggrr\n", "70 i7 1704419150 3r_3g 22 GGrggrr\n", "\n", "[71 rows x 5 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "NODE_ID = 'i7'\n", "sigtable = self.sigtable[self.sigtable.node_id==NODE_ID]\n", "display(sigtable)\n", "\n", "self.SIGTABLE = []\n", "for node_id in self.node_ids:\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 = self.cumulate(sig_A, 'A')\n", " csig_B = self.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", "\n", "SIGTABLE = self.SIGTABLE[self.SIGTABLE.node_id==NODE_ID]\n", "display(SIGTABLE)" ] }, { "cell_type": "code", "execution_count": 47, "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", "
start_unixphas_Adurationstate_Ared_Ayellow_A
01704418700145rrrggGG04
11704418700253rrrggrr04
21704418700326rrrggGG04
31704418700426rrrggrr04
41704418850145rrrggGG04
\n", "
" ], "text/plain": [ " start_unix phas_A duration state_A red_A yellow_A\n", "0 1704418700 1 45 rrrggGG 0 4\n", "1 1704418700 2 53 rrrggrr 0 4\n", "2 1704418700 3 26 rrrggGG 0 4\n", "3 1704418700 4 26 rrrggrr 0 4\n", "4 1704418850 1 45 rrrggGG 0 4" ] }, "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", "
start_unixphas_Bdurationstate_Bred_Byellow_B
01704418700145GGrggrr04
11704418700253rrrggrr04
21704418700326GGrggrr04
31704418700426rrrggrr04
41704418850145GGrggrr04
\n", "
" ], "text/plain": [ " start_unix phas_B duration state_B red_B yellow_B\n", "0 1704418700 1 45 GGrggrr 0 4\n", "1 1704418700 2 53 rrrggrr 0 4\n", "2 1704418700 3 26 GGrggrr 0 4\n", "3 1704418700 4 26 rrrggrr 0 4\n", "4 1704418850 1 45 GGrggrr 0 4" ] }, "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", "
start_timephas_Astate_Astart_unix
001grrrggGG1704418700
1411yrrrggyy1704418700
2452rrrrggrr1704418700
3452grrrggrr1704418700
4942yrrrggrr1704418700
\n", "
" ], "text/plain": [ " start_time phas_A state_A start_unix\n", "0 0 1g rrrggGG 1704418700\n", "1 41 1y rrrggyy 1704418700\n", "2 45 2r rrrggrr 1704418700\n", "3 45 2g rrrggrr 1704418700\n", "4 94 2y rrrggrr 1704418700" ] }, "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", "
start_timephas_Bstate_Bstart_unix
001gGGrggrr1704418700
1411yyyrggrr1704418700
2452rrrrggrr1704418700
3452grrrggrr1704418700
4942yrrrggrr1704418700
\n", "
" ], "text/plain": [ " start_time phas_B state_B start_unix\n", "0 0 1g GGrggrr 1704418700\n", "1 41 1y yyrggrr 1704418700\n", "2 45 2r rrrggrr 1704418700\n", "3 45 2g rrrggrr 1704418700\n", "4 94 2y rrrggrr 1704418700" ] }, "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", "
node_idstart_unixphasedurationstate
0u6017044187001g_1g41GGrggGG
1u6017044187001y_1y4yyrggyy
2u6017044187002r_2r0rrrggrr
3u6017044187002r_2g0rrrggrr
4u6017044187002g_2r0rrrggrr
\n", "
" ], "text/plain": [ " node_id start_unix phase duration state\n", "0 u60 1704418700 1g_1g 41 GGrggGG\n", "1 u60 1704418700 1y_1y 4 yyrggyy\n", "2 u60 1704418700 2r_2r 0 rrrggrr\n", "3 u60 1704418700 2r_2g 0 rrrggrr\n", "4 u60 1704418700 2g_2r 0 rrrggrr" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "NODE_ID = 'i7'\n", "sig = self.sigtable[self.sigtable.node_id==NODE_ID]\n", "# display(sig.head())\n", "\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", "\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", "# display(sig.head())\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", "display(sig_A.head())\n", "display(sig_B.head())\n", "\n", "csig_A = self.cumulate(sig_A, 'A')\n", "csig_B = self.cumulate(sig_B, 'B')\n", "\n", "display(csig_A.head())\n", "display(csig_B.head())\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", "\n", "display(SIG.head())" ] }, { "cell_type": "code", "execution_count": 50, "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", "
node_idstart_unixphasedurationstate
0u6017044187001g_1g41GGrggGG
1u6017044187001y_1y4yyrggyy
2u6017044187002r_2r0rrrggrr
3u6017044187002r_2g0rrrggrr
4u6017044187002g_2r0rrrggrr
5u6017044187002g_2g49rrrggrr
6u6017044187002y_2y4rrrggrr
7u6017044187003r_3r0rrrggrr
8u6017044187003r_3g0GGrggrr
9u6017044187003g_3r0rrrggGG
\n", "
" ], "text/plain": [ " node_id start_unix phase duration state\n", "0 u60 1704418700 1g_1g 41 GGrggGG\n", "1 u60 1704418700 1y_1y 4 yyrggyy\n", "2 u60 1704418700 2r_2r 0 rrrggrr\n", "3 u60 1704418700 2r_2g 0 rrrggrr\n", "4 u60 1704418700 2g_2r 0 rrrggrr\n", "5 u60 1704418700 2g_2g 49 rrrggrr\n", "6 u60 1704418700 2y_2y 4 rrrggrr\n", "7 u60 1704418700 3r_3r 0 rrrggrr\n", "8 u60 1704418700 3r_3g 0 GGrggrr\n", "9 u60 1704418700 3g_3r 0 rrrggGG" ] }, "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", "
node_idstart_unixphasedurationstate
0u6017044187001g_1g41GGrggGG
1u6017044187001y_1y4yyrggyy
5u6017044187002g_2g49rrrggrr
6u6017044187002y_2y4rrrggrr
10u6017044187003g_3g22GGrggGG
11u6017044187003y_3y4yyrggyy
15u6017044187004g_4g22rrrggrr
16u6017044187004y_4y4rrrggrr
20u6017044188501g_1g41GGrggGG
21u6017044188501y_1y4yyrggyy
\n", "
" ], "text/plain": [ " node_id start_unix phase duration state\n", "0 u60 1704418700 1g_1g 41 GGrggGG\n", "1 u60 1704418700 1y_1y 4 yyrggyy\n", "5 u60 1704418700 2g_2g 49 rrrggrr\n", "6 u60 1704418700 2y_2y 4 rrrggrr\n", "10 u60 1704418700 3g_3g 22 GGrggGG\n", "11 u60 1704418700 3y_3y 4 yyrggyy\n", "15 u60 1704418700 4g_4g 22 rrrggrr\n", "16 u60 1704418700 4y_4y 4 rrrggrr\n", "20 u60 1704418850 1g_1g 41 GGrggGG\n", "21 u60 1704418850 1y_1y 4 yyrggyy" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(SIG.head(10))\n", "display(SIG[SIG.duration!=0].head(10))" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "reds = [f'red_{alph}{i}' for alph in ['A','B'] for i in range(1,9)]\n", "yels = [f'yellow_{alph}{i}' for alph in ['A','B'] for i in range(1,9)]" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inter_nostart_hourstart_minutedura_A1dura_A2dura_A3dura_A4dura_A5dura_A6dura_A7...red_A4red_B4red_A5red_B5red_A6red_B6red_A7red_B7red_A8red_B8
242060033352626000...0000000000
252067044442626000...0000000000
262069045532626000...0000000000
27206183046622626000...0000000000
\n", "

4 rows × 53 columns

\n", "
" ], "text/plain": [ " inter_no start_hour start_minute dura_A1 dura_A2 dura_A3 dura_A4 \\\n", "24 206 0 0 33 35 26 26 \n", "25 206 7 0 44 44 26 26 \n", "26 206 9 0 45 53 26 26 \n", "27 206 18 30 46 62 26 26 \n", "\n", " dura_A5 dura_A6 dura_A7 ... red_A4 red_B4 red_A5 red_B5 red_A6 \\\n", "24 0 0 0 ... 0 0 0 0 0 \n", "25 0 0 0 ... 0 0 0 0 0 \n", "26 0 0 0 ... 0 0 0 0 0 \n", "27 0 0 0 ... 0 0 0 0 0 \n", "\n", " red_B6 red_A7 red_B7 red_A8 red_B8 \n", "24 0 0 0 0 0 \n", "25 0 0 0 0 0 \n", "26 0 0 0 0 0 \n", "27 0 0 0 0 0 \n", "\n", "[4 rows x 53 columns]" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zeros = (self.plan[reds + yels]==0)\n", "self.plan[zeros.any(axis=1)]" ] } ], "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 }