数据可视化--实验五:高维非空间数据可视化

数据可视化主流研究方向(infoVis收录方向) 1.       graphs and trees and other relational or structureddata 2.       high-dimensional data and dimensionality reduction 3.       multi-variate data and heterogeneous dat 阅读详情

声明:本文优快云作者原创投稿文章,未经许可禁止任何形式的转载,原文链接

概要

  • 学院:计算机科学与技术学院
  • 实验日期:2020-10-15
  • 实验目的: 掌握高维非空间数据可视化
  • 实验内容:
    • 在某次大型会议中,为确保会议过程安全,会场使用了电子胸牌对场内人员的移动轨迹进行了监控。现经过处理,得到了某一天内人员在场内各个区域逗留的时间统计数据(time_allocate_day1.csv)。请根据这份数据,完成以下任务:
      • 1、设计可视化方案,要求通过该方案可以实现对人员的分类(分类结果已给出,仅绘制出图像即可)
      • 2、请根据上述图像,分析会场中room1~6的功能。
  • 注:表格文件在我的资源中免费下载。名为“数据可视化实验–表格附件”。链接
  • 因为即使我设置了不要积分,优快云还是不让免费下载,可以请直接到GitHub下载:GitHub链接

实验过程

本次实验选择编程类工具Pyecharts。

Pyecharts

​ 在Pycharm中新建python项目,并引入pyecharts,openpyxl,datetime等必要包。

创建main.py,写入以下内容。

#!/usr/bin/env python
# coding:utf-8
"""
Name    : main.py
Author  : F
Time    : 2020/10/15 20:09
Desc    : 数据可视化实验五
"""
import openpyxl
from pyecharts.charts import HeatMap, Parallel
import pyecharts.globals as globals
from pyecharts import options as opts
from pyecharts.charts import Pie

globals._WarningControl.ShowWarning = False  # 关闭pyecharts给出的警告


def getClassifyData():
    filename = "classifyday1.xlsx"
    ws = openpyxl.load_workbook(filename)['classifyday1']
    classifyData = []
    for i in range(2, ws.max_row + 1):
        row = str(i)
        classifyData.append([ws['A' + row].value, ws['B' + row].value])
    return classifyData


# 从表格读取数据
def getRoomData():
    filename = "time_allocate_day1.xlsx"
    ws = openpyxl.load_workbook(filename)['time_allocate_day1']
    roomData, roomName = [], []
    for room in range(24):
        roomName.append(
            opts.ParallelAxisOpts(dim=room, name=ws[chr(room + 65) + '1'].value, min_='dataMin', max_='dataMax'))
    for i in range(2, ws.max_row + 1):
        row, person = str(i), []
        for room in range(24):
            person.append(ws[chr(room + 65) + row].value)
        roomData.append(person)
    return roomData, roomName


# 不同人员平行坐标系图
def drawRoomDataParallel():
    roomData, roomName = getRoomData()
    c = (
        Parallel(init_opts=opts.InitOpts(width="2000px", height="1000px")).add_schema(
            roomName).add(series_name="人员分类图",
                          data=roomData,
                          linestyle_opts=opts.LineStyleOpts(color={'type': 'linear', 'x': 0,
                                                                   'y': 0,
                                                                   'x2': 0,
                                                                   'y2': 1,
                                                                   'colorStops': [{
                                                                       'offset': 0, 'color': 'red'
                                                                   }, {
                                                                       'offset': 1,
                                                                       'color': 'blue'
                                                                   }],
                                                                   'global': False
                                                                   }, opacity=0.5)
                          ).set_global_opts(title_opts=opts.TitleOpts(title="数据可视化实验五"))
    )
    c.render("不同人员平行坐标系图.html")


def genHeatBaseData():
    x, y = [], []
    for i in range(100):
        fmt = str("{:0>2d}".format(i))
        x.append(fmt)
        y.append('1' + fmt)
    return x, y


def classifyHeatMap(xAxisData: list, yAxisData: list, data: list):
    HeatMap(init_opts=opts.InitOpts(width="2000px", height="2000px")).add_xaxis(xaxis_data=xAxisData).add_yaxis(
        series_name="classifyHeatMap",
        yaxis_data=yAxisData,
        value=data,
        label_opts=opts.LabelOpts(
            is_show=False, color="#fff", position="bottom", horizontal_align="50%"
        ),
    ).set_series_opts().set_global_opts(
        legend_opts=opts.LegendOpts(is_show=True),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
            axislabel_opts=opts.LabelOpts(
                interval=0
            )
        ),
        yaxis_opts=opts.AxisOpts(
            type_="category",
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
        ),
        visualmap_opts=opts.VisualMapOpts(
            orient="horizontal", pos_left="center", is_piecewise=True,
            pieces=[
                {"value": 2, "label": 'waiter'},
                {"value": 4, "label": 'vip'},
                {"value": 6, "label": 'participant'},
                {"value": 8, "label": 'meeting'},
                {"value": 10, "label": 'reporter'},
            ]
        ),
    ).render("classifyHeatMap.html")


def serializeClassifyData(data: list):
    job = {'waiter': 2, 'vip': 4, 'participant': 6, 'meeting': 8, 'reporter': 10}
    sData = {}
    for person in data:
        if not sData.__contains__(str(person[0])[0:3]):
            sData[str(person[0])[0:3]] = {}
        sData[str(person[0])[0:3]][str(person[0])[3:5]] = job[person[1]]
    return sData


def genClassifyHeatMapData(data: dict):
    rdata = []  # data中的每个列表内容依次是横坐标 纵坐标 值
    for k, v in data.items():
        for sk, sv in v.items():
            rdata.append([int(sk), int(k) - 100, sv])
    return rdata


def drawClassifyHeatMap():
    classifyData = getClassifyData()
    serializedClassifyData = serializeClassifyData(classifyData)
    xAxisValue, yAxisValue = genHeatBaseData()
    classifyHeatMapData = genClassifyHeatMapData(serializedClassifyData)
    classifyHeatMap(xAxisValue, yAxisValue, classifyHeatMapData)


# 计算每种人去了每个房间的总和
def getRoomData1():
    classifyData = getClassifyData()
    serializedClassifyData = serializeClassifyData(classifyData)
    filename = "time_allocate_day1.xlsx"
    ws = openpyxl.load_workbook(filename)['time_allocate_day1']
    roomData = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]
    for i in range(2, ws.max_row + 1):
        row = str(i)
        for room in range(6):
            roomData[((serializedClassifyData[str(ws['A' + row].value)[0:3]][
                str(ws['A' + row].value)[3:5]]) // 2) - 1][room] += ws[chr(103 + room) + row].value
    # roomData=[[0, 0, 0, 0, 60831, 234033], [89477, 1235993, 30267, 0, 60746, 0], [78857, 0, 30304, 0, 3632303, 0],
    # [633270, 0, 410705, 0, 0, 0], [3233, 1550, 2401, 119402, 0, 0]]
    return roomData


# 计算每个房间都被多少人呆过的总和
def getRoomData2(roomData: list):
    roomData2 = [[], [], [], [], [], []]
    for i in roomData:
        k = 0
        for v in i:
            roomData2[k].append(v)
            k += 1
    # roomData2=[[0, 89477, 78857, 633270, 3233], [0, 1235993, 0, 0, 1550], [0, 30267, 30304, 410705, 2401],[0, 0, 0,
    # 0, 119402], [60831, 60746, 3632303, 0, 0], [234033, 0, 0, 0, 0]]
    return roomData2


def drawRoomData2Pie():
    roomData2 = getRoomData2(getRoomData1())
    jobs = ['waiter', 'vip', 'participant', 'meeting', 'reporter']
    newData = [[], [], [], [], [], []]
    k = 0
    for room in roomData2:
        i = 0
        for job in room:
            newData[k].append([jobs[i], job])
            i += 1
        k += 1
    k = 0
    pieCenter = [["20%", "30%"], ["55%", "30%"], ["85%", "30%"], ["20%", "70%"], ["55%", "70%"], ["85%", "70%"]]
    pie = Pie()
    for data in newData:
        pie.add("Room" + str(k + 1), data, center=pieCenter[k], radius=[40, 70])
        k += 1
    pie.set_global_opts(
        title_opts=opts.TitleOpts(title="Room1-6各人员访问量"),
        legend_opts=opts.LegendOpts(is_show=False),
    ).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}", is_show=True))
    pie.render("roomTime.html")


if __name__ == '__main__':
    # drawClassifyHeatMap() # 热力图是在已知人员分类的情况下画出来的,但是第一问的前提是不知道人员分类
    # 用平行坐标系画图
    drawRoomDataParallel()
    # 1:休息区 2:嘉宾休息区 3:休息区 4:记者区 5:黑客竞赛现场 6:工作人员休息区
    drawRoomData2Pie()

代码流程:

  • 读取Excel文件time_allocate_day1.xlsx
  • 拿到数据中每个id对应的职位。
  • 因为id为5位,前三位范围为100-199,后两位范围为0-99,所以以前三位为纵轴,后三位为横轴,画出个人职位热力图,热力图中不同颜色代表着不同职位。
  • 画出热力图,即可通过该热力图可以实现对人员的分类。任务一“设计可视化方案,要求通过该方案可以实现对人员的分类(分类结果已给出,仅绘制出图像即可)”完成。
  • 任务一“设计可视化方案,要求通过该方案可以实现对人员的分类(分类结果已给出,仅绘制出图像即可)”要求在不知道人员分类的前提下实现对人员的分类,所以上述热力图方案不可使用,因为数据有24维,故选择绘制平行坐标系。
  • 画出平行坐标系,即可通过该热力图可以实现对人员的分类。任务一“设计可视化方案,要求通过该方案可以实现对人员的分类(分类结果已给出,仅绘制出图像即可)”完成
  • 读取Excel文件time_allocate_day1.xlsx和classifyday1.xlsx
  • 拿到每个房间不同人员所处的时长总和。
  • 画出每个房间不同人员所处时长的饼图。
  • 观察图像,得出结论。

实验结果

平行坐标系

人员分类平行坐标系如下所示,可以通过此图观察分辨某人职位

在这里插入图片描述

room1-6房间人员时长饼图

在这里插入图片描述

上图从左到右从上到下依次是Room1-6的房间人员访问量。

对上图进行分析:

  • Room1和Room3被访问最多的是meeting,所以认为这两个房间是休息区
  • Room2绝大多是被vip访问,所以可以认为Room2是嘉宾休息区
  • Room4绝大多是reporter访问,所以可以认为Room4是记者区
  • Room5绝大多是participant访问,所以可以认为Room5是黑客竞赛现场
  • Room6绝大多是waiter访问,所以可以认为Room6是工作人员休息区

所以结论为:Room1:休息区 Room2:嘉宾休息区 Room3:休息区 Room4:记者区 Room5:黑客竞赛现场 Room6:工作人员休息区

数据可视化–实验五:高维非空间数据可视化实验完成,两项实验结果均符合要求,实验成功。

大数据领域数据可视化的最佳实践分享 在数据量呈指数级增长的今天,大数据可视化已从辅助分析工具演变为驱动数据决策的核心引擎。本文聚焦PB级数据规模下的可视化工程实践如何平衡可视化复杂度与信息传达效率?高维数据与非结构化数据的有效可视化映射方法实时数据流与离线分析场景的差异化实现策略跨终端(PC/移动端/大屏)可视化方案设计核心概念:解析视觉编码、认知负荷理论等基础原理技术体系:涵盖数据预处理、可视化编码、交互设计三大模块实战案例:通过电商用户行为分析演示完整实现流程工具矩阵:分类推荐不同场景适用的可视化工具链。 阅读详情

相关推荐

Python数据可视化:高维数据图表可视化(基础篇—8)

高维数据泛指高维和多变量数据,高维非空间数据中蕴含的数据特征与二维、三维空间数据并不相同。其中,高维是指数据具有多个独立属性,多变量是指数据具有多个相关属性。 因此,往往不能使用空间数据的可视化方法处理高维数据。

不脱发的程序猿 1913

西电-数据可视化-实验五-高维非空间数据可视化(pyecharts)

西电-数据可视化-实验五-高维非空间数据可视化 一、实验内容 在某次大型会议中,为确保会议过程安全,会场使用了电子胸牌对场内人员的移动轨迹进行了监控。现经过处理,得到了某一天内人员在场内各个区域逗留的时间统计数据(time_allocate_day1.csv,课程资料库下载)。请根据这份数据,完成以下任务: 1、设计可视化方案,通过该方案可实现对人员的分类(绘制出图像即可) 2、请分析会场中room1~6的功能。 二、思路分析 (1)进入pyecharts官网修改demo即可 本实验涉及的图表类型如下: p

yyyyypppppzzzzz的博客 2581

数据可视化与仪表盘 第三篇:数据可视化原理简介

作者:禅与计算机程序设计艺术 1.简介 数据可视化(Data Visualization)是指利用图形、图像、影像等媒介将复杂的数据转化成易于理解和分析的信息,帮助用户发现数据中的模式、关系、变化趋势等价值。许多数据可视化工具已经成为各行各业中数据的分析利器。本文从数据可视化理论出发,对数据可视化的定义

AI天才研究院 3157

数据可视化——实验5 高维非空间可视化

代码原文 <!DOCTYPE html> <html> <head> <title>数据可视化—实验5—高维非空间数据可视化</title> <meta charset = "utf-8"> <script src = "echarts.js"></script> <script src="https://d3js.org/d3.v4.

weixin_45918830的博客 722

大数据领域数据可视化:从理论到实践的跨越

在数据驱动决策的时代,大数据可视化已从单纯的展示工具演变为复杂的认知增强系统。本文系统剖析了大数据可视化从理论基础到工程实践的完整知识体系,构建了"感知-认知-交互-工程"四维分析框架。通过第一性原理推导,揭示了人类视觉系统与数据表示之间的深层映射关系;提出了面向TB级数据的分布式可视化架构模型;展示了从理论原则到工业级实现的完整转化路径。特别针对大数据环境下的维度灾难、实时性需求和认知负荷等核心挑战,提供了基于数学证明的解决方案和经过验证的工程实践指南。

2501_92132293的博客 1023

MATLAB四维数据可视化实现

在四维数据可视化中,切片是一种常用的技术,用于展示四维数据集中的三维子集。切片可以理解为在多维空间中固定某些维度的值,而动态改变其他维度的值,从而观察数据在不同维度组合下的变化情况。它对于理解高维数据的内部结构和关系具有重要的意义。切片方法的定义涉及到数据的子集选取,它通过选取数据集中的一部分,能够帮助我们更细致地观察到数据随特定变量变化的趋势。切片的概念不仅仅局限于三维,它同样适用于二维和更高维度数据的可视化。

weixin_35750747的博客 1370

西电数据可视化——实验五:高维非空间数据可视化(车辆驾驶画像可视分析)

高维非空间数据可视化,车辆驾驶画像可视分析 面向社会车辆驾驶员,构建多种大数据标签,对其驾驶行为进行画像分析。建议构建评分系统或其他量化方式,对画像进行评级评定,进行可视化展示并实现画像群体的可视分析。

专注后端应用开发领域优质创作者 2377

ReelShort Android 逆向实战:Frida Hook 定位 sign 与 requestTime 算法

一个动态变化的 sign,如何从海量 so 逻辑中精准定位并完整复现?本文以海外短剧 App ReelShort 为例,实战拆解搜索、列表与详情接口的分析过程:从 Charles 抓包锁定关键参数,到 jadx 定位 native 函数,再借助 Frida Hook 验证加密结果;逐步还原 requestTime 的生成机制及 sign 的 HMAC-SHA256 签名逻辑。全文记录关键思路、踩坑与验证方法,带你建立一套可迁移的 Android 接口逆向分析流程。

weixin_64116813的博客 456

python机器学习实战(二)

python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇notebook是关于机器学习监督学习中的决策树算法,内容包括决策树算法的构造过程,使用matplotlib库绘制树形图以及使用决策树预测隐形眼睛类型. 操作系统:ubuntu14.04(win也ok)...

weixin_34117522的博客 306

Cadence OrCAD常见引脚错误排查指南:从原理图到封装的完整解决方案

本文详细解析Cadence OrCAD设计中常见的引脚错误问题,提供从原理图到封装的系统化解决方案。涵盖错误诊断、元件库修复、封装管理及自动化处理技巧,帮助工程师高效解决ORCAP-36022等典型错误,确保设计流程顺畅。

weixin_29294975的博客 255

Power BI实战:从数据清洗到可视化报表的完整流程

本文详细介绍了使用Power BI进行数据分析的完整流程,从数据获取、清洗整理到建模与可视化。通过实战案例,重点讲解了连接MySQL数据库、使用Power Query进行数据清洗、利用DAX创建核心度量值以及设计交互式报表的关键步骤与技巧,帮助用户高效完成从原始数据到专业可视化报表的转化,实现数据驱动决策。

weixin_29070721的博客 398

Python基础——数据分析考核(基础版本)

数据生成文件: 类名:【GetRandomInfo.py】 import random def getClassName(): randomClass = ("天字一号", "地字一号", "玄字一号", "黄字一号", "东宫正品") return randomClass[int(random.random() * len(randomClass))] def getName(): """随机姓名""" randomNames = ( "华",

红目香薰 1379

多标签分类怎么做?(Python)

首先简单介绍下,多标签分类与多分类、多任务学习的关系: 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

y1282037271的博客 1359

高维非空间数据可视化

高维数据可视化 数据变换 降低维度:   使用线性或非线性变换把高维数据投影到低维空间 投影保留重要的关系(无信息损失;保持数据区分等) 方法: 线性方法 主成分分析(PCA) 多维尺度分析(Multidimensional Scaling,MDS) 非负矩阵分解(NMF) 非线性方法 ISOMAP 局部线性嵌套(LLE) 主成分分析 最大化 投影后的方差 最小化投影后的损失 方...

spaceorzero的博客 1741

保姆级教程:用NodeMediaClient在Android实现RTMP拉流播放(附避坑指南)

本文提供了一份详尽的Android平台RTMP拉流播放实现与深度调优指南。重点介绍了如何使用NodeMediaClient库进行集成,并针对视频卡顿、花屏等常见问题,从渲染引擎选择(SurfaceView与TextureView)、解码策略、缓冲区优化到高级网络自适应等方面提供了实战解决方案与避坑技巧。

weixin_29261711的博客 440

【N32L40X】学习笔记08-定时器的基本定时功能-超时功能

【代码】【N32L40X】学习笔记08-定时器的基本定时功能-超时功能。

Car12 827

陈为说《数据可视化》

陈为《数据可视化》课程笔记

敲不好代码的小透明的博客 7509

基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能

基于uniapp的PDA扫码枪APP开发实战,实现高效RFID读取功能,uniapp整合PDA硬件的实践分享,基于uniapp的PDA端RFID批量扫描方案开发

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

可视化复习

可视化理论复习

sandy_star 3651

手把手教你学 Simulink (1.3):探索Simulink模块库的奇妙世界

Simulink模块库按照功能分为多个类别,每个类别包含专门用于特定任务的模块。% 打开Simulink库浏览器% 或者以编程方式获取库列表disp('可用的库列表:');end常用模块(Simulink):最基础和最常用的模块信号处理模块(DSP System Toolbox):专业信号处理工具通信模块(Communications Toolbox):通信系统设计控制系统模块(Control System Toolbox):控制系统设计与分析% 创建自定义模块库。

QQ_778132974的博客 383

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据可视化的基本流程

作者 | 向倩文 来源 | 数据产品手记 大多数人对数据可视化的第一印象,可能就是各种图形,比如Excel图表模块中的柱状图、条形图、折线图、饼图、散点图等等,就不一一列举了。以上所述,只是数据可视化的具体体现,但是数据可视化却不止于此。 数据可视化不是简单的视觉映射,而是一个以数据流向为主线的一个完整流程,主要包括数据采集、数据处理和变换、可视化映射、用户交互和用户感知。一个完整的可视化过...

CDA数据分析师 9511

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数据可视化学习笔记(一)

数据可视化概述及环境介绍 什么是数据可视化 1.什么事数据可视化 Visualize,Visualization Visualize:“设想”,表示生成可视化图像,利用可视化方式传递信息 Visualization:“形象化”,表示可视化过程,对某个原本不能描述的事物形成一个可感知的画面的过程。 2.什么是数据可视化 在计算机视觉领域,数据可视化是对数据的一种形象直观的解释,实现从不同维度观察...

翊小宸的博客 1987

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

第1章:数据可视化概述

第一章:数据可视化概述

m0_53336038的博客 810

Nat. Biotechnol | PHATE:高维生物数据的可视化方法

作者 | 涂心琪单位 | 湖南大学研究方向 | 高维数据可视化高维生物数据的可视化能帮助研究者以直观的方式了解数据。今天介绍2019年12月发表在Nature Biotechnology...

DrugOne 2355

数据可视化(pyecharts 1.7.1)学习笔记——系列笔记(1)

数据可视化 一、数据可视化概述 1、什么是数据可视化 在计算机视觉领域,数据可视化是对数据的一种形象直观的解释,实现从不同维度观察数据,从而得到更有价值的信息。 抽象的、复杂的、不易理解的数据 图形、图像、符号、颜色、纹理等 具备较高的识别效率 数据本身所包含的有用信息 2、为什么要进行数据可视化 我们利用视觉获取的信息量,远远比别的感官要多得多 数据可视化能够帮助我们对数据有更加全面的认识...

masonsxu的博客 1645
上一篇: 数据可视化--实验四:地理数据可视化
下一篇: 数据可视化--实验六:层次和网络可视化、文本可视化
BlingblingFu
博客等级 码龄8年 138粉丝 28原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值