📌 주어진 데이터로 Data Handling 하기
import pandas as pd
import numpy as np
path = 'datasamples/telecom_churn.csv'
data = pd.read_csv(path)
data.head()
- 데이터의 구조 & 데이터의 index, column 정보 확인하기
data.shape
data.info()
data.index
data.columns
- 데이터의 수치 정보 확인하기 & 다른 형식의 정보도 확인하기
data.describe()
data.describe(include=["object", "bool"])
cols = ["Area code", "Customer service calls", "Churn"]
idx_cols = [ data.columns.get_loc(col) for col in cols ]
idx_cols
- column의 unique값과 갯수 & 비율 확인하기
data["Churn"].value_counts()
data["Churn"].value_counts(normalize=True)
data.sort_values(by = ["Churn", "Total day charge"],
ascending = [True, False])
data.loc[data["Churn"] == 1, "Total day minutes"].mean()
data[data.loc[:, "State"].apply(lambda x: x[0]) == "W"]
# apply 사용
data.loc[:,"International plan"].apply(lambda x: True if x=="Yes" else False)
# replace 사용
d = { "Yes": True, "No": False }
data.replace({ "International plan": d })
data.groupby(by=["Churn"]).agg(
{
"Total day minutes": "mean",
"Total eve minutes": "std",
"Total night minutes": "max"
}
)
📌 주어진 데이터로 그래프 그리기
import matplotlib.pyplot as plt
data.loc[:, cols].plot(kind="density")
data.loc[:, cols].plot(kind="density", subplots=True)
import seaborn as sns
sns.boxplot( data = data, x = "Total intl calls")
fig, axes = plt.subplots(nrows= 1, ncols=2, sharey=True)
sns.boxplot(data=data, y="Total intl calls", ax = axes[0])
sns.violinplot(data=data, y="Total intl calls", ax = axes[1])
- 몇가지 칼럼을 제외하고 주목하려는 칼럼만 지정 & 지정된 칼럼만 그래프로 나타내기
no_focus = ["State", "International plan", "Voice mail plan", "f-code"]
focus = list(set(data.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=data, x="Churn", y=col, ax= my_ax)
my_ax.set_ylabel(col)
fig.tight_layout()