数据可视化及开发---基于销售数据对其进行可视化

文章目录

一、前言:对于刚学数据可视化的新手小白来说,想要对一份数据进行可视化是不太容易的,可以说是无从下手,本篇文章就是基于本人在课上所学的一些知识对其进行巩固,技术有限就展示两三个图,话不多说开始了。

数据说明:本篇文章的数据量较小,只有三个字段,分别是日期、牛奶、面包。

三、实现过程:

1.引入相关的库;

pandas库:Pandas 是 Python 语言的一个扩展程序库,用于数据分析。 pychartes库:主要作用是用于生成Echarts图表的类库,这时候就会有疑问了,什么是echarts?

Echarts是百度开源的一个数据可视化JS库,用Echarts生成的图可视化效果棒,pyecharts是为了与Python进行对接,方便在Python中直接使用数据生成图。使用pyecharts能够生成独立的网页,也能够在flask、django中集成使用

beautifulsoup库

2.导入数据表;data = pd.read_excel(r’要导入的数据表名字’)# ‘r’是转义字符,避免路径中的’'被转译

3.对数据进行处理,由于数据中的日期列是时间对象序列,时间对象数据无法在pyecharts的坐标轴数据中使用,所以我们需要将数据转化为字符串或者数字对象;

方法一:将时间对象转换成字符串,并提取片段:x1 = data[‘日期’].agg(lambda x:str(x) [5:10]).tolist()

方法二:提取时间对象的局部时间并重新加工成字符串 :x1 = data[‘日期’].agg(lambda x:str(x.day) ).tolist()

4.写入画图代码 5.将实现的图生成page组合图,并搭建网页

正文部分

1.引入pandas库;

  import pandas as pd 

2.导入数据;

data = pd.read_excel(r'折线图作业数据-商品销量(1).xlsx')
data

运行结果在这里插入图片描述

3.将时间对象转换成字符串,并提取片段,由上图的运行结果可以看到,日期列为时间对象序列所以我们对这个序列进行了一些处理,并用切片提取日期列中的月份和日

x1 = data['日期'].agg(lambda x:str(x) [5:10]).tolist()
x1

运行结果在这里插入图片描述

4.(1).画折线图展示牛奶和面包的每日销量

from pyecharts.charts import Line
from pyecharts import options as opts
bar=(
    Line()
    .add_xaxis(x1)
    .add_yaxis("",data['牛奶'],symbol="triangle",
        symbol_size=20, 
        linestyle_opts=opts.LineStyleOpts(color="#ff8080", width=4, type_="solid"), # 设置线条的样式
        label_opts=opts.LabelOpts(is_show=True))
    .add_yaxis("",data['面包'],symbol="triangle",
        symbol_size=20,
        linestyle_opts=opts.LineStyleOpts(color="#ff8080", width=4, type_="solid"), # 设置线条的样式
        label_opts=opts.LabelOpts(is_show=True))

)
bar.render_notebook()

运行结果在这里插入图片描述
(2.)画堆积折线图展示牛奶和面包的每日销量

from pyecharts.charts import Line
from pyecharts import options as opts
c=(
    Line(init_opts=opts.InitOpts(width='800px',height='400px'))
    .add_xaxis(x1)
    .add_yaxis(
        series_name="牛奶",
        stack=1,
        y_axis=data['牛奶'],
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
        is_smooth = True,
        label_opts=opts.LabelOpts(is_show=False),
    )
    .add_yaxis(
        series_name="面包",
        stack=1,
        y_axis=data['面包'],
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
        is_smooth = True,
         
         )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
        datazoom_opts=opts.DataZoomOpts(), # 配置滑动条
       
    )
)
c.render_notebook()

运行结果在这里插入图片描述

(3).画柱形图分别展示牛奶和面包的销量,通过groupby分组,计算每日牛奶的销售总额

result = data.groupby(by=['日期'])['牛奶'].sum()  
result

将牛奶每日的销售额变成一个列表

sale = data['牛奶'].tolist()  #
sale

代码实现:

from pyecharts import options as opts
from pyecharts.charts import Bar
x = [i for i in result.index]
y1 = result.tolist()
bar = (
    Bar()
    .add_xaxis(x)
    .add_yaxis("牛奶", y1, stack=1,category_gap=5, color = 'pink')
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 配置是否显示数据的标签
    .set_global_opts(title_opts=opts.TitleOpts(title="牛奶销量柱形图"), # 设置标题
                    xaxis_opts = opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90, # x轴刻度倾斜角度
                                                                             horizontal_align = 'center', # x轴刻度文字对齐方式
                                                                             margin = 20 # x轴刻度距离x轴的距离
                                                                            ),
                                               axistick_opts = opts.AxisTickOpts(is_show=True, # 刻度线配置
                                                                                 length=5,
                                                                                 is_inside = True
                                                                                ), 
                                              ),
                    )
)
bar.render_notebook()

牛奶销售额柱形图在这里插入图片描述
通过groupby对数据中的面包分组,计算每日面包的销售总额

result1 = data.groupby(by=['日期'])['面包'].sum()
result1

将面包每日的销售额变成一个列表

sale = data['面包'].tolist()
sale

代码实现:

from pyecharts import options as opts
from pyecharts.charts import Bar
x = [i for i in result.index]
y1 = result1.tolist()
bar = (
    Bar()
    .add_xaxis(x)
    .add_yaxis("面包", y1, stack=1,category_gap=5, color = '#99FFFF')
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 配置是否显示数据的标签
    .set_global_opts(title_opts=opts.TitleOpts(title="面包销量柱形图"), # 设置标题
                    xaxis_opts = opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=90, # x轴刻度倾斜角度
                                                                             horizontal_align = 'center', # x轴刻度文字对齐方式
                                                                             margin = 20 # x轴刻度距离x轴的距离
                                                                            ),
                                               axistick_opts = opts.AxisTickOpts(is_show=True, # 刻度线配置
                                                                                 length=5,
                                                                                 is_inside = True
                                                                                ), 
                                              ),
                    )
)
bar.render_notebook()

面包销售额柱形图在这里插入图片描述

五、将实现的图生成page组合图,并搭建网页
1.先构成大屏标题:用datatime来获取当前时间

from pyecharts.charts import Pie
from datetime import datetime
now_time = datetime.now().strftime('%Y-%m-%d') # 获取当前时间
big_title = (
    Pie() # 不画图,只显示一个标题,用来构成大屏的标题
        .set_global_opts(
        title_opts=opts.TitleOpts(title="大屏标题",
                                  title_textstyle_opts=opts.TextStyleOpts(font_size=40,
#                                                                           color='#FFFFFF',
                                                                         ),
                                  subtitle = f'截至:{now_time}',
                                  pos_top=10
                                 )
        )
)
big_title.render_notebook()

2**. 生成page组合图**

from pyecharts.charts import Page

page = Page()
page.add(
    big_title,
    liquid,
    line,
    bar,
)
# page.render_notebook()
page.render('page.html')

3. 导入beautifulsoup库,修改html文件

from bs4 import BeautifulSoup
with open("page.html", "r+", encoding='utf-8') as html:
    html_bf = BeautifulSoup(html, 'lxml')
    divs = html_bf.select('.chart-container') # 根据css定位标签,选中图像的父节点标签
    divs[0]["style"] = "width:420px;height:55px;position:absolute;top:20px;left:730px;border-style:dashed;border-color:#444444;border-width:0px;"
    divs[1]["style"] = "width:420px;height:274px;position:absolute;top:500px;left:300px;border-style:solid;border-color:#444444;border-width:2px;"
    divs[2]["style"] = "width:420px;height:274px;position:absolute;top:100px;left:300px;border-style:solid;border-color:#444444;border-width:2px;"
    divs[3]["style"] = "width:420px;height:274px;position:absolute;top:100px;left:910px;border-style:solid;border-color:#444444;border-width:2px;"
    body = html_bf.find("body") # 根据标签名称定位到body标签
    body["style"] = "background-color:white;" # 修改背景颜色
    html_new = str(html_bf) # 将BeautifulSoup对象转换为字符
    html.seek(0, 0) # 光标移动至
    html.truncate() # 删除光标后的所有字符内容
    html.write(html_new) # 将由BeautifulSoup对象转换得到的字符重新写入html文件
    html.close()

4.创建flask对象

app = Flask(__name__)
# 设置路由及其内容
@app.route('/page')
def hello():
    return render_template('page.html') # html文件一定要放在templates文件夹中
    
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80) # 局域网电脑通过访问本机的ip地址即可访问网页

实现效果:一个简易版的数据可视化大屏就生成了
在这里插入图片描述
每日一语:
纸上得来终觉浅,绝知此事要躬行;
如果这篇博客对您有帮助,就赶快去试一试吧,说不定会有意想不到的收获呦~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
28「源码」数据可视化:基于 echarts flask 动态实时大屏 - 数据分析,是一种数据可视化的展示方式,通过将数据转换为图形化的形式,使数据更加直观、易于理解和分析。 该方案采用 echarts 和 flask 这两种技术进行数据可视化的展示。Echarts 是一个基于 JavaScript 的开源可视化库,它提供了丰富的图表类型和交互式的功能,可以满足各种的数据可视化需求。Flask 是 Python 语言中的一个轻量级 Web 框架,它提供了构建 Web 应用的基础框架,同时也可以与其他库和插件进行组合使用,实现更加复杂的功能。 在该方案中,数据从后端数据库中获取,并通过 flask 的模板语言进行处理,然后通过 echarts 绘制出各种类型的图表。整个展示过程通过 WebSocket 技术实现动态更新,大屏幕的内容会实时更新,保障时效性和准确性。同时,在页面设计上也注重视觉效果和用户体验,数据展示界面简洁明了,显示效果清晰美观。 该方案可以被广泛应用于各种需要进行数据可视化展示的领域,例如企业经营数据分析、科学研究领域的数据可视化、金融、航空、物流等领域的数据分析等。由于使用的技术基础较为简单,对于开发人员来说,也具有较高的可拓展性和可维护性。因此,它是一种非常实用的数据可视化方案,可以为用户提供更好的数据分析和决策支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值