关于数据挖掘:使用Python和SAS-Viya分析社交网络附代码数据

30次阅读

共计 2820 个字符,预计需要花费 8 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=7303

原文出处:拓端数据部落公众号

 
最近咱们被客户要求撰写对于社交网络的钻研报告,包含一些图形和统计输入。

 

 

 

本示例应用 Python 和 SAS 剖析了 [预防高危药物钻研]() 的后果。这个社交网络有 194 个节点和 273 个边,别离代表 [药物]() 使用者和这些使用者之间的分割。

 

背景

 

SAS Viya 的最新版本提供了用于摸索试验问题的全套翻新算法和通过验证的分析方法,但它也是基于开放式体系结构构建的。这意味着您能够将 SAS Viya 无缝集成到您的应用程序基础架构中,并应用任何编程语言来驱动分析模型。

只管您能够持续进行并简略地收回一系列 REST API 调用来拜访数据   但通常应用编程语言来组织您的工作并使之可反复是更无效的。我决定应用 Python,因为它在年老的数据科学家中很风行。

出于演示目标,我应用一个名为 Jupyter 的接口,该接口是一个凋谢的,基于 Web 的交互式平台,可能运行 Python 代码以及嵌入标记文本。

 

拜访 SAS 云剖析服务(CAS)

SAS Viya 的外围是称为 SAS Cloud Analytic Services(CAS)的剖析运行时环境。为了执行操作或拜访数据,须要连贯会话。您能够应用二进制连贯(倡议应用该连贯来传输大量数据),也能够通过 HTTP 或 HTTPS 通信应用 REST API。

 


 import matplotlib.colors as colors #程序包包含用于色彩范畴的程序
 import matplotlib.cm as cmx
 import networkx as nx #出现网络图
 

 

当初曾经加载了库,咱们能够发连贯到 CAS 并为给定的用户创立会话。

 

 s = CAS('http://sasviya.mycompany.com:8777', 8777, 'myuser', 'mypass')

对于此网络分析,我将应用一个名为hyperGroup 的集。

​
 s.loadactionset('hyperGroup')

​

加载数据 

为了执行任何剖析建模,咱们须要数据。将本地 CSV 文件上载到服务器,并将数据存储到名为 DRUG_NETWORK 的表中。该表只有两列数值类型的 FROMTO

​
 inputDataset = s.upload("data/drug_network.csv", casout=dict(name='DRUG_NETWORK', promote = True))

​

 

在剖析建模期间,您通常必须更改数据结构,过滤或合并数据源。这里的 put 函数将两个数字列都转换为新的字符列 SOURCETARGET

​
 sasCode = 'SOURCE = put(FROM,best.); TARGET = put(TO,best.);\n'
 dataset = inputDataset.datastep(sasCode,casout=dict(name='DRUG_NETWORK2', replace = True))

​

 

数据摸索

建设分析模型时的常见工作是首先理解您的数据。上面的示例返回数据集的前 5 行。

​
 dataset.fetch(to=5, sastypes=False, format=True) #列出开始 5 行

​

 

\
一个简略的汇总统计数据会显示更多详细信息,包含咱们数据集中 273 条边的总数。

 

 dataset.summary()

 

图形布局

首先,咱们将网络可视化,以根本理解其构造和大小。咱们将通过力导向算法来计算顶点的地位。Hypergroup 还能够用于查找群集,计算图布局以及确定网络度量规范,例如社区和核心性。


 s.hyperGroup.hyperGroup(
    createOut = "NEVER", # 这样能够禁止创立通常生成的表
    allGraphs = True, # 解决所有图形
    inputs    = ["SOURCE", "TARGET"], #批示边和指标列
    table     = dataset, # 输出数据集
    edges     = table(name='edges',replace=True), # 后果表蕴含 edge 属性
    vertices  = table(name='nodes',replace=True)  # 蕴含点属性的后果表
 )
 renderNetworkGraph() # 应用 networkx 包创立图形

 

 出现了以下网络,并提供了图形的第一视图。咱们能够看到两个次要分支,并理解高密度和低密度区域。

 

 

社区检测

为了理解社交网络中用户的关系,咱们将剖析集体所属的社区。社区检测或聚类是将网络划分为社区,使社区子图中的链接比社区之间的链接更严密地连贯的过程。同一社区中的人们通常具备独特的属性,并示意他们之间有着亲密的分割。

当初,更新后的节点表蕴含一个附加列 \_Community\_,其中蕴含咱们网络中每个节点的值。给定此数据集,咱们能够执行根本统计信息,例如跨列的不同计数:

后果表显示,确定了咱们网络中的 24 个社区。

 

让咱们看一下最大的 5 个最大社区,并剖析节点散布。

咱们将获取的行重定向到 Python 变量中。咱们将应用它来生成条形图,显示前 5 个最大的社区:

 

 

这表明最大的社区 13 具备 35 个顶点。以下示例显示社区 4 中的节点:

 

 

最初,让咱们再次渲染网络–这次在为节点着色时思考了社区:

 

 

通常,须要依据您的网络规模和冀望的后果来调整社区的数量。将小型社区合并为大型社区。社区能够合并:

  • 随机进入邻近社区
  • 进入顶点数量起码的相邻社区
  • 以最大数量的顶点
  • 进入曾经具备 nCommunities 顶点的社区

上面将通过指定 nCommunities 参数将社区总数缩小到 5。

 

 

集中性剖析

剖析核心性有助于确定谁在网络中很重要。重要人物将被很好地分割起来,因而对网络中的其余集体具备很高的影响力。就咱们针对吸毒者的社交网络而言,这将表明潜在的病毒传播和集体的相干危险行为。

每个度量规范都示意为节点数据集中的输入列。

让咱们应用集中度度量之一作为节点大小再次渲染网络。

 

 

子集网络分支

从咱们的网络来看,社区 2 中的用户仿佛扮演着重要角色。这由社区的整体核心位置,也由该社区中大多数集体的高 beetweenness 值表明。以下代码过滤并渲染了社区 2 的网络,仅使咱们对该子网络有了更好的可视化。

 

 

 

下面的示例应用了规范的二维导向图布局。在更简单的状况下,可能还须要在剖析网络结构时思考应用其余维度。

 

 

 


最受欢迎的见解

1.采纳 spss-modeler 的 web 简单网络对所有腧穴进行剖析

2.用 R 语言和 python 进行社交网络中的社区检测

3. R 语言文本开掘 NASA 数据网络剖析,tf-idf 和主题建模

4.在 R 语言中应用航空公司简单网络对疫情进行建模

5.python 附属关系图模型 基于模型的网络中密集重叠社区检测

6.应用 Python 和 SAS Viya 剖析社交网络

7.关联网络分析:已迁离北京外来人口的数据画像

8.情感语义网络:游记数据感知游览目的地形象

9.用关联规定数据挖掘摸索药物配伍中的法则

正文完
 0