关注
弱弱继续用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)
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
04-14 19:18
门头沟学院 化工工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
15272次浏览 274人参与
# 硬件人你反向读研了吗 #
39424次浏览 608人参与
# 京东TGT #
23986次浏览 149人参与
# 硬件人秋招的第一个offer #
65198次浏览 1081人参与
# 非技术岗投递进展 #
137416次浏览 1222人参与
# 滴滴工作体验 #
22906次浏览 123人参与
# 材料进Fab厂真的劝退吗? #
35731次浏览 158人参与
# 机械求职避坑tips #
40726次浏览 355人参与
# 不考虑转正,实习多久合适 #
23686次浏览 117人参与
# 机械只有转码才有出路吗? #
125786次浏览 1590人参与
# 职场新人生存指南 #
329730次浏览 7064人参与
# 互联网回暖,腾讯要招5000+人! #
263437次浏览 4888人参与
# 面试经验谈 #
10681次浏览 161人参与
# vivo求职进展汇总 #
208556次浏览 1341人参与
# 异地恋该为对方跳槽吗 #
21931次浏览 115人参与
# 硬件人更看重稳定还是高薪 #
37128次浏览 199人参与
# 租房找室友 #
26807次浏览 142人参与
# 你遇到过哪些神仙同事 #
69033次浏览 623人参与
# 25届如何提前做秋招准备? #
163787次浏览 2451人参与
# 携程求职进展汇总 #
485896次浏览 3577人参与
# 深信服求职进展汇总 #
188324次浏览 1692人参与