데이터분석 study/데이터 전처리&시각화

TIL_24.07.17_데이터 전처리 1

justdata 2024. 7. 17. 20:57

일단 먼저,

데이터 전처리와 시각화를 배우기 전에,

'무엇을 위해 ~ 이런 형태의 데이터가 필요하다' 라는 것을 

먼저 정의할 필요가 있다. 

 

데이터 전처리

   - 내가 원하는 데이터를 보기 위해 하는 모든 활동 = 데이터 전처리

    ● how?

         - 데이터를 통해 무엇을 확인할 것인지?

         - 어떤 의사결정을 위해 필요한지?

         - 데이터를 통해 무엇을 얻고자 하는지, 그 목적을 달성하기 위해 

            데이터 전처리가 필요하다.

 

▶ pandas

      - 데이터를 조작하고 쉽게 분석할 수 있게 도와주는 라이브러리

 

      - 대용량 데이터 처리가 가능 : pandas는 데이터를 메모리에 로드하고, 

         다양한 연산에 대한 빠른 처리가 가능, 대용량 데이터를 처리하는 데

         최적화

 

      - 데이터 조작 기능 : 데이터 정렬, 필터링, 집계, 결측값 처리 등 데이터를

        쉽게 가공할 수 있음.

 

      - 데이터 시각화 기능 제공 : Matplotlib, Seaborn,...

 

      - 데이터를 구조화하여 분석할 수 있음 : DataFrame이라는 자료형을 제공하여

        데이터를 표 형태로 나타어 분석이 가능함

 

      ●pandas에서 사용되는 대표적인 데이터 오브젝트

 

  

  - DataFrame = 표 형태

     - index : 각 아이템을 특정할 수 있는 고유의 값

     - columns : 하나의 속성을 가진 데이터 집합

 

  - Series = 하나의 속성을 가진 데이터 집합 ( = DataFrame 표에서 열 1줄이

     라고 생각하면 쉽다.)

 

● pandas 불러오기

   

import pandas as pd

     

엑셀/csv 데이터 불러오기

pd.read_excel(',/파일명.xlsx') # './' --> 현재 내가 있는 위치라는 의미

pd.read_csv(',/파일명.csv')

 

 엑셀/csv 데이터 저장하기

df = 데이터프레임 # 저장하고 싶은 데이터

df.to_csv('./newfile.csv', index = False)

 

Index - 사용자가 직접 설정한 인덱스로 변경예시

import pandas as pd

# 사용자가 직접 인덱스를 설정한 데이터 프레임 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3'])

# 인덱스 변경(대체)
df.index = ['new_idx1', 'new_idx2', 'new_idx3']

print(df)

 

   - 인덱스 활용하기(set_index)

    ○ set_index() : 특정 컬럼에 들어있는 값을 인덱스로 활용

   

data = df.set_index('컬럼명')
data.head()


# 불러올때 인덱스 지정하기
pd.read_csv('./data/file.csv' , index_col = '컬럼정보') 
pd.read_csv('./data/file.csv' , index_col = 0) # 0부터 시작

   

  ● 데이터프레임.index : 인덱스를 확인하기

 

#인덱스 확인하기
data.index

#리스트 형태를 활용해서 인덱스를 새로 입력할 수 있습니다.
data.index = ['1번', '2번', '3번']
data

  

● reset_index() : 현재 인덱스를 0부터 시작하는 정수로 변경하기

# reset_index() 의 기본 값은 drop = False 를 가지고 있습니다.
data.reset_index()

# 현재 인덱스를 컬럼으로 변경할 수 있습니다.

# reset_index(drop = True) 명령어를 활용하면,
# 현재 인덱스 값을 컬럼으로 변경하지 않고 인덱스를 초기화할 수 있습니다
data.reset_index(drop = True)

 

 

● 해당 컬럼 값 찾기

 

# 데이터 프레임을 생성했다고 가정하고

df['이름'] # 이름 컬럼 출력
df['나이'] # 나이 컬럼 출력
df['성별'] # 성별 컬럼 출력

 

● 컬럼명 변경하기/데이터프레임.column

pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])

#컬럼 확인하기
data.column

#리스트 형태를 활용해서 컬럼명을 새롭게 입력
data.column = ['축구', '농구', '배구','야구']
data

# 1개 이상의 컬럼명 변경
df = df.rename(columns={'나이': 'age', '성별':'남/여'})
df

 

 

▶데이터 확인 

    ● .head() : 데이터를 N개 행까지 보여줌

     

data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌

 

   ● .info() : 데이터의 정보를 파악 (인덱스, 컬럼명, 컬럼의 데이터 개수, 데이터 타입)

data.info() 
# null 값을 확인할때도 활용

 

   ● .describe() : 데이터의 기초통계량을 확인(개수, 평균, 표준편차, 사분위, 중앙값)

          **숫자값에 대해서만 기초통계량 확인 가능

 

 

● 데이터를 불러온 다음 꼭 확인해야 하는 것

    ○ 데이터의 결측치(null)가 있는지?

          - 결측치 제거하는 방법

#결측치 확인
df.isnull()

#boolean 형태로 null 값 확인(null 값은 True로 표시된다.)
df.isna()

#위 코드로 null 값의 column을 확인하고 
#아래 코드로 다시 확인하면 자세하게 결측치 값 정보 확인
df[df['B'].isna()]

#이렇게 하면 결측치가 몇 개 있는지도 알 수 있다.
df.isnull().sum()

#결측치 제거 : dropna()
df.dropna()

 

  ○ 중복데이터 확인 - 중복 데이터 제거 

# 중복 데이터 확인
df.duplicate(subset = ['컬럼1', '컬럼2', '컬럼3'])

# 중복 데이터 제거
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])

 

   ○ 데이터 이상치 확인/처리  - 이상치 처리하는 방법

# IQR (Interquartile Range) 방법 찾아보기
# 참고 : https://www.scribbr.com/statistics/interquartile-range/

# IQR 계산
Q1 = df['컬럼1'].quantile(0.25)
Q3 = df['컬럼1'].quantile(0.75)
IQR = Q3 - Q1

# 이상치 기준 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 이상치 제거
df[(df['컬럼1'] >= lower_bound) & (df['컬럼1'] <= upper_bound)]

    

○ 데이터 타입이 알맞게 들어가 있는지 확인

# 데이터 타입 변경을 원한다면 ! 
df['column_name'].astype(int)
df['column_name'].astype(float)
df['column_name'].astype(str)
df['column_name'].astype(bool)
df['column_name'].astype('category')
df['column_name'].astype('datetime64[ns]')
df['column_name'].astype(complex)
df['column_name'].astype(object)