如何基于Flask实现CSV上传的分组词频统计
Flask端对接高频词统计逻辑的落地方案
核心结论:无需强行构建独立统计结果DataFrame对接模板,完全可以复用你在Jupyter中跑通的统计逻辑,顺着现有Flask的上传、读取、渲染链路无缝迁移,开发量极低。
1. 逻辑抽离:把Notebook代码改成可复用的纯函数
直接把你在Jupyter里调试好的统计逻辑摘出来,做成一个接收完整pandas DataFrame为入参的独立函数,不需要重写逻辑:
- 函数内保留原有全部处理流程:遍历
variable1列所有唯一值、按分类过滤comms_clean列文本、按空格分词、用Counter取每个分类的Top3高频词及对应计数、同步计算每个分类的总样本量 - 函数直接返回结构化的列表嵌套字典结构即可,不需要刻意转成DataFrame,示例返回结构:
# 结构可直接传给Flask模板,无需二次转换 [ { "category": "分类1", "sample_count": 156, "top3_words": [("订单", 42), ("退款", 27), ("物流", 19)] } ] > 补充说明:只有后续需要实现“统计结果CSV下载”功能时,才需要把这个结构转成DataFrame;纯页面渲染的场景下转DataFrame反而增加冗余格式转换步骤,完全没有必要。
2. 流程对接:嵌入现有app.py的请求处理链路
不需要修改你已经写好的文件格式校验、按;分隔符读取CSV、解析表头、生成head()预览的逻辑:
- 在代码走到“成功读取完整CSV为DataFrame”的节点后,直接调用刚才抽离的统计函数,把返回的结构化结果存入变量
- 把这个统计结果变量和原有传给模板的CSV表头、预览数据参数一起,传入
render_template()即可,和现有预览内容的传参逻辑完全一致。
3. 模板适配:在index.html中增加统计结果渲染区块
不需要改动现有已完成的CSV预览、表头渲染代码,直接在预览区块下方新增统计结果的展示模块即可:
- 循环遍历后端传过来的分类统计列表
- 每个分类展示3项核心信息:分类名称、总样本量、Top3高频词及对应计数
- 取值逻辑和你现在渲染CSV表头、预览行的写法完全一致,没有额外的模板语法学习成本。
实操注意事项
- 统计逻辑全部放在后端Python函数中,不要把数据处理逻辑写到HTML模板的语法里,保持前后端职责分离
- 读入CSV后先给
comms_clean列做空值填充(比如df['comms_clean'] = df['comms_clean'].fillna('')),避免空值参与分词时触发属性报错 - 初期不需要单独做统计结果页面,直接把统计结果和CSV预览放在同一个页面渲染,用户上传文件后即可一次性看到全部内容,交互路径最短。
内容的提问来源于stack exchange,提问作者Mithos
相关产品推荐
相关产品推荐

