본문 바로가기
공부해볼갱/데이터 배워볼갱

[데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY19

by 갱ㄷ 2025. 1. 20.
🗓️ 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 )

# 분석도전

느낀점

기본 함수를 다 까먹고 있었는데, 다시 보니 파라미터 값들도 새롭고,, 공부를 열심히 해야 겠다는 생각이 들었다.

또한 람다식에 대해 아무리 배워도 이해를 못하고, 실전에 적용을 못하겠던데, 바꿔치기 하는 용이라고 생각하니 쉽게 이해가 되었던 것 같다. 아직 어려운 응용은 하지 못하겠지만, 평소에도 람다식을 의식이라도 하면서 코딩을 하면 도움이 많이 될 것 같다.