ASAC-SK플래닛 T아카데미 데이터 엔지니어

25.11.28 37일차 [ pandas 피벗테이블, 중복제거, 결측처리, 컬럼명 변경 데이터 분석 시각화 | 개요, 라이브러리 소개, 한글처리, matplotlib, seaborn]

Datadesigner 2025. 11. 28. 17:22

오늘은

  • pandas피벗테이블
  • 중복 제거
  • 결측 처리
  • 컬럼명 변경

수업을 진행한 후

  • 데이터 분석 _EDA 시각화 처리
    • 개요
    • 라이브러리 소개
    • 한글처리
    • MATPLOTLIB
      • 선형차트
    • seaborn
      • Boxplot
      • 산점도, 산포도, Scatter
      • 상관관계 

에 대한 수업을 진행하였다.

 

 


피벗 테이블

 

판매실적 데이터를 제공받았다.
난수 발생 내용, 시드가 동일하면 여러번 난수코드를 돌려도 계속 같은 난수가 출력된다.

1. frac 설명 = 전체 모수의 50%를 샘플링하라는 뜻이다, 17개라서 8개만 했다.

2. 데이터상 Rep는 아마도 직원같다, 중간직급인? 그래서 모든 데이터를 가져온다.

이 때 세 코드 모두 정상적으로 작동하지만 loc를 사용한다면 고유한 문법을 지켜줘야 한다.

loc는 좌표를 특정해서 가져오기 때문에 그냥 df.loc['Rep']으로 가져오면 안되고 슬라이싱과 인덱스를 같이 써서 차원을 생각해줘야한다.

3. 모든 매니저를 구해온다. 아마 팀장급으로 예상된다.

  • 피벗 테이블 적용
    • 대상이 되는 컬럼
      • 데이터가 중복적으로 출현하는 컬럼
      • 범주형 데이터를 가진 컬럼
      • 그 고유한 값의 수가 적어야 함

각 직원(추정)으로 생각되는 사람들의 판매 수, 판매 금액을 출력한다.

우리의 추측대로 매니저>중간직급>사원 순으로 인덱스를 잡아본다. 

각 팀 기반의 영업 실적을 확인한다,

사원별 한 주문당 평균값, 주문 수, 합산으로 값을 세팅했다

그리고 나오는 결과로 인사이트를 도출할 수 있다.

그리고 각 팀별 총 매출과 평균 매출, 건수로 그룹화했다.

아마 debra팀 팀장은 쪼인트를 맞을거다

이제 각 사원들이 판매한 제품을 확인하여 데이터가 확실한지 체크할 것이다.

그런데 사원들마다 판매한 제품이 각각 달라서 결측치가 너무 많이 생긴다. 그래서 결측처리를 해줘야한다.

fill_value = 0 기능을 사용하면 결측치를 모두 0으로 처리할 수 있다.훨씬 깔끔해진 데이터 모습

그런데 fillna 함수를 사용하면 그냥 사본만 만들어준다, 원본에 데이터 수정이 안되니 이를 수행하고 싶으면 inplace 옵션을 주어서 원본에도 수정할 수 있다.

 


중복제거

더미데이터 생성
더미데이터를 merge해준다,

drop_duplicates()함수는 중복되는 값을 버려주는 기능을 한다.

중복되는 최초 데이터는 살려두고, 나중에 발견되면 삭제한다.


결측처리

 

  • 제거
    • 행 제거 : 데이터 삭제
      • 그 개수, 비율이 적으면 유리
      • 단순하게 적용 가능
      • 정보 손실 단점, 데이터상 편향 발생될 수 있음
    • 열 제거 : 결측 빈도가 너무 높아서 제거
      • 모델 단순화 장점, 정보 손실 단점
  • 대체
    • 특정값으로 고정 -> 전체 대상
      • 결측치를 특정 데이터로 간주
      • 이상치가 되거나, 분포상 왜곡 초래할 수 있음
    • 이전값 이후값 대체(next value 등등) -> 수치형
      • 시계열 데이터에서 빈번하게 발생
        • 금융(환율, 주가, 시세, . . .)
        • 제조(스마트팩토리, IOT) 센서 데이터
      • 평균/중앙값(4분위수의 50%지점) 등등 -> 수치형
        • mean/median
        • 아주 쉽게 적용
        • 데이터의 퍼짐(분산)을 과소 추정하는 문제
          • 표준편차의 부정확을 야기시킴,
        • 상관관계를 무시
      • 최빈값 대체 -> 범주형
        • 빈도가 적다 -> 상관관계 무시, 변동성 문제
  • 모델 활용(더 있어보이게) AI 활용
    • 머신러닝, 딥러닝 모델 이용하여 보정
    • 회귀
      • 선형적 관계 고려
    • 믹스 -> 집단지성
      • 여러 모델을 블랜딩하여 추정
 

 

컬럼명 변경 (초기작업)

컬럼명 변경 실습 위해서 다른 데이터를 받아왔다. 보기 힘들다.

그리고 txt 파일을 csv파일로 가져올때 옵션들을 만져줘야 가져와진다.

  • 데이터를 살펴본 후 불명확한(의미가 불분명, 공백 등) 컬럼 조정
    • 전체 변경
      • df.columns = ['', '', '', . . .]
    • 부분 변경
      • dict로 매칭하여서 rename() 함수 활용
        {
          '최초컬럼명':'신규컬럼명'
        }

데이터를 차근차근 본 후 의미가 이상한 컬럼은 수정해줘야한다, 전처리의 과정

부분만 변경하려면 dict로 매칭하여서 rename()함수를 사용한다.

df.rename(columns={

       내용

})

함수를 사용해서 컬럼명을 변경해준 모습이다, 그저 컬럼명 변경만 실습한것이라서 데이터의 내용은 배제하였다.

 

 


데이터 분석 EDA 시각화

개요

 

  • 목적
    • 정보, 메세지를 전달하기 위해, 글보다는 짧고, 간단한, 명료한 내용이 정리된 시각화된 자료가 더 임팩트가 큼
    • 시각화 도구를 이용하여 이를 구현
  • 장점
    • 컬럼간 관계 발견
    • 데이터에 숨겨진 트렌드 찾을 수 있음
    • 핵심을 전달하는 데이터 스토리텔링 구성 가능
    • 의사 결정에 도움을 줌
  • 분석 목적
    • 데이터에 대한 통찰(이 데이터는 무엇을 설명하고 있는가)
 

라이브러리 소개

 

  • 파이썬 계열
    • matplotlib부터 파생
  • js 계열 (웹으로 표현, 인터렉티브 지원)
    • D3, chart.js, . . .
  • 솔루션
    • Tableau, PowerBI
      • 스토리텔링, 대시보드, 등등 구성 -> 의사결정을 위한 PPT까지 진행 시킬수 있음
    • AI 솔루션 제공

한글처리

 

  • 코랩에서 진행할 경우 한글 폰트가 없기 때문에 차트에 한글 깨짐 (로컬PC는 관계 없음)
  • 아래 내용 실행 후 재실행 (그래야 한글폰트를 인식함)
!sudo apt-get install -y fonts-nanum

!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

 

 

패키지(라이브러리)별

 

 


matplotlib

 

 
  • https://matplotlib.org/
  • Matplotlib: Visualization with Python
  • 파이썬의 시각화 도구 중 가장 기본, 대부분 이를 기반으로 커스텀되어있다.
# 기본 코드
from matplotlib import pyplot as plt
# 아래 표현이 좀 더 자주 노출됨
import matplotlib.pyplot as plt

# 노트 안에 차트를 빌트인 시켜라 -> 코랩은 생략 가능함
%matplotlib inline

# 한글처리 (윈도우에서는 상이함 -> 적용 필요 x )
plt.rc('font', family='NanumBarunGothic')

선형차트 (Linear)

 

 
  • 선으로 데이터를 표현
    • 시계열데이터에서
      • 금융, 센서, 로그, . . .
      • x축 시간
    • 주기성(frequency)
import numpy as np

x = np.arange(0, 12, 0.01)
x.shape

 

arange() 함수로 0~12까지 0.01 간격으로 값을 만들었다.

# x와 y의 관계는 sin()함수로 설명할 수 있다.
# 미지수 x' 왔을때 예측 y'를 구할 수 있다. => 예측모델
y = np.sin(x)
y.shape

 

matplotlib을 이용해서 선형차트를 만들어냈다

 

xlim, ylim을 이용해서 값의 범위를 바꿔준다.
값의 범위가 바뀌어서 파형이 바뀐 모습이다,

seaborn

 

 


 

 
  • seaborn: statistical data visualization
  • Seaborn is a Python data visualization library based on matplotlib. It provides a high-level interface for drawing attractive and informative statistical graphics.
  • https://seaborn.pydata.org/
  • 주요 차트
    • 6개 중점 차트 (회귀, 등고선, 박스 플롯, 산포행렬등,. . .)
# 기본 코드
import seaborn as sns

# 스타일
sns.set_style('darkgrid') # 세련된 어두운 배경 + 격자
# 데이터 획득 -> 연습용 제공된 데이터 활용
tips = sns.load_dataset('tips')
tips.shape

더미데이터 샘플

더미데이터 정보

 

더미데이터 정보 2

더미데이터의 '범주형'  컬럼의 고유값들을 확인한다, 이 값으로 묶여야 하니까 

만약 컬럼이 수치형인 경우에는 인덱싱으로 표현하여 고유값을 추출해야한다.

 

  • 분석 예상 시나리오
    • RAW 데이터가 충분히 존재해야함
      • 핵심은 데이터
    • 요일별 매출 분석 (요일 vs 매출 상관관계 분석) -> 요일별 전략 수립
    • 성별에 따른 tip 분석
      • 서빙 직원들의 서빙 전략 상이해질수 있음
    • 흡연여부에 따른 매출은 어떻게 다른가?
      • 흡연 vs 매출 상관관계 분석 -> 전략 수립
    • 점심 및 저녁중 어느 쪽이 더 매출이 높은가?
      • 직원 배치 등 고정비에 대한 전략 수립 가능

Boxplot

 

 
  • 범주형 데이터 시각화 도구
  • 특징
    • 1, 2, 3, 4분위수 제공
    • 최소, 25%, 50%, 75%, 최대 제공
    • 이상치 표현 -> 자동 시각화
      • 여러가지 기법 존재 (차후 ML에서 확인)
      • 본 차트에서는 공식으로 계산 (4분위수)
        • IQR = Q3(75%) - Q1(25%)
        • 최대값 = Q3 + (1.5*IQR)
        • 최소값 = Q1 - (1.5*IQR)
        • 이상치는 최대값보다 크거나, 최소값보다 작으면 판정

박스플롯 설명

boxplot을 사용해서 요일별로 요일별 총 매출을 시각화했다.

토요일이 제일 매출이 높을것으로 예상, 이 때 목요일,금요일은 누가 매출이 더 높을지 잘 모른다.

같은 데이터를 흡연 여부로 한번 더 갈라줬다.

3번째 요소를 부여할때에는 무조건 범주형으로 넣어야 한다.

주말에는 흡연자가, 평일에는 비흡연자가 매출이 더 높은것을 확인할 수 있다.

 

박스플롯위에 다른 시각화 데이터를 덮어주었다.

swarmplot을 추가하여 데이터의 개수도 얼추 확인이된다.

이로 인해 금요일이 확실히 매출이 더 적다는 인사이트 또한 도출할 수 있다.

 

산점도,산포도,Scatter

 

 
  • 특징
    • 변수(컬럼)간 (통상2개) 관계 묘사
    • 데이터는 연속형
    • 회귀(머신러닝의 지도학습분석방법중 하나)

산포도를 이용해서 시각화한다, lmplot 사

수치형 데이터인 total_bill 과 tip 의 상관관계를 분석하기 위해서 해당 그래프를 사용해서 시각화하였다

총 지불금액이 높을수록 팁 또한 올라갔고  회귀선 기준으로 40달러 결제시 보통 5달러정도 기대한다.

흡연 데이터도 추가하여 올렸다. 이로 인해 흡연자, 비흡연자 등 주문금액과 팁에 차이가 있는 사실 또한 도출해낼 수 있 다.

  • 위의 시각화 및 분석의 결과로 다음과 같이 총 결제액과 팁간의 관계를 규정
    • total_bill = a * tip + b (단순 선형 회귀)
    • a, b의 값만 알면 고객의 결제액에 따른 팁을 예측할 수 있음
      • 통계적 계산
      • 머신러닝/딥러닝 계산 -> 학습을 통해서 계산할 수 있음 (학습의 결과 = 오차를 최소로 하는 a,b:파라미터)를 구하는 과정=학습

 

상관관계

 

  • 정의
    • 한 변수의 변화에 따른 다른 변수의 전도/방향성을 예측하는 분석 기법
    • 두 변수간의 관계를 파악하는 기법
    • 지표
      • 피어슨 상관관계 (등간척도기준)
      • 스피어만 상관관계 (서열척도기준)
 

  • 척도
    • 관측 대상의 속성을 측정, 그 값을 수치로 표현
    • 종류
      • 질적
        • 명목척도 : 남자 1, 여자 2,단순 부여
        • 서열척도 : 중간고사 1등, 2등
        • 스피어만 상관계수 사용
      • 양적
        • 등간척도 : 관찰대상의 속성을 크기로 표현함
          • 리커드 척도(이산형)
            • a:1점, b:2점, c:3점 -> 평점
            • c가 가장 호감도가 높다
          • 리뷰 별 1개, 2개, . ..
            • 별 5개가 가장 좋다
          • 피어슨 상관관계 사용
        • 비율척도 (연속형)
          • 무게, 시간, 거리, . . .
          • 피어슨 상관관계 사용

1. 흡연자와 비흡연자를 나눠준다

2. 상관관계 = corr함수를 사용해서

흡연자의 팁과 총 결제액간의 상관관계를 분석한다.

이 때 값이 0.48xxxx이므로 얘는 상관관계가 '있다'

비흡연자의 팁과 총 결제액간의 상관관계는

'크다'

 

오늘의 수업은 여기까지