Time-series-data-processing-and-visualization

提供:Dev Guides
移動先:案内検索

時系列-データ処理と視覚化

時系列は、等間隔の時間間隔でインデックス付けされた一連の観測です。 したがって、順序と連続性はどの時系列でも維持される必要があります。

使用するデータセットは、イタリアの都市が著しく汚染されている大気の質について、約1年間の1時間ごとのデータを持つ多変量時系列です。 データセットは、以下のリンクからダウンロードできます-https://archive.ics.uci.edu/ml/datasets/air+quality。

それを確認する必要があります-

  • 時系列は等間隔であり、
  • 冗長な値やギャップはありません。

時系列が連続していない場合、アップサンプリングまたはダウンサンプリングできます。

df.head()を表示

[122]で:

import pandas

[123]で:

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

[124]で:

len(df)

アウト[124]:

9471

[125]で:

df.head()

アウト[125]:

コードスニペット

時系列の前処理では、データセットにNaN(NULL)値がないことを確認します。ある場合は、0またはaverageまたは前後の値に置き換えることができます。 時系列の連続性が維持されるように、ドロップよりも置換をお勧めします。 ただし、このデータセットでは、最後のいくつかの値はNULLのように見えるため、ドロップしても連続性に影響しません。

NaN(Not-a-Number)のドロップ

[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

[127]で:

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

[128]で:

df.isna().sum()

アウト[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

時系列は通常、時間に対する折れ線グラフとしてプロットされます。 そのために、日付と時刻の列を組み合わせて、文字列から日時オブジェクトに変換します。 これは、日時ライブラリを使用して実現できます。

日時オブジェクトへの変換

[129]で:

df['DateTime'] = (df.Date) + ' ' + (df.Time)
print (type(df.DateTime[0]))
*<クラス 'str'>*

[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]))

<クラス 'pandas._libs.tslibs.timestamps.Timestamp'>

温度などの変数が時間の変化とともにどのように変化するかを見てみましょう。

プロットを表示する

[131]で:

df.index = df.DateTime

[132]で:

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

アウト[132]:

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

コードスニペット4

[208]で:

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

アウト[208]:

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

ボックスプロットは、データセットに関する多くの情報を1つのグラフにまとめることができる、もう1つの便利なグラフです。 1つまたは複数の変数の平均、25%および75%の四分位数および外れ値を示します。 外れ値の数が少なく、平均から非常に離れている場合、それらを平均値または75%四分位値に設定することにより、外れ値を排除できます。

ボックスプロットの表示

[134]で:

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

アウト[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': []
}

コードスニペット5