Python與AI分析時(shí)間序列數(shù)據(jù)
簡(jiǎn)介
時(shí)間序列數(shù)據(jù)表示一系列特定時(shí)間內(nèi)的數(shù)據(jù)間隔.如果我們想在機(jī)器學(xué)習(xí)中構(gòu)建序列預(yù)測(cè),那么我們必須處理順序數(shù)據(jù)和時(shí)間.系列數(shù)據(jù)是順序數(shù)據(jù)的摘要.數(shù)據(jù)排序是序列數(shù)據(jù)的一個(gè)重要特征.
序列分析或時(shí)間序列分析的基本概念
序列分析或時(shí)間序列分析是基于先前觀察到的,在給定輸入序列中預(yù)測(cè)下一個(gè).預(yù)測(cè)可以是下一個(gè)可能出現(xiàn)的任何事情:符號(hào),數(shù)字,次日天氣,下一個(gè)語(yǔ)音等.序列分析在股票市場(chǎng)分析,天氣預(yù)報(bào)和產(chǎn)品推薦等應(yīng)用中非常方便.
示例
請(qǐng)考慮以下示例來(lái)了解序列預(yù)測(cè).這里A,B,C,D是給定值,您必須使用序列預(yù)測(cè)模型預(yù)測(cè)值E.
安裝實(shí)用軟件包
用于時(shí)間序列數(shù)據(jù)分析使用Python,我們需要安裝以下軟件包 :
Pandas
Pandas是一個(gè)開(kāi)源的BSD許可庫(kù),提供高性能,易于使用的數(shù)據(jù)結(jié)構(gòu)和Python數(shù)據(jù)分析工具.您可以使用以下命令安裝Pandas :
pip install pandas
如果您使用的是Anaconda并希望使用conda包管理器進(jìn)行安裝,那么您可以使用以下命令 :
conda install -c anaconda pandas
hmmlearn
這是一個(gè)開(kāi)源的BSD -licensed庫(kù),由簡(jiǎn)單的算法和模型組成,用于學(xué)習(xí)Python中的隱馬爾可夫模型(HMM).你可以在以下命令的幫助下安裝它 :
pip install hmmlearn
如果您使用的是Anaconda并希望使用conda包管理器進(jìn)行安裝,那么您可以使用以下命令 :
conda install -c omnia hmmlearn
PyStruct
這是一個(gè)結(jié)構(gòu)化學(xué)習(xí),預(yù)測(cè)庫(kù).在PyStruct中實(shí)現(xiàn)的學(xué)習(xí)算法具有諸如條件隨機(jī)場(chǎng)(CRF),最大邊緣馬爾可夫隨機(jī)網(wǎng)絡(luò)(M3N)或結(jié)構(gòu)支持向量機(jī)之類(lèi)的名稱(chēng).你可以借助以下命令安裝它 :
pip install pystruct
CVXOPT
它用于基于Python編程語(yǔ)言的凸優(yōu)化.它也是一個(gè)免費(fèi)的軟件包.您可以使用以下命令和減號(hào)安裝它;
pip install cvxopt
如果您使用的是Anaconda并希望使用conda軟件包管理器進(jìn)行安裝,那么您可以使用以下命令 :
conda install -c anaconda cvdoxt
Pandas:處理,切片和從時(shí)間序列數(shù)據(jù)中提取統(tǒng)計(jì)數(shù)據(jù)
如果您必須使用時(shí)間序列數(shù)據(jù),Pandas是一個(gè)非常有用的工具.在Pandas的幫助下,您可以執(zhí)行以下 :
- 使用創(chuàng)建一系列日期pd.date_rangepackage
- 使用pd.Series包索引帶有日期的pandas
- 使用ts.resample包進(jìn)行重新采樣
- 更改頻率
示例
以下示例顯示您使用以下方式處理和切片時(shí)間序列數(shù)據(jù)大熊貓.請(qǐng)注意,這里我們使用的是每月北極濤動(dòng)數(shù)據(jù),可以從 monthly.ao.index.b50.current.ascii ,可以轉(zhuǎn)換為文本格式供我們使用.
處理時(shí)間序列數(shù)據(jù)
對(duì)于處理時(shí)間序列數(shù)據(jù),您必須執(zhí)行以下步驟 :
第一步涉及導(dǎo)入以下包 :
import numpy as np import matplotlib.pyplot as plt import pandas as pd
接下來(lái),定義一個(gè)函數(shù),它將從輸入文件中讀取數(shù)據(jù),如下面給出的代碼所示 :
def?read_data(input_file): input_data?=?np.loadtxt(input_file,?delimiter?=?None)
現(xiàn)在,將此數(shù)據(jù)轉(zhuǎn)換為時(shí)間序列.為此,請(qǐng)創(chuàng)建我們時(shí)間序列的日期范圍.在這個(gè)例子中,我們保留一個(gè)月的數(shù)據(jù)頻率.我們的文件的數(shù)據(jù)從1950年1月開(kāi)始.
dates = pd.date_range('1950-01', periods = input_data.shape[0], freq = 'M')
在這一步中,我們?cè)赑andas系列的幫助下創(chuàng)建時(shí)間序列數(shù)據(jù),如下圖所示 :
output = pd.Series(input_data[:, index], index = dates) return output if __name__=='__main__':
輸入輸入文件的路徑,如下所示 :
input_file = "/Users/admin/AO.txt"
現(xiàn)在,將列轉(zhuǎn)換為時(shí)間序列格式,如下所示 :
timeseries = read_data(input_file)
最后,使用顯示和減去的命令繪制和可視化數(shù)據(jù);
plt.figure() timeseries.plot() plt.show()
您將觀察到如下圖所示的圖形 :
切片時(shí)間序列數(shù)據(jù)
切片只涉及檢索時(shí)間序列數(shù)據(jù)的某些部分.作為示例的一部分,我們僅從1980年到1990年對(duì)數(shù)據(jù)進(jìn)行切片.觀察執(zhí)行此任務(wù)的以下代碼 :
timeseries['1980':'1990'].plot() ? <matplotlib.axes._subplots.AxesSubplot at 0xa0e4b00> plt.show()
當(dāng)您運(yùn)行切片時(shí)間序列數(shù)據(jù)的代碼時(shí),您可以將以下圖表視為圖中顯示的是 :
提取來(lái)自時(shí)間序列數(shù)據(jù)的統(tǒng)計(jì)數(shù)據(jù)
如果需要得出一些重要結(jié)論,則必須從給定數(shù)據(jù)中提取一些統(tǒng)計(jì)數(shù)據(jù).平均值,方差,相關(guān)性,最大值和最小值是一些此類(lèi)統(tǒng)計(jì)數(shù)據(jù).如果要從給定的時(shí)間序列數(shù)據(jù)中提取此類(lèi)統(tǒng)計(jì)數(shù)據(jù),可以使用以下代碼;
平均值
您可以使用mean()函數(shù),用于查找均值,如此處所示 :
timeseries.mean()
然后,您將針對(duì)所討論的示例觀察到的輸出是 :
-0.11143128165238671
最大值
您可以使用max()功能查找最大值,如下所示 :
timeseries.max()
然后,您將針對(duì)所討論的示例觀察到的輸出是 :
3.4952999999999999
最小值
您可以使用min()函數(shù)查找最小值,如下所示 :
timeseries.min()
然后,您將針對(duì)所討論的示例觀察到的輸出是 :
-4.2656999999999998
一次性獲取所有內(nèi)容
如果您想一次計(jì)算所有統(tǒng)計(jì)數(shù)據(jù),可以使用describe()函數(shù),如下所示 :
timeseries.describe()
然后,您將針對(duì)所討論的示例觀察到的輸出是 :
count 817.000000
mean -0.111431
std 1.003151
min -4.265700
25% -0.649430
50% -0.042744
75% 0.475720
max 3.495300
dtype: float64
重新采樣
您可以將數(shù)據(jù)重新采樣到不同的時(shí)間頻率.執(zhí)行重新采樣的兩個(gè)參數(shù)是 :
時(shí)間段
方法
使用mean()重新采樣
您可以使用以下代碼使用mean()重新采樣數(shù)據(jù)方法,這是默認(rèn)方法 :
timeseries_mm?=?timeseries.resample("A").mean() timeseries_mm.plot(style?=?'g--') plt.show()
然后,您可以觀察以下圖表作為重采樣的輸出使用mean() :
Re -sampling with median()
您可以使用以下代碼使用median()方法重新取樣數(shù)據(jù) :
timeseries_mm?=?timeseries.resample("A").median() timeseries_mm.plot() plt.show()
然后,您可以觀察下圖作為重新采樣的輸出,其中位數(shù)為() :
滾動(dòng)平均值
您可以使用以下代碼計(jì)算滾動(dòng)(移動(dòng))均值和減去;
timeseries.rolling(window = 12, center = False).mean().plot(style = '-g') plt.show()
然后,您可以觀察下圖作為滾動(dòng)的輸出(移動(dòng))mean :
通過(guò)隱馬爾可夫分析順序數(shù)據(jù)模型(HMM)
HMM是一種統(tǒng)計(jì)模型,廣泛用于具有延續(xù)性和可擴(kuò)展性的數(shù)據(jù),如時(shí)間序列股票市場(chǎng)分析,健康檢查和語(yǔ)音反饋gnition.本節(jié)詳細(xì)介紹了使用隱馬爾可夫模型(HMM)分析順序數(shù)據(jù).
隱馬爾可夫模型(HMM)
HMM是一個(gè)隨機(jī)模型這是建立在馬爾可夫鏈概念的基礎(chǔ)上的,該假設(shè)未來(lái)統(tǒng)計(jì)數(shù)據(jù)的概率僅取決于當(dāng)前的過(guò)程狀態(tài)而不是之前的任何狀態(tài).例如,當(dāng)擲硬幣時(shí),我們不能說(shuō)第五次拋擲的結(jié)果將是一個(gè)頭.這是因?yàn)橛矌艣](méi)有任何記憶,下一個(gè)結(jié)果不依賴(lài)于之前的結(jié)果.
數(shù)學(xué)上,HMM由以下變量和減號(hào)組成;
狀態(tài)(S)
它是HMM中存在的一組隱藏或潛在狀態(tài).它由S表示.
輸出符號(hào)(O)
它是HMM中存在的一組可能的輸出符號(hào).它由O表示.
狀態(tài)轉(zhuǎn)換概率矩陣(A)
它是從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)的概率狀態(tài).它由A表示.
觀察發(fā)射概率矩陣(B)
它是在特定狀態(tài)下發(fā)射/觀察符號(hào)的概率.它用B表示.
先驗(yàn)概率矩陣(Π)
它是從系統(tǒng)的各種狀態(tài)開(kāi)始于特定狀態(tài)的概率.它由Π表示.
因此,HMM可以定義為λ=(S,O,A,B,π),
其中,
S = {s1,s2,...,sN}是一組N個(gè)可能的狀態(tài),
O = {o1,o2,...,oM}是一組M個(gè)可能的觀察符號(hào),
A是N
以上就是Python與AI分析時(shí)間序列數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python AI分析時(shí)間序列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用Python實(shí)現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉(zhuǎn)換
這篇文章主要介紹了用Python實(shí)現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉(zhuǎn)換,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10Python返回?cái)?shù)組/List長(zhǎng)度的實(shí)例
今天小編就為大家分享一篇Python返回?cái)?shù)組/List長(zhǎng)度的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06python的命名規(guī)則知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是關(guān)于python的命名規(guī)則知識(shí)點(diǎn)總結(jié),有需要的朋友們可以參考下。2019-10-10自動(dòng)化測(cè)試時(shí)基于Python常用的幾個(gè)加密算法總結(jié)
這幾天做自動(dòng)化測(cè)試,遇到一個(gè)問(wèn)題,那就是接口的請(qǐng)求的密碼是加密的,產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請(qǐng)求的時(shí)候,使用加密算法處理后的數(shù)據(jù)傳參,本文主要是整理了幾個(gè)加密算法,以便后續(xù)測(cè)試使用,需要的朋友可以參考下2023-12-12python實(shí)現(xiàn)class對(duì)象轉(zhuǎn)換成json/字典的方法
這篇文章主要介紹了python實(shí)現(xiàn)class對(duì)象轉(zhuǎn)換成json/字典的方法,結(jié)合實(shí)例形式分析了Python類(lèi)型轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2016-03-03Python中函數(shù)的多種格式和使用實(shí)例及小技巧
這篇文章主要介紹了Python中函數(shù)的多種格式和使用實(shí)例及小技巧,本文講解了普通格式、帶收集位置參數(shù)的函數(shù)、帶收集關(guān)鍵字參數(shù)的函數(shù)、函數(shù)特殊用法、內(nèi)嵌函數(shù)和閉包等內(nèi)容,需要的朋友可以參考下2015-04-04Python unittest單元測(cè)試框架總結(jié)
這篇文章主要介紹了Python unittest單元測(cè)試框架總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09詳細(xì)解析Python中的變量的數(shù)據(jù)類(lèi)型
這篇文章主要介紹了詳細(xì)解析Python中的變量的數(shù)據(jù)類(lèi)型,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05舉例講解Django中數(shù)據(jù)模型訪(fǎng)問(wèn)外鍵值的方法
這篇文章主要介紹了舉例講解Django中數(shù)據(jù)模型訪(fǎng)問(wèn)外鍵值的方法,Django是最具人氣的Python web開(kāi)發(fā)框架,需要的朋友可以參考下2015-07-07Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明
這篇文章主要介紹了Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03