Skip to content
This repository has been archived by the owner on Sep 11, 2023. It is now read-only.

Issue/79 gsp data #101

Merged
merged 73 commits into from
Sep 14, 2021
Merged
Show file tree
Hide file tree
Changes from 71 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
fedbce5
get gsp metadata + tests
peterdudfield Sep 1, 2021
eb842e3
add pip install git+https://github.com/SheffieldSolar/PV_Live-API to …
peterdudfield Sep 1, 2021
b0b833b
fix requirements
peterdudfield Sep 1, 2021
836443e
add method to load pv gsp solar data (+tests)
peterdudfield Sep 1, 2021
5903699
script for getting pv gsp data
peterdudfield Sep 1, 2021
f9091f7
sort gsp id one at a time, help save on memory
peterdudfield Sep 2, 2021
3f06b40
add data analytics of GSP data
peterdudfield Sep 2, 2021
3994811
add function to pull gsp shape file
peterdudfield Sep 6, 2021
d2cb7f0
add geopandas to requirements
peterdudfield Sep 6, 2021
c855c56
update notebook
peterdudfield Sep 7, 2021
593529d
Merge branch 'main' into issue/79-gsp-data
peterdudfield Sep 7, 2021
5f7d0a8
move last tests
peterdudfield Sep 7, 2021
f39ac55
get gsp from 2018
peterdudfield Sep 7, 2021
b13e096
refactor gsp data source
peterdudfield Sep 7, 2021
8d25987
fix imports and logging for gsp
peterdudfield Sep 7, 2021
b344e55
add test gsp data
peterdudfield Sep 8, 2021
58d124d
first pass at GSP Data Source
peterdudfield Sep 8, 2021
3f66ade
rename 'pv gsp' to 'gsp'
peterdudfield Sep 8, 2021
9850a3f
add function descritpions
peterdudfield Sep 8, 2021
8123a2d
include gsp datasource in datamodule
peterdudfield Sep 8, 2021
4b28e99
update config file
peterdudfield Sep 8, 2021
986a1e6
update gsp group
peterdudfield Sep 8, 2021
0b5101a
update for gsp
peterdudfield Sep 8, 2021
0b9183b
fix test_gsp_data_source
peterdudfield Sep 8, 2021
ebb6437
add data generator in test
peterdudfield Sep 8, 2021
4ec309d
fix for changing length to minutes
peterdudfield Sep 8, 2021
e408994
add validation of batch method, and test
peterdudfield Sep 9, 2021
f7f4f0f
add data source constants
peterdudfield Sep 9, 2021
50a1b2c
fix test
peterdudfield Sep 9, 2021
15b537c
self PR comments
peterdudfield Sep 9, 2021
99313af
update prepare_ml_traindin_Data.py script
peterdudfield Sep 9, 2021
68ca3a5
add progress bat for loading pv azimuth data
peterdudfield Sep 9, 2021
d737216
add logging
peterdudfield Sep 9, 2021
5472a23
use threading when calculating azimuth, and elevation
peterdudfield Sep 9, 2021
6494779
dont caluclate azimuth for now
peterdudfield Sep 9, 2021
a78cefa
add larger tolerances when finding gsp centroids
peterdudfield Sep 9, 2021
2fca5b4
fix test
peterdudfield Sep 9, 2021
41800b2
add logging
peterdudfield Sep 9, 2021
0d7cac6
fix
peterdudfield Sep 9, 2021
924e870
add logging
peterdudfield Sep 9, 2021
0f07f5b
make gsp data is not nan when getting x locations and y locations
peterdudfield Sep 9, 2021
6d6850d
move functions to dataset
peterdudfield Sep 9, 2021
d09fc45
set logging levels
peterdudfield Sep 9, 2021
cf7f582
add gsp data into xr dataset
peterdudfield Sep 9, 2021
5bef50f
add more verbose errors
peterdudfield Sep 10, 2021
8d8e42d
drop duplicates gsp_id from eso
peterdudfield Sep 10, 2021
56a1e9a
refactor dataset
peterdudfield Sep 10, 2021
8fda5ba
move constants, due to difficult circular imports
peterdudfield Sep 10, 2021
3ebcae5
fix
peterdudfield Sep 10, 2021
db958f8
move inside datetime functions
peterdudfield Sep 10, 2021
c9b6f3d
fix and function descirption
peterdudfield Sep 10, 2021
28c33e1
Can get datetimes to work on five minute chunks by default,
peterdudfield Sep 10, 2021
f2ad6f3
change logging level to info
peterdudfield Sep 10, 2021
416736a
add logging
peterdudfield Sep 10, 2021
1c18bc2
fix
peterdudfield Sep 10, 2021
a99fa4f
only interpolate time for GSP DATA
peterdudfield Sep 10, 2021
ae3d8e9
rename
peterdudfield Sep 10, 2021
ea9a9e7
move datamodule.py and example.py into folder datasets, add Readme in…
peterdudfield Sep 10, 2021
2cc9166
Merge pull request #108 from openclimatefix/issue/106-refactor-dataset
peterdudfield Sep 10, 2021
4e3755e
Merge branch 'main' into issue/79-gsp-data
peterdudfield Sep 10, 2021
48f57e1
PR comments (stage 1)
peterdudfield Sep 13, 2021
9766099
let prepare_ml_training_data.py start from last batch
peterdudfield Sep 13, 2021
3bf62fc
update for remove_has script
peterdudfield Sep 13, 2021
ffb1013
update for batch files with no hash in name
peterdudfield Sep 13, 2021
5d93097
PR comments (stage 2)
peterdudfield Sep 13, 2021
3e741c5
add GSP data when loading from batches
peterdudfield Sep 13, 2021
c001ba3
PR comments
peterdudfield Sep 14, 2021
1c76ff5
PR comments
peterdudfield Sep 14, 2021
3947c83
tidy up hasattr in data source
peterdudfield Sep 14, 2021
635090b
add encoding to data
peterdudfield Sep 14, 2021
666ba47
PR comments
peterdudfield Sep 14, 2021
edcc844
PR comments
peterdudfield Sep 14, 2021
caa16c0
rename to OBJECT_AT_CENTER
peterdudfield Sep 14, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ def sat_data_source(sat_filename: Path):
return SatelliteDataSource(
image_size_pixels=pytest.IMAGE_SIZE_PIXELS,
filename=sat_filename,
history_len=0,
forecast_len=1,
history_minutes=0,
forecast_minutes=5,
channels=('HRV', ),
n_timesteps_per_batch=2,
convert_to_numpy=True)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import cv2

DATA_PATH = "gs://solar-pv-nowcasting-data/prepared_ML_training_data/v4/"
TEMP_PATH = "."
TEMP_PATH = ""

# set up data generator
train_dataset = NetCDFDataset(24_900, os.path.join(DATA_PATH, "train"), os.path.join(TEMP_PATH, "train"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
##############

DATA_PATH = "gs://solar-pv-nowcasting-data/prepared_ML_training_data/v4/"
TEMP_PATH = "."
TEMP_PATH = ""

# set up data generator
train_dataset = NetCDFDataset(24_900, os.path.join(DATA_PATH, "train"), os.path.join(TEMP_PATH, "train"))
Expand Down
175 changes: 175 additions & 0 deletions notebooks/2021-09/2021-09-01/GSP data.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "3407b6ba",
"metadata": {},
"outputs": [],
"source": [
"# get data\n",
"import urllib\n",
"import json\n",
"url = 'https://data.nationalgrideso.com/api/3/action/datastore_search?resource_id=bbe2cc72-a6c6-46e6-8f4e-48b879467368&limit=400'\n",
"fileobj = urllib.request.urlopen(url)\n",
"d = json.loads(fileobj.read())\n",
"\n",
"print(d)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6a58b2c7",
"metadata": {},
"outputs": [],
"source": [
"# load data\n",
"import pandas as pd\n",
"results = d['result']['records']\n",
"\n",
"data_df = pd.DataFrame(results)\n",
"print(len(data_df))\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cb615160",
"metadata": {},
"outputs": [],
"source": [
"# plot data\n",
"\n",
"import plotly.graph_objects as go\n",
"\n",
"fig = go.Figure(data=go.Scatter(x=data_df['gsp_lon'], y=data_df['gsp_lat'], mode='markers'))\n",
"\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ddfc9698",
"metadata": {},
"outputs": [],
"source": [
"# plot on static map\n",
"\n",
"import staticmaps\n",
"from staticmaps.marker import Marker\n",
"\n",
"\n",
"context = staticmaps.Context()\n",
"\n",
"# make bottom left and top right bounding box for map, happens to be Oxford and Norwich\n",
"bottom_left = staticmaps.create_latlng(50, -8)\n",
"top_right = staticmaps.create_latlng(59, 3)\n",
"\n",
"for i in range(len(data_df)-4):\n",
" row = data_df.iloc[i]\n",
" context.add_object(Marker(staticmaps.create_latlng(row.gnode_lat, row.gnode_lon), size=3))\n",
" \n",
" \n",
"# make clean map\n",
"m = context.make_clean_map_from_bounding_box(bottom_left=bottom_left, top_right=top_right, width=1000, height=1000)\n",
"\n",
"m.show()\n",
"m.save('GSP.png')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d5e08e2d",
"metadata": {},
"outputs": [],
"source": [
"# plot using plotly\n",
"import numpy as np\n",
"import plotly.graph_objects as go\n",
"\n",
"m = np.array(m)\n",
"print(m.shape)\n",
"\n",
"x = (data_df['gnode_lon'] +8) / 11 * m.shape[1]\n",
"y = (59-data_df['gnode_lat']) / 9 * m.shape[0]\n",
"\n",
"trace_map = go.Image(z=m)\n",
"\n",
"layout = go.Layout(\n",
" paper_bgcolor='rgba(0,0,0,0)',\n",
" plot_bgcolor='rgba(0,0,0,0)'\n",
")\n",
"\n",
"fig = go.Figure(data=[trace_map, go.Scatter(x=x, y=y, mode='markers', text=data_df['gnode_name'], \n",
" marker=dict(color='LightSkyBlue'))],\n",
" layout=layout)\n",
"\n",
"fig.update_yaxes(showticklabels=False)\n",
"fig.update_xaxes(showticklabels=False)\n",
"\n",
"\n",
"\n",
"fig.show()\n",
"\n",
"### This doesnt quite work, due to curitual of the world\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c4bffdb2",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "2548a7da",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "3ad608b5",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "9087e598",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
177 changes: 177 additions & 0 deletions notebooks/2021-09/2021-09-01/GSP solar data.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "6e5860ea",
"metadata": {},
"outputs": [],
"source": [
"# get gsp metadata\n",
"import urllib\n",
"import json\n",
"import pandas as pd\n",
"\n",
"from pvlive_api import PVLive\n",
"from datetime import datetime, timedelta\n",
"import pytz\n",
"import plotly.graph_objects as go\n",
"\n",
"# call ESO website\n",
"url = 'https://data.nationalgrideso.com/api/3/action/datastore_search?resource_id=bbe2cc72-a6c6-46e6-8f4e-48b879467368&limit=400'\n",
"fileobj = urllib.request.urlopen(url)\n",
"d = json.loads(fileobj.read())\n",
"\n",
"# make dataframe\n",
"results = d['result']['records']\n",
"metadata_df = pd.DataFrame(results)\n",
"\n",
"print(metadata_df)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b2ab08c5",
"metadata": {},
"outputs": [],
"source": [
"# plot one day of data\n",
"# https://github.com/SheffieldSolar/PV_Live-API, use this repo\n",
"\n",
"pvl = PVLive()\n",
"\n",
"# test getting some data\n",
"start = datetime(2019,1,1,tzinfo=pytz.utc)\n",
"end = datetime(2019,1,2,tzinfo=pytz.utc)\n",
"\n",
"one_day_gsp_data_df = pvl.between(start, end, entity_type=\"gsp\", entity_id=0, extra_fields=\"\", dataframe=True)\n",
"\n",
"one_day_gsp_data_df = one_day_gsp_data_df.sort_values(by=['datetime_gmt'])\n",
"\n",
"fig = go.Figure(data=go.Scatter(x=one_gsp_data_df['datetime_gmt'], y=one_gsp_data_df['generation_mw']))\n",
"fig.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "52f31238",
"metadata": {},
"outputs": [],
"source": [
"# plot one month of data\n",
"\n",
"pvl = PVLive()\n",
"\n",
"# test getting some data\n",
"start = datetime(2019,1,1,tzinfo=pytz.utc)\n",
"end = datetime(2019,2,1, tzinfo=pytz.utc)\n",
"\n",
"one_month_gsp_data_df = pvl.between(start, end, entity_type=\"gsp\", entity_id=0, extra_fields=\"\", dataframe=True)\n",
"\n",
"one_month_gsp_data_df = one_month_gsp_data_df.sort_values(by=['datetime_gmt'])\n",
"\n",
"fig = go.Figure(data=go.Scatter(x=one_month_gsp_data_df['datetime_gmt'], y=one_month_gsp_data_df['generation_mw']))\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4107dab0",
"metadata": {},
"outputs": [],
"source": [
"# plot one month of data, for 10 sites\n",
"from datetime import datetime, timedelta\n",
"pvl = PVLive()\n",
"\n",
"# test getting some data\n",
"start = datetime(2019,1,1,tzinfo=pytz.utc)\n",
"end = datetime(2019,6,1, tzinfo=pytz.utc)\n",
"\n",
"N_gsp_ids = 20\n",
"\n",
"one_month_gsp_data_df = []\n",
"for i in range(0,20):\n",
" start_chunk = start\n",
" end_chunk = start_chunk + timedelta(days=30)\n",
" while end_chunk < end:\n",
" print(f'Getting data for id {i} from {start_chunk} to {end_chunk}')\n",
" one_month_gsp_data_df.append(pvl.between(start=start_chunk, \n",
" end=end_chunk, \n",
" entity_type=\"gsp\", \n",
" entity_id=i, \n",
" extra_fields=\"\", \n",
" dataframe=True))\n",
" \n",
" start_chunk = start_chunk + timedelta(days=30)\n",
" end_chunk = end_chunk + timedelta(days=30)\n",
" \n",
" \n",
"one_month_gsp_data_df = pd.concat(one_month_gsp_data_df)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3520f01e",
"metadata": {},
"outputs": [],
"source": [
"one_month_gsp_data_df = one_month_gsp_data_df.sort_values(by=['gsp_id','datetime_gmt'])\n",
"\n",
"fig = go.Figure()\n",
"for i in range(0,N_gsp_ids):\n",
" temp_df = one_month_gsp_data_df[one_month_gsp_data_df['gsp_id'] == i]\n",
" \n",
" fig.add_trace(go.Scatter(x=temp_df['datetime_gmt'], \n",
" y=temp_df['generation_mw'], name=metadata_df.loc[i].gnode_name))\n",
"\n",
"fig.update_layout(title='GSP solar data')\n",
"fig.update_yaxes(title='MW')\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6744491f",
"metadata": {},
"outputs": [],
"source": [
"print(metadata_df.loc[1])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "00e093dd",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Binary file added notebooks/2021-09/2021-09-01/GSP.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading