使用R或Python将每日温度数据转换为每月和季节

时间:2015-03-10 16:39:09

标签: python r

我有大约8年的日常温度数据,我想首先转换为每月,然后转换为季节性数据(下面的示例)

X    date      maxtp
1   20-Aug-07   19.1
2   21-Aug-07   17.6
3   22-Aug-07   21.8
4   23-Aug-07   20.0
5   24-Aug-07   22.4
6   25-Aug-07   21.2
7   26-Aug-07   19.3
8   27-Aug-07   17.5
9   28-Aug-07   18.9
10  29-Aug-07   18.3
11  30-Aug-07   19.5

基本上我希望观察到的系列分为四个子系列,包含同一季节的3个月块(冬季,春季,夏季,秋季)。

每个区块应包含每日温度值(我不想要月平均值等)。

我非常感谢一些帮助,因为我已经被困了一段时间。

编辑:使用R的解决方案:

data$date <- as.Date(data$date, format = "%d-%b-%y")
#splitting into new variables
year = as.numeric(format(data$date,"%Y"))
month = as.numeric(format(data$date,"%m"))
day = as.numeric(format(data$date,"%d"))

#new dataframe containing these variables and temp data
data <- data.frame(day,month,year,data$maxtp)

#Add 2 extra colums for Season.Year and Season
data <- cbind(data,NA,NA) # NA,NA adds two blank columns to existing csv file
colnames(data) <- c("Day","Month","Year","maxtp","Season.Year","Season") # names them

# Season.Year
data[ ,5] <- ifelse(data[,2] == 12, data[,3]+1, data[,3])    # in column 5, function says: if month = 12 (i.e. dec) then put year + 1, if not keep year

#defines months into seasons, W,SP,SU,A. puts output on column 6
data[,6][data[,2]=="12"|data[,2]=="1"|data[,2]=="2"] <- "W"
data[,6][data[,2]=="3"|data[,2]=="4"|data[,2]=="5"] <- "SP"
data[,6][data[,2]=="6"|data[,2]=="7"|data[,2]=="8"] <- "SU"
data[,6][data[,2]=="9"|data[,2]=="10"|data[,2]=="11"] <- "A"

2 个答案:

答案 0 :(得分:2)

首先定义月份到

的映射
months2season = {
       12:0,1:0,2:0, #Dec/Jan/Feb are all winter (season 0)
       3:1,4:1,5:1, #Mar/Apr/May are all spring (season 1)
       6:2,7:2,8:2, #Jun/Jul/Aug are all summer (season 2)
       9:3,10:3,11:3 #sept/oct/nov are all fall (season 3)
}

现在列出一份清单(每个季节一个清单)

readings_by_season = [[],[],[],[]]

现在你需要打开你的文件,并在将每个值放入其季节时阅读它

import dateutil.parser as p
fh = open("my_text_file.csv")
headers = next(fh).split() #skip the header line
for data in fh:
    data = dict(zip(headers,data.split()))
    data["date"] =  p.parse(data["date"])
    #put it in the right bin
    season_id = months2seasons[data["date"].month]
    readings_by_season[season_id].append(data)

现在你应该填充readings_by_season

winter,spring,summer,fall = readings_by_season
print winter

(这是一个过于简单化,在月份开始时均匀分裂季节...使用月中发生的休息会变得有点复杂)

答案 1 :(得分:-2)

通常您要做的就是将数据转换为您实际可以使用的数据,因此请将其存储在数据库中,存储在您可以访问的文件中或使用现在的任何内容。基本上创建一个数据模型。

接下来,您希望以某种方式呈现您拥有的已处理数据,那么您可能想要gui或某些文本(数据库,终端或文件?)

根据您想要呈现数据的方式,您需要一些逻辑来获取数据,处理数据然后输出数据。

我认为在这种情况下你的问题不是很具体,似乎你不知道从哪里开始。我希望你继续这个答案,接下来的步骤只需要一些谷歌搜索。