第 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. redis主从复制几种结构

    1.redis主从: 主从有好几种复制模式 一主一从:一个主服务器,一个从服务器,适合并发量较小的 一主多从:适合于读多写少的,结构: 3. 树状结构

  2. Python基础教程2#练习使用参数的疑难杂点分析

    在书上120页,一个案例是练习使用参数,有可能新手朋友们有可能对有些地方看不懂,在这里讲解出来,仅供大家学习. 这是代码,注释部分是我的解释: #coding:utf-8 #练习使用参数实例.py d ...

  3. bootstrap学习一

    bootstrap学习 一.css概览: 1.使用HTML5标准,<!DOCTYPE html>. 2.移动设备优先: <meta name="viewport" ...

  4. js 正则表达式的使用(标志 RegExp exec() test() compile() $1...$9)

    一,标志 g (global,全局匹配标志) 执行正则表达式匹配或替换时,一般只要搜索到一个符合的文本就停止匹配或替换.使用该标志将搜索所有符合的文本直到文本末尾. i (ignoreCase,忽略大 ...

  5. tyvj/joyoi 1043 表达式计算4

    这题怎么这么毒瘤... 一开始我想转后缀表达式来计算,后来发现有负数...弃疗. 递归求解又发现会有多余括号,我觉得不行... 实在是毒瘤啊! #include <cstdio> #inc ...

  6. [luogu3834][可持久化线段树 1(主席树)]

    题目链接 思路 裸的主席树.查询的时候,通过相减求出区间内左子树中数的个数a.然后判断要查找的k是否比这个z要大.如果比这个值大,那么就去右子树中查找第k - z大,否则去左子树中查找第k大. 代码 ...

  7. c# 获取机器硬件信息 (硬盘,cpu,内存等)

    using System; using System.Collections.Generic; using System.Globalization; using System.Management; ...

  8. CentOS 添加新的硬盘之后不停机操作

    echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/s ...

  9. nginx安装配置: configure命令

    configure命令用来配置nginx编译环境. 该命令定义了系统各方面功能,包括允许nginx使用的连接处理方式. 其执行结果是生成一个Makefile文件. configure命令支持如下参数: ...

  10. zTree基础

    zTree使用 zTree 是一个依靠 jQuery 实现的多功能 “树插件”, 而且拥有较好的浏览器兼容性,有着丰富的功能以及可以自定义样式,足以满足大部分业务的开发. 第一步先导入css及js文件 ...