Today's Goals
1. 파이썬 익숙해지기 - Pandas 개인과제 마무리
벌써 공부를 시작한지도 5주가 지났다니
내 실력은 시간을 못 따라가고 있는거 가튼디요 ㅠ
pandas가 정말 공부해야할 메서드가 많아서 힘들지만
그만큼 쉽게 해결할 수 있는 통계분석이 많아서 흥미롭기도!
1. Python으로 데이터 분석하기
Pandas 개인 과제
[여러 조건에 맞는 컬럼 추출은 괄호 필수]
df_filter=df[df['age'] >= 20 & df['age'] < 40 & df['class'].isin(['First','Second'])]
- 오류메세지 : TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool]
- 여러 조건을 걸 때, (조건) & (조건) 처럼 괄호를 써야함
[merge하는 두 테이블의 기준 컬럼명이 다르다면]
df= pd.merge(customers, orders, how='left', left_on='고객번호', right_on='cno')
- 이처럼 left_on 과 right_on으로 나눠 양쪽의 각 기준 컬럼명을 입력하면 됨
[특정 컬럼의 NaN 값만 대체하고 싶다면]
pd.merge(customers, orders, how='left', left_on='고객번호', right_on='cno').fillna({'금액':0})
- df.fillna(0)만 사용한다면 전체 데이터프레임의 NaN값을 모두 대체하는 것으로, 특정 컬럼만 대체하고 싶다면 fillna({컬럼명:대체값}) 사용
[apply를 사용하는 다양한 방법]
# 1
def function(x) :
if x['금액'] == 0 :
return '미구매'
else :
return '구매'
df['구매여부'] = df.apply(function, axis=1)
# 2
def function(x) :
num_sum = 0
for code in x['StockCode'] :
for i in list(code) :
if i in list('0123456789') :
num_sum += 1
return num_sum
df['StockCode_check'] = df.apply(function, axis=1)
[agg를 이용하여 n개의 컬럼에 m개의 집계함수 조합]
#전체 df에 여러 연산 적용하기
data.groupby(['agg_column1']).agg(['sum','mean'])
#특정 컬럼마다 다르게 연산 적용하기
data.groupby(['agg_column1']).agg({'target_column1':['sum','mean'],
'target_column2':['count']})
[SQL의 lag, 빼기, 나누기,,, 증감율 계산을 한방에 하는 방법, pct_change()]
- SQL에서는 전월대비, 전년대비 증감율을 lag윈도우 함수를 이용하여 풀었음
- 상당히 힘들어따
- pandas에는 n개 이전 행 대비 증감율을 한번에 계산해주는 메서드가 있음
samsung_mean['전년동월대비(%)']=samsung_mean['Close'].pct_change(periods=12)
- periods = n 을 설정해주면 n행 이전 값 대비 증감율을 계산해 줌(기본값은 1)
02-08. 차이[백분률] (pct_change)
####DataFrame.pct_change(periods=1, fill_method='pad', limit=None, freq=None, kwargs) ##개요 `pct_cha…
wikidocs.net
[날짜 데이터를 년-월로 가져오는 방법1]
orders['month'] = orders['order_purchase_timestamp'].dt.to_period('M')
- .dt.to_period('M')은 년-월 형식으로 period 타입의 데이터가 만들어짐
- M 대신 A를 넣으면 년 형식
[임의의 범위 안에서 시계열 데이터 생성]
df = pd.DataFrame({'month' : pd.date_range('2016-10-31','2018-08-31',freq='M')})
df['month'] = df['month'].dt.to_period('M')
- freq = 'M' or 'H' or '2H' .... 날짜 생성 간격 설정하는 것(하루단위, 월단위, 일주일 단위 등등)
- 월단위로 생성하면 날짜는 해당 월의 마지막 날에 해당하는 년-월-일 형식을 출력함(따라서 필요에 따라 년-월 형식으로 바꾸는 과정 필요)
https://cruella-de-vil.tistory.com/220
https://wikidocs.net/159717
[Python] TimeSeries
TimeSiries (시계열 데이터) 시계열 데이터를 다루는 여러 가지 유용한 기능을 제공합니다. 시계열 데이터를 데이터 프레임의 행 인덱스로 사용하면 시간으로 기록된 데이터 분석에 매우 편리합니
cruella-de-vil.tistory.com
16-10 period로 변환 (to_period)
####DataFrame.to_period(freq=None, axis=0, copy=True) ##개요 `to_period` 메서드는 DatetimeIndex를 PeriodIn…
wikidocs.net
[컬럼을 인덱스로 변경하는 방법, set_index]
df = df.set_index(keys='month', drop=True)
- drop = True는 기존의 컬럼은 삭제하고 인덱스로만 사용하는 뜻
[SQL의 lag, 행을 앞뒤로 밀어주는 shift]
- 기준 행의 값을 n행 뒤로 밀거나, n행 뒤의 행을 당겨오거나
df['pre_cnt_orders'] = df['cnt_orders'].shift(periods=1)
- periods = -1 이면 기존의 컬럼 행에서 하나 뒤의 행을 당겨오는 것
'데이터 부트캠프 - Today I Learned' 카테고리의 다른 글
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_5주차_24.12.26 (0) | 2024.12.26 |
---|---|
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_5주차_24.12.24 (1) | 2024.12.24 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] WIL(Weekly I Learned)_4주차 (0) | 2024.12.22 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_4주차_24.12.20 (3) | 2024.12.20 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_4주차_24.12.19 (1) | 2024.12.19 |