1+ # -*- coding: utf-8 -*-
2+ """
3+ Created on Mon Nov 6 11:41:53 2023
4+
5+ @author: osamatarabih
6+ """
7+ import math
8+ from calendar import monthrange
9+ import numpy as np
10+ import pandas as pd
11+ from scipy .optimize import fsolve
12+ from scipy import interpolate
13+ import os
14+ import datetime
15+
16+ parameter : str = 'RAD' #'RADP'
17+ units : str = 'n' #'MICROMOLE/m^2/s' #
18+ station : str = 'm' #'L006'#
19+
20+ os .chdir ('C:/LOONE_WQ_Clean/Model_Data_Filled_20082023' )
21+ Data_In = pd .read_csv ('./LO_RADT_20082023.csv' )
22+ Data_In = Data_In [Data_In ['%s_%s_%s' % (station , parameter , units )]>= 0 ]
23+ Data_In = Data_In .set_index (['date' ])
24+ Data_In .index = pd .to_datetime (Data_In .index , unit = 'ns' )
25+ Data_df = Data_In .resample ('D' ).mean ()
26+ Data_df = Data_df .dropna (subset = ['%s_%s_%s' % (station , parameter , units )])
27+ Data_df = Data_df .reset_index ()
28+ Data_df ['Yr_M' ] = pd .to_datetime (Data_df ['date' ]).dt .to_period ('M' )
29+ start_date = Data_df ['date' ].iloc [0 ]
30+ end_date = Data_df ['date' ].iloc [- 1 ]
31+ date_rng = pd .date_range (start = start_date , end = end_date , freq = 'M' )
32+ date_rng = date_rng .union ([date_rng [- 1 ] + pd .DateOffset (months = 1 )])
33+ Monthly_df = pd .DataFrame (date_rng , columns = ['date' ])
34+ Monthly_df ['Yr_M' ] = pd .to_datetime (Monthly_df ['date' ]).dt .to_period ('M' )
35+ New_date = []
36+ New_data = []
37+ Days = []
38+ Days_cum = []
39+ # Set index for the two dataframes
40+ Data_df = Data_df .set_index (['Yr_M' ])
41+ Monthly_df = Monthly_df .set_index (['Yr_M' ])
42+ for i in Monthly_df .index :
43+ if i in Data_df .index :
44+ if type (Data_df .loc [i ]['date' ]) == pd .Timestamp :
45+ New_date .append (Data_df .loc [i ]['date' ])
46+ New_data .append (Data_df .loc [i ]['%s_%s_%s' % (station , parameter , units )])
47+ else :
48+ for j in range (len (Data_df .loc [i ]['date' ])):
49+ New_date .append (Data_df .loc [i ]['date' ][j ])
50+ New_data .append (Data_df .loc [i ]['%s_%s_%s' % (station , parameter , units )][j ])
51+ elif i not in Data_df .index :
52+ New_date .append (datetime .datetime (Monthly_df .loc [i ]['date' ].year , Monthly_df .loc [i ]['date' ].month , 1 ))
53+ New_data .append (np .NaN )
54+
55+ New_date = pd .to_datetime (New_date , format = '%Y-%m-%d' )
56+ Days = New_date .strftime ("%d" ).astype (float )
57+ for i in range (len (Days )):
58+ if i == 0 :
59+ Days_cum .append (Days [i ])
60+ elif New_date [i ].month == New_date [i - 1 ].month :
61+ Days_cum .append (Days_cum [i - 1 ]+ (Days [i ]- Days [i - 1 ]))
62+ elif New_date [i ].month != New_date [i - 1 ].month :
63+ Days_cum .append (Days_cum [i - 1 ]+ Days [i ]+ monthrange (New_date [i - 1 ].year , New_date [i - 1 ].month )[1 ]- Days [i - 1 ])
64+ Final_df = pd .DataFrame ()
65+ Final_df ['date' ] = New_date
66+ Final_df ['Data' ] = New_data
67+ Final_df ['Days' ] = Days
68+ Final_df ['Days_cum' ] = Days_cum
69+ # Final_df.to_csv('C:/Work/Research/LOONE/Nitrogen Module/Interpolated_Data/In-Lake/L008_DO_No_Months_Missing_Trial.csv') # noqa: E501
70+ # Remove Negative Data Values
71+ Final_df = Final_df [Final_df ['Data' ] >= 0 ]
72+ Final_df ['date' ] = pd .to_datetime (Final_df ['date' ], format = '%Y-%m-%d' )
73+ start_date = Final_df ['date' ].iloc [0 ]
74+ end_date = Final_df ['date' ].iloc [- 1 ]
75+ date_rng_TSS_1 = pd .date_range (start = start_date , end = end_date , freq = 'D' )
76+ # Create a data frame with a date column
77+ Data_df = pd .DataFrame (date_rng_TSS_1 , columns = ['date' ])
78+ Data_len = len (Data_df .index )
79+ Cum_days = np .zeros (Data_len )
80+ Data_daily = np .zeros (Data_len )
81+ # Set initial values
82+ Cum_days [0 ] = Data_df ['date' ].iloc [0 ].day
83+ Data_daily [0 ] = Final_df ['Data' ].iloc [0 ]
84+ for i in range (1 , Data_len ):
85+ Cum_days [i ] = Cum_days [i - 1 ]+ 1
86+ # Data_daily[i] = interpolate.interp1d(Final_df['Days'], Final_df['TSS'] , kind = 'linear')(Cum_days[i])
87+ Data_daily [i ] = np .interp (Cum_days [i ], Final_df ['Days_cum' ], Final_df ['Data' ])
88+ Data_df ['Data_%s' % station ] = Data_daily
89+ Data_df .to_csv ('./LO_RADT_20082023.csv' , index = False )
0 commit comments