메타코드의 "파이썬 입문 데이터분석 프로젝트 만들기" 강의를 수강하면서 공부한 내용을 정리한 글입니다.
https://mcode.co.kr/video/list2?viewMode=view&idx=80
1. Groupby
- 데이터를 특정 기준에 따라 그룹화하고 이를 바탕으로 집계하는 과정으로 그룹화를 위한 기준과 집계에 사용될 특정 연산이나 계산의 기준을 설정하는 것이 필요하다.
- 절차 : 분할(splitting) / 적용(applying) / 결합(combining)
df.groupby(by = "col_group")["col_agg"].agg_func().reset_index()
# agg_func()에 sum, mean, min, max 등 사용
# 만약에 두개 이상의 칼럼으로 그룹화 하는 경우는
# by = "col_group" 이 부분을by = ["col_group1", "col_group2"] 의 형태로 바꿔주면 된다.
## splitting
import pandas as pd
# 예시 데이터프레임생성
df = pd.DataFrame({
"group" : ["a", "b", "c", "d"],
"value" : [10, 10, 20, 30]
})
df[df.group == "a"] # group이 a인 것만 출력
## applying
# 각 그룹에서 독립적으로 함수를 적용
# 판다스에서 sum, mean, max, min 과 같은 집계 함수는 기본적으로 숫자 데이터에 적용되는 반면
# count와 nunique 함수는 모든 데이터 유형에 적용된다.
df[df.group == "a"]["value"] # group에서 a인 것만 뽑고 a의 value 값만 출력
df[df.group == "a"]["value"].sum() # 해당 value 값을 다 더한값을 출력
## combining
# 결과를 하나의 데이터 구조로 결합
df.groupby( by = "group" )["value"].sum().reset_index() # group 별로 최종 합산 금액 출력
#reset_index 를 입력안하면 by = "group" 이 부분이 인덱스로 들어가게 된다.
## aggregation
# sum, mean, max, min : 숫자형 데이터에 대해 작동, 문자열 데이터가 있는 열에 이 함수를 적용시
# 무의미한 결과가 나오거나 오류가 발생
## groupby.agg
# 여러 집계 연산을 수행
df.groupby(by = "group").agg(
col_name1 = ("col1", "agg_func"),
col_name2 = ("col2", "agg_func")
).reset_index()
2. Combine
# pd.concat() - concat 함수는 데이터프레임들을 세로 방향으로 결합
import pandas as pd
result = pd.concat([df1, df2, df3]
, ignore_index = True #concat 후에 각각의 인덱스를 무시하고 새로운 인덱스 생성
)
# pd.merge() - 두개의 데이터프레임을 가로로 결합 (공통된 열이나 인덱스를 기준으로 결합)
merged = pd.merge(left_df, right_df
, left_on = "left_key", right_on = "right_key"
, how = "join_type"
)
# join_type = inner, outer, left, right, cross
# inner merge : 공통된 key에 대해서만 결합
# Full outer merge : 모든 key를 포함하며, 일치하지 않는 경우 NaN으로 채움
# left merge : left 테이블의 key를 기준으로 결합, 일치하지 않는 경우 NaN 으로 채움
# right merge : right 테이블의 key를 기준으로 결합, 일치하지 않는 경우 NaN 으로 채움
그리고 위에서 merge에 대해서 그림으로 설명해 주셨는데
이런 느낌으로 알려주셨다.
3. pivot
- Long form : 긴 형식의 데이터를 더 상세하게 나타냄 / 유연하게 데이터를 조작하고, 다양한 형태의 분석에 적합
- Wide form : 데이터의 전반적인 구조를 한눈에 파악하기 용이
간단하게 보면 이런 느낌이라 하신다.
# df.melt
# unpivot(melt) -> wide form 에서 long form으로 전환
# 주요 파라미터 :
# 1. id_vars : 데이터의 식별자 역할을 하는 열의 이름을 나타냄. 이 열들은 그대로 유지된다.
# 2. value_vars : "long form" 으로 변환하고자 하는 열의 이름
# 3. var_name : value_vars에 해당하는 열 이름들을 담을 새로운 열의 이름
# 4. value_name : value_vars 에서의 값을 담을 새로운 열의 이름
unpivot_df = wide_form_df.melt(
id_vars = "col_1"
, value_vars = ["col_2", "col_3", ...]
, var_name = "col_name_1"
, value_name = "col_name_2"
)
# df.pivot_table()
# 기본 개념 : 데이터 프레임을 재구조화하는데 사용 / 특정 키 값에 따라 데이터를 요약하고 그룹화
# 주요 파라미터 :
# 1. index : 피벗 테이블의 로우를 그룹화하는데 사용되는 컬럼
# 2. coluumns : 피벗 테이블의 컬럼을 그룹화하는데 사용되는 컬럼
# 3. values : 분석하려는 데이터 컬럼
# 4. aggfunc : 집계 함수. ex) np.sum / np.mean (기본값 = np.mean)
df.pivot_table(
index = "col_1"
, columns = "col_2"
, values = "col_3"
, aggfunc = "min/max/..."
)
4. value & NA
# df.astype() - df.info()에서 보여주는 데이터 타입 별로 설명
# 예시 코드 : df.astype(int, float, str, ... )
# na - 누락된 데이터를 나타내는 일반적인 용어
# NaN : 부동 소수점 데이터셋에서 누락된 값 / None : 객체 타입 데이터셋에서 "값이 없음" 을 나타냄
# dropna() = 누락된 데이터를 포함하는 행 제거
# how 매개변수 - (how = "any" => 하나라도 None 이 있는 행 제거 / "all" => 모든 값이 None인 행 제거)
# 예시 코드 : dropno(subset = ["col_1", "col_2", ...], how = "any / all")
# fillna() - 결측치 대체
df.fillna(
{"col_1" : value1,
"col_2" : value2}
, inplace = True
)
오늘도 역시 연습할 수 있는 문제들이 준비되어 있었다!
'데이터 공부 정리' 카테고리의 다른 글
[데이터분석 공부] 파이썬 입문 데이터분석 프로젝트 만들기 - 2. 데이터 전처리 2 (with 메타코드M) (0) | 2024.02.19 |
---|---|
[데이터분석 공부] 파이썬 입문 데이터분석 프로젝트 만들기 - 2. 데이터 전처리 1 (with 메타코드M) (0) | 2024.02.13 |
[데이터분석 공부] 파이썬 입문 데이터분석 프로젝트 만들기 - 1. 파이썬 기본 문법 (with 메타코드M) (0) | 2024.02.13 |
[빅데이터분석기사 필기] 메타코드M 빅데이터분석기사 필기 공부 3과목 -분석모형 설계 & 데이터분할 (0) | 2024.01.27 |
[빅데이터분석기사 필기] 메타코드M 빅데이터분석기사 필기 공부(Orientation) (0) | 2024.01.20 |