精华内容
下载资源
问答
  • 动态可视化排行榜
    2022-07-05 16:07:48

    第一步,获取百度热搜指数

    import requests
    import sys
    import time
    import datetime
    import pandas as pd
    
    # 每一个def 里都必须return,这样才有数据,不然会直接打印none !!!
    
    
    word_url = 'http://index.baidu.com/api/SearchApi/thumbnail?area=0&word={}'
    COOKIES = ''
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'no-cache',
        'Cookie': COOKIES,
        'DNT': '1',
        'Host': 'index.baidu.com',
        'Pragma': 'no-cache',
        'Proxy-Connection': 'keep-alive',
        'Referer': 'http://index.baidu.com/v2/main/index.html',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
    }
    
    
    def decrypt(t, e):
        n = list(t)
        i = list(e)
        a = {}
        result = []
        ln = int(len(n) / 2)
        start = n[ln:]
        end = n[:ln]
        for j, k in zip(start, end):
            a.update({k: j})
        for j in e:
            result.append(a.get(j))
        return ''.join(result)
    
    
    def get_ptbk(uniqid):
        url = 'http://index.baidu.com/Interface/ptbk?uniqid={}'
        resp = requests.get(url.format(uniqid), headers=headers)
        if resp.status_code != 200:
            print('获取uniqid失败')
            sys.exit(1)
        return resp.json().get('data')
    
    # 增加的自定义日期方法,从开始日期+1
    # def rq(start,end):
    #     dt = [] # 定义一个日期空列表
    #     datestart = datetime.datetime.strptime(start, '%Y-%m-%d')
    #     dateend = datetime.datetime.strptime(end, '%Y-%m-%d')
    #     while datestart < dateend:
    #         dt.append(datestart.strftime('%Y-%m-%d')) # append到日期列表里
    #         datestart += datetime.timedelta(days=1) # 开始日期+1
    #         # print(datestart.strftime('%Y-%m-%d'))
    #     return dt
    
    
    
    def get_index_data(keyword, dt):
    
        keywords = str(keyword).replace("'", '"') # 注意命名的时候不一致,很容易报错
        url = f'http://index.baidu.com/api/SearchApi/index?area=0&word={keywords}&area=0&startDate={dt[0]}&endDate={dt[-1]}'
        # 取dt的第一个和最后一个,相当于开始日期和结束日期
    
        resp = requests.get(url, headers=headers)
        if resp.status_code != 200:
            print('获取指数失败')
            sys.exit(1)
    
        content = resp.json()
        data = content.get('data')
        user_indexes = data.get('userIndexes')[0]
        uniqid = data.get('uniqid')
        ptbk = get_ptbk(uniqid)
    
        while ptbk is None or ptbk == '':
            ptbk = get_ptbk(uniqid)
    
        all_data = user_indexes.get('all').get('data')
        result = decrypt(ptbk, all_data)
        result = result.split(',')
        # print(keyword)
    
        # 遍历日期,range后面的天数必须跟开始和结束日期对应的天数一致
        # lll= [(dt_[i],result[i],keyword[0][0]['name']) for i in range(29)]
        # keyword对应的数据是双层括号里还有字典,取对应数据需注意
    
        lll = [(dt[i],result[i]) for i in range(len(dt))] # 不添加搜索词列,len 取字符长度,可以不用改天数
    
        return lll
    
    
    
    
    # 以下数据是从下往上,看用调用了哪些方法,方法必须在前面。
    if __name__ == '__main__':
        # 定义的日期开始结束变量,rq方法和get_index_data可以一起用
    
        dt = pd.date_range("2022-01-17", "2022-02-15")
        print(dt)
        # 搜索词遍历,可以一次得多个词的对应数据
        word1 = ["新冠疫苗","新冠","新冠病毒"]
        for word_ in word1:
            words = [[{"name": word_, "wordType": 1}]] # 注意是双层中括号
    
            # get_index_data后面的参数必须跟对应的方法参数一致,否则后面无法调用。
            m = get_index_data(words,dt)
            # print(m)
            mm = pd.DataFrame(m)
            mm.columns = ["date","value"]
            mm.to_excel(rf'C:\Users\Administrator\Desktop\download\{word_}.xlsx',index=False) # 记得传变量命名,路径前面加f,相当于format
    

    第二步,动态可视化排行版

    import pandas as pd
    import numpy as np
    import xlrd
    from pyecharts.charts import Bar
    from pyecharts import options as opts
    from pyecharts.globals import ThemeType
    from pyecharts.charts import Timeline
    import datetime
    # “read_row_excel”用于去读取excel文件中的某一行数据
    # “read_col_excel”用于去读取excel文件中的某一列数据
    def read_col_excel(column_number,filename):
        # 打开文件
        workbook = xlrd.open_workbook(r'C:\Users\村长苏苏\Desktop\排名热度.xlsx')
    
        # 根据sheet索引或者名称获取sheet内容
        sheet2 = workbook.sheet_by_index(0)
    
        # 获取整行和整列的值(数组)
        col_data = sheet2.col_values(r'C:\Users\村长苏苏\Desktop\排名热度.xlsx')  # 获取行内容
        return col_data
    def read_row_excel(row_number,filename):
        # 打开文件
        workbook = xlrd.open_workbook(filename)
    
        # 根据sheet索引或者名称获取sheet内容
        sheet2 = workbook.sheet_by_index(0)
    
        # 获取整行和整列的值(数组)
        row_data = sheet2.row_values(row_number)  # 获取行内容
        return row_data
    
    # “get_visualBar”函数的作用是要用Pyecharts绘制出一副条形图,所绘制的动态图表中的每一张图都为条形图。
    #  另外,本函数中,绘制的条形图是一个水平的条形图,原因是通过代码 bar.reversal_axis()将x轴与y轴调换了
    def get_visualBar(x,y,labeltime):
        bar=Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC,width='1500px',height='600px',bg_color='#FFF5EE'))
        bar.add_xaxis(xaxis_data=x)
        bar.add_yaxis(labeltime,y,itemstyle_opts=opts.ItemStyleOpts(area_color='#f5f5f5',color='#EE2C2C',border_color='#000000'),label_opts=opts.LabelOpts(is_show=True,position='right',font_weight='bold',font_size=15)
                      )
        bar.set_global_opts(title_opts=opts.TitleOpts('你是我的荣耀主演热度变化'),
                            yaxis_opts=opts.AxisOpts(is_inverse=True,name_textstyle_opts=opts.TextStyleOpts(font_weight='bold'),interval=20)
                            ,legend_opts=opts.LegendOpts(type_='',item_width=0,textstyle_opts=opts.TextStyleOpts(font_size=20,font_weight='bold')))
        bar.set_series_opts()
        bar.reversal_axis()
        return bar
        
    #  将图表添加至时间轴来绘制动态图表
    # 编写主函数main,用于将刚才由 “get_visualBar”函数生成的图片添加到时间轴上,最终生成一个动态图表。
    def main():
        filename=r'C:\Users\村长苏苏\Desktop\排名热度.xlsx'
        xdata=read_row_excel(0,filename)
        timeline = Timeline()
        begin=datetime.date(2021,7,26)# 修改日期
        for i in range(1,26):# 修改天数
            ydata=read_row_excel(i,filename)
            data=list(zip(xdata,ydata))
            data.sort(key=lambda x:x[1],reverse=True)
            newxdata=[x[0] for x in data]
            newydata=[x[1] for x in data]
            date=str(begin+datetime.timedelta(days=i))
            bar=get_visualBar(newxdata,newydata,date)
            timeline.add(bar,date).add_schema(play_interval=360,is_auto_play=True,is_timeline_show=False)
            # 以上main函数中,通过for循环,共制作了10副条形图,每一副都被添加到了timeline时间轴上。
        timeline.render(r'C:\Users\村长苏苏\Desktop\排名热度图.html')
        
    # 调用main函数
    main()
    
    更多相关内容
  • 网站热搜数据爬取,数据可视化轮播动态图,代码不用修改直接可以运行,一键化展示 参考文章中:https://wxw-123.blog.csdn.net/article/details/113816265
  • python可视化分析Top100排行榜数据。 分析流程: 一、数据读取 二、数据概览 三、数据清洗 四、可视化分析 ·相关性分析-散点图(scatter) ·得分分布-饼图(pie) ·各指标分布-箱形图(boxplot) ·视频作者分析-...

    目录

    一、数据源

    二、数据读取

    三、数据概览

    四、数据清洗

    五、可视化分析

    5.1 相关性分析(Correlation)

    5.2 饼图(Pie)

    5.3 箱形图(Boxplot)

    5.4 词云图(wordcloud)

    六、同步讲解视频


    一、数据源

    之前,我分享过一期爬虫,用python爬取Top100排行榜:

    最终数据结果,是这样的:

    在此数据基础上,做python可视化分析。

    二、数据读取

    首先,读取数据源:

    # 读取csv数据
    df = pd.read_csv(csv)

    三、数据概览

    用shape查看数据形状:

    # 查看数据形状
    df.shape

    用head查看前n行:

    # 查看前5行
    df.head(5)

    用info查看列信息:

    # 查看列信息
    df.info()

    用describe查看统计性分析:

    # 描述性统计分析
    df.describe()

    四、数据清洗

    查看是否存在空值:

    # 查看空值
    df.isna().any()

    每列都是False,没有空值。

    查看是否存在重复值:

    #查看重复值
    df.duplicated().any()

    False代表没有重复值。

    上面我们看到,点踩数都是0,没有分析意义,所以,用drop删除此列:

    # 删除没用的列
    df.drop('点踩数', axis=1, inplace=True)

    删除之后,查看删除结果:

    没有点踩数了。

    五、可视化分析

    5.1 相关性分析(Correlation)

    数据中,有播放数、弹幕数、投币数、点赞数、分享数、收藏数等众多数据指标。

    我想分析出,这些指标中,谁和综合得分的关系最大,决定性最高。

    直接采用pandas自带的corr函数,得出相关性(spearman相关)矩阵:

    可以看出,点赞数和综合得分的相关性最高,达到了0.66。

    根据此分析结论,进一步画出点赞数和综合得分的分布散点图,验证此结论的正确性。

    得出结论:随着点赞数增多,综合得分呈明显上升趋势,进一步得出,二者存在正相关的关系

    5.2 饼图(Pie)

    综合得分划分分布区间,绘制出分布饼图。

    首先,划分数据区间:

    # 设置分段
    bins = [1000000, 1500000,2000000, 2500000, 3000000, 10000000]
    # 设置标签
    labels = [
        '100w-150w',
        '150w-200w',
        '200w-250w',
        '250w-300w',
        '300w-1000w'
    ]
    # 按分段离散化数据
    segments = pd.cut(score_list, bins, labels=labels)  # 按分段切割数据
    counts = pd.value_counts(segments, sort=False).values.tolist()  # 统计个数

    至于区间怎么划分,可以按照对数据的大致理解,和最终可视化呈现的效果,微调划分区间。

    绘制饼图:

    得出结论:综合得分在100w至150w这个区间的视频最多,有36个视频(占比36%)

    5.3 箱形图(Boxplot)

    箱形图,是一种分析数据分布、离散情况的数据分析方法。

    首先,我尝试了把这几个数据指标,绘制在同一张图里:

    可以发现,由于播放数远远大于其他数据指标,不在一个数量级,导致其他数据指标的box都挤到一块了,可视化效果很差,所以,我打算把每个box画到一个图里,避免这种情况的发生。

    以下代码,含知识点(subplot(n_row, n_col, order) n_row代表几行,n_col代表几列,order代表第几个)

    得出结论:每个数据指标都存在极值的情况(最大值距离box很远),数据比较离散,方差较大

    5.4 词云图(wordcloud)

    针对视频作者,画出词云图。

    代码中各个细节设置项,已添加对应注释,不再赘述。

    和原始背景图对比:

    这个背景图,是我找的一个动漫小人的图片,对比词云图,你会发现:

    1. 词云图和背景图的形状,大体一致(mask参数的作用)

    2. 词云图和背景图的颜色分布,大体一致(color_func参数的作用)

    至此,全部分析结束。

    六、同步讲解视频

    此案例的讲解视频:

    【Python可视化分析】分析Top100数据


    首发公众号文章:【可视化分析案例】用python分析Top100排行榜数据


    我是马哥,全网累计粉丝上万,欢迎一起交流python技术。

    各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博。

    展开全文
  • B站数据可视化排行榜项目入门指南

    万次阅读 多人点赞 2018-08-07 10:57:04
    Jannchie基于d3.js做的一个将历史数据排名转化为动态柱状图图表的数据可视化项目。 源码下载地址:1.https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js 注:下载点击进入界面右...

    Jannchie基于d3.js做的一个将历史数据排名转化为动态柱状图图表的数据可视化项目。

    源码下载地址:1. https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js

                              注:下载点击进入界面右下角的"Clone or download"按钮即可

    说明:因为项目持续更新,目前最新的项目和博文里面界面展示已经有比较大的差异,所以下面放两个历史版本的链接:

            1.百度网盘:https://pan.baidu.com/s/1VIWifPTBD3TSDS6R-jw9kQ 密码:w4gp

            2.gitHub历史版本:https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js/tree/b1d4ba9749c32e6a5debd171fa2c5c49b8000d6d

    说明:针对最近问的很多关于右上角计数的问题,已经测试了,具体修改内容在文章最后,见图2-1.

    另外,由于项目作者不断在更新自己的项目,而我只是闲暇时间来更新,可能跟不上作者的更新速度,所以难免有错误的地方,请大家见谅!!

    效果展示:

                                                                图(1-1)

    首先: 解压下载的压缩包,我们可以首先打开README.md(可以用notepad++、Editplus、Sublime 等文本编辑器打开)看一下                项目简介:

                                                              图(1-2)

    从上图我们可以了解到 一些关于此项目的基本信息:这是基于D3.js(https://d3js.org/,基于javascript的一个实现数据可视化的函数库)开发的一个将历史数据排名转化为动态柱状图的图表。

    数据格式: 压缩包给我们提供了一个样例数据,路径为:/Historical-ranking-data-visualization-based-on-d3.js-master/dist/example.csv(csv用excel就可以编辑)。

    强调:数据格式必须以下图格式,四列name+type+value+date!!!

     

                                                                 图(1-3)

    我们在操作时把自己的数据填充进去就可以。

    然后我们测试一下效果:用浏览器(建议用谷歌)打开bargraph.html路径为/Historical-ranking-data-visualization-based-on-d3.js-master/dist/bargraph.html,点选择文件,选择修改过后的example.csv,可以看到基本效果如下:

                                                                  图(1-4)

    我们发现颜色有点单调,因为默认的话颜色是随机的,那我们如何自定义颜色呢?

    我们要先打开/Historical-ranking-data-visualization-based-on-d3.js-master/dist/config.js,把use_custom_color:false属性的false改为true,即use_custom_color:true。 此属性确定是否使用自定义颜色。默认为false。

                                                                    图(1-5)

    其次在修改color.css样式文件之前,我们首先要考虑一下我们的颜色根据什么区分,在config.js里面有两个属性,

    use_type_info : true, divide_by_type: true,这两个控制以type进行颜色分类,这个type也就是我们example.csv里面的type,举个例子 { name : 马龙, type : 中国},{ name : 张怡宁, type : 中国},想让马龙和张怡宁大魔王都显示中国红,那么在color.css里写样式  

    .中国 {
      fill: red
    }
    
    .马龙 {
      fill: blue
    }
    
    .张怡宁 {
      fill:  gray
    }

                                                                   图(1-6)

    这时候只有第一个样式中国 fill:red(type) 生效,因为此时是以type分类

                                                                  图(1-7)

    另外,我们除了以type为颜色分组之外,还可以以name分组,比如给张怡宁大魔王来个粉红色,龙队来个绿色,我们需要修改config.js里面的 divide_by_type: false,false代表不以type分组,默认以name分组。

    .马龙 {
      fill: green
    }
    
    .张怡宁 {
      fill:  pink
    }

                                                                     图(1-8)

     

                                                                图(1-9)

    其次就是根据喜好在color.css设置你自己喜欢的颜色了,颜色有三种格式 :①英文颜色,比如blue,yellow ②rgb(x,x,x)  ③#xxxxxx(十六进制颜色)  可参考:http://www.runoob.com/cssref/css-colorsfull.html

    再说一下其他的属性config.js:

    max_number : 每个时间节点最多显示的条目数(同一时间点页面显示的最多条数)

    itemLabel : "左边信息",顶部左边显示的提示信息

    typeLabel : "右边信息",顶部右边显示的提示信息

    use_counter: 计数器会出现在右上角,记录着当前榜首的持续时间,这个加了之后会报错Uncaught TypeError: Cannot read                              property 'data' of undefined,源码里it.data(j).text(function(){})报data的错,大家斟酌使用。


     left_margin : 230,  // 图表左间距。

     right_margin : 150, //图表右间距

     top_margin : 200,  //图表上间距

     bottom_margin : 0,  //图表下间距

    首先看看右上角计数的效果:

                                                                          图(2-1) 

    右上角计数需要修改如下:

    第一:用编辑器打开config.js文件,开启计数功能,即把cuse_counter属性设置由false设置为为true,具体如下:

      // 使用计数器
      // 注意!使用计时器和使用类型目前不能兼容,即不能同时开启!
      // 计数器会出现在右上角,记录着当前榜首的持续时间。
      use_counter: true,

    第二:根据自己的需求更改右上角的文字说明:比如我这里更改右上角文字说明为"榜首持续时间(天)",具体在config.js中修改如下:

      // 附加信息内容。
      itemLabel: "左侧文字",
      typeLabel: "榜首持续时间(天)",

    第三,更改step属性,我目前的版本step默认属性值为"7",即为7天计数器记为“1”,意思就是如果榜首累计占据了7天,那么我右上角显示“1”,如果榜首累计占据了14天,那么右上角显示“2”,我自己展示的把step属性改为了“1”,意思就是占据榜首1天,右上角计数器+1,所以上图显示为3;

    // 每个时间节点对于计数器的步长。
    // 比如时间节点日期的间隔可能为1周(七天),那么step的值就应该为7。
    step: 1,

    第四:根据自己的实际需要调节右上角的文字说明计数器位置偏移,防止文字重叠,参数如下:

      // 右侧文字横坐标,即为右上角文字说明的部分
      text_x: 1000,
      // 偏移量,即为右上角计数器相对文字说明的位置
      offset: 500,

     

    展开全文
  • 20【源码】数据可视化:基于 Echarts + Python 动态实时大屏范例 (含爬虫代码)- 福布斯排行榜大屏.zip,20【源码】数据可视化:基于 Echarts + Python 动态实时大屏范例 (含爬虫代码)- 福布斯排行榜大屏,...
  • 四、数据可视化关键编码实现 1、前端html代码 2、前端JS代码 3、后端python服务器代码 五、上线运行 六、源码下载 七、精彩案例汇总 写在前面,最近收到了很多小伙伴们的建议,大屏得展示数据如果采用真实...

    目录

    ❤️效果展示❤️

    1、首先看动态效果图 

    2、丰富的主题样式

    一、 确定需求方案

    1、确定产品上线部署的屏幕LED分辨率

    2、部署方式 

    二、整体架构设计

    三、爬虫采集关键编码实现

    1、确定爬虫目标网址

    2、爬取关键代码 

    四、数据可视化关键编码实现 

    1、前端html代码 

    2、前端JS代码

    3、后端python服务器代码

    五、上线运行

    六、源码下载

    七、精彩案例汇总


    写在前面,最近收到了很多小伙伴们的建议,大屏得展示数据如果采用真实数据分析计算,那就更加贴近小伙伴们的实际工作场景,可以很快在工作中应用,所以应小伙伴需求,就诞生了这篇数据可视化+爬虫的bilibili排行榜 - 数据可视化大屏解决方案】。

    之前小伙伴们建议我出一些视频课程来学习Echarts,这样可以更快上手,所以我就追星赶月的录制了《Echart-0基础入门》系列课程(共14节课) ,希望小伙伴们多多支持。

    话不多说,开始分享干货,欢迎讨论!QQ微信同号: 6550523

    ❤️效果展示❤️

    1、首先看动态效果图 

    2、丰富的主题样式

      

     

      

    一、 确定需求方案

    1、确定产品上线部署的屏幕LED分辨率

    1280px*768px,F11全屏后占满整屏无滚动条;其它分辨率屏幕可自适应显示。

    2、部署方式 

    • 基于免安装可执行程序:支持Windows、Linux、Mac等各种主流操作系统;将可执行程序exe复制到服务器上即可,无需其它环境依赖;
    • 观看方式:既可在服务器上直接观看程序界面,也可远程使用浏览器打开播放,支持Chrome浏览器、360浏览器等主流浏览器。

    二、整体架构设计

    1. 前端基于Echarts开源库设计,使用WebStorm编辑器;
    2. 后端基于Python Web实现,使用Pycharm编辑器;
    3. 数据传输格式:JSON;
    4. 数据源类型:本案例采用python request 采集实时数据方式。实际开发需求中,支持定制HTTP API接口方式或其它各种类型数据库,如PostgreSQL、MySQL、Oracle、Microsoft SQL Server、SQLite、Excel表格等。
    5. 数据更新方式:本案例为了展示数据,采用定时拉取方式。实际开发需求中,采用后端数据实时更新,实时推送到前端展示;

    三、爬虫采集关键编码实现

    1、确定爬虫目标网址

    本次采集的目标是bilibili实时热点数据,url地址为:哔哩哔哩排行榜bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。https://www.bilibili.com/v/popular/rank/ent调用的api地址为:https://api.bilibili.com/x/web-interface/ranking/v2?type=all

    2、爬取关键代码 

    def scrapy(url):
        headers = {
            "Content-Type": 'application/json;charset=utf-8',
            # "cookie": cookie,
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"
        }
        result_obj = {}
        try:
            response = requests.get(url=url, headers=headers, verify=False)
            result_obj = json.loads(response.text)
        except Exception as e:
            print(e)
    
        if 0 == result_obj['code']:
            return result_obj["data"]["list"]
        else:
            result_obj['code'] = 'error'
            return result_obj
    

    四、数据可视化关键编码实现 

    1、前端html代码 

       <div class="container_fluid">
            <div class="row_fluid" id="vue_app">
    
                <div style="padding:0px; height:10%; " class="col-xs-12 col-md-12">
                    <dv-decoration-4 :reverse="true" style="height:20%;">
                    </dv-decoration-4>
                    <h3 style="color:#cba871;text-align:center;height:80%;" id="container_h">container_h</h3>
                </div>
    
                <div style="padding: 0px;" class="col-xs-12 col-md-4">
                    <div style="padding: 0px; height:60%;" class="col-xs-12 col-md-12">
                        <dv-border-box-2 style="padding: 12px;  " :color="['#cba871', '#25201f']">
                            <h6 style=" color:#cba871; text-align: center; "> - bilibli视频播放(iframe方式) - </h6>
                            <div style="padding:5%; height:90%; " id="container_2"><iframe
                                    src="//player.bilibili.com/player.html?aid=891284092&bvid=BV1eP4y1b7Pt&cid=432844457&page=1"
                                    scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"
                                    width="100%" height="100%"> </iframe></div>
                        </dv-border-box-2>
                    </div>
                </div>
    
                <div style="padding:0px;" class="col-xs-12 col-md-4">
                    <div style="padding:0px; height:60%;" class="col-xs-12 col-md-12">
                        <dv-border-box-2 style="padding: 12px;  " :color="['#cba871', '#25201f']">
                            <h6 style=" color:#cba871; text-align: center;"> - 地区分布 - </h6>
                            <div style="padding:5%; height:90%;" id="container_3">container_3</div>
                        </dv-border-box-2>
                    </div>
                </div>
    
                <div style="padding: 0px;" class="col-xs-12 col-md-4">
                    <div style="padding: 0px; height:30%;" class="col-xs-12 col-md-12">
                        <dv-border-box-2 style="padding: 12px; " :color="['#cba871', '#25201f']">
                            <h6 style=" color:#cba871; text-align: center; height:3%;"> - 用户年龄&性别分布 - </h6>
                            <div style="padding: 0px; " class="col-xs-12 col-md-6">
                                <div style="padding:5%; height:90%;" id="container_4_1">container_4_1</div>
                            </div>
                            <div style="padding: 0px; " class="col-xs-12 col-md-1">
                                <div style="width: 0.3px; align:center; height: 80%; background: #cba871;"></div>
                            </div>
                            <div style="padding: 0px; " class="col-xs-12 col-md-5">
                                <div style="padding:5%; height:90%;" id="container_4_2">container_4_2</div>
                            </div>
                        </dv-border-box-2>
                    </div>
    
                    <div style="padding: 0px; height:30%;" class="col-xs-12 col-md-12">
                        <dv-border-box-2 style="padding: 12px; " :color="['#cba871', '#25201f']">
                            <h6 style=" color:#cba871; text-align: center;height:3%;"> - 访问来源&会员等级 - </h6>
                            <div style="padding: 0px; " class="col-xs-12 col-md-6">
                                <div style="padding:5%; height:90%;" id="container_5_1">container_5_1</div>
                            </div>
                            <div style="padding: 0px; " class="col-xs-12 col-md-1">
                                <div style="width: 0.3px; align: center; height: 80%; background: #cba871;"></div>
                            </div>
                            <div style="padding: 0px; " class="col-xs-12 col-md-5">
                                <div style="padding:5%; height:90%;" id="container_5_2">container_5_2</div>
                            </div>
                        </dv-border-box-2>
                    </div>
                </div>
    
                <div style="padding:0px;" class="col-xs-12 col-md-12">
                    <div style="padding:0px; height:30%;" class="col-xs-12 col-md-12">
                        <dv-border-box-2 style="padding: 12px; " :color="['#cba871', '#25201f']">
                            <h6 style="color:#cba871; text-align: center; "> - 全站热榜排行(python爬取bilibli) - </h6>
                            <div style=" padding:1%; height:90%; " id="container_6">container_6</div>
                        </dv-border-box-2>
                    </div>
                </div>
            </div>
        </div>

    2、前端JS代码

        var idContainer_6 = "container_6";
    
    var chartDom = document.getElementById(idContainer_6);
    var myChart = echarts.init(chartDom, window.gTheme);
    var option;
    
    option = {
      grid: {
        left: "1%",
        right: "1%",
        bottom: "15%",
        top: "1%",
        containLabel: true,
      },
      tooltip: {
        trigger: "axis",
        axisPointer: {
          type: "none",
        },
        formatter: function (params) {
          return params[0].name + ": " + params[0].value;
        },
      },
      dataZoom: [
        {
          type: "slider",
          xAxisIndex: 0,
          start: 0,
          end: 20,
          bottom: "-5%"
        },
      ],
      xAxis: {
        data: [],
        axisTick: { show: false },
        axisLine: { show: false },
        axisLabel: {
          color: "rgba(255,255,255,.8)",
        },
      },
      yAxis: {
        splitLine: { show: false },
        axisTick: { show: false },
        axisLine: { show: false },
        axisLabel: { show: false },
      },
      // color: ["#cba871"],
      series: [
        {
          type: "pictorialBar",
          barCategoryGap: "-100%",
          label: {
            normal: {
              show: true,
              position: "top",
              textStyle: {
                color: ["#cba871"],
              },
            },
          },
          symbol: "path://M0,10 L10,10 C5.5,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z",
          itemStyle: {
            opacity: 1,
          },
          emphasis: {
            itemStyle: {
              opacity: 1,
            },
          },
          data: [],
          z: 10,
        },
      ],
    };
    
    function asyncData_6() {
      $.getJSON("json/6.json").done(function (data) {
        var myChart = echarts.init(document.getElementById(idContainer_6));
        myChart.setOption(data);
      }); //end $.getJSON
    }
    
    window.addEventListener("resize", function () {
      myChart.resize();
    });
    
    myChart.setOption(option);
    
    asyncData_6();
    

    3、后端python服务器代码

         # -*- coding:utf-8 -*-
    import json
    import scrapyBilibili as scrapyBilibili
    from http.server import HTTPServer, SimpleHTTPRequestHandler, ThreadingHTTPServer
    
    ip = "localhost"   # 监听IP,配置项
    port = 8819       # 监听端口,配置项
    
    class MyRequestHandler(SimpleHTTPRequestHandler):
        protocol_version = "HTTP/1.0"
        server_version = "PSHS/0.1"
        sys_version = "Python/3.7.x"
        target = "./"  # 监听目录,配置项
    
        def do_GET(self):
            url = ""
            data = []
            # 处理客户端的动态请求
            if self.path.find("/json/6.json") >= 0:
                data = scrapyBilibili.filter(scrapyBilibili.scrapy("https://api.bilibili.com/x/web-interface/ranking/v2?type=all"))
            else:
                SimpleHTTPRequestHandler.do_GET(self)
                return
    
            # 响应http header
            self.send_response(200)
            self.send_header("Content-type", "json")
            self.end_headers()
    
            # 响应http response
            rspstr = json.dumps(data)
            self.wfile.write(rspstr.encode("utf-8"))
    
        # def do_GET(self):
        #     if self.path.find("/json/") > 0:
        #         print(self.path)
        #         req = {"success": "true"}
        #         self.send_response(200)
        #         self.send_header("Content-type", "json")
        #         self.end_headers()
        #         with open(self.path, 'r', encoding="utf-8") as f:
        #             data = json.load(f)
        #             rspstr = json.dumps(data)
        #             self.wfile.write(rspstr.encode("utf-8"))
    
        #     else:
        #         SimpleHTTPRequestHandler.do_GET(self);
    
        def do_POST(self):
            data = self.rfile.read(int(self.headers["content-length"]))
            data = json.loads(data)
            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            rspstr = json.dumps(data, ensure_ascii=False)
            self.wfile.write(rspstr.encode("utf-8"))
    
    
    def HttpServer():
        try:
            server = HTTPServer((ip, port), MyRequestHandler)
            listen = "http://%s:%d" % (ip, port)
            print("服务器监听地址: ", listen)
            server.serve_forever()
        except Exception as e:
            print("Exception", e)
            server.socket.close()
    
    
    if __name__ == "__main__":
        HttpServer()
    

    五、上线运行

    六、源码下载

    19【源码】数据可视化:基于Echarts+Python动态实时大屏范例-爬虫代码.zip-企业管理文档类资源-CSDN下载

    本次分享结束,欢迎讨论!QQ微信同号: 6550523

    七、精彩案例汇总

    请抬起你可爱的小手戳戳戳:❤️数据可视化《精彩案例汇总》❤️_小魔怪的博客-CSDN博客

    展开全文
  • 数据可视化练习-用powerBI生成自动播放的动态排行榜前言1. 前期准备:账号注册及软件下载2、数据获取及预处理3、可视化效果搭建4、发布共享其他 前言 最近在B站很流行各种动态排行榜视频,动态排行榜制作源代码...
  • 当然,数据可视化的工具也非常多,仅 Python 就有 matplotlib、plotly、seaborn、bokeh 等多种可视化库,我们可以根据自己的需要进行选择。但不是所有的人都擅长写代码完成数据可视化的工作,这个时候我们可以考虑...
  • 为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性。项目案例包括泰坦尼克号数据、鸢尾花数据、航班数据、金融类数据进行可视化图表分析,可以快速让大家...
  • 文章目录品牌排名动态可视化 @ D3.js任务清单思路分析画布初始化数据预处理注意将所有值转换为数值类型注意设置缺失值的缺省值为每个数据设置颜色过滤数据,仅保留当前年份的,数据切片,设置排名首次数据绑定坐标轴...
  • python绘制动态条形图排行榜
  • 今天为大家分享的是 【 行业搜索指数排行榜- 数据可视化大屏解决方案】。 话不多说,开始分享干货,欢迎讨论!QQ微信同号: 6550523 文末有更多精彩案例分享,喜欢的小伙伴儿一箭三连点赞收藏
  • 数据可视化,Echarts实现动态排名变化,带时间轴,标签颜色和条形图一起变化
  • 原标题:「React Hook」160行代码实现动态炫酷的可视化图表 - 排行榜某天在逛社区时看到一帖子:react-dynamic-charts — A React Library for Visualizing Dynamic Data 这是一个国外大佬在其公司峰会的代码竞赛中...
  • 1前言今天来跟大家分析一下2020年中国500强企业排行榜数据,从不同角度去对数据进行统计分析,可视化展示。本文从开始到最后发文,花费了一天时间(精心制作),保证以高质量文章给大家阅读,麻...
  • 对于 jQuery(js)部分,比较复杂,需要 AJAX 获取爬取到的信息以及对数据进行动态处理,还要处理页面中图像、单选按钮的点击事件以及 focus 事件,同时在 jQuery 部分还有修改 HTML 的 CSS 样式,使得页面流畅美观;...
  • 公众号后台回复“图书“,了解更多号主新书内容 作者:俊欣 来源:关于数据分析与可视化有粉丝问道说“是不是可以将这些动态可视化图表保存成gif图”,小编立马就回复了说后面会...
  • 四、数据可视化关键编码实现 1、前端html代码 2、前端JS代码 3、后端python服务器代码 五、上线运行 六、源码下载 七、精彩案例汇总 写在前面,最近收到了很多小伙伴们的建议,大屏得展示数据如果采用真实...
  • 本来想参照:https://mp.weixin.qq.com/s/e7Wd7aEatcLFGgJUDkg-EQ搞一个往年编程语言动态图的,奈何找不到数据,有数据来源的欢迎在评论区留言。 这里找到了一个,是2020年6月的编程语言排行,供大家看一下:...
  • 摘要::最近在朋友圈看到一个很酷炫的动态数据可视化表,介绍了新中国成立后各省GDP的发展历程,非常惊叹竟然还有这种操作,也想试试。于是,照葫芦画瓢虎,在网上爬取了历年中国大学学术排行榜,制作了一个中国...
  • 话不多说上代码 第一步导入模块 import requests import re ...对网站进行了一波分析,发现中关村并没有用动态数据加载这里就直接爬取好了 def get_articles_list(): title_list = [] price_list = []
  • 项目需求: 在学习echarts的过程,遇到B站以及抖音里很多动态数据排行榜的案例。一部分是基于可视化软件的,还有一部分是基于d3.js开发的。离自己想要的需求还是有一定的差距。解决办法无非是学习软件或是基于d3开发...
  • 大屏得展示数据如果采用真实数据分析计算,那就更加贴近小伙伴们的实际工作场景,可以很快在工作中应用,所以应小伙伴需求,就诞生了这篇数据可视化+爬虫+数据分析的【 Forbes全球富豪- 数据可视化大屏解决方案】...
  • 现国内外网站上开始流行一种可视化动态排序图,不仅赏心悦目,还非常吸引眼球。但是动态排序图的制作却较为复杂,让很多人对它望而却步。 不过最近小编发现一个数据可视化平台,只需套用数据,就能自动生成你想要...
  • 超燃排序动态可视化

    2022-05-19 11:52:50
    当我们需要浏览多年数据进行比较时,由于每年的数据都需要展示,静态的柱状图在这种情况下不仅比较呆板,而且需要展示所有的年份需要占用的页面区域也比较多,不利于浏览,而可视化动态排序图,不仅赏心悦目,而且...
  • 大数据可视化 实验二:福布斯全球富豪排行榜(分析前20名) 采用timeline组件会出现刷新数据问题 baseOption组件中,dataset组件配置多组source数据源。 造成options组件中的多组series显示数据出问题。(柱状图y/...
  • 这里先放一下这个动态表是什么样的: 不知道你看完是什么感觉,至少我是挺震惊的,想看看作者是怎么做出来的,于是追到了作者的B站主页,发现了更多有意思的动态视频: 这些作品的作者是:@Jannchie见齐,他的主页...

空空如也

空空如也

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

动态可视化排行榜