From 1df85b8f8b3463a1e886b8adbfa3b79c74640763 Mon Sep 17 00:00:00 2001 From: "Bauer, Leonie" <leonie.bauer-1@studium.uni-hamburg.de> Date: Mon, 22 Jan 2024 01:38:55 +0000 Subject: [PATCH] Delete U6_leonie --- Messmethoden_U6/U6_leonie | 341 -------------------------------------- 1 file changed, 341 deletions(-) delete mode 100644 Messmethoden_U6/U6_leonie diff --git a/Messmethoden_U6/U6_leonie b/Messmethoden_U6/U6_leonie deleted file mode 100644 index 9ffff99..0000000 --- a/Messmethoden_U6/U6_leonie +++ /dev/null @@ -1,341 +0,0 @@ -# Importing the required module for plotting data -import gsw # See https://teos-10.github.io/GSW-Python/ -import pycnv # See https://pypi.org/project/pycnv/ -import matplotlib.pyplot as plt -import pylab as pl - -# Defining the file path where the CNV file is located -# Choose either Seepraktikum 2023 data: https://bit.ly/3ut6NtV -#file_path = 'Messmethoden/Seepraktikum_2023/SBE19plus_01907321_2023_05_12_Cast36_loop_window.cnv' -# Or MSM121 data: https://bit.ly/3Ri19E2 -#file_path = 'Messmethoden/msm121_profiles/MSM121_015_1db.cnv' -# Or MSM121 to-yo profiles: https://bit.ly/3GlQh1D -file_path = 'Messmethoden/MSM121_060/MSM121_060_001_05db.cnv' - -# Load the data from the given file_path (may need to update to match your file location) -cnv = pycnv.pycnv(file_path) - -# Print some info to the screen -print('Test if we are in the Baltic Sea (usage of different equation of state): ' + str(cnv.baltic)) -print('Position of cast is: Longitude:', cnv.lon,'Latitude:',cnv.lat) -print('Time of cast was:', cnv.date) -print('Number of sensor entries (len(cnv.data.keys())):',len(cnv.data.keys())) -print('Names of sensor entries (cnv.data.keys()):',cnv.data.keys()) - -# Get data of entry -key0 = list(cnv.data.keys())[0] -data0 = cnv.data[key0] - -# Get derived data: -keyd0 = list(cnv.cdata.keys())[0] -datad0 = cnv.cdata[keyd0] -# Get unit of derived data -datad0_unit = cnv.cunits[keyd0] - -# Standard names are mapped to -# cnv.p,cnv.CT,cnv.T,cnv.SP,cnv.oxy -# units are _unit, e.g. cnv.p_unit - -print(list(cnv.data.keys())) -print(list(cnv.cdata.keys())) - -# Plot standard parameters -pl.figure(1) -pl.clf() -pl.subplot(1,2,1) -pl.plot(cnv.SA,cnv.p) # Note that pycnv has done the TEOS-10 conversion to SA for you using gsw -pl.xlabel('Absolute salinity [' + cnv.SA_unit + ']') -pl.ylabel('Pressure [' + cnv.p_unit + ']') -pl.gca().invert_yaxis() # Question: What happens if you comment out this line? -pl.grid(color='grey', linestyle='-', linewidth=0.5) - - -# Step 1a: Add grid lines -pl.grid(color='grey', linestyle='-', linewidth=0.5) - -# Step 1b: Limit the top of the plot to the surface (p=0) -pl.ylim(1600, 0) - -# Step 1c: Add a second plot for temperature, to the right of the salinity plot -pl.subplot(1,2,2) -pl.plot(cnv.T,cnv.p, color='red') # Note that pycnv has done the TEOS-10 conversion to SA for you using gsw -pl.xlabel('Temperature [' + cnv.T_unit + ']') -pl.ylabel('Pressure [' + cnv.p_unit + ']') -pl.gca().invert_yaxis() -pl.grid(color='grey', linestyle='-', linewidth=0.5) -pl.subplots_adjust(right=1) -pl.subplots_adjust(left=0.1, - bottom=0.1, - right=0.9, - top=0.9, - wspace=0.4, - hspace=0.4) #https://www.geeksforgeeks.org/how-to-set-the-spacing-between-subplots-in-matplotlib-in-python/ - -# Step 1d: Add a title to your figure, perhaps the station number, latitude and longitude -latitude = round(cnv.lat, 2) -longitude = round(cnv.lon, 2) #https://stackoverflow.com/questions/20457038/how-to-round-to-2-decimals-with-python -pl.suptitle('Station: 64,' +' Latitude: '+str(latitude)+', Longitude: '+str(longitude)) #title function needs strings -#one title for all subplots: https://stackoverflow.com/questions/7066121/how-to-set-a-single-main-title-above-all-the-subplots - - -#see which attributes are in the file (https://code.activestate.com/pypm/cnv/) -#file = 'Messmethoden/MSM121_060/MSM121_060_001_05db.cnv' -#cnvdump file.cnv -#cnv2cdf file.cnv -#from cnv.fCNV import fCNV -#profile = fCNV('file') -#profile.attributes - - -# Step 1e: Print the figure to a *png file -import os -desktop_pfad = os.path.join(os.path.expanduser('~'), 'Desktop') #zum Desktop -ordner_pfad = os.path.join(desktop_pfad, 'UNI', 'Semester5', 'Messmethoden' , 'Excercise_6') #zum Ordner dort -bild_pfad = os.path.join(ordner_pfad, '1_stat64_salt_temperature.png') -plt.savefig(bild_pfad, bbox_inches='tight') - - -# Plotting profile data on the same axes -pl.subplot(1,2,2) -pl.plot(cnv.oxy,cnv.p) -pl.plot(cnv.cdata['oxy0'],cnv.p, label='Oxy0') -pl.plot(cnv.cdata['oxy1'],cnv.p, label='Oxy1') -pl.legend() -pl.xlabel('Oxygen [' + cnv.oxy_unit + ']') -pl.ylabel('Pressure [' + cnv.p_unit + ']') -pl.gca().invert_yaxis() -pl.title('Station: 64,' +' Latitude: '+str(latitude)+', Longitude: '+str(longitude)) #title function needs strings -bild_pfad = os.path.join(ordner_pfad, '2_stat64_oxygen_oneplot.png') -plt.savefig(bild_pfad, bbox_inches='tight') - - -# Step 2a-e: Clean up the figure as above -pl.subplot(1,2,1) -pl.plot(cnv.oxy,cnv.p) -pl.plot(cnv.cdata['oxy0'],cnv.p, color='orange', label='Oxy0') -pl.xlabel('Oxygen [' + cnv.oxy_unit + ']') -pl.ylabel('Pressure [' + cnv.p_unit + ']') -pl.grid(color='grey', linestyle='-', linewidth=0.5) #grid -pl.gca().invert_yaxis() - - -pl.subplot(1,2,2) -pl.plot(cnv.cdata['oxy1'],cnv.p, color='green', label='Oxy1') -pl.xlabel('Oxygen [' + cnv.oxy_unit + ']') -pl.ylabel('Pressure [' + cnv.p_unit + ']') -pl.grid(color='grey', linestyle='-', linewidth=0.5) -pl.gca().invert_yaxis() -pl.subplots_adjust(right=1) -pl.subplots_adjust(left=0.1, - bottom=0.1, - right=0.9, - top=0.9, - wspace=0.4, - hspace=0.4) - -pl.suptitle('Station: 64,' +' Latitude: '+str(latitude)+', Longitude: '+str(longitude)) #title function needs strings - - -#savefig -bild_pfad = os.path.join(ordner_pfad, '3_stat64_oxygen_subplots.png') -plt.savefig(bild_pfad, bbox_inches='tight') - - - -#Step 2f (optional): Compute the apparent oxygen utilisation See: https://en.wikipedia.org/wiki/#Apparent_oxygen_utilisation you will need to calculate oxygen solubility (see the gsw documentation for O2_sol) - -#AOU = oxygen solubility - oxygen observed - -#solubility (Löslichkeit) -#observed (gemessen) - - - -#calculate solubility: -#https://www.teos-10.org/pubs/gsw/html/gsw_O2sol.html -import gsw -#from gsw import gsw_O2sol -#help(gsw_O2sol) - -SA = cnv.SA -CT = cnv.CT -p = cnv.p -long = cnv.lon -lat = cnv.lat - - -print('length SA:',len(SA)) -print('shape CT:', CT.shape) - -print() -print('Absolute Salinity:', SA) -print() -print('Conservative temperature:', CT) -print() -print('Pressure:', p) -print() -#print(long) -#print(lat) -print() - -#lat und lon into numpy arrays: https://stackoverflow.com/questions/5891410/numpy-array-initialization-fill-with-identical-values -import numpy as np -lat = np.full((5022,), str(lat)) -long = np.full((5022,), str(long)) -print('Shape Lat_array:', lat.shape) -print('Shape Lon_array:', long.shape) -print() - -def y(SA,CT,p,long,lat): - return gsw.O2sol(SA,CT,p,long,lat) - - -oxygen_solubility = gsw.O2sol(SA,CT,p,long,lat) - -print('Oxygen solobility [umol/kg]:', oxygen_solubility) #Einheit: https://teos-10.github.io/GSW-Python/gsw_flat.html# -print() - - -#AOU = oxygen solubility - oxygen observed - -oxygen_observed = cnv.oxy -print('Observed Oxygen:', '[',cnv.oxy_unit,']' , oxygen_observed) #Einheit nachgelesen eigentlich ml/l -print() - -AOU = oxygen_solubility - oxygen_observed -print('Apparent oxygen utilisation:', AOU) - - -# Make a T-S diagram -pl.clf() -pl.plot(cnv.SA,cnv.CT) -pl.xlabel('Absolute salinity [' + cnv.SA_unit + ']') -pl.ylabel('Conservative temperature [' + cnv.CT_unit + ']') - -# Step 3a: Add contours of potential density -# - Hint, you will need to create a vector of temperature and salinity spanning at -# least the ranges in the profile -# - You will then need to use these gridded vectors to calculate potential density using the gsw toolbox -print(cnv.SA.shape) -print() -#source: https://jakevdp.github.io/PythonDataScienceHandbook/04.04-density-and-contour-plots.html -x = cnv.SA -y = cnv.CT -X, Y = np.meshgrid(x, y)#builds two-dimensional grids from one-dimensional arrays (T+S to T&S) - -#Z as potentail desity -#define function for calculating potential density from SA & CT (pre-defined gsw function) -def f(x,y): - return gsw.density.sigma0(x, y) - -#Z as potential density calculated from temperature and salinity two dimensional grids, type(Z):numpy ndarray, Z.shape:(5022, 5022) -Z = f(X,Y) -plot = plt.contour(X, Y, Z, colors='black') - -#potential density in new variable, type(pot_dens): numpy ndarray, pot_dens.shape: p22,) -pot_dens = gsw.density.sigma0(x, y) -print('potential density from gsw function:', pot_dens) -print() - - -# Step 3b: Add contour labels for the density - -#countour adding (source: https://matplotlib.org/stable/gallery/images_contours_and_fields/contour_label_demo.html) -format = {} -labels = pot_dens.tolist() -for lev, lab in zip(plot.levels, labels): - format[lev]=lab - -plt.clabel(plot, plot.levels, inline=True, fmt=format, fontsize=10) - - - - -# Step 3c: Add a title -pl.suptitle('Station: 64,' +' Latitude: '+str(latitude)+', Longitude: '+str(longitude)) #title function needs strings - - - -# Step 3d: Print the figure as a *png -bild_pfad = os.path.join(ordner_pfad, '4_stat64_T_S_diagram.png') -plt.savefig(bild_pfad, bbox_inches='tight') - - - -# Challenge 4: Load multiple cnv files into python. -cnv1 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_001_1db.cnv') -cnv2 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_002_1db.cnv') -cnv3 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_003_1db.cnv') -cnv4 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_014_1db.cnv') -cnv5 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_015_1db.cnv') -cnv6 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_016_1db.cnv') -cnv7 = pycnv.pycnv('Messmethoden/msm121_profiles/MSM121_017_1db.cnv') - -# Step 4a: Plot a map of the stations - -#first: values for station, Lon and lat (https://stackoverflow.com/questions/53233228/plot-latitude-longitude-from-csv-in-python-3-6) -stations = ['1', '2', '3', '14', '15', '16', '17'] -latitudes = [cnv1.lat, cnv2.lat, cnv3.lat, cnv4.lat, cnv5.lat, cnv6.lat, cnv7.lat] -longitudes = [cnv1.lon, cnv2.lon, cnv3.lon, cnv4.lon, cnv5.lon, cnv6.lon, cnv7.lon] - -#second: data to csv (https://www.delftstack.com/de/howto/python/write-list-to-csv-python/) -import pandas as pd -table = {"station": stations, "latitude": latitudes, "longitude": longitudes} -df = pd.DataFrame(table) -df.to_csv("lon_lat.csv") - -#third: plot coordinates on geopandas map (https://stackoverflow.com/questions/53233228/plot-latitude-longitude-from-csv-in-python-3-6) -import geopandas as gpd -from geopandas import GeoDataFrame -import shapely -from shapely.geometry import Point -#define dataframe -df = pd.read_csv('lon_lat.csv', delimiter=',', skiprows=0, low_memory=False) -#define datapoints for map -geometry = [Point(xy) for xy in zip(df['longitude'], df['latitude'])] -#plot as geodataframe? -gdf = GeoDataFrame(df, geometry=geometry) -#load worldmap -world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) -#use gdf (defined geodatframe with coordinates) abd plot onto map -gdf.plot(ax=world.plot(figsize=(10, 6)), marker='o', color='red', markersize=15); -bild_pfad = os.path.join(ordner_pfad, '5_station_map.png') -plt.savefig(bild_pfad, bbox_inches='tight') -plt.show() - -#again, but zoomed in -#use gdf (defined geodatframe with coordinates) abd plot onto map -gdf.plot(ax=world.plot(figsize=(10, 6)), marker='o', color='red', markersize=15); -plt.ylim(25,75) -plt.xlim(-100,0) -bild_pfad = os.path.join(ordner_pfad, '6_station_map_zoomed.png') -plt.savefig(bild_pfad, bbox_inches='tight') - -#again, but zoomed in more -#use gdf (defined geodatframe with coordinates) abd plot onto map -gdf.plot(ax=world.plot(figsize=(10, 6)), marker='o', color='red', markersize=15); -plt.ylim(35,55) -plt.xlim(-60,-30) -bild_pfad = os.path.join(ordner_pfad, '7_station_map_zoomed_more.png') -plt.savefig(bild_pfad, bbox_inches='tight') - - -# Step 4b (optional): Add bathymetry -# - see e.g. GEBCO https://www.gebco.net/data_and_products/gridded_bathymetry_data/ -# - or ETOPO1. Note these files are big when full resolution and global. -# You will probably want to slice/prepare the data in a separate python notebook/file - -# Step 4c: Load multiple stations into python -# - Option one: Keep them all as separate variables (cnv1, cnv2, cnv3, etc) -# - Option two: Combine them into a multidimensaionl np.ndarray -# In order to combine them, they will need to be interpolated onto the same -# pressure grid (suggested 1 dbar grid). - -# Step 4d: Plot multiple temperature profiles on a single set of axes (see Step 1) - -# Step 4e: Repeat for salinity - -# Step 4f: Repeat for T-S diagrams (see Step 3) - -# Noting the data type that cnv is using may help: -type(cnv.SA) -- GitLab