keras: 数据预处理

pandas 是什么

pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析。它提供了大量高级的数据结构和对数据处理的方法。

pandas 有两个主要的数据结构:Series 和 DataFrame

Series

Series 是一个一维数组对象 ,类似于 NumPy 的一维 array。它除了包含一组数据还包含一组索引,所以可以把它理解为一组带索引的数组。

DataFrame

DataFrame 是一个表格型的数据结构。它提供有序的列和不同类型的列值。

 

import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten, LSTM, TimeDistributed, RepeatVector
from keras.layers.normalization import BatchNormalization
from keras.optimizers import Adam
from keras.callbacks import EarlyStopping, ModelCheckpoint
import matplotlib.pyplot as plt

 

1. read_csv


//1.1 字段的分隔符默认是“,” 默认文件是有header行的
//1.2 没有header是names怎么定?

//columns = ['user','activity','timestamp', 'x-axis', 'y-axis', 'z-axis'] 字符串列表

//pd.read_csv('data/WISDM_ar_v1.1_raw.txt', header = None, names = columns)

def readTrain():
  train = pd.read_csv("SPY.csv")
  return train

2 从年月日字符串得到:xxx


//pd.to_datetime("1993-01-29") ->
//Timestamp('1993-01-29 00:00:00')
//Timestamp.dt.(year/month/day/dayofweek)
def augFeatures(train):
  train["Date"] = pd.to_datetime(train["Date"])
  train["year"] = train["Date"].dt.year
  train["month"] = train["Date"].dt.month
  train["date"] = train["Date"].dt.day
  train["day"] = train["Date"].dt.dayofweek //得到是周几的方法
  return train

3 数据处理


//3.1 pandas 删除某列的方法:train.drop(["Date"], axis=1)
//3.2 apply函数: axis=0表示列操作,axis=1表示行操作

/*
    apply函数是`pandas`里面所有函数中自由度最高的函数。该函数如下:
    DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

    该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。

    这个函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据
    结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数
    会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。
 */

//3.3 normalize
// x - np.mean(x): 在平均值上下波动
// (x - np.mean(x)) / (np.max(x) - np.min(x)): 怎么解释?

def normalize(train):
  train = train.drop(["Date"], axis=1)
  train_norm = train.apply(lambda x: (x - np.mean(x)) / (np.max(x) - np.min(x)))
  return train_norm

4 DataFrame切片


//4.1 train.iloc[x:y]得到 DataFrame切片        (DataFrame)
//4.2 train.iloc[x:y][""]得到DataFrame的列    (Series)
//4.3 DataFrame/Series/list 类型转换为 array

def buildTrain(train, pastDay=30, futureDay=5):
  X_train, Y_train = [], []
  for i in range(train.shape[0]-futureDay-pastDay):
    X_train.append(np.array(train.iloc[i:i+pastDay]))
    Y_train.append(np.array(train.iloc[i+pastDay:i+pastDay+futureDay]["Adj Close"]))
  return np.array(X_train), np.array(Y_train)


5. np.random.shuffle(randomList)

//shuffle the training data
def shuffle(X,Y):
  np.random.seed(10)
  randomList = np.arange(X.shape[0])
  np.random.shuffle(randomList)// shuffle randomList
  return X[randomList], Y[randomList]

6 分为训练集和测试集


//切片[a:] 索引a开始包括a到结束
//切片[:b] 从开始到b,但不包括b

def splitData(X,Y,rate):
  X_train = X[int(X.shape[0]*rate):]
  Y_train = Y[int(Y.shape[0]*rate):]
  X_val = X[:int(X.shape[0]*rate)]
  Y_val = Y[:int(Y.shape[0]*rate)]
  return X_train, Y_train, X_val, Y_val
 

7. Matplotlib

//Seaborn 和 Matplotlib 数据可视化
Matplotlib 要求原始数据的输入类型为 Numpy 数组
1] 方法一
plt.figure(figsize=(3, 2))
plt.title("Title")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(np.arange(10), np.sin(np.arange(10)))

2] 方法二
f, ax = plt.subplots(figsize=(3, 2))
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_title("Title", fontsize=20)
ax.plot(np.arange(10), np.sin(np.arange(10)))

import seaborn as sns
// sns 设置绘图风格,也可以像matplotlib一样绘图
sns.set(style="white", context="talk")
sns.set(style='whitegrid', palette='muted', font_scale=1.5)

//设置图像细节的方法
from pylab import rcParams
rcParams['figure.figsize'] = 14, 8

https://www.cnblogs.com/douzujun/p/10327963.html

import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (5.0, 4.0)     # 显示图像的最大范围

 

7.1 one colum is Series对象


In [20]: dfactivity = df['activity']
In [21]: dfactivity?
Type:        Series
String form:
0          Jogging
           1          Jogging
           2          Jogging
           3          Jogging
           4          Jogging
           5  <...> 1    Sitting
           1098202    Sitting
           1098203    Sitting
           Name: activity, Length: 1098203, dtype: object
Length:      1098203
 

7.2想不到df['activity'].value_counts() 和df['activity']的数据类型都是Series;


//不同是String form
String form: 
In [22]: valuecounts = df['activity'].value_counts()
In [23]: valuecounts?
Type:        Series
String form:
Walking       424397
Jogging       342176
Upstairs      122869
Downstairs    100427
Sitting        59939
Standing       48395
Name: activity, dtype: int64
Length:      6

7.3 Series对象有plot成员函数?

df['activity'].value_counts().plot(kind='bar', title='Training examples by activity type')

7.4 Series对象都可以调用plot函数?答案是否定的

df['activity'].plot(kind='bar', title='Training examples by activity type')
//TypeError: Empty 'DataFrame': no numeric data to plot

7.5 x/y/z轴的相邻200元素的分布图

    data = df[df['activity'] == activity][['x-axis', 'y-axis', 'z-axis']][:200]
    axis = data.plot(subplots=True, figsize=(16, 12), 
                     title=activity)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值