3. 데이터 파악 및 수정

🔗 'Do it! 쉽게 배우는 파이썬 데이터 분석' 책을 기반으로 JupyterLab 환경에서 학습한 내용입니다 _φ(๑╹╹๑)

 

 

📌 데이터 파악


  • read_csv('파일 경로'): 실습 데이터 불러오기
import pandas as pd # pandas 패키지 로드

# 실습 데이터: 미국 환경 보호국에서 공개한 1999~2008년 미국에 출시된 자동차 234종 정보
mpg = pd.read_csv('mpg.csv') # 실습 데이터 → 데이터 프레임
mpg 데이터
변수명
내용
manufacturer 제조 회사
model 자동차 모델명
displ 배기량
(displacement)
year 생산연도
cyl 실린더 개수
(cylinders)
trans 변속기 종류
(transmission)
drv 구동 방식
(drive wheel)
cty 도시 연비
(city)
hwy 고속도로 연비
(highway)
fl 연료 종류
(fuel)
category 자동차 종류

 

  • head(): 데이터의 앞에서부터 다섯 번째 행까지 출력하는 기능, 괄호 안에 숫자 입력시 해당 행까지 출력
mpg.head()

 

  • tail(): head()와 반대로 데이터의 뒤에서부터 다섯 번째 행까지 출력하는 기능, 괄호 안에 숫자 입력시 해당 행까지 출력
mpg.tail()

 

  • shape: 데이터 프레임의 행, 열 개수를 출력하는 기능으로 (행 개수, 열 개수)로 출력되며, 변수가 지니고 있는 값으로 함수와 달리 괄호 사용 X
mpg.shape # 출력 결과: (234, 11)

 

  • info(): 변수들의 속성을 출력하는 기능
    • 출력 결과 설명
      • <class 'pandas.core.frame.dataframe'> : pandas로 만든 데이터 프레임
      • 234 entries, 0 to 233: 234행으로 구성되어 있으며, 행 번호가 0부터 233까지
      • total 11 columns: 변수 11개로 구성
      • 나머지 정보: 변수 속성 정보
        • #: 해당 변수 순서
        • column: 변수 이름
        • Non-Null Count: 결측치(누락된 값)를 제외하고 변수에 들어있는 값의 개수
        • Dtype: 속성
          • int64: 정수
          • float64: 실수
          • object: 문자
          • datetime64: 날짜 시간
mpg.info()

 

 

IQR 분석

IQR (Interquartile Range) 사분위수 범위는 이상치를 탐지하는 데 사용되는 대표적 통계 지표 > 데이터의 변동성을 시각화하고, 이상치를 객관적으로 걸러낼 수 있는 통계적 도구 중 하나

velog.io

출력값
(숫자 변수 해당)
통계량 설명
count 빈도 (결측치를 제외한) 값의 개수
mean 평균 모든 값을 더해 값의 개수로 나눈 값
std 표준편차 변수의 값들이 평균에서 떨어진 정도
min 최소값 가장 작은 값
25% 1사분위수 하위 25%(4분의 1) 위치의 값
50% 중앙값 하위 50%(중앙) 위치의 값
75% 3사분위수 하위 75%(4분의 3) 위치의 값
max 최대값 가장 큰 값
출력값
(문자 변수 해당)
통계량 설명
count 빈도 (결측치를 제외한)  값의 개수
unique 고유값 빈도 중복을 제거한 범주의 개수
top 최빈값 개수가 가장 많은 값
freq 최빈값 빈도 개수가 가장 많은 값의 개수

 

# 기본 형태
# mpg.describe()

# 문자로 된 변수의 요약 통계량 함께 출력하는 방법
mpg.describe(include = 'all')

  1. cty(도시 연비: 자동차가 도시에서 연료 1갤런에 몇 마일 주행하는지를 의미) 요약 통계량 살펴보기
    1. mean: 자동차가 도시에서 갤런당 평균 16.8마일 주행
    2. min: 도시 연비가 가장 낮은 자동차는 갤런당 9마일 주행
    3. max: 도시 연비가 가장 높은 자동차는 갤런당 35마일 주행
  2. manufacturer(자동차 제조 회사) 요약 통계량 살펴보기
    1. unique: 자동차 제조 회사의 종류 15개
    2. top: 가장 많은 자동차를 생산한 제조 회사는 dodge
    3. freq: dodge는 37종을 생산

 

 

 

📌 변수명 변경


  • 복사본 만들기: 원본 데이터를 보존하여 오류 발생시 원 상태로 되돌리고 데이터를 비교하며 변형 과정을 검토할 수 있도록 하기 위함
mpg_new = mpg.copy()

 

  • 변수명 변경: rename({columns: '기존 변수명': '새 변수명'})한 후, 할당해야 바뀐 변수명 저장
# 변수명 cty → city, hwy → highway 변경
mpg_new = mpg_new.rename(columns = {'cty': 'city', 'hwy': 'highway'}

mpg_new.head()

 

 

 

📌 파생변수 생성


  • 파생변수 생성
# total 변수: 통합 연비 변수(도시 연비와 고속도로 연비의 평균)
mpg['total'] = (mpg['cty'] + mpg['hwy'])/2

mpg.head()

mpg['total'].mean() # 전체 자동차의 평균 연비

 

  • 조건문을 활용한 파생변수 생성
    1. 기준값 정하기: 데이터프레임의 describe() 함수와 plot.hist() 함수를 활용하여 요약 통계량과 히스토그램(값의 빈도를 막대 길이로 표현한 그래프)을 확인한 후, 상황에 맞는 기준값 설정
    2.  조건 판정 변수 생성: numpy(수치 연산 관련) 패키지의 where(조건, '참인 경우', '거짓인 경우') 함수 활용
    3. 빈도표로 조건 판정 수 확인: 데이터프레임의 value_counts() 함수 활용
# 요약 통계량 확인
mpg['total'].describe()

 

# 히스토그램 확인
mpg['total'].plot.hist()

 

# 합격 판정 변수 생성

import numpy as np
mpg['test'] = np.where(mpg['total'] >= 20, 'pass', 'fail')
mpg.head()

# 빈도표로 합격 수 확인
mpg['test'].value_counts()

 

  • 중첩 조건문을 활용한 파생변수 생성
통합 연비 등급 기준
A 30 이상
B 20~29
C 20 미만
mpg['grade'] = np.where(mpg['total'] >= 30, 'A', np.where(mpg['total'] >= 20, 'B', 'C'))

mpg['grade'].value_counts()# 빈도 기준 내림차순 정렬

mpg['grade'].value_counts().sort_index() # 빈도 기준 내림차순 정렬 → 알파벳 순 정렬

 

  • '또는' 조건문을 활용한 파생변수 생성
# mpg 데이터의 category가 'subcompact', 'compact', '2seater'에 해당하는 경우 'small', 그렇지 않다면 'large'

# 방법 1: '|' ('\'키 + 'Shift'키 동시에) 사용
mpg['size'] = np.where((mpg['category'] == 'subcompact') | (mpg['category'] == 'compact') | (mpg['category'] == '2seater'), 'small', 'large')
mpg['size'].value_counts()

# 방법 2: isin() 함수 활용
mpg['size'] = np.where(mpg['category'].isin(['compact', 'subcompact', '2seater']), 'small', 'large')
mpg['size'].value_counts()

'데이터 분석 > Python' 카테고리의 다른 글

6. 데이터 시각화(seaborn 패키지)  (0) 2026.07.20
5. 데이터 정제(결측치, 이상치)  (0) 2026.07.17
4. 데이터 가공(전처리)  (0) 2026.07.16
2. DataFrame  (0) 2026.07.14
1. 변수, 함수, 모듈, 패키지  (0) 2026.07.13