Streamlit: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
* https://docs.streamlit.io/library/cheatsheet | * https://docs.streamlit.io/library/cheatsheet | ||
* https://streamlit.io/components | * https://streamlit.io/components | ||
= Example = | |||
<source lang='python'> | |||
''' | |||
Created on 2022-04-16 | |||
@author: wf | |||
''' | |||
from corpus.event import EventStorage | |||
from corpus.utils.download import Profiler | |||
profiler=Profiler("streamlit") | |||
import streamlit as st | |||
profiler.time() | |||
import pandas as pd | |||
import numpy as np | |||
#import plotly.figure_factory as ff | |||
import matplotlib.pyplot as plt | |||
from lodstorage.sql import SQLDB | |||
class Barchart: | |||
''' | |||
create Barchart | |||
''' | |||
def __init__(self,df,title,x=None,y=None): | |||
''' | |||
constructor | |||
Args: | |||
df(DataFrame): the dataframe to create a barchart for | |||
''' | |||
self.df=df | |||
self.title=title | |||
columns=self.df.columns.values.tolist() | |||
if x is None: | |||
x=columns[0] | |||
if y is None: | |||
y=columns[1] | |||
self.x=x | |||
self.y=y | |||
def show(self): | |||
fig, ax = plt.subplots() | |||
ax.set_ylabel(self.y) | |||
ax.set_xlabel(self.x) | |||
ax.set_title(self.title) | |||
xValues=self.df[self.x].values.tolist() | |||
yValues=self.df[self.y].values.tolist() | |||
x = np.arange(len(xValues)) | |||
ax.set_xticks(x, xValues,rotation='vertical') | |||
ax.bar(x,yValues) | |||
#ax.legend() | |||
fig.tight_layout() | |||
st.pyplot(fig=fig) | |||
st.title("Histogramm analysis") | |||
sqlDB=EventStorage.getSqlDB() | |||
viewName="event" | |||
viewTables=EventStorage.getViewTableList(viewName) | |||
viewTableFrame=pd.DataFrame(viewTables) | |||
tableOption=st.selectbox("select a source:",viewTableFrame) | |||
#st.write(tableOption) | |||
tableDict=sqlDB.getTableDict() | |||
columns=list(tableDict[tableOption]["columns"]) | |||
#st.write(columns) | |||
columnFrame=pd.DataFrame(columns) | |||
columnOption=st.selectbox("select a column:",columnFrame) | |||
totalSql=f"""SELECT COUNT(*) as total | |||
FROM {tableOption} | |||
WHERE {columnOption} is not NULL | |||
""" | |||
totalRows=sqlDB.query(totalSql) | |||
total=totalRows[0]["total"] | |||
centileLimit = st.slider('CentileLimit', 0, 20, 10) | |||
#st.table(columnFrame) | |||
havingLimit=round(total*centileLimit/100) | |||
sql=f"""SELECT {columnOption},COUNT(*) as events | |||
FROM {tableOption} | |||
WHERE {columnOption} is not NULL | |||
GROUP BY {columnOption} | |||
HAVING COUNT(*)>={havingLimit} | |||
ORDER BY 2 DESC""" | |||
st.write(sql) | |||
title=f"{columnOption} of {tableOption}" | |||
profiler.time(f"getHistogramm for {title}") | |||
rows = pd.read_sql(sql,con=sqlDB.c) | |||
profiler.time() | |||
bc=Barchart(rows,title=title) | |||
bc.show() | |||
st.table(rows) | |||
</source> | |||
Latest revision as of 15:13, 12 August 2022
Example
'''
Created on 2022-04-16
@author: wf
'''
from corpus.event import EventStorage
from corpus.utils.download import Profiler
profiler=Profiler("streamlit")
import streamlit as st
profiler.time()
import pandas as pd
import numpy as np
#import plotly.figure_factory as ff
import matplotlib.pyplot as plt
from lodstorage.sql import SQLDB
class Barchart:
'''
create Barchart
'''
def __init__(self,df,title,x=None,y=None):
'''
constructor
Args:
df(DataFrame): the dataframe to create a barchart for
'''
self.df=df
self.title=title
columns=self.df.columns.values.tolist()
if x is None:
x=columns[0]
if y is None:
y=columns[1]
self.x=x
self.y=y
def show(self):
fig, ax = plt.subplots()
ax.set_ylabel(self.y)
ax.set_xlabel(self.x)
ax.set_title(self.title)
xValues=self.df[self.x].values.tolist()
yValues=self.df[self.y].values.tolist()
x = np.arange(len(xValues))
ax.set_xticks(x, xValues,rotation='vertical')
ax.bar(x,yValues)
#ax.legend()
fig.tight_layout()
st.pyplot(fig=fig)
st.title("Histogramm analysis")
sqlDB=EventStorage.getSqlDB()
viewName="event"
viewTables=EventStorage.getViewTableList(viewName)
viewTableFrame=pd.DataFrame(viewTables)
tableOption=st.selectbox("select a source:",viewTableFrame)
#st.write(tableOption)
tableDict=sqlDB.getTableDict()
columns=list(tableDict[tableOption]["columns"])
#st.write(columns)
columnFrame=pd.DataFrame(columns)
columnOption=st.selectbox("select a column:",columnFrame)
totalSql=f"""SELECT COUNT(*) as total
FROM {tableOption}
WHERE {columnOption} is not NULL
"""
totalRows=sqlDB.query(totalSql)
total=totalRows[0]["total"]
centileLimit = st.slider('CentileLimit', 0, 20, 10)
#st.table(columnFrame)
havingLimit=round(total*centileLimit/100)
sql=f"""SELECT {columnOption},COUNT(*) as events
FROM {tableOption}
WHERE {columnOption} is not NULL
GROUP BY {columnOption}
HAVING COUNT(*)>={havingLimit}
ORDER BY 2 DESC"""
st.write(sql)
title=f"{columnOption} of {tableOption}"
profiler.time(f"getHistogramm for {title}")
rows = pd.read_sql(sql,con=sqlDB.c)
profiler.time()
bc=Barchart(rows,title=title)
bc.show()
st.table(rows)