DATA PREPROCESSING #1

codataffee·2024년 5월 9일
0

DATA

목록 보기
7/22
post-thumbnail

개요


📌 데이터 전처리

데이터의 목적? = 설득

  • 데이터의 목적은 결국 설득하는 것 !
    • 설득하기 위해 데이터를 잘 전달해야 하고,
      잘 전달하기 위해서 데이터를 통해 무엇을 해야할 지 고민해야 한다!

  • 데이터 전처리 (DATA PREPROCESSING) :
    내가 원하는 데이터를 보기 위해 하는 모든 활동

📌 WHY?

데이터 전처리를 해야하는 이유?

  • 실제 데이터는 원하는 형태로 구축되어 있지 않다!
    데이터 분석에 용이한 형태로 데이터를 하나하나 가공해서 활용해야 함.

📌 HOW?

데이터 전처리를 할 때는 꼭 방향성을 가지고 할 것!

  • 데이터를 통해 무엇을 확인할 것인가?

  • 어떤 의사결정을 위해 데이터가 필요한 것인가?

  • 데이터를 통해 달성할 목적을 정하고 목적을 위한 데이터 전처리를 하자 !


📌 데이터 다루기

Excel vs Pandas

  1. 자동화와 프로그래밍 기능 :
  • Pandas
    다양한 라이브러리를 사용해 데이터 추출, 변환, 분석 가능
    반복적이고 복잡한 작업 자동화 가능
  • 엑셀
    시각적 사용자 인터페이스를 통해 데이터를 다루는 스프레드시트 프로그램
    작업은 주로 수동으로 수행, 고급 기능을 프로그래밍적으로 확장하기 어려움
  1. 대용량 데이터 처리 :
  • Pandas
    대용량 데이터 처리에 유용
    메모리 내 데이터 처리, 큰 데이터 세트 조각 분할 처리 기능 제공
  • 엑셀
    상대적으로 작은 크기의 데이터셋을 다루는 데 적합
    매우 큰 데이터를 처리할 경우 처리 속도 저하 및 파일 크기 제한 등의 제약
  1. 복잡한 데이터 처리 및 분석 :
  • Pandas
    데이터 분석 및 처리를 위한 다양한 도구와 라이브러리 활용 가능
    데이터를 다양하게 조작, 분석해 복잡한 데이터 작업, 통계 분석, 머신러닝 모델 구축 등 가능
  • 엑셀
    기본적인 수식과 함수를 통해 데이터 처리 및 시각화 가능
    복잡한 데이터 조작, 분석 제한
  1. 확장성과 유연성 :
  • Python
    다양한 데이터 포맷을 처리할 수 있는 라이브러리 지원
    데이터베이스와 연동하여 작업할 수 있는 등 매우 유연
  • 엑셀
    주로 특정 데이터 형식의 파일 (.xlsx, .csv 등)을 다루기만 가능
  1. 버전 관리 및 자동화 :
  • Python
    버전 관리 시스템(Git 등)을 사용하여 변경 내역 관리, 코드 자체 주석 추가 또는 문서화 가능,
    작업 히스토리 추적 용이
  • 엑셀
    사용자가 직접 수정해 변경 사항 추적이나 문서화가 어려움

Pandas는 대규모 데이터셋 및 복잡한 작업을 처리하는 데 효과적,
자동화와 프로그래밍 기능을 통해 더 많은 유연성과 확장성을 제공

엑셀은 상대적으로 작은 규모의 데이터나 간단한 작업에 유용,
비전문가가 쉽게 사용할 수 있는 직관적인 인터페이스를 제공


📌 Pandas

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

  • index : 각 아이템을 특정할 수 있는 고유의 값 (엑셀의 좌측 열 순서)
  • Series = 하나의 속성을 가진 데이터 집합 (= DataFrame 표에서 1줄의 열)
    • = value + index

  • DataFrame = 표 형태
  • columns : 하나의 속성을 가진 데이터 집합 (열)
  • row : 인덱스에 포함되는 데이터 집합 (행)
  • Pandas 불러오기
    • import 명령어를 통해 Pandas 라이브러리를 불러오기
    import pandas as pd 
    # pandas 라이브러리를 불러올 것이며, 이제부터 pandas를 pd 로 별칭 부여
    # 설치 : !pip install pandas  #판다스 미설치 시 오류 발생

📌 데이터 불러오기

  • 데이터 불러오기

  • 엑셀 / CSV 파일 ; 데이터 불러오기

    # pd.read_excel('파일경로/파일명.확장자')
    
    # 엑셀 불러오기
    # ./ ==> 현재 내가 있는 위치라는 의미
    pd.read_excel('./파일명.xlsx') 
    
    # csv 파일 불러오기
    pd.read_csv('./파일명.xlsx')
  • 파일이 깨져서 불러와질 때!

    Pandas에서 파일을 불러올 때 파일의 텍스트 데이터를 읽어오는 과정에서
    파일의 인코딩 방식을 정확히 지정해야 올바르게 데이터를 읽어올 수 있음

    • 모두가 하나의 인코딩을 사용하면 괜찮지만,
      한글만 하더라도 대표적으로 Microsoft사에서 만든 cp949/ms949 인코딩, 
      euc-kr인코딩, utf-8 인코딩 등 수많은 인코딩이 존재
    • 즉, 모든 인코딩이 동일하지 않기 때문에 만약 파일이 cp949로 인코딩 되어 있을 때
      이 파일을 utf-8인코딩 방식으로 읽어오면, 잘못된 Byte 변환으로 깨짐 현상 발생
      import pandas as pd
      # UTF-8 인코딩으로 파일 불러오기
      data = pd.read_csv('file.csv', encoding='utf-8')
      # ASCII 인코딩으로 파일 불러오기
      data = pd.read_csv('file.csv', encoding='ascii')

📌 데이터 저장하기

  • 데이터 저장하기

    • pd.to_csv(’파일경로/파일명.확장자’ , index = False)
    • pd.to_excel(’파일경로/파일명.확장자’ , index = False)
    df = 데이터프레임 # 저장하고 싶은 데이터 
    
    df.to_csv('./newfile.csv', index = False)

📌 오류 발생

엑셀파일(xlsx) 읽기나 저장 실행 시 오류 :
No module named 'openpyxl'

  • 엑셀파일을 읽는 openpyxl 모듈의 미설치로 오류 발생

  • 해결방법 :
    pip install openpyxl 후 재실행


📌 인덱스 (Index)

데이터프레임(DataFrame) 또는 시리즈(Series)의 각 행 또는 각 요소에 대한 식별자

  • 인덱스의 특징
  1. 고유성(Uniqueness): 각 행은 유일한 인덱스 값을 가지며, 중복된 인덱스 값을 가질 수 없음.
  2. 불변성(Immutability): 한 번 생성된 인덱스는 변경(수정)할 수 없음.
    • 단, 새로운 값을 할당하여 기존 인덱스를 대체하는 것은 가능.
      # Pandas에서 사용자가 직접 설정한 인덱스를 변경하는 예시
      
      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)
  3. 조작 및 탐색(Manipulation and Retrieval): 인덱스를 사용해 데이터프레임 또는 시리즈의 특정 행을 선택하거나 탐색할 수 있음.
  4. 정렬(Sorting): 인덱스를 기준으로 데이터프레임 또는 시리즈의 행을 정렬.

.

  • 기본 인덱스

import pandas as pd
# 기본 정수 인덱스를 가진 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
df
  • 사용자 지정 인덱스 : 사용자가 직접 인덱스 설정

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

# 특정 인덱스의 행에 접근
row = df.loc['idx2']
row

# 인덱스를 기준으로 데이터프레임 정렬
sorted_df = df.sort_index()
sorted_df

set_index()

# df가 가지고 있는 특정 컬럼명을 기준으로 인덱스를 설정하기
data = df.set_index('컬럼명')
data.head()

index_col

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

data.index

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

reset_index()

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

📌 컬럼 (Column)

데이터프레임(DataFrame)의 열(또는 변수)

  • 컬럼의 특징
  1. 고유한 이름(라벨)을 가지고 있으며, 해당 컬럼의 데이터를 식별하는 데 사용
  2. 특정한 종류의 데이터를 담고 있고 숫자, 문자열, 날짜 등 다양한 유형의 데이터를 포함할 수 있음
  3. 시리즈(Series) 객체로 구성되어 있으며, 시리즈는 동일한 데이터 유형을 가진 1차원 배열과 유사함
  4. 데이터프레임의 일부로 간주되며, 해당 열의 데이터를 조작하고 접근할 수 있는 인터페이스를 제공함

.

  • 기본 컬럼

import pandas as pd
# 데이터프레임 생성
data = {
    '이름': ['Alice', 'Bob', 'Charlie'],
    '나이': [25, 30, 35],
    '성별': ['여', '남', '남']
}
df = pd.DataFrame(data)
# 각 컬럼 출력
print(df['이름'])  # '이름' 컬럼 출력
print(df['나이'])  # '나이' 컬럼 출력
print(df['성별'])  # '성별' 컬럼 출력
  • 컬럼명 변경

names = [’컬럼명1’ , ‘컬럼명2’ , … , ‘컬럼명 19’]

pd.read_csv('./data/file.csv' , names = [’컬럼명1, ‘컬럼명2,,‘컬럼명 19])
  • 컬럼 확인하기

데이터프레임.column

#컬럼 확인하기
data.column
#리스트 형태를 활용해서 컬럼명을 새롭게 입력할 수 있습니다.
data.column = ['축구', '농구', '배구', '야구']
data

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보