数据分析之图算法:基于Spark和Neo4j

  |  

摘要: 《Graph Algorithms Practical Examples in Apache Spark and Neo4j》

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


本书的好处是偏向于具体应用和实践,算法层面偏入门,每一章开头都有一个比较好的图来帮初学者理解,但要图算法里的深入的东西,这本书应该是不够的。

在代码层面,Spark 主要处理数据输入以及和 Neo4j 进行交互,Neo4j 主要是处理所有的算法层面。

注意书里的Neo4j代码已经是旧版本的了,新版本的 Neo4j,有一些区别,例如直接弃用了 Graph Algorithm algo 插件。

导论

  • 何谓图
  • 何谓图分析和图算法
  • 图处理、图数据库、图查询和图算法
  • 为何要关心图算法
  • 图分析用例

图论及其概念

  • 术语
  • 图的类型和结构
  • 图的种类
    • 连通图与非连通图
    • 无权图与加权图
    • 无向图与有向图
    • 无环图与有环图
    • 稀疏图与稠密图
    • 单部图、二部图和k部图
  • 图算法的类型
    • 路径查找
    • 中心性
    • 社团发现

图平台和图处理

  • 图平台和图处理的注意事项
    • 平台注意事项
    • 处理注意事项
  • 典型平台
    • 选择平台
    • Apache Spark
    • Neo4j图平台

路径查找算法和图搜索算法

  • 示例数据:交通图
    • 将数据导入Spark
    • 将数据导入Neo4j
  • 广度优先搜索
  • 深度优先搜索
  • 最短路径算法
    • 何时使用最短路径算法
    • 使用Neo4j实现最短路径算法
    • 使用Neo4j实现加权最短路径算法
    • 使用Spark实现加权最短路径算法
    • 最短路径算法的变体:A* 算法
    • 最短路径算法的变体:Yen的k最短路径算法
  • 所有点对最短路径算法
    • 近观所有点对最短路径算法
    • 何时使用所有点对最短路径算法
    • 使用Spark实现所有点对最短路径算法
    • 使用Neo4j实现所有点对最短路径算法
  • 单源最短路径算法
    • 何时使用单源最短路径算法
    • 使用Spark实现单源最短路径算法
    • 使用Neo4j实现单源最短路径算法
  • 最小生成树算法
    • 何时使用最小生成树算法
    • 使用Neo4j实现最小生成树算法
  • 随机游走算法
    • 何时使用随机游走算法
    • 使用Neo4j实现随机游走算法

中心性算法

  • 示例数据:社交图
    • 将数据导入Spark
    • 将数据导入Neo4j
  • 度中心性算法
    • 可达性
    • 何时使用度中心性算法
    • 使用Spark实现度中心性算法
  • 接近中心性算法
    • 何时使用接近中心性算法
    • 使用Spark实现接近中心性算法
    • 使用Neo4j实现接近中心性算法
    • 接近中心性算法变体:Wasserman & Faust算法
    • 接近中心性算法变体:调和中心性算法
  • 中间中心性算法
    • 桥与控制点
    • 计算中间中心性得分
    • 何时使用中间中心性算法
    • 使用Neo4j实现中间中心性算法
    • 中间中心性算法变体:RA-Brandes算法
  • PageRank算法
    • 影响力
    • PageRank算法公式
    • 迭代、随机冲浪者和等级沉没
    • 何时使用PageRank算法
    • 使用Spark实现PageRank算法
    • 使用Neo4j实现PageRank算法
    • PageRank算法变体:个性化PageRank算法

社团发现算法

  • 示例数据:软件依赖图
    • 将数据导入Spark
    • 将数据导入Neo4j
  • 三角形计数和聚类系数
    • 局部聚类系数
    • 全局聚类系数
    • 何时使用三角形计数和聚类系数
    • 使用Spark实现三角形计数算法
    • 使用Neo4j实现三角形计数算法
    • 使用Neo4j计算局部聚类系数
  • 强连通分量算法
    • 何时使用强连通分量算法
    • 使用Spark实现强连通分量算法
    • 使用Neo4j实现强连通分量算法
  • 连通分量算法
    • 何时使用连通分量算法
    • 使用Spark实现连通分量算法
    • 使用Neo4j实现连通分量算法
  • 标签传播算法
    • 半监督学习和种子标签
    • 何时使用标签传播算法
    • 使用Spark实现标签传播算法
    • 使用Neo4j实现标签传播算法
  • Louvain模块度算法
    • 通过模块度进行基于质量的分组
    • 何时使用Louvain模块度算法
    • 使用Neo4j实现Louvain模块度算法
  • 验证社团

图算法实战

  • 使用Neo4j分析Yelp数据
    • Yelp社交网络
    • 导入数据
    • 图模型
    • Yelp数据概览
    • 行程规划应用程序
    • 旅游商务咨询
    • 查找相似类别
  • 使用Spark分析航班数据
    • 探索性分析
    • 热门机场
    • 源自ORD的延误
    • SFO的糟糕一天
    • 通过航空公司互连的机场

使用图算法增强机器学习

  • 机器学习和上下文的重要性
  • 关联特征提取与特征选择
    • 图特征
    • 图算法特征
  • 图与机器学习实践:链接预测
    • 工具和数据
    • 将数据导入Neo4j
    • 合著者关系图
    • 创建均衡的训练数据集和测试数据集
    • 如何预测缺失链接
    • 创建机器学习管道
    • 预测链接:基本图特征
    • 预测链接:三角形和聚类系数
    • 预测链接:社团发现

Share