stoer_demo / data /src /fischfang.py
ju2ez's picture
initial commit
9953d1a
import io
import pandas as pd
import geopandas
import mercury as mr
import matplotlib.pyplot as plt
import contextily as cx
import numpy as np
def adjust_coordinates(row):
row.lat += np.random.normal(0, 2e-2)
row.lon += np.random.normal(0, 2e-2)
return row
def load_data():
df_receiver = pd.read_csv("../receiver.csv", encoding="latin-1", delimiter=";")
df_fishes = pd.read_excel("../20230310_Receiver_Polen.xlsx")
df_stoer_ids = pd.read_excel("../20230310_Receiver_Polen.xlsx",
sheet_name = "eingesetzte Akustik-Tags")
df_fishes_vemco = pd.read_excel("../Daten Vemco Receiver.xlsx", decimal=',').copy()
#df_stoer_ids_vemco = pd.read_excel("Daten Vemco Receiver.xlsx",)
#sheet_name = "eingesetzte Akustik-Tags")
df_fishes_vemco = df_fishes_vemco.drop(columns=["Longitude", "Latitude"])
df_receiver_vemco = pd.read_csv("../Sturgeons.txt",
delimiter=",").copy()
df_fishes_vemco_m = pd.merge(left=df_fishes_vemco, right=df_receiver_vemco, how="left", on="Receiver", suffixes=("", "_y"))
receiver = df_receiver.copy()
receiver_vemco = df_receiver_vemco.copy()
receiver_formatted = receiver_vemco.rename(columns={
"Receiver" : "receiver_sn",
"Latitude": "lat",
"Longitude": "lon",
"Station.name" : "station_name"})[["receiver_sn",
"lat", "lon",
"station_name"]]
all_receivers = pd.concat([receiver, receiver_formatted])
fishes = df_fishes.copy()
fishes = fishes.loc[fishes[" ID"].isin(df_stoer_ids["ID"])]
fishes = fishes.rename(columns={" Receiver":"receiver_sn"})
fishes = pd.merge(fishes, all_receivers[["lon", "lat", "receiver_sn"]],
on="receiver_sn", how="left")
df_fishes_vemco_form = df_fishes_vemco_m.drop(columns="ID")
df_fishes_vemco_form = df_fishes_vemco_form.rename(columns={"Date.and.Time.nocor": "Date and Time (UTC)",
"Longitude" : "lon",
"Latitude": "lat",
"Transmitter": " ID",
"Receiver" : "receiver_sn"
})
all_fishes = pd.concat([fishes, df_fishes_vemco_form])
all_fishes = all_fishes.drop_duplicates([" ID", "receiver_sn"]).reset_index().drop(columns="index")
all_fishes.index = list(all_fishes.index)
all_fishes = all_fishes.apply(adjust_coordinates, axis=1)
gdf_fishes = geopandas.GeoDataFrame(
all_fishes, geometry=geopandas.points_from_xy(
all_fishes.lon, all_fishes.lat), crs = 4326)
receiver_vemco = df_receiver_vemco.copy()
df_wm = gdf_fishes.to_crs(epsg=3857)
gdf_receiver = geopandas.GeoDataFrame(
all_receivers,
geometry=geopandas.points_from_xy(all_receivers.lon, all_receivers.lat),
crs = 4326)
gdf_receiver['coords'] = gdf_receiver.to_crs(epsg=3857)['geometry'].apply(
lambda x: x.representative_point().coords[:])
gdf_receiver['coords'] = [coords[0] for coords in gdf_receiver['coords']]
return gdf_receiver, df_wm
def dontcall():
gdf_receiver = pd.merge(gdf_receiver,
df_wm.groupby("receiver_sn")["ID"].count().reset_index().rename(columns={" ID": "fish_count"}),
on="receiver_sn", how="left")
#gdf_receiver = gdf_receiver.rename(columns={" ID_x": "fish_count"})
gdf_receiver.fillna(0, inplace=True)
gdf_receiver.drop_duplicates("receiver_sn")
ax = df_wm.plot(figsize=(20, 20), alpha=1, edgecolor='k')
gdf_receiver.drop_duplicates("receiver_sn")[:7].to_crs(epsg=3857).plot(ax=ax, marker="^",
markersize=300, color="r",
alpha=.45,
label="Receiver Station")
gdf_receiver.drop_duplicates("receiver_sn")[7:].to_crs(epsg=3857).plot(ax=ax, marker="^",
markersize=100, color="g",
alpha=.45,
label="Receiver Station Polen")
cx.add_basemap(ax)
for idx, row in gdf_receiver.drop_duplicates("receiver_sn").iterrows():
plt.annotate(text=int(row["fish_count"]), xy=row['coords'],
horizontalalignment=str(np.random.choice(['left'])), size=20)
ax = gdf_receiver[:7].to_crs(epsg=3857).plot( marker="^", markersize=300, color="r", alpha=.6, label="Receiver Station", figsize=(15, 20))
ax = gdf_receiver[7:].to_crs(epsg=3857).plot( ax=ax, marker="^", markersize=150, color="b", alpha=.6, label="Receiver Station Vemco", figsize=(15, 20))
df_wm.loc[df_wm[" ID"].isin(only_one.index)].plot(ax=ax, cmap="tab20b", markersize=100, figsize=(15, 20), alpha=.7, edgecolor='k', categorical=True, column=" ID", legend=True, legend_kwds={'bbox_to_anchor':(1, 1.05),'fontsize':16,'frameon':True}, label="an einem Receiver")
df_wm.loc[df_wm[" ID"].isin(two_to_four.index)].plot(cmap="tab20c", markersize=100, marker="s", ax=ax, figsize=(15, 20), alpha=.8, edgecolor='k', categorical=True, column=" ID", legend=False, legend_kwds={'bbox_to_anchor':(1, 1.05),'fontsize':16,'frameon':True}, label="an zwei bis vier Receivern")
df_wm.loc[df_wm[" ID"].isin(more_than_four.index)].plot( ax=ax, markersize=120, marker="d", figsize=(15, 20), alpha=.7, edgecolor='k', categorical=True, column=" ID", legend=False, legend_kwds={'bbox_to_anchor':(1, 1.05),'fontsize':16,'frameon':True}, label="an mehr als vier Receivern")
cx.add_basemap(ax)
ax.legend(loc="upper right")
for idx, row in gdf_receiver.iterrows():
plt.annotate(text=str(" "), xy=row['coords'],
horizontalalignment='left', size=20)