바 차트(막대그래프)는 카테고리 간의 데이터를 비교하고 시각화하는 데 매우 유용합니다. 바 차트는 데이터가 카테고리형 데이터이거나 연속적이지 않고 이산적인 데이터 인 경우에 유용합니다. 시간 경과에 따른 변화를 나타내기보다 특정 시점에서의 비교가 더 중요한 경우나 각 항목이 전체에서 차지하는 비중이나 기여를 비교할 때 유용하게 사용됩니다.
바 차트를 사용하기 적합한 데이터의 특징
범주형 데이터: 바 차트는 범주형 데이터를 시각화하는 데 가장 효과적입니다. 예를 들어, 국가별 인구, 제품별 판매량, 부서별 직원 수 등과 같은 범주나 그룹 간의 비교를 시각적으로 표현하는 데 적합합니다.
서로 다른 그룹 간 비교: 바 차트는 정량적 데이터, 즉 수치 데이터를 비교하는 데 유용합니다. 각 바의 길이나 높이가 해당 데이터의 값을 나타내므로, 수치적으로 비교할 수 있습니다.
정렬된 데이터: 바 차트는 데이터를 오름차순 또는 내림차순으로 정렬하여 중요한 항목을 쉽게 파악할 수 있게 합니다. (가장 많이 팔린 제품부터 적게 팔린 제품까지 정렬한 판매량 데이터.)
비교 대상이 적당한 범위: 바 차트는 비교할 데이터가 너무 많지 않은 경우 효과적입니다. 데이터 항목이 많으면 바 차트가 복잡하고 읽기 어려워질 수 있습니다.
단일 변수 : 바 차트는 주로 단일 변수의 분포를 보여주는 데 사용됩니다. 예를 들어, 특정 연도의 각 월별 판매량을 나타낼 때 유용합니다.
바 차트의 특징
직사각형 막대로 데이터 표현: 바 차트는 각 데이터 포인트를 직사각형 막대로 표현합니다. 막대의 길이(또는 높이)는 데이터 값의 크기를 나타냅니다. 막대가 길수록 데이터 값이 큽니다.
카테고리별 데이터 비교에 적합: 바 차트는 여러 카테고리(예: 제품, 지역, 기간 등) 간의 데이터를 비교하는 데 매우 유용합니다. 각 막대는 특정 카테고리를 대표하며, 시각적으로 각 카테고리 간의 차이를 명확하게 보여줍니다.
누적 및 그룹화 기능: 여러 데이터 세트를 비교할 때, 같은 카테고리 내에서 막대를 나란히 배치하여 그룹 간의 차이를 시각적으로 비교할 수 있습니다.
정렬 가능: 바 차트는 막대의 길이를 기준으로 정렬할 수 있습니다. 이를 통해 가장 큰 값에서 가장 작은 값까지, 또는 그 반대로 값을 정렬하여 데이터의 중요도를 강조할 수 있습니다.
Plotly로 라인 차트 그리는 방법
데이터 준비
이제 Plotly를 사용하여 간단한 막대그래프를 그려보겠습니다. 예시로, 카테고리별로 판매된 제품 수를 나타내는 막대그래프를 만들어 보겠습니다. 연습을 위한 데이터 프레임을 생성합니다.
이 그래프는 각 제품에 대해 2023년과 2024년의 판매량을 나란히 비교할 수 있도록 해줍니다. 막대가 서로 다른 색상으로 구분되어 있어 시각적으로 쉽게 비교할 수 있습니다.
fig.add_trace(go.Bar(...)) 함수는 여러 개의 막대그래프를 함께 표시하기 위해 사용합니다. 2023년과 2024년 막대그래프를 함께 표현하기 위해 사용합니다. fig.update_layout(...)함수는 그래프의 레이아웃을 조정하고 제목과 축 레이블을 변경하기 위해 사용합니다. 마지막으로 fig.show()함수를 사용해서 그래프를 화면에 출력합니다.
위와 같이 그래프의 barmode를 stack으로 변경하면 2023년과 2024년 제품이 stack되는 형태로 나타납니다. 각 제품의 전체 총량의 비교를 위해 사용될 수 있습니다.
데이터를 변환하여 막대그래프 그리기
기존 dataframe의 형태는 아래와 같이 “넓은 형식”의 데이터입니다.
제품
2023년 판매량
2024년 판매량
0
A
150
180
1
B
200
210
2
C
300
320
3
D
100
130
여기서 2023년 판매량, 2024년 판매량이라는 열이 각각 독립적인 값들로 존재합니다. melt() 함수를 사용하면 여러 열(column)을 하나의 열로 합쳐서 “긴 형식” 데이터로 변환할 수 있습니다. 이 방식은 여러 데이터 열을 하나로 합쳐서 시간 또는 카테고리별 데이터로 변환하는 데 유용합니다.
데이터를 길게 변환(melt)하여 두 해의 판매량을 하나의 열로 합치고, 이를 사용해 막대그래프를 그려보겠습니다.
# 데이터 변환df_melted = df.melt(id_vars='제품', var_name='년도', value_name='판매량')# 변환된 데이터 확인df_melted
제품
년도
판매량
0
A
2023년 판매량
150
1
B
2023년 판매량
200
2
C
2023년 판매량
300
3
D
2023년 판매량
100
4
A
2024년 판매량
180
5
B
2024년 판매량
210
6
C
2024년 판매량
320
7
D
2024년 판매량
130
df.melt() 함수는 Pandas에서 데이터를 “넓은 형식(wide format)”에서 “긴 형식(long format)”으로 변환할 때 사용되는 메서드입니다. 이 메서드는 데이터를 시각화하거나 분석할 때 좀 더 유연하게 다룰 수 있도록 도와줍니다.
id_vars='제품' : 이 인자는 변환 후에도 그대로 남길 열을 지정합니다. 여기서는 제품 열을 그대로 유지합니다. 즉, 제품 열은 melt 이후에도 변하지 않습니다.
var_name='년도': 이 인자는 새로 만들어질 열의 이름을 지정합니다. 원래 여러 개의 열(2023년 판매량, 2024년 판매량)이 년도라는 이름의 하나의 열로 합쳐집니다.
value_name='판매량': 이 인자는 새롭게 생성될 값 열의 이름을 지정합니다. 원래 여러 열에 있던 실제 값(판매량)이 이 열에 저장됩니다.
즉 제품 열은 그대로 유지되고 2023년 판매량, 2024년 판매량 열은 년도 열의 값으로 합쳐진 후 각각의 판매량 값은 판매량 열에 들어갑니다. 이렇게 변환된 데이터는 년도에 따라 데이터를 나누고, 그에 따른 판매량을 분석하거나 시각화하기 더 용이한 형태로 변환됩니다. 특히 시계열 분석이나 여러 카테고리를 비교할 때 유용합니다.
Note
Pandas의 melt 함수를 사용하여 데이터를 긴 형식으로 변환해야 하는 상황은 여러 개의 열(column)이 동일한 변수에 해당하는 경우입니다. 이런 상황에서는 데이터를 변환하여 분석 및 시각화를 더 쉽게 할 수 있습니다.
Plotly.express는 Plotly의 하위 모듈로, 간단한 시각화 작업을 위해 고안된 고수준 인터페이스를 제공합니다. Plotly Express를 사용하면 color 옵션을 사용해서 연도별 데이터를 색상으로 구분하여 표시할 수 있습니다.
cf_melted는 긴 형식(long format)으로 변환된 데이터로, 제품, 년도, 판매량의 세 가지 열로 구성되어 있습니다. 판매량 내부의 연도별 데이터가 서로 다른 색상으로 표현되었습니다. 이처럼 기존의 코드에서 각각의 열을 bar로 표현했던 코드를 melt와 Plotly Express의 바 차트의 color옵션을 사용해서 간결하게 표현할 수 있습니다.
Note
px.bar를 이용해서 긴 형식 데이터를 바 차트로 표현할 때 위의 코드와 같이 barmode=’grounp’을 적용하지 않으면 stack된 형태도 막대 그래프가 생성됩니다.
Bar 형태 및 색상 변경하기
fig.update_traces는 Plotly에서 데이터 시각화를 커스터마이즈할 때 사용되는 메서드로, 그래프의 모든 트레이스(traces)에 대해 공통적인 속성을 업데이트할 수 있게 해줍니다. traces는 그래프에 표시된 각각의 데이터 시리즈를 의미하며, 예를 들어 막대그래프에서는 각각의 막대가 하나의 트레이스입니다. 이 메서드는 공통된 스타일을 적용할 때 유용합니다.