파이썬은 데이터 시각화를 위해 다양하고 사용하기 쉬운 라이브러리를 제공합니다. 이러한 라이브러리들은 소규모 데이터셋부터 대규모 데이터셋까지 모두 원활하게 처리할 수 있다는 점이 큰 장점입니다.
데이터 시각화에 가장 널리 사용되는 파이썬 라이브러리는 다음과 같습니다.
Matplotlib – 가장 기본적이며 폭넓게 활용되는 시각화 라이브러리
Pandas – 데이터 분석과 함께 간편한 시각화 기능 제공
Plotly – 인터랙티브한 그래프 생성에 특화
Seaborn – 통계 기반의 세련된 시각화 지원
이번 글에서는 하나의 고정된 데이터셋을 서로 다른 유형의 차트로 시각화해 보면서, 같은 데이터라도 어떤 차트를 선택하느냐에 따라 분석 관점이 달라질 수 있음을 살펴보겠습니다.
예제로 사용할 데이터는 인도(India)의 2019년 인구 추계 값입니다.
| 국가/지역 | 연도 | 변형(Variant) | 값(Value) |
|---|---|---|---|
| 인도 | 2019 | 중위(Medium) | 1368737.513 |
| 인도 | 2019 | 높음(High) | 1378419.072 |
| 인도 | 2019 | 낮음(Low) | 1359043.965 |
| 인도 | 2019 | 출산력 일정(Constant fertility) | 1373707.838 |
| 인도 | 2019 | 즉시 대체(Instant replacement) | 1366687.871 |
| 인도 | 2019 | 이주 없음(Zero migration) | 1370868.782 |
| 인도 | 2019 | 사망률 일정(Constant mortality) | 1366282.778 |
| 인도 | 2019 | 변화 없음(No change) | 1371221.64 |
| 인도 | 2019 | 모멘텀(Momentum) | 1367400.614 |
기본 플롯(Basic Plot)
먼저 선 그래프, 산점도, 히스토그램과 같은 가장 기본적인 플롯부터 만들어 보겠습니다.
선 그래프(Line Plots)
선 그래프는 x값과 y값 사이의 관계를 선으로 연결해 표현하는 플롯입니다. 시간의 흐름에 따른 변화를 확인할 때 특히 유용합니다.
import matplotlib.pyplot as plt Year = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] India_Population = [1173108018,1189172906,1205073612,1220800359,1266344631,1309053980,1324171354,1339180127,1354051854,1368737513] plt.plot(Year, India_Population) plt.show()
출력 결과

산점도(Scatter Plots)
반면, 두 개의 좌표 값을 가진 수량을 개별 데이터 포인트로 표현하고 싶다면 산점도가 더 적합합니다.
선 그래프와 동일한 데이터를 사용하며, 앞선 코드에서 단 한 줄만 수정하면 산점도를 그릴 수 있습니다.
plt.plot(Year, India_Population,'o')
출력 결과

히스토그램(Histogram)
히스토그램은 과학 및 데이터 분석 분야에서 매우 자주 사용되는 차트로, 데이터의 분포를 시각화할 때 특히 유용합니다. 언젠가 반드시 그려야 할 일이 생길 가능성이 높은 차트이기도 합니다.
import pandas as pd import matplotlib.pyplot as plt data = [ ['India', 2019, 'Medium', 1368737.513], ['India', 2019, 'High', 1378419.072], ['India', 2019, 'Low', 1359043.965], ['India', 2019, 'Constant fertility', 1373707.838], ['India', 2019,'Instant replacement', 1366687.871], ['India', 2019, 'Zero migration', 1370868.782], ['India', 2019,'Constant mortality', 1366282.778], ['India', 2019, 'No change', 1371221.64], ['India', 2019, 'Momentum', 1367400.614]] df = pd.DataFrame(data, columns = ([ 'Country or Area', 'Year(s)', 'Variant', 'Value'])) df.hist() plt.show()
출력 결과

파이 차트(Pie Charts)
파이 차트는 전체에서 각 항목이 차지하는 비율을 직관적으로 보여 주는 데 효과적입니다.
import numpy as np
import matplotlib.pyplot as plt
n = 25
Z = np.ones(n)
Z[-1] *= 2.5
plt.axes([0.05, 0.05, 0.95, 0.95])
plt.pie(Z, explode = Z*.05, colors = ['%f' % (i/float(n)) for i in range(n)],
wedgeprops = {"linewidth": 1, "edgecolor": "green"})
plt.gca().set_aspect('equal')
plt.xticks([]), plt.yticks([])
plt.show()출력 결과

극좌표 플롯(Polar Plot)
극좌표 플롯은 각도와 반지름을 기준으로 데이터를 표현하는 방식으로, 방향성이나 주기성을 가진 데이터를 시각화할 때 유용합니다.
코드:
import numpy as np
import matplotlib.pyplot as plt
ax = plt.axes([0.5,0.05,0.95,0.95], polar=True)
N = 25
theta = np.arange(0.0, 2.5*np.pi, 2.5*np.pi/N)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
bars = plt.bar(theta, radii, width=width, bottom=0.0)
for r,bar in zip(radii, bars):
bar.set_facecolor( plt.cm.jet(r/10.))
bar.set_alpha(0.5)
ax.set_xticklabels([])
ax.set_yticklabels([])
plt.show()출력 결과
