疫情可视化(后续)
前言
这是疫情可视化最开始的文章,有需要了解的可前往查看:https://blog.csdn.net/xi1213/article/details/126824752。 本来说有时间就把这个项目完结了的,结果后面一直有事拖着,直到现在十一月份了才搞完。老样子,先看成果。
- 浏览链接:https://xi1213.gitee.io/covid19-visualization
- 项目链接(欢迎各位大哥star):https://gitee.com/xi1213/covid19-visualization
修改与添加
后面可能审美疲劳了,越看越丑,就干脆直接用dataV(这可不是阿里的那个dataV)修饰页面了。这是项目改动后的样子:
主要做了如下改动:
- 添加首页的3d粒子球体。
- 完成“省内分析”模块。
- 完成当地疫情报告生成与下载。
- 使用dataV修饰页面。
粒子球体
粒子球体也是用three.js完成的,放大仔细看会发现其实是有三层构成的:内层透明球体,中间点状球体,外层病毒球体。
具体实现过程是这样的:
- 先绘制一个内层透明球体,记得将球体材质的transparent设为true,然后设置不透明度opacity值。
//创建斑点球体
async function createSpotSphere() {let globeBufferGeometry = new THREE.SphereGeometry(earthSize - 1, 50, 50);//球体几何体let globeInnerMaterial = new THREE.MeshBasicMaterial({color: new THREE.Color(dvColor[0]),//颜色// blending: THREE.AdditiveBlending,//纹理融合的叠加方式// side: THREE.FrontSide,//前面显示transparent: true,//透明// depthWrite: false,//深度写入// depthTest: false,//黑洞效果opacity: .3,//不透明度});let globeInnerMesh = new THREE.Mesh(globeBufferGeometry,globeInnerMaterial);earthGroup.add(globeInnerMesh); //将网格放入地球组cre
- 创建点状球体。这里需要使用一张黑白的世界地图。
let img = new Image();
img.src = earthGrayscale; //黑白地图
将图片使用onload加载到项目中后,利用canvas绘制一遍该图,再使用getImageData获取到像素点数据canData。
let canvas = document.createElement("canvas");canvas.width = img.width; //使得canvas尺寸与图片尺寸相同canvas.height = img.height;(canvas.getContext("2d") as any).drawImage(img, 0, 0, img.width, img.height);//canvas绘制图片let canData = (canvas.getContext("2d") as any).getImageData(0, 0, canvas.width, canvas.height);//获取画布像素数据
利用canData .data中的rgba信息生成缓冲几何顶点数组globeCloudVerticesArray。
let globeCloudBufferGeometry = new THREE.BufferGeometry(); //设置缓冲几何体let globeCloudVerticesArray = []; //地球云缓冲几何体顶点let o = null; //数组处理时的计数for (o = 0; o < canData.data.length; o += 4) {let r = (o / 4) % canvas.width,i = (o / 4 - r) / canvas.width;if ((o / 4) % 2 == 1 && i % 2 == 1)if (0 === canData.data[o]) {let n = r,longitude = (i / (canvas.height / 180) - 90) / -1, //经度latitude = n / (canvas.width / 360) - 180; //维度let s = latLongToVector3(longitude, latitude, earthSize, .1); //经纬度变换globeCloudVerticesArray.push(s); //将变换后的顶点放入数组}}
然后再使用three中的BufferAttribute生成属性position与color。
let l = new Float32Array(3 * globeCloudVerticesArray.length); //创建顶点数组长度for (o = 0; o < globeCloudVerticesArray.length; o++) {l[3 * o] = globeCloudVerticesArray[o].x;//设置顶点数组数据l[3 * o + 1] = globeCloudVerticesArray[o].y;l[3 * o + 2] = globeCloudVerticesArray[o].z;}let positionVal = new THREE.BufferAttribute(l, 3); //设置缓冲区属性值globeCloudBufferGeometry.setAttribute("position", positionVal); //给缓冲几何体添加位置属性let globeCloudMaterial = new THREE.PointsMaterial({color: new THREE.Color(dvColor[1]),//颜色fog: true,size: 1,});//球面斑点材质let d = new Float32Array(3 * globeCloudVerticesArray.length), c = [];for (o = 0; o < globeCloudVerticesArray.length; o++) {c[o] = new THREE.Color(dvColor[1]);//球面斑点颜色d[3 * o] = c[o].r;//设置地球云数组rgb颜色d[3 * o + 1] = c[o].g;d[3 * o + 2] = c[o].b;}let color_val = new THREE.BufferAttribute(d, 3);globeCloudBufferGeometry.setAttribute("color", color_val);//给缓冲几何体添加颜色属性,修改颜色直接修改globeCloudBufferGeometry的setAttribute
最后再使用THREE.Points创建球面的点,将position与color属性添加到点的几何体BufferGeometry中。
let globeCloud = new THREE.Points(//球面的象素点globeCloudBufferGeometry,globeCloudMaterial);
这是需要用到的坐标转换方法:
//经纬度坐标变换(传入e:纬度、a经度、t球半径、o球额外距离)
function latLongToVector3(e: any, a: any, t: any, o: any) {var r = (e * Math.PI) / 180,i = ((a - 180) * Math.PI) / 180,n = -(t + o) * Math.cos(r) * Math.cos(i),s = (t + o) * Math.sin(r),l = (t + o) * Math.cos(r) * Math.sin(i);return new THREE.Vector3(n, s, l); //计算三维向量
};
- 创建最外层的病毒球体。每一个病毒都是一个THREE.Sprite,材质是THREE.SpriteMaterial,利用Sprite.position.set设置具体坐标位置,最后将Sprite添加到球体组中。病毒的颜色是由当前点确诊值决定的,颜色值在colors数组中取出。
//创建病毒
function createVirus(data: any, earthSize: any) {let colors = [new THREE.Color(0xf9b8b8),new THREE.Color(0xfe4242),new THREE.Color(0xff0000),]; //病毒颜色列表let virSize = 4; //病毒大小let list = JSON.parse(JSON.stringify(data));list.forEach((e: { value: number; color: any; position: any[]; }) => {e.value >= 10000000 && (e.color = colors[2]); //根据病毒数赋予不同颜色e.value >= 500000 && e.value < 10000000 && (e.color = colors[1]);e.value < 500000 && (e.color = colors[0]);if (e.position) {let virusMaterial = new THREE.SpriteMaterial({color: e.color,map: new THREE.TextureLoader().load(virusImg),side: THREE.FrontSide, //只显示前面}); //病毒材质let Sprite = new THREE.Sprite(virusMaterial); //点精灵材质Sprite.scale.set(virSize, virSize, 1); //点大小let lat = e.position[1]; //纬度let lon = e.position[0]; //经度let s = latLongToVector3(lat, lon, earthSize, 1); //坐标转换Sprite.position.set(s.x, s.y, s.z); //设置点的位置Sprite.dotData = e; //将点的数据添加到dotData属性中Sprite.name = "病毒";earthGroup.add(Sprite); //将病毒添加进球体组中}});
};
省内分析
- 省内数据概况。
该数值在加载时是有增加动画的,是利用vue响应式原理完成的,在上一篇文章中有提到。 - 省内各地疫情柱状图。
这是具体的echart配置:
let option = {title: {text: provinceBaseData.value.province + "各地数据",left: "center",top: '5%',textStyle: {color: "#fff",},},tooltip: {trigger: 'axis',axisPointer: {type: 'shadow'}},dataZoom: [{type: 'inside',},{show: true,yAxisIndex: 0,filterMode: 'empty',width: 25,height: '70%',showDataShadow: false,left: '3%',top: "center"}],legend: {data: ['累计数', '治愈数', '确诊数', '较昨日新增', '死亡数'],orient: "vertical",top: "15%",right: "2%",textStyle: {color: "#fff"},},grid: {left: '3%',right: '15%',bottom: '10%',containLabel: true},xAxis: {type: 'category',data: echartData.cityName,axisLabel: {interval: 0,rotate: 50,color: "#fff"},},yAxis: {type: 'value',axisLabel: {color: "#fff",},},series: [{name: '累计数',type: 'bar',emphasis: {focus: 'series'},itemStyle: {color: '#f59158'},data: echartData.conNum},{name: '治愈数',type: 'bar',emphasis: {focus: 'series'},itemStyle: {color: '#48c56b'},data: echartData.cureNum},{name: '确诊数',type: 'bar',stack: 'total',emphasis: {focus: 'series'},itemStyle: {color: '#ffd889'},data: echartData.econNum},{name: '较昨日新增',type: 'bar',stack: 'total',emphasis: {focus: 'series'},itemStyle: {color: '#794ebd'},data: echartData.asymptomNum},{name: '死亡数',type: 'bar',stack: 'total',emphasis: {focus: 'series'},itemStyle: {color: '#ff6a6a'},data: echartData.deathNum},]};
- 省份历史疫情数据图表。
这是该图表配置:
let option = {title: {text: provinceBaseData.value.province + "历史数据",left: "center",top: '5%',textStyle: {color: "#fff",},},tooltip: {trigger: 'axis',axisPointer: {type: 'cross',label: {backgroundColor: '#6a7985'}}},legend: {data: ['累计数', '确诊数', '较昨日新增', '治愈数', '死亡数'],orient: "vertical",top: "15%",right: "2%",textStyle: {color: "#fff"},},grid: {left: '8%',},xAxis: [{type: 'category',boundaryGap: false,axisLabel: {color: "#fff",},data: echatrData.time}],yAxis: [{type: 'value',axisLabel: {color: "#fff",},}],dataZoom: [{startValue: ''},{type: 'inside'}],series: [{name: '累计数',type: 'line',stack: 'Total',smooth: true,lineStyle: {width: 0},showSymbol: false,areaStyle: {opacity: 0.8,color: "#f59158"},emphasis: {focus: 'series'},itemStyle: {color: '#f59158'},data: echatrData.conNum},{name: '确诊数',type: 'line',stack: 'Total',smooth: true,lineStyle: {width: 0},showSymbol: false,areaStyle: {opacity: 0.8,color: "#ffd889"},itemStyle: {color: '#ffd889'},emphasis: {focus: 'series'},data: echatrData.econNum},{name: '较昨日新增',type: 'line',stack: 'Total',smooth: true,lineStyle: {width: 0},showSymbol: false,label: {show: true,position: 'top'},areaStyle: {opacity: 0.8,color: "#794ebd"},itemStyle: {color: '#794ebd'},emphasis: {focus: 'series'},data: echatrData.asymptomNum},{name: '治愈数',type: 'line',stack: 'Total',smooth: true,lineStyle: {width: 0},showSymbol: false,areaStyle: {opacity: 0.8,color: "#48c56b"},itemStyle: {color: '#48c56b'},emphasis: {focus: 'series'},data: echatrData.cureNum},{name: '死亡数',type: 'line',stack: 'Total',smooth: true,lineStyle: {width: 0},showSymbol: false,areaStyle: {opacity: 0.8,color: "#ff6a6a"},itemStyle: {color: '#ff6a6a'},emphasis: {focus: 'series'},data: echatrData.deathNum},]};
报告生成与下载
报告生成利用的是docxtemplater,这是前端生成word比较方便的一个插件,具体使用方法可以看这里:https://blog.csdn.net/xi1213/article/details/127412672。
- 这是生成的word报告示例:
dataV修饰
- dataV是一个大屏可视化组件库,这是使用文档:http://datav.jiaminghi.com/guide/。
- dataV是vue2开始的,vue3使用的话会报错,需要做一点修改,具体看这里:https://blog.csdn.net/xi1213/article/details/127697760。
- 我只用了dataV中的一些边框与装饰,你在页面中看到的紫色线框和一些动画的装饰就是dataV的,还是蛮漂亮的。
结语
- 最后我发现人的审美真的变化太快了。
- 项目刚搞完:嗯不错!真漂亮!
- 过去一周后:什么玩意!丑得一批!
- 如果还有后续的话,我可能就要考虑添加自定义主题配色了。
相关文章:
数学题 3
T1 Statement 对于 \(n,m,T\le50000\),求 \(\sum_{i\in[1..n]}\sum_{j\in[1..m]}d(ij)\) Solution 因为 \(d(ij)=\sum_{u|i}\sum_{v|j}[\gcd(u,v)=1]\) \[ \begin{aligned}&\sum_{i\in[1..n]}\sum_{j\in[1..m]}d(ij)\\=&\sum_{i\in[1..n]}\sum_{j\in[1..m]}\sum_{u\mi…...
Thinkphp5.x全漏洞复现分析
基础知识 命名空间和子命名空间 我们可以把namespace理解为一个单独的空间,事实上它也就是一个空间而已,子命名空间那就是空间里再划分几个小空间,举个例子: <?phpnamespace animal\cat; class cat{public function __construct(){echo "meow"."\n"…...
一个开源跨平台嵌入式USB设备协议:TinyUSB
概述 TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈,设计为内存安全,无需动态分配,线程安全,所有中断事件都被推迟,然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。 源码链接ÿ…...
python项目练习——28.自动抢火车票脚本
确定抢购信息: 出发站:例如,"北京"到达站:例如,"上海"出发日期:例如,"2024-05-01"确定登录12306账号信息: 用户名密码环境准备: 安装Python编程环境安装相关第三方库:requests、selenium等网页自动化登录: 使用Selenium模拟浏览器操作…...
【笔试强训】Day3 --- 简写单词 + dd爱框框 + 除2!
文章目录 1. 简写单词2. dd爱框框3. 除2! 1. 简写单词 【链接】:简写单词 解题思路:简单模拟题,主要是处理⼀下输⼊的问题。(也可以利用string类中的find函数,但时间复杂度会偏高) #include …...
刀片式服务器的作用有哪些?
刀片式服务器是是一种紧凑的独立服务器,将多个服务器功能集成在一个紧凑的机箱中,这种服务器设计可以使数据中心更加高效地管理硬件资源,提高服务器的可靠性和可扩展性,在多种场景中得到广泛的应用。 刀片式服务器的作用有哪些呢&…...
疫情可视化(后续)
前言 这是疫情可视化最开始的文章,有需要了解的可前往查看:https://blog.csdn.net/xi1213/article/details/126824752。 本来说有时间就把这个项目完结了的,结果后面一直有事拖着,直到现在十一月份了才搞完。老样子,先…...
刷题记录:牛客NC17193简单瞎搞题
传送门;牛客 题目描述: 一共有 n个数,第 i 个数是 xi xi 可以取[li,ri][li , ri][li,ri] 中任意的一个值。 设 S∑xi2S \sum{{x_i}^2}S∑xi2 ,求 S 种类数。 输入: 5 1 2 2 3 3 4 4 5 5 6 输出: 26 这道题目还是挺有意思的.首先我们看到这道题目想到…...
C++笔记 16 (STL常用容器 - deque)
三. STL常用容器 3.deque容器 3.1 deque容器基本概念 双端数组,可以对头端进行插入删除操作。 deque和vector区别: 1)vector对于头部的插入删除效率低,数据量越大,效率越低; 2)deque相对而言…...
python:基础知识
环境: window11python 3.10.6vscodejavascript、c/c/java/c#基础(与这些语言对比) 注释 一、数据类型 基础六大数据类型,可以使用 type()查看,如下图: 1.1 数字(Number) 支持 整…...
智工教育:每年必考!教师编制这些考点必背!
夸美纽斯的教育思想 (1)著作:《大教学论》,是近代最早的一部教育学著作,是近代独立形态教育学的开端,标志着教育学开始成为一门独立学科。 (2)观点: 对学年制、班级授…...
C++基础——输入输出和缺省参数讲解
上篇文章中,我们学习了C的域名空间,这次继续来学习C的基础知识。 目录 一.C的输入输出 总结: 二.缺省参数 全缺省案例: 部分缺省案例: 一.C的输入输出 例: #include<iostream> using std::co…...
Git使用详细教程
1. cmd面板的常用命令 clear:清屏cd 文件夹名称----进入文件夹cd … 进入上一级目录(两个点)dir 查看当前目录下的文件和文件夹(全拼:directory)Is 查看当前目录下的文件和文件夹touch 文件名----创建文件echo 内容 > 创建文件名----创建文件并写入内容rm 文件名…...
11月新书预告——GNN、深度学习和元宇宙
11月的新书聚焦AI的前沿主题——GNN,另外,还有两本重磅的深度学习好书,也不乏元宇宙、智能驾驶和硬件产品经理等全新技术主题的好书。 1. 图神经网络:基础、前沿与应用 吴凌飞 崔鹏 裴健 赵亮 编著 张钹、韩家炜、…...
YOLOv5 PyQt5 | PyQt5快速入门 | 2/3
YOLOv5 PyQt5 快速入门 2/3 文章目录 YOLOv5 PyQt5 快速入门 2/31. 设计页面2. PyQt5 打开图片3. PyQt5 打开视频4. PyQt5 打开摄像头源码1. 设计页面 首先我们利用QtDesigner来设计一个页面。这个页面比较简单,包含三个PushButton、两个GroupBox、两个Textlabel。 设计好后我…...
Java为什么吧String设计为不可变类?
文章目录那么为什么要这么设计呢?防止被篡改,保证信息数据的安全性不变的对象和值是线程安全的哈希值的唯一性来挺好性能提高常量池的可用性在Java中String类由final修饰,所以不能被继承。被final修饰主要是为了让String成为一个不可变类因为…...
【javaEE】多线程进阶(Part1 锁策略、CAS、synchronized )
目录前言/补充4. 描述一下线程池的执行流程和拒绝策略有哪些?【面试题!】一、常见锁策略一)乐观锁VS悲观锁二)读写锁VS普通互斥锁三)重量级锁VS轻量级锁四)自旋锁VS挂起等待锁五)公平锁VS非公平…...
deepin(深度)系统下qt5.12.0的程序打包发布到linux云服务器上
做项目时要求,要求做一个用于QT客户端更新提供更新的服务器,服务器弄好啦,要测试一下,在发布时,发现了一些问题,在此记录一下。 这个打包和我的前一篇博客步骤一样,打包可参考https://blog.csd…...
精读大型网站架构:前端架构模块化的方法及困境,自研框架Trick
模块化的方法 网页和网页之间有很多相似或者相同的模块,模块化就是把这些模块抽离并独立管理。而模块化的方法,就是把模块的HTML、CSS和JavaScript文件独立出来,然后通过某种方法关联到使用这些模块的网页上。 在介绍模块化的具体方法之前&…...
用Python实现的这五个小游戏,你真的学会了嘛?
游戏名称1、五子棋 2、雷霆战机 3、贪吃蛇 4、坦克大战 5、俄罗斯方块 开发环境 Python版本:3.6.4 相关模块: pygame模块; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 一&am…...
linux环境下查询主板、CPU、内存等硬件信息
文章目录前言dmidecode常用参数-t参数测试-q参数测试-s参数测试总结前言 如果是在windows系统下,查询电脑硬件会容易的多,可以通过电脑属性、计算机管理等多种图形化界面中查到,如果安装了各种电脑管家,那查询这类信息就更方便了…...
查看日志.
如果查看比较小的日志文件:cat xxx.log 一般常用:view xxx.log/vi xxx.log查找关键字,如“木叶”:编辑,/木叶,确定,然后按“n”键就能往下找。 如果想往上找,输入:$到最后一行&#…...
vue3 生命周期函数,都改了啥?
vue2到3常用生命周期钩子函数的变化 Ⅰ. 实例化 和 数据初始化 (beforeCreate,created > setup) 1. new Vue 从开始 > 结束 [vue2和3 、两版本区别处] vue2的写法> export default {beforeCreate(){console.log(vue的实例 还没ne…...
基于springboot的医院管理系统
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里,你想解决的问题࿰…...
Django + Nginx https部署实战(第一辑)
WebServer和WebAPP 之前对于nginx的了解都只是听说,根本就不知道nginx对于整个网站的作用。经历了数个项目之后,我本人逐渐对nginx有了更深入的了解,也希望把这段经历拿出来分享给大家! 由于我本人之前接触的都是Python的Django…...
Pycharm+服务器运行代码
Pycharm服务器运行代码服务器的连接与Anaconda环境配置ssh连接安装Anaconda创建虚拟环境安装代码所需的库Pycharm上传代码到服务器服务器的连接与Anaconda环境配置 ssh连接 我使用的是MobaXterm,新建一个会话,选择SSH,输入主机IP地址自己的…...
【Spring】IDEAspring-mybatis的整合----关于配置文件的整合
文章目录spring-mybatis的整合过程步骤1.导包,spring的jar包,mybatis的jar包2.mybatis.xml配置3.spring-mybatis.xml配置4.dao、service层、代码测试spring-mybatis的整合过程步骤 1.导包,spring的jar包,mybatis的jar包 <!--统…...
ssm技术
ssm ssm框架配置 maven项目–》webquickstart pom文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLo…...
MQ消息队列
MQ消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列 消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件 使用消息队列还可以实现异步处理 下图便是消息…...
【JVM技术专题】精心准备了一套JVM分析工具的锦囊「JConsole补充篇」
前提概要 本篇文章主要针对于之前本系列文章的补充版,之前落下了Jconsole分析工具,所以为了了却这个遗憾,所以小编又开了这篇文章,主要针对于Jconsole工具进行相关的应用性能分析。 初识JConsole 【Jconsole(Java Moni…...
基于PHP的高效协同办公管理系统
有需要请私信或看评论链接哦 可远程调试 基于PHP高效协同办公管理系统一 介绍 高效协同办公管理系统基于Yii框架开发,数据库mysql,可以稳定用于商业以及门户级的开发和使用。 二 系统功能 用户 1 办公门户(邮件/日志/汇报/日程/信息中心/通知公告/微博…...
第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组
数据类型检测 请看这篇数据类型检测 渐变色背景生成器 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&…...
【遥感科学】遥感科学绪论
第一章 绪论 本系列适用于梅安新老师的遥感导论复习,也可以作为遥感领域的快速入门文章 一、遥感的基本概念 啥子是遥感?借用童庆禧院士的理解,那就是欲穷千里目,更上一层楼,遥感可以看做人的眼睛或者感知的延伸&…...
Tensorflow图像识别 Tensorflow手写体识别(二)
资源介绍 我们从 MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges 这条链接(MNIST官网)中下载好数据集,如下: 下载下来以后整理成包含四个压缩包的文件MNIST_data(不要解压&#x…...
盘点上海IB国际学校,你会选哪一所呢?
之前,小编给大家盘点了上海热门的AP学校和Alevel学校,同时也介绍了国际课程的具体情况;今天就和大家聊聊上海的IB国际学校。IB即是国际文凭组织IBO(International Baccalaureate Organisation)为全球学生开设从幼儿园到大学预科的课程&#x…...
【QT进阶】Qt Web混合编程之html、 js的简单交互
往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本&…...
vue3 vueUse 连接蓝牙
目录 vueuse安装: useBluetooth: 调用蓝牙API 扫描周期设备 选择设备配对 连接成功 接收蓝牙数据(待测试) 通过web bluttooth读写数据参考 vue3的网页项目连接电脑或者手机上的蓝牙设备,使用vueUse库,可以快速…...
第十五届蓝桥杯大赛软件赛省赛(Java 大学B组)
蓝桥杯 2024年省赛真题 Java 大学B组 试题 A: 报数游戏试题 B: 类斐波那契循环数试题 C: 分布式队列 在找工作,随便写写,安定下来再把去年国赛题解补上 试题 A: 报数游戏 本题总分: 5 5 5 分 【问题描述】 小蓝和朋友们在玩一个报数游戏。由…...
R语言使用installr包对R包进行整体迁移
今天分享一个R语言的实用小技巧,如果咱们重新安装了电脑(我重装了电脑)或者因为需要卸载旧版本的R软件,安装新版本的R,那么必然会造成R包的库缺失,需要重新下载,有些还不是官方的R包,…...
高频九问:产品经理面试题解析
01 ▼ 需求评审时研发说需求实现不了怎么办? 1.站在技术的角度,了解无法实现的原因 2.看有哪些可以替代的方案 3.评估替代方案对项目本身的影响,如延迟,如若在可接受范围内,适当的妥协 02 ▼ 是否了解我们公司&a…...
供应链投毒预警 | 开源供应链投毒202403月报发布啦!(含投毒案例分析)
悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获,能够第一时间捕获开源组件仓库中的恶意投毒攻击。在2024年3月份,悬镜供应链安全情报中心在NPM官方仓库࿰…...