{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# passthrough_3tier.py\n",
    "\n",
    "전가 종합 — 3단계(전체/주종/제품) × 원가(PPI)→출고가→소비자가(CPI)\n",
    " 전체주류: CPI 주류(B01,901Y009), PPI 주류(30121AA,404Y014) 신규 수집\n",
    " 주종: 소주·맥주 PPI/CPI(기존)\n",
    " 제품: 카스·참이슬(기존 결과 인용)\n",
    " 변경시점: 2020 맥주 종량세 / 2024 소주 기준판매비율. 출고가는 2022→2024 브리지.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"전가 종합 — 3단계(전체/주종/제품) × 원가(PPI)→출고가→소비자가(CPI)\n",
    " 전체주류: CPI 주류(B01,901Y009), PPI 주류(30121AA,404Y014) 신규 수집\n",
    " 주종: 소주·맥주 PPI/CPI(기존)\n",
    " 제품: 카스·참이슬(기존 결과 인용)\n",
    " 변경시점: 2020 맥주 종량세 / 2024 소주 기준판매비율. 출고가는 2022→2024 브리지.\n",
    "\"\"\"\n",
    "import sys,io,json,urllib.request\n",
    "sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')\n",
    "import numpy as np, pandas as pd, statsmodels.formula.api as smf\n",
    "B='C:/Temp/주류세/공개데이터'\n",
    "S=json.load(open(r'C:/Users/meals/.secret/ENVIRONMENT_VARIABLES.json',encoding='utf-8'))['data_api_keys']\n",
    "k=S['API_KEY_BOK']\n",
    "def ecos(stat,item,s='200601',e='202512'):\n",
    "    url=f'https://ecos.bok.or.kr/api/StatisticSearch/{k}/json/kr/1/1000/{stat}/M/{s}/{e}/{item}'\n",
    "    d=json.loads(urllib.request.urlopen(url,timeout=40).read().decode('utf-8'))\n",
    "    r=d['StatisticSearch']['row']\n",
    "    return pd.DataFrame({'ym':[int(x['TIME']) for x in r],'v':[float(x['DATA_VALUE']) for x in r]})\n",
    "\n",
    "# 전체주류 지수 수집·저장\n",
    "cpi_all=ecos('901Y009','B01').rename(columns={'v':'cpi'})\n",
    "ppi_all=ecos('404Y014','30121AA').rename(columns={'v':'ppi'})\n",
    "cpi_all.to_csv(B+'/한국은행_ECOS/CPI_주류전체_200601_202512.csv',index=False,encoding='utf-8-sig')\n",
    "ppi_all.to_csv(B+'/한국은행_ECOS/PPI_주류전체_200601_202512.csv',index=False,encoding='utf-8-sig')\n",
    "\n",
    "def pt(cpi,ppi,label):\n",
    "    m=cpi.merge(ppi,on='ym').sort_values('ym')\n",
    "    m['lcpi']=np.log(m.cpi); m['lppi']=np.log(m.ppi)\n",
    "    m['dc']=m.lcpi.diff(); m['dp']=m.lppi.diff(); m['dp1']=m.dp.shift(1)\n",
    "    mm=m.dropna(subset=['dc','dp','dp1'])\n",
    "    r=smf.ols('dc ~ dp + dp1',data=mm).fit(cov_type='HAC',cov_kwds={'maxlags':6})\n",
    "    lr=smf.ols('lcpi ~ lppi',data=m).fit(cov_type='HAC',cov_kwds={'maxlags':12})\n",
    "    cum=r.params['dp']+r.params['dp1']\n",
    "    print(f'  [{label}] 단기 {r.params[\"dp\"]:+.2f} / 누적 {cum:+.2f} / 장기 {lr.params[\"lppi\"]:+.2f}')\n",
    "    return dict(short=round(float(r.params['dp']),2),cum=round(float(cum),2),long=round(float(lr.params['lppi']),2))\n",
    "\n",
    "print('===== 원가(PPI)→소비자가(CPI) 전가 (월별) =====')\n",
    "res={}\n",
    "res['전체주류']=pt(cpi_all,ppi_all,'전체주류')\n",
    "cpi=pd.read_csv(B+'/한국은행_ECOS/CPI_품목별_소주맥주_200601_202512.csv')\n",
    "ppi=pd.read_csv(B+'/한국은행_ECOS/PPI_품목별_소주맥주_200601_202512.csv')\n",
    "for j in ['소주','맥주']:\n",
    "    c=cpi[cpi.품목==j].groupby('시점',as_index=False).값.mean().rename(columns={'시점':'ym','값':'cpi'})\n",
    "    p=ppi[ppi.품목==j].groupby('시점',as_index=False).값.mean().rename(columns={'시점':'ym','값':'ppi'})\n",
    "    res[j]=pt(c,p,j)\n",
    "\n",
    "# 세후 출고가 수준(전체/소주/맥주) — 변경시점 변화\n",
    "print('\\n===== 세후 출고가 변화 (원/L) =====')\n",
    "ex=pd.read_csv(B+'/세후출고가_전체주종_2018_2024.csv')\n",
    "exv=ex.pivot_table(index='연도',columns='주종',values='세후')\n",
    "def chg(col,y0,y1):\n",
    "    try: a,b=exv.loc[y0,col],exv.loc[y1,col]; return a,b,(b/a-1)*100\n",
    "    except: return None\n",
    "for col in ['전체주류','소주','맥주']:\n",
    "    c20=chg(col,2019,2020); c24=chg(col,2022,2024)\n",
    "    s20=f'{c20[0]:.0f}→{c20[1]:.0f}({c20[2]:+.1f}%)' if c20 else '—'\n",
    "    s24=f'{c24[0]:.0f}→{c24[1]:.0f}({c24[2]:+.1f}%)' if c24 else '—'\n",
    "    print(f'  {col:<6} 2019→2020(맥주종량세): {s20}  | 2022→2024(소주기준판매비율): {s24}')\n",
    "\n",
    "json.dump(res,open(B+'/문헌/passthrough_3tier.json','w',encoding='utf-8'),ensure_ascii=False,indent=2)\n",
    "print('\\n저장: CPI/PPI_주류전체, 문헌/passthrough_3tier.json')\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}