知识图谱并不难,用Neo4j和Python打造社交图谱(中)

知识图谱是一种用于表示和存储知识的图形化知识库,它描述了现实世界中实体、概念、实体间的关系以及属性等信息。知识图谱的构建需要从多个来源收集数据,并使用自然语言处理、机器学习等技术进行数据清洗、实体识别、关系抽取等处理,最终形成一个结构化的知识库。

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

C.查看推T的数据

正如在开头提到的,在本文中,将使用Neo4j来探索推T的数据。这些数据从推T的API中收集,存储在MongoDB中,并从那里导出为JSON文件。

数据中的每个条目都包含三个主要的键:

推T数据的每个集合(样本)中包括的键。

  • _id:一个由MongoDB自动生成的ID,可以忽略它。

  • data:包括推文的元数据,如推文的唯一ID、创建时间、语言等。

  • includes: 包括关于用户的元数据,推文和任何媒体(视频、图片等)(如果有的话)。

本文将专注于“includes”键下的数据,因为可以从那里提取想要用于此项目目的的所有信息。

在“inlcudes”键下主要有三个键:

  • users:这里可能有(如上图所示)两个子键:“0”和“1”。“0”始终存在,它包含有关正在探索的推文作者的多个数据。当提到推文的“作者”时,不一定是指原作者,而是指发布推文的用户。帖子可以是原始推文、回复、引用或转推。如果推文中有“引用对象”,例如另一个用户或另一条推文,则键“1”存在。在键“1”下,可以找到与键“0”下包含的信息类似的信息,但在这种情况下,信息是关于引用用户的。例如,如果用户A回复了用户B的推文,则有关用户A的信息将在键“0”下找到,而用户B的信息将在键“1”下找到。

  • tweets:包含有关推文的信息。与“users”键相同的逻辑适用:“0”子键包含“用户-0”发布的推文信息,而“1”包含“用户-1”发布的推文信息。

  • media:包含有关推文中可能存在的任何媒体的信息。在分析中没有使用这个键,因此可以在本文中忽略它。

了解了不同的相关键之后,再看看是如何处理数据的:在获取JSON文件后,创建了一个Python脚本来解析文件并提取在Neo4j中进行分析所需的字段。

更具体地说,使用想要在Neo4j中构建的图形模型的节点和关系相关的数据创建了不同的pandas数据框。然后,创建了想要运行的查询,并运行它们以便在Neo4j中创建和探索图形模型。

为了让你了解上述情况,下面是处理有关用户的数据而运行的代码的摘要版本,以及相应的输出:

import json
import pandas as pd

# 从文件中加载数据到Python
tweets_json = 'C:\\Path\\to\\json\\file.json'
with open(tweets_json, encoding='utf-8') as data_file:
    data = json.load(data_file)

# 初始化`users_dict`
users_dict = {'user_id': [],
             'username': [],
             'followers_count': []}

# 提取相关数据
for tweet in data:
    # 提取用户0信息,即Tweet作者信息(tweet/reply/quote/retweet)。
    user_id_0 = tweet['includes']['users'][0]['id']
    username_0 = tweet['includes']['users'][0]['username']
    user_followers_count_0 = tweet['includes']['users'][0]['public_metrics']['followers_count']
    
    # 将用户数据保存到一个字典中
    users_dict['user_id'].append(user_id_0)
    users_dict['username'].append(dusername_0)
    users_dict['followers_count'].append(user_followers_count_0)

# 将`users_dict`转换为`pandas`数据框架
users_df = pd.DataFrame(users_dict)

# 删除任何潜在的重复值
users_df = users_df.drop_duplicates(subset=['user_id'], keep='first')
                   .reset_index(drop=True)
users_df.head()

为用户收集的数据的结果数据框。

在继续介绍如何通过Python在Neo4j中创建和探索图形模型之前,应该提到,使用neo4j库来连接Python实例和本地Neo4j实例。本文使用如下所示的代码完成了这个工作:

from neo4j import GraphDatabase

# 建立数据库连接
db_connection = GraphDatabase.driver(uri = "bolt://localhost:7687", 
                                     auth=("neo4j", "<YOUR_PASSWORD_HERE>"))
# 创建一个会话对象,用于运行任何Cypher查询
session = db_connection.session()

在pandas数据框中收集数据并将Python实例连接到本地Neo4j之后,剩下的就是创建和运行Cypher查询。要使用展示的数据创建用户节点,运行以下代码块:

# 用户节点
for index, row in users_df.iterrows():
    create_user_statement = 'CREATE (u:User {{userid: \'{}\', username: \'{}\', followers_count: \'{}\'}})' \
        .format(row['user_id'], 
                row['username'], 
                row['followers_count'])
    session.run(create_user_statement)

正如所看到的,通过解析放在一起的数据框架来创建必要的Cypher查询,然后通过session.run()命令简单地运行查询。

为了使一切更清楚,其余的查询将以纯Cypher的形式呈现,没有周围所有的python代码,以及必要的数据存放位置。

D.使用从Python中收集的推文创建Neo4j图形模型

要在Neo4j中创建图形模型,需要两个组件:节点、节点之间的关系。重要的是要注意,节点和关系都可以以键值对的形式具有许多不同的属性。关系是命名的、有方向的,并且应该始终有一个开始和结束节点。

为了创建图形模型,使用了以下节点,每个节点都有其相应的属性:

  • 1.User节点:user_idusernamefollowers_count

  • 2.Tweet节点:tweet_idtextimpression_counttweet_datereply_count

  • 3.URL节点:url

  • 4.Hashtag节点:hashtag

为了创建上述节点,需要运行以下4个Cypher查询:

CREATE (u:User {userid: '<user_id>', 
                username: '<username>',
                followers_count: '<followers_count>'})
CREATE (t:Tweet {tweet_id: '<tweet_id>', 
                 tweet_text: '<text>', 
                 impression_count: '<impression_count>',
                 created_at: '<created_at>',
                 reply_count: '<reply_count>'})
CREATE (u:URL {url: '<URL>'})
CREATE (h:Hashtag {hashtag: '<hashtag>'})

现在创建节点之间的关系,为图形模型使用了以下关系:

  • TWEETED_ORIGINAL/RETWEETED/REPLIED/QUOTED关系:从User结点到Tweet结点。

  • HAS_URL关系:从Tweet结点到Url结点。

  • HAS_HASHTAG关系:从Tweet节点到Hashtag节点。

  • USED_URL关系:从User结点到Url结点。

  • MENIONED关系:从User结点到User结点。这里需要注意的是,这种关系包含了转发、回复、引用以及在推特正文中对用户的简单提及(例如,像“@用户”)。

这些关系可以通过以下Cypher查询来创建:

// Create User TWEETED_ORIGINAL Tweet relationship
MATCH (u:User), (t:Tweet)
WHERE u.userid = '<user_id>' AND t.tweet_id = '<tweet_id>' 
CREATE (u)-[to:TWEETED_ORIGINAL]->(t) 
RETURN type(to)

// Create User RETWEETED Tweet relationship
MATCH (u:User), (t:Tweet)
WHERE u.userid = '<user_id>' AND t.tweet_id = '<tweet_id>' 
CREATE (u)-[rt:RETWEETED]->(t) 
RETURN type(rt)

// Create User REPLIED Tweet relationship
MATCH (u:User), (t:Tweet)
WHERE u.userid = '<user_id>' AND t.tweet_id = '<tweet_id>' 
CREATE (u)-[rp:REPLIED]->(t) 
RETURN type(rp)

// Create User QUOTED Tweet relationship
MATCH (u:User), (t:Tweet)
WHERE u.userid = '<user_id>' AND t.tweet_id = '<tweet_id>' 
CREATE (u)-[qt:QUOTED]->(t) 
RETURN type(qt)

// Create Tweet HAS_URL Url relationship
MATCH (t:Tweet), (u:URL) 
WHERE t.tweet_id = '<tweet_id>' AND u.url = '<url>'
CREATE (t)-[tu:HAS_URL]->(u)
RETURN type(tu)


// Create Tweet HAS_HASHTAG Hashtag relationship
MATCH (t:Tweet), (h:Hashtag) 
WHERE t.tweet_id = '<tweet_id>' AND h.hashtag = <'hashtag'>
CREATE (t)-[th:HAS_HASHTAG]->(h) 
RETURN type(th)

// Create User USED_URL Url relationship
MATCH (user:User), (u:URL)
WHERE user.userid = '<user_id>' AND u.url = '<url>'
CREATE (user)-[uu:USED_URL]->(u)
RETURN type(uu)


// Create User MENTIONED User relationship
MATCH (u0:User), (u1:User) 
WHERE u0.userid = '<user_id>' AND u1.userid = '<user_id>'
CREATE (u0)-[mnt:MENTIONED]->(u1) 
RETURN type(mnt)

请记住,根据数据的大小和计算机规格,上面列出的查询可能需要一些时间来完成,所以要有耐心,如果看到需要的时间太长,建议先尝试加载一个小的数据样本,以确保在建立整个数据库之前一切正常工作。

运行这些命令后,终于准备好图形数据库,可以开始探索数据了。可以在下图中看到图形的可视化示例:

在Neo4j的GUI中创建的图形模型的一个小示例。

可以用不同的颜色看到在图形模型中的不同节点,以及不同的关系(选择对所有节点使用相同的颜色以使图片更清晰,但如果想要改变,可以通过点击右侧功能区上的关系选择更改它)。

现在准备好通过Neo4j使用不同的查询来探索数据。

推荐书单

《Python数据分析从入门到精通》

《Python数据分析从入门到精通》全面介绍了使用Python进行数据分析所必需的各项知识。全书共分为14章,包括了解数据分析、搭建Python数据分析环境、Pandas统计分析、Matplotlib可视化数据分析图表、Seaborn可视化数据分析图表、第三方可视化数据分析图表Pyecharts、图解数组计算模块NumPy、数据统计分析案例、机器学习库Scikit-Learn、注册用户分析(MySQL版)、电商销售数据分析与预测、二手房房价分析与预测,以及客户价值分析。

该书所有示例、案例和实战项目都提供源码,另外该书的服务网站提供了模块库、案例库、题库、素材库、答疑服务,力求为读者打造一本“基础入门+应用开发+项目实战”一体化的Python数据分析图书。

《Python数据分析从入门到精通》内容详尽,图文丰富,非常适合作为数据分析人员的学习参考用书,也可作为想拓展数据分析技能的普通职场人员和Python开发人员学习参考用书。

《Python数据分析从入门到精通》【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《Python数据分析从入门到精通》在线选购,本书作者:明日科技,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!icon-default.png?t=N5K3https://item.jd.com/13288736.html

精彩回顾

《知识图谱并不难,用Neo4j和Python打造社交图谱(上)》

《了解Python编码风格,让你的代码更好看》

《用Python监控并分析城市空气质量》

《真实对比,OpenAI ChatGPT与谷歌Bard大比拼》

《使用Python中的Pyamaze模块实现遗传算法》

《用好这两个方法,解决Python中的线程同步问题》

《活学活用虚拟环境,Python编程更高效》

《使用Python进行自动化录屏》

微信搜索关注《Python学研大本营》,加入读者群

访问【IT今日热榜】,发现每日技术热点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值