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

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

Komentar

(Komentar akan muncul setelah disetujui)