각 명령어를 사용하기 위해 import를 시켜준다
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
csv파일을 읽어온다.
park = pd.read_csv('/content/drive/MyDrive/study/데이터분석/전국도시공원표준데이터 (1).csv', encoding = 'ms949')
park.head()
그래프에 한글을 적기위한 코드이다 나눔체를 넣어준다.
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc('font', family='NanumBarunGothic')
park 데이터의 정보
park 데이터의 결측치를 계산한다.
park의 컬럼명을 사용할 컬럼만 남겨준다.
park.drop(columns = ['공원보유시설(운동시설)', '공원보유시설(유희시설)', '공원보유시설(편익시설)', '공원보유시설(교양시설)',
'공원보유시설(기타시설)', '지정고시일', '관리기관명','Unnamed: 19'],inplace = True)
park.plot.scatter(x='경도', y='위도', figsize=(8,10), grid=True)
sns.boxplot(y=park['위도'])
sns.boxplot(y=park['경도'])
# 위도와 경도가 잘 못 입력된 데이터를 확인
park.loc[(park['위도']<32) | (park['경도'] > 132)]
# 위도와 경도가 잘 못 입력된 데이터를 확인
park_loc_error = park.loc[(park['위도']<32) | (park['경도'] > 132)]
park = park.loc[(park['위도']>32) | (park['경도'] < 132)]
# ' 공원면적비율' 파생변수 만들기
# sqrt(공원면적) * 0.01
park['공원면적비율'] = park['공원면적'].apply(lambda x: np.sqrt(x) * 0.01)
# '도로명주소'는 입력되지 않고. '지번 주소'만 입력된 데이터를 확인
park.loc[park['소재지도로명주소'].isnull() & park['소재지지번주소'].notnull()]
# '도로명주소'와 '지번 주소'가 모두 입력된 데이터를 확인
park.loc[park['소재지도로명주소'].notnull() & park['소재지지번주소'].notnull()]
# '도로명주소'와 '지번 주소'가 모두 입력되지 않은 데이터를 확인
park.loc[park['소재지도로명주소'].isnull() & park['소재지지번주소'].isnull()]
# '도로명주소'가 입력되지 않은 데이터를 지번 주소로 대신 채움
park['소재지도로명주소'].fillna(park['소재지지번주소'], inplace=True )
park.head()
# split(' ', expand = True): 데이터 프레임으로 해당 데이터가 분리되고 인덱싱과 슬라이싱이 가능
# 0 1 2 3
# 부산광역시 강서구 구랑동 1199-7
park['소재지도로명주소'].str.split(' ', expand = True)
# '도로명주소'에서 '시도'만 추출하여 '시도'파생변수 만들기
park['시도'] = park['소재지도로명주소'].str.split(' ', expand = True)[0]
park['시도'].value_counts()
# '시도'에 '강원'을 '강원도'로 변경
park['시도'][park['시도'] == '강원'] = '강원도'
plt.figure(figsize=(8,10))
sns.scatterplot(data = park, x='경도',y='위도', hue='시도')
park_sido = pd.DataFrame(park['시도'].value_counts())
# value_counts(normalize = True): 전체 합계에 대한 비율
park_sido_normalize = pd.DataFrame(park['시도'].value_counts(normalize = True))
park_sido_normalize
# value_counts(ascending = True): 전체 합계에 대한 비율
park_sido_ascending = pd.DataFrame(park['시도'].value_counts(ascending = True))
park_sido_ascending
park_sido = park_sido.merge(park_sido_normalize, left_index = True, right_index = True).reset_index()
park_sido
park_sido.columns = ['시도','합계','평균']
park_sido
plt.figure(figsize=(12, 8))
sns.barplot(data=park_sido, x='합계', y='시도')