매출 순이익 비교: 파이썬 시각화로 쉽게 이해하기
안녕하세요! 이번 포스트에서는 매출 순이익 비교 데이터를 파이썬 시각화로 쉽게 이해하는 방법을 알아보겠습니다. 기업의 매출과 순이익은 경영 성과를 대표하는 중요한 지표인데요. 이 두 가지를 한눈에 비교하면 회사의 수익 구조를 더 잘 파악할 수 있습니다.
여기서는 Python의 대표적인 시각화 도구 두 가지인 Matplotlib과 Plotly를 활용하여 매출과 순이익 데이터를 그래프로 나타내보겠습니다. 초보자분들도 따라할 수 있도록 코드 예제와 상세 해설을 함께 제공하니, 데이터 시각화에 입문하려는 분들께 도움이 되길 바랍니다.
매출 순이익 비교의 의미
매출은 제품이나 서비스를 판매하여 얻은 총 수익을 말하고, 순이익은 모든 비용을 제외하고 최종적으로 남는 순수한 이익을 의미합니다. 매출과 순이익을 함께 비교하면 수익성을 평가할 수 있는데요. 예를 들어 매출은 늘고 있는데 순이익이 제자리라면 비용 증가로 인해 이익률이 낮아졌다는 신호일 수 있습니다.
반대로 매출 대비 순이익이 크다면 효율적인 경영을 하고 있다는 뜻이겠죠. 이렇게 두 지표를 나란히 놓고 보면 기업의 재무 상태를 직관적으로 이해하는 데 도움이 됩니다. 이제 실제 예시 데이터를 가지고 두 지표를 시각화해보겠습니다.
Matplotlib으로 매출과 순이익 시각화

먼저 Matplotlib 라이브러리를 사용해 매출과 순이익 데이터를 위와 같이 시각화해보겠습니다. Matplotlib은 파이썬에서 가장 널리 쓰이는 데이터 시각화 라이브러리로, 다양한 종류의 그래프를 손쉽게 그릴 수 있습니다. 아래 코드와 함께 각 단계별 설명을 덧붙였으니 하나씩 따라와 보세요.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 설정 (단위: 천 달러)
companies = ['Nvidia', 'Apple', 'Meta', 'Alphabet', 'Broadcom', 'Microsoft', 'Tesla', 'Amazon']
revenue_per_employee = [3600, 2400, 2200, 1900, 1400, 1100, 777, 410]
profit_per_employee = [2000, 572, 842, 546, 159, 387, 57, 38]
# 그래프 생성 및 설정
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 8), sharey=True)
fig.suptitle('Tech Companies: Revenue and Net Income Per Employee (2024)', fontsize=24, fontweight='bold', y=0.95)
# 첫 번째 그래프: 직원 1인당 매출
bars1 = ax1.barh(companies, revenue_per_employee, color='green', alpha=0.7)
ax1.set_title('Revenue Per Employee ($K)', fontsize=18, fontweight='bold')
ax1.set_xlabel('Revenue ($K)')
ax1.set_xlim(0, 4000) # x축 범위 설정
ax1.grid(axis='x', linestyle='--', alpha=0.7)
ax1.invert_yaxis() # 리스트 순서 반대로 (높은 값이 위로)
# 두 번째 그래프: 직원 1인당 순이익
bars2 = ax2.barh(companies, profit_per_employee, color='lightgreen', alpha=0.7)
ax2.set_title('Net Income Per Employee ($K)', fontsize=18, fontweight='bold')
ax2.set_xlabel('Net Income ($K)')
ax2.set_xlim(0, 4000) # x축 범위 설정
ax2.grid(axis='x', linestyle='--', alpha=0.7)
# 막대 끝에 값 표시
for ax, bars in zip([ax1, ax2], [bars1, bars2]):
for bar in bars:
width = bar.get_width()
ax.text(width + 50, bar.get_y() + bar.get_height()/2, f'{int(width)}',
va='center', fontsize=12)
# 각 막대 그래프에 격자 선 추가
ax1.set_xticks([0, 1000, 2000, 3000])
ax2.set_xticks([0, 1000, 2000, 3000])
# 박스 제거 (프레임 제거)
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.spines['left'].set_visible(False)
ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
# y축 틱 레이블 유지하면서 틱 라인 제거
ax1.tick_params(axis='y', which='both', length=0)
ax2.tick_params(axis='y', which='both', length=0)
# 하단에 설명 추가
fig.text(0.5, 0.05, 'Values shown in thousands of dollars ($K) per employee',
ha='center', fontsize=12, style='italic')
fig.text(0.5, 0.03, 'Data for 2024 fiscal year',
ha='center', fontsize=12, style='italic')
# 레이아웃 조정
plt.tight_layout()
plt.subplots_adjust(top=0.88, bottom=0.1)
# 그래프 표시
plt.show()코드 해설:
import matplotlib.pyplot as plt: 데이터 시각화를 위한 Matplotlib 라이브러리의 pyplot 모듈을plt라는 이름으로 가져옵니다.import numpy as np: 수치 연산을 위한 NumPy 라이브러리를np라는 이름으로 가져옵니다.companies = ['Nvidia', 'Apple', ...]: 그래프에 표시할 기술 회사들의 이름을 리스트로 정의합니다.revenue_per_employee = [3600, 2400, ...]: 각 회사별 직원 1인당 매출액을 천 달러 단위로 저장한 리스트입니다.profit_per_employee = [2000, 572, ...]: 각 회사별 직원 1인당 순이익을 천 달러 단위로 저장한 리스트입니다.fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 8), sharey=True): 1행 2열 구조의 서브플롯을 생성합니다. 가로 14인치, 세로 8인치 크기로 설정하고,sharey=True로 두 그래프가 Y축을 공유하도록 합니다.fig.suptitle(...): 전체 그래프의 상단 제목을 설정합니다. 폰트 크기는 24, 굵은 글씨체로 표시합니다.bars1 = ax1.barh(companies, revenue_per_employee, color='green', alpha=0.7): 첫 번째 서브플롯에 회사별 직원 1인당 매출 데이터를 녹색 수평 막대 그래프로 그립니다. 투명도는 0.7로 설정합니다.ax1.set_title(...),ax1.set_xlabel(...): 첫 번째 그래프의 제목과 X축 라벨을 설정합니다.ax1.set_xlim(0, 4000): X축의 표시 범위를 0부터 4000까지로 제한합니다.ax1.grid(axis='x', linestyle='--', alpha=0.7): X축을 따라 점선 격자를 추가하고, 투명도를 0.7로 설정합니다.ax1.invert_yaxis(): Y축 순서를 역전시켜 데이터 값이 높은 회사가 위쪽에 오도록 합니다.bars2 = ax2.barh(...): 두 번째 서브플롯에 회사별 직원 1인당 순이익 데이터를 연한 녹색 수평 막대 그래프로 그립니다.for ax, bars in zip([ax1, ax2], [bars1, bars2]): ...: 두 그래프의 각 막대 끝에 수치 값을 표시하는 반복문입니다.bar.get_width()로 막대 길이를 가져오고, 그 위치에 정수 형태로 값을 표시합니다.ax1.set_xticks([0, 1000, 2000, 3000]): X축에 눈금을 1000 단위로 표시합니다.ax1.spines['top'].set_visible(False): 그래프 상단의 테두리선(spine)을 제거합니다. 마찬가지로 오른쪽과 왼쪽 테두리선도 제거하여 X축 선만 남도록 합니다.ax1.tick_params(axis='y', which='both', length=0): Y축의 눈금 표시선을 제거하면서도 레이블은 유지합니다.fig.text(...): 그래프 하단에 부가 설명을 이탤릭체로 추가합니다.plt.tight_layout(): 그래프 요소들 간의 간격을 최적화합니다.plt.subplots_adjust(top=0.88, bottom=0.1): 그래프의 상하 여백을 미세 조정합니다.plt.show(): 완성된 그래프를 화면에 표시합니다.
Plotly로 대화형 시각화 하기

이번에는 Plotly를 사용하여 같은 데이터를 시각화해보겠습니다. Plotly는 대화형(interactive) 그래프를 손쉽게 만들 수 있는 파이썬 라이브러리입니다. Matplotlib이 정적인 이미지 그래프를 그린다면, Plotly는 마우스로 값을 확인하거나 그래프 영역을 확대하는 등의 상호작용이 가능한 그래프를 만들어줍니다.
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# 데이터 설정 (단위: 천 달러)
companies = ['Nvidia', 'Apple', 'Meta', 'Alphabet', 'Broadcom', 'Microsoft', 'Tesla', 'Amazon']
revenue_per_employee = [3600, 2400, 2200, 1900, 1400, 1100, 777, 410]
profit_per_employee = [2000, 572, 842, 546, 159, 387, 57, 38]
# 서브플롯 생성
fig = make_subplots(
rows=1, cols=2,
subplot_titles=('Revenue Per Employee ($K)', 'Net Income Per Employee ($K)'),
shared_yaxes=True,
horizontal_spacing=0.05
)
# 첫 번째 그래프: 직원 1인당 매출
fig.add_trace(
go.Bar(
y=companies,
x=revenue_per_employee,
orientation='h',
text=revenue_per_employee,
textposition='outside',
marker=dict(color='green', opacity=0.7),
hovertemplate='<b>%{y}</b><br>Revenue: $%{x}K per employee<extra></extra>'
),
row=1, col=1
)
# 두 번째 그래프: 직원 1인당 순이익
fig.add_trace(
go.Bar(
y=companies,
x=profit_per_employee,
orientation='h',
text=profit_per_employee,
textposition='outside',
marker=dict(color='lightgreen', opacity=0.7),
hovertemplate='<b>%{y}</b><br>Net Income: $%{x}K per employee<extra></extra>'
),
row=1, col=2
)
# 전체 레이아웃 설정
fig.update_layout(
title=dict(
text='Tech Companies: Revenue and Net Income Per Employee (2024)',
font=dict(size=24, family='Arial', color='black'),
x=0.5
),
height=600,
width=1000,
showlegend=False,
annotations=[
dict(
text="Values shown in thousands of dollars ($K) per employee<br>Data for 2024 fiscal year",
showarrow=False,
xref="paper",
yref="paper",
x=0.5,
y=-0.15,
font=dict(size=12, style='italic')
)
]
)
# X축 설정
fig.update_xaxes(
range=[0, 4000],
gridcolor='lightgray',
gridwidth=1,
griddash='dash',
showline=True,
linecolor='black',
row=1, col=1
)
fig.update_xaxes(
range=[0, 4000],
gridcolor='lightgray',
gridwidth=1,
griddash='dash',
showline=True,
linecolor='black',
row=1, col=2
)
# Y축 설정 (프레임 제거)
fig.update_yaxes(
showline=False,
showgrid=False,
zeroline=False,
autorange='reversed' # 높은 값이 위에 오도록 역순 정렬
)
# 그래프 표시
fig.show()코드 해설:
import plotly.graph_objects as go: 대화형 시각화를 위한 Plotly 라이브러리의 graph_objects 모듈을go라는 이름으로 가져옵니다.from plotly.subplots import make_subplots: Plotly에서 여러 개의 서브플롯을 만들기 위한 함수를 가져옵니다.companies = ['Nvidia', 'Apple', ...]: 그래프에 표시할 기술 회사들의 이름을 리스트로 정의합니다.revenue_per_employee = [3600, 2400, ...]: 각 회사별 직원 1인당 매출액을 천 달러 단위로 저장한 리스트입니다.profit_per_employee = [2000, 572, ...]: 각 회사별 직원 1인당 순이익을 천 달러 단위로 저장한 리스트입니다.fig = make_subplots(...): 1행 2열 구조의 서브플롯을 생성합니다.subplot_titles로 각 그래프의 제목을 설정하고,shared_yaxes=True로 Y축을 공유하도록 합니다.fig.add_trace(go.Bar(...), row=1, col=1): 첫 번째 서브플롯에 수평 막대 그래프를 추가합니다.orientation='h'로 수평 방향을 지정하고,text와textposition으로 값을 막대 바깥에 표시합니다.marker=dict(color='green', opacity=0.7): 막대 차트의 색상과 투명도를 설정합니다.hovertemplate='<b>%{y}</b><br>Revenue: $%{x}K per employee<extra></extra>': 마우스를 올렸을 때 표시되는 호버 정보의 형식을 지정합니다.fig.add_trace(..., row=1, col=2): 두 번째 서브플롯에 순이익 데이터를 동일한 방식으로 추가합니다.fig.update_layout(...): 그래프의 전체 레이아웃을 설정합니다. 제목, 크기, 범례 표시 여부 등을 지정합니다.annotations=[dict(...)]: 그래프 하단에 부가 설명을 추가합니다.xref="paper"와yref="paper"로 전체 그래프 영역 기준으로 위치를 지정합니다.fig.update_xaxes(...): X축의 범위, 격자선 스타일, 선 색상 등을 설정합니다.griddash='dash'로 점선 격자를 구현합니다.fig.update_yaxes(showline=False, ...): Y축의 테두리선을 제거하고, 격자선과 영점선도 숨깁니다.autorange='reversed'로 데이터 값이 높은 회사가 위쪽에 오도록 역순 정렬합니다.fig.show(): 완성된 대화형 그래프를 표시합니다. 이 그래프는 마우스 호버 기능, 확대/축소, 이미지 저장 등 Plotly의 대화형 기능을 모두 지원합니다.
결론: 데이터 시각화의 중요성
매출과 순이익 같이 중요한 비즈니스 지표를 시각화하면 숫자 표만 볼 때보다 훨씬 쉽게 내용을 이해할 수 있습니다. 위에서 살펴본 것처럼 Python의 Matplotlib과 Plotly를 이용하면 초보자도 비교적 간단한 코드로 멋진 그래프를 그릴 수 있습니다.
Matplotlib은 정적 이미지로서 보고서나 문서에 넣기 좋고, Plotly는 인터랙티브 차트로 웹에서 실시간 분석에 유용합니다. 둘 다 장단점이 있으니 상황에 맞게 활용하면 좋겠습니다. 🙂 데이터 시각화는 많은 양의 정보를 효과적으로 전달하고 인사이트를 얻는 강력한 도구입니다.
앞으로 다양한 데이터에 적용해 보면서 더 복잡한 그래프 그리기나 다른 라이브러리(예: Seaborn, ggplot 등)도 도전해 보세요. 지속적인 연습와 학습이 데이터를 이해하는 눈을 더욱 키워줄 것입니다!
용어 해설
- 매출 (Revenue): 기업이 제품이나 서비스를 판매하고 얻은 총 수입입니다. 예를 들어 물건을 100만 원어치 팔았다면 매출은 100만 원입니다.
- 순이익 (Net Profit): 매출에서 비용을 모두 빼고 최종적으로 남는 이익입니다. 순이익은 매출에서 원가, 운영비, 세금 등 모든 지출을 제외한 금액입니다.
- 데이터 시각화: 데이터를 표나 문장이 아닌 차트나 그래프 형태로 표현하는 것을 말합니다. 시각화를 통해 복잡한 데이터도 쉽게 이해하고 인사이트를 얻을 수 있습니다.
- Matplotlib: 파이썬에서 사용하는 대표적인 데이터 시각화 라이브러리입니다. 선 그래프, 막대 그래프 등 다양한 차트를 그릴 수 있으며, 튜닝과 커스터마이징이 자유롭습니다.
- Plotly: 대화형 데이터 시각화 라이브러리의 하나로, 웹 기반의 인터랙티브 차트를 쉽게 만들 수 있습니다. 줌인/줌아웃이나 마우스오버 정보 표시 등 상호작용 기능을 제공하여 데이터 분석 결과를 동적으로 탐색할 수 있습니다.







