数据科学与python——Pandas统计分析基础(数据堆叠+数据清洗)

数据:
链接:https://pan.baidu.com/s/1-E2ShVTdI0X5lwDtMLFFsQ
提取码:0929

一.合并数据:获取完整的数据集。

1.读取数据

#数据所在的文件
metepath='./part/mete10-14.csv'
vipath='./part/vi10-14.csv'
# 读取数据
data_mete=pd.read_csv(metepath)
data_vi=pd.read_csv(vipath)

2.将两个csv文件按照mete.csv文件的日期对齐

按日期行向合并part文件夹下的两个csv,这两个文件日期范围不同,按照mete.csv文件的日期对齐;合并后的数据命名为data1

# 按日期行向合并part文件夹下的两个csv,按照mete.csv文件的日期对齐;
# <br/>合并后的数据命名为data1;
# <br/>若合并后的数据中有无效值,则使用无效值其所在列的平均值填充。
data1=pd.merge(data_mete,data_vi,on='Date',how='left')
data1['Date']=pd.to_datetime(data1['Date'])
data1=data1.fillna({
    
    'NDVI':np.mean(data1['NDVI']),'EVI':np.mean(data1['EVI'])})


3.纵向合并数据data1与data2

# 读取comb下面的csv文件,命名为data2;
# <br/>纵向堆叠合并data1和data2;
# <br/>堆叠之后需要去除重复数据;得到的数据命名为data3。
combpath='./comb/data04-10.csv'
data2=pd.read_csv(combpath)
#将日期转化为标准日期格式
data2['Date']=pd.to_datetime(data2['Date'])


#纵向堆叠合并data1和data2
data3=pd.concat([data1,data2],axis=0)
data3['Date']=pd.to_datetime(data3['Date'])

4.使用drop_duplicates()函数去除重复值

去除重复值并且按照日期重新排序

#data1和data2中具有重复的数据,堆叠之后需要去除重复数据;这一步得到的数据命名为data3
data3=data3.drop_duplicates()
#更改数据的排序方式按照日期从小到大排
data3.sort_values(by = 'Date',inplace=True)

二.异常值处理:去除data3中GPP中的异常点

1.根据3σ原则检测异常值,去除异常点记录

# 根据3σ原则检测GPP中的异常值,从data3中去除异常点记录
#数值分布在(μ-3σ,μ+3σ)中的概率为0.9974
#可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)]区间内,超出这个范围的可能性仅占不到0.3%。
print('去除异常值')
gpp_max=data3['GPP'].mean()+3*data3['GPP'].std()
gpp_min=data3['GPP'].mean()-3*data3['GPP'].std()
data3=data3.loc[(data3['GPP']>gpp_min)&(data3['GPP']<gpp_max),: ]

三.3 对GPP进行神经网络建模

使用2010年及以前的数据作为训练集,2010年以后的数据作为测试集,使用训练数据训练模型,测试数据仅用于测试模型
将TA、VPD、RG、NDVI、EVI列作为特征(输入),将GPP列作为标签(输出)

1.划分数据集

手动划分

train=data3.loc[data3['Date'].dt.year<=2010].copy()
test=data3.loc[data3['Date'].dt.year>2010].copy()
x_train=train[['TA','VPD','RG','NDVI','EVI']]
y_train=train[['GPP']]
x_test=test[['TA','VPD','RG','NDVI','EVI']]
y_test=test[['GPP']]
    

随机划分


from sklearn.model_selection import train_test_split 
 #在机器学习中,该函数可按照用户设定的比例,
 #随机将样本集合划分为训练集 和测试集,
 #并返回划分好的训练集和测试集数据

数据标准化处理

建模之前要对所有输入数据标准化,标准化方式使用标准差标准化;两个数据集的标准化过程中均使用训练集变量的平均值和方差

#(3)	建模之前要对所有输入数据标准化,标准化方式使用标准差标准化;两个数据集的标准化过程中均使用训练集变量的平均值和方差
from sklearn.preprocessing import StandardScaler
# 将训练集和测试集数据进行标准差标准化
scaler=StandardScaler()
x_tr=scaler.fit_transform(x_train.values)
y_tr=scaler.fit_transform(y_train.values.reshape(-1,1)).ravel()
x_te=scaler.fit_transform(x_test.values)
y_te=scaler.fit_transform(y_test.values.reshape(-1,1)).ravel()

增加新的一列来存储数据

#对处于不同气温区间的数据进行标记
#(1)	将气温划分成4个级别:very_low, low, normal, high;他们的温度范围为
#增加新一列为温度的水平
test.loc[(test['TA']>-10) &(test['TA']<=0),'TA_Level']='very_low'
test.loc[(test['TA']>0) &(test['TA']<=10),'TA_Level']='low'
test.loc[(test['TA']>10) &(test['TA']<=20),'TA_Level']='normal'
test.loc[(test['TA']>20) &(test['TA']<=30),'TA_Level']='high'
train.to_csv('test6_train.csv',index=False)
test.to_csv('test6_test.csv',index=False)

猜你喜欢

转载自blog.csdn.net/qq_50675813/article/details/121439348