Python

Python: 데이터 매핑 및 시각화

작심반복하기 2025. 6. 14. 15:26

[주요 코드] 

더보기

mapping = { 기존 값: 매핑값 }

chunck_size = 한번에 실행할 값 수 

unique ( ) = 고유 값 확인 

데이터 명. sort_values( '기준' )  = '기준'에 따라 데이터 정렬 

[1] 라이브러리 불러오기 

import pandas as pd  # 엑셀,csv,데이터프레임 형태 불러오기 
import matplotlib.pyplot as plt # 시각화 라이브러리
from matplotlib.backends.backend_pdf import PdfPages # 결과 PDf 저장

 

[2] 데이터 불러오기 

기본 전처리는 Power bi를 통해 행, 열 정리를 해주었다. 

esg= pd.read_excel(r"파일경로")
esg

<결과>  

 

[3] 환경등급 평가 매핑 

더보기

매핑을 한 이유 

환경 등급이 A+, A, B+, B, C, D, 등급없음, 미공개로 입력되어 있었다. 

하지만 평가년도별 기업의 환경평가 등급의 추이를 시각화하기 위해서는 정량적인 데이터가 필요했다. 

그에 따라 각 등급별로 숫자 값을 매핑하기로 결정! 

grade_mapping={
    'A+': 7,
    'A': 6,
    'B+': 5,
    'B': 4,
    'C': 3,
    'D': 2,
    '등급없음': 1,
    '미공개': 1
}
esg['환경등급_숫자']=esg['환경'].map(grade_mapping) #매핑한 값을 넣을 열 생성

 

<결과> 

 

[4] 기업 코드 확인 

* 동일한 기업코드를 가진 값의 연도별 추이를 시각화 

esg['기업코드'].unique()
  • unique() : 열의 고유값 확인 함수 

[5] 시각화 

기업코드리스트 = esg['기업코드'].unique() # 기업코드 리스트 생성 

plt.rcParams['font.family'] = 'Malgun Gothic' #한글깨짐방지 

chunk_size = 100 #한번 번에 처리할 기업 수 
for i in range(0, len(기업코드리스트), chunk_size):
    chunk = 기업코드리스트[i:i+chunk_size]  #현재 위치 i에서 부터 i+100까지 기업 코드를 잘라 chunck에 저장 
    pdf_path = f"환경등급_추이_{i//chunk_size + 1}.pdf" # pdf 파일 이름 
    
    with PdfPages(pdf_path) as pdf:
        for code in chunk: 
            df_temp = esg[esg['기업코드'] == code].sort_values('평가년도') 
            #esg 데이터에서 현재 기업 코드에 해당하는 행만 추출하고 평가년도로 정렬 
            if df_temp.empty: #데이터가 없으면, 건너뛰기 
                continue
            
            기업명 = df_temp['기업명'].iloc[0] #기업명 추출 

            plt.figure(figsize=(10, 5)) #그래프 사이즈 
            plt.plot(df_temp['평가년도'], df_temp['환경등급_숫자'], marker='o', linestyle='-', color='darkgreen') # x축 평가년도, y축 환경등급_숫자로 된 그래프, 점 표시, 진녹색 선
            plt.title(f"{기업명} ({code}) 환경 평가 등급 추이") #제목 이름 설정 
            plt.xlabel("평가년도") # x축 이름 
            plt.ylabel("등급 점수") # y축 이름 
            plt.xticks(df_temp['평가년도']) #x축 눈금 지정 
            plt.yticks(ticks=[1,2,3,4,5,6,7], labels=['1(미공개)', '2(D)', '3(C)', '4(B)', '5(B+)', '6(A)', '7(A+)']) #y축 눈금은 점수와 등급으로 표시 
            plt.grid(True) # 격자 생성 
            plt.tight_layout() # 레이아웃 자동 정리 (각 요소들이 겹치지 않게 여백 조정) 

            pdf.savefig() #현재 그린 그래프를 pdf 한장으로 저장 
            plt.close() # 그래프 닫기 
    
    print(f"✅ 저장 완료: {pdf_path}") #pdf 파일 저장 결과 알림

 

<결과>