|
|
import streamlit as st |
|
|
import requests |
|
|
import pandas as pd |
|
|
|
|
|
|
|
|
api_key = "Z2FNKPFTMDSTHHR60KS4" |
|
|
|
|
|
|
|
|
def get_statistic_codes(): |
|
|
url = f"https://ecos.bok.or.kr/api/StatisticTableList/{api_key}/json/kr/1/1000" |
|
|
response = requests.get(url) |
|
|
if response.status_code == 200: |
|
|
data = response.json() |
|
|
df = pd.DataFrame(data['StatisticTableList']['row']) |
|
|
df['μ½λμ μ΄λ¦'] = df['STAT_CODE'] + ": " + df['STAT_NAME'] |
|
|
return df[['STAT_CODE', 'μ½λμ μ΄λ¦']] |
|
|
else: |
|
|
st.error(f"Failed to retrieve data: {response.status_code}") |
|
|
return None |
|
|
|
|
|
|
|
|
def get_statistic_data(stat_code, period, start_date, end_date): |
|
|
url = f"https://ecos.bok.or.kr/api/StatisticSearch/{api_key}/json/kr/1/1000/{stat_code}/{period}/{start_date}/{end_date}" |
|
|
response = requests.get(url) |
|
|
if response.status_code == 200: |
|
|
data = response.json() |
|
|
if 'StatisticSearch' in data: |
|
|
df = pd.DataFrame(data['StatisticSearch']['row']) |
|
|
return df |
|
|
else: |
|
|
st.error("λ°μ΄ν°κ° μμ΅λλ€. μ
λ ₯ν 쑰건μ νμΈνμΈμ.") |
|
|
return None |
|
|
else: |
|
|
st.error(f"Failed to retrieve data: {response.status_code}") |
|
|
return None |
|
|
|
|
|
|
|
|
def get_top_100_statistics(): |
|
|
url = f"https://ecos.bok.or.kr/api/KeyStatisticList/{api_key}/json/kr/1/1000" |
|
|
response = requests.get(url) |
|
|
if response.status_code == 200: |
|
|
data = response.json() |
|
|
if 'KeyStatisticList' in data: |
|
|
df = pd.DataFrame(data['KeyStatisticList']['row']) |
|
|
return df |
|
|
else: |
|
|
st.error("100λ ν΅κ³μ§ν λ°μ΄ν°λ₯Ό μ°Ύμ μ μμ΅λλ€.") |
|
|
return None |
|
|
else: |
|
|
st.error(f"Failed to retrieve data: {response.status_code}") |
|
|
return None |
|
|
|
|
|
|
|
|
st.title("νκ΅μν ECOS API λ°μ΄ν° μ‘°ν") |
|
|
|
|
|
|
|
|
menu = st.sidebar.selectbox( |
|
|
"λ©λ΄λ₯Ό μ ννμΈμ", |
|
|
("ν΅κ³ μ½λ μ‘°ν λ° λ°μ΄ν° λΆμ", "100λ ν΅κ³μ§ν μ€μκ° νμΈ") |
|
|
) |
|
|
|
|
|
if menu == "ν΅κ³ μ½λ μ‘°ν λ° λ°μ΄ν° λΆμ": |
|
|
st.header("ν΅κ³ μ½λ μ‘°ν λ° λ°μ΄ν° λΆμ") |
|
|
|
|
|
|
|
|
stat_codes_df = get_statistic_codes() |
|
|
if stat_codes_df is not None: |
|
|
selected_code_name = st.selectbox("μ‘°νν ν΅κ³ μ½λλ₯Ό μ ννμΈμ:", stat_codes_df['μ½λμ μ΄λ¦']) |
|
|
selected_code = selected_code_name.split(": ")[0] |
|
|
|
|
|
|
|
|
period = st.text_input("μ‘°ν μ£ΌκΈ° μ
λ ₯ (μ: A, Q, M):", "A") |
|
|
start_date = st.text_input("κ²μ μμμΌμ μ
λ ₯ (μ: 2015, 2015Q1, 201501, 20150101):", "2015") |
|
|
end_date = st.text_input("κ²μ μ’
λ£μΌμ μ
λ ₯ (μ: 2021, 2021Q1, 202101, 20210101):", "2021") |
|
|
|
|
|
if st.button("ν΅κ³ λ°μ΄ν° μ‘°ν"): |
|
|
stat_data_df = get_statistic_data(selected_code, period, start_date, end_date) |
|
|
if stat_data_df is not None: |
|
|
st.write(f"μ νν ν΅κ³ μ½λ: {selected_code}") |
|
|
st.dataframe(stat_data_df) |
|
|
|
|
|
|
|
|
st.write("λ°μ΄ν°λ₯Ό Excel νμΌλ‘ μ μ₯νλ €λ©΄ μλ λ²νΌμ ν΄λ¦νμΈμ.") |
|
|
if st.button("Excelλ‘ μ μ₯"): |
|
|
stat_data_df.to_excel(f"{selected_code}_data.xlsx", index=False) |
|
|
st.success(f"λ°μ΄ν°κ° {selected_code}_data.xlsx νμΌλ‘ μ μ₯λμμ΅λλ€.") |
|
|
|
|
|
elif menu == "100λ ν΅κ³μ§ν μ€μκ° νμΈ": |
|
|
st.header("100λ ν΅κ³μ§ν μ€μκ° νμΈ") |
|
|
|
|
|
top_100_df = get_top_100_statistics() |
|
|
if top_100_df is not None: |
|
|
st.dataframe(top_100_df) |
|
|
|
|
|
|