ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬으로 시작하는 데이터 사이언스 - 2. 공공데이터 로드 및 데이터 미리보기
    공부일기/부스트코스 2020. 11. 19. 19:18

    공공데이터 포털에서 '상가(상권)정보_의료기관' 데이터를 갖고 학습을 진행하며 Jupyter notebook을 사용한다.

     

     

    1. 필요한 라이브 불러오기

    import pandas as pd
    import numpy as np # 수치 계산을 위한 라이브러리
    import seaborn as sns # 시각화를 위한 라이브러리

     

     

    2. 시각화를 위한 폰트 설정

    import matplotlib.pyplot as plt # 데이터 시각화 라이브러리
    plt.rc('font', family='Malgun Gothic') # WINDOWS 폰트 지정 MAC일 경우 AppleGothic
    plt.rc('axes', unicode_minus=False) # minus 기호 깨짐 방지
    
    from IPython.display import set_matplotlib_formats
    # 폰트 선명하게 보이게 하기
    
    set_matplotlib_formats('retina')

     

     

    3. 데이터 로드하기

    • 판다스에서 데이터를 로드할 때 .read_csv를 사용한다.
    • 데이터를 로드해서 df 라는 변수에 담는다.
    • .shape를 통해 데이터의 개수를 알 수 있다. 결과는 (행, 열) 순으로 출력된다.
    df = pd.read_csv("data/소상공인.....csv", low_memory=False) # 그냥 실행하면 경고가 뜬다. 하라는 대로 low_memory=False를 지정해준다.
    df.shape

    >>> (91335, 39)

    91335 줄, 39 열을 가진 표로 구성된 데이터라고 보면 된다.

     

     

    4. 데이터 미리보기

    head()와 tail()을 통해 데이터를 미리 볼 수 있다. 

    이 부분은 앞에서 다루었으므로 pass..

    sample()을 사용하면 랜덤으로 한 index를 보여준다. 기본 값은 1 ()안에 숫자를 넣으면 해당 수 만큼의 데이터를 출력.

     

     

    5. 데이터 요약하기

    • 5.1 요약정보

    .info()

    df.info() # info로 데이터의 요약을 본다.

    실행 결과. 사용된 자료형과  데이터 용량도 알 수 있다.

     

     

    • 5.2 컬럼명 보기

    .columns

    df.columns

    실행 결과

     

     

    • 5.3 데이터 타입

    .dtypes

    df.dtypes.head() # head()를 사용해 상위 5개 값만 확인했다.

     

     

     

    6. 결측치

    .isnull()

    df.isnull().head()
    # isnull을 활용해 값이 없는 부분이 있는지 확인한다. True일 경우 값이 없음.

    True는 값이 없음. False는 값이 있음.

     

    null_count = df.isnull().sum()
    null_count
    
    # True == 1 이기 때문에 .sum()을 사용하게 되면 해당 숫자만큼 값이 없다는 것을 나타낸다.

     

    .isnull()로 True False를 구별하고 .sum()을 사용하게 되면 각 컬럼에 True와 False를 계산한 값이 나오게 된다.

    True == 1, False == 0 이므로 출력된 숫자는 해당 컬럼에서 비어있는 값이 없는 index의 개수라고 생각하면 될 것 같다.

    위의 형식은 한번에 보기 어려우므로 막대그래프로 표현할 수 있다.

     

    .plot.bar()

    # .plot.bar 를 이용해 막대그래프로 표현한다.
    null_count.plot.bar(figsize = (5,7))

    글씨가 누워져 있어 보기가 힘들다.

    .plot.bar를 이용해 그래프를 출력했으나 x축의 글자들이 누워있어 보기가 힘들다. .plot.bar(rot=30) 이런식으로 글자의 각도를 조절할 수 있으나 보다 확실한 방법은 아래와 같다.

    null_count.plot.barh(figsize = (5,7))

    .plot.barh를 사용했다. .barh는 x축과 y축을 바꿔서 보여준다.

    figsize는 그래프의 크기를 설정할 수 있게 한다. (가로, 세로)를 의미한다.

     

     

    .reset_index()

    df_null_count = null_count.reset_index()
    df_null_count.head(10)

    rest_index()를 실행하게 되면 데이터프레임의 형태로 값을 보여준다.

    해당 값을 df_null_count로 다시 받아, 상위 10개의 데이터만 추출했다.

     

     

    7. 컬럼명 변경하기

    df_null_count.colums = ["컬럼명","결측치수"]
    df_null_count.head()

    위 사진의 컬럼명 index, 0이 컬럼명, 결측치수로 변경됐다.

     

     

    8. 정렬하기

    .sort_values( by= )

    ( ) 안의 'by='는 생략할 수 있으나 어떤 컬럼을 기준으로 할 것인지를 나타내는 매개변수 한가지는 반드시 들어와야 한다.

    df_null_count_top = df_null_count.sort_values("결측치수", ascending=False).head(10)
    df_null_count_top

    데이터를 "결측치수"의 값을 기준으로 정렬한다. ascending=False 이므로 내림차순으로 정렬.

     

     

    9. 특정 컬럼만 불러오기

    df["지점명"]

    지점명 컬럼을 불러왔고, 결측치가 많다는 것을 확인할 수 있다.

     

    NaN : Not a Number의 약자. 결측치를 의미한다.

     

     

    .tolist()

    drop_columns = df_null_count_top["컬럼명"].tolist()
    drop_columns

    "컬럼명"의 컬럼만 가져와 list형식으로 만들고, drop_columns라는 변수로 지정한다.

    tolist의 기능은 값들을 리스트 형식으로 만들어준다는 것이다. 출력해보면 아래와 같다.

     

     

    10. 제거하기

    print(df.shape)
    df = df.drop(drop_columns, axis = 1)
    print(df.shape)

     

    drop_columns에 지정한 컬럼들을 버리기 전 shape과 

    버리고 난 후의 shape의 차이.

    10개의 컬럼이 없어졌다.

    df.info()

     

     

    결측치들을 찾아내고, 결측치가 많은 컬럼들을 순서대로 모아서 10개의 컬럼들을 제거했다.

    처음 데이터와 비교했을 때 7MB 정도의 용량 차이가 난다.

    결측치가 있게 되면 값을 비교하고, 어떤 가설을 세우고, 그 결과를 뽑아내기가 어렵기 떄문에 제거하는 게 아닐까 싶다.

Designed by Tistory.