DATA Python

51543 ワード

一級
1、与えられたデータの中で最もクリーン測定値を持つ変数のクリーン測定値はいくらですか?
(出力例:1)
import pandas as pd
df = pd.read_csv("./OTT_service_program_list.csv")
df.head(2)

def solution():
    print(df.isnull().sum().max())

2.国/地域変数を参考にして、最も多くの国/地域にサービスするプロジェクトはいくつの国/地域がありますか?
※参考までに、映画Scandal in Sorrentoはイタリア、フランスの2カ国でサービスしています.
※国変数の測定値を除外して分析します.
(出力例: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())

3.「テレビショー」タイプの番組サービス国の中でサービス国が最も多い番組の割合を四捨五入し、小数点の3位に印刷する.
※サービス国は国変数を参照してください.
※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())
4.durationとyear releaseを参考にして、t-検査を利用して2019年と2020年に公開された番組の内容の長さに著しい違いがあるかどうかを知る.検証結果のp-valueを四捨五入し、小数第3位に出力します.
※タイプが「ムービー」のプログラムのみを分析します.
※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))
5.特定のプログラムのOTTサービスを参照して日付変数date addを追加し、年と追加内容の個数を利用して線形回帰分析を行い、修正した決定係数を四捨五入し、小数点の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))

6.応答のないデータを理解し、以降の分析から除外する.すべての性別、学歴、在職企業規模の項目の行数を印刷してください.
(出力例: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"]))
7.会社の規模が大きいほど、職業訓練時間が長くなると仮定します.会社規模comp size変数と職業訓練時間変数sperman変数との相関係数を求め,小数点の3位に四捨五入した.
※会社規模が「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))
8.キャリアと職業訓練時間の関係を確定するために、Kendallランキングに関する分析を行い、p-valueを四捨五入し、小数点第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))
9.教育程度(edu level)変数と性別(性別)変数を用いて、大学以上の学歴と性別の関係があるかどうかをアンケート調査した.検定結果では、大学以上の学歴の男性の希望度数を整数分だけ出力してください.
※教育水準変数の「Bacheler」「Master」「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]))
10.学歴と性別による平均経歴を二元分散分析により理解する.分布解析結果の独立変数間相互作用項のp-valueをチェックし、小数点の3番目のビットに四捨五入して出力します.
※性別決定または「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))
にだん
1.dfオブジェクトのstn 1とstn 2の結合測定値を削除し、df not naオブジェクトに保存して出力する行数
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))
2.dfオブジェクトのBOD変数の99番目のパーセンテージを四捨五入し、小数点の2番目に出力します.
import pandas as pd
df = pd.read_csv("./water_BOD.csv")

def solution():
    print(df["BOD"].quantile(0.99).round(2))
3.1番観測所(stn 1)と2番観測所(stn 2)のPearson's相関係数を求め、その値を四捨五入して小数点第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))
4.df対象のBOD変数を従属変数とし、1番観測所(stn 1)と2番観測所(stn 2)のデータを独立変数として多重線形回帰を行い、決定係数を四捨五入して小数点第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))
5.人口流出が発生したものの、昨年に比べて人口が増加した国はいくつありますか?
※Migrangs変数とNetChangeを参照し、負数は減少または流出を示します.
import pandas as pd
df = pd.read_csv("./asia_countries_population_2020.csv")

def solution():
    print(sum((df["Migrants"] < 0) & (df["NetChange"] > 0)))
6.都市人口の割合が50未満の国と非50の国の中位年齢(MediAge)に著しい差があるかどうかは、独立した2つのサンプルt-検査で確認し、検査結果のp-valueを小数点4位に四捨五入した.
※検証時に値が指定されていないパラメータはデフォルト値を使用するとします.
※ 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))
7.それぞれの国の人口と国土面積の情報を利用して人口密度(人口/面積)を計算し、人口密度が最も高い国の人口密度を出力する.
※ asia_countries_population_2020.csvファイルとアジア諸国region 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()))
8.各国の人口情報に基づいて階層クラスタリング分析を行う.最大クラスタに属する国の数は?
※クラスタ解析時に値が指定されていない因子はデフォルト値を使用します.
※クラスタ数は5個に指定し、国名以外のすべての変数を使用します.
※最終測定値がある場合は、それを取り除いて実施してください.
※ sklearn.クラスタ内のAgGlomaveクラスタ関数を使用します.
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())