From 1b2f9fa7389db4827ebbdcfac24dd9272c573176 Mon Sep 17 00:00:00 2001 From: Leah Tacke genannt Unterberg <leah.tgu@pads.rwth-aachen.de> Date: Sun, 15 Oct 2023 12:57:22 +0200 Subject: [PATCH] WIP segment hist --- logic/page_logic.py | 66 +++++++++++++++++++++++++++++++++++++-------- poetry.lock | 56 +++++++++++++++----------------------- pyproject.toml | 6 ++--- 3 files changed, 80 insertions(+), 48 deletions(-) diff --git a/logic/page_logic.py b/logic/page_logic.py index 3fc0ccb..5fa5750 100644 --- a/logic/page_logic.py +++ b/logic/page_logic.py @@ -7,15 +7,15 @@ from mdata.core import MDConcepts, MachineData, ObservationTypes from mdata.core.factory import as_base from mdata.core.protocols import TSSpec from mdata.visualization import plotting, matplot - +import plotly.express as px class Widgets(Enum): Specifications = 'Specifications' RawData = 'Raw Data' Overview = 'Overview' Inspector = 'Inspector' - Dummy = 'Dummy' - + #Dummy = 'Dummy' + SegmentHists = 'Segment Histograms' available_widgets = [w for w in Widgets] @@ -74,25 +74,69 @@ def generate_page(md: MachineData, widget): if selected_measurement_spec is not None: fs = list(md.measurement_specs[selected_measurement_spec].features) object_list = list(md.measurement_series[selected_measurement_spec].objects) - measurement_feature_selection = c1.multiselect('Feature Selection', fs) + selected_feature = c1.multiselect('Feature Selection', fs) event_selection = c2.multiselect('Event Spec Selection', event_specs_list) plot_separately = c2.checkbox('plot separately', False) object_selection = c3.selectbox('Object Selection', object_list) - + # TODO remove + md.measurement_series[selected_measurement_spec].df = md.measurement_series[selected_measurement_spec].df.astype({f: 'float64' for f in selected_feature}) f = plotting.create_timeseries_plot(md, measurement_spec=selected_measurement_spec, obj=object_selection, - events=event_selection, features=measurement_feature_selection, + events=event_selection, features=selected_feature, split_into_subplots=plot_separately) st.plotly_chart(f, use_container_width=True) - elif widget == Widgets.Dummy: - measurement_spec_list = list(md.measurement_specs) - selected_measurement_spec = st.selectbox('Measurement Spec', measurement_spec_list) + # elif widget == Widgets.Dummy: + # measurement_spec_list = list(md.measurement_specs) + # selected_measurement_spec = st.selectbox('Measurement Spec', measurement_spec_list) + # if selected_measurement_spec is not None: + # f = matplot.create_basic_stacked_subplots(md, measurement_spec=selected_measurement_spec) + # st.write(f) + + elif widget == Widgets.SegmentHists: + c1, c2 = st.columns(2) + event_specs_list = list(md.event_series.keys()) + start_event = c1.selectbox('Event that marks segment start', event_specs_list) + end_event = c2.selectbox('Event that marks segment end', event_specs_list) + + c1, c2 = st.columns(2) + measurement_spec_list = list(md.measurement_series.keys()) + selected_measurement_spec = c1.selectbox('Measurement Spec', measurement_spec_list) + fs = [] if selected_measurement_spec is not None: - f = matplot.create_basic_stacked_subplots(md, measurement_spec=selected_measurement_spec) - st.write(f) + fs = list(md.measurement_specs[selected_measurement_spec].features) + selected_feature = c2.selectbox('Feature', fs) + + if start_event is not None and end_event is not None and selected_measurement_spec and selected_feature is not None: + starts = md.get_events(start_event).df.time + ends = md.get_events(end_event).df.time + if len(starts) != len(ends): + return + intervals = pd.IntervalIndex.from_arrays(starts, ends, closed='left') + sensor_1_copy = md.get_measurements(selected_measurement_spec).feature_column_view(include_object_col=True).copy() + from mdata.core.extensions.metadata import feature_typing + # TODO fix and remove data type stuff + sensor_1_copy = sensor_1_copy.convert_dtypes() + + sensor_1_copy['segment'] = pd.cut(sensor_1_copy.time, bins=intervals).map( + {iv: f'cycle {i}' for i, iv in enumerate(intervals)}) + sensor_1_copy_nna = sensor_1_copy[~sensor_1_copy.segment.isna()] + # sensor_1_copy = sensor_1_copy.set_index('segment') + f = selected_feature # sensor_1_md.timeseries_spec.features[0] + + print(intervals) + print(f) + print(sensor_1_copy_nna[f].dtype) + sensor_1_copy_nna = sensor_1_copy_nna.astype({f: 'float64'}) + print(sensor_1_copy_nna[f].dtype) + + mi, ma = sensor_1_copy_nna[f].min(), sensor_1_copy_nna[f].max() + + fig = px.histogram(sensor_1_copy_nna, x=f, range_x=[mi, ma], color='object', animation_frame='segment', + histnorm='probability', title='Histogram') + st.plotly_chart(fig, use_container_width=True) else: st.write('Invalid Widget') diff --git a/poetry.lock b/poetry.lock index c07b691..fd30921 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1381,13 +1381,13 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "plotly" -version = "5.16.1" +version = "5.17.0" description = "An open-source, interactive data visualization library for Python" optional = false python-versions = ">=3.6" files = [ - {file = "plotly-5.16.1-py2.py3-none-any.whl", hash = "sha256:19cc34f339acd4e624177806c14df22f388f23fb70658b03aad959a0e650a0dc"}, - {file = "plotly-5.16.1.tar.gz", hash = "sha256:295ac25edeb18c893abb71dcadcea075b78fd6fdf07cee4217a4e1009667925b"}, + {file = "plotly-5.17.0-py2.py3-none-any.whl", hash = "sha256:7c84cdf11da162423da957bb093287134f2d6f170eb9a74f1459f825892247c3"}, + {file = "plotly-5.17.0.tar.gz", hash = "sha256:290d796bf7bab87aad184fe24b86096234c4c95dcca6ecbca02d02bdf17d3d97"}, ] [package.dependencies] @@ -1517,17 +1517,6 @@ files = [ [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pympler" -version = "1.0.1" -description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pympler-1.0.1-py3-none-any.whl", hash = "sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d"}, - {file = "Pympler-1.0.1.tar.gz", hash = "sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa"}, -] - [[package]] name = "pyparsing" version = "3.0.9" @@ -1841,24 +1830,24 @@ test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "sciki [[package]] name = "seaborn" -version = "0.12.2" +version = "0.13.0" description = "Statistical data visualization" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "seaborn-0.12.2-py3-none-any.whl", hash = "sha256:ebf15355a4dba46037dfd65b7350f014ceb1f13c05e814eda2c9f5fd731afc08"}, - {file = "seaborn-0.12.2.tar.gz", hash = "sha256:374645f36509d0dcab895cba5b47daf0586f77bfe3b36c97c607db7da5be0139"}, + {file = "seaborn-0.13.0-py3-none-any.whl", hash = "sha256:70d740828c48de0f402bb17234e475eda687e3c65f4383ea25d0cc4728f7772e"}, + {file = "seaborn-0.13.0.tar.gz", hash = "sha256:0e76abd2ec291c655b516703c6a022f0fd5afed26c8e714e8baef48150f73598"}, ] [package.dependencies] -matplotlib = ">=3.1,<3.6.1 || >3.6.1" -numpy = ">=1.17,<1.24.0 || >1.24.0" -pandas = ">=0.25" +matplotlib = ">=3.3,<3.6.1 || >3.6.1" +numpy = ">=1.20,<1.24.0 || >1.24.0" +pandas = ">=1.2" [package.extras] dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] -docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] -stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] +docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx (<6.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] [[package]] name = "six" @@ -1962,13 +1951,13 @@ sqlcipher = ["sqlcipher3-binary"] [[package]] name = "streamlit" -version = "1.25.0" +version = "1.27.2" description = "A faster way to build and share data apps" optional = false python-versions = ">=3.8, !=3.9.7" files = [ - {file = "streamlit-1.25.0-py2.py3-none-any.whl", hash = "sha256:3c561dca1b5430e73b7f2d66bff1d26103936bb4223912ab563ffee881fccc30"}, - {file = "streamlit-1.25.0.tar.gz", hash = "sha256:8a7c93bee8703869045804afe22e9373c4e974fdb2a3e9abe3b027df3de03119"}, + {file = "streamlit-1.27.2-py2.py3-none-any.whl", hash = "sha256:726dd2bee638e0976aa72552900648d4ead4be28e30235355f10c25062669369"}, + {file = "streamlit-1.27.2.tar.gz", hash = "sha256:33f9ae0de5b7d59cd7daba87754c54ec837a76c24acfc41d1f8e5148f20903ee"}, ] [package.dependencies] @@ -1981,24 +1970,23 @@ importlib-metadata = ">=1.4,<7" numpy = ">=1.19.3,<2" packaging = ">=16.8,<24" pandas = ">=1.3.0,<3" -pillow = ">=7.1.0,<10" +pillow = ">=7.1.0,<11" protobuf = ">=3.20,<5" pyarrow = ">=6.0" -pydeck = ">=0.8,<1" -pympler = ">=0.9,<2" +pydeck = ">=0.8.0b4,<1" python-dateutil = ">=2.7.3,<3" -requests = ">=2.18,<3" +requests = ">=2.27,<3" rich = ">=10.14.0,<14" tenacity = ">=8.1.0,<9" toml = ">=0.10.1,<2" tornado = ">=6.0.3,<7" -typing-extensions = ">=4.1.0,<5" -tzlocal = ">=1.1,<5" +typing-extensions = ">=4.3.0,<5" +tzlocal = ">=1.1,<6" validators = ">=0.2,<1" watchdog = {version = ">=2.1.5", markers = "platform_system != \"Darwin\""} [package.extras] -snowflake = ["snowflake-snowpark-python"] +snowflake = ["snowflake-connector-python (>=2.8.0)", "snowflake-snowpark-python (>=0.9.0)"] [[package]] name = "tables" @@ -2366,4 +2354,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "fe276643e1aca633885135b799a119a9c4baed602d5bbdf0a81052606beeafd4" +content-hash = "e09b1c5b5b0e3ba52db59232d815cb7504e3f961015c3e6a6ba2e9efdef741ea" diff --git a/pyproject.toml b/pyproject.toml index 04d4c6c..06286f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ include = [".streamlit", "logic", "pages", "resources"] [tool.poetry.dependencies] python = "^3.11" -streamlit = "^1.25" +streamlit = "^1.27" cvxopt = "^1.3" # mdata = "^0.1.2" mdata = { git = "https://git-ce.rwth-aachen.de/machine-data/mdata.git", branch = "release" } @@ -18,8 +18,8 @@ mdata = { git = "https://git-ce.rwth-aachen.de/machine-data/mdata.git", branch = # { platform = "linux", git = "https://git-ce.rwth-aachen.de/leah.tgu/mdata.git", branch = "master" }, # { platform = "windows", path = "C:/Users/Leah/PycharmProjects/mdata", develop = true } #] -seaborn = "^0.12.2" -plotly = "^5.16" +seaborn = "^0.13" +plotly = "^5.17" tsdownsample = "^0.1.2" [build-system] -- GitLab