第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 --> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年10月01日~2014年10月31日通话详单.xls 文件。写代码,对每月通话时间做个统计。

刚好用的是联通呢,科科。

Ok,拿到数据了,保存为文件“comu.xls”,现在打算:

1. 统计通话总时长

2. 统计主叫和被叫次数

3. 统计通话总费用

4. pip了matplotlib,试着把数据做成图表(白pip了,py3自带pylab里包含了matplotlib)

嗯,下面开工!

Code:

import xlrd
import re
from pylab import * def get_xls_data(filename): # 读取xls数据
book = xlrd.open_workbook(filename)
sheet = book.sheet_by_index(0)
content = {}
for i in range(sheet.nrows):
content[i+1] = sheet.row_values(i)[1:]
#print(content[i+1]) print("Liez的3月话费单:") # 统计话费
cost = 0
for i in range(sheet.nrows-1):
cost += float(content[i+2][7])
print("通话费:", round(cost, 2),"元") # 统计被叫主叫次数
call = 0
becall = 0
for i in range(sheet.nrows-1):
if(content[i+2][3] == "主叫"):
call += 1
else:
becall += 1
total = call + becall
print("主叫",call,"次,被叫",becall,"次,共计",total,"次通话") # 统计通话时间
time = {}
for i in range(sheet.nrows-1):
time[i] = content[i+2][1]
day = {}
for i in range(31):
day[i+1] = 0
rday = re.compile('-(\d+?) ')
for i in range(sheet.nrows-1):
daycompile = rday.findall(content[i+2][1])
t = int(daycompile[0])
day[t] += 1
daytimes = (list(day.values()))
dates = (list(day.keys())) # 统计通话时长
sec = 0
min = 0
for i in range(sheet.nrows-1):
rsec = re.compile('(\d+)秒')
rmin = re.compile('(\d+)分')
seci = rsec.findall(content[i+2][2])
mini = rmin.findall(content[i+2][2])
sec += int(seci[0])
if(len(mini)==1):
min += int(mini[0])
if(sec >= 60):
t = sec / 60
sec = sec % 60
min = min + t
print("通话时长:%d分%d秒"%(min,sec)) #三月日通话次数统计图
plt.plot(dates, daytimes)
grid(True)
title("Call Times Every Day")
plt.show() #根据被叫主叫次数作饼状图
figure(2, figsize=(6,6))
fracs = [call/total, becall/total] # 饼状图按被叫和主叫分成两部分的比例
labels = 'Call', 'Becall'
pie(fracs, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90, colors = ("b", "y"))
title("Call & Becall")
show() get_xls_data("comu.xls")

输出:

  Liez的3月话费单:
  通话费:15.15 元
  主叫 45 次,被叫 64 次,共计 109 次通话
  通话时长:193分40秒

两个图表:

ps:感觉这题除了麻烦还是麻烦= - =好在正则表达式用得开始溜起来啦(ง •̀ω•́)ง

【python小练】0020的更多相关文章

  1. 【python小练】0013

    第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 科科...妹子就算了,大晚上的爬点吃的吧.食物图集:抿一口,舔一舔,扭一扭~·SCD 写个简单的爬图爬虫 ...

  2. 【python小练】0014题 和 0015 题

    第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...

  3. 【python小练】0010

    第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...

  4. 【python小练】0005

    第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 首先,iphone5的分辨率是1136x640. if条件句判断横(纵)向是否大于对应的ipho ...

  5. 【python小练】0004

    第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数. 先回忆一下各种括号的用途: () tuple [] list {} dict ([]) set——需要一个list作为输入合集 c ...

  6. 【python小练】0002

    第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. . . .(一脸懵逼) Python访问数据库:(廖雪峰python教程) 1. SQLi ...

  7. 【python小练】0001

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? # coding ...

  8. python小练--使用正则表达式将json解析成dict

    练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...

  9. python 小练手

    监控 主动监控 - 服务器端轮询客户端 被动监控-客户端agent上报到服务器端 混合模式---两种都支持 需求 1个性化的监控需求 2每个服务的监控间隔不同 3混合模式的监控

随机推荐

  1. jquery 表单序列化

    1.序列化为URL 编码文本字符串 var serialize = $("form[name=testForm]").serialize(); console.log(serial ...

  2. listview 样式 LVS_REPORT 与 LVS_EDITLABELS 编辑单元格时,当前行第一列内容不显示

    今天想做一个可编辑单元格的 listview,样式是 LVS_REPORT 与 LVS_EDITLABELS 网上搜索了一些相关资料,照葫芦画瓢写了一个,可测试的时候发现,当从第2列开始编辑的时候,第 ...

  3. Django(二)框架第一篇基础

    https://www.cnblogs.com/haiyan123/p/7701412.html 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref ...

  4. 美丽的webpack-bundle-analyzer

    webpack-bundle-analyzer -- Webpack 插件和 CLI 实用程序,她可以将打包后的内容束展示为方便交互的直观树状图,让我们知道我们所构建包中真正引入的内容: 我们可以借助 ...

  5. 网上找的Backbone.js

    // Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...

  6. linux服务器上tomcat日志中的中文乱码

    转: 修改tomcat应用日志默认编码格式 前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想 ...

  7. eclipse添加market ,maven

    添加market 转载自http://blog.csdn.net/buptdavid/article/details/42423247 Eclipse Marketplace是个插件应用商店,很实用的 ...

  8. nginx buffered to a temporary 解决

    今天开启了nginx的error_log,发现了三个配置问题: 问题一: 2011/07/18 17:04:37 [warn] 2422#0: *171505004 an upstream respo ...

  9. ajax请求封装函数

    写封装函数的套路 1.先写出这个函数原来的基本用法 2.写一个没有形参空函数,将上一步的代码直接作为函数体, 3.根据使用过程中,抽象出来需要变的东西作为形参 function ajax (metho ...

  10. go的net/rpc用法

    一:PRC是什么? RPC(Remote Procedure Call) 远程过程调用,是一个计算通信协议.该协议允许一台计算机上的程序调用另外一台计算机上的程序.远程过程调用就是2个不在同一台计算机 ...