精华内容
下载资源
问答
  • 浅谈大数据时代web数据可视化探析

    千次阅读 2017-09-22 16:26:29
    数据可视化技术可借助人脑的视觉思维能力,帮助人们理解大量的数据信息,发现数据隐含的规律,从而提高数据的使用效率。面对大数据深奥的面貌,如何才能让大型数据集变得亲切和易于理解,可视化无疑是最有效的途径...


     

    数据可视化技术可借助人脑的视觉思维能力,帮助人们理解大量的数据信息,发现数据中隐含的规律,从而提高数据的使用效率。面对大数据深奥的面貌,如何才能让大型数据集变得亲切和易于理解,可视化无疑是最有效的途径。对大数据背景下的数据可视化应用展开研究,将有助于我们发展和创新数据可视化技术。

     

      大数据时代的机遇与挑战

      物联网、云计算、移动互联网、手机、平板电脑、PC以及遍布地球各个角落的各种各样的传感器,无一不是数据来源或者承载的方式。随着社交网络的普及,使得人们的行为和情绪的细节化测量成为可能。挖掘用户的行为习惯和喜好,凌乱纷繁的数据背后找到更符合用户兴趣和习惯的产品和服务,并对产品和服务进行针对性地调整和优化,这就是大数据的价值。大数据也日益显现出对各个行业的推进力。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。


     数据可视化技术及主要特点

      数据可视化(Data Visual)技术是指运用计算机图形学和图像处理技术,将数据转换为图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它能够提供多种同时进行数据分析的图形方法,反映信息模式、数据关联或趋势,帮助决策者直观地观察和分析数据,实现人与数据之间直接的信息传递,从而发现隐含在数据中的规律。数据可视化技术的基本思想是将数据库中每一个数据项作为单个图元元素来表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析。

    数据可视化技术的主要特点是:

      (1)交互性,用户可以方便地以交互的方式管理和开发数据;

      (2)多维性,可以看到表示对象或事件的数据的多个属性或变量,而数据可以按其每一堆的值,将其分类、排序、组合和显示;

      (3)可视性,数据可以用图像、曲线、二维图形、三维体和动画来显示,并可对其模式和相互关系进行可视化分析。

      基于Web的数据可视化的参考模型

      基于Web的数据可视化主要有以下四种参考模型

      (1)在服务器端生成描述数据的图形,然后在客户端实现图形的显示,客户端用浏览器来显示;

      (2)服务器端经过可视化映射后,输出VRMLVirtual Reality Modeling Language,简称VRML)成Java3D格式的3D模型,返回给客户,客户端利用支持VRMLJava3D的浏览器来绘制和操纵3D模型,这种方式的交互局限于绘制阶段;

      (3)客户下载数据,在客户端执行可视化流水线,利用JavaApplet实现可视化计算,客户还可以下载可视化软件。虽然客户端可以完全控制可视化过程,但对客户端的硬件、软件资源要求高,并且对大规模过程的控制;

      (4)服务器端以HTMLFormsJavaApplet方式提供可视化控制页面,浏览器客户下载控制页面,实现对可视化过程的控制。

      模型2和模型3需要针对具体的应用编制Java绘图程序,模型4采用了复杂的可视化计算在服务器端处理,避免了客户端较高的资源要求,同时客户端又能完成可视化结果的交互绘制,具有较好的交互性以及计算负荷分摊的优点,但同样编制程序复杂。而模型1使用Tee Chart Pro AetiveX控件,可以直接安装在服务器端,在服务器端动态生成图形文件(JPEG格式),然后将图形传回客户端,在浏览器中显示出来,方法可以适用于任何流行的客户端浏览器。

    大数据的Web数据可视化方法流程

    ① 发现问题

      数据可视化都是为了解决某个问题的。所以,面对海量的数据,首先要思考如何针对领域问题合理抽取对应的数据。为创建信息可视化而提出问题时,我们应该尽可能地关注以数据为中心的问题。那些以“在哪里”、“什么时间”“有多少”或者“有多频繁”开头的问题通常是不错的开始,这些问题使我们专注于在特定的参数集合内查找数据,因此更有可能找到适用于可视化的数据。而对于以“为什么”开头的问题则要格外小心,它意味着你对数据的较为正式的描述开始转入改写数据分析。

    ②收集数据

      数据的收集和整理则是数据可视化的重中之重。然而准确地找到所需要的数据是一个非常困难的任务。通常,最好从已经可用的数据着手并尽量找到一种方式来描绘它,而不是尝试自己去收集数据。得到原始数据之后.则要着手于数据的解析、组织、分组或者修改,对数据进行再加工。

    ③ 选择一种可视化方式展现数据

      在明确想要展现的内容后,就要综合运用视觉元素的造型,色彩的选取,动态等赋予图表更好的视觉体验。数据可视化的过程要始终围绕着数据可视化的核心目标:帮助读者更好更准确的理解数据。web常见的的可视化有:地图、时间轴、网络图、树状图、矩阵图、散点图、气泡图、流程图、折线图、标签云、数据表、雷达图、热力图、平行坐标轴等等。

     大数据的Web数据可视化展现方式

    ①尺寸:这是最常用的可视化展现方式。当辨别两个对象时,我们可以通过尺寸对比快速地区分它们。此外,使用尺寸可以加快理解两组不熟悉的数字之间的区别。如百度统计,这个应用指在通过对网站流量的专业分析,帮助用户不断从网站流量数据中挖掘有价值的信息,指导网站运营。如这个网页目录的访客数统计图,采用了气泡面积的可视化展现方式,通过气泡尺寸面积对比,直观的展现出各网页目录的访客数多少。

    ②色彩:色彩是展现大数据集的一种优秀方式,我们可以通过色彩识别出很多层次和色调。这一点使得色彩成为展现宏观趋势的必然选择。运用色彩进行可视化创作时要特别注意的是要确保读者能够区分出在45%55%的数据点。

    ③位置:基于位置的展现方式就是把数据和某些类型的地图关联起来,或者把它和一个真实或虚拟地方相关的可视化元素进行关联。

    ④网络:网络展现方式显示了数据点之间的二元连接,在查看这些数据点之间的关系时很有帮助,在线网络可视化在视交网站中已十分广泛的应用了,如QQ上有个应用,你可以通过人脉关系图查看自己的人际网络。

    ⑤时间:随时间变化的数据通常是根据时间轴进行描绘。众多的表现形式需要通过各种各样的手段来呈现,在计算机上主要通过程序算法来实现。设计师在选择表现形式的同时一定要考虑到受众是否能够很好的去接受和吸收信息,设计师需要了解视觉心理对用户浏览时的影响。随着互联网的发展,今后数据可视化还会发展出许多新的形式和特点来帮助人们理解数据、驾驭数据。

      总结

      数据可视化通过图像、图形技术对数据进行形象化处理,通过信息技术对数据进行准确、实时、自动化的高度透明的处理。在实际项目中,将大量的数据以图形人的方式在Web页面上展现出来,有助于分析数据,揭示数据内部规律。随着计算机图形学、多媒体技术、人机交互技术及各应用领域的需要,数据可视化将会有更加广阔的发展空间。

      来源:论文网 原文地址:http://www.xzbu.com/8/view-4852538.htm

    展开全文
  • Python使用Web API数据可视化

    千次阅读 2018-03-19 19:42:53
    由于这样编写的程序始终使用最新的数据来生成可视化,因此即便数据瞬息万变,它呈现的信息也都是最新的。 Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互。这种请求称为API调用。请求的...

        Web应用编程接口 (API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化。由于这样编写的程序始终使用最新的数据来生成可视化,因此即便数据瞬息万变,它呈现的信息也都是最新的。

        Web API是网站的一部分,用于与使用非常具体的URL请求特定信息的程序交互。这种请求称为API调用。请求的数据将以易于处理的格式(如JSON或CSV)返回。依赖于外部数据源的大多数应用程序都依赖于API调用,如集成社交媒体网站的应用序。

    处理API响应

    执行API调用并处理结果,找出GitHub上星级最高的Python项目:

    python_repos.py

    import requests
    
    #执行API调用并存储响应
    url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    
    r = requests.get(url)    #使用requests 来执行调用,将响应对象存储在变量r中
    print("Status code:",r.status_code)#响应对象包含一个名为status_code的属性,它让我们知道请求是否成功(状态码200表示请求成功)
    #将API响应存储在一个变量中
    response_dict = r.json()
    
    #处理结果
    print(response_dict.keys())

    处理响应字典

    将API调用返回的信息存储到字典中后,就可以处理这个字典中的数据了。下面生成一些概述这些信息的输出。可确认收到了期望的信息,进而可以开始研究感兴趣的信息:

    import requests
    
    #执行API调用并存储响应
    url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    
    r = requests.get(url)
    print("Status code:",r.status_code)
    #将API响应存储在一个变量中
    response_dict = r.json()
    print("Total repositories:",response_dict['total_count'])#指出GitHub包含多少个Python仓库
    #探索有关仓库的信息
    repo_dicts=response_dict['items']#response_dict字典存储在列表中,列表里每个字典都包含有关一个Python仓库的信息
    print("Repositories returned:",len(repo_dicts))
    #研究第一个仓库
    repo_dict = repo_dicts[0]
    print("\nKeys:",len(repo_dict))
    for key in sorted(repo_dict.keys()):
    	print(key)

    GitHub的API返回有关每个仓库的大量信息:repo_dict 包含68个键(见❶)。通过仔细查看这些键,可大致知道可提取有关项目的哪些信息(要准确地获悉API将返回哪些信息,要么阅读文档,要么像此处这样使用代码来查看这些信息)。

      Status code: 200
      Total repositories: 713062
      Repositories returned: 30
    
    ❶ Keys: 68
      archive_url
      assignees_url
      blobs_url
      --snip--
      url
      watchers
      watchers_count

    概述最受欢迎的仓库

    对这些数据进行可视化时,我们需要涵盖多个仓库。下面就来编写一个循环,打印API调用返回的每个仓库的特定信息,以便能够在可视化中包含所有这些信息:

    --snip--
    #研究第一个仓库
    repo_dict = repo_dicts[0]
    print("\nKeys:",len(repo_dict))
    for key in sorted(repo_dict.keys()):
    	print(key)
    
    print("\nSelected information about first repository:")
    for repo_dict in repo_dicts:
    	print('\nName:', repo_dict['name'])
    	print('Owner:', repo_dict['owner']['login'])
    	print('Stars:', repo_dict['stargazers_count'])
    	print('Repository:', repo_dict['html_url'])
    	print('Description:', repo_dict['description'])

    监视API的速率限制

    大多数API都存在速率限制,即你在特定时间内可执行的请求数存在限制。要获悉你是否接近了GitHub的限制,请在浏览器中输入https://api.github.com/rate_limit ,你将看到类似于下面的响应:

    {
      "resources": {
        "core": {
          "limit": 60,
          "remaining": 60,
          "reset": 1521446243
        },
        "search": {#搜索API的速率限制
          "limit": 10,#极限为每分钟10个请求
          "remaining": 10,#在当前这一分钟内,我们还可执行10个请求
          "reset": 1521442703#配额将重置的Unix时间或新纪元时间(1970年1月1日午夜后多少秒)
        },
        "graphql": {
          "limit": 0,
          "remaining": 0,
          "reset": 1521446243
        }
      },
      "rate": {
        "limit": 60,
        "remaining": 60,
        "reset": 1521446243
      }
    }

    使用Pygal可视化仓库

    有了一些有趣的数据后,我们来进行可视化,呈现GitHub上Python项目的受欢迎程度。我们将创建一个交互式条形图:条形的高度表示项目获得了多少颗星。单击条形将带你进入项目在GitHub上的主页。下面是首次尝试这样做:

    import requests
    import pygal
    from pygal.style import LightColorizedStyle as LCS,LightenStyle as LS
    #执行API调用并存储响应
    url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    
    r = requests.get(url)
    print("Status code:",r.status_code)
    #将API响应存储在一个变量中
    response_dict = r.json()
    print("Total repositories:",response_dict['total_count'])#指出GitHub包含多少个Python仓库
    #探索有关仓库的信息
    repo_dicts=response_dict['items']#response_dict字典存储在列表中,列表里每个字典都包含有关一个Python仓库的信息
    names,stars = [],[]
    for repo_dict in repo_dicts:
    	names.append(repo_dict['name'])
    	stars.append(repo_dict['stargazers_count'])
    
    #可视化
    my_style = LS('#333366',base_style=LCS)
    chart = pygal.Bar(style=my_style,x_label_rotation=45,show_legend=False)#创建条形图,让标签绕x轴旋转45度(x_label_rotation=45 ),隐藏图例(show_legend=False )
    chart.title = 'Most-Starred Python Projects on GitHub'#指定标题
    chart.x_labels=names#横坐标标签
    chart.add('',stars)#添加数据,标签设置成空字符串
    chart.render_to_file('python_repos.svg')

    改进Pygal图表

    进行多个方面的定制,因此先来稍微调整代码的结构,创建一个配置对象,在其中包含要传递给Bar() 的所有定制:

    --snip--
    #可视化
    my_style = LS('#333366',base_style=LCS)
    my_config = pygal.Config()#创建Pygal类Config实例,通过修改my_config定制图表外观
    my_config.x_label_rotation = 45#让标签绕x轴旋转45度(x_label_rotation=45 )
    my_config.show_legend = False#隐藏图例(show_legend=False )
    my_config.title_font_size = 24#图表标题
    my_config.lable_font_size =14#副标签(X轴项目名及Y轴大部分数字)
    my_config.major_label_font_size = 18#主标签(Y轴5000整数倍的刻度)
    my_config.truncate_label =15#将较长的项目名缩短为15个字符
    my_config.show_y_guides = False#隐藏图表中的水平线
    my_config.width = 1000#自定义宽度
    
    chart = pygal.Bar(my_config,style=my_style)#通过my_config传递所有配置设置
    chart.title = 'Most-Starred Python Projects on GitHub'
    chart.x_labels=names
    chart.add('',stars)
    chart.render_to_file('python_repos.svg')

    添加自定义工具提示

    在Pygal中,将鼠标指向条形将显示它表示的信息,这通常称为工具提示 。在这个示例中,当前显示的是项目获得了多少个星。下面来创建一个自定义工具提示,以同时显示项目的描述。来看一个简单的示例,它可视化前三个项目,并给每个项目对应的条形都指定自定义标签。为此,我们向add() 传递一个字典列表,而不是值列表:

    bar_descriptions.py

    import pygal
    from pygal.style import LightColorizedStyle as LCS,LightenStyle as LS
    
    my_style = LS('#333366',base_style = LCS)
    chart = pygal.Bar(style=my_style,x_label_rotation =45,show_legend=False)
    
    chart.title ='Python Projects'
    chart.x_labels = ['httpie','django','flask']
    plot_dicts = [
    	{'value': 16101, 'label': 'Description of httpie.'},
    	{'value': 15028, 'label': 'Description of django.'},
    	{'value': 14798, 'label': 'Description of flask.'},
    	]
    
    chart.add('', plot_dicts)
    chart.render_to_file('bar_descriptions.svg')
    

            定义了一个名为plot_dicts的列表,其中包含三个字典,分别针对项目HTTPie、Django和Flask。每个字典都包含两个键:'value' 和'label' 。Pygal根据与键'value' 相关联的数字来确定条形的高度,并使用与'label' 相关联的字符串给条形创建工具提示。第一个字典将创建一个条形,用于表示一个获得了16 101颗星、工具提示为Description of httpie的项目。方法add() 接受一个字符串和一个列表。这里调用add() 时,我们传入了一个由表示条形的字典组成的列表(plot_dicts )。结果显示了一个工具提示:除默认工具提示(获得的星数)外,Pygal还显示了我们传入的自定义提示。


    --snip--
    #探索有关仓库的信息
    repo_dicts=response_dict['items']#response_dict字典存储在列表中,列表里每个字典都包含有关一个Python仓库的信息
    
    names,plot_dicts = [],[]
    for repo_dict in repo_dicts:
    	names.append(repo_dict['name'])
    	plot_dict ={
    		'value':repo_dict['stargazers_count'],
    		'label':str(repo_dict['description']),
    		}
    	plot_dicts.append(plot_dict)
    
    #可视化
    my_style = LS('#333366',base_style=LCS)
    --snip--
    
    chart.add('',plot_dicts)
    chart.render_to_file('python_repos.svg')

    在图表中添加可单击的链接

    --snip--
            plot_dict ={
    		'value':repo_dict['stargazers_count'],
    		'label':str(repo_dict['description']),
    		'xlink':repo_dict['html_url'],
    		}
    --snip--

    Pygal根据与键'xlink' 相关联的URL将每个条形都转换为活跃的链接。单击图表中的任何条形时,都将在浏览器中打开一个新的标签页,并在其中显示相应项目的GitHub页面。至此,你对API获取的数据进行了可视化,它是交互性的,包含丰富的信息!

    Hacker News API
    在Hacker News网站,用户分享编程和技术方面的文章,并就这些文章展开积极的讨论。Hacker News的API让你能够访问有关该网站所有文章和评论的信息,且不要求你通过注册获得密钥。执行一个API调用,返回Hacker News上当前热门文章的ID,再查看每篇排名靠前的文章:
    import requests
    from operator import itemgetter
    import pygal
    from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS
    
    
    #执行API调用并存储响应
    url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
    r = requests.get(url)
    #打印请求状态(200表示成功)
    print("Status code:",r.status_code)
    
    #处理有关每篇文章的信息
    #将包含ID信息的响应文本转换为列表
    submission_ids = r.json()
    #创建空列表存储文章信息(字典)
    submission_dicts = []
    
    #通过ID遍历前30篇文章,并执行API调用
    for submission_id in submission_ids[:3]:
    	#对于每篇文章都执行一个API调用
    	url = ('https://hacker-news.firebaseio.com/v0/item/' +
    		str(submission_id) + '.json')
    	submission_r = requests.get(url)
    	print(submission_r.status_code)
    	response_dict = submission_r.json()
    
    	submission_dict = {
    		'title': response_dict['title'],#标题
    		'link': 'http://news.ycombinator.com/item?id=' + 
    			str(submission_id),#讨论页面链接
    		#不确定某个键是否包含在字典中时,使用方法dict.get()
    		#它在指定的键存在时返回与之相关联的值
    		#并在指定的键不存在时返回你指定的值(这里是0)
    		'comments': response_dict.get('descendants', 0)#评论数
    		}
    	submission_dicts.append(submission_dict)
    #根据comments降序排列
    submission_dicts = sorted(submission_dicts, key = itemgetter('comments'), 
    	reverse = True)
    for submission_dict in submission_dicts:
    	print("\nTitle:",submission_dict['title'])
    	print("Discussion link:",submission_dict['link'])
    	print("Comments:",submission_dict['comments'])
    
    titles,plot_dicts = [],[]
    for submission_dict in submission_dicts:
    	titles.append(submission_dict['title'])
    	plot_dicts = {
    		'value':submission_dict['comments'],
    		'label':submission_dict['title'],
    		'xlink':submission_dict['link'],
    		}
    	plot_dicts.append(plot_dict)
    
    my_style = LS('#333366',base_style = LCS)
    my_style.title_font_size = 24
    my_style.label_font_size = 14
    my_style.major_lable_font_size = 18
    
    my_config = pygal.Config()
    my_config.x_label_rotation = 45
    my_config.show_lenged = False
    my_config.truncate_label = 15 #将较长的项目名缩短为15个字符
    my_config.show_y_guides = False #隐藏图表中的水平线
    my_config.width = 1000
    my_config.y_title = 'Number of Comments'
    
    chart = pygal.Bar(my_config, style = my_style)
    chart.title = 'Most Active Discussions on Hacker News'
    chart.x_labels = titles
    chart.add('',plot_dicts)
    chart.render_to_file('hn_discussions.svg')
    

    展开全文
  • 实现微信小程序加载FengMap地图,主要通过小程序<web-view>组件的src属性的外链方式加载,如<web-view src=”https://fengmap.com/wx/”></web-view>;因为FengMap地图底层渲染技术为WEBGL,小...

    蜂鸟视图:FengMap 室内地图对接微信小程序的开发说明

     

    • 描述

    实现微信小程序加载FengMap地图,主要通过小程序<web-view>组件的src属性的外链方式加载,如<web-view src=”https://fengmap.com/wx/”></web-view>;因为FengMap地图底层渲染技术为WEBGL,小程序本身不支持,只能使用外链的方式加载。

    • 流程
      1. 注册微信小程序账号网址(https://mp.weixin.qq.com/),选择账号类型必须是企业类型账户
      2. 需要一台https服务器;
      3. 在开发账号设置添加业务域名为当前https服务器地址的域名,并按要求上传.txt文本(添加域名有下载txt文本链接)及其相应的程序到该服务器中;
      4. 使用带有开发者权限的账号登陆微信开发工具,添加一个新页面,使用<web-view>组件链接到https服务器的程序地址,即可预览;
    • 备注

    微信小程序注册

    https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN

    微信开发API组件

    https://mp.weixin.qq.com/debug/wxadoc/dev/component/

    微信开发工具下载

    https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html

     

    微信小程序框架

     

    展开全文
  • 数据可视化概览

    万次阅读 多人点赞 2017-12-07 12:08:07
    科学可视化(Scientific Visualization)、 信息可视化(Information Visualization)和可视分析学(Visual Analytics)三个...而将这三个分支整合在一起形成的新学科 “数据可视化”,这是可视化研究领域的新起点。

    什么是数据可视化

    科学可视化(Scientific Visualization)、 信息可视化(Information Visualization)和可视分析学(Visual Analytics)三个学科方向通常被看成可视化的三个主要分支。而将这三个分支整合在一起形成的新学科 “数据可视化”,这是可视化研究领域的新起点。
    ——《数据可视化》

    广义的数据可视化涉及信息技术、自然科学、统计分析、图形学、交互、地理信息等多种学科。
    这里写图片描述

    科学可视化

    科学可视化(Scientific Visualization)是科学之中的一个跨学科研究与应用领域,主要关注三维现象的可视化,如建筑学、气象学、医学或生物学方面的各种系统,重点在于对体、面以及光源等等的逼真渲染。科学可视化是计算机图形学的一个子集,是计算机科学的一个分支。 科学可视化的目的是以图形方式说明科学数据,使科学家能够从数据中了解、说明和收集规律。
    这里写图片描述

    信息可视化

    信息可视化(Information Visualization)是研究抽象数据的交互式视觉表示以加强人类认知。 抽象数据包括数字和非数字数据,如地理信息与文本。信息可视化与科学可视化有所不同:科学可视化处理的数据具有天然几何结构(如磁感线、流体分布等),信息可视化处理的数据具有抽象数据结构。柱状图、趋势图、流程图、树状图等,都属于信息可视化,这些图形的设计都将抽象的概念转化成为可视化信息。
    这里写图片描述

    可视化分析

    可视分析学(Visual Analytics)是随着科学可视化和信息可视化发展而形成的新领域,重点是通过交互式视觉界面进行分析推理。
    这里写图片描述

    科学可视化、信息可视化与可视分析学三者有一些重叠的目标和技术,这些领域之间的边界尚未有明确共识,初略来说有以下区分:

    • 科学可视化处理具有自然几何结构(磁场、MRI 数据、洋流)的数据。
    • 信息可视化处理抽象数据结构,如树或图形。
    • 可视分析学将交互式视觉表示与基础分析过程(统计过程、数据挖掘技术)结合,能有效执行高级别、复杂的活动(推理、决策)。

    为什么需要数据可视化

    人类利用视觉获取的信息量,远远超出其他器官

    人类的眼睛是一对高带宽巨量视觉信号输入的并行处理器,拥有超强模式识别能力,配合超过 50% 功能用于视觉感知相关处理的大脑,使得人类通过视觉获取数据比任何其他形式的获取方式更好,大量视觉信息在潜意识阶段就被处理完成,人类对图像的处理速度比文本快 6 万倍。
    数据可视化正是利用人类天生技能来增强数据处理和组织效率。

    可视化可以帮助我们处理更加复杂的信息并增强记忆

    大多数人对统计数据了解甚少,基本统计方法(平均值、中位数、范围等)并不符合人类的认知天性。 最著名的一个例子是 Anscombe 的四重奏,根据统计方法看数据很难看出规律,但一可视化出来,规律就非常清楚。
    这里写图片描述
    可视化还可以有效增强人的记忆力,我们经常说的一图胜千言就是可视化对生活的影响。

    如何实现数据可视化

    可视化实现流程

    在技术上,数据可视化最简单的理解,就是数据空间到图形空间的映射。
    这里写图片描述

    一个经典的可视化实现流程,是先对数据进行加工过滤,转变成视觉可表达的形式(Visual Form),然后再渲染成用户可见的视图(View)。
    这里写图片描述

    可视化技术栈

    具备专业素养的数据可视化工程师一般来说需要掌握以下技术栈:

    • 基础数学:三角函数、线性代数、几何算法
    • 图形相关:canvas、svg、webgl、计算图形学、图论
    • 工程算法:基础算法、统计算法、常用的布局算法
    • 数据分析:数据清洗、统计学、数据建模
    • 设计美学:设计原则、美学评判、颜色、交互、认知
    • 可视化基础:可视化编码、可视分析、图形交互
    • 可视化解决方案:图表的正确使用、常见的业务的可视化场景

    常用的数据可视化工具

    在学术界与工程界,数据可视化工具都非常之多,学术界用得比较多的是 R 语言, ggplot2, Python 可视化库等,普通用户喜闻乐见的是 Excel,商业上的产品是 Tableau, DOMO, PowerBI 等等,是个精彩纷呈的世界。
    这里有常用的 25 个数据可视化工具对比,没有完美的可视化工具,每个工具都有各自的优缺点。下面是一张工具选择推荐图,根据目的分类,左上是简单快捷,左下是故事导向,右上是为了分享分析,右侧是创新型图表,右下是分析型工具。
    这里写图片描述

    我们常常听说的数据可视化

    数据可视化(Data Visualization)和 信息可视化(Information Visualization)是两个相近的专业领域名词。狭义上的数据可视化指的是将数据用统计图表方式呈现,而信息可视化则是将非数字的信息进行可视化。前者用于传递信息,后者用于表现抽象或复杂的概念、技术和信息。而广义上的数据可视化则是数据可视化、信息可视化以及科学可视化等等多个领域的统称。
    ——《数据可视化之美》

    我们常常听说的数据可视化大多指狭义的数据可视化以及部分信息可视化。根据数据类型和性质的差异,经常分为以下几种类型:

    统计数据可视化:用于对统计数据进行展示、分析。统计数据一般都是以数据库表的形式提供,常见的统计可视化类库有 HighCharts、ECharts、G2、Chart.js 等等,都是用于展示、分析统计数据。

    关系数据可视化:主要表现为节点和边的关系,比如流程图、网络图、UML 图、力导图等。常见的关系可视化类库有 mxGraph、JointJS、GoJS、G6 等。

    地理空间数据可视化:地理空间通常特指真实的人类生活空间,地理空间数据描述了一个对象在空间中的位置。在移动互联网时代,移动设备和传感器的广泛使用使得每时每刻都产生着海量的地理空间数据。常见类库如 Leaflet、Turf、Polymaps 等等,最近 Uber 开源的 deck.gl 也属于此类。

    还有时间序列数据可视化(如 timeline)、文本数据可视化(如 worldcloud)等等。

    基于Web的可视化技术

    在讲各种流行类库框架前,我们先了解下 Web 图形的底层技术规范。

    底层技术规范

    • SVG:可缩放矢量图形(Scalable Vector Graphics),是基于可扩展标记语言(标准通用标记语言的子集)用于描述二维矢量图形的一种图形格式。
    • Canvas 2D:Canvas 通过 JavaScript 来绘制 2D 图形,通过逐像素来进行渲染。
    • Canvas 3D WebGL:WebGL(Web Graphic Library)是一个 JavaScript API,用于在任何兼容的 Web 浏览器中渲染 3D 图形。WebGL 程序由用 JavaScript 编写的控制代码和用 OpenGL 着色语言(GLSL)编写的着色器代码构成,这种语言类似于 C 或 C++,可在 GPU 上执行。

    比较流行的基础绘图库,基于 SVG 的有 snap.svg、rapheal.js 等,基于 Canvas 2D 的有 zrender、g 等,基于 WebGL 的有 three.js、SceneJS、PhiloGL 等,这些基础绘图库可以让上层封装更简单容易。

    我们重点回到基于 Web 技术的数据可视化类库。

    D3

    D3.js 是一个基于数据操作文档的 JavaScript 库。 D3 可以将强大的可视化组件和数据驱动的 DOM 操作方法完美结合。

    D3的优劣:

    • 强大的 SVG 操作能力,可以非常容易的将数据映射为 SVG 属性
    • 集成了大量数据处理、布局算法和计算图形的工具方法
    • 强大的社区和丰富的 demo
    • API 太底层,复用性低,学习与使用成本高

    D3 没有提供封装好的组件,在复用性、易用性方面不佳,社区里有很多基于 D3 的可视化组件库:

    • nvd3.js: 基于 D3 封装了常见的折线图、散点图、饼图,功能比较简单
    • dc.js: 除了提供了常见的图表外还提供了一些数据处理能力
    • c3.js: 一个轻量级的基于状态管理的图表库

    D3 有着 Stanford 的血脉渊源,在学术界享有很高声誉,灵活强大使得它成为目前领域内使用最广泛的可视化类库,但偏底层的 API 和数据驱动模式,使得上手 D3 存在一定门槛,基于 D3 的工程实现上需要自己考虑和处理更多内容,如动画、交互、统一样式等,研发成本较高。

    HighCharts

    HighCharts 是一个用纯 JavaScript 编写的图表库, 能够简单便捷的在 Web 应用上添加交互性图表。这是在 Web 上使用最广泛的图表,企业使用需要购买商业授权。

    HighCharts的优劣:

    • 使用门槛极低,兼容性好
    • 使用广泛,非常成熟
    • 样式比较陈旧、图表难以扩展
    • 商业上使用需要购买版权

    这是图表界的 jQuery,在世界范围内是使用最多最广的一个可视化类库,但整体图表设计比较陈旧难以扩展,同时商业公司使用需要按照使用人数购买版权,比较昂贵,阿里有购买过,目前已不推荐使用。

    ECharts

    ECharts 缩写自 Enterprise Charts,企业级图表,开源来自百度数据可视化团队,是一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器,底层依赖另一个也是该团队自主研发的轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。ECharts 是目前国内唯一一个入选 GitHub 全球可视化榜单的开源项目,2w+ star 全球排名第三,社区活跃,覆盖主流前端框架和 8 种编程语言的扩展,目前国内市场占有率处于绝对领先地位。

    ECharts的优劣:

    • 丰富的图表类型,覆盖主流常规的统计图表
    • 配置项驱动,三级个性化图表样式管理
    • 移动端优化,交互和布局适配,按需打包
    • 深度的交互式数据探索
    • 地理特效(百度迁徙,百度人气,公交轨迹等效果)
    • 灵活性上不如 Vega 等基于图形语法的类库
    • 复杂关系型图表比较难定制

    ECharts 能很好满足传统图表需求,但在高度灵活多样化的可视需求面前,需要另寻出路。

    Leaflet

    Leaflet 是面向移动设备的交互式地图的 JavaScript 库。 测量的 JS 只有大约 38 KB,它具有大多数开发人员需要的所有映射功能。

    Leaflet的优劣:

    • 专门针对地图应用
    • mobile 兼容性良好
    • API 简洁、支持插件机制
    • 功能比较简单,需要具备二次开发能力

    地图专用,其他领域使用不上。目前 Google 地图、高德地图、百度地图都拥有自研的 JS 库。

    deck.gl

    deck.gl 是 Uber 可视化团队基于 WebGL 开发的面向大数据分析的可视化类库。

    deck.gl的优劣:

    • 主要以 3D 地图可视化为主,内置了地理信息可视化常见的场景
    • 支持大规模数据的可视化
    • 需要具备 WebGL 的知识,层的扩展比较复杂

    deck.gl 在 3D 地图领域效果很赞,在其他领域不适用。

    AntV

    大阿里(阿里巴巴、蚂蚁金服、菜鸟物流等集团统称)有各种数据可视化产品和业务,如 QuickBI,信鸽地图,阿里云的 DataV 更是可视化大屏方面的人气产品在领域内有着很高的赞誉。

    而另一方,在数量更多的普通用户产品,中后台应用系统中也存在大量的数据可视化需求,在这些业务中沉淀出了很多优秀的可视化类库与工具,如国际 UED 的 BizCharts、淘宝基础平台的 IceChart、集团数据技术和产品部的 Recharts 等等。在这大量的业务应用和类库背后有一个共同的名字,AntV。

    AntV 是蚂蚁金服全新一代数据可视化解决方案,主要面向从事数据可视化应用相关的工程师和设计师,目前包括:

    • 底层绘图引擎 G:目前基于 canvas 2d 提供基础绘图能力,基于 webgl 的版本正在规划中;
    • 可视化语法类库 G2:一套数据驱动的高交互可视化图形语法,提供了丰富的图表、专业的数据处理能力、便利的扩展方式和强大交互能力;
    • 关系可视化类库 G6:专注解决流程与关系分析的图表库,集成了大量的交互,可以轻松的进行动态流程图和关系网络的开发;
    • 移动端图表类库 F2:是一套精简、高效易扩展的移动端图表库,适于对性能、体积、扩展性要求严苛的移动应用场景下使用;
    • 可视化设计指引与使用规范:统计图表以及常用场景下的可视化设计指引和使用规范;

    AntV 的整体产品层次图如下:
    这里写图片描述

    基于 Web 的可视化工具还有很多,上面是几个一直以来使用比较多的类库工具,以及最近涌现的一些新秀。各个类库工具特性不同,定位不同,关键要看应用场景的适用性。

    写在最后

    最后补充一个小点,数据可视化一点也不神秘。在人类历史发展的过程中,有很多的现实的数据可视化就在栩栩如生的生活里。
    数据可视化是个庞大的领域,涉及的学科非常多。但正是因为这种跨学科性,让可视化领域充满活力与机遇。

    原文链接

    展开全文
  • 案例上手 Python 数据可视化

    万次阅读 多人点赞 2019-02-27 23:30:05
    6 个常用的数据可视化工具使用方法 20 个案例贯穿各个工具的学习过程 基于 GUI / HTML / Web 网站多种绘图风格 、美、日三国不同思想的制图工具 从静态到交互,满足不同需要的图示 课程背景 数据可视化是数据...
  • 数据可视化 (1)可视化 (1)可视化的含义 定义 可视化是一种使复杂信息能够容易和快速被人理解的手段,是一种聚焦在信息重要特征的信息压缩,是可以放大人类感知的图形化表示方法。 可视化为人类大脑与...
  • 数据可视化的意义是帮助人更好的分析数据,信息的质量很大程度上依赖于其表达方式。...另一方面,数据可视化增加数据的灵性,两者相辅相成,帮助企业从信息提取知识、从知识收获价值。 数据可视化
  • Python数据可视化教程:基于Plotly的动态可视化绘图

    万次阅读 多人点赞 2019-06-13 15:27:44
    1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化...Matplotlib存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化中的发展。为了解决这个问题,新型的动态可视化开源模块Plotly应运而生...
  • 数据可视化是什么? 数据图形可视化,就是用富有色彩、图形的形式来表现数据,让人一眼望去就能概览数据,让数据更直观,让审查数据的工作更人性化。 为什么要用视觉图形来表现数据? 因为数据是无形的,而目前...
  • 数据可视化

    千次阅读 2015-12-11 10:30:33
    前言:数据可视化是怎样创造出来的 我多次被炫目的数据可视化或信息可视化震惊,在我知道这些图片背后的数据来源和创造历程后,更是为之诧异不止。它涉足制图学、图形绘制设计、计算机 视觉、数据采集、统计学、...
  • 网络总是难以进行可视化和导航,而且最大的问题是很难找到与任务相关的模式。 分析师的角度 网络分析师注重研究不同因素之间的关系而非具体因素; 这些因素可以解释社会、文化和经济现象,但它们之间如何联系和...
  • 数据可视化工具

    千次阅读 2014-09-13 14:33:32
    推荐30款最佳的数据可视化工具 发表于2014-04-02 13:28| 9414次阅读| 来源CSDN| 22 条评论| 作者张红月 开源可视化工具iChartsFusionCharts XTModest MapsRaw 摘要:大量繁杂的数据在经过可视化...
  • 基于Dash制作的疫情数据可视化APP 1.Dash介绍 2.Dash实战:疫情数据可视化
  • Python数据可视化库 在数据分析最好展示数据的方式就是形象地绘制对应的图像,让人能够更好地理解数据。什么样的数据、什么样的场景用什么样的图表都是有一定的规定的。(这个以后写一篇博客来记录一下。当然我...
  • Python开发系列课程(19) - 数据可视化

    千次阅读 2018-05-01 00:16:34
    数据可视化 数据的处理、分析和可视化已经成为Python近年来最为重要的应用领域之一,其中数据的可视化指的是将数据呈现为漂亮的统计图表,然后进一步发现数据包含的规律以及隐藏的信息。数据可视化又跟数据挖掘和...
  • python 爬虫与数据可视化

    千次阅读 2020-07-08 11:37:12
    python 爬虫与数据可视化 1.引言 Web已经成为日新月异迅速发展的网络信息技术的信息载体,如何有效地提取和利用搜索引擎获得互联网最有用的、可以免费公开访问的数据集,查找用户所需的价值数据或者相近的价值...
  • 第一章 可视化数据挖掘概述   可视化数据挖掘技术对于大多数人来说是一个陌生的事物,让读者在较短的时间内快速熟悉它就是本书第1章的任务。本书会从基础知识讲起,由浅至深,逐步介绍可视化数据挖掘的知识。 ...
  • CALIPSO数据下载方法可视化

    万次阅读 多人点赞 2017-11-02 09:33:08
    引言 CALIPSO (Cloud–Aerosol Lidar and Infrared Path nder Satellite Observation) 是NASA和CNES 太阳轨道地球侦察卫星。CALIPSO搭载3个天顶视场的仪器(CALIOP, IIR, WFC),用于观测气溶胶和...卫星数据分发
  • 疫情数据分析与可视化

    千次阅读 多人点赞 2021-01-07 14:24:56
    疫情数据分析与可视化python实现数据分析与可视化前言一、什么是Python爬虫?二、Python爬虫相关知识1.相关书籍资料推荐(建议谷歌打开)2.数据获取3.知识点三、数据分析与可视化1.安装2.CSV表格操作3.可视化总结 ...
  • 数据采集是整个数据可视化大屏界面电子看板系统核心功能,没有数据源,这仅仅是个玩具UI,没啥用,当然默认做了定时器模拟数据,产生随机数据,这个可以直接配置文件修改来选择采用何种数据采集方法,总结了一下基本...
  • 数据可视化与大数据分析

    千次阅读 2018-11-30 10:31:36
    商业智能通常被理解为将企业现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具...但试图基于数据可视化来讲述故事的时候,你必须小心,特别是当你长时间沉浸在分析工作受到熟悉内容蒙蔽的时候。要确...
  • python如何爬取网站数据并进行数据可视化

    万次阅读 多人点赞 2020-03-12 21:59:47
    这篇文章主要介绍了python爬取拉勾网数据并进行数据可视化,爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示...
  • 文章目录【1x00】前言【2x00】思维导图【3x00】数据结构分析【4x00】主函数 main()【5x00】数据获取模块 data_get【5x01】初始函数 init()【5x02】中国总数据 china_total_data()【5x03】全球总数据 global_total_...
  • python数据分析(数据可视化

    万次阅读 多人点赞 2017-11-28 10:12:13
    数据可视化旨在直观展示信息的分析结果和构思,令某些抽象数据具象化,这些抽象数据包括数据测量单位的性质或数量。本章用的程序库matplotlib是建立在Numpy之上的一个Python图库,它提供了一个面向对象的API和一个...
  • Python 初级入狱5(数据可视化

    千次阅读 多人点赞 2020-12-13 15:55:27
    数据可视化内容介绍:Flask入门,Echarts应用,WordCloud应用一、关于Flask框架二、通过实例学习Flask框架三、动态渲染HTML网页 一、关于Flask框架 1.1 了解框架 FIask作为Web框架,它的作用主要是为了开发Web应用...
  • 基于阿里开源项目 dataX 和 datax-web 实现可视化数据同步。 基础软件安装 MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库 JDK (1.8.0_xxx) 必选 Maven ...
  • esp32学习 mqtt传输图片及数据可视化

    千次阅读 2020-04-25 19:28:12
    mqtt传输图片并在网页上显示前言开源mqtt.js库base64 编码模拟发送web可视化 前言 由于最近在做水果识别系统,打算将识别出的结果传输到微信小程序,由于微信小程序限制太多,先在网页上进行实验 开源mqtt.js库 mqtt...
  • 数据可视化分析平台

    千次阅读 2020-08-27 17:18:10
    DataGear是一款数据可视化分析平台,使用Java语言开发,采用浏览器/服务器架构,支持多种数据库, 主要功能包括数据管理、SQL工作台、数据导入/导出、数据集管理、图表管理、看板管理等。 DataGear 1.11.1 已发布,...
  • 大屏数据可视化总结

    千次阅读 2018-05-15 17:55:47
    设计图尺寸计算方法 单块屏幕分辨率(一般为1920x1080),根据横排和竖排数目换算比例,根据主流显示器分辨率1920x1080,得到一个缩放值。将得到的缩放值赋予文档的body的scale属性,这样就可以在可视区域最大范围内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,179
精华内容 36,071
关键字:

web程序中数据可视化的方法