自定义社交网络可视化实战:用 Vue.js 与 D3 构建你的专属网络图(Data Science for Beginners 课程作业)
自定义社交网络可视化实战用 Vue.js 与 D3 构建你的专属网络图Data Science for Beginners 课程作业【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners导读本篇文章对应 Data Science for Beginners 第 13 课「Making Meaningful Visualizations」制作有意义的可视化的课后作业在仓库提供的「Dangerous Liaisons危险关系」社交网络可视化示例代码基础上用你自己真实的社交互动数据社交媒体使用记录、家族成员关系等模拟数据构建一个独一无二、可交互的社交网络 Web 应用。读完本文你将掌握D3 网络图在 Vue.js 中的接入方式、createLinks()链接生成逻辑的逐行原理、节点/连线/布局参数的自定义方法以及如何将工程部署为静态 Web 应用并通过评分标准自检。作业目标构建你自己的自定义可视化原作业指令translations/en/3-Data-Visualization/13-meaningful-visualizations/assignment.md要求如下使用本项目提供的代码示例通过模拟你自己的社交互动数据来创建一个社交网络。你可以绘制自己的社交媒体使用情况也可以设计一幅家族成员关系图。构建一个吸引人的 Web 应用展示一个独特的社交网络可视化。拆解下来这项作业包含三个核心环节吃透示例工程理解「危险关系」项目如何把一部小说中的信件往来转化为网络图替换数据源把信件数据换成你自己设计/模拟的社交互动数据字段结构保持一致交付完整项目代码可正常运行并配有一份解释清晰的 README评估标准中明确要求。该作业是第 13 课教学内容的延伸。课程正文3-Data-Visualization/13-meaningful-visualizations/README.md系统讲解了图表类型选择、避免欺骗性图表、颜色运用与可读性设计最终落到「用 D3 在 Vue.js 应用中绘制动画社交网络」这个动手项目上——本作业正是让你在示例项目之上做二次创作。环境准备运行示例工程的先决条件示例工程位于 starter 目录其 README.md 明确要求本机已安装NPM 与 Node.js且 Node 版本 20.0.0该约束同时写入 package.json 的engines字段。依次执行以下命令完成安装、运行与构建# 1. 安装项目依赖会拉取 vue、vue-d3-network、vue/cli-service 等 npm install # 2. 启动开发服务器支持热重载hot-reload npm run serve # 3. 编译并压缩生产构建产物用于部署静态站点 npm run build # 4. 代码检查与修复 npm run lint依赖清单来自 package.jsonvue^3.5.16应用框架vue-d3-network0.1.28基于 Vue.js 与 D3 的网络可视化库本作业核心依赖core-js^3.6.5开发依赖vue/cli-plugin-babel、vue/cli-plugin-eslint、vue/cli-service均为~5.0.8、eslint、eslint-plugin-vue、babel-eslint、vue-template-compiler等启动后npm run serve会在本地起一个开发服务器浏览器打开后即可看到网络图你可以直接拖拽节点把数据在屏幕上打乱重排——这正是vue-d3-network库自带的力导向交互能力。示例工程结构拆解starter/ ├── public/ │ ├── favicon.ico │ └── index.html # 单页应用外壳 ├── src/ │ ├── assets/ │ │ └── letters.json # 小说全部信件的结构化数据1261 行 JSON │ ├── components/ │ │ └── Nodes.vue # 核心组件负责把信件数据渲染成网络图 │ ├── App.vue # 根组件仅挂载 Nodes / │ └── main.js # 经典 Vue 入口new Vue({ render: h h(App) }).$mount(#app) ├── babel.config.js └── package.jsonApp.vue 结构极简模板里只有一个Nodes /全部可视化逻辑都收敛在 Nodes.vue 组件中。letters.json 是《危险关系》Les Liaisons Dangereuses这部 1782 年书信体小说中所有信件的结构化数据。每条记录形如{ letter_num: 1, from: Cécile de Volanges, to: Sophie Carnay, date: 8/3/17**, location: Ursulines }from表示写信人to表示收信人date为写信日期location为写信地点。这个字段结构就是你自定义数据时需要严格对齐的模板。核心实现补全 createLinks() 生成网络连线Nodes.vue 的script中预置了一个待补全的骨架createLinks(characters)方法内部是空的注释写着//complete this codelinks数组也只有一行注释掉的示例{ sid: 1, tid: 2 }。这正是本次作业的核心编码任务。课程给出的完整实现如下来自 课程 README 的 Project 章节//loop through letters let f 0; let t 0; for (var i 0; i letters.length; i) { for (var j 0; j characters.length; j) { if (characters[j] letters[i].from) { f j; } if (characters[j] letters[i].to) { t j; } } this.links.push({ sid: f, tid: t }); }逐行理解这段逻辑双重循环外层遍历letters全部信件内层遍历characters字符/人物数组姓名 → 索引映射当人物名与某封信的from相等时记录写信人的索引f与to相等时记录收信人的索引t。这样就把「字符串姓名」转换成了网络图库要求的数字节点 ID构造连线为每封信push一条{ sid: f, tid: t }——sid为源节点写信人tid为目标节点收信人这正是vue-d3-network库消费连线的标准格式。补全后组件在created()生命周期钩子中依次完成三件事见 Nodes.vue 第 57-86 行定义 15 位核心人物数组如 Chevalier Danceny、Marquise de Merteuil、Vicomte de Valmont 等调用this.createLinks(characters)生成连线为每个角色push一个节点对象this.nodes.push({ id: j, name: characters[j], _size: this.getCount(characters[j]) 20, _color: # Math.floor(Math.random() * 16777215).toString(16), });其中getCount(name)统计的是收到该人物的信件数量letters[i].to name时计数加一_size用收信数 20作为节点半径的基准——收到信越多节点越大从而一眼看出小说叙事中的「关键人物」。_color则随机生成十六进制颜色。模板层通过vue-d3-network组件完成渲染d3-network :net-nodesnodes :net-linkslinks :optionsoptions /布局与样式参数让网络图可读、可交互Nodes.vue 的options计算属性定义了可视化布局的核心参数全部来自vue-d3-network库的配置项参数示例值作用force3000力导向布局的引力强度值越大节点间的排斥/牵引越强size{ w: 600, h: 600 }画布尺寸宽 × 高像素offset{ x: 0, y: 0 }画布偏移量nodeLabelstrue是否显示节点标签人物名linkLabelstrue是否显示连线标签canvasthis.canvas默认false是否使用 Canvas 渲染模式false为 SVG 模式配套的style块还定义了节点与连线的交互反馈选中节点描边为金色#caa455、悬停时节点与连线高亮为黄色并加粗到 5px、连线默认半透明绿色rgba(18, 120, 98, 0.3)等保证网络图既清晰又生动。提示在自定义你的网络图时force、size、nodeLabels、canvas这几个参数最值得调整——节点越多通常需要越大的画布和经过调优的引力强度否则图形会拥挤或散乱。作业核心设计你自己的社交网络数据理解了示例的运行机制后剩下的就是把数据「换血」。作业明确给出了两个可选的创意方向你也可以自由发挥绘制你的社交媒体使用情况例如把「发帖人 / 提及对象 / 回复对象」映射成from/to节点就是你的社交账号与好友设计家族成员关系图例如把「发送方 / 接收方」换成「父母 / 子女」「长辈 / 晚辈」节点是每位家族成员。无论选哪种题材都需要产出两个数据件关系数据对应letters.json的角色每行一条互动记录字段对齐from/to可保留date时间、location地点等附加维度备用。示例{from: Alice, to: Bob, date: 2026-01-05}人物/实体列表对应Nodes.vue中的characters数组把createLinks()里写死的小说人物数组替换成你自己的人物清单。注意清单中的姓名必须与关系数据中的from/to字符串完全一致否则双重循环的相等判断会失配连线将无法生成。数据规模上示例用了 15 个角色与一百多封信件letters.json 共 1261 行。你的自定义数据集可以更小如 5-10 个节点但建议至少让每个节点都有一条连线否则网络图的「关系」语义会不明显。如果你想强调某个维度还可以仿照_size的算法把节点大小改为「发送数量」「互动总次数」等任意度量。参考实现与提交检查仓库在 solution 目录 提供了完成版项目目录结构与 starter 完全一致Nodes.vue中的createLinks()已补全写作业遇到卡点时可以对照参考。原作业的评分标准Rubric三档如下提交前请逐一自检优秀Exemplary合格Adequate待改进Needs Improvement提供一个代码可正常运行的 GitHub 仓库建议将其部署为静态 Web 应用并配有注释清晰、解释项目内容的 README仓库无法正常运行或缺少规范的文档仓库既无法正常运行又缺少规范的文档对照标准可以总结出两条硬性要求代码必须能跑npm install npm run serve无报错网络图正常渲染且可交互拖拽文档必须齐全README 应说明项目是什么、数据从哪来、如何安装运行、可视化表达了什么。关于部署由于这是一个纯前端的 Vue CLI 工程npm run build生成的静态产物可以部署到任意静态网站托管服务上作为在线展示的成品。让可视化「有意义」把课程原则融入你的作品作为第 13 课「Making Meaningful Visualizations」的作业作品不应只是「能跑」还应体现课程反复强调的设计原则详见 课程 README颜色即含义示例用随机色Math.random()生成节点颜色纯粹是占位。自定义作品时建议用语义化配色如红色表权力、蓝色表信任、绿色表生态/好运并考虑色盲用户的可访问性避免欺骗性呈现不要通过反转坐标轴、截断刻度、乱序日期等手段制造误导性结论节点大小、连线粗细必须如实反映数据量可读性优先标签、图例、悬浮提示tooltip能让网络图的信息被快速理解节点较多时合理增大画布、调优force。完成以上全部环节你就拥有了一个真正属于自己、可部署、可讲解的定制化社交网络可视化作品——这正是数据科学中最重要的一项基础能力把原始数据转化为能回答问题的有意义可视化。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考