카테고리 없음

2025.11.14 TIL (본캠프, 20일차)

D:Connect 2025. 11. 14. 21:04

오늘도 어김없이 SQL 코드카타 10문제 풀기로 하루를 시작했다. 그리고 오늘부터 Python을 활용한 데이터 전처리 라이브 세션이 시작되었다.

이제는 Python 이론을 넘어 실제 데이터 분석의 핵심 기술을 배우기 시작하는거 같다.

 

어제에 이어 Level 3의 문제들을 계속 풀고 있다. 매일 같은 시간에 같은 형식의 문제 10개를 푸는 루틴이 완전히 자동화되었다.

특별한 일이 없는 한, 이 루틴은 계속될 것 같다. 기초를 탄탄히 하는 것의 중요성을 깨달았기 때문이다.

 

어제 Python 이론이 끝났는데, 벌써 데이터 전처리를 배우기 시작했다.

"너무 빠르게 시간이 흘러가는 것 같다"는 생각이 들지만, 이게 바로 부트캠프의 학습 진행속도 이지 않을까 싶다. 한 단계를 마치면 바로 다음 단계로 넘어가는것이....

하지만 급하게 진행되는것이 아니라 체계적으로 단계를 밟는 것이다. 기초(이론) → 응용(전처리) → 심화(분석, 머신러닝)의 명확한 데이터 분석의 흐름이 있기 때문이다.

 

Pandas는 Python의 데이터 분석에서 가장 중요한 라이브러리다. Pandas 없이는 현대적인 데이터 분석이 거의 불가능하다고 해도 과언이 아니다.

 

설치 및 기본 사용법

# 최초 1회 설치 (pip 사용)
# pip install pandas
# pip install numpy

import pandas as pd

# CSV 파일 읽기
df = pd.read_csv("xxxx.csv")

 

데이터프레임 탐색 - 구조 파악하기

데이터를 받았을 때 가장 먼저 할 일은 데이터의 구조를 파악하는 것이다.

# 테이블 확인하기
display(df, df2, df3)

# 처음 5줄만 출력
df.head()

# 마지막 5줄만 출력
df.tail()

# 테이블의 행과 열의 개수
df.shape  # 예: (1000, 10) -> 1000행, 10열

# 각 컬럼의 데이터 타입 확인
df.dtypes

# 컬럼 이름 확인
df.columns

# 테이블 기본 정보 한눈에 보기
df.info()

# 기본 통계 정보
df.describe()  # 개수, 평균, 표준편차, 최솟값, 사분위수, 최댓값

 

결측치(Missing Data) 확인

데이터 분석에서 가장 중요한 작업 중 하나는 결측치 처리다.

# 컬럼별 결측치 개수 확인
df.isnull().sum()

# 예시 출력:
# Age             0
# Gender          2
# Location        1

 

컬럼(열) 선택하기

데이터에서 필요한 컬럼만 추출하는 것도 중요한 기술이다.

 

특정 컬럼 1개 가져오기 (3가지 방법)

# 방법 1: 속성(dot) 사용
df.Category

# 방법 2: [] 연산자 사용
df['Category']

# 방법 3: iloc 사용 (인덱스 번호로 접근)
df.iloc[:, 4]  # : = 모든 행, 4 = 4번째 컬럼

 

특정 컬럼 여러 개 가져오기

# 방법 1: [[]] 연산자 사용 (반드시 [[]] 사용)
df[['Category', 'Selling Price']]  # 결과: DataFrame

# 방법 2: iloc 사용
df.iloc[:, [4, 7]]  # 4번과 7번 컬럼

 

중요한 구분: [] vs [[]]

  • []: 결과가 Series (1차원) → 오류 가능
  • [[]]: 결과가 DataFrame (2차원) → 안전

컬럼 삭제

# axis=1 은 컬럼 기준, axis=0 은 행 기준
# inplace=True 는 원본 수정, False 는 원본 유지
df.drop('Interaction type', axis=1, inplace=True)

 

조건에 맞는 데이터 추출

방법 1: where 메서드

# 조건에 맞는 데이터는 표시, 아닌 데이터는 NaN
df.where(df['Age'] > 50)

 

방법 2: mask 메서드 (권장)

# 조건에 정확히 맞는 행만 추출
mask = ((df['Age'] > 50) & (df['Gender'] == 'Male'))
df[mask]  # 50살 이상의 남성 데이터만 반환

mask 방식이 더 직관적이고, 복잡한 조건을 다루기 쉽다.

 

데이터 그루핑(Grouping) - SQL의 GROUP BY와 동일

# 기준 1개로 그루핑
df.groupby('Gender')['Customer ID'].count()
# 예: 남성 1500명, 여성 1200명

# 기준 여러 개로 그루핑
df.groupby(['Gender', 'Location'])['Customer ID'].count()
# 예: 남성-서울 500명, 남성-부산 300명, ...

 

count() vs nunique() - 중요한 구분

# count: 총 개수 (NULL 제외)
df.groupby('Location')['Age'].count()  
# 예: 서울 1000명, 부산 800명

# nunique: 유일한(중복 제거된) 개수
df.groupby('Location')['Age'].nunique()
# 예: 서울에는 950명의 서로 다른 나이, 부산에는 780명

 

 

주말에 복습이 정말 필요하다는 생각이 든다. 오늘 배운 Pandas의 여러 메서드들(groupby, where, mask, iloc 등)이 아직 완벽하게 이해되지 않았기 때문이다.

특히:

  • groupby의 다양한 사용 방법
  • iloc와 loc의 구분
  • 조건 필터링의 여러 방식
  • 결측치 처리 방법

배운 모든 것들이 데이터 전처리의 기초가 되는 만큼 반드시 이해해야 한다.

 

20일차 학습 목표:

  • SQL 코드카타: Level 3 계속 진행
  • Python 데이터 전처리: Pandas 기초 습득 시작
    • 데이터프레임 탐색 (shape, dtypes, info, describe)
    • 결측치 확인 (isnull)
    • 컬럼 선택 ([], [[]], iloc)
    • 조건 필터링 (where, mask)
    • 그루핑 (groupby)

다음 주 목표

  • SQL: Level 3을 완벽히, 그리고 Level 4 시작
  • Python: Pandas의 핵심 메서드 완전히 이해하기
  • 복습: 주말에 Pandas 기초 2~3시간 복습

4주를 마무리한다. 지금까지의 노력이 쌓이고 있고, 앞으로의 5주, 6주가 더욱 의미 있을 것 같다.

한 주를 마무리하고, 주말을 통해 기초를 다시 한 번 학습하고, 다음 주에는 한단계 앞으로 나아가야겠다.