ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로젝트] 전력수급현황 데이터 ETL 파이프라인 구축 및 분석 (Hadoop, Spark, Airflow)
    데이터 분석 공부/회고 2024. 7. 5. 10:25
    728x90

    Github 주소 : 

    https://github.com/pladata-encore/DE31-3rd_team6

     

    GitHub - pladata-encore/DE31-3rd_team6

    Contribute to pladata-encore/DE31-3rd_team6 development by creating an account on GitHub.

    github.com

     

    1. 주제

    전력수급현황 데이터 ETL 파이프라인 구축 및 분석

     

    1) 목표

    - 수업 시간에 배운 도구를 활용하여, 데이터 수집부터 시각화까지 전체적인 데이터 플로우를 확인하고, 파이프라인 구축을 목표로 함.
    - 전력수급 데이터를 효율적으로 수집, 저장, 분석하여 전력기획팀의 중장기적인 전략 수립과 의사결정을 지원
    - 전력수급 트렌드를 시간별, 월별, 연도별 분석 및 시각화 대시보드 제작

     

    2. 데이터셋

    1) 데이터셋 정보

    - 데이터셋 : 전력통계정보시스템에서 5분 단위로 생성되는 전력수급현황 데이터
    https://epsis.kpx.or.kr/epsisnew/selectEkgeEpsMepRealChart.do?menuId=030300
    - 수집 기간 : 2021/07/01 ~ ongoing (총 3년)
    - 5분 단위 실시간 데이터
    - 사용 컬럼
      - 공급능력
      - 현재수요(현재부하)
      - 공급예비력
      - 운영예비력

     

    2) 데이터 수집 및 저장

    - 데이터 크롤링 주기: 
      하루에 4회 (오전 6시, 오후 12시, 오후 6시, 오전 12시), 전일 데이터는 오전 6시 추가 수집

    - 배치성 데이터 수집 이유
      - 자원 효율성: 
      일정한 주기로 데이터를 수집함으로써 시스템 자원을 효율적으로 관리 및 서버 부담을 최소화
      - 정기적 분석: 
      일일 단위의 데이터를 집계하여 전력수급의 장기적인 트렌드를 분석하며, 실시간 데이터보다 더 명확한   패턴을 발견 가능성 증가
      - 데이터 관리 용이성: 
      일별 데이터를 폴더별로 저장하여 관리함으로써 데이터 접근성 제고 및 장기적인 데이터 관리 용이

    - 데이터 저장: 
    HDFS에 일자별로 저장하여 관리


    3. 사용 기술 스택

    4. 구현 과정

    1) 전력 데이터 크롤링

    - 데이터셋 확인 및 필요한 데이터 항목 결정
    - 수집 기간 내 데이터 크롤링 및 저장

     

    2) airflow - 실시간 전력 데이터 수집 및 저장

    (1) 플로우 설계

    1. 당일 날짜 데이터를 만드는 PythonOperator 작성
        1. 배치성으로 관리
            1. 데이터를 수집하는 목적 및 범위를 축소 시켜, 배치성으로 관리할 예정
            2. 내부 보고를 목적으로 함
            3. 대시보드 연동
        2. 당일 데이터 - 하루에 4번 수집 (오전 6시, 오후 12시, 오후6시, 오전 12시)
        3. 전일 데이터 - 하루 1번, 오전 6시에 한 번 크롤링( 데이터 크롤링 시, 웹페이지 상 데이터가 10~15분 지연되는 경우가 있음. 데이터를 호출하는 게 일자별 호출이기 때문에, 전일 데이터를 하루에 한 번 다시 업데이트 하는 것으로 해결)

    2. [전력통계정보시스템](https://epsis.kpx.or.kr/epsisnew/selectEkgeEpsMepRealChart.do?menuId=030300&locale=) 으로부터 웹 크롤링하는 pythonOperator 작성 (Extract)

    3. Preprocessing 
        1. Date/time 분리하는 컬럼 생성하는 데이터 작성(Extract)
        2. missing value 확인
        3. 공급 대비 수요량 퍼센테이지 계산하기 (Translate)
        4. 파생변수 컬럼 생성

    4. 데이터 저장하는 pythonOperator 작성 - 원본데이터 저장
        1. hadoop 서버에 csv 파일로 저장


    (2) DAG 작성

    - real_time_task >> yesterday_task
      - real_time_task : 현재 날짜 기준 실시간 전력 데이터 6시간마다 로드 및 기존 DF에 append → 해당 날짜를 파일명으로 하는 csv 에 저장 → HDFS에 csv 파일로 저장
      - yesterday_task : 전일 23:45 ~ 데이터 안 들어왔을 경우를 대비, 전일 데이터 전체 덮어쓰기 → 해당 날짜를 파일명으로 하는 csv 에 저장 → HDFS에 csv 파일로 저장


    3) Hadoop 및 Spark 클러스터 구축

    - Hadoop 클러스터(server1, server2, server3) 구성 및 설정
    - Spark 클러스터 구성하여 데이터 처리 및 분석 환경 구축


    4) 데이터 분석 및 시각화

    (1) PySpark를 활용한 데이터 처리 및 분석 수행

     

    (2) Tableau, Power BI를 이용한 데이터 시각화 대시보드 제작

      - 태블로 링크 : https://public.tableau.com/app/profile/hyeonji.kim7672/viz/mini3_17200759216340/1?publish=yes

     

     

    mini3

    mini3

    public.tableau.com

     

     

    5. 느낀 점 & 마무리

    개인적으로 java, 하둡, 카프카, 스파크 구축을 1~2주 안에 후루룩 배우면서 부침이 있었는데 

    3일동안 3명의 팀원으로 짧고 굵은 프로젝트를 진행 및 복습을 하면서 재미를 다시 붙인 소중한 프로젝트였습니다.

    파이프라인 및 웨어하우스 구축 경험이 생겨서 보람 있었습니다.

     

    이슈

     

    - 로드한 데이터 양이 충분할 것으로 판단했지만, 분석하는 단계에서 좀 더 많은 데이터가 있으면 좋았겠다고 생각함
    → 10년치 이상의 전력 수급 데이터 및 기온 데이터를 함께 분석해보면서 연속성, 상관성 분석을 하면 좋을 것 같음

     

    - 서버 성능 상 문제로 하둡 시스템이 자꾸 죽어서 연결에 어려움이 있었음
    → 네트워크 연결 안정성 향상을 위해 고정 ip 설정함

     

    - 클러스터를 구축했기 때문에 통합 df 파일을 csv화 할 수 없었고 분산 저장되는 시스템임을 알게 됨
    → 로컬에 csv 파일로 저장했는데, 데이터가 더 커지면 분산 처리 시스템 내에서 어떻게든 분석할 수 있는 역량이 필요… 

     

     

    댓글

Designed by Tistory.