关注
弱弱继续用python
完成工作:
1.使用python的xlrd模块读excel的数据,对数据时间进行解码和编码处理,统计用户的通话时长,主被叫次数,通话时段,每日通话次数
2.使用matplotlib把用户的行为数据简单的做个可视化,就是画个图
#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 #通话最频繁
#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)
查看原帖
点赞 评论
相关推荐
牛客热帖
正在热议
# 牛客帮帮团来啦!有问必答 #
510084次浏览 8804人参与
# 如何判断面试是否凉了 #
901717次浏览 13897人参与
# 写简历别走弯路 #
269254次浏览 3296人参与
# 实习与准备秋招该如何平衡 #
157109次浏览 2939人参与
# 学历贬值真的很严重吗? #
2901次浏览 41人参与
# 最后再改一次简历 #
768372次浏览 10924人参与
# 我的实习日记 #
392758次浏览 7191人参与
# 运营面经 #
6820次浏览 182人参与
# 快手工作体验 #
47772次浏览 902人参与
# 春招你拿到offer了吗 #
336440次浏览 5036人参与
# 硬件/芯片公司工作体验 #
15371次浏览 226人参与
# 如何写一份好简历 #
232178次浏览 3599人参与
# 实习,投递多份简历没人回复怎么办 #
893975次浏览 15968人参与
# 重来一次,我还会选择这个专业吗 #
81217次浏览 1260人参与
# 通信硬件人笔面经互助 #
90653次浏览 1863人参与
# 你觉得找工作该拿大厂还是小厂练手 #
48330次浏览 716人参与
# 我的上岸简历长这样 #
147806次浏览 2969人参与
# 你们的毕业论文什么进度了 #
513850次浏览 5365人参与
# 选了这个offer,你有没有后悔? #
89036次浏览 793人参与
# 现在还是0offer,延毕还是备考 #
336105次浏览 4340人参与