python 电话呼叫_【Python数据分析】用户通话行为分析

主要工作:

1.对从网上营业厅拿到的用户数据.xls文件,通过Python的xlrd进行解析,计算用户的主叫被叫次数,通话时间,通话时段。

2.使用matplotlib画图包,将分析的结果直观的绘制出来。

具体步骤:

1.分析须要的内容

excel文件中包含很多信息,我们分析的时候须要用到的包括,通话起始时间、通话时长、呼叫类型,号码。

使用xlrd模块,读取excel中的数据,用列表的形式保存下来。

1 #coding=utf-8

2 importxlrd3

4 defreadData(url):5 data=xlrd.open_workbook(url)6 table=data.sheets()[0] #多张sheet的情况读取第一张

7 nrows=table.nrows8 ncols=table.ncols9 list=[]10 for rownum inrange(0,nrows):11 row=table.row_values(rownum)12 for i in range(0,ncols): #转码unicode转utf-8

13 row[i]=row[i].encode('utf-8')14 ifrow:15 list.append(row)16 return list

2.设计用户数据分析类

考虑分析用户的哪些数据,做成一个什么样的效果

1 #coding=utf-8

2 #用户通话信息类记录

3 classUserDataInfo(object):4 def __init__(self):5 self.calling_long = 0 #主叫时长

6 self.called_long = 0 #被叫时长

7 self.call_long = 0 #总时长

8

9 self.calling_times = 0 #主叫次数

10 self.called_times = 0 #被叫次数

11 self.call_times = 0 #总次数

12

13 self.time_intervel=[] #通话时段

14 for i in range(0,12):15 self.time_intervel.append(0)16

17 self.day_intervel=[] #每日通话次数

18 for i in range(0,31):19 self.day_intervel.append(0)20

21 self.call_freq= None #通话最频繁

3.对时间日期字符串解码编码

实用split函数对字符串分割,将x时x分x秒的格式解码成  x秒的数据存储下来

1 #解码时间

2 deftimeDecode(timeStr):3 hour = min = sec =04 if timeStr.find('小时') != -1:5 hour = timeStr.split('小时')[0]6 timeStr = timeStr.split('小时')[1]7 if timeStr.find('分') != -1:8 min = timeStr.split('分')[0]9 timeStr = timeStr.split('分')[1]10 if timeStr.find('秒') != -1:11 sec = timeStr.split('秒')[0]12

13 timelong = int(sec) + int(min) * 60 + int(hour) * 60 * 60

14 returntimelong15

16 #编码时间

17 deftimeEncode(time):18 strtime=str(time%60)+"秒"

19 time/=60

20 if(time!=0):21 strtime=str(time%60)+"分"+strtime22 time/=60

23 if (time !=0):24 strtime = str(time % 60) + "小时"+strtime25 returnstrtime26

27 #解码日期

28 defdateDecode(dateStr):29 dateStrlist=dateStr.split(' ')30 dayStr=dateStrlist[0]31 dayStrlist=dayStr.split('-')32 day=dayStrlist[-1]33

34 timeStr=dateStrlist[-1]35 timeStrlist=timeStr.split(':')36 timeHour=timeStrlist[0]37

38 dayAndHour=[]39 dayAndHour.append(day)40 dayAndHour.append(timeHour)41 return dayAndHour

4.用户行为分析

对用户的数据进行分类处理,计算出行为数据

1 #行为分析

2 defbehavior_analysis(datalist):3 t=1

4 for line indatalist:5 if(t==1):6 t=3

7 continue

8 dh=dateDecode(line[2])9 day=int(dh[0])10 hour=int(dh[-1])11

12 user.day_intervel[day]+=1

13 user.time_intervel[hour/2]+=1

14

15

16 timeStr=line[3]17 timelong =timeDecode(timeStr)18

19 if line[4]=='主叫':20 user.calling_times+=1

21 user.calling_long+=timelong22 if line[4]=='被叫':23 user.called_times+=1

24 user.called_long+=timelong25

26

27 user.call_times=user.calling_times+user.called_times #总次数

28 user.call_long=user.calling_long+user.called_long #总时长

5.实用matplotlib进行数据可视化

绘制折线图,反应用户的日常通话习惯。这里只画了一个图

1 #数据可视化

2 defdataVisualization(userinfo):3 plt.plot(userinfo.day_intervel, 'k')4 plt.plot(userinfo.day_intervel, 'bo')5 plt.xlabel(u'日 期')6 plt.ylabel(u'通话次数')7 plt.title(u'每日通话分析')8 plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y', alpha=0.4)9 plt.show()

完整代码:

1 #coding=utf-8

2 importxlrd3 importmatplotlib.pyplot as plt4 importUserDataInfo5

6 defreadData(url):7 data=xlrd.open_workbook(url)8 table=data.sheets()[0] #多张sheet的情况读取第一张

9 nrows=table.nrows10 ncols=table.ncols11 list=[]12 for rownum inrange(0,nrows):13 row=table.row_values(rownum)14 for i in range(0,ncols): #转码unicode转utf-8

15 row[i]=row[i].encode('utf-8')16 ifrow:17 list.append(row)18 returnlist19

20 #行为分析

21 defbehavior_analysis(datalist):22 t=1

23 for line indatalist:24 if(t==1):25 t=3

26 continue

27 dh=dateDecode(line[2])28 day=int(dh[0])29 hour=int(dh[-1])30

31 user.day_intervel[day]+=1

32 user.time_intervel[hour/2]+=1

33

34

35 timeStr=line[3]36 timelong =timeDecode(timeStr)37

38 if line[4]=='主叫':39 user.calling_times+=1

40 user.calling_long+=timelong41 if line[4]=='被叫':42 user.called_times+=1

43 user.called_long+=timelong44

45

46 user.call_times=user.calling_times+user.called_times #总次数

47 user.call_long=user.calling_long+user.called_long #总时长

48

49 #解码时间

50 deftimeDecode(timeStr):51 hour = min = sec =052 if timeStr.find('小时') != -1:53 hour = timeStr.split('小时')[0]54 timeStr = timeStr.split('小时')[1]55 if timeStr.find('分') != -1:56 min = timeStr.split('分')[0]57 timeStr = timeStr.split('分')[1]58 if timeStr.find('秒') != -1:59 sec = timeStr.split('秒')[0]60

61 timelong = int(sec) + int(min) * 60 + int(hour) * 60 * 60

62 returntimelong63

64 #编码时间

65 deftimeEncode(time):66 strtime=str(time%60)+"秒"

67 time/=60

68 if(time!=0):69 strtime=str(time%60)+"分"+strtime70 time/=60

71 if (time !=0):72 strtime = str(time % 60) + "小时"+strtime73 returnstrtime74

75 #解码日期

76 defdateDecode(dateStr):77 dateStrlist=dateStr.split(' ')78 dayStr=dateStrlist[0]79 dayStrlist=dayStr.split('-')80 day=dayStrlist[-1]81

82 timeStr=dateStrlist[-1]83 timeStrlist=timeStr.split(':')84 timeHour=timeStrlist[0]85

86 dayAndHour=[]87 dayAndHour.append(day)88 dayAndHour.append(timeHour)89 returndayAndHour90

91

92 defprintout():93 print "被叫次数:", user.called_times94 print "被叫时长:", timeEncode(user.called_long)95

96 print "主叫次数:", user.calling_times97 print "主叫时长:", timeEncode(user.calling_long)98

99 print "总次数:",user.call_times100 print "总时长:",timeEncode(user.call_long)101

102 print "日期",user.day_intervel103 print "时段",user.time_intervel104

105 #数据可视化

106 defdataVisualization(userinfo):107 plt.plot(userinfo.day_intervel, 'k')108 plt.plot(userinfo.day_intervel, 'bo')109 plt.xlabel(u'日 期')110 plt.ylabel(u'通话次数')111 plt.title(u'每日通话分析')112 plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y', alpha=0.4)113 plt.show()114

115 url="/Users/SeeKHit/Downloads/2017年01月语音通信.xls"

116 datalist=readData(url)117

118 user=UserDataInfo.UserDataInfo()119 behavior_analysis(datalist)120

121 printout()122 dataVisualization(user)

View Code

用户通话信息类

1 #coding=utf-8

2 #用户通话信息类记录

3 classUserDataInfo(object):4 def __init__(self):5 self.calling_long = 0 #主叫时长

6 self.called_long = 0 #被叫时长

7 self.call_long = 0 #总时长

8

9 self.calling_times = 0 #主叫次数

10 self.called_times = 0 #被叫次数

11 self.call_times = 0 #总次数

12

13 self.time_intervel=[] #通话时段

14 for i in range(0,12):15 self.time_intervel.append(0)16

17 self.day_intervel=[] #每日通话次数

18 for i in range(0,31):19 self.day_intervel.append(0)20

21 self.call_freq= None #通话最频繁

View Code

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值