戒厳令宣布43日後の韓国大統領の逮捕状執行過程のタイムライン分析

대한민국 대통령 체포영장 집행과정의 타임 테이블 이미지

2024年12月3日、大韓民国で憲法史上初となる事件が発生しました。 当時、大統領は非常戒厳令を宣言し、国会封鎖と主要機関の占拠を指示し、内乱の疑いを受けました。 これにより、逮捕状が発令され、公捜所と警護庁との緊迫した対立の末、逮捕状が執行されました。

今回の記事では、事件の主な経過を時系列でまとめたタイムテーブルをもとに分析し、それを元に パイソン コードとビジュアライゼーションで一目で理解できるように構成しました。

逮捕状執行タイムテーブル

以下は、大韓民国大統領に対する2回目の逮捕状執行当日の主な時間帯別の進行状況です。

  • 04:28到着 : 漢南洞官邸到着
  • 07:34: 1次阻止線通過
  • 07:48車壁迂回及び2次阻止線通過 : 車壁迂回及び2次阻止線通過
  • 07:57官邸前の鉄門到着
  • 08:233次阻止線鉄扉開放及び捜査チーム車両の進入
  • 10:33逮捕状執行 : 逮捕状執行
  • 10:52空輸先到着

特に、最初の官邸到着後、約3時間、警護庁と空輸庁の間で対立が続き、その後、段階的に阻止線を突破して逮捕が行われました。

タイムテーブルパイソンの可視化

以下は、イベントの流れをPythonで可視化するためのコードです。 各ステップの所要時間を棒グラフで表し、イベントの進行状況を明確に表示します。

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":"阪南洞到着"}、
    {"time":"07:34", "event":"第1検問所通過"}, {"event": "第1検問所通過"}、
    {"time":"07:48", "event":"Bypass Barricade & Pass 2nd Checkpoint"}, {"event": "Bypass Barricade & Pass 2nd Checkpoint"}、
    {"time":"07:57", "event":
    {"time":"08:23", "event":"3rd Checkpoint Gate Open & Team Entry"}, {"time": "08:23"}, "event": "第3チェックポイントゲートオープン&チームエントリー"}、
    {"time":"10:33", "event":"逮捕状執行"}, {"event": "逮捕状執行"}、
    {"time":"10:52", "event":"CIO到着"}, {"time": "10:52"}, "event": "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()

📊 📊 📊 📊 グラフの解釈

Python可視化の結果生成されたグラフは次のような情報を提供します。

  1. 最長所要時間: 漢南洞官邸到着後、最初の防潮堤を通過するまでに約3時間(186分)かかりました。
  2. 逮捕状執行: 最後の段階である逮捕状執行は約2時間(130分)行われました。
  3. 合計所要時間: 事件全体の所要時間は約6時間24分と計算されました。

整理する

今回の逮捕状執行事件は、憲政史上初の事態として記録されるほど複雑かつ緊迫したものでした。 これを時系列で分析し、視覚化することで、事件の流れと各段階の重要性を明確に理解することができました。

Pythonはこのような データを視覚的に表現するための非常に強力なツールです。上記のコードを活用して直接実習してみたり、他の事件分析にも応用してみてください!

# コード詳細解説

1.必要なライブラリを読み込む
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from datetime import datetime
  • matplotlib.pyplot: グラフを描画するために使用される基本的なライブラリです。
  • パンダ:データを効率的に処理するためのライブラリです。
  • シーボーン: matplotlibをベースにもっと綺麗なグラフを描けるようにするライブラリです。
  • 日付と時刻: 日付と時刻を扱うために使用されるライブラリです。
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('逮捕状執行のタイムライン', fontsize=15)
ax.set_xlabel('Duration (分)')
ax.grid(axis='x')
plt.tight_layout()
plt.show()
  • 各バーの横に所要時間をテキストで表示します。
  • グラフのタイトル、x軸のラベルを設定し、グリッドを追加します。
  • plt.tight_layout()でグラフのレイアウトを調整します、 plt.show()でグラフを表示します。
테리 이모티콘
( 楽しくコーディングしましょう! )

類似の投稿