- 파이썬 선택 학습반 내용 정리
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 (순위쌍 비교)")