제로베이스 데이터 취업 파트타임/100일 챌린지_일일 학습 일지

제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.09]

김뚱입니다 2025. 5. 9. 22:09

[강의 요약]

[Part 04. EDA/웹 크롤링/파이썬 프로그래밍_ Ch 02] 강의 수강

클립 12~20까지 강의 수강하였음

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰                                       ] 54/100일 (54%)

보니까 데이터 분석만 있고 그걸 바탕으로 ML DL을 돌리는 부분은 아직인 듯하다.

하지만 EDA가 기본 중에 기본이니 열심히 복습하는 걸로!

matplotlib 공식 사이트(참고용)

 

 

[12~20_matplotlib]

▶ 1. matplotlib 시각화 라이브러리

matplotlib은 파이썬에서 가장 많이 사용되는 시각화 도구다.

특히 데이터 분석에서 많이 사용한 경험이 있고, 실제로도 많이 사용한다.

 

기본 사용법은 다음과 같다.

import matplotlib.pyplot as plt
  • pyplotmatplotlib에서 시각화를 담당하는 핵심 모듈
  • 일반적으로 plt라는 별칭을 사용

 

주피터 노트북에서 코드를 작성한다면 환경설정을 해줘야 한다.

%matplotlib inline
  • 그래프가 외부 창이 아니라 출력 셀 안에 표시되도록 도와주는 매직 커맨드

 

 

▶ 2. 막대그래프 (Bar Graph)

막대그래프는 카테고리별 수치 데이터를 시각화하는 데 적합하다.

 

다음 코드는 서울시 각 자치구의 CCTV 설치 수량을 한눈에 비교할 수 있는 코드다.

data_result['소계'].sort_values().plot(kind='barh', grid=True, figsize=(10,10))
plt.title('구별 CCTV 설치 현황')
plt.xlabel('CCTV 대수')
plt.ylabel('자치구')
plt.show()
  • DataFrame.plot(kind='barh') : 수평 막대그래프 생성
  • sort_values() : CCTV 수 기준으로 정렬
  • grid=True : 격자선 추가
  • figsize=(10,10) : 그래프의 크기 조정
  • plt.title() / xlabel() / ylabel() : 제목 및 축 이름 지정
  • plt.show() : 그래프 출력 명령

 

 

▶ 3. 산점도 (Scatter Plot)로 관계 시각화

산점도는 두 변수 간의 상관관계를 시각화하는 대표적인 방법이다.

예를 들어 인구수 ↔ CCTV 설치 대수

plt.scatter(data_result['인구수'], data_result['소계'], s=50)
plt.xlabel('인구수')
plt.ylabel('CCTV 수')
plt.title('인구수와 CCTV 수 관계')
plt.grid(True)
plt.show()
  • plt.scatter(x, y) : 산점도 그리기
  • s=50 : 점 크기 설정 (size)
  • xlabel / ylabel / title : 축과 제목
  • grid(True) : 격자 표시

 

 

▶ 4. 경향선(선형 회귀선) - numpy 활용

산점도는 관계를 시각적으로 보여주지만, 정량적 추세선이 없으면 비교하기 어렵다.

이를 위해 numpypolyfit()과 poly1d()를 이용해 1차 함수 기반 경향선을 추가한다.

import numpy as np

fp1 = np.polyfit(data_result['인구수'], data_result['소계'], 1)  # 1차 회귀 계수 구하기
f1 = np.poly1d(fp1)  # 회귀식을 함수로 변환
fx = np.linspace(data_result['인구수'].min(), data_result['인구수'].max(), 100)  # 등간격 x 데이터

# 시각화
plt.scatter(data_result['인구수'], data_result['소계'], s=50)
plt.plot(fx, f1(fx), ls='dashed', lw=3, color='g')
plt.xlabel('인구수')
plt.ylabel('CCTV 수')
plt.title('인구수 대비 CCTV 경향선')
plt.grid(True)
plt.show()
  • np.polyfit(x, y, 1) : x, y값을 바탕으로 1차 회귀 직선의 계수 [기울기, 절편] 반환
  • np.poly1d() : 다항식 계수 리스트를 함수처럼 쓸 수 있도록 객체로 반환
  • np.linspace(start, end, num) : 지정 구간에서 num개의 등간격 데이터를 생성 (X축용)
  • ls='dashed' : 선 종류 (점선)
  • lw=3 : 선 굵기

 

 

▶ 5. 오차 계산 및 색상 시각화

실제 데이터와 추세선 사이의 거리를 계산하면, 예상보다 많은 CCTV를 설치한 구 / 적게 설치한 구를 알 수 있다.

data_result['오차'] = np.abs(data_result['소계'] - f1(data_result['인구수']))

오차값을 산점도의 color로 반영하여 강조 시각화

plt.figure(figsize=(14,10))
plt.scatter(data_result['인구수'], data_result['소계'], 
            c=data_result['오차'], s=50, cmap='Reds')
plt.plot(fx, f1(fx), ls='dashed', lw=3, color='g')
plt.xlabel('인구수')
plt.ylabel('CCTV 수')
plt.title('오차를 색으로 표현한 인구-CCTV 관계')
plt.colorbar(label='오차 크기')
plt.grid(True)
plt.show()
  • c=data_result['오차'] : 각 점의 색상을 오차값에 따라 다르게
  • cmap='Reds' : 색상 맵 적용 (진한 빨강 = 큰 오차)
  • colorbar() : 색상 범례 추가

 

 

▶ 6. 구 이름 표시

중요한 포인트의 데이터는 이름을 직접 표시해 주면 이해에 도움이 된다.

for idx in data_result.sort_values(by='오차', ascending=False).index[:5]:
    gu = data_result.loc[idx]
    plt.text(gu['인구수']*1.02, gu['소계']*0.98, idx, fontsize=9, color='blue')
  • plt.text(x, y, 문자열) : x, y 좌표에 텍스트 표시
  • *1.02, *0.98 : 마커와 겹치지 않도록 살짝 이동
  • fontsize, color : 폰트 크기와 색상 지정

 

 

▶ 7. 분석 결과 저장

분석한 데이터를 CSV 파일로 저장하면, 나중에 분석을 이어가거나 시각화만 다시 할 때 편리하다.

data_result.to_csv("data_result.csv", encoding="utf-8")

저장위치는 본인이 원하는 곳으로 지정하면 된다.

  • DataFrame.to_csv(filename) : 데이터를 CSV 형태로 저장
  • encoding='utf-8' : 한글 깨짐 방지를 위한 인코딩 설정 (Windows는 cp949일 수도 있음)
 
 
 

[요약]

기능 목적 함수 / 문법 설명
시각화 기본 그래프 출력 plt.plot(), plt.scatter() 관계, 분포 표현
회귀선 생성 추세선 도출 np.polyfit(), np.poly1d() 1차 선형 함수 구성
오차 계산 경향과 차이 측정 np.abs() 절대값 오차 계산
시각화 색상 강조 오차 시각화 c=, cmap= 점 색상으로 오차 표현
텍스트 표시 데이터 레이블 plt.text() 각 점에 구 이름 붙이기
데이터 저장 분석 결과 보관 to_csv() CSV 파일로 저장

 

 

 

[나의 생각 정리]

데이터 분석에 사용되는 시각화 라이브러리 matploblib의 기본 사용 방법을 정리할 수 있었다.

 

 

[적용점]

데이터 분석(EDA)에서 시각화

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”