不同类型数据的处理与建模
立即解锁
发布时间: 2025-08-30 01:11:45 阅读量: 13 订阅数: 12 AIGC 

# 不同类型数据处理与建模全解析
## 1. 时间序列建模
时间在许多人类行为中起着基础性作用,因此,人工智能驱动的物联网系统需要知道如何处理与时间相关的数据。时间可以显式表示,例如按固定间隔捕获数据,时间戳也是数据的一部分;也可以隐式表示,例如在语音或书面文本中。用于捕捉时间相关数据内在模式的方法称为时间序列建模。
### 1.1 时间序列数据获取
以苹果股票价格数据为例,它是一种时间序列数据。可以从纳斯达克网站(https://www.nasdaq.com/symbol/aapl/historical)下载,也可以使用`pandas_datareader`模块直接下载。安装`pandas_datareader`的命令如下:
```bash
pip install pandas_datareader
```
以下代码从雅虎财经下载 2010 年 1 月 1 日至 2015 年 12 月 31 日的苹果公司股票价格:
```python
import datetime
from pandas_datareader import DataReader
%matplotlib inline
Apple = DataReader("AAPL", "yahoo",
start=datetime.datetime(2010, 1, 1),
end=datetime.datetime(2015,12,31))
Apple.head()
```
下载的`DataFrame`包含每个工作日的最高价、最低价、开盘价、收盘价、成交量和调整收盘价。
### 1.2 数据可视化
使用以下代码绘制调整收盘价:
```python
close = Apple['Adj Close']
plt.figure(figsize= (10,10))
close.plot()
plt.ylabel("Apple stocj close price")
plt.show()
```
### 1.3 时间序列建模要素
要对时间序列数据进行建模,需要识别趋势、季节性和平稳性。
- **趋势**:指测量值随时间平均是增加还是减少。最常见的方法是绘制移动平均线:
```python
moving_average = close.rolling(window=20).mean()
plt.figure(figsize= (10,10))
close.plot(label='Adj Close')
moving_average.plot(label='Moving Average Window 20')
plt.legend(loc='best')
plt.show()
```
对于时间序列建模,需要对数据进行去趋势处理。可以通过从原始信号中减去趋势(移动平均线)来实现,也可以使用一阶差分方法:
```python
fod = close.diff()
plt.figure(figsize= (10,10))
fod.plot(label='First order difference')
fod.rolling(window=40).mean().plot(label='Rolling Average')
plt.legend(loc='best')
plt.show()
```
- **季节性**:指与时间相关的高低值定期重复模式。最简单的方法是查找数据中的自相关性。找到季节性后,可以通过与季节长度对应的时间滞后对数据进行差分来去除它:
```python
plt.figure(figsize= (10,10))
fod.plot(label='First order difference')
fod.rolling(window=40).mean().plot(label='Rolling Average')
fod.rolling(window=40).corr(fod.shift(5)).plot(label='Auto correlation')
plt.legend(loc='best')
plt.show()
```
- **平稳性**:指序列的均值不再是时间的函数。数据的平稳性对于时间序列建模至关重要。可以通过去除数据中的任何趋势或季节性来实现平稳性。一旦数据平稳,就可以使用回归模型进行建模。
### 1.4 深度学习模型准备
如果计划使用深度学习模型(如 RNN 或 LSTM),在确认时间序列的平稳性后,还需要对数据进行归一化处理,并使用滑动窗口变换将序列转换为输入 - 输出对。
- **归一化**:
```python
from sklearn.preprocessing import MinMaxScaler
def normalize(data):
x = data.values.reshape(-1,1)
pre_process = MinMaxScaler()
x_normalized = pre_process.fit_transform(x)
return x_normalized
x_norm = normalize(close)
plt.figure(figsize= (10,10))
pd.DataFrame(x_norm, index = close.index).plot(label="Normalized Stock prices")
plt.legend(loc='best')
plt.show()
```
- **滑动窗口变换**:
```python
import numpy as np
def window_transform(series, window_size):
X = []
y = []
for i in range(len(series) - window_size):
X.append(series[i:i+window_size])
y.append(series[i+window_size])
X = np.asarray(X)
X.shape = (np.shape(X)[0:2])
y = np.asarray(y)
y.shape = (len(y),1)
return X,y
window_size = 7
X,y = window_transform(x_norm,window_size = window_size)
```
## 2. 文本数据预处理
语言在日常生活中非常重要。对于人类来说,阅读书面文本很自然,但计算机如何处理呢?我们可以训练深度学习模型来猜测下一个单词或字符。但计算机只能理解二进制,因此需要对文本数据进行预处理。
### 2.1 读取文本
以艾萨克·阿西莫夫的科幻小说《基地》中的一段文本为例,首先读取文本:
```python
f = open('foundation.txt')
text = f.read()
print(text)
```
### 2.2 数据清理
去除文本中的标点符号:
```python
import re
text = re.sub(r"[^a-zA-Z0-9]", " ", text)
print(text)
```
### 2.3 文本归一化
将文本转换为小写:
```python
text = text.lower()
print(text)
```
### 2.4 分词
可以使用`split`函数或强大的`NLTK`模块进行分词。以下是使用`NLTK`的词分词器的示例:
```python
import os
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
words_nltk = word_tokenize(text)
print(words_nltk)
```
### 2.5 去除停用词
停用词是大多数文本样本中常见的词,对文本的上下文或含义没有额外信息。可以使用`NLTK`提供的停用词列表去除英文停用词:
```python
from nltk.corpus import stopwords
nltk.download('stopwords')
words = [w for w in words if w not in stopwords.words("english")]
```
### 2.6 词干提取和词形还原
可以使用`PorterStemm
0
0
复制全文
相关推荐










