主要工作:

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

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

具体步骤:

1.分析须要的内容

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

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

 #coding=utf-8
import xlrd def readData(url):
data=xlrd.open_workbook(url)
table=data.sheets()[0] #多张sheet的情况读取第一张
nrows=table.nrows
ncols=table.ncols
list=[]
for rownum in range(0,nrows):
row=table.row_values(rownum)
for i in range(0,ncols): #转码unicode转utf-8
row[i]=row[i].encode('utf-8')
if row:
list.append(row)
return list

2.设计用户数据分析类

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

 #coding=utf-8
# 用户通话信息类记录
class UserDataInfo(object):
def __init__(self):
self.calling_long = 0 #主叫时长
self.called_long = 0 #被叫时长
self.call_long = 0 #总时长 self.calling_times = 0 #主叫次数
self.called_times = 0 #被叫次数
self.call_times = 0 #总次数 self.time_intervel=[] #通话时段
for i in range(0,12):
self.time_intervel.append(0) self.day_intervel=[] #每日通话次数
for i in range(0,31):
self.day_intervel.append(0) self.call_freq= None #通话最频繁

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

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

 #解码时间
def timeDecode(timeStr):
hour = min = sec = 0
if timeStr.find('小时') != -1:
hour = timeStr.split('小时')[0]
timeStr = timeStr.split('小时')[1]
if timeStr.find('分') != -1:
min = timeStr.split('分')[0]
timeStr = timeStr.split('分')[1]
if timeStr.find('秒') != -1:
sec = timeStr.split('秒')[0] timelong = int(sec) + int(min) * 60 + int(hour) * 60 * 60
return timelong #编码时间
def timeEncode(time):
strtime=str(time%60)+"秒"
time/=60
if(time!=0):
strtime=str(time%60)+"分"+strtime
time/=60
if (time != 0):
strtime = str(time % 60) + "小时"+strtime
return strtime #解码日期
def dateDecode(dateStr):
dateStrlist=dateStr.split(' ')
dayStr=dateStrlist[0]
dayStrlist=dayStr.split('-')
day=dayStrlist[-1] timeStr=dateStrlist[-1]
timeStrlist=timeStr.split(':')
timeHour=timeStrlist[0] dayAndHour=[]
dayAndHour.append(day)
dayAndHour.append(timeHour)
return dayAndHour

4.用户行为分析

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

 #行为分析
def behavior_analysis(datalist):
t=1
for line in datalist:
if(t==1):
t=3
continue
dh=dateDecode(line[2])
day=int(dh[0])
hour=int(dh[-1]) user.day_intervel[day]+=1
user.time_intervel[hour/2]+=1 timeStr=line[3]
timelong = timeDecode(timeStr) if line[4]=='主叫':
user.calling_times+=1
user.calling_long+=timelong
if line[4]=='被叫':
user.called_times+=1
user.called_long+=timelong user.call_times=user.calling_times+user.called_times #总次数
user.call_long=user.calling_long+user.called_long #总时长

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

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

 #数据可视化
def dataVisualization(userinfo):
plt.plot(userinfo.day_intervel, 'k')
plt.plot(userinfo.day_intervel, 'bo')
plt.xlabel(u'日 期')
plt.ylabel(u'通话次数')
plt.title(u'每日通话分析')
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y', alpha=0.4)
plt.show()

完整代码:

 #coding=utf-8
import xlrd
import matplotlib.pyplot as plt
import UserDataInfo def readData(url):
data=xlrd.open_workbook(url)
table=data.sheets()[0] #多张sheet的情况读取第一张
nrows=table.nrows
ncols=table.ncols
list=[]
for rownum in range(0,nrows):
row=table.row_values(rownum)
for i in range(0,ncols): #转码unicode转utf-8
row[i]=row[i].encode('utf-8')
if row:
list.append(row)
return list #行为分析
def behavior_analysis(datalist):
t=1
for line in datalist:
if(t==1):
t=3
continue
dh=dateDecode(line[2])
day=int(dh[0])
hour=int(dh[-1]) user.day_intervel[day]+=1
user.time_intervel[hour/2]+=1 timeStr=line[3]
timelong = timeDecode(timeStr) if line[4]=='主叫':
user.calling_times+=1
user.calling_long+=timelong
if line[4]=='被叫':
user.called_times+=1
user.called_long+=timelong user.call_times=user.calling_times+user.called_times #总次数
user.call_long=user.calling_long+user.called_long #总时长 #解码时间
def timeDecode(timeStr):
hour = min = sec = 0
if timeStr.find('小时') != -1:
hour = timeStr.split('小时')[0]
timeStr = timeStr.split('小时')[1]
if timeStr.find('分') != -1:
min = timeStr.split('分')[0]
timeStr = timeStr.split('分')[1]
if timeStr.find('秒') != -1:
sec = timeStr.split('秒')[0] timelong = int(sec) + int(min) * 60 + int(hour) * 60 * 60
return timelong #编码时间
def timeEncode(time):
strtime=str(time%60)+"秒"
time/=60
if(time!=0):
strtime=str(time%60)+"分"+strtime
time/=60
if (time != 0):
strtime = str(time % 60) + "小时"+strtime
return strtime #解码日期
def dateDecode(dateStr):
dateStrlist=dateStr.split(' ')
dayStr=dateStrlist[0]
dayStrlist=dayStr.split('-')
day=dayStrlist[-1] timeStr=dateStrlist[-1]
timeStrlist=timeStr.split(':')
timeHour=timeStrlist[0] dayAndHour=[]
dayAndHour.append(day)
dayAndHour.append(timeHour)
return dayAndHour def printout():
print "被叫次数:", user.called_times
print "被叫时长:", timeEncode(user.called_long) print "主叫次数:", user.calling_times
print "主叫时长:", timeEncode(user.calling_long) print "总次数:",user.call_times
print "总时长:",timeEncode(user.call_long) print "日期",user.day_intervel
print "时段",user.time_intervel #数据可视化
def dataVisualization(userinfo):
plt.plot(userinfo.day_intervel, 'k')
plt.plot(userinfo.day_intervel, 'bo')
plt.xlabel(u'日 期')
plt.ylabel(u'通话次数')
plt.title(u'每日通话分析')
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y', alpha=0.4)
plt.show() url="/Users/SeeKHit/Downloads/2017年01月语音通信.xls"
datalist=readData(url) user=UserDataInfo.UserDataInfo()
behavior_analysis(datalist) printout()
dataVisualization(user)

用户通话信息类

 #coding=utf-8
# 用户通话信息类记录
class UserDataInfo(object):
def __init__(self):
self.calling_long = 0 #主叫时长
self.called_long = 0 #被叫时长
self.call_long = 0 #总时长 self.calling_times = 0 #主叫次数
self.called_times = 0 #被叫次数
self.call_times = 0 #总次数 self.time_intervel=[] #通话时段
for i in range(0,12):
self.time_intervel.append(0) self.day_intervel=[] #每日通话次数
for i in range(0,31):
self.day_intervel.append(0) self.call_freq= None #通话最频繁

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

  1. Python数据分析练手:分析知乎大V

    原文链接:https://zhuanlan.zhihu.com/p/92768131?utm_source=tuicool&utm_medium=referral 知乎,可以说是国内目前最大的 ...

  2. Python之路,Day22 - 网站用户访问质量分析监测分析项目开发

    Python之路,Day22 - 网站用户访问质量分析监测分析项目开发   做此项目前请先阅读 http://3060674.blog.51cto.com/3050674/1439129  项目实战之 ...

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

    电商打折套路分析 ——2016天猫双十一美妆数据分析 数据简介 此次分析的数据来自于城市数据团对2016年双11天猫数据的采集和整理,原始数据为.xlsx格式 包括update_time/id/tit ...

  4. Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析

    Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析 今天主要讲述的内容是关于决策树的知识,主要包括以下内容:1.分类及决策树算法介绍2.鸢尾花卉数据集介绍3.决策树实现鸢尾数据集分析.希望这篇 ...

  5. Python数据分析之路(一)查询和统计

    0. 如何入门数据分析 关注沙漠之鹰的同学一定看过沙漠君写得很多篇数据分析文章,比如分析房价,车价,预测机动车摇号这些话题.其实文章中所有的分析都使用了Python和它非常强大的数据分析库Pandas ...

  6. 【读书笔记与思考】《python数据分析与挖掘实战》-张良均

    [读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...

  7. (python数据分析)第03章 Python的数据结构、函数和文件

    本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...

  8. Python数据分析【炼数成金15周完整课程】

    点击了解更多Python课程>>> Python数据分析[炼数成金15周完整课程] 课程简介: Python是一种面向对象.直译式计算机程序设计语言.也是一种功能强大而完善的通用型语 ...

  9. 快速入门 Python 数据分析实用指南

    Python 现如今已成为数据分析和数据科学使用上的标准语言和标准平台之一.那么作为一个新手小白,该如何快速入门 Python 数据分析呢? 下面根据数据分析的一般工作流程,梳理了相关知识技能以及学习 ...

随机推荐

  1. Samba简单应用

    一.Samba 简介 1.介绍 Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用:Samba 即可以用于Windows和Linux之间的共享文件,也一样用于L ...

  2. 关于Pytorch中accuracy和loss的计算

    这几天关于accuracy和loss的计算有一些疑惑,原来是自己还没有弄清楚. 给出实例 def train(train_loader, model, criteon, optimizer, epoc ...

  3. Foxmail:导入联系人

    打开“Foxmail”之后,如下图所示: 接下来,在左下角找到箭头指示的位置处,点击此处: 接下来,在邮箱的右上角找到如图所示的位置,鼠标点击此处: 点击之后,如下图所示,找到“导入”: 点击“导入& ...

  4. webpack打包vue项目之后怎么启动&注意事项

    参考路径:https://blog.csdn.net/cn_yaojin/article/details/80164477 参考路径:https://www.imooc.com/article/323 ...

  5. PHP7 开启Zend Opcache

    PHP7 开启Zend Opcache 作为PHP这10年来最大的版本与性能升级,PHP7在多次的测试中都表现出很夸张的性能提升,然而,为了让它能发挥出最大的性能,需要手动开启PHP自带的opcach ...

  6. [Python3] 033 异常

    目录 异常 1. 简介 2. 异常的分类 3. 出现异常小例子 例子 4. 异常处理 5. 解决异常小例子 5.1 例子1 5.2 例子2 5.3 例子3 5.4 例子4 6. 手动引发异常 6.1 ...

  7. win32 API 笔记1

    //==================HOOK钩子========================= 可以用来HOOK掉系统对某些函数的的调用 //==================终止系统进程= ...

  8. FFmpeg4.0笔记:采集桌面

    Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff // 采集桌面 void test_desktop() { boo ...

  9. Java设计模式之外观模式和最少知识原则

    外观模式: 外观模式:提供一个统一的接口,来访问子系统中一群功能相关接口(类似一键启动,一键关闭等等) 外观模式定义了一个高层接口,让子系统更容易使用 降低对外接口耦合度 外观模式和命令模式各自侧重点 ...

  10. python基础_面向对象

    面向对象定义 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance) ...