코드스테이츠 AI 부트캠프/Section 1

AIB_111_복습정리 : EDA, 데이터 전처리

yourhm 2021. 9. 15. 16:08

데이터 불러오기

1) Data Description을 통해 데이터셋에 대한 정보를 먼저 파악한다.

  • 행과 열의 수
  • 열에 헤더(컬럼이름)가 있는지
  • 결측 데이터가 있는지
  • 원본 데이터 형태를 확인하기(내가 기대하던 형태가 아닐 수도 있다.)

 

2) 데이터셋을 불러온다.

방법(1) 로컬에 저장된 파일 불러오기

from google.colab import files
uploaded = files.upload()

colab은 구글 드라이브를 파일 시스템으로 사용하기 때문에 로컬 파일 경로를 직접 사용할 수는 없다. 구글 드라이브에 파일을 업로드하여 불러올 수 있다.

 

 

방법(2) URL을 통해서 불러오기

csv, excel 파일 불러오기 

aa = 'https://aa.com/aa.csv'
bb = 'https://bb.com/bb.xlsx'

import pandas as pd
df_csv = pd.read_csv(aa)
df_exl = pd.read_excel(bb)

 

시트가 여러개인 데이터셋일 때 특정 시트만 불러오기

csv_df = pd.read_csv(aa_url, sheet_name='seoul')  # 시트명이 seoul인 시트만 불러오기

 

지정한 행까지 건너뛰고 그 다음 행부터 데이터를 불러오기: skiprows = n

import pandas as pd

df = pd.read_excel(data_url, sep = '\t', skiprows = 1)
df = pd.read_csv(data_url, sep = '\t', skiprows = 1)

예를 들어 skiprows = 1 이면 첫번째 줄은 스킵하고 다음 줄부터 데이터를 불러온다. 첫번째 줄에 colomn name이 적혀있었다면 아마 사라질 것이다.

 

 

[참고] 판다스 공식 문서에서 파라미터 추가 공부하기

https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html

 

 

 

EDA (Exploratory Data Analysis)

대부분의 Raw Data를 바로 분석에 사용하기에는 어렵다. 항상 기억해야할 것. Garbage In Garbage Out ! 그렇기 때문에 본격적인 분석에 앞서 사전에 EDA(탐색적 데이터 분석)를 진행하여 데이터를 확인한 후, 이를 바탕으로 전처리하는 과정에 필요하다.

 

EDA란 데이터 분석에 있어서 매우 중요한 초기 분석의 단계를 의미한다. 시각화 도구나 통계를 통해서 데이터의 패턴이나 데이터의 특이성을 발견하는 등 데이터의 분포를 확인할 수도 있고, 변수들 사이에 관계를 파악할 수도 있고, 가설검정하는 과정도 EDA에 포함될 수 있다.

 

- Graphic: 차트/그림 등을 이용하여 데이터를 확인

- Non-Graphic: 주로 요약 통계를 통해 데이터를 확인

 

 

 

데이터 전처리 (Data Processing)

EDA 및 데이터 전처리에 필요한 Pandas 기초

Missing Data Data Frame Visual
  • isna
  • isnull
  • notna
  • notnull
  • dropna
  • fillna
  • index
  • columns
  • dtypes
  • info
  • select_dtypes
  • loc
  • iloc
  • insert
  • head
  • tail
  • apply
  • aggregate
  • drop
  • rename
  • replace
  • nsmallest
  • nlargest
  • sort_values
  • sort_index
  • value_counts
  • describe
  • shape
  • plot
  • plot.area
  • plot.bar
  • plot.barh
  • plot.box
  • plot.density
  • plot.hexbin
  • plot.hist
  • plot.kde
  • plot.line
  • plot.pie
  • plot.scatter

 

 

 


파이썬 코딩 연습하기💬

 

🔽 데이터프레임의 행과 열 위치 바꾸기: dataframe.transpose()

data_url='https://~~~.com/fruit.xlsx'

import pandas as pd
df = pd.read_excel(data_url, sheet name='apple')
df = df.transpose()

 

 

🔽 첫번째 행을 컬럼으로 대체 설정하기

new_header = df.iloc[0]  # step1
df = df[1:]              # step2
df.columns = new_header  # step3

STEP 1. index 0번행 즉 첫번째 행을 헤더로 쓰기위해 해당 행만 선택한 후, 새로운 변수 할당

STEP 2. index 1번행부터 끝행까지만 df 로 업데이트

STEP 3. df.columns 을 이용하여 맨위에서 변수로 할당 했던 index 0번행을 헤더로 세팅

 

 

[참고] https://stackoverflow.com/questions/31328861/python-pandas-replacing-header-with-top-row

 

 

🔽 데이터프레임의 Dimension(차원) 확인하기

df.ndim          # 몇차원인지 반환
df.shape         # 몇행,몇열인지 반환
df.size          # 전체 원소의 갯수 반환

len(df)          # 첫번째 차원의 갯수(행 갯수) 반환
len(df.columns)  # 열 갯수 반환

<numpy, ndarray객체의 메서드>

 df.shape

 df.ndim

 df.size

 

<파이썬 내장함수>

 len(객체) : 파이썬 기본 리스트나 문자열에서도 사용가능

 

 

🔽 결측값 확인하기, 대체하기

df.isna().sum()    # 각 column 별 결측값 갯수 출력
df.isnull().sum()

df.fillna(0)       # 결측값을 0으로 채우기

 

 

🔽 특정 컬럼의 값만 bar plot으로 시각화하기

import matplotlib.pyplot as plt
plt.rc("font", family='NanumBarunGothic')

import matplotlib as mpl
mpl.rc('axes', unicode_minus=False)

df['unnamed'].plot.bar();

 

 

※ [오류해결] colab에서 한글이 깨져보일때 해결 방법

colab 시각화도구 한글화 패치하기

!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')

 

 

🔽 데이터프레임 요약통계 구하기: pandas의 describe( ) 함수

DataFrame.describe(percentiles=None,
                   include=None,
                   exclude=None,
                   datetime_is_numeric=False)

<파라미터>

• percentiles: 출력에 포함할 백분위 수. 0 ~ 1 입력. 기본값은 25, 50, 75번째 백분위 수를 반환하는[.25, .5, .75]

 include: 출력에 포함할 데이터 유형. 세 가지 옵션이 있다.
     - all: 입력의 모든 열이 출력에 포함.
     - None: 결과에 모든 숫자 열이 포함.

     - 사용자 지정: 사용자가 지정한 데이터 유형에 대해서만 포함. 리스트 형식으로 작성필요.

 exclude: 출력에서 제외 할 데이터 유형. 두 가지 옵션이 있다.
     - None: 결과에서 아무것도 제외하지 않습니다.

     - 사용자 지정: 사용자가 지정한 데이터 유형을 결과에서 제외. 리스트 형식으로 작성필요.

 datetime_is_numeric: datetime 데이터 유형을 숫자로 처리할지 여부.  Boolean 매개 변수.

 

 

 

🔽 특정 컬럼에서 0보다 큰 값인 셀 개수, 작은 값 셀 개수 구하기

# 'aaa' 라는 특정 컬럼에 대해서라고 한다면

num1 = df1.aaa[df1['aaa']>0].value_counts().sum() + df2.aaa[df2['aaa']>0].value_counts().sum()
num2 = df1.aaa[df1['aaa']<0].value_counts().sum() + df2.aaa[df2['aaa']<0].value_counts().sum()

 

 

🔽 데이터프레임을 csv로 내보내기 (How to export)

 

코랩은 구글 드라이브 기반이기 때문에 로컬과 연동되지 않는다.

따라서 아래와 같이 코드를 실행한 후에, 코랩 왼쪽 폴더 모양 아이콘 클릭하면 해당 이름으로 저장되어 있음을 확인할 수 있다.

# format
df.to_csv('저장할경로\\저장할이름.csv')

# example
df.to_csv('C:\\abc\\df.csv')
df.to_csv("./df.csv", index = True)  # index = True : 행의 인덱스까지 같이 내보낸다.

 

 

🔽 여러 변수에 대해서 cross-tab을 실행하기

import seaborn as sns
df_pp = sns.load_dataset('penguins')

#변수 2개 테이블
pp2 = pd.crosstab(df_pp.species, df_pp.sex)

# 변수 3개 테이블 (참고)
pp3 = pd.crosstab([df_pp.species, df_pp.sex], df_pp.abcde,  margins=True)