主要工作:

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. Leetcode之动态规划(DP)专题-877. 石子游戏(Stone Game)

    Leetcode之动态规划(DP)专题-877. 石子游戏(Stone Game) 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最 ...

  2. 【神经网络与深度学习】【C/C++】ZLIB学习2

    Zlib文件压缩和解压 开源代码:http://www.zlib.net/ zlib使用手册:http://www.zlib.net/manual.html zlib wince版:http://ww ...

  3. Elasticsearch-如何识别一篇文档

    ES-识别文档 为了识别同一个索引中的某篇文档,ES使用_uid中的文档类型和ID结合体._uid字段是由_id和_type字段组成,当搜索或者检索文档的时候总是能获得这两项信息. FengZhend ...

  4. P1004方格取数

    这是提高组得一道动态规划题,也是学习y氏思考法的第一道题. 题意为给定一个矩阵,里面存有一些数,你从左上角开始走到右下角,另一个人从右下角开始走到左上角,使得两个人取数之和最大,当然一个数只可以取走一 ...

  5. git使用技巧集合(持续更新中)

    git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...

  6. Java 从入门到精通随笔1

    1.java中的main方法必须声明为public static void.String args[]是一个字符串类型的数组,是main()方法的参数. 2.基本数据类型Java有8种基本数据类型:数 ...

  7. pycharm 快捷键练习 和基本英语单词练习

    通过练习 一下快捷键 打代码的速度得到提升 pycharm以下 快捷键+快捷键意义 ctrl+a 全选 ctrl+c 复制(不选中默认复制一行) ctrl+v 粘贴 ctrl+x 剪切 ctrl+f ...

  8. 使用Python基于HyperLPR/Mask-RCNN的中文车牌识别

    基于HyperLPR的中文车牌识别 Bolg:https://blog.csdn.net/lsy17096535/article/details/78648170 https://www.jiansh ...

  9. Tomcat Connector(BIO, NIO, APR)三种运行模式(转)

    Tomcat支持三种接收请求的处理方式:BIO.NIO.APR . BIO 阻塞式I/O操作即使用的是传统 I/O操作,Tomcat7以下版本默认情况下是以BIO模式运行的,由于每个请求都要创建一个线 ...

  10. 如何用纯 CSS 绘制一个世界上不存在的彭罗斯三角形

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RyvgMZ 可交互视频教 ...