🗓️ 2025-01-17(금) 파이썬 기초5
1. 데이터 전처리 3. 필요한 변수만 추출 : df[ ]
2. 데이터 전처리 4. 순서대로 정렬 : sort_values
3. 데이터 전처리 5. 파생변수 추가 : assign
4. 데이터 전처리 6. 집단별로 요약하기 : groupby, agg
5. 데이터 전처리 7. 데이터 합치기 : merge, concat
데이터 전처리 3. 필요한 변수만 추출하기
df[ ]
# 여러 칼럼 추출
exam[ ['nclass', 'math', 'english'] ]
# 칼럼 제거
exam.drop( columns = ['math', 'english'] )
# query( )와 [ ] 조합
exam.query('nclass == 1')['english'] # nclass가 1인 행 -> english 추출
# 가독성 있게 코드 줄 바꾸기
exam.query('math >= 50') \
[['id', 'math']] \
.head(10)
# 백슬래시 뒤에 주석이나 띄어쓰기 등 아무것도 입력하면 안 됨!!
# 3. 필요한 변수만 출력하기
# 연습문제1
mpg[['category', 'cty']]
# 연습문제2
mpg.query('category == "suv"')['cty'].mean()
mpg.query('category == "compact"')['cty'].mean()
데이터 전처리 4. 순서대로 정렬하기
sort_values( )
# 기본이 오름차순
# nclass 오름차순, math 내림차순 정렬
exam.sort_values(['nclass', 'math'], ascending = [True, False])
# 연습문제
mpg.query('manufacturer == "audi"')
.sort_values('hwy', ascending = False)
.head()
데이터 전처리 5. 파생변수 추가하기
assign( )
# total, mean 파생 변수 추가후 정렬
exam.assign(
total = exam['math'] + exam['english'] + exam['science'],
mean = (exam['math'] + exam['english'] + exam['science'])/3 )
.sort_values('total')
# np.where 적용하기
import numpy as np
exam.assign(test = np.where(exam['science'] >= 60, 'pass', 'fail'))
lambda
long_name = pd.read_csv('exam.csv')
# long_name 직접 입력
long_name.assign( new = long_name['math'] + long_name['english'] + long_name['science'] )
# long_name 대신 x 입력
long_name.assign( new = lambda x: x['math'] + x['english'] + x['science'] )
# lambda 적용
exam.assign(
total = lambda x: x['math'] + x['english'] + x['science'],
mean = lambda x: x['total']/3 ) # lambda 사용시에만 total 바로 사용 가능 !
.sort_values('total')
# 연습문제1. mpg 복사본 만들기 -> cty+hwy '합산 연비 변수' 추가
mpg_new = mpg.copy()
mpg_new.assign( total = lambda x: x['cty'] + x['hwy'] )
# 연습문제2. 합산 연비 변수를 2로 나눠 '평균 연비 변수' 추가
mpg_new.assign( mean = lambda x: x['total']/2 )
# 연습문제3. '평균 연비 변수'가 가장 높은 자동차 3종의 데이터 출력
mpg_new.sort_values('mean', ascending = False)
.head(3)
# 연습문제4. 1~3 하나로 연결 , 데이터는 mpg 원본
mpg.assign( total = lambda x: x['cty'] + x['hwy'],
mean = lambda x: x['total']/2 )
.sort_values('mean', ascending = False)
.head(3)
데이터 전처리 6. 집단별로 요약하기
groupby( ) , agg( )
| 함수 | 통계량 |
| mean( ) | 평균 |
| std( ) | 표준편차 |
| sum( ) | 합계 |
| median( ) | 중앙값 |
| min( ) | 최소값 |
| max( ) | 최대값 |
| count( ) | 빈도(개수) |
df.groupby('math', as_index = False)
# 변수가 인덱스로 바뀌지 않게 as_index=False 처리
exam.agg(mean_math = ('math', 'mean'), # 평균
sum_math = ('math', 'sum'), # 합계
median_math = ('math', 'median'), # 중앙값
n = ('nclass', 'count')) # 빈도 ( 학생 수 )
# math 변수만 mean
exam.groupby('nclass')\
.agg(mean_math = ('math', 'mean'))
# 모든 변수 한꺼번에 mean
exam.groupby('nclass').mean()
# 집단 > 하위집단으로 나누기
mpg.groupby(['manufacturer', 'drv'])\
.agg(mean_cty = ('cty', 'mean'))
# value_count() 사용하여 빈도 간단하게 구하기
mpg.groupby('drv').agg(n=('drv','count'))
mpg['drv'].value_counts()
# 출력 결과가 df가 아니라 series => query()적용불가능
mpg['drv'].value_counts().query('n > 100') #불가능
# pandas 함수 조합하기
# 제조회사별로 'suv' 자동차의 도시 및 고속도로 합산 연비 평균을 구해 내림차순으로 정렬하고 1~5위까지 출력하기
mpg.query('category == "suv"') \
.assign(total = mpg['hwy'] + mpg['cty'])\
.groupby('manufacturer', as_index = False)\
.agg(mean_total = ('total', 'mean'))\
.sort_values('mean_total', ascending = False)\
.head()
| 절차 | 기능 | pandas 함수 |
| 1 | suv 추출 | query( ) |
| 2 | 합산 연비 변수 만들기 (파생변수) | assign( ) |
| 3 | 회사별로 분리 | groupby( ) |
| 4 | 합산 연비 평균 구하기 | agg( ) |
| 5 | 내림차순 정렬 | sort_values( ) |
| 6 | 1~5위까지 출력 | head( ) |
# 6. 집단별로 요약하기
# 연습문제 1 : category별 cty 평균구하기
mpg.groupby('category', as_index = False)\
.agg(mean_cty = ('cty', 'mean'))
# 연습문제 2 : 앞 출력 결과를 -> cty평균이 높은 순으로 정렬해 출력
mpg.groupby('category', as_index = False)\
.agg(cty_mean = ('cty', 'mean'))\
.sort_values('mean_cty', ascending = False)
# 연습문제 3 : 어떤 회사 자동차의 hwy가 가장 높은지? 가장 높은 회사 세곳
mpg.groupby('manufacturer')\
.agg(mean_hwy = ('hwy','mean'))\
.sort_values('mean_hwy', ascending = False)\
.head(3)
# 연습문제 4-1 : 어떤 회사에서 compact 차종을 가장 많이 생산? 회사별 compact 차종 수 내림차순 정렬
mpg.query('category == "compact"')\
.groupby('manufacturer')\
.agg(n = ('manufacturer','count'))\
.sort_values('n', ascending = False)
# 연습문제 4-2
mpg.query('category == "compact"')\
.value_counts('manufacturer')
데이터 전처리 7. 데이터 합치기
merge( ) : 열 추가 (join)
# ( test1 + test2 ) left join, id열 기준
total = pd.merge(test1, test2, how = 'left', on = 'id')
# on 기준이 없으면 그냥 인덱스로 합침

concat( ) : 행 추가
같은 열이 없으면 NaN (누락값) 으로 채움
# 0 1 2 3 4 0 1 2 3 4
all = pd.concat( [group_a, group_b] )
# 0 1 2 3 4 5 6 7 8 9
all = pd.concat( [group_a, group_b] , ignore_index = True )

# 분석도전
느낀점
기본 함수를 다 까먹고 있었는데, 다시 보니 파라미터 값들도 새롭고,, 공부를 열심히 해야 겠다는 생각이 들었다.
또한 람다식에 대해 아무리 배워도 이해를 못하고, 실전에 적용을 못하겠던데, 바꿔치기 하는 용이라고 생각하니 쉽게 이해가 되었던 것 같다. 아직 어려운 응용은 하지 못하겠지만, 평소에도 람다식을 의식이라도 하면서 코딩을 하면 도움이 많이 될 것 같다.
'공부해볼갱 > 데이터 배워볼갱' 카테고리의 다른 글
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY20 (1) | 2025.02.02 |
|---|---|
| [데이터 배워볼갱] 배달의민족 리뷰 웹스크래핑, 리뷰어 분석하기 (1) | 2025.01.21 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY18 (2) | 2025.01.16 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY17 (1) | 2025.01.15 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY16 (2) | 2025.01.14 |