python-数据可视化(大数据、数据分析、可视化图像、HTML页面)
通过 Python 读取 XLS 、CSV文件中的数据,对数据进行处理,然后生成包含柱状图、扇形图和折线图的 HTML 报告。这个方案使用了 pandas
处理数据,matplotlib
生成图表,并将图表嵌入到 HTML 页面中。
1.XSL文件生成可视化图像、生成html页面
此代码根据DATA1.xls文件将数据经过panda库处理后,由matplotlib生成柱形图、折线图、扇形图,并且将图片嵌入HTML页面,让数据更加清晰。
matplotlib1.py
# coding=utf-8
import pandas as pd
import matplotlib.pyplot as plt
import os
from datetime import datetimeimport xlrd
import xlwt
from openpyxl import load_workbook# 设置中文字体
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题def read_excel_data(file_path):"""读取 Excel 文件数据"""try:df = pd.read_excel(file_path)print(f"成功读取文件: {file_path}")print(f"数据包含 {df.shape[0]} 行,{df.shape[1]} 列")print(f"列名: {', '.join(df.columns.tolist())}")return dfexcept Exception as e:print(f"读取 Excel 文件出错: {e}")return Nonedef generate_bar_chart(data, x_col, y_col, output_path):"""生成柱状图"""plt.figure(figsize=(10, 6))plt.bar(data[x_col], data[y_col])plt.title(f"{y_col} 分布柱状图")plt.xlabel(x_col)plt.ylabel(y_col)plt.xticks(rotation=45)plt.tight_layout()plt.savefig(output_path)plt.close()def generate_pie_chart(data, category_col, value_col, output_path):"""生成扇形图"""plt.figure(figsize=(8, 8))plt.pie(data[value_col], labels=data[category_col], autopct='%1.1f%%', startangle=90)plt.title(f"{value_col} 分布扇形图")plt.tight_layout()plt.savefig(output_path)plt.close()def generate_line_chart(data, x_col, y_col, output_path):"""生成折线图"""plt.figure(figsize=(10, 6))plt.plot(data[x_col], data[y_col], marker='o')plt.title(f"{y_col} 趋势折线图")plt.xlabel(x_col)plt.ylabel(y_col)plt.xticks(rotation=45)plt.grid(True)plt.tight_layout()plt.savefig(output_path)plt.close()def generate_html_report(chart_paths, output_path):"""生成 HTML 报告"""timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")html_content = f"""<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数据可视化报告</title><style>body {{ font-family: Arial, sans-serif; margin: 20px; }}h1, h2 {{ color: #333; }}.chart-container {{ margin-bottom: 40px; }}img {{ max-width: 100%; height: auto; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }}.timestamp {{ color: #666; font-size: 0.9em; }}</style></head><body><h1>数据可视化报告</h1><p class="timestamp">生成时间: {timestamp}</p>{''.join([f'<div class="chart-container"><h2>{title}</h2><img src="{title}.png" alt="{title}"></div>'for title, path in chart_paths.items()])}<footer><p>© 2023 数据可视化工具</p></footer></body></html>"""with open(output_path, 'w', encoding='utf-8') as f:f.write(html_content)def main():# 文件路径设置xls_file = 'C:/Users/IT14/Desktop/DATA1.xls' # 请替换为实际的 XLS 文件路径output_html = 'data_visualization_report.html'# 读取数据df = read_excel_data(xls_file)if df is None or df.empty:print("无法读取数据或数据为空,程序退出。")return# 生成图表(根据实际数据结构调整列名)chart_data = {}# 示例:假设 XLS 文件包含以下列# - 产品名称# - 销售额# - 销量# - 日期# 检查列是否存在required_columns = ['产品名称', '销售额', '销量', '日期']missing_columns = [col for col in required_columns if col not in df.columns]if missing_columns:print(f"错误:数据中缺少以下列: {', '.join(missing_columns)}")print(f"可用列: {', '.join(df.columns.tolist())}")print("请根据实际数据结构修改代码中的列名。")return# 生成柱状图(销售额分布)chart_data['产品销售额分布柱状图'] = generate_bar_chart(df, '产品名称', '销售额', '产品销售额分布柱状图')# 生成扇形图(销量占比)chart_data['产品销量占比扇形图'] = generate_pie_chart(df, '产品名称', '销量', '产品销量占比扇形图')# 生成折线图(销售额趋势)chart_data['销售额趋势折线图'] = generate_line_chart(df, '日期', '销售额', '销售额趋势折线图')# 生成 HTML 报告generate_html_report(chart_data, output_html)print("报告生成完成,请在浏览器中打开 HTML 文件查看。")if __name__ == "__main__":main()
2. CSV文件生成可视化图像
2.1 matplotblib-折线图
此代码根据sitka_weather_2018_simple.csv文件广州气温数据和日期生成一个折线图
matplotlib-折线图.py
import csv
from datetime import datetimeimport matplotlib
import matplotlib.pyplot as plt# 设置中文字体
matplotlib.rc("font",family='MicroSoft YaHei',weight="bold")# 1.读取scv文件
filename = 'C:/Users/IT14/Desktop/sitka_weather_2018_simple.csv'# 1.1.创建阅读器
with open(filename) as filename_list:# 1.2.创建阅读器csv.reader()reader = csv.reader(filename_list);# 1.3.获取表头header_name = next(reader)# 2.打印数据for index,column_value in enumerate(header_name):print(index,column_value)# 3.获取数据TMAX ,TDATE,TMIN= [],[],[]for max in reader:TMAX.append(int(max[5]))TDATE.append(datetime.strptime(max[2],'%Y-%m-%d'))TMIN.append(int(max[6]))print(TMAX)# 4.绘图-折线图
fig = plt.figure(dpi=128,figsize=(8,6))
plt1=plt.plot(TDATE,TMAX,c='red',label='最高气温')
plt2=plt.plot(TDATE,TMIN,c='blue',label='最低气温')
for a,b in zip(TDATE,TMAX):plt.text(a,b+1,b)
for a,b in zip(TDATE,TMIN):plt.text(a,b-2,b)
plt.fill_between(TDATE,TMAX,TMIN,facecolor='blue',alpha=0.1)
fig.autofmt_xdate()
# 5.设置格式
plt.title("2018年广州气温数据",fontsize=24)
plt.xlabel('年-月-日',fontsize=16)
plt.ylabel('气温(度)',fontsize=16)
plt.tick_params(axis='both',labelsize=16)
plt.legend()
plt.savefig('气温折线图.png')
plt.show()
2.2 matplotblib-柱形图
此代码根据sitka_weather_2018_simple.csv文件最大销售量、最低销售量和日期生成一个柱形图。
matplotlib-柱形图.py
import pandas as pd# 读取数据,填写文件路径,配置
data = pd.read_csv('C:/Users/IT14/Desktop/sitka_weather_2018_simple.csv',encoding="ANSI",usecols=['DATE','TMAX','TMIN'])# 取消最大显示行数和列数限制
pd.options.display.max_columns=None
pd.options.display.max_rows=None# 选择行
data_1 = data.head(2)
print(data_1)# 查看数据尺寸
print(data.shape)
# 查看数据数量
print(data.size)
# 查看字段类型
print(data.dtypes)
# 查看数据信息
# print(data.info)
# 数据描述:只统计数值型数据
print(data.describe())
# 获取单个字段取值数目,normalize=True表示显示占比
# print(data['TMAX'].value_counts())# cut函数
# print(pd.cut(range(10),bins=[0,10,20,30,40,50,60,70,80,90,100],right=True))
bins=[10,20,30,40,50,60,70,80,90,100,110]boxes,lables = pd.cut(data['TMAX'],bins=bins,right=True,retbins=True,include_lowest=True)
print(lables)
print(boxes.value_counts().sort_index().values)# 正常函数
data['DATE'] = pd.to_datetime(data['DATE'])
data = data.set_index('DATE')
print(data.head(4))
data = data.resample('ME').sum().to_period('M')
print(data.head(2))
print(data.dtypes)
print(str(data.index[0]))
sss = []
for index,dt in enumerate(data.index):sss.append(dt)
TMAX,TMIN = [],[]
for dt in enumerate(data['TMAX']):TMAX.append(int(dt[1]))
for dt in enumerate(data['TMIN']):TMIN.append(int(dt[1]))
print(sss,TMAX,TMIN)# 绘制柱形图
import matplotlib
import matplotlib.pyplot as pltmatplotlib.rc('font',family='MicroSoft YaHei',weight='bold')
# 设置画布大小
pl = plt.figure(figsize=(15,8))
#设置x,y轴
plt.ylabel('2018年销售量',fontsize=22)
plt.xlabel('月份',fontsize=22)
# 柱形图bar
plt.xticks(range(0,len(sss)),sss)
#设置两个柱形
plt1=plt.bar(range(0,len(sss)),TMAX,label='最高销售额',width=0.4)
plt2=plt.bar([i+0.4 for i in range(0,len(sss))],TMIN,label='最低销售额',width=0.4)
# 设置坐标
# for y in TMAX,TMIN:
# for a,b in zip(range(0,len(sss)),y):
# if y == TMIN:
# a+=0.4
# plt.text(a,b+2,b,ha='center')
plt.bar_label(plt1,label_type='edge')
plt.bar_label(plt2,label_type='edge')
pl.autofmt_xdate()
plt.legend()
#保存文件为图片
plt.savefig('销售额.png')
#在python编辑器打开图片
plt.show()
plt.close()
2.3 matplotblib-扇形图
此代码根据sales_data.csv文件最大销售量、最低销售量和日期生成一个扇形图图。
matplotlib-扇形图.py
import csv
import matplotlib.pyplot as plt# 设置中文字体,确保中文正常显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题def read_csv_data(file_path, category_col, value_col):"""从 CSV 文件读取数据参数:file_path (str): CSV 文件路径category_col (int): 分类列的索引(从0开始)value_col (int): 数值列的索引(从0开始)返回:tuple: 包含分类列表和对应数值列表的元组"""categories = []values = []with open(file_path, 'r', encoding='gb18030') as file:reader = csv.reader(file)next(reader) # 跳过表头for row in reader:if len(row) > max(category_col, value_col):categories.append(row[category_col])values.append(float(row[value_col]))return categories, valuesdef generate_pie_chart(categories, values, title, output_path=None):"""生成扇形图参数:categories (list): 分类列表values (list): 对应数值列表title (str): 图表标题output_path (str, optional): 保存图片的路径,若为None则显示图表"""# 创建画布plt.figure(figsize=(10, 8))# 计算百分比总和,确保总和为100%total = sum(values)percentages = [v / total * 100 for v in values]# 找出最大占比的项,用于突出显示explode = [0.1 if p == max(percentages) else 0 for p in percentages]# 自定义颜色colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#c2c2f0', '#ffb3e6']# 绘制扇形图plt.pie(values,explode=explode,labels=categories,colors=colors[:len(categories)],autopct='%1.1f%%', # 显示百分比,保留一位小数shadow=True, # 添加阴影startangle=90 # 起始角度)# 设置为正圆形plt.axis('equal')# 添加标题plt.title(title, fontsize=16)# 添加图例plt.legend(categories, loc="best")# 如果指定了输出路径,则保存图片;否则显示图片if output_path:plt.savefig(output_path, dpi=300, bbox_inches='tight')print(f"图表已保存至: {output_path}")else:plt.show()def main():# CSV 文件路径(请替换为实际文件路径)csv_file = 'C:/Users/IT14/Desktop/sales_data.csv'# 配置参数category_column = 0 # 分类列索引(假设第一列是分类)value_column = 1 # 数值列索引(假设第二列是数值)chart_title = '销售数据分布扇形图'# 读取数据categories, values = read_csv_data(csv_file, category_column, value_column)if not categories or not values:print("没有足够的数据来生成图表")return# 生成并显示/保存图表generate_pie_chart(categories, values, chart_title, output_path='sales_pie_chart.png')if __name__ == "__main__":main()
相关文章:

python-数据可视化(大数据、数据分析、可视化图像、HTML页面)
通过 Python 读取 XLS 、CSV文件中的数据,对数据进行处理,然后生成包含柱状图、扇形图和折线图的 HTML 报告。这个方案使用了 pandas 处理数据,matplotlib 生成图表,并将图表嵌入到 HTML 页面中。 1.XSL文件生成可视化图像、生成h…...
el-select中自定义 两组el-option,但是key不一样,并且点击需获取当前整个项的所有属性
当el-select中只有一组el-option , 获取点击的当前项的属性 , el-select 绑定:value-keyid 但是 当el-select中有两组el-option ,每组option的key不一致,如下代码所示 <el-selectv-model"sth" change"choosee":value-key"…...

【笔记】OpenCV的学习(未完)
由于只记关键和不懂的部分 希望做到下次再看这部分笔记就记得 所以用词会非常简练 前向传播 输入数据依次经过模型的各层,按照各层定义的运算规则进行计算,最终得到模型预测输出的过程。 单向的信息流动,不涉及模型参数的更新。 助于思考的…...

多模态大语言模型arxiv论文略读(八十七)
MG-LLaVA: Towards Multi-Granularity Visual Instruction Tuning ➡️ 论文标题:MG-LLaVA: Towards Multi-Granularity Visual Instruction Tuning ➡️ 论文作者:Xiangyu Zhao, Xiangtai Li, Haodong Duan, Haian Huang, Yining Li, Kai Chen, Hua Ya…...
《棒球百科》长寿运动排名·棒球1号位
关于长寿运动的排名,运动长寿秘诀: 一、全球公认的「长寿运动」排名 游泳(低冲击、强化心肺) 快走/健走(每日30分钟降低15%早逝风险) 太极拳(平衡力减压,哈佛研究称可延缓衰老&am…...
Maven 项目打包时添加本地 Jar 包
在 Maven 项目开发中,我们经常会遇到需要引入本地 Jar 包的场景,比如使用未发布到中央仓库的第三方库、公司内部自定义工具包,或者处理版本冲突的依赖项。本文将详细介绍如何通过 Maven 命令将本地 Jar 包安装到本地仓库,并在项目…...

记录将网站从http升级https
http与https 你知道http是什么吗,那你知道https吗?在进行升级之前我们应该都听说http不安全,要用https,那你知道这是为什么吗? 什么是http? HTTP 是超文本传输协议,也就是HyperText Transfer…...
如何利用 ORM 框架有效防范 SQL 注入攻击
如何利用 ORM 框架有效防范 SQL 注入攻击 1. 引言 在现代 Web 开发中,SQL 注入攻击始终是数据库安全的一大隐患。攻击者利用不安全的 SQL 语句执行恶意操作,可能导致数据库泄露、篡改甚至被完全控制。幸运的是,ORM(对象关系映射)框架为开发者提供了一种更安全、更高效的…...
spark-shuffle 类型及其对比
1. Hash Shuffle 原理:将数据按照分区键进行哈希计算,将相同哈希值的数据发送到同一个Reducer中。特点:实现简单,适用于数据分布均匀的场景。但在数据分布不均匀时,容易导致某些Reducer处理的数据量过大,产…...

免费PDF工具-PDF24V9.16.0【win7专用版】
【百度】https://pan.baidu.com/s/1H7kvHudG5JTfxHg-eu2grA?pwd8euh 提取码: 8euh 【夸克】https://pan.quark.cn/s/92080b2e1f4c 【123】https://www.123912.com/s/0yvtTd-XAHjv https://creator.pdf24.org/listVersions.php...
游戏开发实战(二):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
文章目录 奇美拉和队列奇美拉被动技能多对多观察者关系实现自定义元类奇美拉基类 管理奇美拉的队列奇美拉队列类心得体会扩展 规则定义工作相关奇美拉相关 奇美拉属性 在本篇博文,我将介绍本项目的整体框架,以及“编码规则”,这些规则保证了本…...
人工智能发展
探秘人工智能领域的热门编程语言与关键知识 在当今科技飞速发展的时代,人工智能已渗透到生活的各个角落,从智能语音助手到精准的推荐系统,从自动驾驶汽车到医疗影像诊断,人工智能正以前所未有的速度改变着世界。而在这背后&#x…...
在Rockchip平台上利用FFmpeg实现硬件解码与缩放并导出Python接口
在Rockchip平台上利用FFmpeg实现硬件解码与缩放并导出Python接口 一、为什么需要硬件加速?二、[RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试](https://hi20240217.blog.csdn.net/article/details/148177158)三、核心代码解释3.1 初始化硬件上下文3.2 配置解码器3.3 构建滤镜链…...
Flink集成资源管理器
Flink集成资源管理器 Apache Flink 支持多种资源管理器,主要包括以下几种: YARN ResourceManager :适用于使用 Hadoop YARN 作为资源管理器的环境。YARN ResourceManager 负责管理集群中的资源,包括 CPU、内存等,并…...

一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.concat():轴向拼接
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在数据分析中,数据往往分散在多个来源(如不同文件、数据库表或API),需…...

安卓原生兼容服务器
安卓原生兼容服务器的定义 安卓原生兼容服务器指基于Android系统内核和服务框架构建的服务器环境,能够在不依赖第三方适配层的情况下,直接运行符合Android API规范的服务程序,并满足与其他软硬件组件的协同工作需求。其核心特征体现在以下…...

优化用户体验:拦截浏览器前进后退、刷新、关闭、路由跳转等用户行为并弹窗提示
🧑💻 写在开头 点赞 收藏 学会🤣🤣🤣 需求 首先列举一下需要拦截的行为,接下来我们逐个实现。 浏览器前进后退标签页刷新和关闭路由跳转 1、拦截浏览器前进后退 这里的实现是核心,涉及到大…...
横川机器人驱动器导入参数教程
连接端口:有分220v和380v(刷新多次无效果就重新打开软件)升级固件:区分低压版和高压版导入参数:下载参数,下载成功后必须软重启,重新连接确认电机无干涉后相序测试 (等待10s&#x…...

大学生创新创业项目管理系统设计——数据库实验九
本实验为自己设计完成,我当年数据库实验得了94分 目录 1.实验目的 2.实验内容和要求 3.实验步骤 4.实验心得 实验九 数据库设计 1.实验目的 掌握数据库设计的过程和方法。 2.实验内容和要求 (35)大学生创新创业项目管理系统设计 一…...

电磁场与电场、磁场的关系
电磁场与电场、磁场之间存在着深刻的内在联系和统一性关系。这三者共同构成了电磁相互作用的基本框架,是理解电磁现象的关键所在。 电场和磁场实际上是电磁场的两个不同表现形式,它们既相互区别又密切联系。电场主要由静止电荷产生,表现为对…...

Python爬虫实战:研究Newspaper框架相关技术
1. 引言 1.1 研究背景与意义 互联网的快速发展使得新闻信息呈现爆炸式增长,如何高效地获取和分析这些新闻数据成为研究热点。新闻爬虫作为一种自动获取网页内容的技术工具,能够帮助用户从海量的互联网信息中提取有价值的新闻内容。本文基于 Python 的 …...

Kotlin MultiPlatform 跨平台版本的记账 App
前言 一刻记账 KMP (Kotlin MultiPlatform) 跨平台版本今天终于把 Android 和 iOS 进度拉齐了. 之前只有纯 Android 的版本. 最近大半年有空就在迁移代码到 KMP 上 中间学了 iOS 基础知识. xcode 的使用. 跨平台的架构的搭建… 感觉经历了很多很多. 一把辛酸泪 迁移的心路历…...

PIO 中的赋值魔术,MOV 指令
前言 在普通编程语言中,mov 可以理解为“赋值指令”,将一个值从一个地方拷贝到另一个地方。在 RP2040 的 PIO 汇编语言中,mov 同样是数据传递的关键指令,但它操作的是 PIO 独有的几个寄存器。 在 PIO 中,你可以用 mov …...
[docker]更新容器中镜像版本
从peccore-dev仓库拉取镜像 docker pull 10.12.135.238:8060/peccore-dev/configserver:v1.13.45如果报错,请参考docker拉取镜像失败,添加仓库地址 修改/etc/CET/Common/peccore-docker-compose.yml文件中容器的版本,为刚刚拉取的版本 # 配置中心confi…...

第十七次CCF-CSP算法(含C++源码)
第十七次CCF-CSP认证 小明种苹果AC代码 小明种苹果(续)AC代码 后面好难哈哈 小手冰凉 小明种苹果 输入输出: 题目链接 AC代码 #include<iostream> using namespace std; int n,m; int res,res3; int sum; int res21; int main(){cin …...

打造一个支持MySQL查询的MCP同步插件:Java实现
打造一个支持MySQL查询的MCP同步插件:Java实现 用Java实现一个MCP本地插件,直接通过JDBC操作本地MySQL,并通过STDIO与上层MCP客户端(例如Cursor)通信。插件注册一个名为mysql 的同步工具,接收连接参数及SQL…...

黑马k8s(十五)
1.Ingress介绍 2.Ingress使用 环境准备 Http代理 Https代理...
Axure项目实战:智慧运输平台后台管理端-订单管理1(多级交互)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:订单管理 主要内容:条件组合、中继器筛选、表单跟随菜单拖动、审批数据互通等 应用场景…...

解决 cursor 中不能进入 conda 虚拟环境
【问题】 遇到一个小问题,我创建的conda 环境在 cmd、powershell中都可以激活,但在pycharm、cursor中却不能激活? 看图 cmd中正常: cursor中不正常: 【解决方法】 cursor 中,打开终端,输入&a…...
微信小程序请求扣子(coze)api的例子
1. 准备工作 在开始之前,确保已经完成了以下准备工作: 创建并发布了 Coze 智能体。获取了个人访问令牌(Personal Access Token),这是用于授权的关键凭证。确认目标智能体的 Bot ID 和其他必要参数已准备就绪。 2. 请…...