前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >情人节,我用 Python 给女朋友做了个选礼物看板!

情人节,我用 Python 给女朋友做了个选礼物看板!

作者头像
杰哥的IT之旅
发布2022-03-31 19:17:06
6780
发布2022-03-31 19:17:06
举报
文章被收录于专栏:GitHub专栏

作者:Cherish 来源:https://www.jianshu.com/p/88e2617602a1 本文为读者投稿

一年 N 度的情人节又又又到了!各位程序猿们给女朋友准备礼物了吗?刚铁直男都存在一个困惑的问题:送女朋友什么礼物好?今天特意爬取了某东的数据,来分析下大家情人节都送什么给女朋友。

主要使用ExcelPythonPandas 库Streamlit 库Plotly 库进行搭建可视化大屏。

一、前提准备

本案例数据相对结构化,仅用 Excel 结合 Pandas 做简单处理即可,Plotly 制作可视化图表,Streamlit 搭建可视化页面。

1.1 安装依赖库

代码语言:javascript
复制
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas==1.1.0
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple plotly==4.14.3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit==0.86.0
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl==3.0.6
1.2 Plotly

官方文档地址:https://plot.ly/python/plotly-express/

Plotly Express 是一个新的高级 Python 可视化库,它为复杂的图表提供了一个简单的语法。Plotly 交互效果明显优于 Python 的两大传统可视化库 Matplotlib 和 Seaborn。相比 Power BI 和 Tableau 等 BI 工具,Plotly 无法胜任数据清洗、关系模型等功能,仅是一个可视化工具。但与 Python 其它库,比如今天使用的 Streamlit 配合,可以创造出像网站、可视化大屏、机器学习工具等各种精彩的应用。

1.3 Streamlit

官方文档地址:https://docs.streamlit.io/

Streamlit 是一个功能强大,完全免费的开源应用程序框架,它能帮你不用懂得复杂的 HTML,CSS 等前端技术就能快速做出来一个炫酷的 Web 页面。Streamlit 是一个用于机器学习、数据可视化的 Python 框架,用极短的时间快速生成一个基于 Web 的 GUI。当然,你也可以将其用于给自己的 Python 脚本创建前端展示页面,也是一个不错的选择。

二、准备数据

关键字搜索【情人节礼物 女友 2022】,用第三方采集软件爬取数据 2500+ 条,准备数据如下:

三、分析目的

通过礼品类别、品牌、和价格区间进行筛选联动

① 礼品类别(大类)销量对比情况 ② 礼品价格区间占比情况 ③ 各礼品小类的销量对比(和大类进行联动) ④ 礼品类别的价格分布 ⑤ 品牌礼品的 Top 10 推荐

四、代码思路

4.1 导入相关包

代码语言:javascript
复制
import pandas as pd
import plotly.express as px
import streamlit as st
import plotly.figure_factory as ff
import plotly as py
import plotly.graph_objs as go

# 设置网页
st.set_page_config(page_title="数据大屏", page_icon=":bar_chart:", layout="wide")
st.balloons()
4.2 读取数据
代码语言:javascript
复制
# 读取数据
@st.cache
def get_data_from_excel():
    df = pd.read_excel(
        io="data.xlsx",
        engine="openpyxl",
        sheet_name="data"
    )
    return df
df = get_data_from_excel()
4.3 设计左侧边栏和标题
代码语言:javascript
复制
# 侧边栏
st.sidebar.header("请在这里筛选:")
category = st.sidebar.multiselect(
    "礼物类别:",
    options=df["礼品类别"].unique(),
    default=df["礼品类别"].unique()
)

brand = st.sidebar.multiselect(
    "选择品牌:",
    options=df["品牌"].unique(),
    default=df["品牌"].unique(),
)

price = st.sidebar.multiselect(
    "价格区间:",
    options=df["价格区间"].unique(),
    default=df["价格区间"].unique()
)

df_selection = df.query(
    "礼品类别 == @category & 品牌 == @brand & 价格区间 == @price"
)

# 主页面标题
st.title(":bar_chart: 情人节看看大家都送什么礼物")
st.markdown("##")
4.4 画可视化图
代码语言:javascript
复制
# 横向条形图:各类别礼品销量
sales_by_product_line = (
    df_selection.groupby(by=["礼品类别"]).sum()[["销量"]]
)

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))
)

从礼品类别来看,送美妆护肤类的稳居第一,看来情人节口红必不可少呀;排名第二的是箱包皮具类,看来送包包也是也非常不错的选择呢。

代码语言:javascript
复制
# 圆环图:礼物价格区间占比
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("""---""")

礼品价格想必是大家最关心的了吧,从占比来看近 50% 的礼品价格都在 100~500 元之间呐,100 元以下的 6%,价格区间占比最小;再看看 2000 元以上的礼品,占比 15%,这是真爱呀。

代码语言:javascript
复制
# TOP 10 销量最高品牌
sales_by_brand = df_selection.groupby(by=["品牌"])
brand_dic = {i:j['销量'].sum() for i,j in sales_by_brand}
brand_dic = sorted(brand_dic.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
ins = []
val = []
for i, j in brand_dic[:10]:
    ins.append(i.split()[0])
    val.append(j)
sales_by_brand = px.bar(
    x=ins,
    y=val,
    title="<b>TOP 10 销量最高品牌</b>",
)
sales_by_brand.update_layout(
    xaxis=dict(tickmode="linear"),
    plot_bgcolor="rgba(0,0,0,0)",
    yaxis=(dict(showgrid=False)),
)

上面结果是按照所有类别进行分析的,当然你也可以按照自己喜欢的类别,查看品牌销量前 10。

代码语言:javascript
复制
# 柱状图:各详细类别礼品销量对比
sales_by_goods = df_selection.groupby(by=["小类"]).sum()[["销量"]]
sales_by_goods = px.bar(
    sales_by_goods,
    x=sales_by_goods.index,
    y="销量",
    title="<b>详细类别产品的销量</b>",
)
sales_by_goods.update_layout(
    xaxis=dict(tickmode="linear"),
    plot_bgcolor="rgba(0,0,0,0)",
    yaxis=(dict(showgrid=False)),
)

这里选择【美妆护肤】这个类别,分析各小类的销量对比,原来第一的是眼霜和爽肤水,第二的是口红。想必这是小姐姐的最爱吧。

代码语言:javascript
复制
# 箱线图:各类别礼品的价格分布
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)),
)

价格区间筛选了 1000 元以下的礼品,从结果来看,钟表的价格最高,大部分都在 500 元以上,好像找到了钟表销量最低的原因呐;要说性价比,还是创意礼品、包包、美妆护肤,中位数趋于 200~300 之间。

代码语言:javascript
复制
# 将图形显示到前端页面
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)
r.plotly_chart(sales_by_brand, use_container_width=True)
st.markdown("""---""")
left, right = st.columns(2)
left.plotly_chart(sales_by_goods, use_container_width=True)
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)

代码语言:javascript
复制
streamlit run demo.py

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

同时,我也在 B 站发布了本期内容的视频,欢迎三连呀!

其实送礼物这事儿,说难也不难,但也不是一件简单的事儿~送对了感情升温,送错了让你恢复单身!

最后祝大家情人节快乐

愿有情人终成眷属

最最最重要的:祝愿奥运健儿们再创佳绩

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杰哥的IT之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.2 Plotly
  • 1.3 Streamlit
  • 4.2 读取数据
  • 4.3 设计左侧边栏和标题
  • 4.4 画可视化图
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档