【Python数据分析】用户通话行为分析,python数据分析,主要工作:1.对从网
【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数据分析】用户通话行为分析
相关内容
- Python selenium中添加JS并执行JS语句,pythonselenium, 众所
- caffe添加自己编写的Python层,caffepython层,由于Python的灵
- Python+OpenCV图像处理(五)—— ROI与泛洪填充,opencvr
- 深度学习之前期准备工作--python,pip,numpy,tensorflow安装,
- Ubuntu16.04实用python脚本 - JDK的配置!,ubuntu16.04python,前
- Python全栈之路--Django ORM详解,--djangoorm,ORM:(在djan
- 用VSCode写python的正确姿势,vscodepython姿势,最近在学习
- 【Python3爬虫】有道翻译,python3爬虫有道,准备:Python
- python3.6下安装结巴分词需要注意的地方,python3.6分词地
- python安装easygui,pythoneasygui,1.下载在easyg
评论关闭