전국 아파트 분양가 분석하기 (1)
💗 전국 아파트 분양가 분석하기 (1)
✔ 서버가 터져서 오늘은 깃허브에 올리지 못했다~! 서버가 복구될 때까지 기다리기.
✔ 1. 가상환경에 접속하여 원하는 파일로 Jupyter Notebook 켜기.
(base) C:\Users\dlwlr>conda activate sn2022
(sn2022) C:\Users\dlwlr>cd C:\Users\dlwlr\OneDrive\바탕 화면\USW 22 SS\쇼셜네트워크분석\3w
(sn2022) C:\Users\dlwlr\OneDrive\바탕 화면\USW 22 SS\쇼셜네트워크분석\3w>jupyter notebook
💜 (목표) 평당분양가격 구하기.
평당분양가격 구하기. 평당분양가격 = 분양가격 * 3.3
✔ 2. 필요한 패키지 불러오기.
# 사용할 패키지를 import합니다
import sys
print('python', sys.version)
import numpy as np
print('numpy', np.__version__)
import pandas as pd
print('pandas', pd.__version__)
import matplotlib as mpl
print('matplotlib', mpl.__version__)
import matplotlib.pyplot as plt
import seaborn as sns
print('pandas', sns.__version__)
# 결과 확인을 용이하게 하기 위한 코드
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'
# # 경고 메시지는 출력되지 않게 합니다.
# import warnings
# warnings.filterwarnings("ignore")
✔ 3. 데이터 로드하기.
df_last = pd.read_csv("전국평균 분양가격 (2015년10월_2019년12월).csv", sep=",", encoding="cp949")
df_first = pd.read_csv("전국평균 분양가격 (2013년12월_2015년8월).csv", sep=",", encoding="cp949")
➕ 데이터 shape도 확인할 수 있다.
df_last
df_last.shape
df_first
df_first.shape
✔ 4. 데이터 일부분 미리보기.
head나 tail을 사용하거나, iloc을 이용해서 원하는 부분을 가져올 수 있다.
df_last.head()
df_last.iloc[:5]
df_last.tail()
df_last.iloc[-5:]
df_first.head()
df_first.iloc[:5]
df_first.tail()
df_first.iloc[-5:]
✔ 5. 데이터 요약하기.
df_last.info()
df_first.info()
✔ 5-1. object type data
a = ["12", "wer", 12, 12.948]
ar1 = np.array(a)
ar1
type(ar1)
ar1[1]
sr1 = pd.Series(a)
sr1
type(sr1)
sr1.loc[0]
sr1.iloc[-1]
for ii in ar1:
type(ii) # string
# array의 요소들은 모두 string이다.
for ii in sr1:
type(ii) # string, int, float
# series의 요소들은 본인들의 타입을 가지고 있다.
- Array : 배열의 모든 요소는 String 이다.
- Series : 시리즈의 모든 요소는 본인들의 타입을 가지고 있다.
여기서 주의할 점은 np.nan은 float 이다.
sr1 = pd.Series([np.nan, 12.094, 19])
sr1
for ii in sr1:
type(ii) # float
# 모두 float가 나온다.
# nan도 float이다.
✔ 6. 결측치 찾아내기.
df_last.isnull() # null : true
df_last.notnull() # null이 아닌 것 : true
df_last.isnull().sum()
df_last.notnull().sum()
➕ df_first를 해봤는데 너무너무 깨끗하다. 결측치가 하나도 없었다.
➕ sum에 axis를 지정해주면 원하는 방향 으로 값을 구해낼 수 있다.
df_last.isna().sum(axis=0) # 기본 전제
df_last.isna().sum(axis=1)
✔ 6-1. 데이터 손실이 큰 방법으로 결측치 찾아내기.
- pd.to_numeric
- errors = "raise" : 기본 전제이다. 그냥 numeric이 불가능한 값이 나오면 Error가 뜬다.
- errors = "ignore" : numeric이 불가능한 값이 나오면 무시한다.
- errors = "coerce" : numeric이 불가능한 값이 나오면 NaN이 나온다.
pd.to_numeric(pd.Series(["wer", "123", "12,456", 12, 12.3049]), errors="raise")
# If 'raise', then invalid parsing will raise an exception.
pd.to_numeric(pd.Series(["wer", "123", "12,456", 12, 12.3049]), errors="ignore")
# If 'ignore', then invalid parsing will return the input.
pd.to_numeric(pd.Series(["wer", "123", "12,456", 12, 12.3049]), errors="coerce")
# If 'coerce', then invalid parsing will be set as NaN.
위와 같은 방법을 써서 이용하자~!
df_last["분양가격"] = pd.to_numeric(df_last["분양가격(㎡)"], errors="coerce")
df_last
df_last["분양가격(㎡)"].isnull().sum()
df_last["분양가격"].isnull().sum()
# 뭔가 섞인 것들을 NaN으로 바꾸었기 때문에, 더 많아졌다. 결국, 데이터 손실이 많아졌다.
✔ 6-2. 데이터 손실이 비교적 작은 방법으로 결측치 찾아내기.
- object type의 Series는 여러 종류의 데이터를 가질 수 있다.
이러한 object Series의 특성을 이용하자~!
sr1 = pd.Series([np.nan, 12, 45, "234", "444"])
for ii in sr1:
type(ii)
💜 결측치 찾아내는 방법의 과정 2 Steps
- (사실 1) NaN은 자기 자신과 같지 않다.
np.nan == np.nan # False
# NaN은 자기 자신이 서로 같지 않다.
1 == 1
10.34 == 10.34
"we" == "we"
- (사실 2) 문자열에서 isdigit를 이용하면 숫자로 구성되어 있는지, 그 외의 것으로도 구성되어 있는지 확인할 수 있다.
# 문자열이 숫자로만 구성되어 있는가?
"12345".isdigit() # True
"123,456".isdigit() # False
- (Step 1) NaN과 NaN이 아닌 값들을 구분하기.
- (Step 2) NaN이 아닌 값이고 numeric이 가능한 값들은 float로 만들어주기.
for ii in df_last["분양가격(㎡)"]:
if ii != ii:
continue # 아래 코드를 실행하지 않고 모두 건너뛰기.
if ii.isdigit() == False:
ii # 공백, ",", "-"
💜 결측치 찾아내는 방법의 최종 코드 : map 이용하기.
def f1(ii):
if ii != ii: # NaN인 경우에 모두 건너뛰기.
return np.nan
ii = ii.replace(",", "")
# ,가 들어간 데이터들은 ,를 모두 없애주기.
if ii.isdigit() == True:
# 만약에 numeric으로 바꿀 수 있는 경우
return float(ii)
return np.nan # 그게 아니면 NaN으로 만들어주기.
"""
f1("12,3")
f1(np.nan)
f1("12,446")
"""
df_last["분양가격"] = df_last["분양가격(㎡)"].map(f1)
df_last
✔ 이러한 과정을 하는 이유
NaN 값 중에서도 아예 못 쓰는 값들만 있는 것이 아니기 때문에, 이런 식으로 NaN 값 안에 무엇이 있는지 확인해보면서 살릴 수 있는 데이터 값은 살려준다.
df_last["분양가격(㎡)"].isnull().sum()
df_last["분양가격"].isnull().sum()
# NaN의 개수가 그렇게 많이 늘지는 않았다.
# NaN 중에서도 살릴 수 있는 값들은 살린 셈이다.
✔ 7. 평당 분양가격 구해내기.
# 분양가격을 실수로 변경해주었으니, 수 처리가 가능해진다.
# 평당 분양가격 = 분양가격 * 3.3
df_last["평당분양가격"] = df_last["분양가격"]*3.3
df_last
✔ 8. 데이터 수치상으로 요약하기.
df_last["분양가격"].describe()
df_last["분양가격"].value_counts()
df_last["분양가격(㎡)"].describe()
df_last["분양가격(㎡)"].value_counts()
df_last["평당분양가격"].describe()
df_last["평당분양가격"].value_counts()
df_last.describe()
Author And Source
이 문제에 관하여(전국 아파트 분양가 분석하기 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tino-kim/전국-아파트-분양가-분석하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)