Python/빅데이터 분석과 머신러닝

#6 데이터 탐색

sundori 2024. 7. 14. 21:04

목차

    1.데이터 그룹 분석

    특정 조건에 맞는 데이터가 하나 이상의 데이터 그룹을 이루는 경우에는 집단의 특성을 보여주는 그룹 분석을 자주 사용한다.

     

    그룹 분석

    1. 범주형 기준에 따라 그룹으로 데이터를 분할한다.(Splitting) - 반별 그룹
    2. 각 그룹에 독립적으로 함수 적용. (Applying) - 반별 평균
    3. 결과물을 하나의 데이터 구조로 결합(Combining) - 반별 평균 결합

     

    집계 함수 사용

    그룹 분석에서 groupby 함수는 데이터를 그룹별로 분류하는 역할을 하고 연산 결과로 그룹 데이터를 나타내는 groupby 클래스 객체를 반환합니다. 이 객체에는 그룹별로 연산을 할 수 있는 메서드가 있다.

    그룹 A, B, C
    그룹별 평균값 확인
    반별, 성별 그룹별 평균값 확인
    반별 수학 평균, 수학 개수
    성별 수학 평균

    2.데이터 재구조화

    분석 과정에서 원본 데이터 구조가 분석 기업에 맞지 않아 행과 열의 위치를 바꾼다거나, 특정 요인에 따라 집계해서 구조를 바꿔야 하는 경우가 자주 발생하는데 이를 재구조화(Reshaping)라고 한다.

    함수  
    pd.cut(), pd.qcut() 데이터 구간화
    pd.get_dummies 원-핫인코딩
    T 데이터 전치
    pivot(), pd.pivot_table() 피봇 테이블
    melt() 열, 행 전환
    stack(), unstack() 행, 열 인덱스 전환

    # 데이터 구간화

    밑에 사진을 보면 연속형 변수를 범주형 변수로 만드는 것을 구간화(Data Binning)이라고 한다.

    예를들어 나이 데이터가 각 사람들의 나이가 연속형으로 나열되어있는 경우 이를 10~19세, 20~29세 처럼 변경하는 방법으로 범주형 변수로 변환하는 것이다. 데이터 구간화에는 특별이 정해져있는 방식이나 원칙이 없기 때문에 마음대로 창의적으로 작성해도된다.

    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib import rc 
    rc('font', family='AppleGothic')
    plt.rcParams['axes.unicode_minus'] = False
    
    # 예시 데이터 생성
    data = {
        'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Henry', 'Ivy', 'Jack'],
        'Age': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70]
    }
    
    # 데이터프레임 생성
    df = pd.DataFrame(data)
    
    # 막대 그래프를 위한 원본 데이터
    plt.figure(figsize=(12, 6))
    plt.subplot(1, 2, 1)
    df['Age'].plot(kind='bar', color='lightcoral')
    plt.title('원본 데이터 (나이)')
    plt.xlabel('사람')
    plt.ylabel('나이')
    plt.xticks(range(len(df)), df['Name'], rotation=45)
    plt.grid(axis='y', linestyle='--', alpha=0.7)
    
    # 나이를 구간으로 나누기 위한 구간 정의
    bins = [20, 30, 40, 50, 60, 70]
    
    # 구간에 대한 레이블 정의
    labels = ['20-29', '30-39', '40-49', '50-59', '60-69']
    
    # 나이 데이터를 구간화하여 새로운 열로 추가
    df['Age Group'] = pd.cut(df['Age'], bins=bins, labels=labels, right=False)
    
    # 막대 그래프를 위한 구간화된 데이터
    plt.subplot(1, 2, 2)
    age_group_counts = df['Age Group'].value_counts().sort_index()
    age_group_counts.plot(kind='bar', color='skyblue')
    plt.title('구간화 후')
    plt.xlabel('나이 구간')
    plt.ylabel('인원 수')
    plt.xticks(rotation=0)
    plt.grid(axis='y', linestyle='--', alpha=0.7)
    
    # 그래프 출력
    plt.tight_layout()
    plt.show()

    데이터 구간화의 예


    # 원-핫인코딩

    머신러닝 알고리즘은 수치 데이터를 중심으로 전처리가 필요하다. 따라서 기계가 이해할 수 있는 형태로의 변환이 필요한데 이때 범주형 데이터를 원-핫인코딩 형태로 변환한다.

    원-핫인코딩이란 해당되는 하나의 데이터만 1(True)로 변경하고 나머지는 0(False/더미값)으로 변경하는 과정을 말한다.

     

    # 데이터 전치

    데이터프레임 행과 열의 기준(축)을 바꾸는 방법을 말하는데, 수학 선형대수에서 '전치행렬'이라는 특수한 행렬이 있는데 이 행렬의 내적(inner product)를 구할 때  aT ᵃ처럼 전치행렬과 원래 행렬을 곱할 때 전치행렬(aT)를 사용한다.

    전치 데이터

    # 피봇 테이블

    많은 양의 데이터에서 필요한 자료만을 뽑아 새롭게 데이터를 재구성하는 기능을 말하는데.. 피봇 테이블을 활용하면 사용자가 원하는 대로 데이터를 정렬하고 필터링할 수 있다.

    # 멜트

    열을 행으로 변경하는 재구조화 과정을 말하는데, 멜트의 뜻 그대로 녹아서 흐르다로 이해하면된다.

    데이터프레임에서는 열이 행으로 흘러 열이 짧아지고 행이 길어진다고 이해하자.

    # Stack/Unstack

    행 인덱스와 열 인덱스를 교환할 때 사용하는 기능인데... stack명령어의 경우 열이 행으로 변하는데, 열 인덱스가 반시계 방향으로 90도 회전한 것처럼 보인다.

    언스택은 행 인덱스가 열로 변환하는데 행 인덱스가 시계 방향으로 90도 회전한 것과 같다.

    'Python > 빅데이터 분석과 머신러닝' 카테고리의 다른 글

    #7 데이터 시각화  (2) 2024.07.18
    #4 데이터 보기(판다스)  (0) 2024.07.17
    #5 데이터 클렌징  (1) 2024.07.14
    #3 데이터 준비  (1) 2024.07.05
    #2 파이썬 데이터  (1) 2024.07.03