KT에이블스쿨 5기/DX컨설턴트

코랩 파이썬 공공데이터 Open API 불러오기 (json/xml)

ryuming 2024. 5. 3. 10:06

코랩 파이썬 공공데이터 Open API 불러오기 (json/xml)

예시) 공공데이터포털 - 여성가족부_성범죄자 지역별 통계 데이터 불러오기

 

안녕하세용 에이블러분들~~

어제 5차 미프가 끝났습니다~~

벌써 DX과정 절반이 지나갔습니다

 

 지금까지 배운내용들!!을  활용해서 공공데이터 이용해

공모전이나 개인 데이터분석 하시는 분들 많으실 거 같은데요

 

그래서 코랩에서 공공데이터 불러오는 방법 포스팅 하겠습니당~

 

 

.Open API 불러오기
  1. 필요한 라이브러리를 설치하고 불러오기:
    • requests: API 호출을 위해 사용.
    • pandas: 데이터프레임 작업을 위해 사용.
  2. API 호출:
    • requests.get()을 사용하여 API에서 데이터를 받아옵니다.
    • 이 때, API 키와 필요한 파라미터를 전달해야 합니다.
  3. 응답 데이터 처리:
    • 받아온 데이터가 JSON 형태일 경우, 이를 pandas의 DataFrame으로 변환합니다.
  4. 데이터프레임으로 변환:
    • pandas.DataFrame()을 사용하여 JSON 데이터를 데이터프레임으로 만듭니다.
import requests
import pandas as pd

# API URL과 API 키 설정
url = "https://api.data.go.kr/your-api-endpoint"
api_key = "your_api_key"

# 파라미터 설정 (예시)
params = {
    'serviceKey': api_key,
    'type': 'json',
    'numOfRows': 100,  # 가져올 행의 수
    'pageNo': 1        # 페이지 번호
}

# API 호출
response = requests.get(url, params=params)

# 응답 데이터를 JSON 형태로 로딩
data = response.json()

# JSON 데이터에서 필요한 부분을 데이터프레임으로 변환
# 예시: data['response']['body']['items']는 실제 데이터가 있는 경로에 따라 조정해야 합니다.
df = pd.DataFrame(data['response']['body']['items'])

# 데이터프레임 확인
print(df.head())
  • 위 코드는 일반적인 형태입니다
  • 실제 사용하려는 API의 응답 구조에 따라 JSON에서 데이터를 추출하는 부분(data['response']['body']['items'])을 적절히 수정 필요
  • 정확한 API 엔드포인트와 필요한 파라미터, 그리고 API 키를 확인 필요

 


 

 

(예시) 공공데이터포털 - 여성가족부_성범죄자 지역별 통계 데이터 불러오기

https://www.data.go.kr/data/3072018/openapi.do

 

여성가족부_성범죄자 지역별 통계

아동과 성인대상 성범죄로 법원에서 신상정보 공개명령을 선고받아 성범죄자알림e에 공개하는 성범죄자수에 대한 지역별 통계

www.data.go.kr

  • API 유형 - LINK
  • 데이터포맷 - XML
  • 서비스 인증/권한 - 없음
  • 인터페이스 - REST
import requests
import pandas as pd
import xml.etree.ElementTree as ET

# API 엔드포인트 설정
url = "http://api.sexoffender.go.kr/openapi/SOCitysStats/"

# 파라미터 설정
params = {
    'serviceKey': 'your_api_key',  # 실제 서비스키로 변경 필요
}

# API 호출
response = requests.get(url, params=params)

# 응답 데이터 확인
if response.status_code == 200:
    # XML 데이터 파싱
    root = ET.fromstring(response.content)

    # 데이터 추출 및 데이터프레임으로 변환
    data = []
    for city in root.findall('.//City'):
        data.append({
            'city_name': city.find('city-name').text,  # 시도명
            'city_count': city.find('city-count').text  # 성범죄자 수
        })
    df = pd.DataFrame(data)
    print(df.head())
else:
    print("Failed to fetch data:", response.status_code)

데이터프레임

  • CSV 저장
df.to_csv('city.csv', index=False)
  • 간단한 시각화
#  city_name별로 city_count값을 시각화

import matplotlib.pyplot as plt
import seaborn as sns

# 'city_count' 값을 정수형으로 변환 (문자열이면 정렬이 제대로 작동하지 않을 수 있음)
df['city_count'] = df['city_count'].astype(int)

# 'city_count' 기준으로 데이터프레임 정렬
df_sorted = df.sort_values('city_count', ascending=False)

# 시각화
plt.figure(figsize=(12, 6))
sns.barplot(x='city_name', y='city_count', data=df_sorted)
plt.xticks(rotation=45)  # x축 레이블 회전
plt.show()

시각화 결과

 

▼ 시각화에 한글이 깨진다면 ?▼

2024.04.23 - [KT에이블스쿨 5기/DX컨설턴트] - [KT에이블스쿨 5기 DX] 주피터랩/코랩 시각화 한글 깨짐 해결 방법

 

[KT에이블스쿨 5기 DX] 주피터랩/코랩 시각화 한글 깨짐 해결 방법

[KT에이블스쿨 5기 DX] 주피터랩/코랩 시각화 한글 깨짐 해결 방법 안녕하세요~~~ 에이블러 여러분 오늘은 지난 3차 미프때도 기본제공코드 알려주셨던 matplotlib을 이용해 그래프를 그릴때 한글깨

cattower.tistory.com