摘要:2023-01-01,Product A,1500.00,North
以下是一个基于 Flask + Pandas + CSV 的简单报表实现示例,包含数据加载、处理和可视化展示:
1. 项目结构
bash
flask-report/
├── app.py
├── data/
│ └── sales_data.csv
└── templates/
└── report.html
2. CSV 数据示例 (data/sales_data.csv)
csv
Date,Product,Amount,Region
2023-01-01,Product A,1500.00,North
2023-01-02,Product B,2000.00,South
2023-01-03,Product C,1800.00,East
...(更多测试数据)
3. Flask 应用 (app.py)
python
from flask import Flask, render_template
import pandas as pd
app = Flask(__name__)
def load_data:
"""加载并处理CSV数据"""
try:
df = pd.read_csv('data/sales_data.csv', parse_dates=['Date'])
# 数据清洗和处理示例
df['Month'] = df['Date'].dt.strftime('%Y-%m')
df['Amount'] = pd.to_numeric(df['Amount'], errors='coerce')
# 创建汇总数据
summary = df.groupby(['Month', 'Region'])['Amount'].sum.unstack.reset_index
return {
'raw_data': df.to_dict('records'),
'summary': summary.to_dict('records'),
'columns': summary.columns.tolist
}
except Exception as e:
print(f"Error loading data: {str(e)}")
return None
@app.route('/report')
def show_report:
"""报表展示路由"""
data = load_data
if data is None:
return "数据加载失败,请检查数据文件"
return render_template('report.html', data=data)
if __name__ == '__main__':
app.run(debug=True)
4. 模板文件 (templates/report.html)
html
销售报表
销售汇总报表
{% for column in data.columns %}
{{ column }}
{% endfor %}
{% for row in data.summary %}
{{ row[column] | default(0) | round(2) }}
{% endfor %}
{% endfor %}
原始数据
Date
Product
Amount
Region
{% for item in data.raw_data %}
{{ item.Date }}
{{ item.Product }}
{{ "¥%.2f" | format(item.Amount) }}
{{ item.Region }}
{% endfor %}
$(document).ready(function {
$('#summaryTable, #rawDataTable').DataTable({
paging: true,
searching: true,
ordering: true,
info: true
});
});
5. 运行与使用
安装依赖:bash
pip install flask pandas
运行应用:bash
python app.py
访问报表:功能特点:
数据加载与处理:Ø 自动解析日期字段
Ø 金额数据校验
Ø 按月/地区汇总数据
可视化展示:Ø 响应式Bootstrap布局
Ø 交互式排序和搜索(DataTables插件)
Ø 双表格展示(汇总数据 + 原始数据)
数据格式化:Ø 金额显示为货币格式
Ø 数字保留两位小数
Ø 自动处理空值
扩展建议:
数据可视化增强:python
import matplotlib.pyplot as plt
def generate_chart:
df = pd.read_csv('data/sales_data.csv')
plt.figure
df.groupby('Product')['Amount'].sum.plot.pie(autopct='%1.1f%%')
plt.savefig('static/sales_pie.png')
添加数据过滤:python
# 在路由中添加过滤参数
@app.route('/report')
def show_report:
region = request.args.get('region')
# 添加过滤逻辑
导出功能:html
导出Excel
function exportExcel {
window.location = '/export'
}
Flask 作为Web框架Pandas 进行数据处理CSV 作为数据存储Bootstrap 用于界面美化DataTables 实现交互式表格增加异常处理添加用户认证优化大数据量处理添加缓存机制使用生产级Web服务器(如Gunicorn)来源:老客数据一点号