使用Python自动生成图文并茂的网页分析报告
在数据分析中,不管是市场研究还是科学分析,经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件,这种方式不便之处是不方便跟动态文字段落结合在一起,也不方便分享。特别是我们需要使用Python定时自动生成数据分析报告并通过网络发布时,如果使用Flask等网络框架,技术门槛比较高,实现复杂。本文探讨使用一种非常直接简单的方法来使用Python不依赖其他网络库直接生成图文并茂的网页文件,这种方法可以广泛应用到数据分析里。
思路和实现步骤
先利用 matplotlib 库绘制精美的数据图表,对数据进行直观呈现,接着将生成的图表保存为图片,再使用html代码模版以文本形式调用图片路径,然后将生成的HTML代码通过Python的文件读写功能以文本的形式保存为文件,文件格式设置为html。最后自动打开默认浏览器打开这个刚生成的html文件,这样Python程序运行完就马上看到了生成的图文并茂的html数据分析报告了。。
这个Python程序的主要功能是生成一个包含数据可视化图表和特定HTML内容的网页,并自动在默认浏览器中打开该网页。以下是对程序的详细总结:
1. 数据可视化部分
- 导入必要的库:导入了
pylab、webbrowser、matplotlib.pyplot,其中matplotlib.pyplot用于绘制图表,webbrowser用于在浏览器中打开网页。 - 设置图表参数:
- 设置图片的像素、分辨率和图表的尺寸。
- 解决中文显示问题,指定默认字体为
SimHei,并解决负号显示为方块的问题。
- 定义数据:定义了两个数据列表
y和y2,以及对应的x轴标签列表。 - 绘制图表:
- 设置图表的标题、
x轴和y轴的标签。 - 使用
plt.plot()函数绘制两条折线图,分别标记为Y和Y2,并设置了线条的颜色、标记样式等。 - 使用
legend()函数显示图例。 - 将
x轴标签倾斜45度。 - 在每个数据点上添加数字标签。
- 在指定位置添加文本说明。
- 反转
y轴。 - 将生成的图表保存为
1.jpg文件,并显示图表,最后关闭图表窗口。
- 设置图表的标题、
2. HTML文件生成部分
- 创建HTML文件:创建两个HTML文件
test.html和test2.html(这是为了测试对比,实际只需要生成1个文件)。 - 写入HTML内容:
- 在
test2.html中写入包含标题的HTML内容。 - 在
test.html中写入包含图片链接和自定义HTML内容的消息,其中图片链接指向之前生成的1.jpg文件。
- 在
- 关闭文件:关闭两个HTML文件。
3. 浏览器打开部分
- 使用
webbrowser.open()函数在默认浏览器中打开test.html文件。
综上所述,该程序的主要目的是将数据可视化图表和特定的HTML内容整合到一个网页中,并自动在浏览器中展示。
最后上完整代码:
# coding:utf-8
"""
此 Python 代码具备强大的功能,能将数据可视化与网页生成巧妙结合。它先利用 matplotlib 库绘制精美的折线图,对数据进行直观呈现,解决了中文显示、负号显示等细节问题。接着将生成的图表保存为图片,再自动创建 HTML 文件,把图表和预设的 HTML 内容整合到网页中,最后自动在默认浏览器中打开网页,实现数据的可视化展示与传播。
适用人群
适合数据分析师、营销人员、学生等人群。数据分析师可用其直观展示数据分析结果;营销人员能借此展示销售数据、市场趋势等;学生则可用于课程作业、项目展示等。
yl,2024年
"""
from pylab import *
import webbrowser #浏览器控制库,如果仅仅是生成html文件可以不用
import matplotlib.pyplot as pltstr='查看=[21-1-10 - 21-1-16]'#figsize(12.5, 4) # 设置 figsize
plt.rcParams['savefig.dpi'] = 300 #图片像素
plt.rcParams['figure.dpi'] = 200 #分辨率
# 默认的像素:[6.0,4.0],分辨率为100,图片尺寸为 600&400
# 指定dpi=200,图片尺寸为 1200*800
# 指定dpi=300,图片尺寸为 1800*1200
# 设置figsize可以在不改变分辨率情况下改变比例
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
plt.rcParams['figure.figsize'] = (10.0, 6.0) # 设置figure_size尺寸
font_label = {'family':'SimHei',
'weight' : 'normal',
'size' : 20,
}
y=[1,23,19,2300,3,5,12,2300,19,23,3,500,12]
y2=[2,24,23,3,9,110,13,23,1300,26,3,9,10000]
x=['2021-02-22','2021-03-22','2021-04-22','c','d','e','f','O','j','feb','jan','mar','oct']
plt.title('Keyword Ranking销售排名',fontdict={'size':20},loc='center')
plt.xlabel('X轴',fontdict=font_label)
plt.ylabel('Y轴',fontdict=font_label)
plt.plot(x,y,linewidth=3,color='r',marker='D',markerfacecolor='yellow', markersize=5,linestyle='-',label='Y') #标记线为红色r,标点为大菱形D,风格为虚线
plt.plot(x,y2,color='b',marker='p',linestyle='-',label='Y2')
legend(loc='best',title='Name') #在plot()函数中增加一个参数label,再通过legend()函数显示图例
plt.xticks(rotation=45) #X横坐标倾斜60度
#plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) #将说明图表放置在图表外# 设置数字标签
for a, b in zip(x, y):plt.text(a, b, b, ha='center', va='top', fontsize=10) #fontsize,style,ha,va参数分别是字号,字体,垂直对齐方式,水平对齐方式
for a, b in zip(x, y2):plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
plt.text(5,500,'相关系数:\n增长幅度:',ha='center', va='top', fontsize=10,color='b') #前面2个参数为x,y对应坐标值ax = plt.gca()
ax.invert_yaxis() #y轴反向
plt.savefig('1.jpg',dpi=100)
#plt.show()
plt.close()# 命名生成的html
GEN_HTML = "test.html"
htmlfile2="test2.html"
# 打开文件,准备写入
f = open(GEN_HTML, 'w',encoding='UTF-8')
f2=open(htmlfile2,'w',encoding='UTF-8')
title="这是产品标题"
body="<p><h1>标题</h1></p>"
html="""
<html><head><title>%s</title></head><body>%s</body
</html>
"""%(title,body)
f2.write(html)
f2.close()
print(f"成功了")
# 准备相关变量
str1 = """
<h1>这是标题</h1>
<a class="a-link-normal s-no-outline" href="/gp/slredirect/picassoRedirect.html/ref=pa_sp_atf_aps_sr_pg1_1?ie=UTF8&adId=A07267723HYUM7A1IS3F4&url=%2FNew-Star-Foodservice-Commercial-Suction%2Fdp%2FB00DVXLML4%2Fref%3Dsr_1_1_sspa%3Fcrid%3D3D71DEYXHO6JB%26dchild%3D1%26keywords%3Dfrench%2Bfry%2Bcutter%26qid%3D1614913550%26sprefix%3Dfrench%2B%252Caps%252C470%26sr%3D8-1-spons%26psc%3D1&qualifier=1614913550&id=5497147329523695&widgetName=sp_atf">
<div class="a-section aok-relative s-image-square-aspect">
<img src="https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL320_.jpg" class="s-image" alt="Sponsored Ad - New Star Food Service 42313 Commercial Restaurant French Fry Cutter with Suction Feet, 1/2-Inch" srcset="https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL320_.jpg 1x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL480_FMwebp_QL65_.jpg 1.5x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL640_FMwebp_QL65_.jpg 2x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL800_FMwebp_QL65_.jpg 2.5x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL960_FMwebp_QL65_.jpg 3x" data-image-index="2" data-image-load="" data-image-latency="s-product-image" data-image-source-density="1">
</div>
</a>"""str2 = r'''
<img <img alt="测试图" src="1.jpg"><b>加粗</b>
<div><div><ul><li font="50"> <h1>评论与销售分析</h1></li><li> 评分数相关分析</li></ul><div><table><tr><td> table </td><td bgcolor="#0fff90"> table2 </td></tr></table></div></div
</div>
'''# 写入HTML界面中
message = """
<html>
<head></head>
<body>
<p>%s</p>
<p>%s</p>
</body>
</html>
""" % (str1, str2)# 写入文件
f.write(message)
# 关闭文件
f.close()# 自动调用网络浏览器打开刚才生成的网页文件
webbrowser.open(GEN_HTML, new=0)相关文章:
使用Python自动生成图文并茂的网页分析报告
在数据分析中,不管是市场研究还是科学分析,经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件,这种方式不便之处是不方便跟动态文字段落结合在一起,也不方便分…...
uniapp-原生android插件开发摘要
uni-app在App侧的原生扩展插件,支持使用java、object-c等原生语言编写,从HBuilderX 3.6起,新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…...
GIT工具学习【1】:基本操作
目录 0.本地代码分区1.配置自己的个人信息(设置一次即可)2.新建仓库3.提交代码到暂存区(加入购物车)4.从暂存区撤回(不会改变工作区文件)5.恢复指定版本(会改变工作区文件)5.1&#…...
《国密算法开发实战:从合规落地到性能优化》
前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…...
【语法】C++中string类中的两个问题及解答
贴主在学习string类时遇到过两个困扰我的问题,今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中,调用的是这个string对象的容量(可以存多少个有效字符),而size()是调用的string对象现在有…...
LeetCode-154. 寻找旋转排序数组中的最小值 II
1、题目描述: 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,…...
2.数据结构:1.Tire 字符串统计
1.Tire 字符串统计 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010; int son[N][26];//至多 N 层,每一层至多 26 个节点(字母) int cnt[N];//字符串至多 N 个ÿ…...
C语言复习4:有关数组的基础常见算法
# 数组的常见算法 - 查找算法 1. 基本查找/顺序查找 2. 二分查找/折半查找 3. 插值查找 4. 分块查找 5. 哈希查找 6. 树表查找 7. 斐波那契查找 - 排序算法(顾名思义,就是把没有顺序的…...
Ubuntu从零创建Hadoop集群
目录 前言 前提准备 1.设置网关和网段 2.查看虚拟机IP及检查网络 3.Ubuntu相关配置 镜像源配置 下载 vim编辑器 4.设置静态IP和SSH免密(可选) 设置静态IP SSH免密 5.JDK环境部署 6.Hadoop环境部署 7.配置 Hadoop 配置文件 HDFS集群规划 HDFS集群配置 1.配…...
GPIO概念
GPIO通用输入输出口 在芯片内部存在多个GPIO,每个GPIO用于管理多个芯片进行输入,输出工作 引脚电平 0v ~3.3v,部分引脚可容任5v 输出模式下可控制端口输出高低电平,可以驱动LED,控制蜂鸣器,模拟通信协议&a…...
Node.js, Bun, Deno 比较概述
以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl(Node.js 原作者)Jarred Sumner运行时引擎V8(Chrome)V8(Chrome)JavaScriptCore&#…...
C# 类库打包dll文件
目录 前言操作流程注意事项 前言 在C#中,有多种方式可以对代码进行加密,以保护源代码不被轻易查看或修改,这篇文章主要介绍将C# cs类文件加密为dll文件的方式进行保护。 操作流程 在 Visual Studio 中,选择“创建新项目”。 选…...
Linux中的UDP编程接口基本使用
UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式,有了这些理论基础之后,下面先从UDP编程开始从操作部分深入网络 在本篇中,主要考虑下面的内容: 创建并封装服务端:了解创建服务端的…...
RAG项目实战:金融问答系统
需求痛点 私有知识很多,如何让大模型只选择跟问题有关的知识进行参考呢? 需求分析 是否可以使用关键词匹配呢?以前的搜索主要使用关键词匹配,这个要求太高了,需要提前抽取准备好关键词,有点像以前SEO的工…...
大白话React第十一章React 相关的高级特性以及在实际项目中的应用优化
假设我们已经对 React 前端框架的性能和可扩展性评估有了一定了解,接下来的阶段可以深入学习 React 相关的高级特性以及在实际项目中的应用优化,以下是详细介绍及代码示例: 1. React 高级特性的深入学习 1.1 React 并发模式(Con…...
虚拟机Linux操作(持续更新ing)
虚拟机操作(持续更新ing) 虚拟机基本操作(Linux) # Linux # 立刻关机 poweroff # 立刻关机,可以选择数字或者具体时间 shutdown -h now # 立刻重启,可以选择数字或者具体时间 shutdown -r now # 立刻重启 reboot # cd 切换目录,下面用根目录举例 cd /…...
【开源-线程池(Thread Pool)项目对比】
一些实现**线程池(Thread Pool)**功能的开源项目的对比分析。 线程池功能的开源项目 项目名称语言优点缺点适用场景开源代码链接ThreadPoolC简单易用,代码简洁;适合快速原型开发。功能较为基础,不支持动态调整线程数…...
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式) 一、项目背景 在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以…...
Jackson注解实战:@JsonInclude的妙用
在日常的Java开发中,我们经常需要将Java对象序列化为JSON格式,以便进行数据传输或存储。然而,有时候我们并不希望在JSON中包含某些空值或不必要的字段,这不仅会增加数据的冗余性,还可能对后续的处理造成困扰。Jackson库…...
CAN总线通信协议学习1——物理层
首先来看看CAN是怎么产生的:简单理解,CAN就是一种“拥有特别连接方式”的数据传输的总线,其有特定的一些规则。 (注:资料及图片来源于知乎博主TOMOCAT。) CAN总线的结构 查阅参考文献,OSI标准…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
