Giter Site home page Giter Site logo

streamlit-analytics's Introduction

streamlit-analytics ย ๐Ÿ‘€

PyPi

Track & visualize user interactions with your streamlit app.

This is a small extension for the fantastic streamlit framework. With just one line of code, it counts page views, tracks all widget interactions across users, and visualizes the results directly in your browser. Think Google Analytics but for streamlit.

Alpha version, use with care.

๐ŸŽˆ Live Demo ๐ŸŽˆ

Installation

pip install streamlit-analytics

How to use it

import streamlit as st
import streamlit_analytics

with streamlit_analytics.track():
    st.text_input("Write something")
    st.button("Click me")

That's it! ๐ŸŽˆ All page views and user inputs are now tracked and counted. Of course, you can also use any other streamlit widget in the with block (both from st. and st.sidebar.).

Note: One thing that doesn't work (yet) is tracking widgets created directly from containers, expanders, or columns (e.g. st.beta_expander().button("foo")). Instead, please use a with statement, e.g. with st.beta_expander(): st.button("foo").

To view the results, open your app like normal and append ?analytics=on to the URL (e.g. http://localhost:8501/?analytics=on). The results are then shown directly below your app (see image above).

More options

  • If you don't want a huge with block, you can also do:

    streamlit_analytics.start_tracking()
    # your streamlit code here
    streamlit_analytics.stop_tracking()
  • You can password-protect your analytics results with:

    streamlit_analytics.track(unsafe_password="test123")
    # or pass the same arg to `stop_tracking`

    The app will then ask for this password before showing any results. Do not choose an important password here, it's not encrypted. If you push your code to Github, you should probably store the password in a .env file (which is in .gitignore) and load it via dotenv.

  • If you don't want the results to get reset after restarting streamlit (e.g. during deployment), you can sync them to a Firestore database. Follow this blogpost to set up the database and pass the key file and collection name:

    streamlit_analytics.track(firebase_key_file="firebase-key.json", firebase_collection_name="counts")
    # or pass the same args to `start_tracking` AND `stop_tracking`
  • You can store analytics results as a json file with:

    streamlit_analytics.track(save_to_json="path/to/file.json")
    # or pass the same arg to `stop_tracking`

    This does NOT persist the data between deployments (use Firestore for this, see above). This may also lead to problems with concurrency if many users access the site at the same time.

TODO

PRs are welcome! If you want to work on any of these things, please open an issue to coordinate.

  • Pass all settings args in start_tracking and not in stop_tracking

  • Do not track default values for selectbox, text_input etc. This can probably be done easily if I switch to using on_change.

  • Track unique users -> best way is to use cookies (e.g. with react-cookies) but this probably requires to show a consent form (could also build this in with react-cookie-consent)

  • Enable tracking on widgets created directly from beta_container, beta_expander, beta_columns

  • Make a demo gif for the readme

  • Persist results after re-starting app (e.g. database or file, but where should this be saved/hosted)

  • Find an easier alternative to Firestore for saving the data

  • Track time the user spent in a session and show as "complete time spent on your app"

  • Implement A/B testing, e.g. by choosing one option for a new user randomly, storing it in session object, and then returning the correct bool value for below, and tracking & visualizing stats separately for both options:

    if streamlit_analytics.split_test("option a", 2):
        st.button("Is this button text better?")
    
    if streamlit_analytics.split_test("option b", 2):
        st.button("...or this one?")
  • Enable tracking to Google Analytics, e.g. via custom component with react-ga. Widget interactions could also be tracked via events.

  • Add a button to reset analytics results (see issue #2, this should probably show another prompt for confirmation, similar to if you delete a Github repo)

streamlit-analytics's People

Contributors

jrieke avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.