티스토리 뷰
이전까지 공부했던 numpy와 pandas를 활용하여 데이터 전처리를 해봅시다 :)
- 공공데이터 포털(https://www.data.go.kr/)에서 제공하는 데이터를 활용
- 민간 아파트 가격동향 데이터(http://bit.ly/ds-house-price)를 이용
🌟 /// Error 메세지를 잘 확인해서 전처리를 이어가자 /// 🌟
우선 모듈을 불러오겠습니다.
import pandas as pd
오늘 이용할 데이터셋을 불러오겠습니다.
df = pd.read_csv('http://bit.ly/ds-house-price') # df에 저장
데이터셋을 우선 살펴보겠습니다.
df
out::::
- 5개의 컬럼과 4505개의 데이터가 있음
- 컬럼은 '지역명', '규모구분', '연도', '월', '분양가격(m^2)' 가 있음
df.info()
out::::
- 컬럼별로 데이터 타입을 확인할 수 있음
- 4505개의 enries로 보았을 때, 이보다 적은 분양가격(m^2)에는 결측치가 있음을 알 수 있음
컬럼명 중 '분양가격(m^2)'에 특수문자가 있기 때문에 편의를 위해 컬럼명을 변경해주겠습니다.
# columns명 바꾸기
df = df.rename(columns={'분양가격(㎡)':'분양가격'})
분양가격의 데이터타입은 object입니다. 여러 통계 연산을 할 떄 편의를 위해 int 타입으로 변경해주겠습니다.
# 분양가격을 int로 변환
df['분양가격'].astype(int) # 공백문자가 있어서 error
out::::
ValueError: invalid literal for int() with base 10: ' '
공백문자 때문에 에러가 났다고 하니 공백문자를 없애봅시다.
strip() 함수를 이용해서 데이터의 공백을 삭제해줍니다.
# strip()를 사용해서 공백이 있는 데이터의 공백을 삭제
df['분양가격'] = df['분양가격'].str.strip() # 양쪽에 있는 공백을 제거해서 다시 저장
이제 다시 데이터타입을 변경해봅시다.
df['분양가격'].astype(int) # ValueError: invalid literal for int() with base 10: ''
out::::
ValueError: invalid literal for int() with base 10: ''
이번에는 또 데이터가 없는 데이터 때문에 에러가 났다고 알려줍니다.
다시한번 알려준대로 전처리를 해봅시다.
loc[]를 이용해봅시다.
# 데이터가 없는 경우는 0을 채워줌
df.loc[df['분양가격']=='', '분양가격'] = 0
이제 다시 또 데이터타입을 변경해봅시다.
df['분양가격'].astype(int) # ValueError: cannot convert float NaN to integer
out::::
ValueError: cannot convert float NaN to integer
😂😂😂이번에는 또 결측치 때문에 데이터 타입 변환을 할 수 없다고 합니다.
다시한번더...전처리를 해봅시다.
# NaN 을 0으로 변환
df['분양가격'] = df['분양가격'].fillna(0)
다시 또 데이터 타입 변환을 해봅시다.
df['분양가격'].astype(int) # ValueError: invalid literal for int() with base 10: '6,657'
out::::
ValueError: invalid literal for int() with base 10: '6,657'
이번에는 ',' 때문에 변환이 안 된다고 합니다. ','을 ''로 바꿔줍시다.
# 콤마를 제거
df['분양가격'] = df['분양가격'].str.replace(',', '')
이제는 되길 바라면서.....
df['분양가격'].astype(int)
out::::
ValueError: invalid literal for int() with base 10: ' '
^_^ 계속 알려주는대로 수행해보겠습니다.
# strip()를 사용해서 공백이 있는 데이터의 공백을 삭제
df['분양가격'] = df['분양가격'].str.strip() # 양쪽에 있는 공백을 제거해서 다시 저장
df['분양가격'].astype(int)
out::::
ValueError: invalid literal for int() with base 10: '-'
# '-'을 제거
df['분양가격'] = df['분양가격'].str.replace('-','')
df['분양가격'].astype(int)
out::::
ValueError: cannot convert float NaN to integer
df['분양가격'] = df['분양가격'].fillna(0)
df['분양가격'].astype(int)
out::::
ValueError: invalid literal for int() with base 10: ''
df.loc[df['분양가격']=='', '분양가격'] = 0
df['분양가격'].astype(int)
out::::
드디어 제대로 데이터 타입 변환이 되었습니다.
다시한번 info를 확인해보겠습니다.
df.info()
out::::
'분양가격'의 데이터타입이 object에서 int로 잘 변환된 것을 다시한번 확인할 수 있습니다.
'규모구분' 컬럼의 데이터를 확인해보겠습니다.
df['규모구분']
out::::
모든 데이터에 '전용면적'이라는 문자는 분석 시 불필요해보입니다.
이 문자열을 ''로 바꿔주겠습니다.
# 규모구분 column에 불필요한 '전용면적' 글자 삭제
df['규모구분'] = df['규모구분'].str.replace('전용면적 ','')
전처리는 이것으로 끝났고, 몇가지 통계값을 확인해보겠습니다.
- 규모구분에서 count
df['규모구분'].value_counts()
out::::
- 지역명별로 평균 분양가격을 확인
# 지역명별로 평균 분양가격을 확인
df.groupby('지역명')['분양가격'].mean()
out::::
- 지역별 가장 비싼 분양가
# 지역별 최고 비싼 분양가
df.groupby('지역명')['분양가격'].max()
out::::
- 연도별 분양가격의 평균
df.groupby('연도')['분양가격'].mean()
여기까지 데이터 전처리 활용 및 수행을 해보았습니다 :)
'빅데이터 인공지능 > 데이터분석' 카테고리의 다른 글
[데이터분석] ⑥ 쇼핑몰 고객주문 데이터 프로젝트 실습 (0) | 2022.06.30 |
---|---|
[데이터분석] ⑤ matplotlib 라이브러리 (0) | 2022.06.28 |
[데이터분석] ③ 기본적인 pandas 모듈(2) (0) | 2022.06.27 |
[데이터분석] ② 기본적인 pandas 모듈(1) (0) | 2022.06.24 |
[데이터분석] ① 기본적인 numpy 모듈 (0) | 2022.06.23 |
- Total
- Today
- Yesterday
- 데이터분석
- 자바스크립트
- react-query
- TypeScript
- next.js
- 프론트엔드 공부
- 프로젝트 회고
- 타입스크립트
- rtl
- 리액트 훅
- 프론트엔드
- 디프만
- 머신러닝
- HTML
- 인프런
- CSS
- react
- 스타일 컴포넌트 styled-components
- Python
- jest
- testing
- 파이썬
- 딥러닝
- 자바스크립트 기초
- styled-components
- frontend
- 리액트
- 자바
- JSP
- 프론트엔드 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |