22.11.14 701 실습
_ = test.hist(figsize=(20,16), bins=50)

_ = sns.scatterplot(data=train, x=train.index, y="SalePrice")
plt.axhline(500000, c="k", ls=":")

# 범주형 데이터중에 가짓수가 많은것들 확인
train.select_dtypes(include="object").nunique().nlargest(10)
# value_counts 로 각 얼마나 있는지 확인
train["Neighborhood"].value_counts()

inverse_transform 으로 원래 값으로 되돌릴 수 있다. pd.cut : 절대평가 같다. 점수기준으로 나누는 것.pd.qcut : 상대평가 같다. 분포기준으로 나누는 것.LabelEncoder, OrdinalEncoder 의 차이는?
Q.
y값, X값으로 다른게 뭔지 이해가 안갑니다,,A.
X => 독립변수, 시험의 문제, 2차원 array 형태, 학습할 피처
y => label, target, 정답, 시험의 답안, 1차원 벡터X는 feature, 독립변수, 2차원 array 형태, 학습할 피처, 예) 시험의 문제
y는 label, 종속변수, target, 정답, 1차원 벡터, 예) 시험의 정답
X는 보통 2차원으로 대문자로 표기하고 y는 소문자로 표기하는것이 꼭 그렇게 써야된다는 아니지만 관례처럼 사용하고 있습니다.
Q.
구분이 잘 안 되는 값에 대해 power transform 을 해주기도 하는데 반대로 너무 차이가 많이 나는 값을 줄일 때 사용할 수 있는 방법은?
A.
꼭 정답이 있다기 보다는 EDA를 해보고 어떤 스케일링을 하면 머신러닝 모델이 값을 학습하는데 도움이 될지 고민해 보면 좋다.
root, log transform 도 해볼 수 있지만 변환이 정답은 아니다. 성능이 올라가고 안 올라가고는 EDA 등을 통해 확인해 보고 왜 점수가 오르고 내리는지 확인해 보는 습관을 길러보는게 좋다.
value_counts(1) : 갯수가 아닌 비율을 보여준다. for col in train.select_dtypes(include="O").columns:
print("-----",col,"--------")
print(train[col].value_counts(1) * 100)

File vs SQL
- 아카이빙할 데이터는 대부분 파일로 저장
- 실시간으로 보여주어야 하는 현재 status 값만 DB에 저장해서 사용
지표
- DAU : Daily Active User 하루에 몇 명이 접속하는지(혹은 로그인 하는지)
- AARRR, Funnel : 분석을 통해 얼마나 많은 사람이 와서 물건을 살펴보고 거기서 회원가입 구매전환 친구 추천 혹은 재구매로 이어지는지
- Churn : 얼마나 사람들이 어느 페이지에서 이탈하는지? 퍼널, AARRR 과 함께 볼 수 있는 지표
_ = sns.displot(data=df, x="SalePrice", aspect=3, rug=True, kde=True)
_ = sns.histplot(data=df, x="SalePrice", bins=50, kde=True)
_ = sns.kdeplot(data=df, x="SalePrice", shade="fill")
print("왜도(Skewness):", train["SalePrice"].skew())
print("첨도(Kurtosis):", train["SalePrice"].kurtosis())
>>> 왜도(Skewness): 1.8828757597682129
>>> 첨도(Kurtosis): 6.536281860064529
# log 변환
train["SalePrice_log1p"] = np.log1p(train["SalePrice"])
print("왜도(Skewness):", np.log1p(train["SalePrice"]).skew())
print("첨도(Kurtosis):", np.log1p(train["SalePrice"]).kurtosis())
>>> 왜도(Skewness): 0.12134661989685333
>>> 첨도(Kurtosis): 0.809519155707878
fig, axes = plt.subplots(2, 2, figsize=(18,14))
_ = sns.kdeplot(data=train, x=train["SalePrice"], shade="fill", ax=axes[0][0]).set_title("SalePrice")
_ = sns.kdeplot(data=train, x=np.log1p(train["SalePrice"]), shade="fill", ax=axes[0][1]).set_title("SalePrice_log")
_ = sns.histplot(data=train, x=train["SalePrice"], kde=True, ax=axes[1][0]).set_title("SalePrice")
_ = sns.histplot(data=train, x=np.log1p(train["SalePrice"]), kde=True, ax=axes[1][1]).set_title("SalePrice_log")
plt.show()

nlargest(n=5, columns=None, keep='first')
first : prioritize the first occurrence(s)last : prioritize the last occurrence(s)all : do not drop any duplicates, even it means selecting more than n items.# 1
mask = np.zeros_like(df.corr())
mask[np.triu_indices_from(mask)] = True
# 2
mask = np.triu(np.ones_like(df.corr()))
# 내가 한 방법
fill_mode = ['MSZoning', 'KitchenQual', 'Exterior1st', 'Exterior2nd', 'SaleType', 'Functional']
print(df[fill_mode].isnull().sum())
print(df[fill_mode].describe().T["top"])
df[fill_mode] = df[fill_mode].fillna(df[fill_mode].describe().T["top"])
print(df[fill_mode].isnull().sum())
# 강사님 방법
print(df[fill_mode].isnull().sum())
df[fill_mode] = df[fill_mode].fillna(df[fill_mode].mode().loc[0])
print(df[fill_mode].isnull().sum())
df[fill_median].mode().loc[0]
df[fill_median].describe().loc["top"]
df[fill_median].describe().T["top"]
num_to_str_col = ["MSSubClass", "OverallCond", "YrSold", "MoSold"]
df[num_to_str_col].nunique()
df[num_to_str_col] = df[num_to_str_col].astype(str)
df[num_to_str_col].dtypes