​本文介绍基于Python3.5.2,根据世界卫生组织发布的0-5岁宝宝生长发育标准百分位数曲线数据,以及宝宝的身长\高,体重,头围监测数据,绘制宝宝的身长\高,体重,头围,体重指数,身长\身高别体重的曲线图,然后生成.docx格式的文档,最后将文档转变为PDF格式的报告。

  • 一、获取数据

在https://www.who.int/childgrowth/standards/zh/找到需要的数据列表,然后利用爬虫获取相应的数据,并将数据以.xls格式存储,最后再读取形成字典形式。

1,用到的库

bs4:版本4.6.0
pandas:版本0.23.4
numpy:版本1.16.4
urllib:Python3.5.2内置版

2,主要知识点

  • 打开网页
from urllib import request
from bs4 import BeautifulSoup as bs
html = request.urlopen(all_url) # all_url网页地址,打开网页
bs_data = bs(html.read(), "html5lib")  # 解析网页
  • 数据存储与读取
import pandas as pd
# 将numpy的array格式的数据变为pandas的DataFrame格式
pd_data = pd.DataFrame(np.array(data_list), columns=df_column)
# 直接写入excel中
pd_data.to_excel(excel_path, sheet_name=name, encoding='gb2312', index=False)
# 读取数据
read_data = pd.read_excel(excel_path, sheet_name=name, header=1)

  • 二、绘图

首先利用matplotlib绘制标准曲线图,然后将监测数据经过三次样条插值,再绘制宝宝的生长曲线图。

1,用到的库

matplotlib:版本3.0.2
scipy:版本1.2.0

2,主要知识点

  • 显示中文与负号
from pylab import mpl # 作图显示中文
mpl.rcParams['font.sans-serif'] = ['STZhongsong']  # 设置中文字体为新宋体
mpl.rcParams['axes.unicode_minus'] = False # 显示负号
  • 设置边框颜色与宽度
ax = plt.gca()  # 获取边框
ax.spines['top'].set_color(self.color)
ax.spines['right'].set_color(self.color)
ax.spines['left'].set_color(self.color)
ax.spines['bottom'].set_color(self.color)
ax.spines['bottom'].set_linewidth(1.2)
ax.spines['left'].set_linewidth(1.2)
ax.spines['top'].set_linewidth(1.2)
ax.spines['right'].set_linewidth(1.2)
  • 设置主、次网格线的刻度、粗度、颜色
from matplotlib.ticker import MultipleLocator
ax.yaxis.set_minor_locator(MultipleLocator(0.5)) # 设置y轴次刻度
ax.xaxis.set_minor_locator(MultipleLocator(1))  # 设置x轴次刻度
ax.xaxis.grid(True, which='major', linewidth=1.2, color=color)  # 使用主刻度绘制x坐标轴的网格
ax.yaxis.grid(True, which='minor', linewidth=0.7, color=color)  # 使用次刻度绘制y坐标轴的网格
ax.xaxis.grid(True, which='minor', linewidth=0.7, color=color)  # 使用次刻度绘制x坐标轴的网格
ax.yaxis.grid(True, which='major', linewidth=1.2, color=color)  # 使用主刻度绘制y坐标轴的网格
  • 设置网格线在绘制线的下方
ax.set_axisbelow(True)
  • 设置x轴标签在图片上方的轴
ax.xaxis.tick_top()
  • 设置标签线的长度、颜色、粗度
from pylab import tick_params, minorticks_on
minorticks_on()
tick_params(axis='y', which='major', width=1, length=4, colors=color)
tick_params(axis='x', which='major', width=1, length=2, colors=color)
tick_params(which='minor', length=0)
  • 设置图中图
ax2 = fig.add_axes([left, bottom, width, height])  # 图中图
  • 绘制表格

table = ax2.table(cellText=cellText, colLabels=colLabels, loc='lower center', cellLoc='left',colWidths=list(table_w))
table.auto_set_font_size(False)  # 取消自动设置字体大小
table.set_fontsize(8) # 表格字体大小设置
table_props = table.properties()
table_cells = table_props['child_artists']
for cell in table_cells:cell._text.set_color(self.color)  # 设置字体颜色cell.set_edgecolor(self.color)   # 设置表格线的颜色
  • 保存图片去掉多余空白
fig = plt.gcf()
fig.savefig(fig_path, dpi=100, bbox_inches='tight')
  • 三次样条插值
from scipy import interpolate
# 三次样条插值插值
t = interpolate.splrep(x_data, y_data, k=3)
day_data = np.linspace(min(x_data), max(x_data), num=1000)
interp_data = interpolate.splev(day_data, t)

  • 三、生成.docx文件

将生成的图片以及宝宝的信息整合到.docx文档中。

1,用到的库

docx:版本0.8.10

2,主要知识点

  • 字体、颜色、大小、位置设置
from docx import Document
from docx.shared import Inches, RGBColor
from docx.oxml.ns import qn
from docx.shared import Pt
import docx.enum.text as s
# 新建Word文档
document = Document()p = document.add_paragraph('')
text1 = p.add_run(str_para) # 添加内容
text1.font.size = Pt(24)                                # 字体大小
text1.bold = True                                       # 字体是否加粗
text1.font.name = 'Times New Roman'                     # 控制是西文时的字体
text1.element.rPr.rFonts.set(qn('w:eastAsia'), '华文中宋')  # 字体设置
p.paragraph_format.alignment = s.WD_ALIGN_PARAGRAPH.CENTER  # 位置设置
text1.font.color.rgb = RGBColor(*color)  # 颜设置
  • 图片居中
document.add_paragraph('')
tab = document.add_table(rows=1, cols=3)  # 添加一个1行3列的空表
cell = tab.cell(0, 1)  # 获取某单元格对象(从0开始索引)
ph = cell.paragraphs[0]
run = ph.add_run()
run.add_picture(ig_path, width=Inches(5))
  • 页边距设置

se = add_docu.add_section()
se.left_margin = Inches(0.4)  # 左边距离
se.right_margin = Inches(0.4)  # 右边距离
  • 表格设置

table = document.add_table(rows=5, cols=2, style=style)  # 添加表格5行、2列
# 添加第二行的内容
hdr_cells = table.rows[1].cells
hdr_cells[0].text = '宝宝昵称'
hdr_cells[1].text = b.b_n# 设置表格内文字的大小、颜色,表格线的颜色
for row in table.rows:for cell in row.cells:paragraphs = cell.paragraphsfor paragraph in paragraphs:for run in paragraph.runs:font = run.fontfont.size = Pt(15)font.color.rgb = RGBColor(*color)

四、转化为PDF格式

将.docx文档转化为PDF格式时,如果程序的错误信息显示下面的内容:

C:\\Program Files (x86)\\Microsoft Office\\Office12\\2052\\WDMAIN11.CHM'

这说明是word输出pdf出现错误,需要下载插件SaveAsPDFandXPS.exe,安装即可。

1,用到的库

win32com

2,主要知识点

  • .docx转为PDF
from win32com import client
word = client.DispatchEx("Word.Application")
worddoc = word.Documents.Open(doc_path, ReadOnly=1)
worddoc.SaveAs(pdf_path, FileFormat=17)
worddoc.Close()

五、报告示例:男宝

点击获得项目源码。欢迎Follow,感谢Star!!! 扫描关注微信公众号pythonfan,获取更多。

Python3实践项目一:生成0-5岁宝宝生长发育报告相关推荐

  1. 实践项目—隐式图的搜索(预习报告)

    文章目录 实验内容 实验要求 编程语言及开发环境 实验思路 一.A*算法 二.A*算法解决九宫格问题 实验内容 1.对九宫重排问题,建立图的启发式搜索求解方法. 2.用A*算法求救九宫重排问题. 实验 ...

  2. 面向中文自然语言处理的60余类系统开源实践项目与工业探索索引

    项目介绍 面向中文自然语言处理的六十余类实践项目及学习索引,涵盖语言资源构建.社会计算.自然语言处理组件.知识图谱.事理图谱.知识抽取.情感分析.深度学习等几个学习主题.包括作者个人简介.学习心得.语 ...

  3. NLP实践——VQA/Caption生成模型BLIP-2的应用介绍

    NLP实践--VQA/Caption生成模型BLIP-2的应用介绍 1. 简介 2. 模型下载 3. 运行环境 4. 模型应用 1. 简介 今天介绍一个跨模态模型,也是最近比较火的一个工作,叫做BLI ...

  4. python实践项目-shop

    python实践项目-shop 练习 文件打开/保存 cmd应用 prettytable 场景 使用CMD程序,实现商店管理 python3+pycharm 源码 getPicke.py 初始化PIC ...

  5. c# winform 实践项目---人员管理系统

    根据讲师下发的实践项目需求,做了一个人员管理系统,其中用到知识颇多,思来想去决定发布上来,一是为自己以后的开发做一个参考,避免忘记.二是希望能得到互联网上各位大佬的评鉴. xx人员管理系统 xx人员管 ...

  6. java将0到9随机输出_生成0到9之间的随机整数

    回答(20) 2 years ago 对于您给出的示例(从0开始直到9的整数),最干净的解决方案如下: from random import randrange randrange(10) 2 yea ...

  7. 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章

    近期,由清华大学研究生院和数据科学研究院(以下简称:数据院)共同开设的清华大学大数据能力提升项目<大数据系统基础>实践项目期末答辩在清华大学六号教学楼顺利举行.20位企业导师作为评审参与答 ...

  8. vue 2.x项目 vue-qriously 生成二维码并下载、cliploard复制粘贴

    近日,重构项目某一老模块时,有一个功能是生成二维码并下载,还可以复制链接.列表每项都有二维码.下载二维码和复制链接和列表上方总的二维码. 老模块是用的qrocode中文文档,qrcode github ...

  9. 如何做好一条0~2岁的产品狗

    近几年,产品经理岗位火热的一塌糊涂,受到了越来越多的应届生和互联网其他岗位朋友的追捧.好的产品经理在企业中的重要程度不言而喻,他是需求的发起者.项目的推进者.团队沟通的桥梁.企业发展的舵盘. 然而,由 ...

最新文章

  1. 嵌入式Linux的OTA更新,基础知识和实现
  2. java redis集群连接池_(08)redis之使用java客户端、spring连接redis、redis集群示例...
  3. julia矩阵运算_Julia中的复数及其运算
  4. python增删改查csv文件_Python增删改查文件
  5. 2017.9.28 约数研究 思考记录
  6. Python——OpenCV形态学处理(膨胀与腐蚀)
  7. 爬虫(七):爬取猫眼电影top100
  8. Remote-SSH 安装教程
  9. 游戏设计模式——观察者模式(Observer)
  10. keras使用load_weights遇到报错
  11. 一套MES系统需要多少钱?如何使生产管理系统标准化?
  12. dell服务器T100无法进入系统,戴尔电脑开机进不去,一直在转圈圈,怎么处理?
  13. Android蓝牙调试助手
  14. 计算机主机配置科普,一秒看懂电脑配置,组装电脑不求人
  15. yolov5安装与环境配置
  16. 《谁的青春不迷茫》——刘同
  17. 建筑施工技术【12】
  18. windows pyinstaller打包pytorch程序到exe文件
  19. 2011级《软件设计模式》考试试题(开卷)
  20. 如何使用React+Elementui搭建项目

热门文章

  1. why+how+what
  2. 图书分类页面php,PHP开发简单图书借阅系统之创建主页面
  3. 青龙面板安装ninja,DIY ninja界面
  4. 饿了么确认外卖骑手盟主被抓,称已被平台拉黑
  5. 五、药店的药品销售统计系统(排序应用)
  6. 如何使用python快速读取tsv文件
  7. 该符号在函数 _main 中被引用
  8. php彩蛋是什么,php彩蛋
  9. NTP和Crontab
  10. centos系统关闭ntp服务器,CentOS 7配置NTP客户端