我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

简介

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

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

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

我说的不是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构建仪表板内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这篇文章主要为大家详细介绍了Python如何实现构建一个仪表板,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
2023-03-10

使用JavaScript实现构建一个动态数据可视化仪表板

构建一个动态数据可视化仪表板,需要选择合适的框架(如D3.js、Chartist.js、ApexCharts),获取、处理数据,选择合适的图表类型(如折线图、柱状图、饼状图)。仪表板应具备交互功能(缩放、拖放、工具提示、筛选),以及响应式设计和可定制的主题。部署仪表板并持续监视其性能,根据新数据或用户反馈定期更新和增强。
使用JavaScript实现构建一个动态数据可视化仪表板
2024-04-02

QT实现制作一个ListView列表的示例代码

这篇文章主要为大家详细介绍了如何使用Qt制作一个ListView,点击ListView的Item可以用于测试OpenCV的各种效果,感兴趣的小伙伴可以了解一下
2023-02-23

python实现跳表SkipList的示例代码

跳表 跳表,又叫做跳跃表、跳跃列表,在有序链表的基础上增加了“跳跃”的功能,由William Pugh于1990年发布,设计的初衷是为了取代平衡树(比如红黑树)。 Redis、LevelDB 都是著名的 Key-Value 数据库,而Red
2022-06-02

Python数据结构之顺序表的实现代码示例

顺序表即线性表的顺序存储结构。它是通过一组地址连续的存储单元对线性表中的数据进行存储的,相邻的两个元素在物理位置上也是相邻的。比如,第1个元素是存储在线性表的起始位置LOC(1),那么第i个元素即是存储在LOC(1)+(i-1)*sizeo
2022-06-04

Python实现自动整理表格的示例代码

这篇文章主要为大家详细介绍了如何利用Python实现自动整理表格的功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-02

Java实现手写一个线程池的示例代码

线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?本文就来通过手写一个简单的线程池框架,去掌握线程池的基本原理,感兴趣的可以学习一下
2022-11-13

java实现一个简单的网络爬虫代码示例

目前市面上流行的爬虫以python居多,简单了解之后,觉得简单的一些页面的爬虫,主要就是去解析目标页面(html)。那么就在想,java有没有用户方便解析html页面呢?找到了一个jsoup包,一个非常方便解析html的工具呢。使用方式也非
2023-05-30

Python实现不一样的猜数字游戏的示例代码

大家知道“猜数字”这个游戏吗?顾名思义就是一个人想一个数字,另一个人猜。本文就来用Python实现一款不一样的猜数字游戏,感兴趣的可以了解一下
2023-02-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录