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: Epoch时间, 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

资源

© . All rights reserved.