파이썬은 데이터 분석과 시각화를 위한 다양한 라이브러리를 제공합니다. 대표적으로 NumPy, Pandas, Matplotlib, Seaborn 등이 있으며, 이 중에서도 Pandas는 NumPy를 기반으로 만들어진 오픈소스 라이브러리로, 데이터 분석 작업에서 가장 널리 사용되고 있습니다.
Pandas를 활용하면 빠른 데이터 분석은 물론, 데이터 클렌징(정제)과 전처리 작업까지 효율적으로 수행할 수 있습니다. 또한 다양한 내장 시각화 기능을 제공하여 별도의 도구 없이도 그래프를 손쉽게 그릴 수 있습니다.
Pandas 설치하기
Pandas를 설치하려면 터미널에서 아래 명령어를 실행하세요.
pip install pandas
Anaconda 환경을 사용하고 있다면 다음 명령어로 설치할 수 있습니다.
conda install pandas
Pandas 핵심 개념 1: DataFrame(데이터프레임)
DataFrame(데이터프레임)은 Pandas로 작업할 때 가장 핵심이 되는 자료구조입니다. 행과 열로 구성된 2차원 테이블 형태로, 엑셀 시트와 유사하게 데이터를 다룰 수 있습니다.
예제 코드
import numpy as np import pandas as pd from numpy.random import randn np.random.seed(50) df = pd.DataFrame(randn(6,4), ['a','b','c','d','e','f'],['w','x','y','z']) df
실행 결과
| w | x | y | z | |
|---|---|---|---|---|
| a | -1.560352 | -0.030978 | -0.620928 | -1.464580 |
| b | 1.411946 | -0.476732 | -0.780469 | 1.070268 |
| c | -1.282293 | -1.327479 | 0.126338 | 0.862194 |
| d | 0.696737 | -0.334565 | -0.997526 | 1.598908 |
| e | 3.314075 | 0.987770 | 0.123866 | 0.742785 |
| f | -0.393956 | 0.148116 | -0.412234 | -0.160715 |
Pandas 핵심 개념 2: 결측치(Missing Data) 처리
실제 데이터에는 결측값(NaN)이 포함되어 있는 경우가 많습니다. Pandas는 이러한 결측 데이터를 처리하는 매우 편리한 방법들을 제공합니다.
import numpy as np
import pandas as pd
from numpy.random import randn
d = {'A': [1,2,np.nan], 'B': [9, np.nan, np.nan], 'C': [1,4,9]}
df = pd.DataFrame(d)
df실행 결과
| A | B | C | |
|---|---|---|---|
| 0 | 1.0 | 9.0 | 1 |
| 1 | 2.0 | NaN | 4 |
| 2 | NaN | NaN | 9 |
위 데이터프레임에는 총 3개의 결측값(NaN)이 존재합니다. 이를 처리하는 대표적인 방법을 살펴보겠습니다.
① dropna() - NaN이 포함된 행 삭제
df.dropna()
NaN이 하나라도 있는 행을 모두 제거합니다.
| A | B | C | |
|---|---|---|---|
| 0 | 1.0 | 9.0 | 1 |
② dropna(axis=1) - NaN이 포함된 열 삭제
df.dropna(axis = 1)
axis 옵션을 1로 지정하면 열 단위로 삭제가 진행됩니다.
| C | |
|---|---|
| 0 | 1 |
| 1 | 4 |
| 2 | 9 |
③ dropna(thresh=2) - 임계값 지정 삭제
df.dropna(thresh = 2)
thresh 옵션을 사용하면 정상 값이 최소 2개 이상인 행만 남깁니다.
| A | B | C | |
|---|---|---|---|
| 0 | 1.0 | 9.0 | 1 |
| 1 | 2.0 | NaN | 4 |
④ fillna() - 결측값 채우기
df.fillna(value = df.mean())
fillna() 메서드를 사용하면 NaN 값을 평균값 등으로 대체할 수 있습니다.
| A | B | C | |
|---|---|---|---|
| 0 | 1.0 | 9.0 | 1 |
| 1 | 2.0 | 9.0 | 4 |
| 2 | 1.5 | 9.0 | 9 |
Pandas로 외부 데이터 불러오기
Pandas는 CSV 파일을 로컬 컴퓨터에서 읽거나 웹에서 직접 가져와 데이터프레임으로 변환할 수 있습니다.
# pandas 라이브러리 임포트
import pandas as pd
# CSV 파일을 읽어 데이터프레임 변수에 할당
df = pd.read_csv("SYB61_T03_Population Growth Rates in Urban areas and Capital cities.csv", encoding = "ISO-8859-1")
# 데이터프레임의 첫 5개 행 출력
df.head()데이터 크기 확인하기
데이터프레임 또는 CSV 파일의 행과 열 개수를 확인하려면 shape 속성을 사용합니다.
# 데이터프레임의 행과 열 개수 세기 df.shape
실행 결과
(4166, 9)
즉, 4,166개의 행과 9개의 열로 구성된 데이터임을 알 수 있습니다.
Pandas 데이터프레임 연산 및 통계
Pandas는 데이터프레임에 대해 다양한 통계 연산을 수행할 수 있는 도구를 제공합니다.
describe() - 요약 통계량 계산
# NaN 값을 제외한 다양한 요약 통계량 계산 df.describe()
평균, 표준편차, 최솟값, 최댓값, 사분위수 등 주요 통계 정보를 한 번에 확인할 수 있습니다.
rank() - 순위 계산
# 수치형 데이터의 순위 계산 df.rank()
rank() 메서드는 각 열의 값들이 해당 열 내에서 몇 위에 해당하는지 순위를 계산해 줍니다.
Matplotlib으로 그래프 그리기
Pandas와 함께 Matplotlib을 사용하면 데이터를 다양한 형태의 그래프로 시각화할 수 있습니다.
선 그래프(Line Plot)
import matplotlib.pyplot as plt
years = [1981, 1991, 2001, 2011, 2016]
Average_populations = [716493000, 891910000, 1071374000, 1197658000, 1273986000]
plt.plot(years, Average_populations)
plt.title("Census of India: sample registration system")
plt.xlabel("Year")
plt.ylabel("Average_populations")
plt.show()연도별 인구 변화 추이를 선 그래프로 한눈에 파악할 수 있습니다.
산점도(Scatter Plot)
plt.scatter(years, Average_populations)
같은 데이터를 산점도로 표현하면 각 데이터 포인트의 분포를 직관적으로 확인할 수 있습니다.
히스토그램(Histogram)
import matplotlib.pyplot as plt
Average_populations = [716493000, 891910000, 1071374000, 1197658000, 1273986000]
plt.hist(Average_populations, bins = 10)
plt.xlabel("Average_populations")
plt.ylabel("Frequency")
plt.show()히스토그램은 데이터의 구간별 빈도 분포를 보여주므로, 인구 값들이 어떤 범위에 집중되어 있는지 파악하는 데 유용합니다.
마무리
지금까지 Pandas를 활용한 데이터프레임 생성, 결측치 처리, 외부 데이터 불러오기, 통계 연산, 그리고 Matplotlib을 이용한 시각화까지 살펴보았습니다. 이 두 라이브러리만 잘 활용해도 실무에서 필요한 대부분의 데이터 분석 작업을 효율적으로 수행할 수 있습니다. 더 나아가 Seaborn 같은 고급 시각화 라이브러리를 함께 학습하면 더욱 세련된 데이터 인사이트를 얻을 수 있습니다.