Chuỗi thời gian - Xử lý và trực quan hóa dữ liệu
Chuỗi thời gian là một chuỗi các quan sát được lập chỉ mục trong các khoảng thời gian cách đều nhau. Do đó, thứ tự và tính liên tục nên được duy trì trong bất kỳ chuỗi thời gian nào.
Tập dữ liệu mà chúng tôi sẽ sử dụng là một chuỗi thời gian đa biến thể có dữ liệu hàng giờ trong khoảng một năm, về chất lượng không khí ở một thành phố bị ô nhiễm nghiêm trọng của Ý. Tập dữ liệu có thể được tải xuống từ liên kết dưới đây -https://archive.ics.uci.edu/ml/datasets/air+quality.
Cần phải đảm bảo rằng -
Chuỗi thời gian cách đều nhau và
Không có giá trị thừa hoặc khoảng trống trong đó.
Trong trường hợp chuỗi thời gian không liên tục, chúng tôi có thể lấy mẫu lên hoặc lấy mẫu xuống.
Hiển thị df.head ()
Trong [122]:
import pandas
Trong [123]:
df = pandas.read_csv("AirQualityUCI.csv", sep = ";", decimal = ",")
df = df.iloc[ : , 0:14]
Trong [124]:
len(df)
Hết [124]:
9471
Trong [125]:
df.head()
Ra [125]:
Để xử lý trước chuỗi thời gian, chúng tôi đảm bảo không có giá trị NaN (NULL) nào trong tập dữ liệu; nếu có, chúng ta có thể thay thế chúng bằng 0 hoặc giá trị trung bình hoặc giá trị đứng trước hoặc kế tiếp. Thay thế là lựa chọn ưu tiên hơn là giảm xuống để duy trì tính liên tục của chuỗi thời gian. Tuy nhiên, trong tập dữ liệu của chúng tôi, một số giá trị cuối cùng dường như là NULL và do đó việc giảm sẽ không ảnh hưởng đến tính liên tục.
Bỏ NaN (Not-a-Number)
Trong [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
Trong [127]:
df = df[df['Date'].notnull()]
Trong [128]:
df.isna().sum()
Ra [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
Chuỗi thời gian thường được vẽ dưới dạng đồ thị đường so với thời gian. Đối với điều đó, bây giờ chúng ta sẽ kết hợp cột ngày và giờ và chuyển đổi nó thành một đối tượng datetime từ các chuỗi. Điều này có thể được thực hiện bằng cách sử dụng thư viện datetime.
Chuyển đổi sang đối tượng datetime
Trong [129]:
df['DateTime'] = (df.Date) + ' ' + (df.Time)
print (type(df.DateTime[0]))
<class 'str'>
Trong [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'>
Hãy để chúng tôi xem một số biến như nhiệt độ thay đổi theo thời gian như thế nào.
Hiển thị các lô
Trong [131]:
df.index = df.DateTime
Trong [132]:
import matplotlib.pyplot as plt
plt.plot(df['T'])
Hết [132]:
[<matplotlib.lines.Line2D at 0x1eaad67f780>]
Trong [208]:
plt.plot(df['C6H6(GT)'])
Hết [208]:
[<matplotlib.lines.Line2D at 0x1eaaeedff28>]
Biểu đồ hộp là một loại biểu đồ hữu ích khác cho phép bạn cô đọng nhiều thông tin về tập dữ liệu thành một biểu đồ duy nhất. Nó cho thấy phần tư trung bình, 25% và 75% và các giá trị ngoại lệ của một hoặc nhiều biến. Trong trường hợp số lượng giá trị ngoại lệ là ít và rất xa giá trị trung bình, chúng ta có thể loại bỏ các giá trị ngoại lệ bằng cách đặt chúng thành giá trị trung bình hoặc 75% giá trị tứ phân vị.
Hiển thị Boxplots
Trong [134]:
plt.boxplot(df[['T','C6H6(GT)']].values)
Hết [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': []
}