계엄 선포 43일만의 대한민국 대통령 체포영장 집행 과정 타임라인 분석

2024년 12월 3일 대한민국에서 헌정사상 초유의 사건이 발생했습니다. 당시 대통령은 비상계엄령을 선포하고 국회 봉쇄와 주요 기관 점거를 지시하며 내란 혐의를 받았습니다. 이에 따라 체포영장이 발부되었고, 공수처와 경호처 간 긴박한 대치 끝에 체포영장이 집행되었습니다.
이번 포스트에서는 사건의 주요 진행 과정을 시간 순서대로 정리한 타임 테이블을 기반으로 분석하고, 이를 파이썬 코드와 시각화를 통해 한눈에 이해할 수 있도록 구성했습니다.
체포영장 집행 타임 테이블
다음은 대한민국 대통령에 대한 2번째 체포영장 집행 당일 주요 시간대별 진행 상황입니다.
- 04:28: 한남동 관저 도착
- 07:34: 1차 저지선 통과
- 07:48: 차벽 우회 및 2차 저지선 통과
- 07:57: 관저 앞 철문 도착
- 08:23: 3차 저지선 철문 개방 및 수사팀 차량 진입
- 10:33: 체포영장 집행
- 10:52: 공수처 도착
특히, 초기 관저 도착 이후 약 3시간 동안 경호처와 공수처 간 대치가 이어졌으며, 이후 단계적으로 저지선을 돌파하며 체포가 이루어졌습니다.
타임 테이블 파이썬 시각화
아래는 사건의 흐름을 파이썬 시각화로 나타내기 위한 코드입니다. 각 단계별 소요 시간을 막대 그래프로 표현하여 사건의 진행 상황을 명확히 보여줍니다.
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from datetime import datetime
# 경과 시간 포맷팅 함수
def format_duration(minutes):
if minutes >= 60:
hours = minutes // 60
mins = minutes % 60
return f"{hours}hr {mins}min"
else:
return f"{minutes}min"
# 타임 테이블 데이터
data = [
{"time": "04:28", "event": "Arrival at Hannam-dong"},
{"time": "07:34", "event": "Pass 1st Checkpoint"},
{"time": "07:48", "event": "Bypass Barricade & Pass 2nd Checkpoint"},
{"time": "07:57", "event": "Arrival at Main Gate"},
{"time": "08:23", "event": "3rd Checkpoint Gate Open & Team Entry"},
{"time": "10:33", "event": "Arrest Warrant Execution"},
{"time": "10:52", "event": "Arrival at CIO"}
]
# 데이터프레임 생성 및 시간 변환
df = pd.DataFrame(data)
df['time'] = pd.to_datetime(df['time'], format='%H:%M')
df['duration_min'] = df['time'].diff().dt.total_seconds().div(60).fillna(0).astype(int)
# 총 소요시간 계산
total_duration_min = int((df['time'].iloc[-1] - df['time'].iloc[0]).total_seconds() / 60)
df_total = pd.DataFrame([{"event": "Total Duration", "duration_min": total_duration_min}])
df_combined = pd.concat([df_total, df]).reset_index(drop=True)
# 그래프 생성
fig, ax = plt.subplots(figsize=(12, 8))
event_labels = [f"{row['event']} ({row['time'].strftime('%H:%M')})" if pd.notna(row['time']) else row['event']
for _, row in df_combined.iterrows()]
# 시각화
bars = ax.barh(event_labels, df_combined['duration_min'], color=sns.color_palette("Blues_r", n_colors=len(df_combined)))
for i, bar in enumerate(bars):
ax.text(bar.get_width() + 5, bar.get_y() + bar.get_height()/2,
format_duration(df_combined['duration_min'].iloc[i]), ha='left', va='center')
# 그래프 설정
ax.set_title('Timeline of Arrest Warrant Execution', fontsize=15)
ax.set_xlabel('Duration (minutes)')
ax.grid(axis='x')
plt.tight_layout()
plt.show()📊 그래프 해석
파이썬 시각화 결과 생성된 그래프는 다음과 같은 정보를 제공합니다.
- 최장 소요 시간: 한남동 관저 도착 후 첫 저지선을 통과하기까지 약 3시간(186분)이 소요되었습니다.
- 체포영장 집행: 마지막 단계인 체포영장 집행은 약 2시간(130분) 동안 진행되었습니다.
- 총 소요 시간: 사건 전체 소요 시간은 약 6시간 24분으로 계산되었습니다.
정리하기
이번 체포영장 집행 사건은 헌정사상 초유의 사태로 기록될 만큼 복잡하고 긴박하게 진행되었습니다. 이를 시간 순서대로 분석하고 시각화함으로써 사건의 흐름과 각 단계별 중요성을 명확히 이해할 수 있었습니다.
파이썬은 이러한 데이터를 시각적으로 표현하는 데 매우 강력한 도구입니다. 위 코드를 활용해 직접 실습해 보거나 다른 사건 분석에도 응용해 보세요!
# 코드 상세해설
1. 필요한 라이브러리 불러오기
import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from datetime import datetime
matplotlib.pyplot: 그래프를 그리는 데 사용되는 기본 라이브러리입니다.pandas: 데이터를 효율적으로 처리하기 위한 라이브러리입니다.seaborn: matplotlib을 기반으로 더 아름다운 그래프를 그릴 수 있게 해주는 라이브러리입니다.datetime: 날짜와 시간을 다루는 데 사용되는 라이브러리입니다.2. 시간 포맷 변환 함수 정의
def format_duration(minutes): if minutes >= 60: hours = minutes // 60 mins = minutes % 60 return f"{hours}hr {mins}min" else: return f"{minutes}min"이 함수는 주어진 분(minutes)을 시간과 분 형식으로 변환합니다. 60분 이상일 경우 시간과 분으로, 60분 미만일 경우 분으로만 표시합니다.
3. 데이터 준비 및 처리
data = [ {"time": "04:28", "event": "Arrival at Hannam-dong"}, # ... 나머지 데이터 ... ] df = pd.DataFrame(data) df['time'] = pd.to_datetime(df['time'], format='%H:%M') df['duration_min'] = df['time'].diff().dt.total_seconds().div(60).fillna(0).astype(int)
- 데이터를 리스트로 정의하고, 이를 pandas DataFrame으로 변환합니다.
- ‘time’ 열을 datetime 형식으로 변환합니다.
- ‘duration_min’ 열을 추가하여 각 이벤트 사이의 시간 차이를 분 단위로 계산합니다.
4. 총 소요 시간 계산
total_duration_min = int((df['time'].iloc[-1] - df['time'].iloc[0]).total_seconds() / 60) df_total = pd.DataFrame([{"event": "Total Duration", "duration_min": total_duration_min}]) df_combined = pd.concat([df_total, df]).reset_index(drop=True)
- 첫 이벤트와 마지막 이벤트 사이의 총 소요 시간을 계산합니다.
- 총 소요 시간을 새로운 DataFrame으로 만들고, 기존 데이터와 합칩니다.
5. 그래프 생성 및 시각화
fig, ax = plt.subplots(figsize=(12, 8)) event_labels = [f"{row['event']} ({row['time'].strftime('%H:%M')})" if pd.notna(row['time']) else row['event'] for _, row in df_combined.iterrows()] bars = ax.barh(event_labels, df_combined['duration_min'], color=sns.color_palette("Blues_r", n_colors=len(df_combined)))
plt.subplots()로 그래프를 그릴 영역을 생성합니다.- 각 이벤트에 대한 레이블을 만듭니다.
ax.barh()를 사용하여 수평 막대 그래프를 그립니다.6. 그래프 세부 설정
for i, bar in enumerate(bars): ax.text(bar.get_width() + 5, bar.get_y() + bar.get_height()/2, format_duration(df_combined['duration_min'].iloc[i]), ha='left', va='center') ax.set_title('Timeline of Arrest Warrant Execution', fontsize=15) ax.set_xlabel('Duration (minutes)') ax.grid(axis='x') plt.tight_layout() plt.show()
- 각 막대 옆에 소요 시간을 텍스트로 표시합니다.
- 그래프 제목, x축 레이블을 설정하고, 격자를 추가합니다.
plt.tight_layout()으로 그래프 레이아웃을 조정하고,plt.show()로 그래프를 표시합니다.







