Python实现构建一个仪表板的示例代码

目录
  • 简介
  • 内容
  • 1.创建一个Python文件
  • 2.在终端上运行该文件,在本地机器上显示
  • 3.在Heroku上部署仪表板
  • 总结

这将为我们的团队节省每天重复的数据处理时间......

简介

如果你目前在一个数据或商业智能团队工作,你的任务之一可能是制作一些每日、每周或每月的报告。

虽然获得这些报告并不困难,但还是需要花费不少时间。我们的宝贵时间应该花在更困难的任务上,如训练神经网络或建立数据管道架构。

因此,对于这些平凡的重复性报告,节省我们时间的最好方法是建立一个网络应用程序,其他团队可以自己访问和下载报告。

我说的不是Tableau或PowerBI这样的付费工具(如果公司预算充足的话,你可以使用它们)。有一些高级的网络框架,比如Flask和Django,通常用于建立一个正常运作的网站。

但是,对于一个快速的网络仪表盘来报告指标和数字,你可以考虑使用Streamlit,这是一个相对较新的网络框架,是为ML从业者和数据科学团队建立的。它使用起来非常简单和直观。

内容

我将通过使用一个群组分析的例子来指导你如何构建部署它。

对于每个部分,我将介绍一个代码模板(你可以在你自己的项目中重新使用)和我的代码(用于本文中使用的队列分析例子)。

  • 创建一个Python文件
  • 在终端上运行该文件,在本地机器上看到仪表板
  • 部署给其他团队使用

1.创建一个Python文件

我们必须创建一个Python文件,以后我们可以从终端调用该文件,在浏览器上显示结果。

你可以给这个文件取任何你想要的名字。这里我把它叫做cohort-demo.py

代码模板

# 这些数据可以在公众号后台回复【云朵君】,联系作者获取。
# 1.导入必要的库
import pandas as pd
import numpy as np
import streamlit as st

# 2.设置页面配置
st.set_page_config(
    page_title="This is my title",  # 页面的标题
    page_icon="",                  # favicon
    layout="wide",
)

# 3.定义你的项目中使用的所有函数
# 4.对于每一个函数,在其前面添加"@st.experimental_memo"。这就是
# 来记忆每个函数的执行。这将使应用程序运行得更快。
# 特别是当用户与仪表盘上的一些元素互动时

@st.experimental_memo
def function(x):
    return y

组群分析

import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns
import matplotlib as mpl 
from datetime import date, datetime
import streamlit as st  

st.set_page_config(
    page_title="Cohorts Dashboard",
    page_icon="",
    layout="wide",
)

@st.experimental_memo
def purchase_rate(customer_id):
    purchase_rate = [1]
    counter = 1
    for i in range(1,len(customer_id)):
        if customer_id[i] != customer_id[i-1]:
            purchase_rate.append(1)
            counter = 1
        else:
            counter += 1
            purchase_rate.append(counter)
    return purchase_rate
@st.experimental_memo
def join_date(date, purchase_rate):
    join_date = list(range(len(date)))
    for i in range(len(purchase_rate)):
        if purchase_rate[i] == 1:
            join_date[i] = date[i]
        else:
            join_date[i] = join_date[i-1]
    return join_date
  
# 我没有在这里定义所有的函数,因为这将延长文章的篇幅。
# 我将在文章的最后提供完整的代码。

现在我们建立第一个屏幕,如下所示。这将首先让用户上传文件,然后运行以产生输出。

代码模板:你可以用任何名字替换 "my_company"。

st.title("Cohort Interactive Dashboard Demo")
st.markdown("""
This webapp performs cohort analysis of my_company data!
* **Python libraries used:** base64, pandas, streamlit, numpy, matplotlib, seaborn
* **Data source:** [Shopify](https://company_name.myshopify.com/admin)
* You need to select the data file first to proceed.
""")
uploaded_file = st.file_uploader("Choose a file") # 来上传文件

一旦用户上传了一个文件,下一个屏幕将看起来像这样。

为了建立这个,我们需要。

  • 选择群组的类型:这是一个单一的选择。它可以是独特的客户保留率,或百分比或AOV(平均订单价值)方面的。
  • 选择队列:这是多选择。人们可以看一个特定的队列或更多。

代码模板

If uploaded_file is not None:# 这很重要,因为没有这个。
                             # 当没有上传的文件时,会出现
                             # 一个错误,因为df没有被定义....
  df = pd.read_csv(upload_file) # 读取该文件
  df_processed = process_df(df) # 清洁数据
  
  # 仪表盘标题
  st.header("Live Dashboard")
  # 过滤器
  first_filter = st.selectbox('Select first filter',['Option 1', 'Option 2', 'Option 3])

    second_filter = st.multiselect('Select second filter', ['Option 1','Option 2','Option 3','Option 4'])

    output = display_function(data_input,first_filter,second_filter)
    st.dataframe(output)
    st.download_button(label='Download csv', data=output.to_csv(), mime='text/csv') # 来下载该文件

组群分析

if uploaded_file is not None:
    df = pd.read_csv(uploaded_file)
    df_processed = process_df(df)
    df_cohorts = cohort_numbers(df_processed)
    cohorts = cohort_percent(df_cohorts)
    
    # 通过使用f-strings动态标题
    st.header(f"Live {cohorts.index[0]} to {cohorts.index[-1]} Cohort Dashboard")
    
    # 过滤器
    first_filter= st.selectbox('Select type of cohort',['By unique customers', 'By percentage', 'By AOV'])

    second_filter = st.multiselect('Select cohort', list(cohorts.index))

    output = select_which_table_to_draw(df_processed,first_filter,second_filter)
    st.dataframe(output)
    st.download_button(label='Download csv', data=output.to_csv(), mime='text/csv')

最后建立3个指标

代码模板

kpi1, kpi2, kpi3 = st.columns(3) # 创建三个占位符
if uploaded_file is not None:
    
    aov = np.mean(df['total_sales'])
    aov_goal = 95.00
    kpi1.metric(
        # 给这个指标贴上标签
        label="AOV", 
        # 计算度量值
        value=f"$ {round(aov,2)}",
        # 计算与目标相比的变化(向上/向下箭头)
        delta=f"-${round(aov_goal-aov,2)}" if aov_goal>aov else f"${round(aov-aov_goal,2)}",
    )

    nc = np.mean(df.loc[df['customer_type']=='First-time'].groupby(['day']).count()['customer_id'])
    nc_goal = 30
    kpi2.metric(
        label="New customers/day",
        value=int(nc),
        delta=f"-{round((nc_goal-nc)/nc_goal*100,2)}%" if nc_goal>nc else f"{round((nc - nc_goal)/nc_goal*100,0)}%",
    )

    rc = np.mean(df.loc[df['customer_type']=='Returning'].groupby(['day']).count()['customer_id'])
    rc_goal = 250
    kpi3.metric(
        label="Returning customers/day",
        value= int(rc),
        delta=f"-{round((rc_goal - rc)/rc_goal*100,2)}%" if rc_goal>rc else f"{round((rc-rc_goal)/rc_goal*100,2)}%"
    )

2.在终端上运行该文件,在本地机器上显示

streamlit run cohort-demo.py

在右上角,你会看到一个选项,即每当你编辑cohort-demo.py时总是运行。

3.在Heroku上部署仪表板

首先在你的GitHub账户上创建GitHub仓库

创建requirements.txtsetup.shProcfile

requirements.txt(这是为了添加你在cohort-demo.py中使用的所有必要库。)

#只是简单地列出所有的库。你也可以包括版本
pandas
numpy
streamlit
matplotlib
seaborn
datetime
plotly

setup.sh

#只要复制和粘贴这个
mkdir -p ~/.streamlit/
echo "\
[server]\n\
headless = true\n\
port = $PORT\n
enableCORS = false\n
\n\
" > ~/.streamlit/config.toml

Procfile

web: sh setup.sh && streamlit run cohort-demo.py

  • cohort-demo.py上传至资源库
  • 打开Heroku(你应该在Heroku上创建一个账户)。

在右上角,点击 "Create new app"

在部署方式下,选择GitHub

然后将GitHub账户连接到Heroku。然后输入仓库的名称(在本例中,它是cohort_analysis_demo)。

一旦连接,在手动部署下,点击部署分支

到这里我们只需要等待它的部署。然后就完成了!URL链接将被创建。

刚刚将仪表盘部署到生产中,团队成员现在可以自己访问和分析数据。

他们可以简单地上传任何符合你定义的格式的数据集。即本例中的客户交易数据。

最终结果

总结

希望能够帮助到大家,仅作为一个demo参考。其实Streamlit可以做很多很酷的事情,如果你像我一样,在不了解Nodejs、Flask和Django等网络开发框架的情况下,可以使用它来快速创建一个仪表盘。

虽然如此,我仍然相信了解JS/HTML/CSS和软件工程概念会更有优势。所以我确实建议你花空闲时间学习这些技术。

到此这篇关于Python实现构建一个仪表板的示例代码的文章就介绍到这了,更多相关Python构建仪表板内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python数据挖掘使用Evidently创建机器学习模型仪表板

    目录 1.安装包 2.导入所需的库 3.加载数据集 4.创建模型 5.创建仪表板 6.可用报告类型 1)数据漂移 2)数值目标漂移 3)分类目标漂移 4)回归模型性能 5)分类模型性能 6)概率分类模型性能 解释机器学习模型是一个困难的过程,因为通常大多数模型都是一个黑匣子,我们不知道模型内部发生了什么.创建不同类型的可视化有助于理解模型是如何执行的,但是很少有库可以用来解释模型是如何工作的. Evidently 是一个开源 Python 库,用于创建交互式可视化报告.仪表板和 JSON 配置文

  • Python PyQt5模块实现一个浏览器的示例代码

    目录 1. 首先是环境的安装 (本人使用的是PyCharm,python3.6) 2. 实现代码 3. 运行结果 4. Tips 1. 首先是环境的安装 (本人使用的是PyCharm,python3.6) pip3 install PyQt5 (没有指定版本的话,默认会安装最新的) pip3 install sip pip3 install PyQtWebEngine (PyQtWebEngine是Qt WebEngine的一组框架,该框架提供了在应用程序中嵌入 Web 内容的能力,并且基于 C

  • python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移动应用微信登录 网站应用微信登录 这里我们使用的是网站应用微信登录 按照 官方流程 1 注册并通过开放平台开发者资质认证 注册微信开放平台帐号后,在帐号中心中填写开发者资质认证申请,并等待认证通过. 2 创建网站应用 通过填写网站应用名称.简介和图标,以及各平台下载地址等资料,创建网站应用 3 接入

  • python实现excel公式格式化的示例代码

    之前跟一些小伙伴有个讨论: 大概就是很多跟数据打交道的朋友都面对过很复杂的excel公式,有时嵌套层数特别多,肉眼观看很容易蒙圈. 有了这样的需求,我就有了解决问题的想法,说干就干,于是一个比较牛逼的excel公式格式化的工具就出现了. 效果体验 先看看效果吧: =IF(C11>100%*C4,IF(C11<=200%*C4,C11*50%-C4*15%,C11*60%-C4*35%),IF(C11<=C4*50%,C11*30%,C11*40%-C4*5%)) 的格式化结果是: =IF

  • python实现经典排序算法的示例代码

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后会将次大的元素移到最大元素的左边,每次内层循环结束都会将一个元素排好序. def bubble_sort(arr): length = len(arr) for i in range(length): for j in range(length - i - 1): if arr[j] > arr[j

  • Python实现七大查找算法的示例代码

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素.     查找表(Search Table):由同一类型的数据元素构成的集合     关键字(Key):数据元素中某个数据项的值,又称为键值     主键(Primary Key):可唯一的标识某个数据元素或记录的关键字 查找表按照操作方式可分为:         1.静态查找表(Static Search Table):只做查找操作的查找表.它的主要操作是:         ①

  • Python实现二叉排序树与平衡二叉树的示例代码

    目录 前言 1. 二叉排序树 1.1 构建一棵二叉排序树 1.2 二叉排序树的数据结构 1.3 实现二叉排序树类中的方法: 2. 平衡二叉排序树 2.1 二叉平衡排序树的数据结构 3. 总结 前言 什么是树表查询? 借助具有特殊性质的树数据结构进行关键字查找. 本文所涉及到的特殊结构性质的树包括: 二叉排序树. 平衡二叉树. 使用上述树结构存储数据时,因其本身对结点之间的关系以及顺序有特殊要求,也得益于这种限制,在查询某一个结点时会带来性能上的优势和操作上的方便. 树表查询属于动态查找算法. 所

  • Python实现K-近邻算法的示例代码

    目录 一.介绍 二.k-近邻算法的步骤 三.Python 实现 四.约会网站配对效果判定 五.手写数字识别 六.算法优缺点 优点 缺点 一.介绍 k-近邻算法(K-Nearest Neighbour algorithm),又称 KNN 算法,是数据挖掘技术中原理最简单的算法. 工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的 k 个实例,如果这 k 个实例的多数属于某个类别,那么新数据就属于这个类别.简单理解为:由那些离 X 最近的 k 个点

  • Go/Python/Erlang编程语言对比分析及示例代码

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

  • python tkinter实现界面切换的示例代码

    跳转实现思路 主程序相当于桌子: import tkinter as tk root = tk.Tk() 而不同的Frame相当于不同的桌布: face1 = tk.Frame(root) face2 = tk.Frame(root) ... 每个界面采用类的方式定义各自的控件和函数,每个界面都建立在一个各自定义的Frame上,那么在实现跳转界面的效果时, 只需要调用tkinter.destroy()方法销毁旧界面,同时生成新界面的对象,即可实现切换. 而对于切换的过程中改变背景颜色和大小,可以

  • 使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称"海龟绘图",它是基于 Tkinter 模块打造,提供一些简单的绘图工具. 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条.通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片.

随机推荐

其他