2024. 1. 2. 17:37ㆍTools & Skills/Python
데이터 분석에 필요한 기초문법
pandas 라이브러리에서 제공하는 기초 문법들은 여러가지가 있지만,
그 중 데이터 전처리에 필요한 기초 문법들 중 필수적인 문법 몇 가지만 알아보자
먼저 pandas 라이브러리를 임포트하고,
예제 파일 학생들의 반 별(nclass) 과목별 점수가 나와있는 exam.csv 파일을 불러온다.
import pandas as pd
df = pd.read_csv('exam.csv')
1. query()
query() 함수는 행 데이터를 추출할 때 사용한다.
예를 들어, 데이터프레임(df) 데이터를 추출할 때 학생(id), 반(nclass)와 같은 연속적인 범주형 데이터를 추출할 수 있다.
query() 괄호 안에 다양한 조건들을 넣어 원하는 조건의 데이터를 추출할 수 있다.
# Case 1: 3반 학생들 데이터 추출
df.query('nclass == 3')
# Case 2: 영어 점수가 80점 초과인 학생들의 데이터 추출
df.query('english > 80')
# Case 3: 영어 점수 95점 초과이면서 수학 점수 50점 이상인 학생들의 데이터 추출
df.query('english > 95 and math > 50') # 논리 연산자 (and, or) 조건 가능
열을 추출하는 법 [], [[]]
열 데이터를 추출하고 싶을 때는 대괄호[]를 사용하여 추출할 수 있다.
# id, math, english 데이터만 추출
df[['id', 'math', 'english']]
변수(column)를 제거하고 싶은 경우에는 .drop() 함수를 사용하여 제거한다.
여기서 컬럼을 삭제해도 반영되지 않고 원본데이터는 그대로 남아 있다.
# 수학 column만 제거
df.drop(columns='math')
원본 데이터에서도 변경하고 싶다면?
'inplace=True' 파라미터를 통해 변경할 수 있다.
이 파라미터를 사용하면 원본 데이터프레임이 직접적으로 변경되며, 새로운 데이터프레임을 반환하지 않는다.
df.drop(columns='math', inplace=True)
예를 들어, 위의 코드에서는 'math'열을 삭제하는데, 만약 'inplace=True'가 없다면
새로운 데이터프레임이 반환되어 다른 변수에 할당해야 하는 번거로움이 생긴다.
파이썬 메서드체이닝으로 문법이 이어짐
# Case 1: Series 형태
df.query('nlcass==4 & math > 30')['math']
# Case 2: 데이터프레임
df.query('nclass==4 & math > 30)[['id','nclass', 'math']]
# Case 3: Case 2를 반대로 진행
df[['id', 'nclass', 'math']].query('nclass==4 & math > 30')
# Case 1
12 46
13 48
14 75
15 58
Name: math, dtype: int64
시리즈(Series) vs 데이터프레임(DataFrame)
시리즈와 데이터프레임은 데이터를 다룰 때 항상 등장하는 자료구조이다.
시리즈는 1차원 데이터 배열 형태이며, 데이터프레임의 각 열 또는 행을 나타내는데 사용된다.
각 요소는 인덱스를 가지며, 데이터 타입은 동일해야 한다.
데이터 프레임은 2차원 테이블 형태로, 행과 열로 이루어진 데이터를 다룬다.
따라서, 데이터프레임은 여러 개의 시리즈로 구성되어 있다는 것~
정렬
데이터프레임에서는 .sort()함수를 통해 내림차순, 오름차순 정렬이 가능하다.
# Case 1: math 점수 기준 오름차순 정렬
df.sort_values('math')
# Case 2: math 점수 기준 내림차순 정렬
df.sort_values('math', ascending=False)
오름차순, 내림차순 기준이 한 개인 경우만 있는 것은 아니다.
# Case 1: math 점수 30점 초과인 데이터 내림차순 정렬
df.sort_values('math', ascending=False)[['math','id']].query('math>30')
# Case 2: 두 개 이상의 조건 차순 정렬
df.sort_values[['math', 'nclass']]
조건 한 개 더 추가하면 2차원의 개념이라 꼭 리스트로 넣어야 하고
math가 가장 먼저 앞에 있어서 메인정렬, nclass 서브 정렬이 된다.
즉, math 정렬 이후 동점자 처리할 때 nclass 정렬을 고려하는 것!
이때, 다음 코드와 같이 math 점수 오름차순이 디폴트인데, nclass는 내림차순으로 정렬하는 것도 가능하다.
df.sort_values(['math', 'nclass'], ascending=[True, False])
파생변수(Derived variable)
파생변수는 기존의 내부 데이터를 가지고 새로운 변수를 만드는 것을 말한다.
pandas에서 column을 가지고 바로 작업할 수 있고, 다양한 함수를 적용하여 만들 수 있다.
파생변수를 만드는 이유는 다음과 같다.
1. 특정 정보 추출 및 가공: ex) 날짜 데이터에서 연도만 추출, 텍스트 데이터에서 특정 패턴
2. 범주형 변수를 수치형으로 변환
3. 새로운 도메인 지식의 반영: ex) 매출액 = 판매량 * 가격
4. 데이터 탐색 및 시각화를 위한 특징 생성 ex) 시간 데이터 기반 주간, 월간, 연간 패턴 변수 생성
5. 모델 성능 향상
그렇다면 다양한 방법으로 파생변수를 만들어보자
파생변수 생성
# Case 1 : column을 직접 이용해서 생성
df['3_mean'] = (df['math'] + df['english'] + df['science']) / 3 # 과목의 평균 파생변수 생성
# Case 2 : .assign() 함수와 lambda 이용
df.assign(mean_s = lambda x : (x['math'] + x['english'] + x['science']) / 3)
# Case 3 : 추가로 파생변수 생성
df.assign(mean_t = (df['math'] + df['english'] + df['science']) / 3, inplace = True, no = 1).head(5)
numpy 라이브러리를 이용하여 파생변수를 만들 수 있다.
# 평균 기준으로 평균이상, 이하 파생변수 생성
df.assign(test = np.where(df['3_mean'] > 67.3, '평균이상', '평균이하'))
np.where 함수는 조건이 참인 경우 '평균이상'으로 설정, 그렇지 않은 경우 '평균이하'로 설정한다.
groupby
'groupby'는 데이터프레임을 특정 기준에 따라 그룹으로 묶는 데 사용된다.
이를 통해 각 그룹에 대해 통계치를 집계, 변환, 필터링 등의 작업을 수행할 수 있다.
df.group(기준).agg(변수, 요약통계치)
# nclass 별 과목 점수 평균
df.groupby('nclass').agg(ncl_math = ('math', 'mean'),
ncl_eng = ('english', 'mean'),
ncl_sci = ('science', 'mean'))
오늘 배운 문법 이외에도 데이터 전처리에 필요한 문법은 너무너무너무 많다
갈 길이 멀다 ,,
'Tools & Skills > Python' 카테고리의 다른 글
데이터 전처리 문법 중급 (0) | 2024.01.12 |
---|---|
Outlier! (0) | 2024.01.12 |
회귀분석 MSE 차이 비교 실습 (2) | 2024.01.08 |
결측치와 누락값 (2) | 2024.01.07 |
BeautifulSoup 맛 보기 (0) | 2023.12.19 |