Actualizacion1

master
zhled14 1 year ago
parent 7b04f7812f
commit 70f4b654ac

@ -0,0 +1,241 @@
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import pandas as pd
# Importing data
med = pd.read_csv('med.csv')
med_discri = pd.read_csv('med_discri.csv')
data_plot= pd.read_csv('data_plot.csv')
############## FILTERING DATA ##############
# 24 Hrs light intensity
luxes = med.iloc[0:288,0]
#Plotting Luxes data
plt.plot(luxes,'.k')
plt.xlabel('Sample Number')
plt.ylabel('[Lx]', rotation=90)
plt.show()
# The data filtering function depending on the time. B and e sets upper and lower limits.
def FilteringData(b,e):
filtered_med = med[(med['hh'] >= b ) & (med['hh'] <= e)]
#Saving luxes, temp, hum and power data
luxesf = filtered_med.iloc[:,0].tolist()
tempf = filtered_med.iloc[:,1].tolist()
humf = filtered_med.iloc[:,2].tolist()
powf = filtered_med.iloc[:,5].tolist()
return luxesf, tempf, humf, powf
############## PLOTTING DATA FUNCTION ##############
#Inputs: Luxes, Temperature, Humidity and Power
#Output: Vs graph 4x4
def GenGraph(luxesf, tempf, humf, powf):
# Generates a figure of size 4x4
figure, axis = plt.subplots(4,4, figsize=(8,6))
# Defines limits for plotting luxes, temperature, humidity and power
luxlim=(2055,48000)
templim=(13,50)
humlim=(12,88)
powlim=(0.68,11.61)
#Text fontsize
fontsize=16
Tfont = FontProperties(family='serif', style='normal',size=fontsize)
#Tiles fontsize, family font
font = FontProperties(family='serif',style='italic',size=fontsize)
#Positon for subplots titles
Tx=1.15
Ty=0.36
#Plotting luxes vs temp, hum, pow: (0,0)-(0,3)
#Positions the Lux title at thge coordinates (0,0)
axis[0,0].text(0.5,0.5,'Lux', verticalalignment='center', horizontalalignment='center',font = Tfont)
# Clears the frame and spines
for spine in axis[0,0].spines.values():
spine.set_visible(False)
axis[0,1].scatter(luxesf,tempf, s=5, c='none', marker='.', facecolors='none', edgecolors='black', alpha=1)
axis[0,1].set(xlim=luxlim,ylim=templim)
axis[0,1].set_title('a)',y=Ty, x=Tx)
axis[0,2].scatter(luxesf,humf, s=5, c='none', marker='.', facecolors='none', edgecolors='black', alpha=1)
axis[0,2].set(xlim=luxlim,ylim=humlim)
axis[0,2].set_title('b)',y=Ty, x=Tx)
axis[0,3].scatter(luxesf,powf, s=5, c='none', marker='.', facecolors='none', edgecolors='black', alpha=1)
axis[0,3].set(xlim=luxlim,ylim=powlim)
axis[0,3].set_title('c)',y=Ty, x=Tx)
#Plotting temp vs luxes, hum and pow: (1,0)-(1,3)
axis[1,0].scatter(tempf,luxesf, s=5, c='none', marker='o', facecolors='none', edgecolors='black', alpha=0.3)
axis[1,0].set_title('d)',y=Ty, x=Tx)
axis[1,0].set(xlim=templim,ylim=luxlim)
axis[1,0].set_ylim(luxlim)
#Positions the Temp title at thge coordinates (1,1)
axis[1,1].text(0.5,0.5,'Temp', fontsize=fontsize, verticalalignment='center', horizontalalignment='center', font = Tfont)
#Clears the frame and spines
for spine in axis[1,1].spines.values():
spine.set_visible(False)
axis[1,2].scatter(tempf,humf, s=5, c='none', marker='.', facecolors='none', edgecolors='black', alpha=1)
axis[1,2].set_title('e)',y=Ty, x=Tx)
axis[1,2].set(xlim=templim,ylim=humlim)
axis[1,3].scatter(tempf,powf, s=5, c='none', marker='.', facecolors='none', edgecolors='black', alpha=1)
axis[1,3].set_title('f)',y=Ty, x=Tx)
axis[1,3].set(xlim=templim,ylim=powlim)
#Plotting hum vs luxes, temp and pow: (2,0)-(2,3)
axis[2,0].scatter(humf,luxesf, s=5, c='none', marker='o', facecolors='none', edgecolors='black', alpha=0.3)
axis[2,0].set_title('g)',y=Ty, x=Tx)
axis[2,0].set(xlim=humlim,ylim=luxlim)
axis[2,1].scatter(humf,tempf, s=5, c='none', marker='o', facecolors='none', edgecolors='black', alpha=0.3)
axis[2,1].set_title('h)',y=Ty, x=Tx)
axis[2,1].set(xlim=humlim,ylim=templim)
#Positions the Hum title at thge coordinates (2,2)
axis[2,2].text(0.5,0.5,'Hum', fontsize=fontsize, verticalalignment='center', horizontalalignment='center', font = Tfont)
#Clears the frame and spines
for spine in axis[2,2].spines.values():
spine.set_visible(False)
axis[2,3].scatter(humf,powf, s=5, c='none', marker='.', facecolors='none', edgecolors='black', alpha=1)
axis[2,3].set_title('i)',y=Ty, x=Tx)
axis[2,3].set(xlim=humlim,ylim=powlim)
#Plottign power vs luxes, temp and hum: (3,0)-(3,3)
axis[3,0].scatter(powf,luxesf, s=5, c='none', marker='o', facecolors='none', edgecolors='black', alpha=0.3)
axis[3,0].set_title('j)',y=Ty, x=Tx)
axis[3,0].set(xlim=powlim,ylim=luxlim)
axis[3,1].scatter(powf,tempf, s=5, c='none', marker='o', facecolors='none', edgecolors='black', alpha=0.3)
axis[3,1].set_title('k)',y=Ty, x=Tx)
axis[3,1].set(xlim=powlim,ylim=templim)
axis[3,2].scatter(powf,humf, s=5, c='none', marker='o', facecolors='none', edgecolors='black', alpha=0.3)
axis[3,2].set_title('l)',y=Ty, x=Tx)
axis[3,2].set(xlim=powlim,ylim=humlim)
#Positions the Hum title at thge coordinates (2,2)
axis[3,3].text(0.5,0.5,'Pow', fontsize=fontsize, verticalalignment='center', horizontalalignment='center', font = Tfont)
#Clears the frame and spines
for spine in axis[3,3].spines.values():
spine.set_visible(False)
#Clears all graphic's spines and ticks label
for ax in axis.flat:
ax.set_xticklabels([])
ax.set_xticks([])
ax.set_yticklabels([])
ax.set_yticks([])
for text in [ax.title]:
text.set_font_properties(font)
#Defines width space and height space
plt.subplots_adjust(wspace=0.4,hspace=0.06)
plt.savefig("Graph.png")
plt.show()
############## PLOTTING TEMPERATUR BAR FUNCTION ##############
# Inputs: x data, y data, x limits (xmin,xmax), y limits (ymin,ymax), x title, y title, temperature
# Output: Vs Graph with Temperature bar
import numpy as np
def GenGraphTemp(x,y,xlim,ylim,xtitle,ytitle,temp):
fig, ax = plt.subplots(figsize=(7,6))
scatter = ax.scatter(x,y, c=temp, cmap='gray', s=50, edgecolors='none', linewidths=1.5, vmin=0, vmax=70)
ax.set(xlim=xlim,ylim=ylim, xlabel=xtitle, ylabel=ytitle)
ax.grid(True, linestyle='--', linewidth=0.5,alpha=0.7)
ax.tick_params(axis='both', direction='in',length=5,width=1, top=True, right=True)
ColorBar = fig.colorbar(scatter,ax=ax,label='Temp[°C]')
plt.savefig(f"{xtitle} vs {ytitle}",".png")
plt.show()
############## PLOTTING DATA IN 4X4 ##############
# Own filtered data
luxesf, tempf, humf, powf = FilteringData(9,19)
GenGraph(luxesf,tempf,humf,powf)
# Data_plot data base
luxesplt = data_plot.iloc[:,0].tolist()
tempplt = data_plot.iloc[:,1].tolist()
humplt = data_plot.iloc[:,2].tolist()
powplt = data_plot.iloc[:,3].tolist()
GenGraph(luxesplt,tempplt,humplt,powplt)
# med data base
luxesm = med.iloc[:,0].tolist()
tempm = med.iloc[:,1].tolist()
humm = med.iloc[:,2].tolist()
powm = med.iloc[:,5].tolist()
GenGraph(luxesm,tempm,humm,powm)
# med_discri data base
luxesdi = med_discri.iloc[:,0].tolist()
tempdi = med_discri.iloc[:,1].tolist()
humdi = med_discri.iloc[:,2].tolist()
powdi = med_discri.iloc[:,5].tolist()
GenGraph(luxesdi,tempdi,humdi,powdi)
############## PLOTTING DATA USING TEMPERATURE BAR ##############
# Luxes vs Power
xlim=(2055,51000)
ylim=(1,12)
# Own filtered data
GenGraphTemp(luxesf,powf,xlim,ylim,'Luxes[lx]',"PV's Power[W]",tempf)
# Data_plot data base
GenGraphTemp(luxesplt,powplt,xlim,ylim,'Luxes[lx]',"PV's Power[W]",tempplt)
# med data base
GenGraphTemp(luxesm,powm,xlim,ylim,'Luxes[lx]',"PV's Power[W]",tempm)
# med_discri data base
GenGraphTemp(luxesdi,powdi,xlim,ylim,'Luxes[lx]',"PV's Power[W]",tempdi)
# Humidity vs Power
xlim2=(15,100)
# Own filtered data
GenGraphTemp(humf,powf,xlim2,ylim,'Luxes[lx]',"PV's Power[W]",tempf)
# Data_plot data base
GenGraphTemp(humplt,powplt,xlim2,ylim,'Luxes[lx]',"PV's Power[W]",tempplt)
# med data base
GenGraphTemp(humm,powm,xlim,ylim2,'Luxes[lx]',"PV's Power[W]",tempm)
# med_discri data base
GenGraphTemp(humdi,powdi,xlim2,ylim,'Luxes[lx]',"PV's Power[W]",tempdi)

@ -0,0 +1,73 @@
# Description
This public repository contains datasets, preprocessing scripts, and supplementary materials associated with the article titled "Predictive Modeling of Photovoltaic Panel Power Production through On-Site Environmental and Electrical Measurements Using Artificial Neural Networks." The datasets provide insights into the performance of PV panels under various conditions and are crucial for the development of predictive models.
This `readme.md` file provides step-by-step guidance on how to use the provided data and scripts. Researchers and developers can use this data to replicate the study, develop their predictive models, or conduct further analyses.
# Contents
1. **Raw Data Files**:
- `med.csv`: Power production data of the PV panel over 15 days that includes lighting, temperature, and humidity environmental measurements logged every 5 minutes.
2. **Preprocessed Data**:
- `med_discri.csv`: Power production data of the PV panel over 15 days **without night measurements** that includes lighting, temperature, and humidity environmental measurements logged every 5 minutes.
- `data_plots.csv`: Data of 1000 instances for plotting, correlation, and modeling process; instances used in the published paper.
3. **Scripts and Notebooks**:
- Will be included soon.
## Files structure
The structure of each `csv` file is similar and is shown below:
```
luxes, temp, hum, curr, volt, power, dd,hh,mm
3133.44,18,79,0.07,14.69,1.09,28,15,17
5765.12,18,76,0.14,14.73,1.98,28,15,12
5575.68,18,77,0.13,14.73,1.93,28,15,7
5506.56,18,77,0.13,14.72,1.93,28,15,2
5931.52,19,74,0.14,14.73,2.01,28,14,57
5565.44,18,75,0.13,14.72,1.92,28,14,52
6051.84,18,80,0.14,14.73,2.11,28,14,47
3304.96,17,78,0.08,14.69,1.18,28,14,42
2769.92,18,77,0.07,14.69,0.99,28,14,37
5309.44,19,76,0.12,14.73,1.82,28,14,32
8555.52,19,75,0.2,14.77,2.97,28,14,27
```
The columns are arranged as follows:
- `luxes`: lighting measurements in luxes [lx] obtained in the same PV's angle.
- `temp`: temperature measurements in degrees Celsius [C] at the PV's structure.
- `hum`: relative humidity in [%RH] at the PV's structure.
- `curre`: current measurements in Amperes [A] measured at the PV's electrical output.
- `volt`: voltage measurements in volts [V] measured at the PV's electrical output.
- power: computed electrical power in Watts [S] obtained by multiplying the voltage and current measured.
- `dd`: two-digit format for day-of-month identification.
- `hh`: two-digit format for hour of day identification.
- `mm`: two-digit format for minutes of day identification.
**More detail about the collected data can be consulted in the published paper.**
![](./iot.png)
**Citation:** Users of this dataset are required to cite the associated article and provide appropriate acknowledgment. **included info soon**
## Environmental.py
The code of this file is divide in follow sections
1. **Filtering data Function**
Takes all data from the raw data file (`med.csv`), between b and e. It returns the filtered data for lux, temperature, humidity and power.
2. **Plotting data function**
Takes values from lux, temperature, humidity and power, and builds a figure of size 4x4. The structure of these graphs is shown below:
```
Lux [Lux vs Temp] [Lux vs Hum ] [Lux vs Pow ]
[Temp vs Lux] Temp [Temp vs Hum] [Temp vs Pow]
[Hum vs Lux ] [Hum vs Temp] Hum [Hum vs Pow ]
[Pow vs Lux ] [Pow vs Temp] [Pow vs Hum ] Pow
```
3. **Plotting Temperature Bar Function**
Generates a scatter plot with temperature bars. The input data includes coordinates for the x and y axes, limits for the x and y axes, titles for the x and y axes, and the temperature associated with each point.
4. **Plotting data**
First, the information from all databases is divided into lux, temperature, humidity, and power. Then, the `GenGraph` function, defined in the Plotting data function section, and the `GenGraphTemp` function, defined in the Plotting Temperature Bar Function section, are used.
Loading…
Cancel
Save