데이터 전처리 : 결측치 이상치
01. 각 수치형 변수의 결측치 개수 총합은?
df = pd.read_csv("iris_missing.csv")
df.iloc[:, :-1].isna().sum().sum()
02. sepal_width 변수의 결측치를 평균으로 대치한 값의 분산은?
df = pd.read_csv("iris_missing.csv")
df = df.fillna(value = ["Sepal_Width"]:df["Sepal_Width"].mean())
df["Sepal_Width"].var()
03. 평균을 기준으로 1.5 표준편차를 넘어서는 값을 이상치라고 간주할 때 Sepal.Length를 기준으로 이상치인 row 개수는 몇 개인가?
df = pd.read_csv("iris.csv")
df_mean = df["Sepal.Length"].mean()
df_Std = df["Sepal.Length"].std()
cond_1 = df["Sepal.Length"] < (df_mean - 1.5 * df_std)
cond_2 = df["Sepal.Length"] > (df_mean + 1.5 * df_std)
df_out = df.loc[(cond_1) | (cond_2), ]
len(df_out)
데이터 전처리 : 파생변수 생성
01. temp변수와 atemp변수 차이의 절대값 평균은?
df = pd.read_csv("bikc.csv")
abs(df["temp"] - df["atemp"]).mean()
02. casual 값의 최대값이 25가 넘은 날은 총 며칠인가?
df = pd.read_csv("bike.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["date"] = df["datetime"].dt.date
df_casu = df.groupby("date")["casual"].max()
len(df_casu[df_casu > 25])
03. 시간대별 registered 평균을 산출했을 때 값이 가장 큰 시간은?
df = pd.read_csv("bike.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["hour"] = df["datetime"].dt.hour
df_agg = df.groupby("hour")["registered"].mean().reset_indeX()
df_agg.loc[df_agg["registered"] == df_agg["registered"].max(), ]
데이터 전처리 : 데이터 병합
01. A를 B에 Left Join 했을 때 생성되는 결측 행의 개수는?
df_A = pd.read_csv("join_data_group_members.csv")
df_B = pd.read_csv("join_data_member_room.csv")
pd.merge(left = df_A, right = df_B,
left_on = "member", right_on = "name",
how = "left").isna().sum())
02. 여름과 겨울의 시간대별 registered 평균을 비교할 때 가장 차이가 많이 나는 시간은?
df = pd.read_csv("bike.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["hour"] = df["datetime"].dt.hour
df_summer = df.loc[df["season"] == 2]
df_winter = df.loc[df["season"] == 4]
df_summer = df_summer.groupby("hour")["registered"].mean()
df_winter = df_winter.groupby("hour")["registered"].mean()
df_concat = pd.concat([df_summer, df_winter], axis = 1)
df_concat = df.iloc[:, [0,1,3]]
df_concat.columns = ["hour", "re1", "re2"]
df_concat["diff"] = df_concat["re1"] - df_concat["re2"]
df_concat.iloc[[df_concat["diff"].idxmax()], ]
03. 비가 온 날 30도가 넘는 count의 평균은 얼마인가?
df = pd.read_csv("bike.csv")
df["datetime"] = pd.to_datetime["datetime"]
df["date"] = df["datetime"].dt.date
df_rain = df.groupby("date")["humidity"].max().reset_indeX()
df_rain = df.loc[df_rain["humidity"] == 100, ]
df_merge = pd.merge(left = bike, right = bike_rain,
left_on = "date", right_on = "date",
how = "inner")
df_temp_30 = df_merge.loc[df_merge["temp"] > 30, ]
df_temp_30["count"].mean()
데이터 전처리 : 정렬 및 변환
01. workingday가 아니면서 holiday가 아니 날의 비율은?
bike = pd.read_csv("bike.csv")
pd.crosstab(bike["workingday"], bike["holiday"], normalize = 1)
02. 가장 많은 데이터가 있는 세공 수준과 색상 조합을 순서대로 고르면?
dia = pd.read_csv("diamonds.csv")
cross = pd.crosstab(dia["cut"], dia["color"])
corss_melt = cross.reset_index().melt(id_vars = "cut")
cross_melt.sort_values("value", ascending = False).head(2)
03. 세공 수준별 가격의 평균, 색상별 케럿의 평균을 구하고 1캐럿당 가격이 가장 높은 세공 수준과 색상 조합을 순서대로 고르면?
dia = pd.read_csv("diamonds.csv")
dia_agg = dia.grpupby(["cut", "color"])[["price", "carat"]].mean().reset_index()
dia_agg.head(2)
dia_agg["ratio"] = dia_agg["price"] / dia_agg["carat"]
diag_agg = dia_agg.sort_values("ratio", asecending = False)
dia_agg.head()