【Python数据分析】用户通话行为分析,python数据分析,主要工作:1.对从网


主要工作:

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

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

具体步骤:

1.分析须要的内容

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

技术分享

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

 1 #coding=utf-8 2 import xlrd 3  4 def readData(url): 5     data=xlrd.open_workbook(url) 6     table=data.sheets()[0]  #多张sheet的情况读取第一张 7     nrows=table.nrows 8     ncols=table.ncols 9     list=[]10     for rownum in range(0,nrows):11         row=table.row_values(rownum)12         for i in range(0,ncols):        #转码unicode转utf-813             row[i]=row[i].encode(‘utf-8‘)14         if row:15             list.append(row)16     return list

2.设计用户数据分析类

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

 1 #coding=utf-8 2 # 用户通话信息类记录 3 class UserDataInfo(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 def timeDecode(timeStr): 3     hour = min = sec = 0 4     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 * 6014     return timelong15 16 #编码时间17 def timeEncode(time):18     strtime=str(time%60)+"秒"19     time/=6020     if(time!=0):21         strtime=str(time%60)+"分"+strtime22         time/=6023         if (time != 0):24             strtime = str(time % 60) + "小时"+strtime25     return strtime26 27 #解码日期28 def dateDecode(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 def behavior_analysis(datalist): 3     t=1 4     for line in datalist: 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]+=113         user.time_intervel[hour/2]+=114 15 16         timeStr=line[3]17         timelong = timeDecode(timeStr)18 19         if line[4]==‘主叫‘:20             user.calling_times+=121             user.calling_long+=timelong22         if line[4]==‘被叫‘:23             user.called_times+=124             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 def dataVisualization(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 import xlrd  3 import matplotlib.pyplot as plt  4 import UserDataInfo  5   6 def readData(url):  7     data=xlrd.open_workbook(url)  8     table=data.sheets()[0]  #多张sheet的情况读取第一张  9     nrows=table.nrows 10     ncols=table.ncols 11     list=[] 12     for rownum in range(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         if row: 17             list.append(row) 18     return list 19  20 #行为分析 21 def behavior_analysis(datalist): 22     t=1 23     for line in datalist: 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+=timelong 41         if line[4]==‘被叫‘: 42             user.called_times+=1 43             user.called_long+=timelong 44  45  46     user.call_times=user.calling_times+user.called_times    #总次数 47     user.call_long=user.calling_long+user.called_long       #总时长 48  49 #解码时间 50 def timeDecode(timeStr): 51     hour = min = sec = 0 52     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     return timelong 63  64 #编码时间 65 def timeEncode(time): 66     strtime=str(time%60)+"秒" 67     time/=60 68     if(time!=0): 69         strtime=str(time%60)+"分"+strtime 70         time/=60 71         if (time != 0): 72             strtime = str(time % 60) + "小时"+strtime 73     return strtime 74  75 #解码日期 76 def dateDecode(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     return dayAndHour 90  91  92 def printout(): 93     print "被叫次数:", user.called_times 94     print "被叫时长:", timeEncode(user.called_long) 95  96     print "主叫次数:", user.calling_times 97     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 def dataVisualization(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 class UserDataInfo(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

【Python数据分析】用户通话行为分析

评论关闭