commit 4d0472f136e4a834e732a6a514ce23b76304c8c1 Author: DotNaos Date: Thu Oct 3 11:40:50 2024 +0200 Zero Shot diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..255539c --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Python +**/Lib +**/Scripts +**/etc +**/pyvenv.cfg +**/share diff --git a/Task.md b/Task.md new file mode 100644 index 0000000..fd1e804 --- /dev/null +++ b/Task.md @@ -0,0 +1,16 @@ +# Mini Hackathon: Data Visualizer & Analyzer +Aufgabe: "List Data Visualizer & Analyzer” -> 70 Minuten +Nutze LLMs und erstelle eine kleine Webanwendung (zum Beispiel mit Streamlit oder einem anderen +Framework deiner Wahl), die eine Liste von numerischen Daten vom Benutzer akzeptiert und folgende +Funktionen bereitstellt: +1. Statistische Analyse: Zeige grundlegende Statistiken der eingegebenen Daten (Durchschnitt, Median, +Standardabweichung, etc.). +1. Visualisierung: Erstelle mindestens zwei verschiedene Diagramme, die die Daten visualisieren (z.B. +Histogramm, Boxplot, etc.). +1. Interaktive Filter: Ermögliche es dem Benutzer, Filter auf die Daten anzuwenden (z.B. Werte über/unter +einem bestimmten Schwellenwert anzeigen). +1. Dynamische Updates: Die Visualisierungen und Analysen sollten sich dynamisch aktualisieren, wenn +der Benutzer die Liste ändert. +Bonus (für die besonders Schnellen): +• Implementiere eine Funktion, die automatisch Ausreißer in den Daten erkennt und markiert. +• Erweitere die Anwendung um die Möglichkeit, Daten aus einer CSV-Datei hochzuladen und zu analysieren. diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..f858164 --- /dev/null +++ b/backend/app.py @@ -0,0 +1,76 @@ +import streamlit as st +import pandas as pd +import numpy as np +import plotly.express as px + +st.title("List Data Visualizer & Analyzer") + +# Seitenleiste für die Dateneingabe +st.sidebar.header("Dateneingabe") + +datenquelle = st.sidebar.radio("Datenquelle auswählen:", ("Manuelle Eingabe", "CSV-Datei hochladen")) + +if datenquelle == "Manuelle Eingabe": + dateneingabe = st.sidebar.text_area("Gib Zahlen ein, getrennt durch Kommas:", value="1,2,3,4,5") + try: + datenliste = [float(x.strip()) for x in dateneingabe.split(",") if x.strip()] + df = pd.DataFrame(datenliste, columns=['Werte']) + except ValueError: + st.error("Bitte gib eine gültige Liste von Zahlen ein.") + st.stop() +elif datenquelle == "CSV-Datei hochladen": + hochgeladene_datei = st.sidebar.file_uploader("Wähle eine CSV-Datei aus", type="csv") + if hochgeladene_datei is not None: + df = pd.read_csv(hochgeladene_datei) + # Annahme: Die Daten stehen in der ersten Spalte + df = df.iloc[:, [0]] + df.columns = ['Werte'] + else: + st.warning("Bitte lade eine CSV-Datei hoch.") + st.stop() + +# Interaktive Filter +st.sidebar.header("Datenfilter") +min_wert = float(df['Werte'].min()) +max_wert = float(df['Werte'].max()) +filterbereich = st.sidebar.slider('Wertebereich auswählen:', min_wert, max_wert, (min_wert, max_wert)) +gefilterter_df = df[(df['Werte'] >= filterbereich[0]) & (df['Werte'] <= filterbereich[1])] + +# Statistische Analyse +st.header("Statistische Analyse") +st.write(f"**Anzahl:** {gefilterter_df['Werte'].count()}") +st.write(f"**Mittelwert:** {gefilterter_df['Werte'].mean()}") +st.write(f"**Median:** {gefilterter_df['Werte'].median()}") +st.write(f"**Standardabweichung:** {gefilterter_df['Werte'].std()}") + +# Ausreißererkennung (mithilfe der 1.5*IQR-Regel) +Q1 = gefilterter_df['Werte'].quantile(0.25) +Q3 = gefilterter_df['Werte'].quantile(0.75) +IQR = Q3 - Q1 +untere_grenze = Q1 - 1.5 * IQR +obere_grenze = Q3 + 1.5 * IQR +ausreisser = gefilterter_df[(gefilterter_df['Werte'] < untere_grenze) | (gefilterter_df['Werte'] > obere_grenze)] + +# Visualisierungen +st.header("Datenvisualisierungen") + +# Histogramm +st.subheader("Histogramm") +fig1 = px.histogram(gefilterter_df, x='Werte', nbins=20, title='Histogramm') +st.plotly_chart(fig1) + +# Boxplot +st.subheader("Boxplot") +fig2 = px.box(gefilterter_df, y='Werte', points="all", title='Boxplot mit Ausreißern') +st.plotly_chart(fig2) + +# Ausreißer anzeigen +if not ausreisser.empty: + st.subheader("Erkannte Ausreißer") + st.write(ausreisser) +else: + st.subheader("Keine Ausreißer erkannt") + +# Gefilterte Daten anzeigen +st.header("Gefilterte Daten") +st.write(gefilterter_df) diff --git a/backend/data/model_function_data.csv b/backend/data/model_function_data.csv new file mode 100644 index 0000000..271d049 --- /dev/null +++ b/backend/data/model_function_data.csv @@ -0,0 +1,101 @@ +x,y +0.0,2.5777634568920975 +0.10101010101010101,2.7797836589122995 +0.20202020202020202,2.9818038609325015 +0.30303030303030304,3.1838240629527035 +0.40404040404040403,3.3858442649729055 +0.5050505050505051,3.587864466993108 +0.6060606060606061,3.7898846690133094 +0.7070707070707071,3.991904871033512 +0.8080808080808081,4.193925073053713 +0.9090909090909091,4.395945275073916 +1.0101010101010102,4.597965477094118 +1.1111111111111112,4.79998567911432 +1.2121212121212122,5.002005881134521 +1.3131313131313131,5.204026083154724 +1.4141414141414141,5.406046285174926 +1.5151515151515151,5.608066487195128 +1.6161616161616161,5.810086689215329 +1.7171717171717171,6.012106891235532 +1.8181818181818181,6.214127093255734 +1.9191919191919191,6.416147295275936 +2.0202020202020203,6.618167497296138 +2.121212121212121,6.82018769931634 +2.2222222222222223,7.022207901336542 +2.323232323232323,7.224228103356744 +2.4242424242424243,7.426248305376946 +2.525252525252525,7.628268507397148 +2.6262626262626263,7.83028870941735 +2.727272727272727,8.03230891143755 +2.8282828282828283,8.234329113457754 +2.929292929292929,8.436349315477955 +3.0303030303030303,8.638369517498157 +3.131313131313131,8.84038971951836 +3.2323232323232323,9.04240992153856 +3.3333333333333335,9.244430123558764 +3.4343434343434343,9.446450325578965 +3.5353535353535355,9.648470527599168 +3.6363636363636362,9.85049072961937 +3.7373737373737375,10.05251093163957 +3.8383838383838382,10.254531133659773 +3.9393939393939394,10.456551335679976 +4.040404040404041,10.658571537700178 +4.141414141414141,10.860591739720379 +4.242424242424242,11.062611941740581 +4.343434343434343,11.264632143760783 +4.444444444444445,11.466652345780986 +4.545454545454545,11.668672547801187 +4.646464646464646,11.870692749821389 +4.747474747474747,12.072712951841591 +4.848484848484849,12.274733153861794 +4.94949494949495,12.476753355881996 +5.05050505050505,12.678773557902197 +5.151515151515151,12.8807937599224 +5.252525252525253,13.082813961942602 +5.353535353535354,13.284834163962804 +5.454545454545454,13.486854365983005 +5.555555555555555,13.688874568003207 +5.656565656565657,13.89089477002341 +5.757575757575758,14.092914972043612 +5.858585858585858,14.294935174063813 +5.959595959595959,14.496955376084015 +6.0606060606060606,14.698975578104218 +6.161616161616162,14.90099578012442 +6.262626262626262,15.10301598214462 +6.363636363636363,15.305036184164823 +6.4646464646464645,15.507056386185026 +6.565656565656566,15.709076588205228 +6.666666666666667,15.911096790225432 +6.767676767676767,16.113116992245633 +6.8686868686868685,16.315137194265834 +6.96969696969697,16.517157396286034 +7.070707070707071,16.71917759830624 +7.171717171717171,16.92119780032644 +7.2727272727272725,17.123218002346643 +7.373737373737374,17.325238204366844 +7.474747474747475,17.527258406387045 +7.575757575757575,17.729278608407245 +7.6767676767676765,17.93129881042745 +7.777777777777778,18.133319012447654 +7.878787878787879,18.335339214467854 +7.979797979797979,18.537359416488055 +8.080808080808081,18.73937961850826 +8.181818181818182,18.94139982052846 +8.282828282828282,19.14342002254866 +8.383838383838384,19.345440224568865 +8.484848484848484,19.547460426589065 +8.585858585858587,19.74948062860927 +8.686868686868687,19.95150083062947 +8.787878787878787,20.15352103264967 +8.88888888888889,20.355541234669875 +8.98989898989899,20.557561436690076 +9.09090909090909,20.759581638710277 +9.191919191919192,20.96160184073048 +9.292929292929292,21.16362204275068 +9.393939393939394,21.365642244770886 +9.494949494949495,21.567662446791086 +9.595959595959595,21.769682648811287 +9.696969696969697,21.97170285083149 +9.797979797979798,22.17372305285169 +9.8989898989899,22.375743254871896 +10.0,22.577763456892097