这可能是你!点击这里提交 Maker 博客系列的摘要。
在当今时代,我们使用并接触到大量数据。这些数据中的大部分都是相互关联的,并具有隐式或显式关系,在这种情况下,我们可以依靠关系数据库进行组织。但大量可用数据使生成可操作的见解变得很困难且复杂。使用自托管图数据库(如 Neo4j)在自己的数据中心中,或通过使用 Google Cloud 的 AuraDB 等提供商在云中运行这些数据库,可以在行业规模上更轻松地生成这些见解,该数据库原生运行 Neo4j。然而,这会导致一些挑战,包括对计算资源的要求,这往往会成为图数据库和图数据科学领域的新进入者的障碍。
这篇博文旨在使开发人员和数据科学家能够在他们的系统上快速创建本地图数据库,并与 Neo4j 及其社区提供的示例数据集进行交互。此外,这篇博文还讨论了如何使用各种开源 Python 工具来切片和切块数据,并应用基本图数据科学算法进行分析和可视化。我们将逐步介绍各个步骤,包括示例数据集的收集、操作和存储。我处理大量关联数据,根据我的经验,图数据库可以有效地表示连接,并促进使用机器学习和数据科学算法来发现潜在模式。
准备数据
在使用 Anaconda 提供的图数据库和数据科学工具时,最重要的步骤是拥有正确的数据。在处理大型数据科学问题时,根据我的经验,算法的应用只是更大拼图中的一小部分;最大的拼图是数据增强和数据清理。
在以下示例中,我们将使用 Neo4j 提供的 示例数据集 中的“slack”数据集。我们将使用 Cypher 查询在 Jupyter Notebook 中使用 Python API 查询数据库,以仅从给定数据集中读取 Slack 频道和消息。
数据预处理
首先,我们将完成一些小型的预处理步骤,以便于实施和学习。这些步骤主要与数据集中包含的消息有关,因为它们包含大部分文本。对于数据集中包含的 Slack 频道,我们只寻找与图表和相关主题相关的频道。
-
删除所有具有channel_join、channel_leave 或channel_archive 子类型的消息,以删除诸如“用户 X 加入频道”之类的噪音消息。
-
使用 NLTK Python 库对消息文本进行分词,并删除停用词。NLTK 库提供了各种开源资源,可用于调整模型和处理数据。
创建图表
现在,我们可以使用基于 Slack 频道名称和 Slack 消息文本的节点创建图表。下图使我们能够可视化 Neo4j 浏览器中指示的关系;它显示了各种消息如何与给定频道连接。就关系而言,我们可能想要关注 IN_CHANNEL 或 MENTIONS_CHANNEL 标签。
为了限制计算范围并减少本地系统的负担,代码尝试限制图表中存在的节点和关系的数量。
运行数据科学算法
对数据进行预处理并转换为适当的节点和关系后,我们可以使用 graphdatascience Python 库,借助 pandas 数据框(广泛用于大型数据管理和数据科学问题)创建内存中的图表对象。graphdatascience 库使运行各种算法成为可能;但是,出于演示目的,我们将在本文中挑选两种不同的数据科学算法。
1. PageRank 算法
我们将运行著名的 PageRank 算法(由 Larry Page 和 Sergey Brin 共同开发),该算法衡量图表中给定节点的重要性,该图表中的节点通过各种关系连接在一起。我们将使用graphdatascience 库来运行 PageRank 算法并生成分数最高的节点。结果使用 seaborn 库绘制,该库广泛用于统计数据可视化和数据表示。
在这里,我们可以看到数据分布相当均匀。请注意,最重要的词是与图表 API 和通用计算和软件行业相关的词。如果系统配置可以扩展,可以在本地对各种更大的图表数据集运行类似的分析,或者在云中运行。
2. Louvain 社区检测
我们还将运行 Louvain 社区检测算法,该算法使用模块化优化来识别社区内边缘的密度与社区外边缘的密度。Louvain 算法是一种层次聚类算法,在多次迭代中运行时,可以将社区合并成单个节点,形成压缩的图表。
在对小型图表运行社区检测后,我们可以观察各种节点如何在 11 个不同社区中分布。使用另一个称为 Plotly 的开源 Python 库还可以可视化分布。Plotly 广泛用于数据科学行业和学术界,用于可视化实验和结果。
尽管数据集很小,但我们可以在上面看到社区检测如何根据开发周期中的各种实用程序或系统部分对数据进行聚类。散点图显示了“托管”、“打包”等词(出现在应用程序开发生命周期的末尾)如何在类似的上下文中讨论,从而位于附近的社区中。
这些是快速创建图数据库应用程序所需的各种步骤,以及在图数据集上运行复杂数据科学算法的正确工具。点击 这里访问一个 Jupyter 笔记本,该笔记本解释并执行上面概述的所有不同步骤。
我希望这篇 Maker 博客文章能够帮助那些刚接触 Python、数据科学或图数据科学的人了解由充满活力的活跃开发人员社区提供的各种开源工具。请记住,有时最好从小处着手,学习快速创建原型的方法,然后再开始部署和使用大型系统进行实验。祝您原型设计愉快,感谢您的阅读!
关于作者
Janit Anjaria 是 Aurora Innovation Inc. 的高级软件工程师,他现在致力于为自动驾驶汽车构建高精度 3D 地图。在加入 Aurora 之前,Janit 在 Uber 先进技术集团的自动驾驶汽车地图团队工作。在 Uber 之前,他在马里兰大学帕克分校空间实验室工作,研究空间数据结构和机器学习。他拥有丰富的专业和学术经验,曾在印度 Flipkart Internet Pvt. Ltd. 构建位置智能平台。在专业和学术生活之外,他是一位开源爱好者,并为 Apache Solr 和 LibreOffice 做出了贡献,并且从 2011 年起就是 Linux 用户。
关于 Maker 博客系列
Anaconda 在 每月博客系列中放大了一些最活跃和最受喜爱社区成员的声音。如果您是一名 Maker,一直在寻找一个机会来讲述您的故事,详细阐述一个喜欢的项目,教育您的同行,并打造您的个人品牌,请考虑 提交摘要。有关更多详细信息,并访问大量教育性数据科学资源和讨论线程,请访问 Anaconda Nucleus。