이전 포스팅에서 다룬 Apache Spark & Hadoop 프레임워크를 라즈베리파이5 클러스터에 적용한 상태이다.
2024.03.13 - [분류 전체보기] - Apache Spark & Hadoop 클러스터 구축 및 설정
이번 포스팅에서는 에어코리아에서 제공하는 미세먼지 데이터를 라즈베리파이 클러스터에서 Spark을 사용한 데이터 분석에 관한 글을 작성할 것이다.
1. 에어코리아 데이터 수집
- 에어코리아 사이트(https://www.airkorea.or.kr/web/last_amb_hour_data?pMENU_NO=123)에 접속하여
- 통계정보의 최종확정 측정자료 조회를 보면 2001년부터 2024년까지 최종확정자료를 받을 수 있다
- 2001년 자료를 받아서 열어보면, 분기별로 데이터가 나눠져 있다
- 대용량 미세먼지 데이터를 분석하고자,
- 2001~2022년까지 데이터를 받아서 월별 분기별로 나눠져 있는 데이터를 하나의 csv로 합치는 작업을 진행했다
2. Spark DataFrame을 활용한 데이터 분석
- 라즈베리파이 클러스터의 모든 노드가 데이터에 접근할 수 있도록, HDFS에 2001_2022.csv 파일을 올렸다
- zeppelin에서 데이터 분석 작업을 진행했다. (자세한 세팅 방법은 전 포스팅 참고)
2.1. 데이터 전처리
- spark master를 yarn으로 설정하였고, hdfs에 있는 2001_2022.csv 파일을 Spark DataFrame으로 변형해줬다
- 데이터 분석을 위해 데이터 타입에 맞는 형변환 처리를 했다
- 에어코리아에서 받은 데이터는 -999라는 결측치 값이 있다
- 데이터 분석을 위해 -999 값을 null로 변경해주고 이 값들의 개수를 계산하는 코드이다
- SO2, CO, O3, NO2, PM10, 망, PM25 특성에만 결측치 값이 존재하는 것을 알 수 있다
2.2. 데이터 분석
데이터 분석 작업 1
- 첫번째 데이터 분석 작업은 대기오염물질의 각 최소, 평균, 최대 값을 계산해서 출력하는 작업이다
- 실행시간은 약 34883 밀리초가 발생하였다
특성 추가
- 한국대기오염 지수를 기준으로 PM10(미세먼지)와 PM25(초미세먼지) 값으로 등급을 나누었다
- 직관적인 데이터 분류 통계를 보기 위해서 등급으로 분류 하였다
- 측정일시 특성은 yyyymmdd 형태로 되어 있는데, 여기에서 월 데이터만 substr을 통해 데이터를 가져와서 계절 특성을 만들었다
- 계절 특성으로 계절에 따른 초미세먼지 등급 전체 비율을 계산하고자 생성하였다
데이터 분석 작업 2
- PM25(초미세먼지)등급 특성에서 "나쁨"과 "매우 나쁨"일 때만 필터링하여 bad_pm25_df 라는 새로운 데이터 프레임을 만들고
- bad_pm25_df에서 계절 특성으로 groupBy를 통해 데이터를 그룹화하여 count한다
- bad_pm25_df에서 전체 개수로 비율을 계산하여 앞서 계절 별 데이터를 계산했던 season_counts에 컬럼을 추가한다
- 따라서, 초미세먼지의 "나쁨"과 "매우 나쁨"이 있는 계절은 겨울이 약 40% 다음으로 봄이 약 30% 비율을 차지하고 있는 것을 확인
데이터 분석 작업 3
- 지역별 초미세먼지 데이터 분포도를 확인해보기 위해 데이터 지역 특성으로 그룹화하여 집계를 하였음
- 하지만 지역 특성 값이 너무 많기 때문에 통계를 확인하기 적절하지 않았음
- 따라서 지역 특성에서 앞 2 문자만 가져와서 행정구역 특성을 생성
- 행정구역 마다 초미세먼지 등급에 따라 분류하고, 개수를 카운트 하였음
- 데이터 프레임의 전체 개수에서 행정구역의 (경기, 서울) 비율을 계산하였음
- 전체 개수에서 행정 구역의 비율을 계산한 이유는, 초미세먼지의 매우 나쁨 값이 많은 이유가
- 경기나 서울에서 측정한 데이터 표본이 많기 때문일 수도 있기 때문에, 전체 데이터에서 행정 구역 비율을 계산하였음
- 그 후에 매우 나쁨 열을 기준으로 데이터를 내림차순 정렬하여 초미세먼지가 매우 나쁨이 많은 행정구역을 출력하였음
- 경기, 서울, 충남, 전북 순으로 초미세먼지 매우 나쁨 등급 개수가 많았지만, 전체 데이터 개수에서 경기 지역이 약 24%를 차지하기 때문에, 데이터 표본이 많아서 영향을 미쳤다고 할 수 있음
데이터 분석 작업 4
- PM10(미세먼지), PM25(초미세먼지) 등급 특성에서 보통, 좋음, 나쁨, 매우 나쁨 값을 카운팅해서 전체 개수 비율을 계산하였음
- round를 사용하여 소수점 3자리 까지 계산하도록 하고, 데이터 개수를 count를 하여 total_count 로 비율을 계산하였음
- 결측치 값은 알수 없음으로 처리 PM25은 결측치 값이 약 60% 가까이 차지하고 있음
- 위에 데이터 전처리 부분에서 -999 결측치 값을 null 처리하고 null 개수 카운팅을 했을 때 약 3771만개 정도 나오고, 총 데이터 개수가 약 6284만개 인 것을 보아, 집계 결과가 맞음
- 알 수 없음 값을 제외하면, 보통이 제일 많은 비율을 차지하고 있고, 보통, 나쁨, 매우 나쁨 순으로 비율이 높음
- 매우 나쁨의 경우 약 1.46%, 0.5% 비율
데이터 분석 작업 5
- PM25(초미세먼지)특성과 나머지 대기오염물질 특성 간의 상관관계를 계산 하였음
- 결과를 계산하기 전에는 PM10과 상관관계가 가장 높을 것으로 예상했음
- 실제로, 초미세먼지와 미세먼지의 상관관계가 제일 높았으며, O3 > S02 > NO2 > CO 순으로 상관관계가 높았음
데이터 분석 작업 결과
- 데이터 분석 작업 순서는 데이터 분석 작업 소요 시간 순으로 순서를 정했다
- 데이터 분석 1이 제일 적은 시간 소요 되었고, 5이 제일 많은 시간 소요 되었다
- 데이터 분석 작업 선정은 시계열 데이터나, 미세먼지 데이터에 대한 도메인이 적기 때문에 이 데이터로 해볼 법한 통계, 집계 분석 진행
- 이 데이터 분석 작업을 통해 얻은 점은 2001~2022년까지 에어코리아에서 제공하는 전국의 모든 미세먼지 데이터를 분석하는 것은 라즈베리파이 클러스터만으로도 충분히 수행 가능하고 성능도 괜찮다는 것을 확인한 것이다
다음 포스팅 예정
- 다음 포스팅에선 똑같은 데이터 분석 작업을 Pandas에서 해보고 이를 라즈베리파이 클러스터와 수행 시간을 비교하는 글을 작성
- PC - Pandas, PC - Spark, RaspberryPi cluster(5) - Spark, Single RaspberryPi(1) - Spark 이렇게 4 가지 비교군으로 수행 시간을 비교
'논문' 카테고리의 다른 글
2024년 한국종합컴퓨터 학술대회(KCC2024) 논문 발표 후기 (0) | 2024.09.27 |
---|---|
'사물인터넷 환경 저비용 대용량 데이터 분석 시스템 설계 및 성능 비교' 논문 작성 후기 (7) | 2024.09.23 |
Pandas, Apache Spark 데이터 분석 수행 시간 비교 (1) | 2024.09.21 |