Coding 공부/Big data & Python

[Big data & Python] 미세먼지 농도 콘솔 출력 연습문제

CBJH 2024. 4. 2.
728x90
반응형

1. 기능 설명

  • 공공데이터 포털 > 한국환경공단_에어코리아에서 전국 날씨 정보를 API로 받는다.
  • API url주소를 파이썬의 request 모듈을 사용해 jason 형태로 저장한다.
  • json 형태의 items들을 MongoDB Collection에 추가해 DBMS에 저장한다.
  • pymongo 모듈을 사용해서 MonoDB에 있는 정보 중 원하는 컬럼만 받아와 records 딕셔너리 배열로 받는다.
  • records의 키값으로 컬럼명을 넣어 원하는 값을 추출해 콘솔창에 띄운다.

2. API url 

  • 공공데이터 포털 사이트에 접속(https://www.data.go.kr/)해 회원가입을 한다.
  • '대기오염정보'로 검색한다.

 

  • 오픈 API를 누른다.

 

3. 파이썬 코드

from pymongo import MongoClient
import requests

# MongoDB 클라이언트 생성 및 연결
client = MongoClient('localhost', 27017)

# 데이터베이스 선택 (없으면 자동 생성)
db = client['air_quality_db']

# 컬렉션(테이블과 유사) 선택 (없으면 자동 생성)
collection = db['air_quality_requestVer']

# 데이터를 요청할 API의 URL입니다.
url = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty'

# API 요청에 필요한 파라미터를 사전(dictionary) 형태로 준비합니다. 여기에는 지역명, 페이지 번호, 행 수, 반환 형식, 서비스키, 버전 정보가 포함됩니다.
param_data = {'sidoName':'대구',
              'pageNo':'1',
              'numOfRows' : '100',
              'returnType' : 'json',
              'serviceKey' : 'N7fv97fb45MVGN88uQunNpgIQaA0dqSkuPUud8tp6Wkf12QS41gaagdbdT2lBcLyDW8IPmOxaXanz2W4cPUABA%3D%3D',
              'ver' : '1.0'}

# 준비된 URL과 파라미터를 사용해 API로부터 데이터를 요청합니다.
# res는 requests.Response의 객체. HTTP 요청에 대한 서버의 응답을 캡슐화하고 있다.
res = requests.get(url, params=param_data)

# 요청 결과를 JSON 형태로 변환합니다. 
json_data = res.json()

# 변환된 JSON 데이터 내의 'items' 키에 해당하는 값을 순회하며, 각 항목을 MongoDB의 컬렉션에 저장합니다.
for item in json_data['response']['body']['items']:
    collection.insert_one(item)

print("데이터가 MongoDB에 저장되었습니다.")

 

 

from pymongo import MongoClient

# MongoDB 클라이언트 생성 및 연결
client = MongoClient('localhost', 27017)

# 데이터베이스 선택
db = client['air_quality_db']

# 컬렉션 선택
collection = db['air_quality_requestVer']

# MongoDB에서 데이터 조회 (pm10Value와 stationName 필드 조회)
records = collection.find({}, {'pm10Value': 1, 'stationName': 1, '_id': 0})

for record in records:
    pm10 = int(record['pm10Value'])  # 미세먼지 PM10 농도 값
    station_name = record['stationName']  # 측정소 이름
    
    # 미세먼지 농도에 따른 상태 분류
    if 0 <= pm10 <= 20:
        status = '매우 안전'
    elif 21 <= pm10 <= 30:
        status = '안전'
    elif 31 <= pm10 <= 50:
        status = '보통'
    elif 51 <= pm10 <= 60:
        status = '나쁨'
    elif pm10 >= 61:
        status = '매우 나쁨'
    else:
        status = '정보 없음'
    
    # 측정소 이름과 함께 미세먼지 농도 및 상태 출력
    print(f"지역명: {station_name}, 미세먼지 농도: {pm10}, 상태: {status}")

 

4. 실행 결과

댓글