Time Series - Pemrosesan dan Visualisasi Data

Rangkaian Waktu adalah urutan pengamatan yang diindeks dalam interval waktu yang sama. Oleh karena itu, keteraturan dan kontinuitas harus dipertahankan dalam deret waktu mana pun.

Dataset yang akan kami gunakan adalah rangkaian waktu multi-variat yang memiliki data per jam selama kurang lebih satu tahun, untuk kualitas udara di kota Italia yang sangat tercemar. Dataset dapat diunduh dari tautan yang diberikan di bawah ini -https://archive.ics.uci.edu/ml/datasets/air+quality.

Penting untuk memastikan bahwa -

  • Deret waktu berjarak sama, dan

  • Tidak ada nilai atau celah yang berlebihan di dalamnya.

Jika deret waktu tidak kontinu, kita dapat menaikkan atau menurunkan sampel.

Menampilkan df.head ()

Dalam [122]:

import pandas

Dalam [123]:

df = pandas.read_csv("AirQualityUCI.csv", sep = ";", decimal = ",")
df = df.iloc[ : , 0:14]

Dalam [124]:

len(df)

Keluar [124]:

9471

Dalam [125]:

df.head()

Keluar [125]:

Untuk praproses deret waktu, kami memastikan tidak ada nilai NaN (NULL) dalam dataset; jika ada, kita dapat menggantinya dengan nilai 0 atau rata-rata atau sebelumnya atau setelahnya. Mengganti adalah pilihan yang lebih disukai daripada menjatuhkan sehingga kontinuitas deret waktu tetap terjaga. Namun, dalam dataset kami, beberapa nilai terakhir tampaknya NULL dan karenanya menjatuhkan tidak akan mempengaruhi kontinuitas.

Menjatuhkan NaN (Not-a-Number)

Dalam [126]:

df.isna().sum()
Out[126]:
Date             114
Time             114
CO(GT)           114
PT08.S1(CO)      114
NMHC(GT)         114
C6H6(GT)         114
PT08.S2(NMHC)    114
NOx(GT)          114
PT08.S3(NOx)     114
NO2(GT)          114
PT08.S4(NO2)     114
PT08.S5(O3)      114
T                114
RH               114
dtype: int64

Dalam [127]:

df = df[df['Date'].notnull()]

Dalam [128]:

df.isna().sum()

Keluar [128]:

Date             0
Time             0
CO(GT)           0
PT08.S1(CO)      0
NMHC(GT)         0
C6H6(GT)         0
PT08.S2(NMHC)    0
NOx(GT)          0
PT08.S3(NOx)     0
NO2(GT)          0
PT08.S4(NO2)     0
PT08.S5(O3)      0
T                0
RH               0
dtype: int64

Rangkaian Waktu biasanya diplot sebagai grafik garis terhadap waktu. Untuk itu sekarang kita akan menggabungkan kolom tanggal dan waktu dan mengubahnya menjadi objek datetime dari string. Ini dapat dilakukan dengan menggunakan pustaka datetime.

Mengonversi ke objek datetime

Dalam [129]:

df['DateTime'] = (df.Date) + ' ' + (df.Time)
print (type(df.DateTime[0]))

<class 'str'>

Dalam [130]:

import datetime

df.DateTime = df.DateTime.apply(lambda x: datetime.datetime.strptime(x, '%d/%m/%Y %H.%M.%S'))
print (type(df.DateTime[0]))

<class 'pandas._libs.tslibs.timestamps.Timestamp'>

Mari kita lihat bagaimana beberapa variabel seperti suhu berubah dengan perubahan waktu.

Menampilkan plot

Dalam [131]:

df.index = df.DateTime

Dalam [132]:

import matplotlib.pyplot as plt
plt.plot(df['T'])

Keluar [132]:

[<matplotlib.lines.Line2D at 0x1eaad67f780>]

Dalam [208]:

plt.plot(df['C6H6(GT)'])

Keluar [208]:

[<matplotlib.lines.Line2D at 0x1eaaeedff28>]

Plot kotak adalah jenis grafik berguna lainnya yang memungkinkan Anda menyingkat banyak informasi tentang kumpulan data menjadi satu grafik. Ini menunjukkan mean, kuartil 25% dan 75% dan outlier dari satu atau beberapa variabel. Dalam kasus ketika jumlah pencilan sedikit dan sangat jauh dari rata-rata, kita dapat menghilangkan pencilan dengan mengaturnya menjadi nilai rata-rata atau nilai kuartil 75%.

Menampilkan Boxplots

Dalam [134]:

plt.boxplot(df[['T','C6H6(GT)']].values)

Keluar [134]:

{'whiskers': [<matplotlib.lines.Line2D at 0x1eaac16de80>,
   <matplotlib.lines.Line2D at 0x1eaac16d908>,
   <matplotlib.lines.Line2D at 0x1eaac177a58>,
   <matplotlib.lines.Line2D at 0x1eaac177cf8>],
   'caps': [<matplotlib.lines.Line2D at 0x1eaac16d2b0>,
   <matplotlib.lines.Line2D at 0x1eaac16d588>,
   <matplotlib.lines.Line2D at 0x1eaac1a69e8>,
   <matplotlib.lines.Line2D at 0x1eaac1a64a8>],
   'boxes': [<matplotlib.lines.Line2D at 0x1eaac16dc50>,
   <matplotlib.lines.Line2D at 0x1eaac1779b0>],
   'medians': [<matplotlib.lines.Line2D at 0x1eaac16d4a8>,
   <matplotlib.lines.Line2D at 0x1eaac1a6c50>],
   'fliers': [<matplotlib.lines.Line2D at 0x1eaac177dd8>,
   <matplotlib.lines.Line2D at 0x1eaac1a6c18>],'means': []
}