ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pandas 함수를 활용한 기초 데이터 분석 # EDA
    카테고리 없음 2024. 2. 4. 17:56

    데이터 탐색 및 분석(EDA : Exploratory Data Analysis)는 데이터셋의 특성을 이해하고 관련된 통계 및 시각화 기법을 사용하여 데이터의 패턴 및 관계를 발견하는 과정이다.

    데이터 EDA를 수행하는 일반적인 단계와 사용할 수 있는 도구 및 기술에 대해 알아보자.

     

    1. 데이터 불러오기:

    Pandas 라이브러리를 사용하여 데이터를 불러온다.

     

     

    불러온 데이터 프레임을 확인한다.

     

    만일 칼럼의 수가 너무 많아 생략된다면 DataFrame option을 사용한다.

     

    2. 기본 정보 확인 :

    데이터 프레임의 기본 정보를 확인한다.

     

    데이터 프레임의 평균은 df.mean(), 표준 편차는 df.std()함수를 통해 확인 할 수 있다.

     

     

    3. 결측치 처리:

    결측치를 확인하고 필요한 경우 처리한다.

    데이터 내에 null값을 확인하기 위해 isnull()함수를 사용하면, True/False 형태로 확인할 수 있다.

    그러나 데이터 프레임 형태로는 직관적인 확인이 어렵다.

     

     

    칼럼별로 null값을 확인하고 싶다면 isnull().sum()으로 isnull() 함수 뒤에 sum()함수를 붙여 준다.

    전체 null값을 확인하고 싶다면 sum()함수를 한 개 더 붙여준다.

     

    만일 결측치를 삭제하고자 한다면, dropna()함수를 사용한다.

    - 결측치가 있는 행 삭제 : df_cleaned = df.dropna()

    - 결측치가 있는 열 삭제(axis = 1 사용) : df_cleaned = df.dropna(axis = 1)

     

    결측치를 삭제하는 것이 아니라 fillna() 함수를 사용해 대체하는 방법도 존재한다.

    - 각 열의 평균값으로 결측치 대체 : df_filled = df.fillna(df.mean())

    - 각 열의 중앙값으로 결측치 대체 : df_filled = df.fillna(df.median())

    - 각 열의 최빈값으로 결측치 대체 : df_filled = df.fillna(df.mode().iloc[0])

     

    사용자가 대체할 값을 선택할 수도 있다.

    - 결측치를 0으로 대체 : df_filled = df.fillna(0)

    - 결측치를 사용자가 지정한 값으로 대체: df_filled = df.fillna(value =custom_value)

     

    결측치를 해당 열의 이전 값또는 다음으로 대체하고자 한다면 fillna()함수의 method 매개변수를 사용한다.

    - 이전 값으로 결측치 대체 : df_filled = df.fillna(method='ffill')

    - 다음 값으로 결측치 대체 : df_filled = df.fillna(method='bfill')

     

    결측치를 선형 보간을 사용하여 추정값으로 대체할 수도 있다.

    - 선형보간으로 결측치 대체 : df_filled = df.interpolate()

     

     

    4. 통계적 요약 통계량 확인:

    데이터의 통계적인 특성을 확인한다.

     

     

     

     

    5. 시각화:

    Matplotlib, Seaborn, Plotly 등을 사용해 데이터를 시각화한다.

     

     

    'hist'로 막대 그래프로 칼럼 시각화 하기

     

     

    'scatter'로 산점도도 그릴 수 있지만 x축과 y축의 칼럼 값을 입력해줘야 한다.

     

    데이터 프레임 자체를 선 그래프로 시각화도 가능하다.

    하지만 전제를 전부 그릴 경우, 한눈에 알아보기 힘든 경우가 존재한다.

     

     

    하나의 칼럼을 선택해 막대 그래프를 그릴 수도 있고 여러개의 칼럼을 선택할 수도 있다.

    point💡 두가지 이상의 칼럼을 선택할 때는 대괄호를 한 번 더 작성해야 오류가 생기지 않는다.

     

     

     

     

    데이터 밀도 그래프 그리기

     

    데이터 상관 히트맵을 그릴 예정인데, 만일 데이터 프레임에 문자열 형태의 열이 존재한다면 상관 행렬을 계산할 때 오류가 발생한다.

    따라서 이런 경우에는 문자열이 포함된 열을 제외하고 수치형 열만을 이용하여 상관 행렬을 계산해야 한다.

     

    히트맵을 그렸다면 데이터의 상관관계를 해석해야 한다.

    먼저 히트맵에서 각 셀의 색상은 해당 변수들 간의 상관관계를 나타낸다.

    일반적으로는 색상 맵(컬러 맵)이 사용되는데, 양의 상관관계는 밝은 색(주로 빨간색)으로, 음의 상관관는 어두운 색(주로 파란색)으로 표시된다.

    색상이 진할수록 강한 상관관계를 나타낸다.

     

    여기서 제외해야 할 건 대각선 요소이다.

    히트맵의 대각선 요소는 변수와 자기 자신 간의 상관관계이며 항상 1이다.

     

    히트맵을 해석할 때는 특정 변수들에 집중하여 살펴보는 것이 좋다.

    주로 관심있는 변수들을 선택하고, 해당 변수들과 다른 변수들 간의 상관관계를 확인한다.

    히트맵의 셀에 숫자가 표시되어 있는 경우, 해당 숫자는 상관계수의 실제 값을 의미한다.

    일반적으로 '-1'에서 '1'사이의 범위를 가지며 '-1'은 완벽한 음의 상관관계, '1'은 완벽한 양의 상관관계를 의미한다.

     

     

    6. 특성 간 관계 탐색:

    변수 간의 상관관계를 분석하고 시각화한다.

     

    히트맵으로 상관관계를 확인했다면, 특정 변수들 간의 상관관계를 시각화해본다.

     

     

    7. 카테고리 변수 탐색:

    카테고리형 변수의 분포를 확인하고 시각화 한다.

    데이터 프레임 내에 카테고리형 변수가 있는지 확인하고 만일 존재한다면 카테고리형 변수의 분포를 확인하고 시각화한다.

     

    왜 카테고리형 변수를 확인해야할까

    카테고리형 변수는 종종 모델링에서 중요한 역할을 한다. (e.g. 분류문제에선 타겟 변수로 사용되기도 한다.)

    타켓 변수로서의 카테고리형 변수의 분포를 확인하고, 각 카테고리가 얼마나 균형을 이루는지를 고려하여 모델의 성능을 평가할 수 있다.

    카테고리형 변수의 값에 따라 다른 변수들의 분포가 어떻게 변하는 지 확인하여 인사이트를 얻을 수 있기에 카테고리형 변수를 탐색하고 시각화하는 것은 데이터 이해와 모델링의 기초를 다지는 중요한 단계가 된다.

     

     

    8. 이상치 탐지:

    이상치를 확인하고 처리한다.

    이상치 탐지는 데이터 셋에서 일반적인 패턴에서 벗어난 이상한 값들을 찾는 과정이다.

    이상치는 통계적으로나 도메인 지식을 활용하여 확인할 수 있다.

    일반적으로 상자그림 (BoxPlot) 확인, Z-스코어 기반 이상치 탐지, IQR(Interquartile Range)기반 이상치 탐지, 시각화 기법, 클러스터기반 이상치 탐지와 같은 방법들이 사용된다.

    상자그림은 데이터의 중앙값, 시분위수, 이상치등을 시각적으로 표현하는 도구이다.

    이상치는 주로 "상자"외부의 점들로 나타난다.

     

    만일, 이상치가 발견되었다면 적절한 조치를 취해야 한다.

    어떤 조치를 취할지는 데이터와 분석 목적에 따라 달라진다. 

    먼저 이상치가 모델에 영향을 미치는 지 확인(이상치가 모델에 부정적인 영향을 미칠 지, 이상치를 제거하거나 변환한 후에 모델의 성능을 확인하고 비교)하고 이상치가 도메인 지식을 반영하는 경우, 해당 이상치를 그대로 유지하거나 특별한 처리를 할 수 있다.

    또한 다른 특성과의 관계를 고려하여 이상치를 해석할 수 있다.

    예를 들어, 특정 상황에서만 발생하는 이상치인지 확인해보고 분석에 포함또는 제외할 수 있다.

     

    이상치에 취할 수 있는 조치는 크게 3가지가 있다.

    - 이상치 제거: 가장 간단한 방법으로 이상치를 직접 제거하는 것이다.

    point💡이상치가 실제로 오류가 아니라면 이상치를 제거할 때 데이터의 손실이 발생할 수 있다.

    # 이상치를 제거한 데이터 프레임 생성

    df_cleand = df[~outliers]

     

    - 이상치 대체 : 이상치를 다른 값으로 대체하는 것이 더 적절한 경우도 있다.

    대체할 값은 평균, 중앙값, 최빈값등을 사용할 수 있다.

    # 이상치를 중앙값으로 대체

    df['column_name'][~outliers] = df['column_name'].median()

     

    -  이상치 변환: 이상치를 표준적인 값으로 변환하는 것이 가능하다. (e.g. 로그 변환)

    # 로그 변환을 사용하여 이상치를 변환

    df['cloumn_name'] = np.log1p(df['cloumn_name'])

     

    9. 통계적 검정:

    가설 검정 등 통계적 방법을 사용하여 데이터를 분석 할 수 있다.

     

     

     

Designed by Tistory.