공부 기록/Data Analysis

[Data/Python] 데이터분석 정리 - 4

햇살아래 2022. 3. 19. 15:34

#개념 정리

#패스트캠퍼스 강의 정리

 

 

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 + df2

 

 

-행의 갯수가 다른 경우

df1 = pd.DataFrame({'미술': [102030405060], '통계':[60708090100110] })
df2 = pd.DataFrame({'통계': [1020304050], '미술': [60708090100] })
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"] = (129)
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')