2016-07-15 10 views
0

Ich möchte ein Skript schreiben, das die 30-Minuten-Mittelwerte für direkte und diffuse Strahlung berechnet (d. H. 12:00, 12:30, 1:00 ...). Nachdem die 30-Minuten-Durchschnittswerte berechnet wurden, müsste ich die Daten in Jahreszeiten (DJF) (MAM) (JJA) (SON) trennen. Werte, die gleich = -99999 sind, sollten weggelassen werden.Berechnen Sie 30-Minuten-Durchschnittswerte und saisonale Durchschnittswerte in Python?

Hier sind die ersten Zeilen von Daten. Dies ist eine sehr große Datei mit vielen Jahren.

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

Jede Idee, wie ich über diese gehen? Danke für Ihre Unterstützung.

edit: Hier ist mein Code so weit. Es berechnete alle Strahlung und zu jeder Zeit. Bitte beachten Sie, dass es Amateur ist, da ich mir selbst beibringe, wie man programmiert. Danke

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() 
+0

Haben Sie Code haben uns zu zeigen, so dass wir einen Blick darauf werfen können? –

+0

Ich habe meinen Code gerade in die ursprüngliche Frage gestellt. Ich hoffe es verwirrt dich nicht! –

+0

Ich versuche nur herauszufinden, was du plotten willst. Du füllst 'x' und' x2', aber verwendest sie niemals. Möchten Sie die Daten "Direct" und "Diffuse" in Abhängigkeit von der Zeit in jeder Zeile darstellen (z. B. ein y-Wert von 0,01967 für einen x-Wert von 4/1/2004 um 5:55 Uhr)? –

Antwort

0

Erwägen Sie, Ihre benötigten Grundstücksdimensionen zu berechnen: stündliches Datum/Uhrzeit und Jahreszeit. Dann führen Sie eine groupby() mittlere Aggregation zum Plotten:

from io import StringIO 
import pandas as pd 
import numpy as np 
import time, datetime 

data = '''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''' 

df = pd.read_csv(StringIO(data)) 

# ADDED DATE/TIME FIELDS 
df['DATE'] = pd.to_datetime(df['DATE'] + ' ' + df['EST'], format='%m/%d/%Y %H:%M') 
df['MONTH'] = df['DATE'].dt.month 

# EVERY HALF HOUR BLOCKS 
df['HALF_HOUR_DATE'] = df['DATE'].apply(lambda dt: datetime.datetime(dt.year, dt.month, dt.day, dt.hour, 30*(dt.minute // 30))) 
df['HALF_HOUR_TIME'] = df apply(lambda x: x.strftime('%H:%M')) 

# SEASON CONDITIONAL CALCULATION 
df['SEASON'] = np.where(df['MONTH'].isin([12,1,2]), 'DJF', 
         np.where(df['MONTH'].isin([3,4,5]), 'MAM', 
           np.where(df['MONTH'].isin([6,7,8]), 'JJA', 
              np.where(df['MONTH'].isin([9,10,11]), 'SON', None)))) 

# AGGREGATE DATA   
aggdf = df[['SEASON', 'HALF_HOUR_DATE', 'Direct NIP', 'Diffuse PSP (sband corr)']].\ 
       groupby(['SEASON','HALF_HOUR_DATE']).mean() 

Ausgabe

Aktualisiert Datenrahmen

#     DATE month day year EST Direct NIP Diffuse PSP (sband corr) MONTH  HALF_HOUR_DATE HALF_HOUR_TIME SEASON 
# 0 2004-04-01 05:55:00  4 1 2004 5:55  0.01967     1.5687  4 2004-04-01 05:30:00   05:30 MAM 
# 1 2004-04-01 06:00:00  4 1 2004 6:00  0.22950     5.3946  4 2004-04-01 06:00:00   06:00 MAM 
# 2 2004-04-01 06:05:00  4 1 2004 6:05  0.59015     13.0295  4 2004-04-01 06:00:00   06:00 MAM 
# 3 2004-04-01 06:10:00  4 1 2004 6:10  0.78686     23.0043  4 2004-04-01 06:00:00   06:00 MAM 
# 4 2004-04-01 06:15:00  4 1 2004 6:15  0.60982     20.8270  4 2004-04-01 06:00:00   06:00 MAM 
# 5 2004-04-01 06:20:00  4 1 2004 6:20  0.80655     23.1990  4 2004-04-01 06:00:00   06:00 MAM 
# 6 2004-04-01 06:25:00  4 1 2004 6:25  0.81309     26.9510  4 2004-04-01 06:00:00   06:00 MAM 
# 7 2004-04-01 06:30:00  4 1 2004 6:30  0.77375     31.0062  4 2004-04-01 06:30:00   06:30 MAM 
# 8 2004-04-01 06:35:00  4 1 2004 6:35  0.55081     35.0400  4 2004-04-01 06:30:00   06:30 MAM 
# 9 2004-04-01 06:40:00  4 1 2004 6:40  0.24262     41.1042  4 2004-04-01 06:30:00   06:30 MAM 
# 10 2004-04-01 06:45:00  4 1 2004 6:45  0.39999     46.6218  4 2004-04-01 06:30:00   06:30 MAM 
# 11 2004-04-01 06:50:00  4 1 2004 6:50  0.26229     52.7591  4 2004-04-01 06:30:00   06:30 MAM 
# 12 2004-04-01 06:55:00  4 1 2004 6:55  0.26885     67.9498  4 2004-04-01 06:30:00   06:30 MAM 

aggregierte GROUPBY Datenrahmen

#        Direct NIP Diffuse PSP (sband corr) 
# SEASON HALF_HOUR_DATE           
# MAM 2004-04-01 05:30:00 0.019670     1.568700 
#  2004-04-01 06:00:00 0.639328     18.734233 
#  2004-04-01 06:30:00 0.416385     45.746850 
Verwandte Themen