안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
<데이터 분석 관련 글>
2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)
2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)
2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)
2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)
2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)
2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)
2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기
2021.07.22 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 8편. 전처리 지옥 맛보기 (ft. loc[ ] 제대로 이해하기)
오늘도 데이터 분석은 VScode에서 Jupyter Notebook을 실행하여 진행하였습니다. 혹시 VScode와 주피터 노트북이 깔려있지 않으신분들은 '개발환경 구축' 목록을 클릭하셔서 관련 글들을 읽으시는 것을 추천드립니다.
이번 시간에는 지난 시간에 전처리 해보았던 '2015~2020년 전국 민간아파트 분양가' 데이터를 이용해서 데이터 시각화를 해보겠습니다.
지난 글(파이썬 데이터 분석 8편)을 모두 따라하신 후, 이번 글을 따라하셔도 되고, 아래의 데이터를 받아서 바로 따라 하셔도 됩니다.
이번 글만 보시는 분들을 위해서 아래의 데이터를 가지고 Pandas로 DataFrame을 불러오는 것부터 시작해 보겠습니다.
아 그전에 오늘 사용할 패키지들을 불러와주겠습니다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
데이터 불러오기
csv 파일을 받으셨다면 판다스로 csv 파일을 불러와주세요.
해당 코드는 csv 파일과 ipynb 파일이 동일한 폴더에 위치하여야 정상 작동합니다.
df = pd.read_csv("house_price_preprocessing.csv")
잘 불러와졌는지 확인해봅시다.
4505개의 행과 6개의 열이 모두 잘 불러와졌네요.
쓰레기 데이터 제거 (drop)
지난 시간에 전처리 했던 것을 생각해보면 값이 미입력 되거나 이상하게 표기된 것들을 모두 0으로 처리했었습니다.
# '분양가격' 열에서 값이 0인 것들을 모두 출력
df.loc[ df['분양가격'] == 0]
이런 데이터는 전체 결과에 왜곡된 결과를 가져오므로 제거해 주어야 합니다.
데이터 프레임에서 어떤 값이 포함된 행을 제거해줄 때는 drop( ) 함수를 사용합니다.
drop( )
drop( ) 함수를 이용해서 행을 제거해줄 떄는 2가지 인자를 입력해줍니다.
첫번째 인자는 index, 두번째 인자는 axis입니다.
먼저 제거해 줄 행들의 index는 아래와 같이 받을 수 있습니다.
# 분양가격이 0인 행의 index 모두 가져오기
idx = df.loc[ df['분양가격'] == 0].index
idx
>>>
Int64Index([ 28, 29, 34, 81, 113, 114, 119, 166, 198, 199,
...
4418, 4448, 4453, 4458, 4459, 4461, 4488, 4493, 4499, 4503],
dtype='int64', length=320)
index를 받았으니, drop 함수로 문제의 320개 행들을 제거해줍니다. 이때, 행 제거이므로 axis=0이 되겠습니다.
# idx 행들을 drop, 행은 axis=0 (열은 axis=1)
df = df.drop(idx, axis=0)
잘 제거 되었는지 한 번 확인해볼까요? df.count( ) 함수를 이용해보겠습니다.
아까 320개의 데이터가 모두 제거 되었다면 4505 - 320 = 4185개가 출력되어야 겠죠?
잘 제거가 된 것 같네요!
데이터 시각화를 들어가기 전에 한 가지를 더 전처리 해주도록 하겠습니다.
현재의 분양가격은 ㎡(제곱미터)당 가격입니다. 하지만 우리가 현실에서 주로 사용하는 가격은 평당 가격이죠?
좀 더 직관적인 데이터 시각화를 위해서 1평 = 3.3㎡ 단위 변환을 해주도록 하겠습니다.
# numpy의 브로드 캐스트 개념 이용(모든 열 한꺼번에 사칙연산 가능)
df['분양가격'] = df['분양가격']/3.3
# 열 이름을 '분양가격'을 '평당 분양가격'으로 변경
df = df.rename(columns={'분양가격': '평당 분양가격'})
단위가 잘 변경되었는지 확인해 볼까요?
아주 잘 변경되었네요!
데이터 시각화
이제 데이터 시각화를 바로 들어가보겠습니다.
시각화를 위해서 관련 셋팅을 좀 해주겠습니다. 자세한 내용은 주석을 참고해주세요.
# 그래프 출력 시 이상한 에러들 무시
import warnings
warnings.filterwarnings("ignore")
# 그래프 그릴 때 한글 깨짐 방지 설정
import os
# Mac OS의 경우와 그 외 OS의 경우로 나누어 설정
if os.name == 'posix':
plt.rc("font", family="AppleGothic")
else:
plt.rc("font", family="Malgun Gothic")
# 그래프 사이즈 설정
plt.figure(figsize=(12,8))
지역별 분양가격
먼저 지역별 분양가격 평균 가격을 그려보겠습니다. 별다른 처리 없이 '지역명'과 '분양가격'을 x, y축으로 설정하고 그려주면 자동으로 지역명이 같은 분양가들을 통합해서 그 평균 가격을 그려주는 것으로 보입니다.
왜 그렇게 생각했냐면, groupby( ) 함수를 이용해서 출력해본 평균데이터와 값이 비슷했답니다. 추후에 groupby에 대해서 포스팅 해보도록 하겠습니다.
# '지역명'으로 묶어서 '분양가격'의 평균을 나타냄
df.groupby('지역명')['평다 분양가격'].mean()
# seaborn 패키지로 막대 그래프 그리기
sns.barplot(x='지역명', y='평당 분양가격', data=df)
확실히 서울이 압도적으로 비싼 것을 보실 수 있습니다.
연도별 분양가격
연도별로 분양가격의 평균이 어떻게 변하는지도 살펴보겠습니다.
sns.barplot(x='연도', y='평당 분양가격', data=df)
역시 인플레이션 때문에 분양가는 해가 갈 수록 비싸진다는 것을 데이터로 알 수 있습니다.
오늘 준비한 내용은 여기까지 입니다.
공부하시느라 고생 많으셨습니다!
<참고 자료>
직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의
'파이썬 패키지 > 데이터분석' 카테고리의 다른 글
[파이썬 데이터 분석] 11편. Pandas hist 함수로 한눈에 데이터 분포 파악하기 (ft. 국민건강보험공단_건강검진정보) (0) | 2021.08.05 |
---|---|
[파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index) (0) | 2021.07.25 |
[파이썬 데이터 분석] 8편. 전처리 지옥 맛보기 (ft. loc[ ] 제대로 이해하기) (0) | 2021.07.22 |
[코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링) (0) | 2021.07.21 |
[Python/Numpy] 데이터 분석 수치연산 패키지_numpy 3편. 정렬(sort) (0) | 2021.07.18 |