【このページは現在作成中です】
#準備(すべてに共通) # PandasとNumpyをインポート import pandas as pd import numpy as np # 日本語化Matplotlibもインポート import matplotlib.pyplot as plt !pip install japanize-matplotlib import japanize_matplotlib # Seabornもインポート import seaborn as sns # pickleをインポート(モデルの保存用) import pickle # データの取得 data = pd.read_csv("https://www2.cmds.kobe-u.ac.jp/~masa-n/dshandson/bike-sharing-day.csv") data
データが構造化された表にちゃんと収まっているかを確認する
df.shape
df.dtypes df.info()
df.isnull().sum()
df["列1"].value_counts()
分析用のデータセットの作成に向けて,データの型やインデクスを整えていく
df = data.copy()
#列を任意の型変換する df["列1"] = df["列1"].astype("型名") #日時型への変換 df["日時列2"] = pd.to_datetime(df["日時列2"])
df.set_index("列1", inplace=True)
df.drop(columns=["列1", "列2", ...], inplace=True)
#オリジナルデータをコピーして作業 df = data.copy()
#dtedayを日付型に変換 df["dteday"] = pd.to_datetime(df["dteday"]) #確認 df.info() df
#season, holiday, weekday, workingday, weathersitをカテゴリ型に変換 for col in ["season", "holiday", "weekday", "workingday", "weathersit"]: df[col] = df[col].astype("category") #確認 df.info() df
#dtedayをインデクスに設定して時系列データにする df.set_index("dteday", inplace=True) #確認 df.info() df
#instant, yr, mnth: 冗長なので削除 df.drop(columns=["instant", "yr", "mnth"], inplace=True) #確認 df.info() df
様々な観点からデータを探索(要約・可視化)して,データが持つ性質を理解する
可視化にはpythonのライブラリを使う
df.describe()
df["列1"].value_counts()
df.plot.box() sns.boxplot(df) #Seabornを使う場合
df["列1"].plot.hist() sns.histplot(df["列1"]) #Seabornを使う場合
df.plot.bar() sns.barplot(df) #Seabornを使う場合
df["列1"].plot() df["列1"].resample("周期").集約関数().plot() #週や月で時系列を集約して表示する場合 sns.lineplot(df) #Seabornを使う場合
df.describe()
#カテゴリの列を要約 for col in df.columns[0:5]: print(f"\n【{col}の要約】") print(df[col].value_counts())
#気象データの分布を箱ひげ図で可視化 sns.boxplot(df[["temp", "atemp", "hum", "windspeed"]])
#利用者データの分布を箱ひげ図で可視化 sns.boxplot(df[["casual", "registered", "cnt"]])
#各変数のヒストグラムを描いてみる.サブプロットを使って,1枚の図に並べる fig, axes= plt.subplots(nrows=4, ncols=2, tight_layout=True, squeeze=False) for i, col in enumerate(["temp", "atemp", "hum", "windspeed", "cnt", "casual", "registered"]): sns.histplot(df[col], ax=axes[i//2, i%2], bins=40)
#利用者データの推移を見てみる fig, axes = plt.subplots(nrows=2, ncols=1, tight_layout=True, squeeze=False, figsize=(6,8)) #利用者データの推移 df[["casual", "registered", "cnt"]].plot(ax=axes[0,0], title="利用者データの推移(日次)") #利用者データの月ごとの推移を棒グラフで(登録・都度の内訳) df[["casual", "registered"]].resample("M").sum().plot.bar(stacked=True, ax=axes[1,0], title="利用者データの推移(月次)")
df.corr() sns.heatmap(df.corr(), ant=True) #ヒートマップで可視化する
df.plot.scatter(x=列1, y=列2) sns.scatterplot(df, x=列1, y=列2, hue=列3) #Seabornを使う場合.hueで色分けできる
sns.pairplot(df) #変数が多いと時間がかかるし見づらい