纯Python构建Web应用:Remi与 Pandas 结合实现数据分析与展示
引言
大家好,我是 ICodeWR。在前几篇文章中,我们介绍了 Remi 的基础功能、多页面应用、动态更新、与 Flask 结合、与数据库结合以及与 Matplotlib 结合。
今天将深入探讨如何将 Remi 与 Pandas 结合,实现数据分析与展示功能。
Pandas 是 Python 中最流行的数据分析库之一,通过将其与 Remi 结合,我们可以在 Web 应用中动态展示数据分析结果。
Pandas 简介
Pandas 是一个强大的数据分析库,提供了高效的数据结构(如 DataFrame)和数据处理功能。
通过将 Pandas 与 Remi 结合,我们可以在 Web 应用中动态展示数据分析结果,例如表格、统计信息和图表。
案例:创建一个数据分析与展示应用
我们将通过一个数据分析与展示应用的案例,演示如何将 Remi 与 Pandas 结合。最终效果如下:
前端(Remi):
- 显示数据表格。
- 提供按钮,用于加载数据和展示统计信息。
后端(Pandas):
- 使用 Pandas 加载和分析数据。
- 将分析结果嵌入到 Remi 应用中。
代码实现
1. 安装依赖
在开始之前,确保已安装 Pandas 和 Remi。
在项目 RemiEg 目录下创建 day10 子目录,然后在 RemiEg 目录下执行:
# 添加 pandas 库
uv add pandas remi
# 激活虚拟环境
.\.venv\Scripts\activate
2. 数据准备
在day10目录下创建一个 CSV 文件 data.csv,内容如下:
Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago
Diana,28,Houston
3. Remi 前端代码
在day10目录下创建remi_pandas_app.py,其代码如下:
from remi import start, App, gui
import pandas as pd
class PandasApp(App):
def __init__(self, *args):
super(PandasApp, self).__init__(*args)
def main(self):
# 创建一个垂直布局容器作为根容器
root_container = gui.VBox(width=600, style={'margin': 'auto', 'padding': '20px', 'border': '1px solid #ccc'})
# 创建标题标签
title = gui.Label("数据分析与展示", style={'font-size': '24px', 'text-align': 'center', 'margin-bottom': '20px'})
# 创建数据表格容器
self.table = gui.Table(width='100%', height=200, style={'margin-bottom': '20px'})
# 初始化表头 - 正确的方法
self.header_row = gui.TableRow()
for text in ['Name', 'Age', 'City']:
self.header_row.append(gui.TableItem(text))
self.table.append(self.header_row)
# 创建统计信息标签
self.stats_label = gui.Label("统计信息将显示在这里", style={'font-size': '16px', 'text-align': 'center', 'margin-bottom': '20px'})
# 创建加载数据按钮
load_button = gui.Button("加载数据", width=100, height=30)
load_button.onclick.do(self.on_load_clicked)
# 创建展示统计信息按钮
stats_button = gui.Button("展示统计信息", width=150, height=30)
stats_button.onclick.do(self.on_stats_clicked)
# 将所有组件添加到根容器中
root_container.append(title)
root_container.append(self.table)
root_container.append(self.stats_label)
root_container.append(load_button)
root_container.append(stats_button)
# 返回根容器
return root_container
def on_load_clicked(self, widget):
try:
# 加载 CSV 数据
self.df = pd.read_csv('data.csv')
# 清空表格(保留表头)
keys=[]
if len(self.table.children) > 1: # 保留第一行(表头)
for key, value in self.table.children.items():
if value != self.header_row:
keys.append(key)
for key in keys:
self.table.remove_child(self.table.children[key])
# 添加数据行 - 正确的方法
for _, row in self.df.iterrows():
table_row = gui.TableRow()
table_row.append(gui.TableItem(str(row['Name'])))
table_row.append(gui.TableItem(str(row['Age'])))
table_row.append(gui.TableItem(str(row['City'])))
self.table.append(table_row)
except Exception as e:
self.stats_label.set_text(f"加载数据失败: {str(e)}")
def on_stats_clicked(self, widget):
if hasattr(self, 'df'):
try:
# 计算统计信息
stats = self.df['Age'].describe()
# 更新统计信息标签
self.stats_label.set_text(f"统计信息:\n{stats.to_string()}")
except Exception as e:
self.stats_label.set_text(f"计算统计信息出错: {str(e)}")
else:
self.stats_label.set_text("请先加载数据!")
# 启动 Remi 应用
if __name__ == "__main__":
start(PandasApp, address='0.0.0.0', port=8080)
运行步骤
启动 Remi 应用:
# 进入 day10 子目录
cd day10
# 执行脚本
python remi_pandas_app.py
打开浏览器,访问 http://127.0.0.1:8080,你将看到一个数据分析与展示应用。
首界面:
加载数据后:
统计数据:
代码解析
Pandas 数据加载:
- 使用 pd.read_csv 加载 CSV 数据。
Remi 表格显示:
- 使用 gui.Table 组件显示数据表格。
- 通过 from_2d_matrix 方法动态更新表格内容。
统计信息计算:
- 使用 Pandas 的 describe 方法计算统计信息。
事件处理:
- 通过 on_load_clicked 方法处理加载数据按钮点击事件。
- 通过 on_stats_clicked 方法处理展示统计信息按钮点击事件。
总结
今天详细记录了如何将 Remi 与 Pandas 结合,并通过一个数据分析与展示应用的案例演示了数据分析与展示的实现。在接下来的文章中,我们将深入探讨 Remi 与其他 Python 库的集成。
交流讨论
- 你在使用 Remi 与 Pandas 结合时遇到过哪些问题?欢迎在评论区分享!
- 你希望在本系列中看到哪些 Remi 的实际应用场景?欢迎留言告诉我们!
附录:本篇案例用到的函数原型
1. pd.read_csv 方法
功能:读取 CSV 文件并返回 DataFrame。
原型:
pd.read_csv(filepath_or_buffer, **kwargs)
示例:
df = pd.read_csv('data.csv')
2. DataFrame.describe 方法
功能:生成描述性统计信息。
示例:
stats = df['Age'].describe()
3. gui.Table.from_2d_matrix 方法
功能:用二维数组填充表格。
原型:
table.from_2d_matrix(matrix, first_row=None)
示例:
self.table.from_2d_matrix(self.df.values.tolist(), first_row=['Name', 'Age', 'City'])
将陆续更新 Python 编程相关的学习资料!
作者:ICodeWR
标签:#编程# #python# #在头条记录我的2025# #春日生活打卡季#