精华内容
下载资源
问答
  • 淘宝销售数据地理图 from pyecharts import options as opts from pyecharts.globals import ThemeType #导入主题库 from pyecharts.globals import SymbolType #主题库 from pyecharts.charts import Pie,Bar,Map...

    数据链接:https://pan.baidu.com/s/1waFRKxAvt42kRN9kAfFs4w 
    提取码:1234

    淘宝销售数据地理图

    from pyecharts import options as opts
    from pyecharts.globals import ThemeType #导入主题库
    from pyecharts.globals import SymbolType #主题库
    from pyecharts.charts import Pie,Bar,Map,WordCloud,Page  #玫瑰图,柱状图,地图,词云,组合图
    import pandas as pd
    df_taobao = pd.read_excel("D:/可视化项目/数据可视化演示/taobao_goods.xlsx") #读取数据
    df_taobao

    #删除重复值
    df_taobao.drop_duplicates(inplace=True)  
    #提取省份
    ld_list = []
    for ld in df_taobao["location"]:
        ld_list.append(ld.split(" ")[0])  #使用分割提取
        
    #原数据表中替换省份    
    df_taobao["location"] = ld_list
    df_taobao
    

    #销售数据格式转换
    sales_list = []
    for sale in df_taobao["sales"]:
        sale = sale[:-3].replace("+","")  #去掉“人付款”三字
        if "万" in sale:
            sale = int(float(sale[:-1])*10000) #将万转换为元
        print(sale)
        sales_list.append(sale)
    df_taobao["sales"] = sales_list

     

    locations = [location for location in df_taobao["location"].value_counts().items()]  #提取省份和数量使用items组成元组
    locations

    #地图
    map = (
    Map()
        .add("店铺数量",[list(location) for location in locations],"china")  #显示店铺数量,使用china地图
        .set_global_opts(
            title_opts = opts.TitleOpts(title = "地址分布图"), #设置标题
             visualmap_opts = opts.VisualMapOpts(max_ = 3000),  #设置阈值
            
        )
    )
    map.render() #保存为html
    map.render_notebook()  #在notebook中显示图像

     

     用户评论数据词云

    #用户评论词云
    from wordcloud import WordCloud
    import numpy as np
    import matplotlib.pyplot as plt
    from PIL import Image
    import jieba 
    df_commments = pd.read_excel("D:/可视化项目/数据可视化演示/goods_comments.xlsx")
    df_commments

    text = "".join(jieba.lcut(str([i for i in df_commments["comment"]])))  #将所有评论组合成一个text
    mask =np.array( Image.open("D:/可视化项目/数据可视化演示/bra.jpg"))  #词云背景图片
    wc = WordCloud(mask=mask,font_path='C:/Windows/Fonts/simsun.ttc',mode="RGBA").generate(text) #设置格式
    plt.imshow(wc,interpolation="bilinear") #显示词云
    wc.to_file("词.png")  #保存

    动态柱形图

    from pyecharts.faker import Faker  #假数据库
    bar = (
        Bar()
        .add_xaxis(Faker.days_attrs)
        .add_yaxis("商家A",Faker.days_values)
        .add_yaxis("商家B",Faker.days_values)
        .add_yaxis("商家C",Faker.days_values)
        .set_global_opts(
            title_opts=opts.TitleOpts(title = "柱状图"),
            datazoom_opts = [opts.DataZoomOpts()] #设置动态图
        )
    )
    bar.render_notebook()

     玫瑰图

    from pyecharts import options as opts
    from pyecharts.charts import Pie
    from pyecharts.faker import Faker
    
    v = Faker.choose()
    pie =(
        Pie()
        .add(
        "",
        [list(z) for z in zip(v,list(range(10,1000,10)))],
        radius = ["30%","75%"],    #图像中心园的大小
    #     center=["75%","50%"],   显示在图像的区域
            
        rosetype = "radius",
        label_opts=opts.LabelOpts(is_show=False),
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="玫瑰实列"))
    )
    pie.render_notebook()

     水球图

    from pyecharts import options as opts
    from pyecharts.charts import Liquid
    liquid = (
        Liquid()
        .add("lq",[0.45,0.45])
        #第一个值显示数值,第二个是水位高度
        .set_global_opts(title_opts = opts.TitleOpts(title = "湿度"))
    )
    liquid.render_notebook()

     

    page = Page(layout=Page.DraggablePageLayout)
    page.add(
    bar,
    liquid,
    pie,
    map,
    )  #将写的单个图片全导入
    page.render_notebook()
    page.render() #保存组合图
    Page.save_resize_html("render.html",cfg_file="chart_config (1).json") #保存组合图为json格式

    注:图位置调整以及保存,切记点击save_config保存网页,然后路径会出现chart_config (1).json文件

     

     

    展开全文
  • Python数据可视化大屏最全教程(全)

    千次阅读 多人点赞 2021-06-25 00:53:26
    适用人群:Python初学者,数据分析师,或有志从事数据分析工作的人员。 准备软件:Anaconda(Spyder:代码编译)、Navicat Premium 12(数据库)。 从事IT项目管理这么多年,基本上已经遗弃编程技能,但从2019年...
    阅读本文大约需要3分钟

    主要内容:数据分析。

    适用人群:Python初学者,数据分析师,或有志从事数据分析工作的人员。

    准备软件:Anaconda(Spyder:代码编译)、Navicat Premium 12(数据库)。

    从事IT项目管理这么多年,基本上已经遗弃编程技能,但从2019年开始接触Python,深深地迷上了这门语言,像硬件集成、数据分析,我都会用python来写。晓风想通过本文,让初学者们学会以下内容:

    1、Pyecharts图表;

    2、连接数据库;

    3、大屏看板-监控中心。

    今天,我们讲:3、大屏看板如何布局

    首先,我们自己先拟个大屏的草稿(如上图),把大屏分割成8个部分(Part0-7)。

    大屏内容设计好后,接上文,我们把图表的函数都用代码写出来

    from pyecharts import options as opts
    from pyecharts.charts import Bar,Gauge,Pie,Page,Funnel,Geo,Scatter3D
    import random
    
    
    def bar(): #柱状图
        cate = ['1月', '2月', '3月', '4月', '5月', '6月']
        c = (      
             Bar()
                .add_xaxis(cate)
                .add_yaxis("订单数", [random.randint(100, 200) for _ in cate])
                .add_yaxis("完成数", [random.randint(50, 100) for _ in cate])
                .set_series_opts(
                                 label_opts=opts.LabelOpts(is_show=True,color="#2CB34A")
                                 
                )
                .set_global_opts(title_opts=opts.TitleOpts(title="2021年订单推移图",
                                                           title_textstyle_opts=opts.TextStyleOpts(color="#2CB34A"),
                                                           pos_left="5%"),
                                 legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color="#2CB34A")),
                                 xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#2CB34A")),
                                 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#2CB34A"))
                                                         
                )
                .set_colors(["blue", "green"])
                #.render("bar_stack0.html")
        )
        return c
    
    
    def tab0(name,color): #标题
        c = (Pie().
            set_global_opts(
            title_opts=opts.TitleOpts(title=name,pos_left='center',pos_top='center',
                                    title_textstyle_opts=opts.TextStyleOpts(color=color,font_size=20))))
        return c
    
    
    def tab1(name,color): #标题
        c = (Pie().
            set_global_opts(
            title_opts=opts.TitleOpts(title=name,pos_left='center',pos_top='center',
                                    title_textstyle_opts=opts.TextStyleOpts(color=color,font_size=25))))
        return c
    
    
    def gau():#仪表图
        c = (
            Gauge(init_opts=opts.InitOpts(width="400px", height="400px"))
                .add(series_name="库位利用率", data_pair=[["", 90]])
                .set_global_opts(
                legend_opts=opts.LegendOpts(is_show=False),
                tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{a} <br/>{b} : {c}%"),
                
            )
                #.render("gauge.html")
        )
        return c
    
    
    def radius():
        cate = ['客户A', '客户B', '客户C', '客户D', '客户E', '其他客户']
        data = [153, 124, 107, 99, 89, 46]
        c=Pie()
        c.add('', [list(z) for z in zip(cate, data)],
                radius=["30%", "75%"],
                rosetype="radius")
        c.set_global_opts(title_opts=opts.TitleOpts(title="客户销售额占比", padding=[1,250],title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF")),
                          legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color="#FFFFFF"),type_="scroll",orient="vertical",pos_right="5%",pos_top="middle")
                          )
        c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
        c.set_colors(['red',"orange", "yellow", "green", "Cyan", "purple"])
        
        return c
    
    
    def funnel():
        cate = ['访问', '注册', '加入购物车', '提交订单', '付款成功']
        data = [30398, 15230, 10045, 8109, 5698]
        c = Funnel()
        c.add("用户数", [list(z) for z in zip(cate, data)], 
                   sort_='ascending',
                   label_opts=opts.LabelOpts(position="inside"))
        c.set_global_opts(title_opts=opts.TitleOpts(title=""))
    
    
        return c
    
    
    def geo():
        city_num = [('武汉',105),('成都',70),('北京',99),
                ('西安',80),('杭州',60),('贵阳',34),
                ('上海',65),('深圳',54),('乌鲁木齐',76),
                ('哈尔滨',47),('兰州',56),('信阳',85)]
        start_end = [('宁波','成都'),('武汉','北京'),('武汉','西安'),
                 ('长沙','杭州'),('武汉','贵阳'),('武汉','上海'),
                 ('甘肃','深圳'),('北京','乌鲁木齐'),('上海','哈尔滨'),
                 ('武汉','兰州'),('西藏','信阳')]
        c = Geo()
        c.add_schema(maptype='china', 
                    itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='white'))
        # 4.添加数据
        c.add('', data_pair=city_num, color='white')
        c.add('', data_pair=start_end, type_="lines",label_opts=opts.LabelOpts(is_show=False),
             effect_opts=opts.EffectOpts(symbol="arrow", 
                                         color='gold', 
                                         symbol_size=7))
        c.set_global_opts(
            title_opts = opts.TitleOpts(title=""))
        
        return c
    
    
    def scatter3D():
        data = [(random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)) for _ in range(80)]
        c = (Scatter3D()
                .add("", data)
                .set_global_opts(
                  title_opts=opts.TitleOpts(""),
                )
            )
        

    接下来,我们引用Page函数,将所有图表堆积在一个页面中,代码如下

    from pyecharts.charts import Page
    page = Page() 
    page.add(
             tab0("OFFICETOUCH","#2CB34A"), 
             bar(),
             tab1("数据可视化大屏","#2CB34A"),
             gau(),
             radius(),
             funnel(),
             geo(),
             scatter3D()
             )
    page.render("datacenter.html")

    我们运行下上述两段代码,发现布局是按照从上到下一个个呈现的,到此我们完成了一半的编码

    为了将图表按照我们的草稿布局,我们再引用HTML(from bs4 import BeautifulSoup)

    from bs4 import BeautifulSoup
    with open("datacenter.html", "r+", encoding='utf-8') as html:
        html_bf = BeautifulSoup(html, 'lxml')
        divs = html_bf.select('.chart-container')
        divs[0]["style"] = "width:10%;height:10%;position:absolute;top:0;left:2%;"
        divs[1]["style"] = "width:40%;height:40%;position:absolute;top:12%;left:0;"  
        divs[2]["style"] = "width:35%;height:10%;position:absolute;top:2%;left:30%;"
        divs[3]["style"] = "width:40%;height:40%;position:absolute;top:10%;left:28%;"
        divs[4]["style"] = "width:40%;height:35%;position:absolute;top:12%;left:55%;"
        divs[5]["style"] = "width:30%;height:35%;position:absolute;top:60%;left:2%;"
        divs[6]["style"] = "width:60%;height:50%;position:absolute;top:45%;left:15%;"
        divs[7]["style"] = "width:35%;height:40%;position:absolute;top:50%;left:60%;"
        body = html_bf.find("body")
        body["style"] = "background-image: "  # 背景颜色
        html_new = str(html_bf)
        html.seek(0, 0)
        html.truncate()
        html.write(html_new)
        html.close()

    代码中的divs[0]["style"] = "width:10%;height:10%;position:absolute;top:0;left:2%;" 即是我们对Part0的宽度、高度、位置、上边距、左边距的定义,这里我们用百分比以达到屏幕自适应的效果。

    最后,我们还可以设置一张背景图,代码合起来如下

    from pyecharts import options as opts
    from pyecharts.charts import Bar,Gauge,Pie,Page,Funnel,Geo,Scatter3D
    import random
    
    
    
    
    def bar(): #柱状图
        cate = ['1月', '2月', '3月', '4月', '5月', '6月']
        c = (      
             Bar()
                .add_xaxis(cate)
                .add_yaxis("订单数", [random.randint(100, 200) for _ in cate])
                .add_yaxis("完成数", [random.randint(50, 100) for _ in cate])
                .set_series_opts(
                                 label_opts=opts.LabelOpts(is_show=True,color="#2CB34A")
                                 
                )
                .set_global_opts(title_opts=opts.TitleOpts(title="2021年订单推移图",
                                                           title_textstyle_opts=opts.TextStyleOpts(color="#2CB34A"),
                                                           pos_left="5%"),
                                 legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color="#2CB34A")),
                                 xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#2CB34A")),
                                 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(color="#2CB34A"))
                                                         
                )
                .set_colors(["blue", "green"])
                #.render("bar_stack0.html")
        )
        return c
    
    
    def tab0(name,color): #标题
        c = (Pie().
            set_global_opts(
            title_opts=opts.TitleOpts(title=name,pos_left='center',pos_top='center',
                                    title_textstyle_opts=opts.TextStyleOpts(color=color,font_size=20))))
        return c
    
    
    def tab1(name,color): #标题
        c = (Pie().
            set_global_opts(
            title_opts=opts.TitleOpts(title=name,pos_left='center',pos_top='center',
                                    title_textstyle_opts=opts.TextStyleOpts(color=color,font_size=25))))
        return c
    
    
    
    
    
    
    def gau():#仪表图
        c = (
            Gauge(init_opts=opts.InitOpts(width="400px", height="400px"))
                .add(series_name="库位利用率", data_pair=[["", 90]])
                .set_global_opts(
                legend_opts=opts.LegendOpts(is_show=False),
                tooltip_opts=opts.TooltipOpts(is_show=True, formatter="{a} <br/>{b} : {c}%"),
                
            )
                #.render("gauge.html")
        )
        return c
    
    
    def radius():
        cate = ['客户A', '客户B', '客户C', '客户D', '客户E', '其他客户']
        data = [153, 124, 107, 99, 89, 46]
        c=Pie()
        c.add('', [list(z) for z in zip(cate, data)],
                radius=["30%", "75%"],
                rosetype="radius")
        c.set_global_opts(title_opts=opts.TitleOpts(title="客户销售额占比", padding=[1,250],title_textstyle_opts=opts.TextStyleOpts(color="#FFFFFF")),
                          legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color="#FFFFFF"),type_="scroll",orient="vertical",pos_right="5%",pos_top="middle")
                          )
        c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
        c.set_colors(['red',"orange", "yellow", "green", "Cyan", "purple"])
        
        return c
    
    
    def funnel():
        cate = ['访问', '注册', '加入购物车', '提交订单', '付款成功']
        data = [30398, 15230, 10045, 8109, 5698]
        c = Funnel()
        c.add("用户数", [list(z) for z in zip(cate, data)], 
                   sort_='ascending',
                   label_opts=opts.LabelOpts(position="inside"))
        c.set_global_opts(title_opts=opts.TitleOpts(title=""))
    
    
        return c
    
    
    def geo():
        city_num = [('武汉',105),('成都',70),('北京',99),
                ('西安',80),('杭州',60),('贵阳',34),
                ('上海',65),('深圳',54),('乌鲁木齐',76),
                ('哈尔滨',47),('兰州',56),('信阳',85)]
        start_end = [('宁波','成都'),('武汉','北京'),('武汉','西安'),
                 ('长沙','杭州'),('武汉','贵阳'),('武汉','上海'),
                 ('甘肃','深圳'),('北京','乌鲁木齐'),('上海','哈尔滨'),
                 ('武汉','兰州'),('西藏','信阳')]
        c = Geo()
        c.add_schema(maptype='china', 
                    itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='white'))
        # 4.添加数据
        c.add('', data_pair=city_num, color='white')
        c.add('', data_pair=start_end, type_="lines",label_opts=opts.LabelOpts(is_show=False),
             effect_opts=opts.EffectOpts(symbol="arrow", 
                                         color='gold', 
                                         symbol_size=7))
        c.set_global_opts(
            title_opts = opts.TitleOpts(title=""))
        
        return c
    
    
    def scatter3D():
        data = [(random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)) for _ in range(80)]
        c = (Scatter3D()
                .add("", data)
                .set_global_opts(
                  title_opts=opts.TitleOpts(""),
                )
            )
        return c
    
    
    page = Page() 
    page.add(
             tab0("OFFICETOUCH","#2CB34A"), 
             bar(),
             tab1("数据可视化大屏","#2CB34A"),
             gau(),
             radius(),
             funnel(),
             geo(),
             scatter3D()
             )
    page.render("datacenter.html")
    #os.system("scatter.html")
    
    
    from bs4 import BeautifulSoup
    with open("datacenter.html", "r+", encoding='utf-8') as html:
        html_bf = BeautifulSoup(html, 'lxml')
        divs = html_bf.select('.chart-container')
        divs[0]["style"] = "width:10%;height:10%;position:absolute;top:0;left:2%;"
        divs[1]["style"] = "width:40%;height:40%;position:absolute;top:12%;left:0;"  
        divs[2]["style"] = "width:35%;height:10%;position:absolute;top:2%;left:30%;"
        divs[3]["style"] = "width:40%;height:40%;position:absolute;top:10%;left:28%;"
        divs[4]["style"] = "width:40%;height:35%;position:absolute;top:12%;left:55%;"
        divs[5]["style"] = "width:30%;height:35%;position:absolute;top:60%;left:2%;"
        divs[6]["style"] = "width:60%;height:50%;position:absolute;top:45%;left:15%;"
        divs[7]["style"] = "width:35%;height:40%;position:absolute;top:50%;left:60%;"
        body = html_bf.find("body")
        body["style"] = "background-image: url(bgd.jpg)"  # 背景颜色
        html_new = str(html_bf)
        html.seek(0, 0)
        html.truncate()
        html.write(html_new)
       

    效果图如下:

    学习到了这里,你是否能独立完成数据可视化的工作了啊?晓风终于不辱使命,向大家完整地介绍了如何使用Python绘制数据可视化大屏。晓风还会继续努力,为大家带来更多有趣、实用、简单地Python功能,愿我们一起成长!

    另两篇教程,如下:

    1、Python大屏看板最全教程之Pyecharts图表https://blog.csdn.net/weixin_42341655/article/details/118078089

    2、Python大屏看板最全教程之数据库连接https://blog.csdn.net/weixin_42341655/article/details/118096691

    如果觉得有用的话,请帮忙点赞、关注、收藏哦,感谢您的支持!

    展开全文
  • echarts-python数据可视化大屏展示

    千次阅读 多人点赞 2021-06-25 18:51:29
    持续完善中。。。。。 关注公众号: 我是TIME0101 回复:浙江省农产品数据可视化获取源代码

    echarts-数据可视化大屏展示
    python-pandas-echarts-flask
    在这里插入图片描述
    新手入门,还请指教。

    1 数据预处理

    此部分使用jupyter
    2.1.1导入包pandas包

     import pandas as pd
    

    2.1.2读取文件
    (1)使用pandas读取导入6个数据文件。

    data_1 = pd.read_csv('data\cata_6008_1.csv')
    data_2 = pd.read_csv('data\cata_6008_2.csv')
    data_3 = pd.read_csv('data\cata_6008_3.csv')
    data_4 = pd.read_csv('data\cata_6008_4.csv')
    data_5 = pd.read_csv('data\cata_6008_5.csv')
    data_6 = pd.read_csv('data\cata_6008_6.csv')
    

    (2)查看数据导入是否正确,输出前三行。
    #输出前3行检查是否读取正确

    data_1.head(3)
    

    在这里插入图片描述

    2.1.3删除每一个文件里的主键ID列,1且合并6个文件。
    用iloc获取所有行,去除最后一列;并使用concat合并6个文件。
    思想:用pandas的concat函数将六个表连接起来,并使用iloc()切去主键ID列,即可获取所有行非主键ID列。

     all_data = pd.concat((data_1.iloc[:, 0:-1],data_2.iloc[:, 0:-1],data_3.iloc[:, 0:-1],
                          data_4.iloc[:, 0:-1],data_5.iloc[:, 0:-1],data_6.iloc[:, 0:-1]))
    all_data
    

    在这里插入图片描述

    2.1.4在每个文件里创建商品销量和销售额两列, 即增加两列“商品销量”和“销售额”,并可先设值为NaN。
    直接将空值赋给列“商品销量”和“销售额”列,即可增加两列。

    all_data['商品销量'] = "NaN"
    all_data['销售额'] = "NaN"
    all_data
    

    在这里插入图片描述
    2.1.5删除所有采价地为浙江省的数据行。
    思想:挑选非浙江省的数据,赋给新df
    (1)查看浙江省数据,使用isin()函数挑选地区为浙江省的数据。

    #查询浙江省的数据
    #all_data[all_data['商品采价地区名称'].isin(['浙江省'])]
    

    在这里插入图片描述

    #用“~”选取不包含‘浙江省’的数据
    all_data=all_data[~all_data['商品采价地区名称'].isin(['浙江省'])]
    #再次查询浙江省
    all_data[all_data['商品采价地区名称'].isin(['浙江省'])]
    

    (2)使用isin()函数并配合“~”挑选非浙江省数据并存为all_data,
    已无浙江省数据
    在这里插入图片描述
    2.1.6填充“商品销量”和“销售额”列。
    思想:判断数据文件整合后的长度,假设长度为n,以这个长度数据为基准,采用python里的随机数生成方法,生成n个数据,这n个数据作为“商品销量”列的数据。“销售额”列的数据为商品价格和商品销量列的乘积。
    (1)查看所有行,即用shape查看形状,可以看到有25641行。

    all_data.shape
    

    在这里插入图片描述
    引用numpy包的random方法来生成随机数并存为列表

    import numpy as np
    indata= np.random.randint(0,10000,25641)
    indata
    

    在这里插入图片描述

    (2)赋值并查看所有数据,商品销量已经被随机数数组填充。

    all_data["商品销量"] = indata
    all_data
    

    在这里插入图片描述
    (3)直接将价格,销量两列相乘即可得到销售额的值。

    all_data['销售额'] =  all_data['商品价格']*all_data['商品销量']
    all_data
    

    在这里插入图片描述
    2.1.7确定一共有多少个市以及多少种商品,将每个商品代码对应一个名称:商品1,商品2,商品3 ……,“商品”二字后面数字与set完成后的商品个数对应,使用set统计市并查看多少市。
    思想:可以通过python中set方法来实现,商品代号与商品主键需用到字典,然后进行替换。
    (1)查看商品主键及个数

     data_id = set(all_data['商品主键'])
    print(data_id,'商品个数:',len(data_id))
    

    在这里插入图片描述

    (2)查看城市及个数

     data_shi = set(all_data['商品采价地区名称'])
    print(data_shi,'地区个数:',len(data_shi))
    

    在这里插入图片描述

    (3)使用for循环将数字与商品进行配对并存入列表。

     goods = []
    for i in range(1,28):
         goods.append('商品'+str(i))
    print(goods)  
    

    在这里插入图片描述
    (4)将商品主键和新商品主键进行字典配对以便后面替换操作。

    data_id_l = list(data_id)
    new_dict = {}
    for i in range(0,27):
        new_dict[data_id_l[i]] = goods[i] #字典赋值,左边为key,右边为value
    new_dict
    

    在这里插入图片描述
    (5)使用replace()方法进行替换, 索引不变。

     all_data['商品主键'].replace(new_dict,inplace=True)
    all_data
    

    在这里插入图片描述
    2.1.8因为涉及展示商品在不同时间的销售情况,统计时间以月为单位,检查每一种商品在数据集里的采价时间是否有月份重合的,如有,则修改这种商品的销量。最终的结果是商品销量是数据集中这种商品在同一月份销量的总和,对应的销售额也应是同一月份销售额的总和。
    思想:先将“日”(%d)删去,然后若“商品销量”和“销售额”以外的属性相同,则将“商品销量”和“销售额”数值相加。
    (1)先引入datetime包将日期格式进行日期格式化,在利用apply()将所有日期进行只保留年和月的格式。以方便后面drop()和sum()的使用。

     import datetime
    all_data['商品采价日期'] = pd.to_datetime(all_data['商品采价日期'])
    all_data['商品采价日期'] = all_data['商品采价日期'].apply(lambda x:datetime.datetime.strftime(x,'%Y-%m'))
    all_data
    

    在这里插入图片描述
    (2)将dropby()和sum()函数配合使用,当除了“商品销量”和“销售额”以外相同则将“商品销量”和“销售额”数值相加。

    在这里插入图片描述

    2.1.9将所有数据以采价地区区分,每个地区单独输出为一个txt或csv格式文件,文件内每一行各个属性间以‘\t’作为分隔符
    思想:根据城市为索引将数据进行分类,且输出为文本
    (1)在上一步drop()的处理中,因为没设参数as_index=False,所以会自动将“商品采价地区”设为索引。
    (2)先定义一个城市列表,再通过for循环在城市列表里面遍历将一个城市的数据赋给一个df并将df以文本形式输出到本地,且将文本命名为城市名称。

    i = 0
    data_shi2 = list(data_shi)
    for p in data_shi:
        p = all_data.loc[p,:]
        name = data_shi2[i]
        i = i + 1
        p.to_csv('D:\(自己地址)\各地数据'+'\\'+name+'.txt',sep='\t',index=True)
        print(p)
    

    在这里插入图片描述

    在这里插入图片描述

    2可视化部分

    此部分使用pycharm

    2.1query.py

    from flask import Flask, request, render_template
    from getdata import get_data
    app = Flask(__name__)
    @app.route('/query', methods=['GET', 'POST'])
    def query():
        if request.method == 'POST':
            urban = request.form.get('urban')
            goods = request.form.get('goods')
            dict_return = get_data(urban, goods)
            return render_template('query.html', dict_return = dict_return) 
        else:
            dict_return = get_data('杭州市','商品1')
            return render_template('query.html', dict_return = dict_return)
    
    
    if __name__ == '__main__':
       app.run(port=4500,debug = True)
    

    2.2get_data模块

    import datetime
    import pandas as pd
    def read_urban(urban):
        urban = pd.read_csv('data/' + urban + '.txt', sep="\t")
        return urban
    
    def get_data(urban, goods):
        dict_return = {}  # 存放需要的数据
    
        #获取城市并返回当前城市
        dict_return['urban'] = urban
        
        #地图
        dict_return['city_highlight'] = [{"name": urban, "selected": "true"}]
    
        #数据初步整理
        data_1 = read_urban(urban)  # 通过城市返回城市列表
        data_2 = data_1[data_1['商品主键'] == goods]  # 通过商品获取某一类商品数据
        data_goods = data_2.sort_values(by='商品采价日期')  # 按照日期正序排列数据
        # 柱状XY时间销量、折线XY时间价格、气泡XY时间销量、饼图XY年销售额
        time_x = data_goods['商品采价日期']  # 获取日期
        sale_n_y = data_goods['商品销量']  # 获取销量
        price_y = data_goods['商品价格']
        all_price_y = data_goods['销售额']
    
        #滚动表
        data_list = data_2.copy(deep=True)
        num = []
        n = data_list.shape[0]
        for i in range(1, n):
            num.append(str(i))
    
        dict_return['diff_list'] = [ {'Ranking': item[0], '商品主键': item[1], '商品价格': item[2],
                                      '商品采价日期': item[3], '商品销量': item[4],'销售额': item[5]}
                                     for item in list(zip(num, data_list['商品主键'], data_list['商品价格'],
                                data_list['商品采价日期'], data_list['商品销量'],data_list['销售额']))]  # 将数据制作成滚动图需要的数据格式
        print(dict_return['diff_list'])
    
        #饼图数据
        data_year = data_goods.copy(deep=True)
        data_year['商品采价日期'] = pd.to_datetime(data_year['商品采价日期'])
        data_year['商品采价日期'] = data_year['商品采价日期'].apply(lambda x:datetime.datetime.strftime(x,'%Y'))
        data_year = data_year.groupby([ '商品采价日期'],as_index=False).sum()    # print(data_goods)
        sale_Y_x = data_year['商品采价日期']
        sale_Y_y = data_year['销售额']
        dict_return['diff'] = [{"name": item[0], "value": item[1]} for item in
                               list(zip(sale_Y_x, sale_Y_y))]  # 将数据制作成柱饼图需要的数据格式
    
    
        #雷达
        data_Month = data_goods.copy(deep=True)
        data_Month['商品采价日期'] = pd.to_datetime(data_Month['商品采价日期'])
        data_Month['商品采价日期'] = data_Month['商品采价日期'].apply(lambda x: datetime.datetime.strftime(x, '%m'))
        data_Month = data_Month.groupby(['商品采价日期'], as_index=False).sum()
        sale_M_y = data_Month['销售额']
        money = []
        for item in sale_M_y:
            money.append(int(item))
        dict_return['diff_l'] = {"name": '月份销售总额', "value": money}
    
        #数据终处理
        time_x = list(time_x)
        sale_n_y = list(sale_n_y)
        price_y = list(price_y)
        all_price_y = list(all_price_y)
        dict_return['time_x'] = time_x
        dict_return['sale_n_y'] = sale_n_y
        dict_return['price_y'] = price_y
        dict_return['all_price_y'] = all_price_y
    
        return dict_return
    
    #get_data('杭州市', '商品1')
    

    2.3html

    代码过长,公众号可获取。

    关注公众号: 我是TIME0101
    回复:浙江省农产品数据可视化
    可获取源码

    在这里插入图片描述

    展开全文
  • 展示中国新冠疫情数据,建立时间序列模型分析预测未来30天新增,通过flask,echarts进行大屏展示
  • python数据可视化:基于pyecharts的BI数据大屏

    万次阅读 多人点赞 2019-02-11 09:03:00
    作为公司负责搜索和推荐的部门,很多业务数据都需要进行可视化展示:一方面是方便团队成员进行监控和分析,另一方面也是为了和业务部门共享分析成果,让数据产生更多的价值。虽然公司已经准备部署Tableau,但我们...

    在这里插入图片描述

    1 背景

    部门有很多业务数据都需要进行可视化展示,一方面是方便团队成员进行监控和分析,另一方面也是为了和业务部门共享分析成果,让数据产生更多的价值。虽然公司已经准备部署Tableau,但我们经过讨论后认为团队自己开发的大屏可以更灵活、也可以和Tableau形成互补。在寻找解决方案的时候,我们首先明确了以下几条原则,并且最终选定了pyecharts。
    注:出于保密和效果考虑,BI版面和图表类型有调整,使用的数据全部为虚构。

    • 图表丰富,提供仪表盘、漏斗图、地理图、关系图等图表类型;
    • 样式美观,具有简单的动态效果和基础的交互功能;
    • 实现容易,尽可能使用python开源库,实现“一站式”的数据抽取、数据处理和可视化。

    ECharts是由百度开源的基于JS的商业级数据图表库,具有简洁美观、交互丰富、高度定制等特点,我们可以在ECharts官网看到其具有非常丰富的图表类型和实例。pyecharts基于ECharts为我们提供了python的调用接口,可以生成“html”、“svg”、“png”、“jpeg”、“gif”和“pdf”格式的图表。
    在这里插入图片描述

    2 pyecharts的安装和使用

    2.1 pyecharts的安装

    pyecharts可以直接通过pip安装:

    pip install pyecharts
    

    需要使用地图类图表的,还需要安装以下地图数据包:

    pip install echarts-countries-pypkg
    pip install echarts-china-provinces-pypkg
    pip install echarts-china-cities-pypkg
    pip install echarts-china-counties-pypkg
    pip install echarts-china-misc-pypkg
    

    2.2 pyecharts快速上手

    下面我们来尝试使用pyecharts制作单个图表。以下代码首先创建了一个Bar类型的柱状图实例bar,指定了图表的主标题和副标题;然后用add的方法为bar传入了数据标签、x值和y值;最后,我们把图表保存成了html格式。

    from pyecharts import Bar
    bar=Bar("商品销量","各季度的商品销量")
    bar.add("2018Q4",["轴承","弹簧","齿轮","导轨","丝杠"],[19,21,23,19,13])
    bar.render("bar.html")
    

    在这里插入图片描述
    对于柱状图、折线图、散点图等图表类型,我们可以通过多次add的方法传入数据,制作多列柱状图。

    bar=Bar("商品销量","各季度的商品销量")
    bar.add("2018Q3",["轴承","弹簧","齿轮","导轨","丝杠"],[17,23,25,14,17])
    bar.add("2018Q4",["轴承","弹簧","齿轮","导轨","丝杠"],[19,21,23,19,13])
    bar.render("bar.html")
    

    在这里插入图片描述
    同时,我们还可以在创建bar和add数据的时候为图表和数据项设置各类参数。如主标题的字体颜色,x值的字体大小

    bar=Bar("商品销量","各季度的商品销量",title_color ="#c1392b")
    bar.add("2018Q3",["轴承","弹簧","齿轮","导轨","丝杠"],[17,23,25,14,17])
    bar.add("2018Q4",["轴承","弹簧","齿轮","导轨","丝杠"],[19,21,23,19,13],xaxis_label_textsize=24)
    bar.render("bar.html")
    

    在这里插入图片描述
    此外,pyecharts还支持主题色系的更换,你可以理解为变更主题:

    bar=Bar("商品销量","各季度的商品销量",title_color ="#c1392b")
    bar.use_theme('dark')
    bar.add("2018Q3",["轴承","弹簧","齿轮","导轨","丝杠"],[17,23,25,14,17])
    bar.add("2018Q4",["轴承","弹簧","齿轮","导轨","丝杠"],[19,21,23,19,13],xaxis_label_textsize=24)
    bar.render("bar.html")
    

    在这里插入图片描述

    2.3 pyecharts多图表Page

    关于echarts的调用方法和更多图表的配置,建议大家参考pyecharts官网,里面有非常详细的介绍。这里需要再补充的是pyecharts的“多图表Page”功能,这是我们实现BI监控大屏的基础。如下代码,我们构建了一个page实例,然后将构建的bar和gauge添加进page,最后将page保存获得一个包含柱状图和仪表盘的html文件。

    from pyecharts import Page,Bar,Funnel
    page=Page()
    bar=Bar("商品销量","各季度的商品销量")
    bar.add("2018Q3",["轴承","弹簧","齿轮","导轨","丝杠"],[25,23,17,14,17])
    bar.add("2018Q4",["轴承","弹簧","齿轮","导轨","丝杠"],[23,21,19,19,13])
    page.add_chart(bar,name="bar")
    funnel=Funnel("订单转化效率","今日用户的订单转化效率")
    funnel.add("",["访问","搜索","点击","加购","订单"],[100.00,78.12,35.74,17.17,2.62])
    page.add_chart(funnel,name="funnel")
    page.render("page.html")
    

    使用Chrome打开“page.html”文件,使用开发者工具(F12)查看该文件,发现pyecharts实际上帮我们生成了两个div,对应刚才绘制的柱状图和仪表盘。我们可以把整个html理解成画布,div理解成两个图表,图表的主要内容已经通过pyecherts完成,接下来还需要继续对图表和画布进一步修改。

    在这里插入图片描述

    3 图表和画布的修改

    前面介绍了pyecharts的安装和使用,借助多图表Page功能,我们可以首先绘制多个图表并对每个图表进行修改,然后调整每个图表在画布中的大小和位置,最后借助html追加标题、边框等元素实现BI大屏。

    3.1 图表配置

    图表的配置主要包括图形初始化、通用配置项和图表配置项,具体的配置参数大家可以参考官方教程,以下供参考。
    图形初始化:创建图表时传入的配置项,如“title”、“subtitle”、“title_pos”等。

    bar=Bar("商品销量","各季度的商品销量",title_pos="center")
    

    通用配置项:图表通过add接受的参数(所有类型的图表都有的参数)。

    bar.add("A",data_x,data_y,xaxis_name=“x_axis”,xaxis_name_pos=“middle”)
    

    图表配置项:图表通过add接受的参数(指定类型的图表特有的参数)。

    bar.add("A",data_x,data_y,bar_category_gap=“20%”)
    

    3.2 图表编辑_option

    pyecharts只提供了部分图表配置参数,当不能满足修改需求时,我们还可以参考echarts官网示例通过_option接口追加配置选项。以漏斗图为例,我们可以修改“top”、“bottom”、“left”和“width”四个参数选项来调整漏斗的大小,代码如下:
    在这里插入图片描述

    funnel=Funnel("订单转化效率","今日用户的订单转化效率")
    funnel.add("",["访问","搜索","点击","加购","订单"],[100.00,78.12,35.74,17.17,2.62])
    funnel._option['series'][0]["top"]=70
    funnel._option['series'][0]["bottom"]=20
    funnel._option['series'][0]["left"]="5%"
    funnel._option['series'][0]["width"]="90%"
    

    3.3 画布修改

    借助html,我们可以调整每个图表在画布中的大小和位置、追加标题、边框等元素,实现BI大屏。以一个完整的例子来说明:

    from pyecharts import Page,Bar,Funnel
    import os as os
    from bs4 import BeautifulSoup
    
    page=Page()
    bar=Bar("商品销量","各季度的商品销量",title_pos="center")
    bar.use_theme("dark")   #修改图表主题
    bar.add("2018Q3",["轴承","弹簧","齿轮","导轨","丝杠"],[25,23,17,14,17],mark_point=["min","max"])  #追加最大值标记点、最小值标记点
    bar.add("2018Q4",["轴承","弹簧","齿轮","导轨","丝杠"],[23,21,19,19,13],mark_point=["min","max"],bar_category_gap=45,is_legend_show=False) #追加最大值标记点、最小值标记点、修改柱间隔、是否显示图例
    page.add_chart(bar,name="bar")
    funnel=Funnel("订单转化效率","今日用户的订单转化效率",title_pos="center")    #修改标题位置
    funnel.use_theme("dark")    #修改图表主题
    funnel.add("",["访问","搜索","点击","加购","订单"],[100.00,78.12,35.74,17.17,2.62],is_label_show=True,is_legend_show=False,label_pos="outside")   #是否显示标签、是否显示图例、标签位置
    funnel._option['series'][0]["top"]=70   #修改漏斗图上间隔
    funnel._option['series'][0]["bottom"]=20    #修改漏斗图下间隔
    funnel._option['series'][0]["left"]="5%"    #修改漏斗图左间隔
    funnel._option['series'][0]["width"]="90%"  #修改漏斗图宽度
    page.add_chart(funnel,name="funnel")
    page.render("page.html")
    with open(os.path.join(os.path.abspath("."),"page.html"),'r+',encoding="utf8") as html:
        html_bf=BeautifulSoup(html,"lxml")
        divs=html_bf.find_all("div")
        divs[0]["style"]="width:600px;height:400px;position:absolute;top:70px;left:0px;border-style:solid;border-color:#444444;border-width:3px;"    #修改图表大小、位置、边框
        divs[1]["style"]="width:600px;height:400px;position:absolute;top:70px;left:600px;border-style:solid;border-color:#444444;border-width:3px;"  #修改图表大小、位置、边框
        body=html_bf.find("body")
        body["style"]="background-color:#333333;"
        div_title="<div align=\"center\" style=\"width:1200px;\">\n<span style=\"font-size:32px;font face=\'黑体\';color:#FFFFFF\"><b>基于pyecharts的BI监控大屏</b></div>"    #修改页面背景色、追加标题
        body.insert(0,BeautifulSoup(div_title,"lxml").div)
        html_new=str(html_bf)
        html.seek(0,0)
        html.truncate()
        html.write(html_new)
        html.close()
    

    在这里插入图片描述
    这里我们已经实现了比较简单的图表组合和画布设置,在此基础上结合业务需要,就可以制作我们需要的BI大屏,然后通过对浏览、上传和加载该html文件进行分享

    展开全文
  • python 疫情数据可视化

    2020-12-21 12:29:47
    json数据转 csv import json import time import csv file = open('DXYArea-TimeSeries.json','r',encoding='utf-8') infos = json.load(file) with open('data.csv','a',newline='') as f: writer = csv....
  • 闲来无事,打开知乎和某搜索引擎,搜索可视化大屏: 这么火?甚至有些人都用上了“最可怕”这三个字,不是我说,虽然可视化大屏很强,但是你这么说真的就有点过分了。 阿里的datav我知道,一个存在了几年的...
  • 近年来,数据可视化大屏的出现,掀起一番又一番的浪潮,众多企业主纷纷想要打造属于自己的 “酷炫吊炸天” 的霸道总裁大屏驾驶舱。今天为大家分享的是 【互联网大数据统计展示大屏】。 话不多说,开始分享干货,...
  • 目录   1、项目背景   2、信息的爬取(基于51job招聘网站的数据爬取)    1)导入相关库    2)关于翻页的说明    3)完整的爬取代码   3、数据预处理 ...  5、tableau可视化展示    1) 热
  • 近年来,数据可视化大屏的出现,掀起一番又一番的浪潮,众多企业主纷纷想要打造属于自己的 “酷炫吊炸天” 的霸道总裁大屏驾驶舱。今天为大家分享的是 【厦门市某医院大数据展示案例】。 话不多说,开始分享干货,...
  • jquery+bootstrap+echarts数据可视化大屏展示特效实例 项目描述: 数据可视化大屏展示用的越来越多,自己也捣鼓做一个。 运行环境: Chrome 项目技术(必填): jquery+bootstrap+echarts
  • 案例:Python爬取新冠肺炎实时数据及其可视化分析 作者:PyQuant 博客:https://blog.csdn.net/qq_33499889 慕课:https://mooc1-2.chaoxing.com/course/207443619.html 本案例适合作为大数据技术基础课程中数据爬取...
  • #Python可视化 5个 对于从事数据领域的小伙伴来说,当需要阐述自己观点、展示项目成果时,我们需要在最短时间内让别人知道你的想法。我相信单调乏味的语言很难让别人快速理解。最直接有效的方式就是将数据进行...
  • Python 和 Echart 实现的酷炫可视化大屏。 详细手册参考我的博文: https://blog.csdn.net/lildkdkdkjf/article/details/119801899

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,577
精华内容 1,030
关键字:

python数据可视化大屏

python 订阅