(출력 예시: 1)
import pandas as pd
df = pd.read_csv("./OTT_service_program_list.csv")
df.head(2)
def solution():
print(df.isnull().sum().max())
※ 참고로 영화 Scandal in Sorrento는 Italy, France 두 나라에 서비스되었다.
※ country 변수의 결측치는 제외하고 분석을 실시하시오.
(출력 예시: 1)
import pandas as pd
df = pd.read_csv("./OTT_service_program_list.csv")
df_q2 = df.loc[df["country"].notna(), ].reset_index(drop = True).copy()
ser = df_q2["country"].str.split(",").apply(len)
def solution():
print(ser.value_counts().index.max())
※ 서비스 국가는 country 변수를 참고한다.
※ A 프로그램과 B 프로그램의 서비스 국가가 각각 "Korea", "Korea, Italy, Finland"인 경우 "Korea의 비중은 0.5이다.
※ 필요시 결측치를 제거하고 계산한다.
(출력 예시: 0.123)
import pandas as pd
df = pd.read_csv("./OTT_service_program_list.csv")
df_q3 = df.loc[df["type"] == "TV Show", ].reset_index(drop = True).copy()
ser_rate = df_q3["country"].str.split(",", expand = True).melt()["value"].dropna()
ser_rate = ser_rate.value_counts(normalize = True)
def solution():
print(ser_rate.round(3).max())
※ 단, type이 "Movie"인 프로그램에 대해서만 분석한다.
※ scipy의 t-검정 관련 함수를 사용하시오.
※ 두 집단의 분산은 서로 다르다고 가정한다.
(출력 예시: 0.123)
import pandas as pd
from scipy.stats import ttest_ind
df = pd.read_csv("./OTT_service_program_list.csv")
df_q4 = df.loc[df["type"] == "Movie", ].reset_index(drop = True).copy()
ser_min = df_q4["duration"].str.replace(pat = "[^0-9]", repl = "", regex = True).astype("int")
df_q4["min"] = ser_min
stat, p = ttest_ind(df_q4.loc[df_q4["year_release"] == 2019, "min"],
df_q4.loc[df_q4["year_release"] == 2020, "min"],
equal_var = False)
def solution():
print(round(p, 3))
※ 단, statsmodels의 ols() 함수를 사용하시오.
(출력 예시: 0.123)
import pandas as pd
df = pd.read_csv("./OTT_service_program_list.csv")
ser_date = df["date_added"].str.replace(pat = "^ ", repl = "", regex = True)
ser_date = pd.to_datetime(ser_date, format = "%B %d, %Y")
ser_year = ser_date.dt.year
df_year_cnt = ser_year.value_counts().reset_index()
df_year_cnt.head()
from statsmodels.formula.api import ols
model = ols("date_added ~ index", data = df_year_cnt).fit()
def solution():
print(round(model.rsquared_adj, 3))
(출력 예시: 1)
import pandas as pd
df = pd.read_csv("./HR_survey_10k.csv")
def solution():
print(sum(df["gender"].isna() & df["edu_level"].isna() & df["comp_size"]))
※ 회사 규모는 "10-49"로 기록되어있는 경우 앞의 숫자를 따서 10명으로 간주한다.
(출력 예시: 0.123)
import pandas as pd
df = pd.read_csv("./HR_survey_10k.csv")
df_q2 = df[["comp_size", "training_hr"]].dropna().reset_index(drop = True)
df_q2["comp_size"].str.split("-", expand = True)
df_q2_bind = pd.concat([df_q2, df_q2["comp_size"].str.split("-", expand = True)],
axis = 1)
df_q2_bind[0] = df_q2_bind[0].astype("int")
def solution():
print(round(df_q2_bind.corr(method = "spearman").iloc[0, 1], 3))
※ 결측치가 있는 행은 제거하고 분석을 실시하시오.
※ 경력이 1년 미만의 경우 0, 20년 초과의 경우 21로 변경하고 분석을 실시하시오.
※ scipy의 상관분석 관련 함수를 사용하시오.
(출력 예시: 0.123)
import pandas as pd
from scipy.stats import kendalltau
df = pd.read_csv("./HR_survey_10k.csv")
df_q3 = df[["exp", "training_hr"]].dropna().reset_index(drop = True).copy()
df_q3.loc[df_q3["exp"] == "<1", "exp"] = 0
df_q3.loc[df_q3["exp"] == ">20", "exp"] = 21
df_q3["exp"] = df_q3["exp"].astype("int")
stat, p = kendalltau(df_q3["exp"], df_q3["training_hr"])
def solution():
print(round(p, 3))
※ 교육 수준 변수의 "Bachelor", "Masters", "PhD" 는 대학교 이상의 학력으로 한다.
※ 성별이 결측이거나 "Other"인 행은 모두 제거한다.
※ 교육 수준 변수가 결측인 경우 대학교 미만의 학력으로 간주한다.
(출력 예시: 1)
import pandas as pd
from scipy.stats import chi2_contingency
df = pd.read_csv("./HR_survey_10k.csv")
df_q4 = df[["edu_level", "gender"]].reset_index(drop = True).copy()
df_q4 = df_q4.loc[df_q4["gender"].notna(), ]
df_q4 = df_q4.loc[df_q4["gender"] != "Other", ]
df_q4.loc[df_q4["edu_level"].isna(), "edu_level"] = "mid"
df_q4["is_grad"] = df_q4["edu_level"].isin(["Bachelor", "Masters", "PhD"]) + 0
stat, p, dof, exp_v = chi2_contingency(pd.crosstab(df_q4["gender"], df_q4["is_grad"]))
def solution():
print(int(exp_v[1, 1]))
※ 성별이 결측이거나 "Other"인 행은 모두 제거한다.
※ 경력이 1년 미만의 경우 0, 20년 초과의 경우 21로 변경하고 분석을 실시하시오.
※ statsmodels의 ols()와 anova_lm() 함수를 사용하시오.
(출력 예시: 0.123)
import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
df = pd.read_csv("./HR_survey_10k.csv")
df_q5 = df[["gender", "edu_level", "exp"]].dropna().reset_index(drop = True).copy()
df_q5 = df_q5.loc[df_q5["gender"] != "Other", ]
df_q5.loc[df_q5["exp"] == "<1", "exp"] = 0
df_q5.loc[df_q5["exp"] == ">20", "exp"] = 21
df_q5["exp"] = df_q5["exp"].astype("int")
formula = "exp ~ edu_level * gender"
model = ols(formula, data = df_q5).fit()
model_sum = anova_lm(model)
def solution():
print(round(model_sum.iloc[2, 4], 3))
import pandas as pd
df = pd.read_csv("./water_BOD.csv")
df_not_na = df.loc[df["stn_1"].notna() & df["stn_2"].notna(), ]
def solution():
print(len(df_not_na))
import pandas as pd
df = pd.read_csv("./water_BOD.csv")
def solution():
print(df["BOD"].quantile(0.99).round(2))
※ 필요시 각 변수의 결측치를 제거하고 상관계수를 산출하시오
import pandas as pd
df = pd.read_csv("./water_BOD.csv")
df_corr = df[["stn_1", "stn_2"]].corr()
def solution():
print(round(df_corr.iloc[0, 1], 2))
※ statsmodels.formula.api의 ols() 함수를 활용하여 다중선형회귀를 실시하시오.
※ 필요시 각 변수의 결측치를 제거하고 분석을 실시하시오.
import pandas as pd
df = pd.read_csv("./water_BOD.csv")
from statsmodels.formula.api import ols
df_not_na = df.loc[df["stn_1"].notna() & df["stn_2"].notna(), ]
model_2 = ols("BOD ~ stn_1 + stn_2", data = df_not_na).fit()
def solution():
print(round(model_2.rsquared, 2))
※ Migrants 변수와 NetChange를 참고하며 음수는 감소 또는 유출을 뜻한다.
import pandas as pd
df = pd.read_csv("./asia_countries_population_2020.csv")
def solution():
print(sum((df["Migrants"] < 0) & (df["NetChange"] > 0)))
※ 가설검정시 별도의 값 지정이 없는 인자는 기본값을 사용하시오.
※ scipy.stats의 ttest_ind() 함수를 활용하시오.
import pandas as pd
df = pd.read_csv("./asia_countries_population_2020.csv")
from scipy.stats import ttest_ind
stat, p = ttest_ind(df.loc[df["UrbanPop"] <= 50, "MedAge"],
df.loc[df["UrbanPop"] > 50, "MedAge"])
def solution():
print(round(p, 4))
※ asia_countries_population_2020.csv 파일과 asia_countries_territory_2020.csv 파일에 공통으로 기록된 국가의 정보만 활용하시오.
※ 인구밀도는 정수부분만 출력하시오.
import pandas as pd
df_pop = pd.read_csv("./asia_countries_population_2020.csv")
df_land = pd.read_csv("./asia_countries_territory_2020.csv")
df_join = df_pop.merge(df_land, left_on = "Country", right_on = "Country", how = "inner")
df_join["density"] = df_join["Population"] / df_join["LandArea"]
def solution():
print(int(df_join["density"].max()))
※ 군집분석시 별도의 값 지정이 없는 인자는 기본값을 사용하시오.
※ 군집 개수는 5개로 지정하고 국가명을 제외한 모든 변수를 사용하시오.
※ 결측치가 있는 경우 이를 제거하고 실시하시오.
※ sklearn.cluster의 AgglomerativeClustering 함수를 사용하시오.
import pandas as pd
df = pd.read_csv("./asia_countries_population_2020.csv")
df_not_na = df.dropna().reset_index(drop = True)
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters = 5).fit(X = df_not_na.drop("Country", axis = 1))
df_not_na["cluster"] = model.labels_
def solution():
print(df_not_na["cluster"].value_counts().max())