用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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值