데이터 가공하기
조건에 맞는 데이터만 추출하기
import pandas as pd
exam = pd.read_csv('./exam.csv')
exam.head()
exam.query('nclass ==1')
exam.query('math > 50')
여러 조건 중 두 조건이 모두 만족하는 행 추출
exam.query('nclass ==1 & math >=50')
exam.query('nclass ==1 and math >=50')
여러 조건 중 하나라도 만족하는 행 추출
exam.query('math>=90 | english >=90 | science >= 90')
exam.query('math>=90 or english >=90 or science >= 90')
exam.query('nclass ==1 | nclass == 3 | nclass == 5')
exam.query('nclass in [1,3,5]')
ban = 3
exam.query('nclass == @ban')
ban = 3
exam.query(f'nclass == {ban}')
추출한 행으로 데이터 만들기
df_nclass = exam.query('nclass ==1')
df_nclass['math'].mean()
46.25
sum(exam.query('nclass ==1')['math'])
exam.query('nclass ==1')['math'].mean()
46.25
문자 변수를 이용해 조건에 맞는 행 추출하기
- query()에 전체 조건을 감싸는 따옴표와 문자 따옴표는 다른 모양이여야 함
df = pd.DataFrame({
'sex':['F','F','M','M'],
'country':['Korea','China','Japan','USA'],
'name':['재은','밍밍','다나까','제임스']
})
df
df.query('sex == "F" & country == "Korea" ')
필요한 변수만 추출하기
변수 추출하기
exam[['nclass','math','english']]
exam.drop(columns = 'science')
exam.drop(columns = ['science', 'math'])
exam.query('math >=50')[['id','math']]
순서대로 정렬하기
exam.sort_values('math')
exam.sort_values('math', ascending=False)
반 먼저 정렬하고 수학 점수 정렬
exam.sort_values(['nclass', 'math'])
첫번째는 내림차순 두번째는 오름차순
exam.sort_values(['nclass', 'math'], ascending = [True,False])
hwy 가 높은것 상위 5가지
mpg.query('manufacturer == "audi" ').sort_values('hwy', ascending = False).head()
파생 변수 추가하기
exam = pd.read_csv('./exam.csv')
exam = exam.assign(total=exam['math'] + exam['english']+exam['science'])
파생 변수를 한 번에 여러 개를 (동시에) 추가하기
exam = pd.read_csv('./exam.csv')
exam
exam = exam.assign(
total = exam['math'] + exam['english']+exam['science'],
mean = (exam['math'] + exam['english'] + exam['science'])/3)
exam
exam.assign(test = np.where(exam['science']>=60,'pass','fail'))
# exam['test'] = np.where(exam['science']>=60, 'pass', 'fail')
exam.assign(total=exam['math']+exam['english']+exam['science']).sort_values('total')
학생 별로 과목 다 더한 후 상위 5명
exam.assign(new_total = exam[['math','english','science']].sum(axis = 1)).sort_values('new_total', ascending = False).head()
실습
- mpg 카피 데이터 중 cty 와 hwy를 합친 파생 변수와 평균 파생 변수를 만들고 평균을 기준으로 상위 3개 출력 하는 코드를 한 줄에 작성
mpg_cp.assign(cthw = lambda x: x['cty']+x['hwy'],
mcthw = lambda x: x['cthw']/2
).sort_values('mcthw',ascending=False).head(3)
집단으로 요약
- 각 집단을 선택적으로 취하기 위해 df.groupby()를 사용하고 해당 집단의 통계치를 구하기 위해서는 df.agg()를 사용한다. 이 함수들을 이용해 요약표를 만들면 집단 간에 어떤 차이가 있는지 쉽게 파악할 수 있다.
df.agg()
exam.agg(mean_math = ('math', 'mean'))
df.groupby()
반 별 평균
exam.groupby('nclass').agg(mean_math = ('math', 'mean'))
exam.groupby('nclass').agg(mean_math = ('math','mean'),
sum_math = ('math','sum'),
median_math = ('math','median'), # 중앙값
n = ('nclass','count'))
집단별로 다시 집단 나누기
mpg.groupby(['manufacturer','drv']).agg(mean_cty = ('cty','mean'))
audi의 4륜과 전륜 차는 몇개 일까?
mpg.query('manufacturer == "audi"').groupby('drv').agg(count = ('drv','count'))
category 별 cty 평균
mpg.groupby('category').agg(mean = ('cty','mean')).sort_values('mean', ascending = False)
어떤 회사 자동차의 hwy가 가장 높은지 평균이 가장 높은 3개
mpg.groupby('manufacturer').agg(mean = ('hwy', 'mean')).sort_values('mean', ascending = False).head(3)
어떤 회사에서 compact 차종을 가장 많이 생산하는지 차종 수를 내림 차순으로 정렬
mpg.query('category == "compact"').groupby('manufacturer').agg(count = ('category','count')).sort_values('count')
데이터 합치기
가로로 합치기( merge() )
pd.merge(midterm, final, how = 'left', on = 'id')
pd.merge( final,midterm, how = 'left', on = 'id')
pd.merge(midterm, final, how = 'right', on = 'id')
pd.merge( final,midterm, how = 'right', on = 'id')
name = pd.DataFrame({
'nclass':[1,2,3,4,5],
'teacher':['kim','lee','park','choi','jung']
})
pd.merge(exam, name, how = 'left', on = 'nclass')
세로로 합치기( concat() )
group_all = pd.concat([class101, class102])
group_all
group_all = pd.concat([class101, class102], ignore_index = True)
group_all
실습
- mpg데이터에는 fl 데이터는 있지만 가격은 없다.
- mpg데이터에 price_fl 데이터를 넣어보자
fuel = pd.DataFrame({
'fl':['c','d','e','p','r'],
'price_fl':[2.35,2.38,2.11,2.76,2.22]
})
pd.merge(mpg, fuel, how = 'right', on = 'fl')
pd.merge(mpg, fuel, how = 'left', on = 'fl')[['model','fl','price_fl']].head()
문제 1
문제 1-1
- popadults 는 해당 지역 성인 인구, poptotal은 해당 지역 전체 인구
- midwest 데이터에 ‘전체 인구 대비 미성년 인구 백분율’ 변수를 추가
#midwest 데이터에 ‘전체 인구 대비 미성년 인구 백분율’ 변수를 추가 전체인구 - 성인인구/전체인구
midwest.assign(nan_adults = (midwest['poptotal']-midwest['popadults']) / midwest['poptotal'] * 100)
문제 1-2
- 미성년 인구 백분율이 가장 높은 상위 5개 county(지역)의 미성년 인구 백분율을 출력
non_audlts_df.sort_values('nan_adults', ascending = False)[['county','nan_adults']].head()
문제 1-3
- 분류표의 기준에 따라 미성년 비율 등급 변수를 추가하고 각 등급에 몇 개의 지역이 해당되는지 알아보자
grade_df.groupby('grade').agg(county_count = ('county','count'))
문제 1-4
- ‘popasian’은 해당 지역의 아시아인 인구를 나타낸다. ‘전체 인구 대비 아시아인 인구 백분율’ 변수를 추가하고 하위 10개 지역의 ‘state’(주), ‘county’(지역), ‘아시아인 인구 백분율’ 을 출력하시오.
asia_df = grade_df.assign(asia = midwest['popasian']/midwest['poptotal']*100)
asia_df[['state','county','asia']].sort_values('asia').head(10)
'빅데이터 분석가 양성과정 > Python' 카테고리의 다른 글
기온 공공 데이터 (2) | 2024.07.10 |
---|---|
'한국인의 삶 파악하기' 분석 (0) | 2024.07.10 |
외부 데이터 활용 (0) | 2024.07.10 |
판다스 활용 (0) | 2024.07.10 |
Pydata 데이터 가져오기 (0) | 2024.07.10 |