大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。
所以建议大家加个星标,就能第一时间收到推送。👇
大家好,我是爱搞事情的了不起!
之前我们爬过懂车帝的车型评分,3000条数据
http://ssw.fit/categories/op/dcd.html
想要把这些数据分析的成果做成应用展示给其他人,怎么办?Streamlit作为数据可视化的Python框架,它能很好的达成想要的效果。关键是使用起来特别方便。
前提准备
python丰富的模块真赞,这里使用Pandas 处理Excel数据,Plotly 制作可视化图表,Streamlit 搭建可视化页面
数据准备 http://ssw.fit/file/carx.xlsx
说明:原文件包含200多个品牌,这里截取部分数据,只选择了奥迪别克丰田等23个品牌,并且删除了没有评分的车型
安装依赖库
pip install padans,plotly,streamlit,openpyxl
分析目的
可以作为数据看板,方便的分析数据。比如说,这份数据里如果从箱型图来看,合资品牌中评分口碑最差的就是日产,评分主要区间是几乎最低的,集中在3.54~ 3.72,远低于别克的3.59~ 3.93
我们今天的目标有3个:
1.找出各品牌有评分的车型数量
2. 评分区间占比分析
3. 各品牌的评分区间分布
代码思路
导入相关包
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()
读取数据
# 读取数据
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()
设计左侧边栏和标题
# 侧边栏
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("##")
画可视化图
# 横向条形图:各品牌有评分的车型数量
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))
)
从各品牌有评分的车型数量来看,大众第一,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("""---""")
三分之二的车型评分在3.5~4分,别小看这零点几的小分,3.5和3.9的区别很大的。3.9分的车型很接近豪华品牌了,要么就是某个品牌中的拳头产品,如丰田凯美瑞3.88(目前降到3.87了),福特蒙迪欧3.91。
最夸张的是BBA的车型,我们在面板上筛选这三个品牌
它们四分之三的车型都在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)),
)
明显可以看出,BBA的评分集中在4分以上,位居水平线上游位置。此外,评分颇高的是红旗车型。
别克呢?评分口碑可以的,集中在3.59~ 3.93,比丰田高,比日产好很多(3.54~ 3.72)。这份数据里如果从箱型图来看,合资品牌中评分口碑最差的就是日产,评分主要区间是几乎最低的,给它一个差评!
接下来,将图形显示到前端页面
# 将图形显示到前端页面
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个月,摸鱼学习交流群再次限时开放了。
Python技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入,一起 100 天计划!
老规矩,酱友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!
【神秘礼包获取方式】
识别下方公众号,回复:1024