03 결과 도출 — 그림과 본문 수치 검증¶
In [1]:
import os, hashlib
import numpy as np, pandas as pd
import config as C
import landscape as L
pd.set_option("display.float_format", lambda v: f"{v:,.2f}")
C.setup()
import matplotlib.pyplot as plt
import koreanize_matplotlib # noqa: F401
pat = pd.read_csv(C.FILES["특허_연도"], index_col=0)
cty = pd.read_csv(C.FILES["특허_국가"], index_col=0).iloc[:, 0]
oa = pd.read_csv(C.FILES["논문_OpenAlex"], index_col=0)
pm = pd.read_csv(C.FILES["논문_PubMed"], index_col=0).iloc[:, 0]
er = pd.read_csv(C.FILES["뉴스_EventRegistry"], index_col=0, parse_dates=True).iloc[:, 0]
er_y = L.to_annual(er)
growth = pd.read_csv(os.path.join(C.OUTPUT, "growth_summary.csv"), index_col=0)
Python 3.12.10 · pandas 2.2.3 · numpy 2.4.6 · matplotlib 3.11.0 ONLINE=0(스냅샷) OpenAlex 키 없음 Event Registry 키 없음 특허_연도 있음 data\inputs\findip_g06n_by_year.csv 특허_국가 있음 data\inputs\findip_g06n_by_country.csv 특허_동시분류 있음 data\inputs\findip_kr_g06n_coipc.csv 특허_출원인 있음 data\inputs\findip_kr_g06n_applicants.csv 논문_OpenAlex 있음 data\inputs\openalex_by_year.csv 논문_PubMed 있음 data\inputs\pubmed_by_year.csv 뉴스_EventRegistry 있음 data\inputs\eventregistry_ai_eng_daily.csv 뉴스_네이버_표본 있음 data\inputs\naver_daily_counts_생성형AI_sample.csv
그림 1. 특허·논문·뉴스의 연도별 추이(2015=1, 로그 축)¶
In [2]:
fig, ax = plt.subplots(figsize=(8.5, 4.6))
yrs = range(2015, 2025)
for lab, s, col in [("특허 G06N(한국)", pat["KR_G06N"], "#1f4e79"), ("특허 G06N(5개국)", pat["5개국_G06N"], "#6fa8dc"),
("논문 AI(OpenAlex)", oa["AI_개념_전체"], "#a9781f"), ("논문 AI·ML(PubMed)", pm, "#d7a94b"),
("뉴스 AI(영문)", er_y, "#7a4fb0")]:
v = [s.loc[y] / s.loc[2015] for y in yrs]
ax.plot(list(yrs), v, marker="o", ms=3.5, label=lab, color=col)
ax.set_yscale("log"); ax.axvline(2022, color="#999", ls="--", lw=1)
ax.text(2022.1, 1.2, "생성형 AI 공개(2022.11)", fontsize=8, color="#666")
ax.set_ylabel("2015년 = 1"); ax.grid(alpha=.3, which="both"); ax.legend(frameon=False, fontsize=8, ncol=2)
ax.set_title("AI 확산의 세 갈래 신호", loc="left")
fig.tight_layout(); fig.savefig(os.path.join(C.OUTPUT, "fig1_landscape_index.png"), dpi=150)
그림 2. 생성형 AI·LLM 논문과 영문 AI 뉴스(2019–2025)¶
In [3]:
fig, ax1 = plt.subplots(figsize=(8.5, 4.2))
yy = list(range(2019, 2026))
ax1.bar(yy, [oa["생성형AI_LLM"].loc[y] / 1e3 for y in yy], color="#a9781f", alpha=.8, label="생성형 AI·LLM 논문(천 편)")
ax2 = ax1.twinx()
ax2.plot(yy, [er_y.loc[y] / 1e4 for y in yy], color="#1f4e79", marker="o", label="영문 AI 뉴스(만 건)")
ax1.set_ylabel("천 편"); ax2.set_ylabel("만 건"); ax1.grid(alpha=.3)
h1, l1 = ax1.get_legend_handles_labels(); h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2, frameon=False, loc="upper left", fontsize=8)
ax1.set_title("2023년 이후의 급증 — 2025년 값은 색인 미완", loc="left")
fig.tight_layout(); fig.savefig(os.path.join(C.OUTPUT, "fig2_generative_ai.png"), dpi=150)
검증 — 본문 수치와 대조¶
In [4]:
P = C.PUBLISHED
s5 = cty.sum()
checks = [
("한국 G06N 2015", pat.loc[2015, "KR_G06N"], P["KR_특허_2015"], 0),
("한국 G06N 2022", pat.loc[2022, "KR_G06N"], P["KR_특허_2022"], 0),
("5개국 G06N 2015", pat.loc[2015, "5개국_G06N"], P["세계_특허_2015"], 0),
("5개국 G06N 2024", pat.loc[2024, "5개국_G06N"], P["세계_특허_2024"], 0),
("5개국 배수(2015→2024)", pat.loc[2024, "5개국_G06N"] / pat.loc[2015, "5개국_G06N"], P["세계_특허_배수"], 0.05),
("중국 비중(%)", 100 * cty["CN"] / s5, P["중국_비중_%"], 0.05),
("한국 비중(%)", 100 * cty["KR"] / s5, P["한국_비중_%"], 0.05),
("생성형 AI 논문 2022", oa.loc[2022, "생성형AI_LLM"], P["생성형논문_2022"], 0),
("생성형 AI 논문 2024", oa.loc[2024, "생성형AI_LLM"], P["생성형논문_2024"], 0),
("AI 논문 2024(만 편)", oa.loc[2024, "AI_개념_전체"] / 1e4, P["AI논문_2024_만편"], 0.05),
("영문 AI 뉴스 2022(만 건)", er_y.loc[2022] / 1e4, P["영문뉴스_2022_만건"], 0.05),
("영문 AI 뉴스 2024(만 건)", er_y.loc[2024] / 1e4, P["영문뉴스_2024_만건"], 0.05),
]
res = pd.DataFrame([{"항목": k, "계산": v, "본문": p, "허용오차": t, "통과": abs(v - p) <= t} for k, v, p, t in checks])
display(res)
assert res["통과"].all(), "본문 수치와 계산 결과가 다르다"
print("검증 통과: 본문 수치를 재현했다(스냅샷 기준).")
| 항목 | 계산 | 본문 | 허용오차 | 통과 | |
|---|---|---|---|---|---|
| 0 | 한국 G06N 2015 | 513.00 | 513.00 | 0.00 | True |
| 1 | 한국 G06N 2022 | 14,002.00 | 14,002.00 | 0.00 | True |
| 2 | 5개국 G06N 2015 | 11,236.00 | 11,236.00 | 0.00 | True |
| 3 | 5개국 G06N 2024 | 224,600.00 | 224,600.00 | 0.00 | True |
| 4 | 5개국 배수(2015→2024) | 19.99 | 20.00 | 0.05 | True |
| 5 | 중국 비중(%) | 67.31 | 67.30 | 0.05 | True |
| 6 | 한국 비중(%) | 6.18 | 6.20 | 0.05 | True |
| 7 | 생성형 AI 논문 2022 | 1,071.00 | 1,071.00 | 0.00 | True |
| 8 | 생성형 AI 논문 2024 | 57,411.00 | 57,411.00 | 0.00 | True |
| 9 | AI 논문 2024(만 편) | 134.45 | 134.50 | 0.05 | True |
| 10 | 영문 AI 뉴스 2022(만 건) | 25.17 | 25.20 | 0.05 | True |
| 11 | 영문 AI 뉴스 2024(만 건) | 94.98 | 95.00 | 0.05 | True |
검증 통과: 본문 수치를 재현했다(스냅샷 기준).