使用Python自动生成图文并茂的网页分析报告

在数据分析中,不管是市场研究还是科学分析,经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件,这种方式不便之处是不方便跟动态文字段落结合在一起,也不方便分享。特别是我们需要使用Python定时自动生成数据分析报告并通过网络发布时,如果使用Flask等网络框架,技术门槛比较高,实现复杂。本文探讨使用一种非常直接简单的方法来使用Python不依赖其他网络库直接生成图文并茂的网页文件,这种方法可以广泛应用到数据分析里。

思路和实现步骤

先利用 matplotlib 库绘制精美的数据图表,对数据进行直观呈现,接着将生成的图表保存为图片,再使用html代码模版以文本形式调用图片路径,然后将生成的HTML代码通过Python的文件读写功能以文本的形式保存为文件,文件格式设置为html。最后自动打开默认浏览器打开这个刚生成的html文件,这样Python程序运行完就马上看到了生成的图文并茂的html数据分析报告了。。

这个Python程序的主要功能是生成一个包含数据可视化图表和特定HTML内容的网页,并自动在默认浏览器中打开该网页。以下是对程序的详细总结:

1. 数据可视化部分

  • 导入必要的库:导入了pylabwebbrowsermatplotlib.pyplot,其中matplotlib.pyplot用于绘制图表,webbrowser用于在浏览器中打开网页。
  • 设置图表参数
    • 设置图片的像素、分辨率和图表的尺寸。
    • 解决中文显示问题,指定默认字体为SimHei,并解决负号显示为方块的问题。
  • 定义数据:定义了两个数据列表yy2,以及对应的x轴标签列表。
  • 绘制图表
    • 设置图表的标题、x轴和y轴的标签。
    • 使用plt.plot()函数绘制两条折线图,分别标记为YY2,并设置了线条的颜色、标记样式等。
    • 使用legend()函数显示图例。
    • x轴标签倾斜45度。
    • 在每个数据点上添加数字标签。
    • 在指定位置添加文本说明。
    • 反转y轴。
    • 将生成的图表保存为1.jpg文件,并显示图表,最后关闭图表窗口。

2. HTML文件生成部分

  • 创建HTML文件:创建两个HTML文件test.htmltest2.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&amp;adId=A07267723HYUM7A1IS3F4&amp;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&amp;qualifier=1614913550&amp;id=5497147329523695&amp;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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】小蓝书学习(七)

小蓝书学习&#xff08;七&#xff09; 前言第47条&#xff1a;熟悉系统框架第48条&#xff1a;多用枚举块&#xff0c;少用for循环第50条&#xff1a;构建缓存使选用NSCache而非NSDictionary第51条&#xff1a;精简initialize与load的实现代码第52条&#xff1a;别忘了NSTimer…

C语言复习4:有关数组的基础常见算法

# 数组的常见算法 - 查找算法 1. 基本查找/顺序查找 2. 二分查找/折半查找 3. 插值查找 4. 分块查找 5. 哈希查找 6. 树表查找 7. 斐波那契查找 - 排序算法&#xff08;顾名思义&#xff0c;就是把没有顺序的…

Ollama 的庐山真面目

Ollama 运行方式分析 本地推理条件&#xff08;GPU/CPU/RAM&#xff09;&#xff1a;Ollama 支持在本地电脑进行大模型推理&#xff0c;但需要满足一定的硬件条件。一般来说&#xff0c;GPU 有助于加速推理&#xff0c;特别是显存较大的 GPU 能够加载更大的模型&#xff1b;如果…

SyntaxError: positional argument follows keyword argument

命令行里面日常练手爬虫不注意遇到的问题&#xff0c;报错说参数位置不正确 修改代码后&#xff0c;运行如下图&#xff1a; 结果&#xff1a; 希望各位也能顺利解决问题&#xff0c;祝你好运&#xff01;

drawDB:一款免费数据库设计工具

drawDB 是一款基于 Web 的免费数据库设计工具&#xff0c;通过拖拽、复制、粘贴等方式进行数据库建模设计&#xff0c;同时可以生成相应的 SQL 脚本。 功能特性 drawDB 目前可以支持 MySQL、MariaDB、PostgreSQL、SQL Server 以及 SQLite 数据库&#xff0c;核心功能包括&…

使用SPI总线与外部传感器通信,使用ECU抽象

MCAL SPI驱动示例 首先,MCAL层提供了针对特定微控制器的SPI驱动实现。以下是一个简化的MCAL SPI驱动API的例子: // MCAL SPI driver interface void Spi_Init(const Spi_ConfigType* Config); Std_ReturnType Spi_Transmit(uint8 *DataBufferPtr, uint8 Length); Std_Retur…

FPGA开发,使用Deepseek V3还是R1(9):FPGA的全流程(详细版)

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

Conda 环境搭建实战:从基础到进阶

在当今复杂多变的软件开发与数据科学领域&#xff0c;拥有一个稳定、可复现且易于管理的开发环境是项目成功的基石。Conda 作为一款强大的跨平台环境管理与包管理工具&#xff0c;为开发者提供了便捷高效的环境搭建与依赖管理解决方案。本文将深入探讨 Conda 环境搭建的实战技巧…

Hive-05之查询 分组、排序、case when、 什么情况下Hive可以避免进行MapReduce

一、目标 掌握hive中select查询语句中的基本语法掌握hive中select查询语句的分组掌握hive中select查询语句中的join掌握hive中select查询语句中的排序 二、要点 1. 基本查询 注意 SQL 语言大小写不敏感SQL 可以写在一行或者多行关键字不能被缩写也不能分行各子句一般要分行…

leetcode_34 在排序数组中查找元素的第一个和最后一个位置

1. 题意 给定一个非递减的数组&#xff0c;找出给定元素的开始位置和 结束位置。 2. 题解 题目要求复杂度为 log ⁡ ( n ) \log (n) log(n), 因此不能用双指针了。 这个题目练习二分挺好的。 2.1 双指针 还是把双指针的写下来吧。 class Solution { public:vector<i…

人工智能之数学基础:矩阵的范数

本文重点 在前面课程中,我们学习了向量的范数,在矩阵中也有范数,本文来学习一下。矩阵的范数对于分析线性映射函数的特性有重要的作用。 矩阵范数的本质 矩阵范数是一种映射,它将一个矩阵映射到一个非负实数。 矩阵的范数 前面我们学习了向量的范数,只有当满足几个条…

I2C驱动(十一) -- gpio模拟的i2c总线驱动i2c-gpio.c分析

相关文章 I2C驱动(一) – I2C协议 I2C驱动(二) – SMBus协议 I2C驱动(三) – 驱动中的几个重要结构 I2C驱动(四) – I2C-Tools介绍 I2C驱动(五) – 通用驱动i2c-dev.c分析 I2C驱动(六) – I2C驱动程序模型 I2C驱动(七) – 编写I2C设备驱动之i2c_driver I2C驱动(八) – 编写I2C…

(KTransformers) RTX4090单卡运行 DeepSeek-R1 671B

安装环境为&#xff1a;ubuntu 22.04 x86_64 下载模型 编辑文件vim url.list 写入如下内容 https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00001-of-00009.gguf https://modelscope.cn/models/unsloth/Dee…

知识库技术选型:主流Embedding模型特性对比

知识库技术选型&#xff1a;主流Embedding模型特性对比 1. 知识库与大模型结合的背景 知识库是存储和管理结构化知识的系统&#xff0c;广泛应用于问答系统、推荐系统和搜索引擎等领域。随着大语言模型&#xff08;LLM&#xff09;的发展&#xff0c;知识库与大模型的结合成为…

海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)

1.首先说了一下为什么要用ISUP协议来取流 ISUP主要就是用来解决摄像头没有公网ip的情况,如果摄像头或者所在局域网的路由器有公网ip的话&#xff0c;其实采用rtsp直接取流是最方便也是性能最好的&#xff0c;但是项目的摄像头没有公网IP所以被迫使用ISUP&#xff0c;ISUP是海康…

SpringBoot原理-03.自动配置-方案

一.自动配置原理 探究自动配置原理&#xff0c;就是探究spring是如何在运行时将要依赖JAR包提供的配置类和bean对象注入到IOC容器当中。我们当前准备一个maven项目itheima-utils&#xff0c;这里面定义了bean对象以及配置类&#xff0c;用来模拟第三方提供的依赖&#xff0c;首…

高频 SQL 50 题(基础版)_2356. 每位教师所教授的科目种类的数量

高频 SQL 50 题&#xff08;基础版&#xff09;_2356. 每位教师所教授的科目种类的数量 select teacher_id ,count(distinct(subject_id)) as cnt from Teacher group by teacher_id

神经网络之词嵌入模型(基于torch api调用)

一、Word Embedding&#xff08;词嵌入&#xff09;简介 Word Embedding&#xff08;词嵌入&#xff09;&#xff1a; 词嵌入技术是自然语言处理&#xff08;NLP&#xff09;领域的一项重大创新&#xff0c;它极大地推动了计算机理解和处理人类语言的能力。 通过将单词、句子甚…

SpringBoot @Value 注解使用

Value 注解用于将配置文件中的属性值注入到Spring管理的Bean中。 1. 基本用法 Value 可以直接注入配置文件中的属性值。 配置文件 (application.properties 或 application.yml) 配置文件定义需要注入的数据。 consumer:username: lisiage: 23hobby: sing,read,sleepsubje…

Redis面试常见问题——使用场景问题

目录 Redis面试常见问题 如果发生了缓存穿透、击穿、雪崩&#xff0c;该如何解决&#xff1f; 缓存穿透 什么是布隆过滤器&#xff1f; 缓存击穿 缓存雪崩 双写一致性&#xff08;redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;&#xff09; …