2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 14일차

mingdoremi 2025. 5. 29. 20:26

안녕하세요! 오늘은 본캠프 14일차입니다!!!!

오늘은 사전투표 첫날이라 아침에 투표도 하고 왔어요! 🗳️

 

오늘은 데이터 전처리 & 시각화 3주차 강의를 들었습니다!

 

01. Pandas 알아보기

 

1) Pandas 알아보기

- import 명령어를 통해서 pandas 라이브러리를 불러오기

import pandas as pd 

- 오픈소스 데이터 셋을 불러오기

import seaborn as sns
# seaborn은 데이터를 시각화 하는 라이브러리 중 하나!

# 에러날 경우 !pip install seaborn #실행

data = sns.load_dataset('tips')
# tips라는 이름의 데이터 셋을 불러와서 data 변수에 저장

data
# 데이터 출력

 

저는 맥북이라 데이터를 불러오는 과정에서 계속 url오류가 작동해서 seaborn에서 파일을 다운받아서 했어요..!

 

2) 데이터 불러오기

Tip 파일 경로 찾는 방법

  • Window
    1. 파일 탐색기(File Explorer)를 사용하여 파일 경로 찾기:
    2. 파일 탐색기를 열고 원하는 파일 또는 폴더를 찾은 후, 주소 표시줄(Address Bar)에 파일 경로가 표시됩니다. 이 경로를 복사하여 사용하거나, 마우스 오른쪽 버튼을 클릭하고 "속성(Properties)"을 선택하면 파일 또는 폴더의 속성 창에서 경로를 확인할 수 있습니다.
    3. 명령 프롬프트(Command Prompt)를 사용하여 파일 경로 찾기:
    4. 명령 프롬프트(cmd)를 열고, cd 명령어를 사용하여 원하는 디렉토리로 이동합니다. 그리고 pwd 명령어를 입력하면 현재 디렉토리의 경로를 확인할 수 있습니다.
  • Mac
    1. Finder를 사용하여 파일 경로 찾기:
    2. Finder를 열고, 원하는 파일 또는 폴더를 찾은 후, 상단의 경로 표시줄(Address Bar)에 파일 경로가 표시됩니다. 이 경로를 복사하여 사용하거나, 파일 또는 폴더를 선택한 후 마우스 오른쪽 버튼을 클릭하여 "정보 보기(Get Info)"를 선택하면 파일 또는 폴더의 경로를 확인할 수 있습니다.
    3. 터미널(Terminal)을 사용하여 파일 경로 찾기:
    4. 터미널을 열고, pwd 명령어를 입력하면 현재 작업 디렉토리의 경로를 확인할 수 있습니다.
  • 엑셀/CSV 데이터 불러오기

# pd.read_excel('파일경로/파일명.확장자')

# 엑셀 불러오기
pd.read_excel('./파일명.xlsx') # ./ ==> 현재 내가 있는 위치라는 의미

# csv 파일 불러오기
pd.read_csv('./파일명.xlsx')

 

3) 데이터 저장하기

  • pd.to_csv(’파일경로/파일명.확장자’ , index = False)
  • pd.to_excel(’파일경로/파일명.확장자’ , index = False)

4) 인덱스

  • 인덱스 : 데이터프레임(DataFrame) 또는 시리즈(Series)의 각 행 또는 각 요소에 대한 식별자입니다.
    • DataFrame 자료구조에도 인덱스를 설정할 수 있음
    • 0부터 시작하는 숫자 뿐아니라 임의로 문자로 적용할 수 있음
    • 아예 처음부터 파일 불러올때 , 인덱스를 지정하는 것도 가능
  • 인덱스의 특징
    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): 인덱스를 기준으로 데이터프레임 또는 시리즈의 행을 정렬할 수 있습니다.
  • 인덱스 활용하기 (set_index)
    • set_index() → 특정 컬럼에 들어있는 값을 인덱스로 활용하기
    • # df가 가지고 있는 특정 컬럼명을 기준으로 인덱스를 설정하기
      data = df.set_index('컬럼명')
      data.head()

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

02. 데이터 전처리 - 컬럼

1) 컬럼(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['성별'])  # '성별' 컬럼 출력
  • 컬럼명 변경하기
    • pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])

03. 데이터 전처리 - 데이터 확인

1) 데이터 확인

.head()

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

.Info()

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

.describe()

data.describe()
# 숫자값에 대해서만 기초통계량 확인이 가능합니다.

  • 데이터의 결측치(null)가 있는지?
    • 결측치 제거하는 방법
    • # 결측치 확인 : isnull()
      df.isnull().sum() # 이렇게하면 결측치가 몇개있는지도 알 수 있어요 !

      # 결측치 제거 : dropna()
      df.dropna()
  • 데이터 중복 데이터는 없는지?
    • 중복 데이터 제거하는 방법
    • # 중복 데이터 확인
      df.duplicated(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)]
  • 데이터 타입을 알맞게 들어가있는지? ex) 날짜, 숫자
    • # 데이터 타입 변경을 원한다면 ! 
      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)

2) 데이터 타입 변경

04. 데이터 전처리 - 데이터 선택

1) lioc, loc

iloc은 정수 기반의 인덱스를 사용하고, loc은 레이블 기반의 인덱스를 사용합니다

.iloc[로우,컬럼] : 인덱스 번호로 선택하기

행번호(로우)와 열번호(컬럼)를 통해 특정 행과 열 데이터를 선택할 수 있습니다.

data.iloc[0,2]
#행과 열 번호를 통해 특정 데이터를 선택할 수 있음

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)

# iloc을 사용하여 특정 행과 열 선택
selected_data = df.iloc[1:4, 0:2]  # 인덱스 1부터 3까지의 행과 0부터 1까지의 열 선택
print(selected_data)

 

.loc[로우,컬럼] : 이름으로 선택하기

인덱스가 번호가 아니고 특정 문자일 경우

data.loc['행이름' , '컬럼명']
# 행이름과 컬럼명을 통해서도 특정 데이터를 선택할 수 있음

import pandas as pd

# 샘플 데이터프레임 생성
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])

# loc을 사용하여 특정 행과 열 선택
selected_data = df.loc['b':'d', 'A':'B']  # 레이블 'b'부터 'd'까지의 행과 'A'부터 'B'까지의 열 선택
print(selected_data)

 

05. 데이터 전처리 - 불리언 인덱싱

  • Boolean Indexing이란?
    • 조건을 이용하여 데이터프레임에서 특정 조건을 만족하는 행을 선택하는 방법
    • 데이터를 필터링하거나 원하는 조건을 만족하는 행을 추출할 수 있음
    • 주로 불리언(Boolean) 값을 가지는 조건식을 사용하여 데이터프레임을 인덱싱하는 방법
      • 조건식에 따라 각 행이 True 또는 **False**로 평가되며 이를 바탕으로 데이터프레임을 필터링

💡 Boolean Indexing 사용 방법

  1. 단일 조건으로 필터링:
    • 특정 열의 값을 기준으로 조건을 설정하여 해당 조건을 만족하는 행을 선택합니다.
    • # 'age' 열에서 30세 이상인 행 필터링
      df[df['age'] >= 30]
  2. 여러 조건으로 필터링:
    • 여러 개의 조건을 조합하여 복합적인 필터링을 수행할 수 있습니다.
    • # 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링
      df[(df['age'] >= 30) & (df['gender'] == 'Male')]
  3. 조건에 따른 특정 컬럼 필터링:
    • 조건을 만족하는 특정 열만 선택할 수 있습니다.
    • # 'age' 열에서 30세 이상인 경우의 'name' 열만 선택
      df.loc[df['age'] >= 30, 'name']
  4. isin()을 활용한 필터링:
    • 리스트를 활용하여 여러 값들을 포함하는 행을 선택할 수 있습니다.
    • # 'gender' 열에서 'Male' 또는 'Female'인 행 필터링
      df[df['gender'].isin(['Male', 'Female'])]

06. 데이터 전처리 - 데이터 병합

1) concat

데이터를 위아래로 합쳐봅시다

  • concat()함수는 데이터프레임을 위아래로 혹은 좌우로 연결할 수 있어요 !
    • axis: 연결하고자 하는 축(방향)을 지정합니다. 기본값은 0으로, 위아래로 연결하는 경우에 해당합니다. 1로 설정하면 좌우로 연결합니다.
    • ignore_index: 기본값은 False이며, 연결된 결과 데이터프레임의 인덱스를 유지합니다. True로 설정하면 새로운 인덱스를 생성합니다. (True → 기존 인덱스를 무시하고 새롭게 인덱스를 설정)

2) merge

데이터를 좌우로 합쳐봅시다

  • SQL의 JOIN 연산과 유사한 방식으로 데이터프레임을 합칠 수 있습니다. 주로 두 개 이상의 데이터프레임에서 공통된 열이나 인덱스를 기준으로 데이터를 병합할 때 활용됩니다.
  • merge() 함수의 주요 매개변수는 다음과 같습니다:
    • left와 right: 병합할 데이터프레임 중 병합되는 기준이 되는 왼쪽(left)과 오른쪽(right) 데이터프레임입니다.
    • how: 병합 방법을 나타내는 매개변수로, 'inner', 'outer', 'left', 'right' 등의 옵션이 있습니다.
      • 'inner': 공통된 키(열)를 기준으로 교집합을 만듭니다.
      • 'outer': 공통된 키를 기준으로 합집합을 만듭니다.
      • 'left': 왼쪽 데이터프레임의 모든 행을 포함하고 오른쪽 데이터프레임은 공통된 키에 해당하는 행만 포함합니다.
      • 'right': 오른쪽 데이터프레임의 모든 행을 포함하고 왼쪽 데이터프레임은 공통된 키에 해당하는 행만 포함합니다.
    • on: 병합 기준이 되는 열 이름(혹은 열 이름의 리스트)을 지정합니다.
      • left_on과 right_on: 왼쪽 데이터프레임과 오른쪽 데이터프레임에서 병합할 열 이름이 다른 경우에 사용합니다.

07. 데이터 전처리 - 데이터 집계

1) Group by

  • Group by 함수는 데이터프레임을 그룹화하고, 그룹 단위로 데이터를 분할(split), 적용(apply), 결합(combine)하는 기능을 제공합니다
  • 데이터프레임을 특정 기준에 따라 그룹으로 나누어 집계, 변환, 필터링 등을 할 수 있습니다.
    1. 그룹 생성: 기준 열(혹은 열들)을 지정하여 데이터프레임을 그룹으로 나눕니다.
    2. 그룹에 대한 연산 수행: 그룹 단위로 원하는 연산(평균, 합, 개수 등)을 수행합니다.
    3. 결과 결합: 각 그룹의 연산 결과를 하나의 데이터프레임으로 결합하여 새로운 데이터프레임을 생성합니다.

2) Pivot Table

Pivot Table()

  • pivot_table() 함수는 데이터프레임에서 피벗 테이블을 생성하는 데 사용됩니다.
  • 주어진 데이터를 사용자가 원하는 형태로 재배치하여 요약된 정보를 보기 쉽게 제공합니다.

08. 데이터 전처리 - 데이터 정렬

1) 데이터 정렬하기

  • sort_values() 함수:
    • 컬럼 기준으로 정렬시켜보자
    • import pandas as pd

      # 샘플 데이터프레임 생성
      data = {
          'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
          'Age': [25, 22, 30, 18, 27],
          'Score': [85, 90, 75, 80, 95]
      }
      df = pd.DataFrame(data)

      # 정렬
      sorted_by_score = df.sort_values('Score') # 'Score' 열을 기준으로 오름차순 정렬
      sorted_by_score = df.sort_values('Score',ascending=False) # 'Score' 열을 기준으로 내림차순 정렬

      print(sorted_by_score)
    • sort_index() 함수:
      • 인덱스를 기준으로 정렬시켜보자
      • import pandas as pd

        # 샘플 데이터프레임 생성
        data = {
            'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
            'Age': [25, 22, 30, 18, 27],
            'Score': [85, 90, 75, 80, 95]
        }
        df = pd.DataFrame(data)

        # 정렬
        sorted_by_index = df.sort_index() # 인덱스를 기준으로 오름차순 정렬
        sorted_by_index = df.sort_index(ascending=False) # 인덱스를 기준으로 내림차순 정렬
        print(sorted_by_index)

 

오늘도 끝이 났습니다~!~! 내일은 금요일!! 하루만 더 하면 주말입니당!!!!

굉장히 어렵네용 큐큐 😭    오늘도 수고하셨습니다~!~!~!