GraphGists

呼叫详细记录 (CDR) 分析

简介

CDR 包含发起呼叫和接收呼叫的电话号码、呼叫时间、呼叫时长以及许多其他属性。对于某些企业来说,CDR 数据量可能达到大数据级别。

Neo4j 已被用于电信行业:减少客户流失 (https://neo4j.ac.cn/news/0227-reducing-telecom-churn/) 和事件日志数据( https://vimeo.com/79390660)。这些应用程序处于电信运营商级别。

churn2

在这里,我将 Neo4j 用于使用电信运营商提供的服务的企业(公司)级别。

business2

解决方案

来电:接听或转到语音邮件。

来电:转发、接听或转到语音邮件。

外呼(分机到分机):接听或转到语音邮件。

外呼(外部):呼叫

直接到语音邮件:语音邮件

此图模型将呼叫详细记录 (CDR) 存储在节点、关系和属性中。呼叫日期建模为整数,遵循文章:https://www.menome.com/wp/neo4j-modelling-dates/

数据模型

DataModel

元数据

Metadata

设置

这是一个 .csv 文件中的数据示例

TME:纪元时间,CLNG:主叫号码,CLED:被叫号码,FCLED:呼叫转发号码(80000 为语音邮件),TYP:呼叫类型,ANS:接听或语音邮件,FWD:转发号码,CPNY:公司名称

TME,CLNG,CLED,FCLED,DUR,TYP,ANS,FWD,CPNY 1449158574,4045551212,4041212555,80000,70,Incoming,VM,FWD,AmeyaSoft 1449159132,9195551212,8191212555,8191212555,458,Outgoing,Ans,Orig,AmeyaSoft 1449159135,8045551212,5401212555,80000,304,Incoming,VM,FWD,AmeyaSoft 1449159146,2705551212,8151212555,8151212555,451,Incoming,Ans,FWD,AmeyaSoft

用于设置数据库的 Cypher 查询(仅使用 50 条呼叫记录)

cdranalytic

来电

MATCH (c:Company)-[]->(n0:CallDate)-[]->(n:Connect)-[r:INCOMING]->(n1)-[]->(n2)
RETURN c, n0, n, r, n1, n2;
Incoming

语音邮件

MATCH (c:Company)-[]->(n0:CallDate)-[]->(n:Connect)-[r:VOICEMAIL]->(n1)-[]->(n2)
RETURN c, n0, n, r, n1, n2;
Voicemail

呼叫分布

Total calls by call type:
MATCH (n:Connect)
WITH count(n) as Total
MATCH (n:Connect)-[r:INCOMING]->(n1)
WITH Total, COUNT(n) as Incoming
MATCH (n:Connect)-[r:OUTGOING]->(n1)
WITH Total, Incoming, COUNT(n) as Outgoing
MATCH (n:Connect)-[r:VOICEMAIL]->(n1)
WITH Total, Incoming, Outgoing, COUNT(n) as Voicemail
RETURN Total, Incoming, Outgoing, Voicemail;
Totalcalls
Phone numbers and total calls by call type:
//Total calls by phone number
MATCH (n:Connect)-[]->(n1)-[]->(n2)
RETURN n2.orig as PhoneNbr, COUNT(n) as Count ORDER BY Count DESC;
//
MATCH (n:Connect)-[r:INCOMING]->(n1)-[]->(n2)
RETURN n2.orig as Incoming, COUNT(n) as Count ORDER BY Count  DESC;
MATCH (n:Connect)-[r:OUTGOING]->(n1)-[]->(n2)
RETURN n2.orig as Outgoing, COUNT(n) as Count ORDER BY Count  DESC;
MATCH (n:Connect)-[r:VOICEMAIL]->(n1)-[]->(n2)
RETURN n2.orig as Voicemail, COUNT(n) as Count ORDER BY Count  DESC;

Count PhoneInCallsOtcallsVM

10 out of 11 calls to 4041212555 went to voicemail.

更多详细信息…​

一个图表,显示给定时间段内多个来电和外呼(使用更大的数据集)。

MATCH (n:Connect)-[r:VOICEMAIL {call: 'Incoming'}]-(n1:VoiceCall)
WITH DISTINCT n.id as inc
MATCH (n1:Connect)-[r1:VOICEMAIL {call: 'Outgoing'}]-(n2:VoiceCall)
WHERE n1.id = inc
WITH DISTINCT n1.id as out
MATCH (x:Company)-[]->(n0:CallDate)-[]->(n2:Connect)-[r2:INCOMING|VOICEMAIL|OUTGOING]->(n11)-[]->(n21)
WHERE n2.id = out
RETURN x, n0, n2, r2, n11, n21;
clusters

资源