통계는 머신러닝(ML)과 인공지능(AI)을 학습하는 데 있어 가장 기본이 되는 핵심 분야입니다. 파이썬은 이러한 기술 분야에서 가장 널리 사용되는 언어이기 때문에, 통계 분석을 포함하는 파이썬 프로그램을 작성하는 능력은 필수적입니다. 이 글에서는 다양한 파이썬 모듈을 활용해 그래프와 차트를 만드는 방법을 단계별로 살펴보겠습니다. 이러한 시각화 도구들은 데이터를 빠르게 분석하고, 패턴을 발견하며, 결론을 그래픽으로 도출하는 데 큰 도움을 줍니다.
데이터 준비
이번 실습에서는 다양한 밀 종자(wheat seeds)에 대한 정보를 담고 있는 데이터셋을 사용합니다. 이 데이터셋은 Kaggle에서 공개적으로 제공되며, 아래 프로그램 코드에 해당 링크가 표시되어 있습니다. 데이터셋은 총 8개의 열(column)로 구성되어 있으며, 각 열은 종자의 면적, 둘레, 압축률, 비대칭 계수 등의 특징을 나타냅니다. 이를 활용하면 서로 다른 종자들의 특징을 비교하는 다양한 유형의 차트를 만들 수 있습니다. 아래 프로그램은 로컬 환경에서 데이터셋을 불러온 후 샘플 행을 출력합니다.
예제
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
datainput = pd.read_csv('E:\\seeds.csv')
#https://www.kaggle.com/jmcaro/wheat-seedsuci
print(datainput)출력 결과
위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.
Area Perimeter Compactness ... Asymmetry.Coeff Kernel.Groove Type 0 15.26 14.84 0.8710 ... 2.221 5.220 1 1 14.88 14.57 0.8811 ... 1.018 4.956 1 2 14.29 14.09 0.9050 ... 2.699 4.825 1 3 13.84 13.94 0.8955 ... 2.259 4.805 1 4 16.14 14.99 0.9034 ... 1.355 5.175 1 .. ... ... ... ... ... ... ... 194 12.19 13.20 0.8783 ... 3.631 4.870 3 195 11.23 12.88 0.8511 ... 4.325 5.003 3 196 13.20 13.66 0.8883 ... 8.315 5.056 3 197 11.84 13.21 0.8521 ... 3.598 5.044 3 198 12.30 13.34 0.8684 ... 5.637 5.063 3 [199 rows x 8 columns]
히스토그램(Histogram) 생성
히스토그램을 만들려면 먼저 CSV 파일에서 헤더 행을 제거한 뒤, 파일을 numpy 배열로 읽어들여야 합니다. numpy의 genfromtxt 모듈을 사용하면 구분자(delimiter)를 지정해 손쉽게 파일을 배열로 변환할 수 있습니다. 커널 길이(Kernel Length) 필드는 배열에서 열 인덱스 3에 위치하며, 전체 데이터 개수의 제곱근 값을 계산해 적절한 구간(bin) 개수로 활용합니다. 마지막으로 matplotlib를 사용해 히스토그램을 그리고, x축과 y축에 필요한 라벨을 적용합니다.
예제
import matplotlib.pyplot as plot
import numpy as np
from numpy import genfromtxt
seed_data = genfromtxt('E:\\seeds.csv', delimiter=',')
Kernel_Length = seed_data[:, [3]]
x = len(Kernel_Length)
y = np.sqrt(x)
y = int(y)
z = plot.hist(Kernel_Length, bins=y, color='#FF4040')
z = plot.xlabel('Kernel_Length')
z = plot.ylabel('values')
plot.show()출력 결과
위 코드를 실행하면 다음과 같은 히스토그램이 출력됩니다.
경험적 누적 분포 함수(ECDF)
경험적 누적 분포 함수(Empirical Cumulative Distribution Function, ECDF)는 데이터셋 전체에 걸쳐 커널 홈(Kernel Groove) 크기가 어떻게 분포되어 있는지 보여주는 강력한 시각화 도구입니다. 모든 값을 가장 작은 값부터 가장 큰 값 순으로 정렬한 뒤, 각 값이 차지하는 누적 비율을 계산하여 하나의 분포 곡선 형태로 나타냅니다. ECDF를 활용하면 중앙값, 사분위수 등 데이터의 전반적인 분포 특성을 직관적으로 파악할 수 있습니다.
예제
import matplotlib.pyplot as plot
import numpy as np
from numpy import genfromtxt
seed_data = genfromtxt('E:\\seeds.csv', delimiter=',')
Kernel_groove = seed_data[:, 6]
def ECDF(seed_data):#Empirical cumulative distribution functions
i = len(seed_data)
m = np.sort(seed_data)
n = np.arange(1, i + 1) / i
return m, n
m, n = ECDF(Kernel_groove)
plot.plot(m, n, marker='.', linestyle='none')
plot.xlabel('Kernel_Groove')
plot.ylabel('Empirical cumulative distribution functions')
plot.show()출력 결과
위 코드를 실행하면 다음과 같은 ECDF 그래프가 출력됩니다.
벌집 플롯(Bee Swarm Plot)
벌집 플롯(beeswarm plot)은 개별 데이터 포인트들을 겹치지 않도록 시각적으로 배치함으로써, 데이터 그룹의 크기와 분포를 한눈에 보여주는 차트입니다. 각 점이 하나의 데이터를 의미하기 때문에 이상치(outlier)나 데이터 밀도를 쉽게 확인할 수 있다는 장점이 있습니다. 이 그래프는 seaborn 라이브러리의 swarmplot 함수를 사용해 간단하게 만들 수 있습니다. 여기서는 데이터셋의 Type 열을 기준으로 비슷한 유형의 종자들을 함께 묶어, 종자 유형별 비대칭 계수(Asymmetry Coeff)의 분포를 비교합니다.
예제
import pandas as pd
import matplotlib.pyplot as plot
import seaborn as sns
datainput = pd.read_csv('E:\\seeds.csv')
sns.swarmplot(x='Type', y='Asymmetry.Coeff',data=datainput, color='#458B00')#bee swarm plot
plot.xlabel('Type')
plot.ylabel('Asymmetry_Coeff')
plot.show()출력 결과
위 코드를 실행하면 다음과 같은 벌집 플롯이 출력됩니다.


