numpy에서 2차원 행렬 기능을 발전시킨 파이썬 라이브러리
AI 시대 데이터 전처리를 위한 필수품!
정의
구조화된 데이터의 조작과 분석을 위한 데이터 프레임 및 시리즈 객체를 제공하는 파이썬 라이브러리
목적
머신러닝 학습이나 각종 시각화 전에, 2차원 데이터를 원하는 형태로 구조화 하고 전처리 하기 위해
특징
특징들 | 내용 |
데이터 조작 및 변환 | 데이터 선택, 필터링, 정렬, 집계 및 피벗 / 결측치 처리, 중복 제거, 데이터 형 변환 |
빠른 연산 속도 | NumPy의 연산 엔진 기반 / 벡터화(Vectorization) 지원 |
다양한 데이터 소스 지원 | CSV, 엑셀, SQL 데이터베이스, JSON |
데이터 시각화 연동 | 시각화 라이브러리 Matplotlib, Seaborn |
* 피벗 : 행과 열의 기준값을 변경하여 데이터프레임의 구조를 재구성하는 것
기능
### 데이터 확인 ###
- 데이터 기본적인 형태 확인 : head(), shape
print(df.head()) # 데이터 확인
print(df.shape) # 데이터 크기 확인
- 데이터 컬럼 개수 및 결측치 확인 : count(), isna().sum(), info()
-> na의 값은 무시하고 수행(값에 포함x)
-> 결측치 없는 데이터 확인: .info()
print(df.count()) # 컬럼별 개수
print(df.isna().sum()) # 결측치 개수
print(df.info())
- 분석 대상 컬럼의 데이터 수 확인(Categorical Data) : value_count()
-> 데이터 프레임의 컬럼을 하나 선택해야함.
-> 컬럼 지정(분할) : dataframe[’column name’]
-> na값은 기본적으로 제외하나, dropna = False옵션으로 포함 가능
print(df['sex'].value_counts())
print(df['deck'].value_counts(dropna = False))
### 데이터 그룹화 ###
- 데이터 그룹화 방법: groupby()
-> groupby만 했을 때는 SeriesGroupBy가 생성됨(컬럼 분할) → 연산 메서드 적용
-> 그룹화 기준에 [] 안에 2개 이상의 컬럼 넣을수 있음(좌측의 것이 우선순위 가짐)
print(df.groupby('sex')['survived'])
print(df.groupby('sex')['survived'].sum())
- 데이터 기본적인 통계값 확인 : describe()
-> series, dataframe 모두에 적용 가능
-> NaN의 값은 포함하지 않음
-> 기술 통계값 : count, mean, std, min, 25%, 50%, 75%, max -> 데이터 경향성 확인
print(df.groupby('sex')['age'].describe())
- 특정 통계값만 확인 : agg()
print(df.groupby('sex')['age'].agg(['min', 'median', 'max']))
### 데이터 처리 및 가공 ###
- 데이터 프레임에서 특정 컬럼 뽑기 : drop()
df_drop = df.drop(['deck', 'embark_town'], axis = 1)
print(df_drop.head(3))
- 결측치 값에 값 넣기 (평균값)
-> 일반적으로 평균값을 넣기는 하나 → 데이터에 따라 적절한 값 선택이 필요
결측치 처리 단계 | 설명 |
1. 결측치 탐지 (Detecting) | isnull(), notnull(), info() ; 데이터 프레임 내 결측치 위치(행, 열)확인 |
2. 결측치 제거(Handling by Deletion) | dropna() ; 결측치가 포함한 행 또는 열을 제거하여 데이터 일관성 유지 |
3. 결측치 대체(Handling by Imputation) | fillna() ; 특정 값으로 결측치를 채워 넣어 데이터 유효성 유지 |
4. 결측치 보간(Interpolation) | interpolate() ; 연속된 데이터의 결측치를 예측(method 선택)하여 채워넣는 것 |
df['age'] = df['age'].fillna(df['age'].mean())
df['age'].isna().value_counts()
- 데이터 프레임에 새로운 컬럼 추가하기
df['adult_true'] = df['age']>=20
print(df.head(3))
- 불린 인덱싱에서 False 조건 처리 : where
# ['가입일'] 연도(정수)가 2019년 이하인 경우에 ['연봉']의 값 10% 증가, 아닌경우 그대로
df['연봉'] = df['연봉'].where(df['가입일'] > 2019, other = df['연봉']*1.1)
### 데이터에 접근 ###
- 데이터 프레임의 특정 컬럼에서 데이터 뽑기 : 불린 인덱싱
조건 1개 : df[<조건입력>]
조건 2개 and : df [(<조건1>) & (<조건2>)]
조건 2개 or : df [(<조건1>) | (<조건2>)]
* 두 조건을 &나 | 로 연결할 때 반드시 ()로 감싸야 한다.
print(df[df['age'] == 30])
print(df[(df['age'] == 30) & (df['pay'] <= 300)]
print(df[(df['age'] == 30) | (df['pay'] <= 300)]
- 데이터 프레임 값에 접근 인덱서 : iloc, loc
: pandas의 데이터프레임은 기본적으로 열 이름으로 각 열에 접근한다. -> df['열 이름'] (O) vs df[1] (X)
-> iloc : 위치 기반 인덱스 접근 : 행과 열의 인덱스 값으로 접근(슬라이싱 범위를 넣으면 끝값-1 인덱스까지 포함)
-> loc : 명칭 기반 인덱스 접근 : 행과 열의 이름으로 인덱스 접근(슬라이싱 범위를 넣으면 끝값 모두 포함)
print(df.iloc[1:5, 1:5]) # 1~4행 포함 (위치기반)
print(df.loc[1:5:,'age']) # 1~5행 모두 포함 (명칭기반)
### 데이터 읽어오기 ###
- json array 읽어서 데이터 프레임으로 변환 : read_json()
-> json file : { } 안에 딕셔너리의 형태로 값이 저장된 형태
-> json array : [ { }, { } ] 안에 여래개의 정보가 딕셔너리 형태로 저장되어 있는 형태
data = '''[
{"이름": "김철수", "나이": 25, "직업": "개발자", "연봉": 4000},
{"이름": "이영희", "나이": 30, "직업": "마케터", "연봉": 3500}
]'''
df = pd.read_json(data) ; df
'프로그래밍 > for AI' 카테고리의 다른 글
[Utils] 정규 표현식과 Re (0) | 2025.02.11 |
---|---|
[Utils] github 기본 사용법 정리(feat.TIL) (1) | 2025.02.10 |
[Data] numpy 핵심 기능 정리 (1) | 2025.02.06 |
[DL] 딥러닝 기초개념 정리 (0) | 2025.02.05 |
[ML] 마스터 알고리즘(책) -페드로 도밍고스 (4) | 2025.02.05 |