카테고리 없음

데이터 분석 트랙 44일차 25.04.15. [TIL]

jjaio8986 2025. 4. 15. 21:52
  • 파이썬 선택 학습반 내용 정리

1. [파이썬 환경설정]

 1.1. 파이썬 가상환경 설정

  - 협업 및 프로젝트 마다 다른 파이썬 패키지 버전이 필요할 수 있다.

  - 시스템 전체에 영향을 주지 않고 독립적인 환경을 유지하는 방법.

 1.2. <가상환경 설정 방법1>

  A. 가상 환경 생성 : "pythom -m venv myenv"

  B. 가상 환경 활성화 

   - WindowOS : "myenv\Scripts\activate"

   - Mac/Linux : "source myenv/bin/activate"

  C. 가상환경 비활성화 : "deactivate"

 

 1.3. <가상환경 설정 방법2 : Conda>

  - Conda는 패키지, 의존성, 환경 관리 등을 위한 오픈 소스 플랫폼이다. 다양한 패키지의 설치 및 호환에 잇어 유용하다.

  - Conda 설치 및 사용법

  A. Conda 환경 생성 : " conda create --name myenv"

  B. Conda 환경 활성화 : " conda activate myenv"

  C. Conda 환경 비활성화 : "conda deactivate"


 

2. [pandas] > [데이터 확인]    # DataFrame 형태의 데이터를 pandas로 확인하는 방법

 2.1. "read_csv(파일경로, encoding='euc-kr')" 

 # 데이터 로드를 위해 사용하는 코드!

 # 파일 경로 : 인터넷의 URL, 내 컴퓨터의 파일 위치, 구글 드라이브 경로 등등을 변수명에 담아 "파일경로" 부분에 넣는다.

 # " encoding='euc-kr' " : 컬럼이 한글일 경우 글씨 깨짐을 방지하기 위해 인코딩을 해줘야 한다.

 

 2.2. "데이터 파일명.select_dtypes(exclude=object)"

 # 데이터 타입이 지정한 타입을 제외(exclud) 혹은 포함(include)하는 것을 가져온다.

 # 소괄호 뒤에 ".columns"를 통해 해당 데이터 타입의 컬럼명을 가져온다.

 

 2.3. "데이터 파일명.isnull()"

  # 데이터에서 값이 결측치(Nan)이면 True, 아니면 False로 표시하여 가져온다.

  # ".sum()"을 추가로 붙여주면 결측치의 개수를 확인할 수 있다.

 

 2.4. "데이터 파일명.info()"

  # 각 컬럼 데이터 수, 데이터 타입을 한 번에 확인하는 방법

  # "nunique()", "unique()" : 고유값의 개수, 대상의 모든 고유값 출력도 가능!

 

 2.5. "데이터 파일명.describe()"

  # 수치형 데이터 : count, mean, std, min, max, 4분위수["quantile(0.25 혹은 0.75)"로도 구현 가능]를 확인할 수 있다.

  # 범주형 데이터 : count(데이터 개수), unique(고유 데이터의 값 개수), top(가장 많이 출현한 데이터 개수), freq(가장 많이 출현한 데이터의 빈도수)를 확인할 수 있다.

  # 즉, 일반적으로 전체적인 describe를 사용하면 수치형 데이터 컬럼의 정보를 확인하지만,  "데이터 파일명['컬럼명']"으로 해당 컬럼이 object, category 타입에도 사용할 수 있다!

  # ex. "df.describe(include='object')" :  범주형의 여러 지표를 확인 가능! 

 


3. [기초 통계 분석]

 3.1. "count()" vs "value_counts()"

  # “.count()” : 데이터의 총 개수를 구하는 것

  # “.value_counts()” : 각 값이 어떻게 분포되어 있는가!

                                   즉, 'gender'에서 '남자'는 몇 번 여자는 몇 번 나오는가

                                  # 각 범주형 값의 개수를 계산하는 방법.

  3.2.“.cumsum()"

   # 누적합을 계산한다.    (수치형 : 모든 값을 더 한다. 문자형 : 문자를 붙여서 출력해준다.)

 

  3.3.".cumprod()"

   # 누적곱을 계산한다.    (문자형은 불가능하다!)

 

  3.4. "var()" ////// " std() "

   # 각각 분산과 표준편차를 구하는 함수!

   # "mean", "std", "describe" 모두 결측치가 포함된 데이터 셋에 사용시 결측치를 자동으로 제외한 뒤 값을 구한다.

 

 3.5. 데이터 명['컬럼명'].astype('category')

  # 데이터 타입을 변경하는 방법

  # 객체형을 명시적으로 category로 바꿀 시 [메모리 최적화], [그룹화 연산] 시 유리하다.

 


4. 상관관계분석    # "데이터명.corr()"를 통해 구현!, 히트맵으로 시각화하여 확인해볼 수 있음.

 - 두 변수의 선형적 관계의 정도를 수치로 나타낸 것 = 상관관계   

 - 'A의 변화에 따라 B가 변화하는 정도!'

 - 단, 인과관계가 아니기에  무엇이 원인이고 결과인지는 모른다.

 - A 혹은 B의 변화에 따라, B 또는 A가 "움직이는 가?", "어느 방향으로 움직이는 가?", "얼마나 움직이는 가?"를 의미한다.

 - (-1 ~ 1) 사이의 값으로 계산된다.

<중요> : 상관계수(상관관계의 수치)의 숫자에 매몰되어 반드시 '0.75이상이어야 한다.' 같은 선입견, 혹은 분석 대상 기준을 세우면 안 된다!

 - 컬럼이 많아지고, 데이터가 많아지고, 도메인 별, 현실적 여건, 여러 요인들이 엮이는 등 다양한 상황을 고려하여 '상관관계의 유무'정도로 파악하거나 '여러 상관계수를 확인'하여 상관관계를 따져봐야 한다.

 

 4.1. 종류

  A. Pearson 상관계수 (파이썬에서 "corr()"를 사용할 시 기본값으로 설정된 상관계수!)

   - 정의 : 두 수치형 변수의 값 자체 간 선형적 관계를 평가!    # 수치 자체의 직선적 관계를 본다!

   - 사용 가능한 경우 : 데이터가 정규분포, 이상치가 적고 선형관계

 

 B. Kendall 순위 상관계수

  - 정의 : 데이터의 순위쌍 간 일치정도(일관성)를 측정

  - 두 순위쌍이 일치하면 +1, 불일치하면 -1에 가깝다.

  - 사용 가능한 경우 : 데이터 셋이 작고, 순위 기반 평가가 필요한 상황, 신뢰도 높은 분석 필요한 상황

  - ex. "고객 만족도"와 "재구매" 순위 / "검색 결과"의 "랭킹" 일치 정도

 

 C. Spearman 순위 상관계수    # 피어슨과 캔달의 결합!

  - 정의 : 변수 값을 순위로 변환하여 Pearson 방식으로 상관계수 계산.

  - 비선형적이라도 순위가 일정하게 오르내리면 높은 상관관계로 간주한다!

  - 사용 가능한 경우 : 비선형적인 관계이상치가 많은 경우

  - ex. SNS 활동량 순위 vs. 제품 구매 순위 // 나이 순위 vs. 보험료 순위

 

 

<중요> : 이상치가 많거나 데이터가 비선형일 경우 Spearman/Kendall 사용 필요

 

<코드 구현>

# 1. 데이터의 상관계수 계산 (확인작업)

df.corr()

 

# 2. 시각화(피어슨, 켄달, 스피어만)

import seaborn as sns

import matplotlib.pyplot as plt

 

def plot_correlation(corr_matrix, title):

    plt.figure(figsize=(8, 6))

    sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)

    plt.title(title)

    plt.show()

 

plot_correlation(corr_pearson, "Pearson Correlation (선형 관계)")

plot_correlation(corr_spearman, "Spearman Correlation (순위 기반)")

plot_correlation(corr_kendall, "Kendall Correlation (순위쌍 비교)")