2024.01.02
데이터 핸들링 시작 전 배경 지식
ML, DL 과정으로 넘어가기에 앞서서
패키지를 다운 받거나 버전 문제로 오류가 발생하는 경우가 다수 발생한다.
이 때문에 패키지를 새롭게 설치하거나 버전 문제를 확인해야한다.
- 설치된 패키지 확인
!pip list
- 패키지 설치
pip install pandas
- 패키지 버전 확인 방법
!pip show pandas
import pandas as pd
pd.__version__
일반적으로 위에보다는 아래 방법을 사용한다.
- 패키지 업데이트
!pip install --upgrade pandas
데이터 핸들링 실습
실습하는 과정에서는 보통 kaggle에서 제공하는 기본 데이터를 활용했다.
https://www.kaggle.com/competitions
Kaggle Competitions
www.kaggle.com
- 데이터 불러오기 및 확인
telecom = '/content/drive/MyDrive/telecom_churn.csv'
tele_df = pd.read_csv(telecom, sep=',')
tele_df.head()
- 데이터 구조 및 컬럼, 인덱스 정보 확인
# 데이터 크기
tele_df.shape
# 데이터 샘플 수만 확인
len(tele_df)
tele_df.shape[0]
# 데이터 컬럼 수만 확인
tele_df.shape[1]
len(tele_df.columns)
# 데이터 인덱스
tele_df.index
# 데이터 컬럼 이름
tele_df.columns
- 데이터 기본 정보 확인
# 간단 기본 정보 : 컬럼 명, 데이터 타입, 결측치 정보 등
tele_df.info()
# 수치형 데이터들의 기본정보
tele_df.describe()
# 다른 형식의 컬럼 정보 확인하는 법
tele_df.describe(include=["object","bool"])
- 특정 데이터 컬럼의 정수 인덱스 찾는 법
# 1개만 확인
tele_df.columns.get_loc("Voice mail plan")
# 여러개 동시 확인
cols =["Area code", "Customer service calls", "Churn"]
idx_cols = [tele_df.columns.get_loc(col) for col in cols]
idx_cols
- 특정 컬럼의 unique값과 갯수 정보
tele_df["Churn"].value_counts()
# 갯수 분포를 비율로 구하고자 하면 아래의 파라미터 활용
tele_df["Churn"].value_counts(normalize = True)
- 특정 컬럼 값을 기준으로 정렬
# 1개를 기준으로
tele_df.sort_values(by=["Total day charge"], ascending = False)
# 2개 이상 각각 다른 기준으로
tele_df.sort_values(by=["Churn", "Total day charge"], ascending = [True,False])
- 특정 조건을 만족하는 값 찾기
# chrun = 0 (고객 이탈하지 않은 고객) 이면서 국제 계확이 없는 고객의 국제통화 시간 최고값
tele_df.loc[(tele_df["Churn"]==0) & (tele_df["International plan"]=='No'),"Total intl minutes"].max()
- 특정 조건을 만족하는 값 찾기(자주 사용하는 패턴)
# 주에 대한 코드 값의 앞자리가 W인 데이터 출력
tele_df[tele_df.loc[:,"State"].apply(lambda x: x[0]) == 'W']
- 특정 조건에 따라 컬럼 값 변경
# 국제 계획이 'yes'면 True를 아니면 False로 컬럼 값을 변경 (apply lambda 활용)
tele_df.loc[:,"International plan"].apply(lambda x: True if x=="Yes" else False)
# Voice mail plan의 컬럼의 값을 Yes: False, No : True 로 변경 (dict 활용)
d_voc = {
"Yes": False,
"No" : True
}
tele_df.replace({"Voice mail plan": d_voc}, inplace=True)
- 특정 컬럼을 기준으로 그룹을 묶어 데이터 정보 확인
tele_df.groupby(by=["Churn"]).agg(
{
"Total day minutes": "mean",
"Total eve minutes" : "std",
"Total night minutes" : "max"
})
- 데이터 그리기(pandas의 plot메서드 활용)
tele_df.loc[:, cols].plot(kind="density")
tele_df.loc[:, cols].plot(kind="density", subplots=True, sharex = False)
tele_df.loc[:, cols].plot(kind="density", subplots=True, sharex = False, layout=(1,2))
- 데이터 그리기(Seaborn 패키지 활용)
import seaborn as sns
sns.boxplot(data = tele_df, y = "Total intl calls")
sns.violinplot(data=tele_df, x = "Total intl calls")
- 데이터 그리기(matplotlib.pyplot 패키지 활용)
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True)
sns.boxplot(data = tele_df, y = "Total intl calls", ax = axes[0])
sns.violinplot(data =tele_df, y = "Total intl calls", ax = axes[1])
만약 전체 컬럼들에 대해 일괄적으로 그래프로 보고자 한다면
# 제외 하고자 하는 3개 컬럼을 리스트업함(수치형 데이터만 적용하기 위해)
no_focus = ["State", "International plan", "Voice mail plan"]
focus = list(set(tele_df.columns) - set(no_focus))
# 반복문 활용해서 그리기
fig, axes = plt.subplots(nrows=3, ncols=6)
for idx, col in enumerate(focus):
my_ax = axes[idx//6, idx%6]
sns.boxplot(data = tele_df, x="Churn", y=col, ax = my_ax)
my_ax.set_ylabel(col)
fig.tight_layout()
'ASAC 빅데이터전문가과정 > Python' 카테고리의 다른 글
ASAC 25-26일차 _ 태블로 강의 (0) | 2024.08.13 |
---|---|
ASAC 24일차 _ 데이터 핸들링(2) (0) | 2024.08.12 |
ASAC 22일차 _ Matplotlib (0) | 2024.08.08 |
ASAC 20일차 _ WebCrawling(4), Pandas(5) (0) | 2024.08.05 |
ASAC 19일차 _ WebCrawling(3) : 웹사이트(2), Selenium(1) (0) | 2024.08.01 |