数据科学与python语言——Pandas统计分析基础(时间转换+聚合)

Pandas统计分析基础(时间转换+聚合)

实验要求一

在这里插入图片描述

#M表的时间戳类型转为datetime
data_Mete['TIMESTAMP']=pd.to_datetime(data_Mete['TIMESTAMP'],format='%Y%m%d%H%M%S')

在这里插入图片描述

data_VI['Date']=pd.to_datetime(data_VI['Date'],format='%Y/%m/%d')
print(data_VI['Date'])

在这里插入图片描述


#M表添加一个Date列 只包含年月日 
data_Mete['Date']=[i.date() for i in data_Mete['TIMESTAMP']]
#根据Date分组 聚合到日
data_Mete_group=data_Mete.groupby(by='Date',as_index=False)
#对于每一个分组各列的多个值应用不同的方法
data1=data_Mete_group.agg({
    
    'TA':[np.max,np.min,np.mean],'P':np.sum,'RG':np.mean,'GPP':np.mean,'GPP_QC':calpercent})
print(data1)

在这里插入图片描述

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

def calpercent(data):#计算0和1占比
    cnt01=sum(data==0)+sum(data==1)
    
    return cnt01/data.size
data_Mete=pd.read_csv('./data/Mete_FR-Gri.csv')
data_VI=pd.read_csv('./data/VI_FR-Gri.csv')


#M表的时间戳类型转为datetime
data_Mete['TIMESTAMP']=pd.to_datetime(data_Mete['TIMESTAMP'],format='%Y%m%d%H%M%S')
print(data_Mete['TIMESTAMP'])
data_VI['Date']=pd.to_datetime(data_VI['Date'],format='%Y/%m/%d')
print(data_VI['Date'])



#M表添加一个Date列 只包含年月日 
data_Mete['Date']=[i.date() for i in data_Mete['TIMESTAMP']]
#根据Date分组 聚合到日
data_Mete_group=data_Mete.groupby(by='Date',as_index=False)


#对于每一个分组各列的多个值应用不同的方法
data1=data_Mete_group.agg({
    
    'TA':[np.max,np.min,np.mean],'P':np.sum,'RG':np.mean,'GPP':np.mean,'GPP_QC':calpercent})
print(data1)
#重置列名
data1.columns=['Date','TA_Max', 'TA_Min', 'TA_Mean', 'P', 'RG', 'GPP', 'GPP_QC']


data1['Date']=pd.to_datetime(data1['Date'])
print(data1['Date'])
mergedata=pd.merge(data1,data_VI,on='Date')#两个表按照日期列合并

mergedata.to_csv('./1test5_1.csv')
print('合并表格完成')

实验二要求

在这里插入图片描述

全部代码


import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

def calpercent(data):#计算0和1占比
    cnt01=sum(data==0)+sum(data==1)
    
    return cnt01/data.size
data_Mete=pd.read_csv('./data/Mete_FR-Gri.csv')
data_VI=pd.read_csv('./data/VI_FR-Gri.csv')


#M表的时间戳类型转为datetime
data_Mete['TIMESTAMP']=pd.to_datetime(data_Mete['TIMESTAMP'],format='%Y%m%d%H%M%S')
print(data_Mete['TIMESTAMP'])
data_VI['Date']=pd.to_datetime(data_VI['Date'],format='%Y/%m/%d')
print(data_VI['Date'])



#M表添加一个Date列 只包含年月日 
data_Mete['Date']=[i.date() for i in data_Mete['TIMESTAMP']]
#根据Date分组 聚合到日
data_Mete_group=data_Mete.groupby(by='Date',as_index=False)
#对于每一个分组各列的多个值应用不同的方法
data1=data_Mete_group.agg({
    
    'TA':[np.max,np.min,np.mean],'P':np.sum,'RG':np.mean,'GPP':np.mean,'GPP_QC':calpercent})
print(data1)
#重置列名
data1.columns=['Date','TA_Max', 'TA_Min', 'TA_Mean', 'P', 'RG', 'GPP', 'GPP_QC']


data1['Date']=pd.to_datetime(data1['Date'])
print(data1['Date'])
mergedata=pd.merge(data1,data_VI,on='Date')#两个表按照日期列合并

mergedata.to_csv('./1test5_1.csv')
print('合并表格完成')














def fixGppQc(data):#将GppQC值大于0.5的天数不足15天的月份的GppQC标为2 
    if sum(data>=0.5)<15:
        return 2
    else:
        return 1
#在(1)的基础上进行
data0=mergedata
#提取年月并将日均置为1 添加到新的一列
data0['newdate']=data0['Date'].map(lambda x: 10000*x.year + 100*x.month+1)
#TA_Range--气温日较差
data0['TA_Range']=data0['TA_Max']-data0['TA_Min']
#根据年月分组(日均为1)
data0group=data0.groupby(by='newdate',as_index=False)
data2=data0group.agg({
    
    'TA_Range':np.mean,'TA_Mean':np.mean,'P':np.sum,'RG':np.mean,'GPP':np.mean,'GPP_QC':fixGppQc,'EVI':np.mean,'NDVI':np.mean})
#将无效的GPP置为空值
data2.loc[data2['GPP_QC']==2,'GPP']=np.NaN
#修改列名
data2=data2.rename(columns={
    
    'newdate':'Date'})
data2['Date']=pd.to_datetime(data2['Date'],format='%Y%m%d')
# data2

data3=data2.dropna()#剔除空值
# data3
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

plt.figure(figsize=(8,7.2))

print('画出各个因素与光合作用的相关性柱状图')
cols=['TA_Mean','TA_Range','RG','P','NDVI']
corrs=[data3['GPP'].corr(data3[i]) for i in cols]#计算GPP与五列数据间的相关系数
index=np.arange(len(cols))

for col,corr in zip(cols,corrs):#画出每个列与GPP相关系数的柱状图
    plt.bar(col,corr)

plt.ylabel('与GPP的相关系数',fontsize=12)
plt.xlabel('与GPP的相关因素',fontsize=12)
plt.legend(['平均气温','气温日较差','太阳辐射','降水','NDVI'],loc=2)
plt.savefig('./test5_2.jpg')
plt.show()

input('按回车结束')



猜你喜欢

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