DeepWalk代码实战-维基百科词条图嵌入可视化

news2024/11/30 10:54:21

准备工作:

 
从爬虫网站中爬取维基百科See also关联词条:https://densitydesign.github.io/strumentalia-seealsology/

维基百科网站:https://www.wikipedia.org/

在这里插入图片描述

爬取过程:

在这里插入图片描述

下载 tsv 文件:

在这里插入图片描述

import networkx as nx  # 图数据挖掘包
import numpy as np  # 数据分析
import pandas as pd
import random
from tqdm import tqdm  # 进度条
# 数据可视化
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 导入数据
df = pd.read_csv("seealsology-data.tsv", sep='\t')
# 构建无向图
G = nx.from_pandas_edgelist(df, "source", "target", edge_attr=True, create_using=nx.Graph())
# print(len(G))  # 图的节点数


# 随机游走函数
def get_randomwalk(node, path_length):
    '''
    输入起始节点和路径长度,生成随机游走序列
    :param node:
    :param path_length:
    :return:
    '''
    random_walk = [node]
    for i in range(path_length-1):
        # 汇总邻居节点
        temp = list(G.neighbors(node))
        temp = list(set(temp) - set(random_walk))  # 去掉已经访问过的节点
        if len(temp) == 0:
            break
        # 从邻居节点中随机选择下一个节点
        random_node = random.choice(temp)
        random_walk.append(random_node)
        node = random_node
    return random_walk


all_nodes = list(G.nodes())
# print(all_nodes)
# 生成随机游走序列
gamma = 10  # 每个节点作为起始点生成随机游走序列个数
walk_length = 5  # 随机游走序列最大长度
random_walks = []
for n in tqdm(all_nodes):
    for i in range(gamma):
        random_walks.append(get_randomwalk(n, walk_length))
# print(len(random_walks))

from gensim.models import Word2Vec  # 自然语言工具包
model = Word2Vec(vector_size=256,
                 window=4,
                 sg=1,
                 hs=0,
                 negative=10,
                 alpha=0.03,
                 min_alpha=0.0007,
                 seed=14)
# 用随机游走序列构建词汇表
model.build_vocab(random_walks, progress_per=2)
# 训练
model.train(random_walks, total_examples=model.corpus_count, epochs=50, report_delay=1)
# 查看某个节点的Embedding
# print(model.wv.get_vector("deep learning"))
# 找相似词语
# print(model.wv.similar_by_word('deep learning'))

# TSNE降维可视化
from sklearn.manifold import TSNE
X = model.wv.vectors
term2index = model.wv.key_to_index
tsne = TSNE(n_components=2, n_iter=1000)  # 降维到2维
embed_2d = tsne.fit_transform(X)
plt.figure(figsize=(14, 14))
plt.scatter(embed_2d[:, 0], embed_2d[:, 1])
pagerank = nx.pagerank(G)  # 计算PageRank重要度
node_importance = sorted(pagerank.items(), key=lambda x: x[1], reverse=True)
n = 30  # 取PageRank重要度最高的前n个节点
terms_chosen = []
for each in node_importance[:n]:
    terms_chosen.append(each[0])
for item in terms_chosen:
    idx = term2index[item]
    plt.scatter(embed_2d[idx, 0], embed_2d[idx, 1], c='r', s=50)
    plt.annotate(item, xy=(embed_2d[idx, 0], embed_2d[idx, 1]), c='k', fontsize=12)
plt.show()

在这里插入图片描述
参考资料:【DeepWalk代码实战-维基百科词条图嵌入可视化】 https://www.bilibili.com/video/BV1et4y187Gd/?share_source=copy_web&vd_source=9a6c606c6f9df7c015effdcaa7e1fa84

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

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

相关文章

Linux:docker基础操作(3)

docker的介绍 Linux:Docker的介绍(1)-CSDN博客https://blog.csdn.net/w14768855/article/details/134146721?spm1001.2014.3001.5502 通过yum安装docker Linux:Docker-yum安装(2)-CSDN博客https://blog.…

【通讯协议】REST API vs GraphQL

在API设计方面,REST和GraphQL各有缺点。下图显示了 REST 和 GraphQL 之间的快速比较。 REST 使用标准 HTTP 方法(如 GET、POST、PUT、DELETE)进行 CRUD 操作。当您需要在单独的服务/应用程序之间提供简单、统一的接口时,效果很好…

YOLOv8 训练自己的分割数据集

之前写过一篇 使用YOLOv8训练自己的【目标检测】数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】,里面带大家整个流程走过一遍了, 这篇文章我们来介绍如何使用 YOLOv8 训练分割数据集&a…

如何在3dMax中根据AutoCAD地形规划文件对地形进行建模?

在3dMax中根据Autocad地形规划文件对地形进行建模的方法 直入主题,要根据包含地形图的DWG (Autocad) 文件进行地形建模,方法步骤如下: 1.运行3dmax软件,点击“文件(File)->导入(Import&…

搜索 C. Tic-tac-toe

Problem - C - Codeforces 思路:搜索,判断合法性。从起始态用搜索进行模拟,这样可以避免后面判断合法性这一繁琐的步骤。用一个map进行映射当前态及对应的结果。剪枝:如果当前字符串已经被搜索过,则直接跳过去。 代码…

⑤【Sorted Set】Redis常用数据类型: ZSet [使用手册]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 目录 ⑤Redis Zset 操作命令汇总1. zadd 添加或…

JavaScript基础—运算符、表达式和语句、分支语句、循环语句、综合案例-ATM存取款机

版本说明 当前版本号[20231125]。 版本修改说明20231125初版 目录 文章目录 版本说明目录JavaScript 基础 - 第2天运算符算术运算符赋值运算符自增/自减运算符比较运算符逻辑运算符运算符优先级 语句表达式和语句分支语句if 分支语句if双分支语句if 多分支语句三元运算符&am…

命令查询职责分离 (CQRS)

CQRS 的最初需求 多年来,传统的 CRUD(创建、读取、更新、删除)模式一直是系统架构的支柱。在 CRUD 中,读取和写入操作通常由相同的数据模型和相同的数据库模式处理。虽然这种方法简单直观,但随着系统规模的扩大和需求…

四、IDEA创建项目时,Maven Archetype模板工程说明

什么是Maven Archetype Archetype是一个Maven项目的模板工具包,它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目生成参数化的模板。 官方文档:https://maven.apache.org/archet…

Redis面试题:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性)

目录 强一致性:延迟双删,读写锁。 弱一致性:使用MQ或者canal实现异步通知 面试官:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性) 候选人:嗯&#xff…

C++ 数据结构之-最小栈(MinStack)

最小栈 最小栈(Min Stack)是一个支持常数时间复杂度获取栈中最小元素的特殊栈数据结构。通常,标准的栈数据结构只支持在常数时间内执行入栈(push)和出栈(pop)操作,但无法在常数时间内…

痤疮分类-yolov5 学习过程

1、在github上下载yolov5-5.0的源码。 GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

第一百七十九回 自定义SlideImageSwitch

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"SlideSwitch组件"相关的内容,本章回中将介绍自定义SlideImageSwitch.闲话休提,让我们一起Talk Flutter吧。 1. 概…

JVM——几种常见的对象引用

目录 1. 软引用软引用的使用场景-缓存 2.弱引用3.虚引用和终结器引用 可达性算法中描述的对象引用,一般指的是强引用,即是GCRoot对象对普通对象有引用关系,只要这层关系存在, 普通对象就不会被回收。除了强引用之外,Ja…

bugku 渗透测试

场景1 查看源代码 场景2 用dirsearch扫描一下看看 ok看到登录的照应了第一个提示 进去看看 不出所料 随便试试admin/admin进去了 在基本设置里面看到falg 场景3 确实是没啥想法了 找到php在线运行 检查网络,我们发现这个php在线运行会写入文件 那我们是不是写…

WPS AI初体验

1、启动AI 2、输入需要创作的内容 3、创作的内容展示 当然,以下是一份经过润色后的年终总结目录: 一、引言 1. 总结的目的和意义 2. 总结的范畴和覆盖范围 3. 总结的编写原则和标准 二、公司概览 1. 公司简介 2. 公司历史与现状 3. 公司组织架构和团队介…

C编译过程

寻觅GCC 如果你已经安装了Clion&#xff0c;那么gcc就在根目录下。 如果没有&#xff0c;那么需要去minGW的官网下载安装。添加到环境变量中。 编写C代码 #include <stdio.h>#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0]) static int a 123;int main() {int i 0;c…

Android逆向实战 - MIUI调起三方应用系统拦截弹窗分析

近期&#xff0c;发现在部分Android手机调起其他应用时&#xff0c;会弹出一个系统弹窗拦截调起&#xff0c;需要用户二次确认。经过内部众测&#xff0c;发现绝大多数是小米手机&#xff0c;而且跟Android版本没有直接关系&#xff0c;猜测是MIUI某次升级引入的功能。这篇文章…

如何在 Vim 中剪切、复制和粘贴

目录 前言 如何在 Vim 编辑器中复制文本 如何在 Vim 编辑器中剪切文本 如何在 Vim 编辑器中粘贴文本 如何通过选择文本来剪切和复制文本 通过选择文本复制 在 Vim 中选择文本来剪切文本 前言 在本篇 Vim 快速技巧中&#xff0c;你将学习到剪切和复制粘贴的相关知识。 剪…

Linux C语言 22-多进程

Linux C语言 22-进程 本节关键字&#xff1a;进程、exec函数族 相关C库函数&#xff1a;fork、getpid、getppid、getuid、geteuid、getgid、getegid、execl、execlp、execv、execvp、execle、execvpe 什么是进程&#xff1f; 进程是程序的执行过程&#xff1b;进程是动态的&…