[ProDS] 실기 - 데이터 전처리

swb·2022년 11월 22일

ProDS

목록 보기
2/5

데이터 전처리 : 결측치 이상치

01. 각 수치형 변수의 결측치 개수 총합은?

df = pd.read_csv("iris_missing.csv")

df.iloc[:, :-1].isna().sum().sum() 

02. sepal_width 변수의 결측치를 평균으로 대치한 값의 분산은?

df = pd.read_csv("iris_missing.csv")

# sepal_width 결측치에 sepal_width 평균을 채운다.
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(), ]
# df_agg.loc[df_agg["registered"], idxmax(), ]

데이터 전처리 : 데이터 병합

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()
profile
개발 시작

0개의 댓글