Periksa Dataset

最終更新: 2 分で読めます このページを編集

Lihat apa yang ada dalam data #

import datetime
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

from scipy import stats
from statsmodels.tsa import stattools

Membaca dataset dari file csv #

data = pd.read_csv("sample.csv")
data.head(10)

DateTemp
01981-01-0120.7
11981-01-0217.9
21981-01-0318.8
31981-01-0414.6
41981-01-0515.8
51981-01-0615.8
61981-01-0715.8
71981-01-0817.4
81981-01-0921.8
91981-01-1020.0

Mengatur timestamp ke datetime #

Kolom Date saat ini dibaca sebagai tipe Object, yaitu string. Untuk memperlakukannya sebagai timestamp, gunakan yang berikut ini datetime — Basic Date and Time Types untuk mengkonversinya ke tipe datetime.

data["Date"] = data["Date"].apply(
    lambda x: datetime.datetime.strptime(str(x), "%Y-%m-%d")
)

print(f"Date column dtype: {data['Date'].dtype}")

Date column dtype: datetime64[ns]

Dapatkan gambaran umum dari sebuah deret waktu #

pandas.DataFrame.describe #

Untuk memulai, kita tinjau secara singkat seperti apa data tersebut. Kita akan menggunakan pandas.DataFrame.describe untuk memeriksa beberapa statistik sederhana untuk kolom Temp.

data.describe()

Temp
count3650.000000
mean11.177753
std4.071837
min0.000000
25%8.300000
50%11.000000
75%14.000000
max26.300000

Grafik garis #

Gunakan seaborn.lineplot untuk melihat seperti apa siklusnya.

plt.figure(figsize=(12, 6))
sns.lineplot(x=data["Date"], y=data["Temp"])
plt.ylabel("Temp")
plt.grid(axis="x")
plt.grid(axis="y", color="r", alpha=0.3)
plt.show()

png

Histogram #

plt.figure(figsize=(12, 6))
plt.hist(x=data["Temp"], rwidth=0.8)
plt.xlabel("Temp")
plt.ylabel("日数")
plt.grid(axis="y")
plt.show()

png

Autokorelasi dan Kolerogram #

Menggunakan pandas.plotting.autocorrelation_plot Periksa autokorelasi untuk memeriksa periodisitas data deret waktu. Secara kasar, autokorelasi adalah ukuran seberapa baik sinyal cocok dengan sinyal pergeseran waktu itu sendiri, dinyatakan sebagai fungsi dari besarnya pergeseran waktu.

plt.figure(figsize=(12, 6))
pd.plotting.autocorrelation_plot(data["Temp"])
plt.grid()
plt.axvline(x=365)
plt.xlabel("lag")
plt.ylabel("autocorrelation")
plt.show()

png

Uji Akar Unit #

Kami memeriksa untuk melihat apakah data merupakan proses unit root. Uji Augmented Dickey-Fuller digunakan untuk menguji hipotesis nol dari proses unit root.

statsmodels.tsa.stattools.adfuller

stattools.adfuller(data["Temp"], autolag="AIC")
(-4.444804924611697,
 0.00024708263003610177,
 20,
 3629,
 {'1%': -3.4321532327220154,
  '5%': -2.862336767636517,
  '10%': -2.56719413172842},
 16642.822304301197)

Memeriksa tren #

Garis tren ditarik dengan menyesuaikan polinomial satu dimensi ke deret waktu. Karena data dalam kasus ini hampir stasioner tren, hampir tidak ada tren.

numpy.poly1d — NumPy v1.22 Manual

def get_trend(timeseries, deg=3):
    """Membuat garis tren untuk data deret waktu

    Args:
        timeseries(pd.Series) : data deret waktu

    Returns:
        pd.Series: garis tren
    """
    x = list(range(len(timeseries)))
    y = timeseries.values
    coef = np.polyfit(x, y, deg)
    trend = np.poly1d(coef)(x)
    return pd.Series(data=trend, index=timeseries.index)

data["Trend"] = get_trend(data["Temp"])

plt.figure(figsize=(12, 6))
sns.lineplot(x=data["Date"], y=data["Temp"], alpha=0.5, label="Temp")
sns.lineplot(x=data["Date"], y=data["Trend"], label="トレンド")
plt.grid(axis="x")
plt.legend()
plt.show()

png

Suplemen: Jika ada tren yang jelas #

Garis hijau adalah garis tren.

data_sub = data.copy()
data_sub["Temp"] = (
    data_sub["Temp"] + np.log(data_sub["Date"].dt.year - 1980) * 10
)  # Dummy Trends
data_sub["Trend"] = get_trend(data_sub["Temp"])

plt.figure(figsize=(12, 6))
sns.lineplot(x=data_sub["Date"], y=data_sub["Temp"], alpha=0.5, label="Temp")
sns.lineplot(x=data_sub["Date"], y=data_sub["Trend"], label="トレンド")
plt.grid(axis="x")
plt.legend()
plt.show()

png