Skip to content

Commit 0bec37f

Browse files
committed
submit calculate_solar_angle.R
0 parents  commit 0bec37f

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

cal_solar_angle.R

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
2+
library(oce) # 加载这个包用来计算太阳仰角以及离太阳的距离
3+
library(plyr)
4+
5+
setwd('C:/Users/wn006/Desktop/开放数据-光伏功率-国能日新(新)/data')
6+
7+
train_1 = read.csv("train_1.csv", fileEncoding = 'UTF-8')
8+
train_2 = read.csv("train_2.csv", fileEncoding = 'UTF-8')
9+
train_3 = read.csv("train_3.csv", fileEncoding = 'UTF-8')
10+
train_4 = read.csv("train_4.csv", fileEncoding = 'UTF-8')
11+
12+
test_1 = read.csv("test_1.csv", fileEncoding = 'UTF-8')
13+
test_2 = read.csv("test_2.csv", fileEncoding = 'UTF-8')
14+
test_3 = read.csv("test_3.csv", fileEncoding = 'UTF-8')
15+
test_4 = read.csv("test_4.csv", fileEncoding = 'UTF-8')
16+
17+
train_1$时间 = as.character(train_1$时间)
18+
train_2$时间 = as.character(train_2$时间)
19+
train_3$时间 = as.character(train_3$时间)
20+
train_4$时间 = as.character(train_4$时间)
21+
22+
test_1$时间 = as.character(test_1$时间)
23+
test_2$时间 = as.character(test_2$时间)
24+
test_3$时间 = as.character(test_3$时间)
25+
test_4$时间 = as.character(test_4$时间)
26+
27+
28+
add_solar = function(data, longitude, latitude)
29+
{
30+
cal_4_solar = function(time_str)
31+
{
32+
# 计算出太阳仰角, 离太阳的距离, 并根据大气折射进行校正
33+
result = sunAngle(as.POSIXct(time_str, tz="Asia/Taipei"),
34+
longitude = longitude, latitude = latitude,
35+
useRefraction = TRUE)
36+
37+
# 计算出年份,月份,天数等等,作为特征
38+
time_list = as.POSIXlt(time_str, tz="Asia/Taipei")
39+
40+
year = time_list$year
41+
month = time_list$mon + 1 # 月份居然从0开始
42+
yday = time_list$yday
43+
mday = time_list$mday
44+
hour = time_list$hour
45+
minute = time_list$min
46+
second = time_list$sec
47+
hours_float = hour + minute/60 + second/3600
48+
49+
# 把计算出的结果统一存到result这个list里,然后返回
50+
result$time = NULL # 这个浮点日期没啥意义,删掉
51+
result$hours_float = hours_float
52+
result$mday = mday
53+
result$yday = yday
54+
result$month = month
55+
result$year = year
56+
57+
return(result)
58+
}
59+
60+
# 把计算出的结果存一个dataframe
61+
pre_df = t(sapply(data$时间, cal_4_solar))
62+
63+
solar_df = data.frame(matrix(unlist(pre_df), nrow=dim(pre_df)[1], ncol=dim(pre_df)[2], byrow=FALSE))
64+
colnames(solar_df) = colnames(pre_df)
65+
# 把计算出的特征dataframe和原始的dataframe合并起来, 然后返回
66+
cbind_df = cbind(data, solar_df)
67+
68+
return(cbind_df)
69+
}
70+
71+
# 下面这个应该是太阳能电池板所在位置的经纬度,但是不知道的话,就先猜一下吧,
72+
# 只要能提取出时间和太阳仰角、距离等的非线性关系即可,平移一些没关系
73+
# 下面选了青海西宁市的经纬度作为标准来计算
74+
longitude = 101.78 # 东经
75+
latitude = 36.62 # 北纬
76+
77+
train_1_new = add_solar(train_1, longitude, latitude)
78+
train_2_new = add_solar(train_2, longitude, latitude)
79+
train_3_new = add_solar(train_3, longitude, latitude)
80+
train_4_new = add_solar(train_4, longitude, latitude)
81+
82+
test_1_new = add_solar(test_1, longitude, latitude)
83+
test_2_new = add_solar(test_2, longitude, latitude)
84+
test_3_new = add_solar(test_3, longitude, latitude)
85+
test_4_new = add_solar(test_4, longitude, latitude)
86+
87+
setwd('C:/Users/wn006/Desktop/开放数据-光伏功率-国能日新(新)/data_new')
88+
89+
write.csv(train_1_new, "train_1_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
90+
write.csv(train_2_new, "train_2_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
91+
write.csv(train_3_new, "train_3_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
92+
write.csv(train_4_new, "train_4_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
93+
94+
write.csv(test_1_new, "test_1_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
95+
write.csv(test_2_new, "test_2_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
96+
write.csv(test_3_new, "test_3_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
97+
write.csv(test_4_new, "test_4_new.csv", row.names = FALSE, fileEncoding = 'UTF-8')
98+
99+

0 commit comments

Comments
 (0)