학교에서 파이썬 언어를 배우면서 어떠한 계기로 미세먼지 예측 프로그램을 만들고자 한다.
현재 구상한 원리는
1.지난 몇 년간의 미세먼지 데이터를 가지고 평균값을 낸다.
2. 달별로 그 값이 적은 날을 출력하여 알려준다.
3. 아마도 그 날은 미세먼지가 적은 날일 가능성이 있다.
이다.
미세먼지 데이터는 '서울시 열린 데이터 광장'의 데이터를 활용하여 서울시에 관한 미세먼지 예측을 진행하고자 한다.
https://data.seoul.go.kr/index.do
사용 프로그램은 '주피터노트북(Jupyter Notebook)'이다.
서울 열린데이터 광장에 회원가입이 되어있다는 전제로 '대기환경'이란 키워드를 검색했다.
그리고 두 번째에 있는 '서울시 일별 평균 대기오염도 정보'를 사용하기로 했다.
2016, 2017, 2018년의 .xlsx 파일을 다운받아 파일읽기에 들어갔다.
from openpyxl import Workbook, load_workbook #xlsx파일 읽는데 필요한 모듈 import
load16 = load_workbook("daily2016.xlsx", data_only = True) #파일로드
load16S = load16['Sheet1'] #파일속 Sheet를 가져옴
load17 = load_workbook("daily2017.xlsx", data_only = True)
load17S = load17['Sheet1']
load18 = load_workbook("daily2018.xlsx", data_only = True)
load18S = load18['Sheet1']
print(load18S)
이때 "daily2016.xlsx"는 원래 "일별평균대기오염도_2016"였으나 한글이름일 경우 오류가 발생할지도 모른다는 생각에 이름을 바꿔준 것이다.
실행을 해보니
<Worksheet"Sheet1">이라는 결과가 나온다. 분명 파일에는 많은 데이터들이 있었는데 print값이 이상하다고 생각할 수도 있다. 그러나 제대로 불러왔으니 걱정안해도 된다. 아직 데이터 가공을 해주지 못했을 뿐이다.
from openpyxl import Workbook, load_workbook #xlsx파일 읽는데 필요한 모듈 import
load16 = load_workbook("daily2016.xlsx", data_only = True) #파일로드
load16S = load16['Sheet1'] #파일속 Sheet를 가져옴
load17 = load_workbook("daily2017.xlsx", data_only = True)
load17S = load17['Sheet1']
load18 = load_workbook("daily2018.xlsx", data_only = True)
load18S = load18['Sheet1']
#모든 데이터들이 들어갈 빈 리스트 생성
all_value16 = []
all_value17 = []
all_value18 = []
#3년 간의 일평균 대기환경 지수 리스트로 가져오기 (all_valueYY) for문 사용
for row in load16S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value16.append(row_value)
for row in load17S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value17.append(row_value)
for row in load18S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value18.append(row_value)
연도별로 Sheet1에 있는 데이터들을 저장해주는 코드다. 마지막 줄에 print(all_value18)을 넣은 뒤 실행하면 다음과 같은 값이 출력된다.
이전에 비해 상당히 의미있는 데이터들이 출력되었다. list in list형식으로 행단위로 끊어서 집어 넣어진 상태다.
쉽게 말하면 [[A1,A2,A3....], [B1,B2,B3,....], ...]과 같은 형식으로 모든 데이터들이 리스트안에 들어있다.
여기서 우리는 또다른 고민을 하게 될텐데, 아마 이 파일들을 불러서 저 값이 출력되기 까지 많은 시간이 걸렸을 것이다. 그 이유는 처리할 데이터들이 너무 많기 때문이다. 다르게 생각해보면, 처리할 데이터가 줄어든다면 시간이 단축될 수 있다는 것이다. 물론 처음에는 xlsx파일을 읽어야 하므로 시간이 오래걸리겠지만 그 이후의 시간을 줄이자는 얘기다.
그래서 원하는 지역구만 고른다는 가정하에, 지역이 '서대문구'라고 설정됐을 때 그 지역구의 데이터만 가져오도록 코드를 짜려한다.
코드가 계속 길어지니 앞부분이 바뀌지 않는 한 추가되는 코드만 쓰도록 하겠다.
select16 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
select17 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
select18 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
for i in range(len(all_value16)):
if all_value16[i][1] == '서대문구': #원하는 지역인 것만 모아온 것.
select16.append(all_value16[i])
for i in range(len(all_value17)):
if all_value17[i][1] == '서대문구': #원하는 지역인 것만 모아온 것.
select17.append(all_value17[i])
for i in range(len(all_value18)):
if all_value18[i][1] == '서대문구': #원하는 지역인 것만 모아온 것.
select18.append(all_value18[i])
미리 언급하지만 리스트가 세개인것은 우리가 가공하는 데이터들이 16 ,17, 18년도의 3개년 데이터이기 때문이다.
다시 for문을 이용하여 selectYY리스트에 서대문구에 대한 대기환경 데이터를 집어넣었다. 제대로 됐는지 확인하기 위해 잠시 print(select16)을 넣고 실행해보자.
서대문구에 관한 데이터들만 다 모인것을 확인됐다.
이제 3개년에 대한 평균값을 구해야 하는데 이 과정은 다음 포스팅에서 이어가도록 하겠다.
'[파이썬]Python > 미세먼지 프로젝트' 카테고리의 다른 글
[Python Project 1.5]미세먼지 예측 프로그램 개발-오류수정 (0) | 2020.07.08 |
---|---|
[Python Project 1.4]미세먼지 예측 프로그램 개발-최솟값3개 찾기 (0) | 2020.07.06 |
[Python Project 1.3]미세먼지 예측 프로그램 개발-리스트슬라이싱,날짜계산 (0) | 2020.07.04 |
[Python Project 1.2]미세먼지 예측 프로그램 개발-평균데이터 구하기 (0) | 2020.07.02 |