【发布时间】:2016-07-16 03:18:42
【问题描述】:
我想编写一个脚本来计算直接和漫射辐射的 30 分钟平均值(即 12:00、12:30、1:00...)。计算 30 分钟平均值后,我需要将数据分成季节 (DJF) (MAM) (JJA) (SON)。应该省略等于 = -99999 的值。
这是前几行数据。这是一个非常大的文件,其中包含很多年。
DATE month day year EST Direct NIP Diffuse PSP (sband corr)
4/1/2004 4 1 2004 5:55 0.01967 1.5687
4/1/2004 4 1 2004 6:00 0.2295 5.3946
4/1/2004 4 1 2004 6:05 0.59015 13.0295
4/1/2004 4 1 2004 6:10 0.78686 23.0043
4/1/2004 4 1 2004 6:15 0.60982 20.827
4/1/2004 4 1 2004 6:20 0.80655 23.199
4/1/2004 4 1 2004 6:25 0.81309 26.951
4/1/2004 4 1 2004 6:30 0.77375 31.0062
4/1/2004 4 1 2004 6:35 0.55081 35.04
4/1/2004 4 1 2004 6:40 0.24262 41.1042
4/1/2004 4 1 2004 6:45 0.39999 46.6218
4/1/2004 4 1 2004 6:50 0.26229 52.7591
4/1/2004 4 1 2004 6:55 0.26885 67.9498
知道如何解决这个问题吗?谢谢您的支持。
编辑:到目前为止,这是我的代码。它计算了所有时间的所有辐射。请注意,这是业余的,因为我正在自学如何编码。谢谢
import csv
import openpyxl
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
from datetime import datetime
x = [datetime(year = 2004, month = 4, day = 1),
datetime(year = 2014, month = 11, day = 18)]
y = []
x2 = []
y2 = []
with open('tenyeardata.csv', 'r') as csvfile:
data = csv.reader(csvfile)
firstline = True
for row in data:
if firstline: #skip first line
firstline = False
continue
x.append(int(row[1]))
y.append(float(row[5]))
x2.append(int(row[3]))
y2.append(float(row[6]))
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("North Carolina Radiation (Direct and Diffuse)")
ax1.set_xlabel('time (hours)')
ax1.set_ylabel('SW (W m-2)')
print x[:10]
print y[:10]
ax1.plot(y, c='r', label='Direct')
ax1.plot(y2, c='b', label = 'Diffuse')
ax1.axis([-1, 568217, 0, 1100])
leg = ax1.legend()
plt.axis([-1, 568217, 0, 1100])
plt.show()
【问题讨论】:
-
你有什么代码可以给我们看看吗?
-
我刚刚将我的代码放在原始问题中。我希望它不会让你感到困惑!
-
我只是想弄清楚你想要绘制什么。您正在填写
x和x2但从不使用它们。您是否希望看到每行中针对时间绘制的“直接”和“漫反射”数据(例如,对于 2004 年 4 月 1 日凌晨 5:55 的 x 值,y 值为 0.01967)? -
没错!我的代码绘制了这一点。我遇到的问题是平均 30 分钟间隔并绘制它们。并获取所有这些平均值并对它们进行排序,以便所有季节性月份按年份顺序排列在一起。