用streamlit,几行代码就可以拥有漂亮图表!

大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。

所以建议大家加个星标,就能第一时间收到推送。👇

0740fe5db2ccaf801bc10e6f872041bf.jpeg


    大家好,我是爱搞事情的了不起!

之前我们爬过懂车帝的车型评分,3000条数据

http://ssw.fit/categories/op/dcd.html

f5df56d465643c1051e71dc12e8c2e6c.png

想要把这些数据分析的成果做成应用展示给其他人,怎么办?Streamlit作为数据可视化的Python框架,它能很好的达成想要的效果。关键是使用起来特别方便。

前提准备

python丰富的模块真赞,这里使用Pandas 处理Excel数据,Plotly 制作可视化图表,Streamlit 搭建可视化页面

  1. 数据准备 http://ssw.fit/file/carx.xlsx

  2. d6f1db80e427bb56875da21d8f184e69.png

说明:原文件包含200多个品牌,这里截取部分数据,只选择了奥迪别克丰田等23个品牌,并且删除了没有评分的车型

  1. 安装依赖库

pip install padans,plotly,streamlit,openpyxl

分析目的

可以作为数据看板,方便的分析数据。比如说,这份数据里如果从箱型图来看,合资品牌中评分口碑最差的就是日产,评分主要区间是几乎最低的,集中在3.54~ 3.72,远低于别克的3.59~ 3.93

19402ff73e515deb7dc4055a7592539d.png

我们今天的目标有3个:

1.找出各品牌有评分的车型数量

5d7e1e851b00101821bfcdfc9ed04a46.png

2. 评分区间占比分析

104d57125e5ff56f0ffdf5e56d48948b.png

3. 各品牌的评分区间分布

824973a0b2e9a5b388b77b283db75948.png

代码思路

  1. 导入相关包

import pandas as pd
import plotly.express as px
import streamlit as st
import plotly.graph_objs as go
# 设置网页
st.set_page_config(page_title="数据大屏", page_icon=":bar_chart:", layout="wide")
st.balloons()
  1. 读取数据

# 读取数据
def get_data_from_excel():
  df = pd.read_excel(io="C:\drf2\drf2\carx.xlsx",engine="openpyxl",sheet_name="car")
  return df
df = get_data_from_excel()
  1. 设计左侧边栏和标题

# 侧边栏
st.sidebar.header("请在这里筛选:")
brand = st.sidebar.multiselect(
    "选择品牌:",
    options=df["品牌"].unique(),
    default=df["品牌"].unique(),
)
category = st.sidebar.multiselect(
    "车型类别:",
    options=df["车型"].unique(),
    default=df["车型"].unique()
)

df_selection = df.query(
    "车型 == @category & 品牌 == @brand"
)

# 主页面标题
st.title(":bar_chart: 看看大家都喜欢什么车型")
st.markdown("##")
  1. 画可视化图

# 横向条形图:各品牌有评分的车型数量
sales_by_product_line = (
    df_selection.groupby(by=["品牌"]).count()[["车型"]]
)

fig_product_sales = px.bar(
    sales_by_product_line,
    x="车型",
    y=sales_by_product_line.index,
    orientation="h",
    title="<b>各品牌有评分的车型数量</b>"
)
fig_product_sales.update_layout(
    plot_bgcolor="rgba(0,0,0,0)",
    xaxis=(dict(showgrid=False))
)

000d480606df63bab4b9cddb7e8dcf4e.png

从各品牌有评分的车型数量来看,大众第一,36款车型;排名第二的是奔驰,35款。

# 圆环图:评分区间占比
las = df_selection.groupby(df_selection['评分区间']).size()
las.sort_values(ascending=True,inplace=True)
layout = go.Layout(
    title = '<b>评分区间占比</b>',
    barmode='stack'
)
fig_price_sales = go.Figure(data=[go.Pie(labels=las.index, hole =  0.7,values=las.values,hoverinfo = "label + percent")],layout=layout)
fig_price_sales.update_layout(
    xaxis=dict(tickmode="linear"),
    plot_bgcolor="rgba(0,0,0,0)",
    yaxis=(dict(showgrid=False)),
)

# 分隔符
st.markdown("""---""")

724b7de4dfa9396799ecb22b03b399e8.png

三分之二的车型评分在3.5~4分,别小看这零点几的小分,3.5和3.9的区别很大的。3.9分的车型很接近豪华品牌了,要么就是某个品牌中的拳头产品,如丰田凯美瑞3.88(目前降到3.87了),福特蒙迪欧3.91。

最夸张的是BBA的车型,我们在面板上筛选这三个品牌

bc1cc7f3f06cbaf30427b01da86ef470.png

它们四分之三的车型都在4分以上。我们也可以单独筛选某个品牌,4分以上的奔驰车型超过71%,宝马超过78%,奥迪超过79%,

这些评分是怎么分布的呢,比如最高分、最低分、平均分、分布区间等,我们使用箱线图

# 箱线图:各品牌的评分分布
fig = px.box(df_selection, x="品牌", y="评分",color="品牌",
    title="<b>各品牌的评分分布</b>")

fig.update_layout(
    xaxis=dict(tickmode="linear"),
    plot_bgcolor="rgba(0,0,0,0)",
    yaxis=(dict(showgrid=False)),
)

bbb4fcc6e539f29ffe3b7002a8af30e2.png

明显可以看出,BBA的评分集中在4分以上,位居水平线上游位置。此外,评分颇高的是红旗车型。

别克呢?评分口碑可以的,集中在3.59~ 3.93,比丰田高,比日产好很多(3.54~ 3.72)。这份数据里如果从箱型图来看,合资品牌中评分口碑最差的就是日产,评分主要区间是几乎最低的,给它一个差评!

bd6be9cee377e3ef9318de7a403356e1.png

接下来,将图形显示到前端页面

# 将图形显示到前端页面
left_column, right_column,r = st.columns(3)
right_column.plotly_chart(fig_price_sales, use_container_width=True)
left_column.plotly_chart(fig_product_sales, use_container_width=True)
st.markdown("""---""")
left, right = st.columns(2)
right.plotly_chart(fig, use_container_width=True)
# 隐藏streamlit默认格式信息
hide_st_style = """
            <style>
            #MainMenu {visibility: hidden;}
            footer {visibility: hidden;}
            header {visibility: hidden;}
            </style>
            """
st.markdown(hide_st_style, unsafe_allow_html=True)
streamlit run tmp.py

最后运行上面命令,这样一个关于车型评分的数据可视化看板,就搭建完成啦!

交流群

时隔2个月,摸鱼学习交流群再次限时开放了。

fad5a3a7f7c4c21cbfdb3ab81fffedaf.png

Python技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入,一起 100 天计划!

老规矩,酱友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

6b6545f26be2c81357ac7e6ea8a6bb1d.gif

神秘礼包获取方式

识别下方公众号,回复:1024

b3b2132c4cb2ec94fe32664be2e4a180.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22175.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QTableWidget样式设置

QTableWidget的样式分为几个部分&#xff1a; 分别是&#xff1a; 外框&#xff1a;QTableWidget 表头&#xff1a;QHeaderView 表头字段&#xff1a;QHeaderView::section 表格&#xff1a;QTableWidget::item 选中的表格&#xff1a;QTableWidget::item::selected 水平滚动条…

JDBC详解(六):数据库事务(超详解)

JDBC详解&#xff08;六&#xff09;&#xff1a;数据库事务&#xff08;超详解&#xff09; 前言一、数据库事务介绍二、JDBC事务处理三、事务的ACID属性1、数据库的并发问题2、四种隔离级别3、在MySql中设置隔离级别 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所…

海康威视 2024届 数字逻辑设计 实习笔试分析

说明 记录一下 5月11日晚&#xff0c;做的海康威视的一场笔试。分享给需要的IC人。 岗位&#xff1a;数字逻辑设计工程师&#xff08;浙江 杭州&#xff09; 转载需要本人同意&#xff01; 我的见解不一定都是准确的&#xff0c;欢迎评论区交流指正~~ 单选题 1、&#xff…

一分钟带你了解网络安全(如何自学)

一、关于网络安全职业 早些年&#xff0c;网络安全刚起步&#xff0c;作为一个网络安全从业人员&#xff0c;最苦恼的事情就是每当回到村里变成狗蛋儿的时候&#xff0c;七大姑八大姨&#xff0c;邻里乡亲&#xff0c;村子里的各种人都会来找你&#xff0c;狗蛋儿&#xff0c;你…

研报精选230519

目录 【行业230519头豹研究院】2023年中国产后康复设备行业词条报告 【行业230519山西证券】有色金属行业周报&#xff1a;锂价快速回升&#xff0c;释放锂电行业复苏信号 【行业230519头豹研究院】2023年中国氢能重卡行业词条报告 【个股230519西南证券_森麒麟】腾飞的高端轮胎…

漏扫工具-xray 1.9.10(文末附下载)

一、工具介绍 一款功能强大的安全评估工具 二、使用说明 1.使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描 xray webscan --basic-crawler http://example.com --html-output vuln.html 2.使用 HTTP 代理进行被动扫描 xray webscan --listen 127.0.0.1:7777 --html-outp…

【sentinel】Sentinel工作主流程以流控规则源码分析

Sentinel工作主流程 在Sentinel里面&#xff0c;所有的资源都对应一个资源名称&#xff08;resourceName&#xff09;&#xff0c;每次资源调用都会创建一个Entry对象。Entry可以通过对主流框架的适配自动创建&#xff0c;也可以通过注解的方式或调用SphU API显式创建。Entry创…

前端026_菜单模块_新增功能

菜单模块_新增功能 1、需求分析2、新增组件实现3、列表引用新增组件4、关闭弹出窗口5、校验表单数据6、提交表单数据6.1、Mock 添加新增模拟接口6.2、Api 调用接口6.3、测试新增功能1、需求分析 菜单管理中有两处有 新增 按钮: 条件区域的是新增一级菜单,传递的参数是0。列表…

Compose 二三事:绘制原理

setContent做了什么 我们基于一个最简单的例子进行分析 class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Text(text "Hello World!")}} }这里setContent做了什么…

NetApp FAS 混合闪存阵列协助您建构简单易用、聪明智慧、值得信赖的储存基础架构

NetApp FAS 混合闪存阵列 主要优势 1、简单易用&#xff1a;节省您宝贵的时间、金钱和人力 •几分钟内完成储存资源配置。 •以获证实的效率技术降低成本。 •可在单一系统上管理档案与区块资料。 2、聪明智慧&#xff1a;灵活因应瞬息万变的业务需求 •以不中断营运的方式扩…

java(springboot+ssm)/python/php/nodejs/基于vue的景区门票预约管理系统

后端&#xff1a;java(springbootssm)/python/php/nodejs/ 开发运行&#xff1a;微信开发者/hbuilderx 后端:idea/eclipse/vscode/pycharm 模块划分&#xff1a;公告类型、公告信息、用户信息、用户咨询、地区信息、景区信息、景区开放、景区预约、统计信息 本技术是Java平台的…

企企通“码上顺”清洗工具 | 让数据更有价值,让业务更出色

数据清理工作是企业数据管理、数据治理中的最基础的工作之一&#xff0c;不仅是一项苦活、累活&#xff0c;也是一个既考验业务又检验技术的活。 物料主数据作为企业核心的数据资产&#xff0c;在智慧供应链、业财一体化等数字化建设中发挥着重要作用。在当今高速发展的商业环…

2023新版Spring6全新讲解-HelloSpring入门案例

Spring的入门案例 Spring6.0要求的JDK最低版本是17 我们在本课程中使用的版本是5.x版本。这个Spring5的JDK的最低要求是8 一、环境要求 JDK&#xff1a;8 Maven&#xff1a;3.6 Spring:5.3.27 开发工具&#xff1a;IDEA 2021.1.1 二、项目创建 1. 构建项目 在idea中&…

GEE:GEDI数据提取值到矢量区域和点

作者:CSDN @ _养乐多_ 本文将介绍GEDI数据集从GEE上下载到本地,并将每一个激光点的值提取为一个矢量区域,并提取值到矢量区域的方法。 文章目录 一、GEDI数据下载二、GEDI数据栅格矢量化三、提取值到区域四、提取栅格值到点五、空间插值一、GEDI数据下载 GEDI数据下载链接:…

opencv相机标定

当你把摄像机放在一个特定的位置&#xff0c;在它的后面放一个目标图像&#xff0c;或者是把摄像机放到某个物体上&#xff0c;摄像机周围的物体是什么形状&#xff0c;你需要知道这些信息。 当你在计算机上处理图像时&#xff0c;会使用以下三个参数&#xff1a; 1.像素坐标&a…

【我的创作纪念日】—— 纪念四年的坚持

这是一篇和技术无关的博客&#xff0c;但对我而言&#xff0c;它承载了不菲的价值 普通且宁静的一天&#xff0c;被一条消息戳中&#xff0c;于是&#xff0c;写一篇分享帖&#xff0c;纪念我这 1460 天的坚持初衷&#xff1a; 前言&#xff1a;对过去的回顾 4 年前的我&#…

2098-DSD-020X 具有集成的DeviceNet通信接口

描述:2098-DSD-020X-DN是艾伦-布拉德利Ultra 3000运动控制系列的一部分。该产品是一种数字伺服驱动器&#xff0c;可在120VAC / 240 VAC、单相、50-60 Hz的输入电源电压和18安培的输入电流下运行。该伺服驱动器提供120 / 240 VAC的输出电压、3相、0-400 Hz的可编程频率范围、10…

深度学习训练营之Densenet网络

深度学习训练营 原文链接环境介绍前言设计理念网络结构实验结果和讨论pytorch实现DenseNet附录 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营-第J3周&#xff1a;Densenet网络学习&…

【数据分享】1901-2021年1km分辨率逐月平均气温栅格数据(全国/分省/免费获取)

气温数据是我们最常用的气象指标之一&#xff0c;之前我们给大家分享过1950-2022年0.1 x 0.1精度的逐月平均气温栅格数据和逐年平均气温栅格数据&#xff08;均可查询之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是精度更高的气温栅格数据——1901-2021年1km分…

【C++】类和对象(3)

文章目录 一、初始化列表二、explicit关键字三、static成员四、友元4.1 友元函数4.2 友元类 五、内部类六、匿名对象七、编译器的优化 一、初始化列表 首先我们先回顾一下构造函数&#xff0c;对象的初始化由构造函数来完成&#xff0c;我们可以在构造函数的函数体内对对象的成…