[PYTHON] Übertragen Sie Daten mit Streamlit auf eine andere Seite (Registerkarte)

1. Zuerst

Datenanalyseergebnisse können schnell als Web-App streamlit visualisiert werden. Es macht Spaß, weil es auf der offiziellen Website verschiedene Beispiele gibt. Die, die ich kürzlich gesehen habe, wurde von huggingface für Veröffentlichte Datensätze anzeigen verwendet.

Ich verwende Streamlit sehr bequem, aber wenn ich mit einem Optionsfeld wie der folgenden Seite zu einer anderen Seite (Registerkarte) wechsle, verschwinden alle Variablen und Datenrahmen. Wenn ich Daten auf der Seite "Eingabedaten" hochlade und zur Seite "Datenverarbeitung" gehe, kann ich nicht auf die Daten verweisen, die ich hochgeladen und in den Datenrahmen eingefügt habe.

image.png

Seite zum Hochladen von Daten → Seite zur Datenverarbeitung → Seite zur Datenvisualisierung usw. Ich hatte Probleme, als ich Daten über mehrere Seiten hinweg verarbeiten wollte. Wenn Sie versuchen, es auf einer Seite fertigzustellen, ist es aufgrund der aktuellen Spezifikationen von streamlit vertikal sehr lang.

2. Zusammenfassung

Es war gut, im Internet herumzuwandern und am Ende die Sitzung zu nutzen, also werde ich es aufschreiben. Leberteil ↓

Sitzungsteil
class _SessionState:

    def __init__(self, session, hash_funcs):
        """Initialize SessionState instance."""
        self.__dict__["_state"] = {
            "data": {},
            "hash": None,
            "hasher": _CodeHasher(hash_funcs),
            "is_rerun": False,
            "session": session,
        }

    def __call__(self, **kwargs):
        """Initialize state data once."""
        for item, value in kwargs.items():
            if item not in self._state["data"]:
                self._state["data"][item] = value

    def __getitem__(self, item):
        """Return a saved state value, None if item is undefined."""
        return self._state["data"].get(item, None)
        
    def __getattr__(self, item):
        """Return a saved state value, None if item is undefined."""
        return self._state["data"].get(item, None)

    def __setitem__(self, item, value):
        """Set state value."""
        self._state["data"][item] = value

    def __setattr__(self, item, value):
        """Set state value."""
        self._state["data"][item] = value
    
    def clear(self):
        """Clear session state and request a rerun."""
        self._state["data"].clear()
        self._state["session"].request_rerun()
    
    def sync(self):
        """Rerun the app with all state values up to date from the beginning to fix rollbacks."""

        # Ensure to rerun only once to avoid infinite loops
        # caused by a constantly changing state value at each run.
        #
        # Example: state.value += 1
        if self._state["is_rerun"]:
            self._state["is_rerun"] = False
        
        elif self._state["hash"] is not None:
            if self._state["hash"] != self._state["hasher"].to_bytes(self._state["data"], None):
                self._state["is_rerun"] = True
                self._state["session"].request_rerun()

        self._state["hash"] = self._state["hasher"].to_bytes(self._state["data"], None)


def _get_session():
    session_id = get_report_ctx().session_id
    session_info = Server.get_current()._get_session_info(session_id)

    if session_info is None:
        raise RuntimeError("Couldn't get your Streamlit Session object.")
    
    return session_info.session


def _get_state(hash_funcs=None):
    session = _get_session()

    if not hasattr(session, "_custom_session_state"):
        session._custom_session_state = _SessionState(session, hash_funcs)

    return session._custom_session_state


3. 3. Spezifisches Beispiel

Wenn Sie das oben genannte in den Code einfügen,

def main():
    state = _get_state()
    pages = {
        "Eingabedaten":in_page,
        "Datenverarbeitung":tran_page,
        "Datenvisualisierung":out_page
    }

    #st.sidebar.title(":floppy_disk: Page states")
    page = st.sidebar.radio("Seitenauswahl", tuple(pages.keys()))

    # Display the selected page with the session state
    pages[page](state)

    # Mandatory to avoid rollbacks with widgets, must be called at the end of your app
    state.sync()

Machen Sie eine Hauptseite mit Sie können die Seite, die Sie liefern möchten, und die Seite, die Sie akzeptieren möchten, mit dem Status verbinden. ~~. Natürlich konnte ich auch den Datenrahmen übergeben.

def in_page(state):
    ~~~
    
    #Geben Sie die Variable an, die Sie übergeben möchten.~~Steck es rein
    state.dataframe1 = dataframe1
    state.var1 = var1

def tran_page(state):
    #Die Variable, die Sie akzeptieren möchten~~=state.~~Akzeptieren bei.
    dataframe1 = state.dataframe1
    var1 = state.var1
    ~~~

def out_page(state):
    ~~~

#Endlich Haupt()Und ausführen.
main()

4. Referenz

  • https://discuss.streamlit.io/t/multi-page-app-with-session-state/3074/24
  • https://huggingface.co/nlp/viewer/?dataset=aeslc

Recommended Posts

Übertragen Sie Daten mit Streamlit auf eine andere Seite (Registerkarte)
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Konvertieren Sie Excel-Daten mit Python in JSON
Senden Sie Daten mit Vue.js an die DRF-API
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Kopieren Sie den Consumer-Offset mit kafka-python auf einen anderen
Wie man Problemdaten mit Paiza liest
Erstellen von CSV-Beispieldaten mit Hypothese
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Speichern Sie Daten zum Flashen mit STM32 Nucleo Board
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
So kratzen Sie Pferderenndaten mit Beautiful Soup
Schreiben Sie CSV-Daten mit AWS-Lambda + Python in AWS-S3
Ich möchte mit Djangos Migrate von vorne beginnen
Extrahieren Sie mit Python Daten von einer Webseite
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit