-
🐼데이터분석입문_통계(3주차)카테고리 없음 2024. 4. 9. 14:10
01. 데이터 분석에 필요한 pandas 기초 문법
- query()
- sort_values()
- 행, 열 추출 [],[[]], loc, iloc
- crosslab
- 파생변수, assign()
- groupby(), agg()
- merge(), concat()
- str()
- 시계열()
- boolean 인덱싱 접근
02. Query()
- 데이터를 추출하기 위한 조건 문법
- 기존에 행과 열만을 가지고 데이터를 추출했다면 행과 열에 조건등을 붙여서 진행하는 문법
- Q1 : s 선박에 class는 first, 생존했고, 여성이고, 나이는 20대 미만인 사람의 fare 요금의 평균은?
- query(요구조건)
- Q1 : S선박에 Class는 First, 생존했고, 여성이고 나이는 20대 미만인 사람의 fare 요금의 평균은?
- 논리 연산자 and로 묶으면 된다.
# 최종 요구 조건 tt.query("""embarked == 'S' and pclass == 1 and sex == 'female' and age<20 and alive == 'yes'""")
tt.query("""embarked == 'S' and pclass == 1 and sex == 'female' and age<20 and alive == 'yes'""")['fare'].mean()
03. sort 값을 정렬하기
- 내림차순, 오름차순
- sort_values('정렬할 컬럼')
- sort_values('정렬할 컬럼', ascending = True, Flase)
#디폴트 오름차순 , 데이터프레임도 적용 tt.sort_values('age')
#시리즈도 동일하게 적용된다. tt.age.sort_values()
#내림차순으로 변경 , 데이터프레임도 적용 tt.sort_values('age', ascending=False)
2개 이상의 컬럼이 기준은 경우는?
- 컬럼을 적는 법과 내림, 오름차순 기준 적는 법
- sort_values('정렬할 컬럼1', '컬럼2')
- sort_valeus(['정렬할 컬럼1, '컬럼2'], ascending = [True, False])
#age가 적용 후 동일한 값이면 두 번째 fare 비교한다. tt.sort_values(['age','fare'])
#뒤의 차순도 변경 가능하다. tt.sort_values(['age','fare'], ascending=[True,False])
04. 추가 파생변수 만들기
- 파생 변수란 무엇인가?
- 기존의 변수를 이용해서 새로운 변수를 만드는 것
- 기존의 변수를 두 개 이상을 사용하여 합치거나, 평균을 내거나 기타 내가 원하는 함수를 적용해서 변수로 만들거나 기존의 값에 특정 수치들을 사칙 연산 및 내가 원하는 식으로 적용해서 변수로 만들 수 있다.
- 변수를 하나 먼저 만들어야 한다.
- while 초기식(i=0)와 동일하게 초기식을 잡아주면 좋다.
# tt.fare 100을 곱해서 원래 단위로 맞춘다. # 변수를 만드는 법은 tt['새롭게 만들 변수명'] tt['fare_100'] = tt['fare']*100 # 해당 기존 값에 *100 print(tt['fare_100'])
# 파생변수 다시 만들기 fare_100/ fare = 100 # 파생변수를 이용해서 다시 파생변수를 만들자! # 100이라는 값이 모두 적용되는 컬럼을 만들자 # 데이터프레임에서 적용하는 파생변수 만드는 식이 우리가 생각하는 문법처럼 그대로 적용하면 된다. # tt['컬럼']/ tt['컬럼'] tt['100_values'] = tt['fare_100']/tt['fare'] print(tt['100_values'])
기존에 배운 Python 문법을 이용해서 for, if문으로 파생변수 생성
- pclass 별로 1,2,3등급, survived 확률
len(tt.query('pclass==3'))
- 491
len(tt.query('pclass==2'))
- 184
len(tt.query('pclass==1'))
- 216
#파생변수 컬럼을 만들어야 한다. tt['pclass_prob'] =0 for i in range(len(tt)): if tt.loc[i]['pclass'] == 3: # 3번 클래스로 조건 찾기 tt['pclass_prob'].loc[i]= tt.loc[i]['survived'].sum()/491 # 3번 클래스의 생존확률 elif tt.loc[i]['pclass'] ==2: # 2번 클래스의 조건 찾기 tt['pclass_prob'].loc[i] = tt.loc[i]['survived'].sum()/184 # 2번 클래스의 생존확률 elif tt.loc[i]['pclass'] ==1: # 1번 클래스의 조건 찾기 tt['pclass_prob'].loc[i] = tt.loc[i]['survived'].sum()/216 # 1번의 클래스의 생존확률
tt[['survived','pclass','pclass_prob']]
05.crosstab을 이용해 확률 구하기
- pd.crosstab(인덱스, 계산할 컬럼)
pd.crosstab(tt['sex'], tt['survived'])
# 2개 이상인 경우는 index, 컬럼을 지정해서 crosstab을 만들 수 있다. pd.crosstab(index = [tt['sex'],tt['pclass']],columns = tt['survived'])
# 전체 sum 도 보면 좋다. # 인자값에 넣기만 하면 된다. # 인자 값은 margins , 확률은 normailize True, False # 2개 이상인 경우는 index, 컬럼을 지정해서 crosstab을 만들 수 있다. # 크로스탭으로 간단하게 다양한 컬럼들간의 관계, 확률표도 만들 수 있다. pd.crosstab(index = [tt['sex'],tt['pclass']],columns = tt['survived'], margins = True, normalize=True)
06. assign() 파생변수 만들기
- assign(파생변수명 = 요구 조건등을 적는 것)
- numpy에서 제공하는 where함수를 이용해 파생변수를 만들 것
tt.assign(age_old= np.where(tt['age']>30, 'old','young')) # na값들은 그외로 처리된다.