ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (10) 데이터분석_전국 도시공원 데이터 프로젝트
    데이터분석 2023. 6. 15. 16:44
    728x90

    각 명령어를 사용하기 위해 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.isnull().sum()

    park.columns

    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)]
    park.shape

    # ' 공원면적비율' 파생변수 만들기
    # 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='시도')

    댓글

Designed by Tistory.