안녕하세요? mangoseed3434입니다.
이번 글에서는 데이터를 처음 접했을 때 가장 먼저 수행해야 할 작업을 정리했습니다.
즉 데이터를 파악하고, 변수를 정리하며, 파생변수를 만들고, 그래프로 시각화하는 과정을 실습 중심으로 정리합니다.
1. 데이터를 처음 받으면 무엇부터 해야 할까?
가공되지 않은 원시 변수들의 집합인 Raw Data를 처음 접하면 바로 분석에 들어가기보다는 데이터의 전체 구조를 먼저 파악하는 것이 중요합니다.
책이나 발표 자료를 읽을 때 목차나 개요를 먼저 확인하듯이, 데이터도 구성부터 이해해야 분석 방향을 설정할 수 있습니다.
일반적으로 데이터 파악 단계에서는 아래 5가지 명령어를 가장 많이 사용합니다.

head() 메서드
데이터의 앞부분(기본 5행)을 출력합니다.
메서드는 후에 다른 포스팅에서 정리해보겠습니다.

tail() 메서드
데이터의 뒷부분(기본 5행)을 출력합니다.

shape 어트리뷰트
데이터의 행(row)과 열(column) 개수를 출력합니다.
괄호를 사용하지 않습니다.
어트리뷰트도 메서드와 함께 다른 포스팅에서 정리해볼게요.

info() 메서드
데이터 프레임을 구성하는 변수들의 속성을 한 번에 확인할 수 있습니다.
출력 결과를 해석하면 다음과 같습니다.
총 행 개수 및 인덱스 범위 (0부터 시작)
총 열 개수
각 변수의 이름과 순서
Non-Null Count: 결측치가 아닌 값의 개수
Dtype: 데이터 타입 (int64: 정수, float64: 실수, object: 문자)


describe() 메서드
숫자형 변수의 요약 통계량을 출력합니다.
주요 출력 항목
count : 개수
mean : 평균
std : 표준편차
min : 최소값
25% : 1사분위수
50% : 중앙값
75% : 3사분위수
max : 최대값
문자형 변수까지 함께 요약하고 싶을 경우에는 다음과 같이 입력합니다.
문자 변수 요약까지 출력하고 싶을 때는 df.describe(include='all')을 입력합니다.
이때 추가로 출력되는 항목은 다음과 같습니다.
describe(include='all') 메서드의 구성
unique : 고유값 빈도 (중복을 제거한 변수의 갯수)
top : 최빈값
freq : 최빈값의 빈도
2. 원본 데이터는 복사해서 사용하기
확보한 Raw Data 원본을 그대로 수정하는 것은 권장하지 않습니다.
원본 데이터의 복사본을 만들어 작업하는 것이 안전합니다.
오류가 발생해도 원 상태로 되돌릴 수 있고 원본과 비교하면서 변형되는 과정을 검토할 수 있기 때문입니다.

예시로 df_raw라는 이름의 데이터 프레임을 만들었습니다.

그리고 df.copy( ) 함수를 이용해 df_raw의 복사본, df_new를 만들 수 있습니다.
이후, df_new 데이터 프레임에서 변수명의 이름을 바꾸는 실습을 했습니다.
3. 변수명 변경하기: rename( )함수

작업용 데이터 프레임(df_new)에서 변수명을 수정하는 실습을 진행했습니다.
1개의 변수명만 바꾸고 싶을 때는 df.rename(columns = {'기존 변수명1' : '새 변수명1'})을 입력하고,
2개의 변수명을 바꾸고 싶을 때는 df.rename(columns = {'기존 변수명1' : '새 변수명1', '기존 변수명2' : '새 변수명2'})를 입력합니다.
Raw Data의 변수명이 의미를 파악하기 어려울 경우,
rename( )을 활용하면 분석 효율을 크게 높일 수 있습니다.
4. 파생변수 (Derived Variable) 만들기
기존 변수를 조합하거나 연산해 새로운 변수를 생성할 수 있습니다.
이를 파생변수(Derived Variable)라고 합니다.
파생변수
: 기존 변수를 변형하여 새로 만든 변수

pandas패키지로 파생변수 실습용 예시를 만들었습니다.
이제 위 실습용 예시로 var1과 var2를 구성하는 변수들의 합인 var_sum이라는 파생변수를 만들어보겠습니다.

파생 변수는 우선 [ 대괄호 ]에 ' 따옴표 '를 이용해서 새로운 파생 변수의 이름을 정의하는 것으로 시작합니다.
새로 만든 파생 변수는 기존 데이터 프레임의 최우측에 추가됩니다.
다음 실습은 var1과 var의 평균인 var_mean이라는 파생변수를 만들어봤습니다.

위 경우 분모에 len(df)를 입력하면 len(df)는 3이기 때문에 var1과 var2의 평균이 나오지 않습니다.
len( ) 함수의 경우에는 행의 갯수를 출력하는 함수입니다.
그치만, 지금 위 예시에서는 2개의 열(var1, var2)의 갯수를 사용하는 경우이기 때문입니다.
다른 예시로 실습을 계속했습니다.

책에서 강조했듯이 df.copy( ) 함수를 이용해서 기존의 df_raw 변수의 복사본을 만들어서 df_new라는 변수로 할당했습니다.

df_new 변수 내 'total'이라는 항목이 제일 오른쪽에 새롭게 만들어졌습니다.
'total'항목의 평균을 구하는 방법은 크게 2가지가 있습니다.

첫 번째는 len( ) 함수를 이용하는 방법입니다.
각 열의 'total'값을 합친 후, 열의 갯수로 나누면 'total'항목의 평균을 만들 수 있습니다.

두 번째는 df.mean( ) 메서드를 이용하는 방법입니다.
조금 더 간단하게 평균을 구할 수 있는 방법입니다.
이러한 'total'항목을 개략적으로 파악하고자 df.describe( ) 메서드 활용했습니다.


그리고 'total'값을 히스토그램으로 시각화해보았습니다.
df.plot.hist( ) 함수를 이용했습니다.
위 히스토그램을 해석해보면, x축은 5단위로, y축은 10단위로 표현되어있습니다.
그리고 평균 total값은 약 20이고, 편차는 5입니다.
5. 조건문 함수: np.where( )
조건에 따라 서로 다른 값을 반환하는 함수를 조건문 함수(Conditional Statement)라고 합니다.
numpy 패키지를 사용하면 조건문 함수를 이용해서 데이터를 분류할 수 있어요.

그리고 numpy 패키지 내 df.where( )함수를 이용하면 조건문 함수를 완성할 수 있습니다.

df.where( )함수를 설명하자면,
df.where ( 조건, 조건 충족 시 결과, 조건 미충족 시 결과)로 구성되어 있습니다.
위 예시의 경우,
조건 : df_new 변수의 'total'항목이 20 이상일 때,
조건 충족 시 결과 : pass
조건 미충족 시 결과 : fail
이후, 예시 자료에서, pass와 fail이 각각 몇 개인지 파악할 수 있습니다.
6. 개수 세기: value_counts( )

df.value_counts( )함수를 이용하면 구할 수 있습니다.
위 예시의 경우, df_new 변수의 'test'항목을 구성하는 값의 종류를 몇 개 있는지 센다는 의미입니다.
그 결과, pass가 128개, fail이 106개인 것으로 볼 수 있습니다.
정리해보자면, numpy패키지의 .where( )를 사용해서 'total'항목이 20이상이냐 아니냐로 분류했을 때,
20이상의 값이 128개, 20미만의 값이 106개인 것으로 해석할 수 있습니다.
7. 막대 그래프로 시각화하기

우선, 별도로 count_test 변수에 위 p/f 항목 결과를 할당했어습니다.
그리고 df.plot.bar( ) 함수를 이용해서 막대 그래프로 시각화 했습니다..
지금 위 막대 그래프의 경우 x축의 pass와 fail 글자가 회전되어 있습니다.
이 때, df.plot_bar(rot=0)을 사용해 해결할 수 있습니다.

괄호 안에 rot를 이용해서 x축 이름을 회전할 수 있습니다.
8. 다중 조건문 만들기

위 경우, 주석에 설명했듯이 첫 번째 where을 만족하면 A이고 만족하지 않으면 두 번째 where로 넘어갑니다.
그리고 두 번째 where을 만족하면 B이고 만족하지 않으면 C를 할당하는 방식입니다.
'grade'항목을 막대 그래프로 시각화해 본 결과는 아래와 같습니다.

엥? 이번에는 x축이 A, B, C 순서가 아니라 최빈값 순서인 B, C, A로 출력되었습니다.
x축 이름을 알파벳순으로 정렬하고 싶을때에는 df.value_counts( ).sort_index( )를 입력해야 합니다.

df.value_counts( ).sort_index( ) 형태로 입력하니, value_count( )결과부터 최빈값부터가 아닌 알파벳 순서로 출력되는 걸 볼 수 있었습니다.
이후, .plot.bar( rot = 0 )을 추가로 입력해서 알파벳 순으로 x축 이름을 정렬할 수 있습니다.
9. 마무리
메서드
df.head() : 앞부분 출력
df.tail() : 뒷부분 출력
df.info() : 변수 속성 확인
df.describe() : 요약 통계량 확인
df['변수명'].value_counts() : 범주 개수 확인
df.plot.bar() : 막대그래프
df.plot.bar(rot=0) : x축 회전 제거
어트리뷰트
df.shape : 행·열 개수 확인
함수 및 패키지
df.copy() : 데이터 프레임 복사
df.rename() : 변수명 변경
df['변수'].plot.hist() : 히스토그램
numpy
np.where() : 조건문 함수
다음 글에서는 데이터를 가공하고 분석에 적합한 형태로 변형하는 방법을 실습과 함께 정리해 보겠습니다.
읽어주셔서 감사합니다.
'Python 데이터 분석 입문' 카테고리의 다른 글
| (Python 데이터 분석 입문 06편) 데이터 정제하기, 결측치 정제하기, 이상치 정제하기 (0) | 2025.12.21 |
|---|---|
| (Python 데이터 분석 입문 05편) 데이터 전처리(下): 열 추가하기, 조건별 요약하기, 행/열 합치기 (0) | 2025.12.20 |
| (Python 데이터 분석 입문 04편) 데이터 전처리(上): 행 추출하기, 열 추출하기, 정렬하기 (0) | 2025.12.12 |
| (Python 데이터 분석 입문 02편) Data Frame 만들기, 외부 파일(xlsx, csv 등) 불러오기, 외부 파일로 저장하기 (0) | 2025.12.05 |
| (Python 데이터 분석 입문 01편) 파이썬 입력 규칙, 패키지, 모듈 불러오기 (0) | 2025.12.04 |