第一次个人编程作业

  • 仓库地址

    仓库地址
    ps:由于st的评测工具要求仓库内只能存放学号.py文件,故我创建了一个学号仓库存放代码,即上面这个仓库地址,然后我又创建了一个仓库,里面有以学号命名的文件夹。
    仓库地址
  • P2P表格

    P2P2.1Personal Software process Stages预估耗时(分钟)实际耗时(分钟)
    Planing计划3060
    Estimate估计这个任务需要多少时间2030
    Development开发120150
    Analysis需求分析(包括学习新技术)3030
    Design Spec生成设计文档6060
    Design Review设计复审3030
    Coding Standard代码规范(为目前的开发制定合适的规范)2020
    Design具体设计500600
    Coding具体编码700800
    Code Review代码复审300350
    Test测试(自我测试,修改代码,提交修改)200200
    Reporting报告100150
    Test Repor测试报告150100
    Size Measurement计算工作量2020
    Postmortem & Process Improvement Plan事后总结,并提出过程改进计划5030
    合计23302520
  • 资料

    正则表达式
    cpca
  • 解题思路描述

  1. 拿到题目之后,第一想法是分离姓名、手机号、地址;按照输入格式,分离姓名直接使用python字符串分割.split(','),在分离手机号时,地址中会出现其他数字,这是通过查找博客提取数字找到了正则表达式这个概念,提取出来的数字列表中位数为11的即为手机号,最后是提取地址,在搜索资料时,我发现了CPCA这个库,可以简单的完成四级划分,然后自己再提取关键文字完成五级划分。
  2. 完成五级划分后,在五级划分的基础上提取关键字实现七级划分。
  3. 附加题什么的,tan90°。
  • 设计实现过程

  1. 首先,新建一个函数完成五级划分。
    1330691-20190917115457559-86908829.png
  2. 其次,设计七级划分函数,类似于五级划分最后一步划分详细地址。
  3. 最后,实现功能,输入一个字符串后,以“!”分割,然后判断需要五级划分还是七级划分还是附加题类型,分别调用函数,输出json类型规范地址。
  • 单元测试

  1. 单元测试我先使用了王XX的五个样例实现输出,得到以下输出:
    1330691-20190917121934175-263378214.png
    随后,我又自己编了几个数据进行了以下测试:
    1330691-20190917123512203-1927644285.png
  2. 使用python自带的coverage库测试代码覆盖率:
    1330691-20190917201114882-961787770.png
    由于博客园不支持上传.html文件,于是我只好截图显示coverage report的结果,跟上面的是一样的,只是它会生成一个文件,你会具体看到你的代码哪条是有用到的什么的。1330691-20190917202109191-1183808291.png
    上面这个和下面这个都是运行coverage html -d report之后得到的文件,打开后显示如图。
    1330691-20190917202212522-1171088155.png
  • 性能分析与改进

  1. 我使用了python自带的性能分析模块cProfile得到了结果分析,由于cpca第一次要抓取地址,运行时间比较长,调用各种库导致使用的函数也很多。
    1330691-20190917120355316-1241806932.png
  2. 如果单独测试五级地址划分函数,以下是测试结果:
    1330691-20190917121145641-709838669.png
    如果单独测试七级地址划分函数,以下是结果:
    1330691-20190917183255239-469157183.png
  3. 目前使用库虽然抓取时间有点长,但是比较简洁。后续会继续再优化,试试看能不能减少一点运行时间。
  4. 我再次使用pycharm自带的分析得到一下statistics结果,和cProfile是一样的结果。
    1330691-20190917193613249-1046661266.png
    发现还是在建立四级联动地址的时候(即cpca库)耗时长
  5. 继续使用pycharm得到的call gragh得到下面这个图 (他比较大,然后里面的字需要放大才可以看,基本的是这个样子,我转化为了圆形)1330691-20190917194554860-229693373.png
    放大后看到,主程序耗时11489ms,里面的七级划分,五级划分函数耗时也可以看得到,其他分支就是使用库调用其它函数的耗时
    1330691-20190917194741803-1656681760.png
    其中,放大后找到一个耗时占比最多的函数,显示也是抓取省/市/区的函数,占比78.8%
    1330691-20190917194831345-1642447899.png
  6. 虽然分析了这么多,但是改进...改进应该要把代码全翻盘了,等我再学习一些知识后再改进,这是目前能做到的最优了。
  • 代码说明

    ob = ob.split(",")            #分割名字
    num = re.findall(r"\d+",ob)   #提取手机号
    i=0
    while 1 :
        if i >= len(num) :
            break
        elif len(num[i]) == 11 :
            break
        else:
            i = i+1
    d["手机"] = num[i]
    ob = re.sub(d["手机"],"",ob)   #纯地址,将手机号所在位置用""替换
    ob = cpca.transform(ob)        #划分四级地址
    address = np.array(ob)
    address = address[3]           #查找第四级
    i = 0
    while 1:
        if address[i]=="镇":
            d["地址"][3] = address[:(i+1)]
            d["地址"][4] = address[(i+1):]
            break
        elif address[i]=="乡":
            d["地址"][3] = address[:(i+1)]
            d["地址"][4] = address[(i+1):]
            break
        elif address[i]=="街" and address[i+1]=="道" :
            d["地址"][3] = address[:(i+2)]
            d["地址"][4] = address[(i+2):]
            break
        elif address[i]=="街" :
            d["地址"][3] = address[:(i+1)]
            d["地址"][4] = address[(i+1):]
            break
        elif i>=(len(address)-1) :
            d["地址"][4] = address
            break
        else :
            i = i+1
  1. 需要注意的是由cpca.transform后得到市一个dataframe格式的省/市/区/详细地址的划分,需要将它转换为列表,在进行下面的操作。
  2. 进行详细地址划分的时候我想到的办法就是找关键词进行划分,抓取数据库的话emmmm我的能力有限,之后再学,找到很多数据库都是省市区,先解出来再慢慢优化吧。
  • 异常处理

  1. 第一次使用测试工具时,会出现json格式错误,找了半天没发现哪里有错...最后发现是多输出了一行地址
    1330691-20190919233636771-1296426174.png
  • 心路历程与收获

  1. 这次都在找很多资料,提取关键字能搜索出自己想要的内容的能力更强了.....
  2. 前几天的进度一直如蜗牛一般慢慢前进,快到截止时间了这速度噌噌的就上去了,下次作业还是要慢慢来,不能都堆在最后几天!
  3. 对python库的调用更熟练了,而且有些参数你传送错误也会得到不是你想要的结果,这时要debug好久;
  4. 感觉自己很菜,啥都不知道,还在学XX的时候一些人已经很熟练地使用XX了;
  5. 我现在深深相信且毫不怀疑学完这门课实践能力会进步很多;
  6. 再次立下flag,下次作业一定要分配好时间,不能堆在快结束的时候做!!!
  7. 菜是原罪,努力提升自己才是硬道理。
posted on 2019-09-17 19:50  vulgarian 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/houyaqian/p/11523577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值