Data Analysis/청소년수련활동인증제

공공데이터 api 활용 수집 이후 추가데이터 수집

mansoorrr 2023. 8. 7. 11:38

추가 데이터는 주소와 위경도를 수집한다. 추가로 데이터를 수집하기 위해 naver map api를 활용한다.

 

db에 저장해 두었던 데이터를 불러와 기관 이름을 리스트로 저장한 후 api를 활용해 정보를 가져왔다.

#---------- 데이터 불러오기
data_sql = """
    SELECT * FROM programinfo;
"""
col_sql = """
    SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME="programinfo";
"""

result = read_table(data_sql)
cols = read_table(col_sql)
columns = [col[0] for col in cols]
df = pd.DataFrame(result, columns=columns)
print(df.shape)


#---------- naver api
url = "https://openapi.naver.com/v1/search/local.json"

naver_key = open("naver_api_key.txt", "r")
lines = naver_key.readlines()
lines = [line.strip() for line in lines]
naver_id = lines[0]
naver_pw = lines[1]

headers = {
    "X-Naver-Client-Id": naver_id,
    "X-Naver-Client-Secret": naver_pw
}
print(headers)

org_names = df['orgName'].tolist()
for idx, org_name in enumerate(org_names):
    params = {"query": org_name}
    res = requests.get(url, params=params, headers=headers)

    try:
        items = res.json()['items'][0] #dict
        print(idx, org_name, items['mapx'], items['mapy'])
        sql = """
            INSERT INTO orgxy(orgName, address, roadAdress, x, y) VALUES(
                '"""+org_name+"""',
                '"""+items['address']+"""',
                '"""+items['roadAdress']+"""',
                """+str(items['mapx'])+""",
                """+str(items['mapy'])+"""
            );
        """
        # print(sql)
        insert_table(sql)
    except:
        # addr = ''
        # road_addr = ''
        print(idx, org_name, '', '')
        sql = """
            INSERT INTO orgxy(orgName) VALUES(
                '"""+org_name+"""'
            );
        """
        # print(sql)
        insert_table(sql)

추가데이터를 수집했으니 tableau prep을 활용해 전처리를 진행한다.