15차시: Pandas 데이터 분석 학습 패키지

안녕하세요! 데이터 과학의 필수 라이브러리, Pandas의 세계에 오신 것을 환영합니다. Pandas는 파이썬으로 데이터를 빠르고 효율적으로 다룰 수 있게 해주는 강력한 도구입니다. 엑셀의 표와 같은 형태인 데이터프레임(DataFrame)을 중심으로, 데이터 정제, 변환, 분석의 기초를 다져보겠습니다.

※ 참고: Pandas는 파이썬 표준 라이브러리가 아니므로, 사용하기 전에 설치가 필요합니다.
pip install pandas

1. 파이썬 예제 코드: Pandas 데이터 분석

1.1. 기초 파이썬 예시 코드 (5개)

Pandas의 핵심 자료구조인 Series와 DataFrame을 만들고 데이터를 선택하는 방법을 익힙니다.

1. Series 생성하기

# 1차원 데이터 구조인 Series를 생성합니다.

import pandas as pd

s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])

print("--- Pandas Series ---")
print(s)
print("\n인덱스 'c'의 값:", s['c'])

2. DataFrame 생성하기

# 2차원 데이터 구조인 DataFrame을 생성합니다. (엑셀 시트와 유사)

import pandas as pd

data = {
    '이름': ['인수샘', '홍길동', '구운몽'],
    '나이': [30, 25, 28],
    '도시': ['서울', '부산', '광주']
}

df = pd.DataFrame(data)
print("--- Pandas DataFrame ---")
print(df)

3. 특정 열(Column) 선택하기

# 열 이름을 사용하여 데이터를 추출합니다.
names = df['이름']
print("이름 열만 추출:")
print(names)

# 여러 열 선택
subset = df[['이름', '도시']]
print("\n이름과 도시 열 추출:")
print(subset)

4. 조건에 맞는 행 필터링

# 나이가 27세 이상인 데이터만 필터링합니다.

older_than_27 = df[df['나이'] >= 27]
print("27세 이상인 사람:")
print(older_than_27)

5. 데이터 요약 통계 확인

# describe() 함수로 수치형 데이터의 통계 정보를 한눈에 확인합니다.

print("데이터 요약 정보:")
print(df.describe())

1.2. 응용 파이썬 예시 코드 (5개)

데이터 정제, 결합, 그룹화 등 실질적인 데이터 가공 기법을 다룹니다.

1. 새로운 열 추가 및 계산

# 기존 데이터를 바탕으로 새로운 열을 생성합니다.
df['내년나이'] = df['나이'] + 1
print(df)

2. 결측치(NaN) 처리하기

# 비어있는 데이터를 찾거나 채워 넣습니다.

import numpy as np

df.loc[1, '도시'] = np.nan # 홍길동의 도시를 결측치로 변경
print("--- 결측치 발생 ---")
print(df)

# 결측치를 '알 수 없음'으로 채우기
df_filled = df.fillna('알 수 없음')
print("\n--- 결측치 채우기 결과 ---")
print(df_filled)

3. 데이터 그룹화 및 집계 (groupby)

# 특정 기준별로 데이터를 묶어 평균이나 합계를 구합니다.

data = {
    '부서': ['개발', '기획', '개발', '기획', '인사'],
    '급여': [5000, 4000, 5500, 4200, 3800]
}
emp_df = pd.DataFrame(data)

dept_avg = emp_df.groupby('부서')['급여'].mean()
print("부서별 평균 급여:")
print(dept_avg)

4. 데이터 합치기 (merge)

# SQL의 Join과 유사하게 공통 열을 기준으로 합칩니다.

df1 = pd.DataFrame({'이름': ['인수샘', '홍길동'], '성적': [90, 80]})
df2 = pd.DataFrame({'이름': ['인수샘', '홍길동'], '출석': [100, 95]})

merged = pd.merge(df1, df2, on='이름')
print("데이터 병합 결과:")
print(merged)

5. CSV 파일 읽기 및 저장

# 데이터프레임을 CSV 파일로 저장
df.to_csv('my_data.csv', index=False, encoding='utf-8-sig')

# CSV 파일 불러오기
new_df = pd.read_csv('my_data.csv')
print("불러온 데이터:")
print(new_df.head())

1.3. 심화 파이썬 예시 코드 (4개)

고급 데이터 변형 및 분석 기법입니다.

1. 데이터 재구조화 (Pivot Table)

# 복잡한 데이터를 요약하여 표 형태로 재구성합니다.

data = {
    '날짜': ['1일', '1일', '2일', '2일'],
    '도시': ['서울', '부산', '서울', '부산'],
    '온도': [25, 28, 26, 29]
}
df = pd.DataFrame(data)

# '도시'를 행으로, '날짜'를 열로 하여 '온도' 값을 보여주는 피벗 테이블
pivot = df.pivot_table(index='도시', columns='날짜', values='온도')
print("피벗 테이블 결과:")
print(pivot)

2. 함수 적용하기 (.apply())

# 행이나 열 단위로 복잡한 계산을 일괄 적용합니다.

df = pd.DataFrame({'점수1': [80, 90, 70], '점수2': [85, 95, 75]})

# 최댓값을 구하는 함수 적용
df['최고점수'] = df.apply(lambda row: max(row['점수1'], row['점수2']), axis=1)

# 평균 구하기
df['평균점수'] = df.apply(lambda row: (row['점수1'] + row['점수2']) / 2, axis=1)
print(df)

3. 고유값 확인 및 빈도수 세기

survey = pd.Series(['좋음', '보통', '좋음', '나쁨', '좋음', '보통'])

print("고유값 종류:", survey.unique())
print("\n값별 빈도수:")
print(survey.value_counts())

4. 인덱스 초기화 및 정렬

df = pd.DataFrame({'점수': [70, 95, 80]}, index=['다', '가', '나'])

# 인덱스 기준 정렬
print("인덱스 정렬:")
print(df.sort_index())

# 값 기준 정렬
print("\n점수 기준 내림차순 정렬:")
print(df.sort_values(by='점수', ascending=False))