본문 바로가기
데이터시각화

[메타코드] 파이썬 입문 데이터분석 프로젝트 만들기 (5) px.histogram() 파이썬으로 히스토그램 그리기

by 모닥불🔥 2024. 6. 30.

 

이번 글도 간단한 시각화 파트이다. 히스토그램 그리기! 이미지를 클릭하면 강의 사이트로 이동한다.

가입 시 5천원 주는 추천인 코드: EQQW-36EH-JY4P 추가해주시면 감사합니다.


🔥 강의 목차

오리엔테이션
파이썬 기초 문법
데이터 전처리
데이터 시각화
마케팅 데이터 분석 및 지표 정의하기

🔥 마케팅 데이터 전처리 &자동화 프로젝트(5) 히스토그램

번에는 히스토그램(histogram) 그리기. 히스토그램은 데이터의 분포를 시각적으로 나타낼 때 사용한다. 예를 들어, 고객의 연령대 분포, 제품 가격대 분포 등 데이터의 빈도수를 보여주는 데 적합하다.

 

아래는 히스토그램을 그리는 코드스니펫

import pandas as pd
import plotly.express as px

# 히스토그램 생성
fig = px.histogram(
    df,  # 사용할 데이터셋
    x='col_1',  # x축에 사용할 열 이름
    color='col_2',  # 색상으로 구분할 카테고리 열 이름
    barmode='stack/overlay/group',  # 막대 모드 설정 (group/overlay/stack 중 선택)
    marginal="rug", # margin에 추가적인 데이터 포인트 분포 표시
    title='histogram',  # 히스토그램의 제목
    # nbins= 10  # 막대의 개수
)

# 히스토그램 표시
fig.show()

 

이번에 사용할 데이터는 seaborn 라이브러리에 있는 'iris' 데이터이다.

import seaborn as sns
iris = sns.load_dataset('iris')

 

1) 기본적인 히스토그램 그리기

기본 히스토그램은 아래와 같이 그린다. sepal_length(꽃잎의 길이)에 대한 히스토그램을 그리고, 종별로 색을 다르게 표시했다.

import plotly.express as px

# 히스토그램 생성
fig = px.histogram(
    iris,  # 사용할 데이터셋
    x='sepal_length',  # x축에 사용할 열 이름
    color='species',  # 색상으로 구분할 카테고리 열 이름
    title='histogram',  # 히스토그램의 제목
)

fig.show()

 

setosa 종은4~6, versicolor 종은 4~7, virginica 종은 5~8 정도의 길이 분포를 가진다.

2) 기타 옵션들(add_vline/vrect/annotation, update_xaxes)

기타 옵션들을 정리한 코드 스니펫을 참고할 수 있다.

# 세로선 추가
fig.add_vline(
    x=20,  # 세로선의 x축 위치
    line_color="red/blue/green"  # 선의 색상
)
# 가로선 추가
fig.add_hline(
    y=20,  # 가로선의 y축 위치
    line_color="red/blue/green"  # 선의 색상
)

# 주석 추가
fig.add_annotation(
    x=20 ,  # 주석의 x축 위치
    y=30 ,  # 주석의 y축 위치
    text="텍스트"  # 표시할 텍스트
)

# 세로 스팬 추가
fig.add_vrect(
    x0='20',  # 스팬의 시작 x축 위치
    x1='2019-03-15',  # 스팬의 종료 x축 위치
    fillcolor="red/blue/green",  # 스팬의 색상
    opacity=0.5,  # 스팬의 불투명도
)

# x축 범위 설정 (예: 0부터 20까지)
fig.update_xaxes(range=[0, 20])

# y축 범위 설정 (예: -5부터 5까지)
fig.update_yaxes(range=[-5, 5])

 

실제 iris 데이터로 히스토그램 그래프를 그려 보면...

import plotly.express as px

# 히스토그램 생성
fig = px.histogram(
    iris,  # 사용할 데이터셋
    x='sepal_length',  # x축에 사용할 열 이름
    # color='col_2',  # 색상으로 구분할 카테고리 열 이름
    # barmode='stack/overlay/group',  # 막대 모드 설정 (group/overlay/stack 중 선택)
    # marginal="rug", # margin에 추가적인 데이터 포인트 분포 표시
    # title='histogram',  # 히스토그램의 제목
    nbins= 30  # 막대의 개수
)

# 세로선 추가
fig.add_vline(
    x=6,  # 세로선의 x축 위치
    # line_color="red/blue/green"  # 선의 색상
)

# 가로선 추가
fig.add_hline(
    y=6 # 세로축의 x 위치
    # line_color = 'red/blue/green' # 선의 색상
)

# 주석 추가
fig.add_annotation(
    x=6,  # 주석의 x축 위치
    y=15, # 주석의 y축 위치
    text='텍스트'  # 표시할 텍스트
)

# 세로 스팬
fig.add_vrect(
    x0='5.5', # 스팬의 시작 x축의 위치
    x1='6.5',  # 스팬의 종료 x축 위치
    fillcolor = 'red', # 스팬의 불투명도
    opacity=0.2,  # 투명도 조절
)
# 이것도 y로 바꿔서 쓰면 가로 스팬 지정 가능

# 히스토그램 표시
fig.show()

 

이렇게 표시된다.

 

위에서는 임의로 x축 위치 6, y축 위치 6에 선을 그었다.

데이터의 평균값을 구해서 x, y축에 선을 그어보면 아래와 같이 쓸 수 있다.

# 평균구하기
avg = iris.sepal_length.mean()
std = iris.sepal_length.std()

# 그래프 생성
fig = px.histogram(
    iris,
    x= 'sepal_length',
    height = 500, # 넓이
    width = 700 # 높이
)

# 세로 선 삽입(평균 위치에)
fig.add_vline(
    x=avg
)

# 평균을 주석으로 달기
fig.add_annotation(
    x=avg,
    y=30,
    text='{:.2f}'.format(avg)
)

# 표준편차를 이용하여 사분위범위 구하기
fig.add_vrect(
    x0= avg-std
    , x1=avg+std
    , fillcolor = 'red'
    , opacity = 0.2
)

# 평균값을 선으로 넣어보기
fig.show()

 

plotly 라이브러리에 다양한 그래프들이 있어 당분간은 그래프 그리는 방법들을 정리할 것 같다.

이번주도 파이팅!ㅁ! 🔥🔥🔥

 

* 본 게시글은 '메타코드'의 동의를 받아 작성된 글로, 강의 내용에 대한 모든 저작권은 Ringo 선생님에게 있습니다. 개인용도의 학습 외에 무단사용은 엄격히 금지됩니다. 위반 시 법적 조취가 취해질 수 있습니다.