데이터 분석을 위한 파이썬과 판다스(Pandas)
파이썬은 웹 개발, 자동화, 게임 제작 등 다양한 분야에서 활용되지만, 최근 몇 년 사이 가장 각광받고 있는 분야는 바로 데이터 분석(data analysis)입니다. 이러한 작업을 더 쉽게 하기 위한 도구 중 대표적인 것이 판다스(Pandas)입니다.
판다스는 다음과 같은 상황에서 큰 효과를 발휘합니다:
- 엑셀보다 더 복잡한 데이터 처리나 분석이 필요한 경우
- 반복 작업을 자동화하고 싶은 경우
- 대용량 데이터를 빠르게 분석하고 시각화하고자 할 때
- 머신러닝이나 통계 분석의 기초를 배우고 싶을 때
판다스는 행과 열로 구성된 데이터 구조를 제공하여 초보자도 직관적으로 접근할 수 있습니다.
판다스 기본 사용법과 실습 예제
1. 시리즈와 데이터프레임
판다스에서 가장 기본적인 두 가지 구조는 Series(1차원)와 DataFrame(2차원) 입니다.
import pandas as pd
# Series 예시
s = pd.Series([10, 20, 30])
print(s)
0 10
1 20
2 30
dtype: int64
Series는 인덱스를 가지고 있는 리스트처럼 보면 됩니다.
# DataFrame 예시
data = {
"이름": ["철수", "영희", "민수"],
"나이": [25, 30, 27]
}
df = pd.DataFrame(data)
print(df)
출력결과입니다.
이름 나이
0 철수 25
1 영희 30
2 민수 27
dtype: int64
이제부터는 대부분의 작업을 DataFrame 중심으로 하게 됩니다.
2. 외부 파일 불러오기 및 저장
# CSV 파일 불러오기
df = pd.read_csv("sample.csv")
# 엑셀 파일 불러오기 (openpyxl 필요)
# pip install openpyxl
df_excel = pd.read_excel("sample.xlsx")
# CSV 저장
df.to_csv("결과.csv", index=False)
# 엑셀 저장
df.to_excel("결과.xlsx", index=False)
파일로부터 데이터를 불러오면 다양한 분석을 진행할 수 있으며, 다시 파일로 저장할 수도 있습니다.
3. 데이터프레임 기초 탐색
print(df.shape)
print(df.columns)
print(df.head())
print(df.tail())
print(df.info())
print(df.describe())
이 과정은 데이터를 이해하는 데 매우 중요합니다. 데이터를 다루기 전에 항상 구조와 특성을 먼저 파악하는 것이 기본입니다.
4. 행과 열 선택
# 단일 열
df["이름"]
# 여러 열
df[["이름", "나이"]]
# 특정 행
df.loc[1]
df.iloc[1]
# 특정 행과 열
df.loc[0:1, ["이름", "나이"]]
loc[], iloc[]는 행과 열을 조합해서 원하는 데이터를 자유롭게 선택하는 데 사용됩니다.
5. 조건 필터링
# 나이가 25 이상인 사람
df[df["나이"] >= 25]
# 이름이 철수인 경우
df[df["이름"] == "철수"]
조건 필터링은 매우 자주 사용되며, SQL의 WHERE 절과 유사한 느낌으로 사용됩니다.
6. 결측치 처리
df.isnull().sum()
df["나이"] = df["나이"].fillna(df["나이"].mean())
df = df.dropna()
실제 데이터는 항상 완벽하지 않기 때문에 결측치를 다루는 법은 필수적으로 익혀야 합니다.
7. 열 추가, 수정, 삭제
# 열 추가
df["지역"] = ["서울", "부산", "대전"]
# 계산 후 열 추가
df["성인여부"] = df["나이"] >= 20
# 열 삭제
df = df.drop(columns=["성인여부"])
데이터를 가공하면서 새로운 컬럼을 추가하거나 필요 없는 정보를 제거하는 작업이 잦습니다.
판다스를 활용한 실전 분석 예시
1. 성별에 따른 나이 평균
df = pd.DataFrame({
"이름": ["철수", "영희", "민수", "지민"],
"성별": ["남", "여", "남", "여"],
"나이": [25, 30, 27, 29]
})
avg_by_gender = df.groupby("성별")["나이"].mean()
print(avg_by_gender)
출력결과입니다.
성별
남 26.0
여 29.5
Name:나이, dtype: float64
groupby() 함수는 데이터 분석의 핵심기능 중 하나입니다. 기준을 정해 그룹별 평규느 합계, 최대값 등을 쉽게 구할 수 있습니다.
2. 조건에 따른 데이터 집계 (피벗)
df = pd.DataFrame({
"과목": ["수학", "수학", "영어", "영어"],
"학생": ["A", "B", "A", "B"],
"점수": [90, 80, 95, 85]
})
pivot = df.pivot_table(index="과목", columns="학생", values="점수")
print(pivot)
출력결과입니다.
학생 A B
과목
수학 90.0 80.0
영어 95.0 85.0
pivot_table()은 엑셀의 피벗테이블 기능과 동일합니다. 데이터 요약과 시각적 분석에 매우 효과적입니다.
3. 시각화 예제 (막대그래프)
import matplotlib.pyplot as plt
df = pd.DataFrame({
"이름": ["철수", "영희", "민수"],
"점수": [85, 90, 78]
})
df.plot(kind="bar", x="이름", y="점수", legend=False)
plt.title("학생별 점수 그래프")
plt.ylabel("점수")
plt.show()
판다스는 시각화 라이브러리와도 잘 연동됩니다. 데이터가 눈에 보이게 되면 훨씬 직관적으로 분석이 가능해집니다.
그 외, 더 많은 활용을 위해서는 merge, apply, value_counts, sort_values 등의 기능도 익혀두면 좋습니다. 다음 단계로는 Matplotlib, Seaborn을 이용한 시각화 심화, 또는 Pandas+ Scikit-learn 조합으로 머신러닝으로도 영역을 확장 할 수 있습니다.