728x90
코랩으로 보스턴주택가격 데이터를 EDA 해볼 것이다.
(EDA : 다양한 각도에서 데이터를 분석하는 과정)
데이터셋 다운로드
위 사이트로 들어가서 데이터셋을 다운로드하면 된다.
나는 다운로드한 데이터셋을 구글드라이브에 옮겨서, 코랩으로 불러올 것이다.
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
데이터셋 컬럼 요약
구글드라이브 연동
# 구글드라이브 연동
from google.colab import drive
drive.mount('/content/drive')
임포트
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
한글 폰트 설치
# 한글 폰트 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
# 런타임재시작
한글 폰트는 설치를 해주고 런타임재시작을 해줘야 적용이 된다.
한글 폰트 설정
# 한글 폰트 설정
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')
데이터셋 불러오기
head()는 데이터셋의 상위 5개를 볼 수 있다.
df = pd.read_excel('/content/drive/MyDrive/Colab Notebooks/.../BostonHousing.xls')
df.head()
데이터 요약정보
df.info()
결측값 갯수 확인
df.isna().sum()
데이터의 상관관계
df.corr()
상관관계 높은 순으로 출력
# 상관관계가 높은 순으로 출력
corr_order = df.corr().loc[:'LSTAT','MEDV'].abs().sort_values(ascending = False)
corr_order
상관관계 히트맵으로 보기
corr = df.corr() # 상관관계 값 저장
fig = plt.figure(figsize = (16, 12)) # 가로 세로 사이즈 설정
axes = fig.gca() # Axes를 구해준다.
heatMap = sns.heatmap(corr.values, annot=True, fmt=".3f", cmap='Blues',
xticklabels=df.columns, yticklabels=df.columns ,
ax = axes)
plt.tight_layout() # 보기 좋도록 적정 레이아웃값 설정
plt.show()
데이터 통계정보
df.describe()
CASE 1. 방 하나의 가격이 높을수록 주택 가격이 비쌀 것인가?
가설
방 하나의 가격이 높을수록, 주택 가격이 높을 것이다.
방 하나당 가격 컬럼 생성
df['PER'] = df['MEDV'].div(df['RM'])
df.head()
방 하나당 가격의 평균
# 방 하나당 가격의 평균
df['PER'].mean()
>>> 3.5262676384090534
평균 이상의 샘플 보기
# 평균 이상의 샘플 접근
cond = df['PER'] >= 3.52
df.loc[cond]
방 하나당 가격과 주택 가격 데이터 시각화
그래프 분석
(주관적인 생각이 포함되어 틀릴수도 있습니다)
regplot를 이용하여 PER(방 하나당 가격)과 MEDV(주택 가격)의 상관관계를 데이터 시각화를 해봤다.
상관관계가 `양의 관계`를 띄는 것을 볼 수 있다.(개인적인 생각으로 PER을 MEDV과 RM을 이용해서 계산했으니, 당연히 상관관계가 높은거 아닌가???)
regplot은 선형회귀분석처럼 데이터들의 선형성을 확인하는 그래프이다.
scatter plot과 line plot을 동시에 보여준다.
PER(방 하나당 가격)의 통계정보
# PER(방 하나당 가격)의 통계정보
df['PER'].describe()
PER를 고가, 중가, 저가로 구분
# PER에 대해 고가,중가,저가로 구분
def per_func(x):
if x < 1.18: # std(표준편차)
return '저가'
elif x < 3.6: # 평균
return '중가'
else:
return '고가'
df['PER_1'] =df['PER'].map(per_func)
df.head()
CASE 1의 결론
PER(방 하나당 가격)이 높을수록, MEDV(주택가격)이 높아진다.
CASE 2. 좋은 환경(일산화질소 농도, 찰스강)이 주택 가격에 영향을 줄 것인가?
가설
좋은 환경일수록, 주택 가격이 비쌀 것이다.
좋은 환경은 일산화질소 농도가 낮고, 찰스강이 보이는 환경을 의미한다.
그룹화해서 주택가격 평균보기
# CHAS와 NOX_GUBUN을 기준으로 MEDV의 평균을 그룹화
df.groupby(['CHAS','NOX_GUBUN']).mean()[['MEDV']]
그룹화를 정렬
# 그룹화를 MEDV 기준으로 정렬
df.groupby(['CHAS','NOX_GUBUN']).mean()[['MEDV']].sort_values(by = ['MEDV'], ascending=False)
분석
가설과 동일하게
CHAS는 1, NOX_GUBUN이 매우적음 일때, 주택가격이 제일 높은 것을 알 수 있고,
CHAS는 0, NOX_GUBUN이 매우많음 일때, 주택가격이 제일 낮은 것을 알 수 있다.
하지만!!
두 번째로 높은 가격은 CHAS는 1, NOX_GUBUN이 많음 일때, 45.4이다.
가설에 의하면 이 조건에서는 높은 가격을 유지해서는 안된다.
그렇다면, 왜 높은 가격을 유지할까?
이에 대해서는 누군가 알려주면 좋겠다.ㅎㅎ😅😅
그 외의 주택가격은 20~28 사이로 큰 차이가 없으므로 큰 의미가 없다고 판단된다.
CASE 2의 결론
좋은 환경(일산화질소 농도가 낮고, 찰스강 경계에 위치)일 때, 주택가격이 높은것을 알 수 있다.
다만,
2번째로 주택가격이 높은 경우에 대해서는 추가적인 데이터 분석이 필요해 보인다.
728x90
'파이썬' 카테고리의 다른 글
[파이썬] 캐글 타이타닉 EDA (0) | 2022.04.27 |
---|---|
[파이썬] 데이터프레임 인덱스 편집 (0) | 2022.04.24 |
[파이썬] 데이터프레임 병합 merge (0) | 2022.04.24 |
[파이썬] 데이터 분석해보기 (All Lending Club loan data) (0) | 2022.04.24 |
[파이썬] NaN, None, Null 차이 및 제거 방법 (0) | 2022.04.22 |