Periksa Dataset

Timeseries

Periksa Dataset

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()

lineplot untuk melihat seperti apa siklusnya (diagram)

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()

Histogram (diagram)

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()

Secara kasar, autokorelasi adalah ukuran seberapa baik sinya… (diagram)

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()

22 Manual (diagram)

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()

Garis hijau adalah garis tren (diagram)