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

主要工作:

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-8
13             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 * 60
14     return timelong
15
16 #编码时间
17 def timeEncode(time):
18     strtime=str(time%60)+"秒"
19     time/=60
20     if(time!=0):
21         strtime=str(time%60)+"分"+strtime
22         time/=60
23         if (time != 0):
24             strtime = str(time % 60) + "小时"+strtime
25     return strtime
26
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]+=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+=timelong
22         if line[4]==‘被叫‘:
23             user.called_times+=1
24             user.called_long+=timelong
25
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_times
100     print "总时长:",timeEncode(user.call_long)
101
102     print "日期",user.day_intervel
103     print "时段",user.time_intervel
104
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)

用户通话信息类

 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       #通话最频繁

时间: 2024-12-17 01:50:37

【Python数据分析】用户通话行为分析的相关文章

Python数据分析、数据采集、数据可视化、图像数据处理分析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

电商打折套路分析 —— Python数据分析练习

电商打折套路分析 --2016天猫双十一美妆数据分析 数据简介 此次分析的数据来自于城市数据团对2016年双11天猫数据的采集和整理,原始数据为.xlsx格式 包括update_time/id/title/price/店名,共5个字段,其中id为商品的唯一标识,店名为品牌名. 分析工具 主要使用了Python中的Pandas库进行数据处理,利用matplotlib绘制分析图表,利用bokeh进行了可视化展示. 当前使用版本:Python 3.6.5 |Anaconda, Inc.| (defau

Python数据分析案例(实战)视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

Python数据分析 从入门到精通 视频教程 教学视频

课程简介: ----------------------课程目录------------------------------ Python数据分析篇第一部分. Python基础第一课:Python的概览--Python的基本介绍.安装与基本语法.变量类型与运算符第二课:了解Python流程控制--条件.循环语句与其他语句第三课:常用函数--函数的定义与使用方法.主要内置函数的介绍第四课:NumPy基础--数组的创建.组合与分割 第二部分 数据分析的准备第五课:了解数据--数据加载.储存与文件格式

[Python数据分析]新股破板买入,赚钱几率如何?

这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. ================================================================ Python基础: 中国大学Mooc,南京大学,张莉老师 -<用Python玩转数据> 了解基本的语法和常用函数就行了,其他的用的时候再搜. 财经数据源: TuShare

Python数据分析入门

Python数据分析入门 最近,Analysis with Programming加入了Planet Python.作为该网站的首批特约博客,我这里来分享一下如何通过Python来开始数据分析.具体内容如下: 数据导入 导入本地的或者web端的CSV文件: 数据变换: 数据统计描述: 假设检验 单样本t检验: 可视化: 创建自定义函数. 数据导入 这是很关键的一步,为了后续的分析我们首先需要导入数据.通常来说,数据是CSV格式,就算不是,至少也可以转换成CSV格式.在Python中,我们的操作如

Androidframework窃取用户隐私病毒分析

一. 恶意行为 1.病毒启动后申请root权限,hook系统服务进程,影响用户设备正常关机: 2.接收广播,私自进行拍照并上传至服务器等行为: 3.窃取用户短信,联系人,地理等信息并上传: 4.拦截短信并上传至服务器. 二. 流程图 三. 详细分析 1.软件自身dex分析 软件运行后启动服务com.phone.CService,调用hide()方法隐藏图标, 申请root权限 注册大量广播接收器: PictureAgainReceiver用于接收广播picture.again调用SelfCame

数据分析第二章确定分析思路

1. 常用的数据分析方法论 1)PEST分析法:PEST分析法用于对宏观环境的分析.对宏观环境因素作分析时,由于不同行业和企业有其自身特点和经营需要,分析的具体内容会有差异,但一般都应对政治(Political)经济(Economic)技术(Technological)社会(Social)这四大类影响企业的主要外部环境因素进行分析,这种方法简称为PEST分析法 2)5W2H分析法:why,what,who,when,where.how,how much 3)逻辑树:将问题的所有子问题分层罗列,从

基于Python数据分析与机器学习案例实战教程

课程--基于Python数据分析与机器学习案例实战教程 分享网盘下载--https://pan.baidu.com/s/1jHSaRAY 密码: xk37 课程背景基于数据分析与机器学习领域,使用python作为课程的实战语言,随着大数据与人工智能领域日益火爆,数据分析和机器学习建模成了当下最热门的技术,课程旨在帮助同学们快速掌握python数据分析包以及经典机器学习算法并通过对真实数据集分析进行实战演示. 课程风格通俗易懂,基于真实数据集案例实战. 主体课程分成三个大模块 (1)python数