【数据篇】34 # 如何处理多元变量?

news2024/12/23 9:04:03

说明

【跟月影学可视化】学习笔记。

从数据到图表展现

2014 年北京市的天气历史数据(csv 格式)

在这里插入图片描述

这里使用QCharts 图表库折线图来展示平均气温

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>2014 年北京市的天气</title>
    </head>
    <body>
        <div id="app" style="width: 1200px; height: 600px"></div>
        <script src="https://d3js.org/d3.v6.js"></script>
        <script src="https://unpkg.com/spritejs/dist/spritejs.min.js"></script>
        <script src="https://unpkg.com/@qcharts/core/dist/index.js"></script>
        <script>
            (async function () {
                // 通过 fetch 读取 csv 的数据
                const rawData = await (await fetch("./data/beijing_2014.csv")).text();
                console.log(rawData)
                // 使用 d3 的 csvParse 方法,将数据解析成 JSON 数组
                const data = d3.csvParse(rawData);
                // 截取了 1 月到 3 月的平均气温数据
                const dataset = data
                    .filter((d) => new Date(d.Date).getMonth() < 3)
                    .map((d) => {
                        return {
                            temperature: Number(d["Temperature(Celsius)(avg)"]),
                            date: d.Date,
                            category: "平均气温",
                        };
                    });
                console.log(dataset);

                const { Chart, Line, Legend, Tooltip, Axis } = qcharts;
                // 创建图表(Chart)并传入数据
                const chart = new Chart({
                    container: "#app",
                });
                let clientRect = { bottom: 50 };
                chart.source(dataset, {
                    row: "category",
                    value: "temperature",
                    text: "date",
                });

                // 创建图形(Visual),这里创建的是折线图,所以使用 Line 对象;
                const line = new Line({ clientRect });
                // 创建横、纵两个坐标轴(Axis)、提示(ToolTip)和一个图例(Legend)
                const axisBottom = new Axis({ clientRect }).style(
                    "grid",
                    false
                );
                axisBottom.attr("formatter", (d) => "");
                const toolTip = new Tooltip({
                    title: (arr) => {
                        return "平均气温";
                    },
                });
                const legend = new Legend();
                const axisLeft = new Axis({ orient: "left", clientRect })
                    .style("axis", false)
                    .style("scale", false);

                // 将图形、坐标轴、提示和图例都添加到图表上
                chart.append([line, axisBottom, axisLeft, toolTip, legend]);
            })();
        </script>
    </body>
</html>

在这里插入图片描述

处理多元变量

上面只有平均气温一个变量,一张图表怎么展示多元变量呢?

在一张图表上绘制多元变量

最简单的方式是直接在图表上同时绘制多个变量,每个变量对应一个图形,这样一张图表上就同时显示多个图形。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>在一张图表上绘制多元变量</title>
    </head>
    <body>
        <div id="app" style="width: 1200px; height: 600px"></div>
        <script src="https://d3js.org/d3.v6.js"></script>
        <script src="https://unpkg.com/spritejs/dist/spritejs.min.js"></script>
        <script src="https://unpkg.com/@qcharts/core/dist/index.js"></script>
        <script>
            (async function () {
                // 通过 fetch 读取 csv 的数据
                const rawData = await (
                    await fetch("./data/beijing_2014.csv")
                ).text();
                console.log(rawData);
                // 使用 d3 的 csvParse 方法,将数据解析成 JSON 数组
                const data = d3.csvParse(rawData).filter(d => new Date(d.Date).getMonth() < 3);
                // 截取了 1 月到 3 月的平均气温数据
                const dataset1 = data.map((d) => {
                    return {
                        value: Number(d["Temperature(Celsius)(avg)"]),
                        date: d.Date,
                        category: "平均气温",
                    };
                });
                console.log(dataset1);
                // 截取了 1 月到 3 月的平均湿度数据
                const dataset2 = data.map((d) => {
                    return {
                        value: Number(d["Humidity(%)(avg)"]),
                        date: d.Date,
                        category: "平均湿度",
                    };
                });
                console.log(dataset2);

                const { Chart, Line, Legend, Tooltip, Axis } = qcharts;
                // 创建图表(Chart)并传入数据
                const chart = new Chart({
                    container: "#app",
                });
                let clientRect = { bottom: 50 };
                chart.source([...dataset1, ...dataset2], {
                    row: "category",
                    value: "value",
                    text: "date",
                });

                // 创建图形(Visual),这里创建的是折线图,所以使用 Line 对象;
                const line = new Line({ clientRect });
                // 创建横、纵两个坐标轴(Axis)、提示(ToolTip)和一个图例(Legend)
                const axisBottom = new Axis({ clientRect }).style(
                    "grid",
                    false
                );
                axisBottom.attr("formatter", (d) => "");
                const toolTip = new Tooltip({
                    title: (arr) => {
                        return "平均气温";
                    },
                });
                const legend = new Legend();
                const axisLeft = new Axis({ orient: "left", clientRect })
                    .style("axis", false)
                    .style("scale", false);

                // 将图形、坐标轴、提示和图例都添加到图表上
                chart.append([line, axisBottom, axisLeft, toolTip, legend]);
            })();
        </script>
    </body>
</html>

在这里插入图片描述

用散点图分析变量的相关性

分析两个变量的相关性,可以使用散点图,散点图有两个坐标轴,其中一个坐标轴表示变量 A,另一个坐标轴表示变量 B。

在这里插入图片描述
下面例子是平均气温和露点的相关性以及平均湿度和露点的相关性:

在空气中水汽含量不变, 并且气压一定的情况下, 空气能够冷却达到饱和时的温度就叫做露点温度, 简称露点, 它的单位与气温相同。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>用散点图分析变量的相关性</title>
    </head>
    <body>
        <div id="app" style="width: 1200px; height: 600px"></div>
        <script src="https://d3js.org/d3.v6.js"></script>
        <script src="https://unpkg.com/spritejs/dist/spritejs.min.js"></script>
        <script src="https://unpkg.com/@qcharts/core/dist/index.js"></script>
        <script>
            (async function () {
                // 通过 fetch 读取 csv 的数据
                const rawData = await (
                    await fetch("./data/beijing_2014.csv")
                ).text();
                console.log(rawData);
                // 使用 d3 的 csvParse 方法,将数据解析成 JSON 数组
                const data = d3.csvParse(rawData);
                
                const dataset1 = data.map(d => {
                    return {
                        value: Number(d['Temperature(Celsius)(avg)']),
                        tdp: Number(d['Dew Point(Celsius)(avg)']),
                        category: '平均气温与露点'
                    }
                });
                const dataset2 = data.map(d => {
                    return {
                        value: Number(d['Humidity(%)(avg)']),
                        tdp: Number(d['Dew Point(Celsius)(avg)']),
                        category: '平均湿度与露点'
                    }
                });

                const { Chart, Scatter, Legend, Tooltip, Axis } = qcharts;
                // 创建图表(Chart)并传入数据
                const chart = new Chart({
                    container: "#app",
                });
                let clientRect = { bottom: 50 };
                chart.source([...dataset1, ...dataset2], {
                    row: "category",
                    value: "value",
                    text: "tdp",
                });

                // 创建横、纵两个坐标轴(Axis)、提示(ToolTip)和一个图例(Legend)
                const scatter = new Scatter({
                    clientRect,
                    showGuideLine: true,
                });
                const toolTip = new Tooltip({
                    title: (data) => data.category,
                    formatter: (data) => {
                        return `温度和湿度:${data.value}C  露点:${data.tdp}% `
                    }
                });
                const legend = new Legend();
                const axisLeft = new Axis({ orient: "left", clientRect })
                    .style("axis", false)
                    .style("scale", false);
                const axisBottom = new Axis();
                // 将图形、坐标轴、提示和图例都添加到图表上
                chart.append([scatter, axisBottom, axisLeft, toolTip, legend]);
            })();
        </script>
    </body>
</html>

可以看到平均气温和露点以及平均湿度和露点都是成正相关的,不过露点与温度的相关性更强,因为散点更集中一些。

在这里插入图片描述

散点图和相关性之间关系的总结图:

在这里插入图片描述

散点图的扩展

散点图也有明显的局限性,那就是它的维度只有二维,所以它一般只能处理二元变量,超过二维的多元变量的相关性,得引入比如颜色、透明度、大小等信息来表示额外的数据维度,这样才能处理多维数据。

例子可以参考这篇:厉害了,散点图还能这么画!

在这里插入图片描述

这是一个加州房产价格的数据集,其中共有10个属性,包含经度、纬度、房屋年龄中位数、总房间数、总卧室数、人口数、家庭数、收入中位数、房屋价值中位数和该地区离大海的距离。

在这个案例中,散点图大致的勾勒出了加州的地理轮廓,一个点代表了一个街区,用alpha呈现了街区密集度,s呈现了人口密集度,c反映房价高低,再加上横纵坐标的经纬度,一共反映了5个维度的信息。

  • 通过设置参数 alpha,控制散点的透明度,设置了透明度之后,颜色越深的部分代表该区域的街区密集程度更大
  • 通过设置参数 s,将散点的大小和人口多少挂钩
  • 通过设置参数 c,将颜色和房价高低挂钩,通过颜色的渐变来展现房价高低,颜色由蓝到红代表了价格由低到高

在这里插入图片描述

通过这个散点图就可以得到结论:

  • 房价比较高的区域集中于两个中心,且都靠近海湾
  • 房价高的地方对应的人口密集度也较高

其他图表形式

北大疫情可视化工作分享里弄的疫情变化晴雨表,每个地区每日的新增确诊用方块表示,方块的大小表示具体的数量,方块的颜色表示和前一天比较,是否有更多的新增确诊病例。

在这里插入图片描述
还有平行坐标图跟热力图

在这里插入图片描述

三维直方图跟三维气泡图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF转换成word免费版网页版哪个好?办公就用它

我们在工作中经常需要对PDF文件进行编辑&#xff0c;所以可以将PDF文件转换为word文件&#xff0c;这样就可以随意编辑我们想要编辑的内容了&#xff0c;不过有些小伙伴不喜欢下载客户端&#xff0c;但是又不知道PDF转换成word免费版网页版哪个好&#xff0c;为了帮助大家更好的…

微信小程序是如何设计百亿级用户画像分析系统的?

导语 | “We分析”是微信小程序官方推出的数据分析平台&#xff0c;其中画像洞察是其中一个非常重要的功能模块。微信开发工程师钟文波将描述We分析画像系统各模块是如何设计&#xff0c;在介绍基础标签模块之后&#xff0c;重点讲解用户分群模块设计。希望相关的技术实现思路&…

使用OpManager Plus进行网络运行管理

什么是网络运行管理 网络运行管理会不断跟踪网络设备及其操作&#xff0c;并在出现任何网络故障时通知技术人员团队&#xff0c;以便消除它们并主动加强网络免受停机的影响。 为什么网络运行管理很重要 借助网络操作管理工具&#xff0c;管理员可以深入了解网络的最微小细节…

springboot多模块工程单元测试jacoco统计代码覆盖率总结

jacoco统计代码覆盖率的文章一搜一大堆&#xff0c;方法也很简单&#xff0c;就是在pom中引用两个插件&#xff1a; maven-surefire-plugin jacoco-maven-plugin 其中jacoco-maven-plugin的关键配置为要有两个execution&#xff1a; 一个goal是prepare-agent&#xff0c;即…

【JavaEE】初识Spring

目录 一、创建Spring项目 二、介绍理论 一、创建Spring项目 通过maven创建Spring项目&#xff0c;我们需要借助一些工具完成工程的创建。 1.pom.xml 2.一部分示例代码 Spring提供了一个Spring Initializr使用网页版本。 然后将得到文件的内容用idea打开。然后执行会显示未连…

集群环境下解决定时任务重复执行的问题【案例分享】

【辰兮要努力】&#xff1a;hello你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行&#xff01; 博客来源于项目以及编程中遇到的问题总结&#xff0c;偶尔会有读书分享&#xff0c;我会陆续更新Java前端、后台、…

机器学习中的数学原理——似然函数

这个专栏主要是用来分享一下我在 机器学习中的 学习笔记及一些 感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎 私信或者 评论区留言&#xff01;这一篇就更新一下《 白话机器学习中的数学——似然函数》&#xff01;什么是似然函数似然函数 定义. 在…

电商让客户等待的话术

在电商平台购物时&#xff0c;在购物前后客户难免会产生一些问题&#xff0c;客服需要先进行核对&#xff0c;或者需要转接给专员进行接待&#xff0c;在这期间&#xff0c;客户需要等候&#xff0c;这时候需要给客户发送一些等候话术。前言在电商平台购物时&#xff0c;在购物…

uni-app动态修改manifest.json中的参数

以根据不同环境配置不同的h5运行路径为例&#xff0c;动态修改h5.router.base 假设当前有三种环境 process.env.NODE_ENV developmentprocess.env.NODE_ENV testprocess.env.NODE_ENV production 在src根目录下创建modifyManifest.js文件&#xff08;一定是src&#xff09;…

渗透测试工程师的职业发展

前段时间看了一个大哥写的程序员的职业发展&#xff0c;感触很深&#xff0c;这几天晚上就参考大哥的思路结合自身的经历写一下渗透工程师的职业发展之路&#xff0c;顺便也让迷茫中的小伙伴们有个参考。 很多干渗透、安全服务、安全运维的人在干了3-5年后面对迷茫期&#xff…

2022年度猫狗粮销售数据:十大热门品牌排行榜,哪些品牌入围?

当前&#xff0c;“吸猫撸狗”正成为当代年轻人新的生活方式&#xff0c;越来越多的人乐意为了自己的“毛孩子”买单&#xff0c;这使得宠物经济快速发展。伴随着宠物食品概念越来越被消费者所接受&#xff0c;目前&#xff0c;我国宠物食品行业呈现爆发式增长&#xff0c;宠物…

电脑只有一个c盘怎么办?看我怎么一招解决!

很多朋友在网上新买了笔记本电脑&#xff0c;打开电脑后发现它只有一个磁盘&#xff0c;电脑只有一个c盘怎么办&#xff1f;下面以Windows 10系统为例进行步骤说明&#xff0c;让我们一起来解决电脑只有一个磁盘的难题吧&#xff01; 操作环境&#xff1a; 演示机型&#xff1a…

再谈什么是【组织能力】

&#xff08;1&#xff09;我过去讲过两个公式&#xff1a;从这两个公式都能看出来&#xff0c;企业管理和业务管理的巨大区别。我过去也专门讲过企业管理&#xff1a;愿景使命-文化价值观、战略目标-战略路径企业治理-企业组织、商业模式创新-品牌影响力-持续客户关系经营健康…

YoloV5+DAMOYOLO:将DAMOYOLO中的GFPN结构与Yolov5结合

前段时间写了一篇damoYolo的训练教程&#xff0c;同时也对自己的数据集进行了训练&#xff0c;虽然效果确实不是很好&#xff0c;但是damoyolo的一些思想和网络结构啥的还是可以借鉴使用的&#xff0c;此次将damoyolo的RepGFPN结构掏出来放到v5的NECK中&#xff0c;测试一下对本…

进程间通信——管道通信

目录 1 管道概念 2 无名管道&#xff08;pipe&#xff09;只能给有亲缘关系进程通信 步骤 注意事项 3 有名管道&#xff08;fifo&#xff09; 可以给任意单机进程通信 步骤 注意事项 1 管道概念 管道是UNIX 系统IPC 的最古老形式&#xff0c; 并且所有UNIX 系统都提供此种…

JavaWeb项目 -- 博客系统

JavaWeb项目 -- 博客系统前言&#xff1a;页面展示一、创建 Maven 项目二、设计数据库三、封装数据库的操作3.1 创建 DBUtil 类3.2 创建 Blog 类3.3 创建 User 类3.4 创建类 BlogDao3.5 创建类 UserDao四、导入准备好的前端代码五、实现博客列表界面5.1 约定好前后端交互接口5.…

excel函数应用:如何用数位函数分段提取身份证信息 上篇

用Excel处理身份证号&#xff0c;在我们日常工作中是相当普遍的&#xff0c;尤其是对于做人事行政工作、财务工作的同学来说&#xff0c;更显得十分重要。那么一个身份证号&#xff0c;能给予我们多少信息量呢&#xff1f;无论我们需要用Excel处理何种数据&#xff0c;首先都应…

python 使用矢量化替换循环

介绍 &#x1f3b5;&#x1f57a;&#x1f5e3;&#x1f3c0; 循环自然而然地出现在我们身边&#xff0c;我们了解几乎所有编程语言中的循环。因此&#xff0c;默认情况下&#xff0c;只要有重复操作&#xff0c;我们就会开始执行循环。但是当我们处理大量迭代&#xff08;数百…

5G NR标准 第14章 调度

第14章 调度 NR 本质上是一个调度系统&#xff0c;这意味着调度器决定何时以及向哪些设备分配时间、频率和空间资源&#xff0c;以及使用什么传输参数&#xff0c;包括数据速率。 调度可以是动态的或半静态的。 动态调度是基本的操作模式&#xff0c;其中调度程序针对每个时间…

【JVM 从入门到精通系列】 JVM 字节码指令篇 之 Class文件结构

一、概述 字节码文件的跨平台性 Java语言&#xff1a;跨平台的语言 当Java源代码成功编译成字节码后&#xff0c;如果想在不同平台上运行&#xff0c;则无需再次编译。这个优势已经不再那么吸引人了&#xff0c;Python、PHP、Perl、Ruby、Lisp等有强大的编译器。跨平台似乎已…