SUAD_Park / src /park_statistics.py
Léo Bourrel
fix: str instead of list
d29e7cc
import ast
import itertools
from collections import Counter
import pandas as pd
import plotly.express as px
from plotly.graph_objs import Figure
import streamlit as st
from typing import Any
def get_elements(x: str, key: str = "elements") -> Any:
try:
result = ast.literal_eval(x)[key]
print(type(result), result)
if isinstance(result, str):
return [result]
return result
except:
return []
def get_most_common_elements(df: pd.DataFrame, column: str, key: str = "elements") -> list:
built_elements = df[column].apply(get_elements, args=(key,))
most_common_elements = Counter(itertools.chain.from_iterable(built_elements)).most_common()
return most_common_elements
def get_plot_from_most_common_elements(df: pd.DataFrame, column: str, key: str = "elements") -> Figure:
most_common_elements = get_most_common_elements(df, column, key)
most_common_elements = pd.DataFrame(most_common_elements, columns=[column, "count"])
return px.bar(
most_common_elements,
x=column,
y="count",
labels={"count": "# Objects", column: "Built Elements"},
)
def aggregate_fauna_elements(df: pd.DataFrame) -> dict:
fauna_elements = {}
fauna = df["fauna_identification"].apply(lambda x: ast.literal_eval(x)["fauna"])
for i in range(len(fauna)):
for element in fauna[i]:
if element["type"] in fauna_elements:
fauna_elements[element["type"]] += element["count"]
else:
fauna_elements[element["type"]] = element["count"]
return fauna_elements