弱弱继续用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)