- 라인별 실행불가 (주피터처럼 셀단위가 안된단것임)
- 각종 자동완성 불가 (라이브러리 이름, 함수명 다 외워가야함)
- 유형1 : 무슨짓을 하든 결과만 잘 나오면 됨
- 유형2 : 하루면 완성가능. 템플릿이 정해져있으니 무지성 암기. 유형2에는 시간투자 많이 X
- df.loc[행조건, 열조건] => 이건 곧 그 구역값을 지정하는 방법인거다
- (1) 원하는 구간을 출력을 원한다면 : df = df.loc
- (2) 원하는 구간에 값을 바꾸고 싶다면 df.loc = 값
- 값을 바꾸는것도 가능 그 구역에 값을 대입하면 곧 적용이 되는거니까
# 0. 습관처럼
import pandas as pd
import numpy as np
df = pd.read_csv(path)
print(df.shape())
print(df.isnull().sum())
df.head()
# 1. 이상치 => "quantile"
q1 = df[col].quantile(0.25) # 1사분위 값
q3 = df[col].quantile(0.75) # 3사분위 값
iqr = q3 - q1
v1 = q1 - 1.5 * iqr
v3 = q3 + 1.5 * iqr
# 2. 반올림 / 올림 / 버림
## 2-1. 데이터프레임으로 받는경우 (넘파이 필수)
c = np.ceil(df)
f = np.floor(df) # 내림 -5.5 => -6
t = np.trunc(df) # 버림(절삭) -5.5 => -5
r = np.round(df,자릿수)
r_mean = r.mean() # 이런식으로 array, df는 끝에 '.함수()' 가 많음.
## 2-2. 그냥
import math
math.round(value, 자릿수)
# 3. 값 삭제 => 특정 행/열 drop, 결측치 포함 행/열 drop'na' *loc,iloc 쓸수있으면 쓰는게 젤 낫다
df = df.drop('지울칼럼명', axis = 1) # axis = 1 해줘야함.'1' 세로방향 모양
df = df.drop('지울행 인덱스값 : 행이름이 없으니') # 디폴트가 axis = 0
df = df.dropna() # 결측치 하나라도 있는 행 다 삭제
# 4. 결측치채우기 => fillna
df['col'] = df['col'].fillna(df['col'].median()) # 중앙값으로 결측치 다 채운다
# 5. 왜도와첨도
v1 = df['col'].skew()
v2 = df['col'].kurt()
# 6. df1의 누적합 df2 구하기 => cumsum()
df2 = df1.cumsum()
df2 = df2.fillna(method = 'bfill') # 이 때 발생하는 결측치를 뒤의 값 채우기
df2 = df2.fillna(method = 'ffill') # 앞의값으로
# 7. 표준화 => 암기 ★sklearn ~ StandardScaler ~ fit_transform★
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df['col'] = scaler.fit_transform(df[['col]]) # df['f5'] 이렇게하면 오류남!!! 인자를 시리즈가 아닌 데이터프레임으로 받아야하기 떄문!!
df.head()
'''
* 기본 외워야함 : from sklearn.preprocessing import StandardScaler, scaler(), fit_transform
* fit_transform은 인자를 series가 아닌 dataframe으로 받는다
* 가장 쉬운거는 []말고 [[]]로 하면 dataframe이 된다!
* seires, dataframe 차이 : series는 dataframe의 구성요소로 열 한개임. df도 열이 한개일 수는 있지만 series는 무조건 한개겠지
위에처럼 그냥 []하면 series로 나오고 [[]]로 하면 df로 나옴..!!
'''
# 8. 특정 칼럼 기준 데이터프레임 정렬하기
df = df.sort_values('col', ascending=False) # 내림차순
df.head()
# 9. 표준편차 => .std()
# 데이터셋(basic1.csv)의 'age'컬럼의 이상치를 더하시오!
# 단, 평균으로부터 '표준편차*1.5'를 벗어나는 영역을 이상치라고 판단함
std = df['age'].std()*1.5
mean = df['age'].mean()
option = (df['age'] > mean + std) | (df['age'] < mean - std)
df.loc[option]['age'].sum()
# 암기 : .sum(), std(), mean(), max(), min()
시험을 떠나 group by는 판다스에서 매번 헷갈리는 개념이였기에 여기에 추가로 정리한다
위와 같은 데이터가 있다고 할 때,
- groupby : 특정 "(범주형)칼럼" 기준으로 새로운 피봇테이블 탄생 => 여기서의 칼럼은 기존 칼럼중 수치형 칼럼만남음
- df2 = df.groupby(['원하는 칼럼들']) : 이거는 행위만 하는거기 때문에 출력해도 아무것도 나올 수 없음
- df2 = df.groupby(['원하는 칼럼들']).sum() 이런식으로 min sum 등 해야 출력가능
- df2 출력한 후 원하는건 iloc로 찍으면됨. => 이렇게 1) sum,min 조치등 까지 했을때 원하는 칼럼을 기준으로한 새로운 df가 만들어지며,
- 2) 여기서는 기존 df들 처럼 iloc 이런거로 찍을수도 있게 되는것임! (즉 이제서야 데이터프레임에 원하는 후처리 가능)
https://aitzone.tistory.com/30
아묻따 랜덤포레스트
위에 링크가 정말 좋음
파라미터튜닝까진 할 필요없고 정형화해서 암기하기
1유형은딱 저정도까지만하고 2유형 달달 외우기