{ "cells": [ { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import numpy as np\n", "import sys\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", "1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n", "1-4. 테이블들의 무결성 검사를 완료했습니다.\n" ] } ], "source": [ "self = DailyPreprocessor()\n", "self.load_data()" ] }, { "cell_type": "code", "execution_count": 3, "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:13<00:00, 1281.32it/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.main()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "이동류정보 불러오는 중: 100%|██████████| 17280/17280 [01:00<00:00, 286.13it/s]\n" ] } ], "source": [ "self.make_match1()" ] }, { "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", "
inter_nophase_noring_typemove_noinc_dirout_dir
01751A8
11751B4
21752A7
31752B3
41753A6
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir\n", "0 175 1 A 8 남 북\n", "1 175 1 B 4 북 남\n", "2 175 2 A 7 북 동\n", "3 175 2 B 3 남 서\n", "4 175 3 A 6 동 서" ] }, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
01751A8179004
11751B4003176
21752A7001095
31752B3179270
41753A6090270
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n", "0 175 1 A 8 남 북 179 004\n", "1 175 1 B 4 북 남 003 176\n", "2 175 2 A 7 북 동 001 095\n", "3 175 2 B 3 남 서 179 270\n", "4 175 3 A 6 동 서 090 270" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "self.make_match2()\n", "self.make_match3()\n", "self.make_match4()\n", "display(self.match3.head())\n", "display(self.match4.head())" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 090180\n", "1 270090\n", "2 179270\n", "3 001180\n", "4 270000\n", "5 090270\n", "6 001090\n", "7 179000\n", "8 180270\n", "9 359180\n", "10 270356\n", "11 180356\n", "12 090180\n", "13 268090\n", "14 179270\n", "15 000180\n", "16 268000\n", "17 090270\n", "18 000090\n", "19 179000\n", "20 090180\n", "21 270090\n", "22 180270\n", "23 000180\n", "24 270000\n", "25 090270\n", "26 000090\n", "27 180000\n", "28 090180\n", "29 270090\n", "30 180270\n", "31 000180\n", "32 270000\n", "33 090270\n", "34 000090\n", "35 180000\n", "36 270090\n", "37 090270\n", "38 000180\n", "39 180000\n", "40 090180\n", "41 270090\n", "42 180270\n", "43 000180\n", "44 270000\n", "45 090270\n", "46 000090\n", "47 180000\n", "Name: angle_code, dtype: object" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.angle_new.angle_code" ] }, { "cell_type": "code", "execution_count": 26, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
01751A8179179
11751B4001001
21752A7001001
31752B3179179
41753A6090090
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n", "0 175 1 A 8 남 북 179 179\n", "1 175 1 B 4 북 남 001 001\n", "2 175 2 A 7 북 동 001 001\n", "3 175 2 B 3 남 서 179 179\n", "4 175 3 A 6 동 서 090 090" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# helper dictionaries\n", "im2inc_angle = dict() # a dictionary that maps (inter_no, move_no) to inc_angle\n", "im2out_angle = dict() # a dictionary that maps (inter_no, move_no) to out_angle\n", "for row in self.angle_new.itertuples():\n", " inter_no = row.inter_no\n", " move_no = row.move_no\n", " angle_code = row.angle_code\n", " im2inc_angle[(inter_no, move_no)] = angle_code[:3]\n", " im2out_angle[(inter_no, move_no)] = angle_code[3:]\n", "for inter_no in self.inter_nos:\n", " im2inc_angle[(inter_no, 17)] = np.nan\n", " im2out_angle[(inter_no, 17)] = np.nan\n", " im2inc_angle[(inter_no, 18)] = np.nan\n", " im2out_angle[(inter_no, 18)] = np.nan\n", "\n", "# 진입, 진출 방위각 매칭\n", "self.match4 = self.match3.copy()\n", "for i, row in self.match4.iterrows():\n", " inter_no = row.inter_no\n", " move_no = row.move_no\n", " self.match4.at[i, 'inc_angle'] = im2inc_angle[(inter_no, move_no)]\n", " self.match4.at[i, 'out_angle'] = im2inc_angle[(inter_no, move_no)]\n", "self.match4.head()" ] }, { "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", "
inter_nomove_noangle_code
01751090180
11752270090
21753179270
31754001180
41755270000
\n", "
" ], "text/plain": [ " inter_no move_no angle_code\n", "0 175 1 090180\n", "1 175 2 270090\n", "2 175 3 179270\n", "3 175 4 001180\n", "4 175 5 270000" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "self.angle_new.head()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['090180', '270090', '179270', '001180', '270000', '090270',\n", " '001090', '179000', '180270', '359180', '270356', '180356',\n", " '090180', '268090', '179270', '000180', '268000', '090270',\n", " '000090', '179000', '090180', '270090', '180270', '000180',\n", " '270000', '090270', '000090', '180000', '090180', '270090',\n", " '180270', '000180', '270000', '090270', '000090', '180000',\n", " '270090', '090270', '000180', '180000', '090180', '270090',\n", " '180270', '000180', '270000', '090270', '000090', '180000'],\n", " dtype=object)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "angle_codes = np.array(self.angle_new.angle_code)\n", "of_length_6 = [len(code)==6 for code in angle_codes]\n", "if not all(of_length_6):\n", " msg = f\"1-4-3-2. 여섯자리가 아닌 각도코드가 존재합니다.\"\n", " self.issues.append(msg)\n", "angle_codes = [[code[:3],code[3:]] for code in angle_codes]\n", "angle_codes = [int(item) for sublist in angle_codes for item in sublist]\n", "angle_codes = [0<=code<360 for code in angle_codes]\n", "if not all(angle_codes):\n", " msg = f\"1-4-3-2. 0과 359 사이의 값을 벗어나는 방위각이 존재합니다.\"\n", " self.issues.append(msg)\n" ] }, { "cell_type": "code", "execution_count": 5, "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:17<00:00, 992.30it/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": 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", "
inter_nophas_Aphas_Bmove_Amove_B
01751184
11752273
21753361
31753462
41754452
\n", "
" ], "text/plain": [ " inter_no phas_A phas_B move_A move_B\n", "0 175 1 1 8 4\n", "1 175 2 2 7 3\n", "2 175 3 3 6 1\n", "3 175 3 4 6 2\n", "4 175 4 4 5 2" ] }, "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", "
inter_nophase_noring_typemove_no
01751A8
01751B4
11752A7
11752B3
21753A6
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no\n", "0 175 1 A 8\n", "0 175 1 B 4\n", "1 175 2 A 7\n", "1 175 2 B 3\n", "2 175 3 A 6" ] }, "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", "
inter_nophase_noring_typemove_noinc_dirout_dir
01751A8
11751B4
21752A7
31752B3
41753A6
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir\n", "0 175 1 A 8 남 북\n", "1 175 1 B 4 북 남\n", "2 175 2 A 7 북 동\n", "3 175 2 B 3 남 서\n", "4 175 3 A 6 동 서" ] }, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angle
01751A8179004
11751B4003176
21752A7001095
31752B3179270
41753A6090270
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle\n", "0 175 1 A 8 남 북 179 004\n", "1 175 1 B 4 북 남 003 176\n", "2 175 2 A 7 북 동 001 095\n", "3 175 2 B 3 남 서 179 270\n", "4 175 3 A 6 동 서 090 270" ] }, "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", "
inter_nophase_noring_typemove_noinc_dirout_dirinc_angleout_angleinc_edgeout_edgenode_id
01751A8179004-571542797_02571500487_01i0
11751B4003176-571500487_01571542797_02i0
21752A7001095-571500487_01571545870_01i0
31752B3179270-571542797_02571510153_01i0
41753A6090270571545870_02571510153_01i0
\n", "
" ], "text/plain": [ " inter_no phase_no ring_type move_no inc_dir out_dir inc_angle out_angle \\\n", "0 175 1 A 8 남 북 179 004 \n", "1 175 1 B 4 북 남 003 176 \n", "2 175 2 A 7 북 동 001 095 \n", "3 175 2 B 3 남 서 179 270 \n", "4 175 3 A 6 동 서 090 270 \n", "\n", " inc_edge out_edge node_id \n", "0 -571542797_02 571500487_01 i0 \n", "1 -571500487_01 571542797_02 i0 \n", "2 -571500487_01 571545870_01 i0 \n", "3 -571542797_02 571510153_01 i0 \n", "4 571545870_02 571510153_01 i0 " ] }, "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", "
inter_nonode_idphase_noring_typemove_nostate
0175i01A8grrrgrrrgGGGGrgrr
1175i01B4gGGrgrrrgrrrrrgrr
2175i02A7grrGgrrrgrrrrrgrr
3175i02B3grrrgrrrgrrrrGgrr
4175i03A6grrrgGGrgrrrrrgrr
\n", "
" ], "text/plain": [ " inter_no node_id phase_no ring_type move_no state\n", "0 175 i0 1 A 8 grrrgrrrgGGGGrgrr\n", "1 175 i0 1 B 4 gGGrgrrrgrrrrrgrr\n", "2 175 i0 2 A 7 grrGgrrrgrrrrrgrr\n", "3 175 i0 2 B 3 grrrgrrrgrrrrGgrr\n", "4 175 i0 3 A 6 grrrgGGrgrrrrrgrr" ] }, "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", "
inter_nonode_idmove_nostate
0175i01grrrgrrGgrrrrrgrr
1175i02grrrgrrrgrrrrrgGr
2175i03grrrgrrrgrrrrGgrr
3175i04gGGrgrrrgrrrrrgrr
4175i05grrrgrrrgrrrrrgrG
\n", "
" ], "text/plain": [ " inter_no node_id move_no state\n", "0 175 i0 1 grrrgrrGgrrrrrgrr\n", "1 175 i0 2 grrrgrrrgrrrrrgGr\n", "2 175 i0 3 grrrgrrrgrrrrGgrr\n", "3 175 i0 4 gGGrgrrrgrrrrrgrr\n", "4 175 i0 5 grrrgrrrgrrrrrgrG" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(self.match1.head())\n", "display(self.match2.head())\n", "display(self.match3.head())\n", "display(self.match4.head())\n", "display(self.match5.head())\n", "display(self.match6.head())\n", "display(self.matching.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "줄임말 목록\n", "- `f_` : 진입, from\n", "- `t_` : 진출, to\n", "- `vect` : 방향벡터, unit vector (`np.array([0.6, 0.8])`)\n", "- `rvec` : 방위, direction (동, 서, 남, 북, 북동, 북서, 남동, 남서)\n", "- `dire` : 정방향 방향벡터, unit vector to the right direction (`np.array([0,1])`)\n", "\n", "필요한 객체들 목록\n", "\n", "- `i2dire2rvec` : `inter_no` $\\mapsto$ `dire2rvec`\n", " - `dire2rvec` : `dire` $\\mapsto$ `rvec`\n", "- `i2f` : `inter_no` $\\mapsto$ `f_edges`\n", "- `i2t` : `inter_no` $\\mapsto$ `t_edges`\n", "- `i2f2dire` : `inter_no` $\\mapsto$ `f21dire`\n", " - `f2dire` : `from_edge` $\\mapsto$ `dire`\n", "- `i2t2dire` : `inter_no` $\\mapsto$ `t21dire`\n", " - `t2dire` : `to_edge` $\\mapsto$ `dire`" ] } ], "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 }