#개념 정리
#패스트캠퍼스 강의 정리
1. column 간 연산(+, -, *, /, %)
df['통계'] + df['미술']
df['통계'] - df['미술']
df['통계'] * df['미술']
df['통계'] / df['미술']
df['통계'] % df['미술']
df['통계'] + 10
df['통계'] - 10
df['통계'] / 10
2. 복합 연산
df['통계미술합계'] = df['통계'] + df['미술'] + 10
df['통계'] + df['미술'] - df['체육']
3. mean(), sum()을 axis 기준으로 연산
df.sum(axis=0) df.sum(axis=1)
4. NaN값이 존재할 경우 연산
NaN값을 연산할 경우 NaN값이 출력된다.
df['통계'] / 2 df['통계'] / np.nan
5. 데이터프레임과 데이터프레임 간 연산
-문자열이 포함된 경우
데이터프레임간 연산이 불가능한 문자열이 포함된 경우 에러가 발생한다. 그럴 경우 문자열이 포함된 컬럼을 제거 후 연산을 시행해야 한다.
-행의 갯수가 다른 경우
df1 = pd.DataFrame({'미술': [10, 20, 30, 40, 50, 60], '통계':[60, 70, 80, 90, 100, 110] })
df2 = pd.DataFrame({'통계': [10, 20, 30, 40, 50], '미술': [60, 70, 80, 90, 100] })
df1 + df2
6. 데이터 타입별 column 선택 (select_dtypes)
-문자열이 있는 column만 선택
df.select_dtypes(include='object') #include: 문자열 column만 선택
df.select_dtypes(exclude='object') #exclude: 문자열을 제외한 column만 선택
7. 원핫인코딩
원핫인코딩은 한개의 요소는 True 그리고 나머지 요소는 False로 만들어주는 기법이다.
blood_map = {
'A': 0,
'B': 1,
'AB': 2,
'O': 3,
}
df['혈액형_code'] = df['혈액형'].map(blood_map)
df['혈액형_code'].value_counts()
- 만약 df ['혈액형_code']를 머신러닝 알고리즘에 그대로 넣어 데이터를 예측하라고 지시한다면, 컴퓨터는 '혈액형_code'안에서 값들 간의 관계를 스스로 형성하게 된다.
- 이 상황에서 만약 B형은 1, AB형은 2라는 값을 가지고 있는데, 컴퓨터는 B형 + AB형 = O형이다라고 잘못 관계를 맺을 수 있게 된다.
- 따라서, 우리는 4개의 별도의 column을 형성해주고 1개의 column에는 True 나머지는 모두 False를 넣어 줌으로써 A, B, AB, O형의 관계는 독립적이다를 표현해준다.
- 이를 원핫인코딩이라고 한다.
df['혈액형_code']
pd.get_dummies(df['혈액형_code'])
8. column 재정의 (rename)
df.columns를 통해 전체 column의 이름을 재정의했지만, 한 개의 column만 이름을 바꾸고 싶을 때는 rename()을 사용한다.
df = df.rename(columns={'분양가격(㎡)': '분양가격'})
9. Object column을 int 타입으로 변환 (실전 전처리)
df['분양가격'].astype(int)
실제로 이렇게 처리가 되는 데이터들이 많다.
-strip()을 활용해 공백 있는 데이터 공백 없애기
df.loc[df['분양가격'] == ' ']
df['분양가격'] = df['분양가격'].str.strip()
df.loc[df['분양가격'] == '']
#빈 공백이 있는 데이터에 0 넣기
df.loc[df['분양가격'] == '', '분양가격'] = 0
df['분양가격'].astype(int)
#NaN값 fillna로 채워주기
df['분양가격'] = df['분양가격'].fillna(0)
# ', '가 들어간 데이터 확인하기
df.loc[df['분양가격'] == '6,657']
#콤마 제거
df['분양가격'] = df['분양가격'].str.replace(',', '')
df.iloc[2125]
10. 데이터 시각화
df.plot()
한글 폰트 깨지는 현상 해결 방법>
STEP1.
!apt -qq -y install fonts-nanum > /dev/null
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=10)
fm._rebuild()
# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'
# Colab 의 한글 폰트 설정
plt.rc('font', family='NanumBarunGothic')
STEP2. 상단 메뉴 - 런타임 - 런타임 다시 시작 클릭
STEP3. 아래 코드 한번 더 실행
!apt -qq -y install fonts-nanum > /dev/null
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=10)
fm._rebuild()
# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'
# Colab 의 한글 폰트 설정
plt.rc('font', family='NanumBarunGothic')
STEP4. 필요한 패키지, 데이터 로딩
df.plot()
STEP5. Graph 사이즈 키우는 옵션
plt.rcParams["figure.figsize"] = (12, 9)
df.plot()
-plot 그래프
일반 선 그래프
kind 옵션을 통해 여러 가지 그래프를 그릴 수 있다.
kind 옵션:
- line: 선 그래프
- bar: 바 그래프
- barh: 수평 바 그래프
- hist: 히스토그램
- kde: 커널 밀도 그래프
- hexbin: 고밀도 산점도 그래프
- box: 박스 플롯
- area: 면적그래프
- pie: 파이 그래프
- scatter: 산점도 그래프
df['분양가'].plot(kind='line')
df.groupby('지역')['분양가'].mean().plot(kind='bar')
df.groupby('지역')['분양가'].mean().plot(kind='barh')
df['분양가'].plot(kind='hist')