Les résultats de l'analyse des données peuvent être rapidement visualisés sous forme d'application Web streamlit. C'est amusant car il existe différents échantillons sur le site officiel. Celui que j'ai vu récemment a été utilisé par huggingface pour Afficher les ensembles de données publiés.
J'utilise streamlit très facilement, mais lorsque je passe à une autre page (onglet) avec un bouton radio comme la page ci-dessous, toutes les variables et les dataframes disparaissent. Lorsque je télécharge des données sur la page «Données d'entrée» et que je vais sur la page «Traitement des données», je ne peux pas me référer aux données que j'ai téléchargées et placées dans le dataframe.
Page de téléchargement de données → page de traitement des données → page de visualisation des données, etc. J'avais des problèmes lorsque je voulais traiter des données sur plusieurs pages. Si vous essayez de le compléter en une seule page, il sera très long verticalement en raison des spécifications actuelles de streamlit.
C'était bien de se promener sur Internet et de relayer en utilisant la session à la fin, alors je vais l'écrire. Partie du foie ↓
<détails> 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
Si vous mettez ce qui précède dans le code,
def main():
state = _get_state()
pages = {
"Des données d'entrée":in_page,
"Traitement de l'information":tran_page,
"Visualisation de données":out_page
}
#st.sidebar.title(":floppy_disk: Page states")
page = st.sidebar.radio("Sélection de page", 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()
Créer une page principale avec Vous pouvez connecter la page que vous souhaitez livrer et la page que vous souhaitez accepter avec l'état. ~~. Bien sûr, j'ai également pu passer le dataframe.
def in_page(state):
~~~
#Indiquez la variable que vous souhaitez transmettre.~~Mettre dans
state.dataframe1 = dataframe1
state.var1 = var1
def tran_page(state):
#La variable que vous souhaitez accepter~~=state.~~Accepter à.
dataframe1 = state.dataframe1
var1 = state.var1
~~~
def out_page(state):
~~~
#Enfin principal()Et exécutez.
main()
Recommended Posts