데이터 시각화

XTHK·2025년 3월 19일

Anaysis

목록 보기
1/25

라이브러리 준비

import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px

import pandas as pd
import numpy as np

한글 설정

mpl.rc('font',family='Malgun Gothic') # 맑은고딕체

seaborn

1. displot()

  • seaborn의 모듈
  • 사용자 정의 분포
  • 히스토그램, KDE 그래프 및 ECDF 그래프를 포함한 다양한 종류의 분포 그래프를 생성할 수 있는 유연한 함수
sns.displot(df1, x='연령') # 연령별 전체 count

sns.displot(df1, x='연령', hue='성별') # 성별별 연령 count
  • hue : 해당 컬럼을 기준으로 결과를 나누어 봄
    • 위 코드 : 연령별로 성별을 나누어 count 해 시각화

그래프 모양을 바꾸고자 할 때에는 kind 값 지정

sns.displot(df1, x='연령', hue='성별', kind='kde')
  • kde(확률밀도함수) -> 연속형 함수(line)로

  • 기준 컬럼별 결과를 따로 보고싶다면 col 값 지정
sns.displot(df1, x='연령', hue='성별', kind='kde', col='결혼유무')


2.boxplot

  • 연속형변수(숫자범위)에만 적용
sns.boxplot(df1, x='연령')

  • 상자 시작지점 (40) : 25%
  • 상자 끝나는 지점 (60) : 75%
  • 수염 : (상자 끝나는 지점 - 상자 시작지점) * 1.5
  • 수염 바깥의 데이터를 이상치로 판단한다

3. countplot

  • 범주형 변수에 적용
  • 해당 컬럼 내 카테고리별 등장 count를 시각화
sns.countplot(df1, x='결혼여부', hue='성별')


다변수 시각화

  • X 범주 Y 연속
  • X 연속 Y 연속
  • X 순서 Y 연속

4. barplot

  • X 범주 Y 연속
sns.barplot(df1, x = '성별', y = '방문횟수', errorbar = None, hue = '결혼유무')
  • errorbar : 데이터 값이 신뢰 구간을 포함하는지 여부를 시각적으로 보여줌
    • 변경 가능한 옵션 : ci(신뢰구간), pi(예측구간), se(표준오차), sd(표준편차)
    • 없이려면 = None
  • y축의 디폴트 : 평균값(mean)
    • 변경하려면 estimator
(... estimator = 'sum')


5. scatterplot

  • X 연속 Y 연속
  • sns에서는 scatterplot / px에서는 scatter
sns.scatterplot(df1, x = 'A1', y = 'Y1A')

  • 그래프 시각화 범위 지정
    • [] 안에 범위 입력
    • 시각화 코드와 같은 셀에 포함되어야 함
plt.xlim([0,200])
plt.ylim([0,300])

점의 투명도 조정 : alpha

sns.scatterplot(df1, x = 'A1', y = 'Y1A', hue = 'tag', alpha = 0.6)


점의 크기 : s

sns.scatterplot(df1, x = '입고수량', y = '쿠팡출고수량', alpha = 0.5, s = 40)

6. lmplot

  • X 연속 Y 연속
  • 회귀선이 그려짐
sns.lmplot(df1, x = 'Y1A', y = 'Y2A', scatter_kws={'alpha': 0.3})

  • hue를 사용해 기준을 여러개로 만들면, 회귀선이 여러 개 그려짐
sns.lmplot(df1, x = 'Y1A', y = 'Y2A', hue = 'tag')


7. lineplot

  • sns에서는 lineplot / px에서는 line
  • X 순서 Y 연속
sns.lineplot(df1, x = '날짜_dt', y = '쿠팡출고수량')

  • 선 주위의 하늘색 범위 : errorbar (에러선)
  • 겹쳐져서 안보이는 x축 라벨 수정 : xticks(rotation=45)
sns.lineplot(df1, x = '날짜_dt', y = '쿠팡출고수량', errorbar = None)
plt.xticks(rotation = 45) # x축 값들을 45도로 기울임
plt.xlabel('') # x축 이름 설정
plt.ylabel('')
plt.title('날짜 별 쿠팡출고수량')
plt.show()

  • 카테고리(내용별) 시각화
plt.figure(figsize = (20, 10))
sns.lineplot(df1, x = '날짜_dt', y = '쿠팡출고수량', errorbar = None,
             hue = '카테고리')
plt.xticks(rotation = 45)
plt.show()


여러 칸(subplot)으로 나누어 시각화

fig, axes = plt.subplots(1, 3, figsize = (20, 10))
  • 1행 3열로, 각각 10X20 크키의 공간 형성
def func62():
    cat_in = '헤어케어'
    cond1 = df1['카테고리'] == cat_in
    p1 = df1.loc[cond1]

    p2 = p1.pivot_table(index = ['발주가능상태', '월'], values = '쿠팡출고수량', aggfunc = 'sum')

    fig, axes = plt.subplots(1, 3, figsize = (20, 10))

    sns.barplot(data = p1.loc[p1['발주가능상태'] == '발주가능'], 
                x = '월', y = '쿠팡출고수량', ax = axes[0], errorbar= None)
    axes[0].set_title('발주가능')
    axes[0].set_ylim(30, 70)
    
    sns.barplot(data = p1.loc[p1['발주가능상태'] == '발주중단'], 
                x = '월', y = '쿠팡출고수량', ax = axes[1], errorbar = None)
    axes[1].set_title('발주중단')
    
    sns.barplot(data = p1.loc[p1['발주가능상태'] == '단종'], 
                x = '월', y = '쿠팡출고수량', ax = axes[2], errorbar = None)
    axes[2].set_title('단종')

    fig.show()
  • ax = axes[0]로 위치 지정

plotly.express

  • pivot_table로 만든 이후, 시각화 필요
  • 항상 reset_index() 되어 있어야 함

1. pie chart

  • px에서만 가능
px.pie(v1, names = v1.index, values = v1.values)


line


histogram, bar, scatter ...

px.histogram(df1, x = '입수', color = '발주가능상태', marginal = 'box')


-marginal = 'box' : boxplot도 함께 시각화 가능


scatter

  • size : 원의 크기 조정
  • size에 컬럼 지정 시, 해당 컬럼값이 클수록 원의 크기가 커짐 (동적 시각화)
px.scatter(df1, x = '입고수량', y = '쿠팡출고수량', color = '카테고리', size = '쿠팡현재재고수량')
# 원이 클수록 size : '쿠팡현재재고수량'가 높다는 뜻

  • facet_row : 시각화 칸을 나누는 기준 (≒ sns의 col 변수)
    • facet : n.한 면
px.scatter(df1, x = '입고수량', y = '쿠팡출고수량', color = '카테고리',
           size = '쿠팡현재재고수량', facet_row = '월')


이미지 저장

plt.savefig('image1.jpg')
  • 시각화 한 코드와 동일한 셀에서 실행해야 함
  • ( )안의 내용은 저장될 이름과 형식
profile
Analyse the world

0개의 댓글