文章来源Python Django+SQL+Pandas+Pyecharts自建在线数据分析平台(一)
作者ccpic



感谢:感谢作者 ccpic 分享的优质内容,本网页主要用于学习知识的存档备份,欢迎点击原网页支持作者。

今天下定决心给自己挖一个超级大坑,因为这个主题涉及面太广了,篇幅也会很长。但不知道怎么了还是有了挖坑的冲动。可能随着工作经验的累积想法也出现了变化,冠冕堂皇的说法就是内心其实经历了一个从使命必达到开拓创新再到传道授业的过程。

笔者供职于一家上市药企做市场研究工作,没有计算机背景,编程纯属自学。平日的工作内容也很繁杂,程序化分析大约只占日常工作的20%。我把它看成自动化办公,提升分析效率与质量的手段,而可能穷极一生也不会像一些一手程序员一样领会到这些代码背后的本质。因此,本篇教程将在程序编写上没那专业(希望倒不至于漏洞百出),但相对贴近业务应用与解决实际问题,同时可能更适合传统行业非IT背景的专业人员。

(一)- 需求分析&技术实现

(二)初步搭建Django环境

(三)页面布局&Django模板

(四)SQL+Pandas初步处理数据

(五)前端表单交互

(六)Ajax异步传参与加载

(七)前端数据格式的处理

(八)DataTables接管前端表格

(九)Pyecharts实现交互图表

(十)静态图表的展示

(十一)“导出数据至Excel”功能

(十二)添加和配置缓存

(十三)用户登录系统

(十四)部署Django至生产环境

既然是建分析平台,在一切开始之前不妨也分析分析自己:

  • 我们的数据分析平台需要满足哪些核心需求?
  • 为了满足这些需求我们至少需要建设哪些核心功能?
  • 这些核心功能考虑效率和质量的最优解决方案是什么?

核心需求的问题其实就是我们对比现状最期待哪些地方有所提升,对于数据分析平台提升一般是指两方面,或提升效率,或提升用户体验。

想象一个传统行业,在没有程序化分析裸奔的时候,一般的数据分析主力是Excel拉数据透视表+简单的SQL。然后发现没有图表和一些Calculated Metrics,自己翻过来倒过去粘数写公式太累还容易出错,发展了数据透视图和字段公式。需要一些交互功能,再加入切片器和更复杂的公式嵌套。

一般到这算是跨过初级阶段的坎,但还是脱离不开万能的Excel的范畴,其实对多数人也够用了。之后再想进步的人开始折腾VBA+ADO。VBA极大地丰富了数据查询和数据展示的灵活性,并提升了自动化效率;ADO形成了在线数据平台的雏形,允许以一个Excel VBA的壳访问远程服务调数。这个解决方案可以说基本实现了程序化分析的初级阶段,核心问题还是无法脱离Excel的展示框架和VB的运行效率瓶颈。

之前在上一家MNC工作时自制的VBA+ADO数据分析工具,离职后无法访问数据服务器只剩个空壳,能看到左边是控件操作区域,右边是展示区域,由若干个工作表提供不同的查询维度

那么进入Python时代,我认为我们终于有机会跳脱Excel的框架,并以web框架为基础追求以下这些进步:

  • 提升整体数据查询和分析的速度性能
  • 提升多用户同时查询时的并发性能
  • 提升交互操作的用户体验
  • 在保留导出至Excel格式的同时提升结果可视化的整体用户体验,如提升表格和交互图表的美观性和便捷功能

在此基础上还有一些锦上添花的进阶需求,但我认为不是必须的:

  • 更好的用户权限系统
  • 查询和展示功能的自定义扩展功能,如允许用户自助式编辑Dashboard视图,自选布局和图表类型
  • 更丰富的导出功能,如导出到定制化的PDF Report

本系列文章先主要考虑核心的功能需求。而为了尽可能高质量地实现这些功能,我在之前也考察了一些市面上的整合解决方案,开源项目中目前最接近我们需求的是Airbnb开源的superset,但是使用之后感觉还是灵活性有比较大欠缺。最终决定从零开始自己整合自制一个平台,我用到的技术实现如下:

  • **后端Web框架:**Python 3.6 + Django 3.0.8
  • **数据库:**Mssql
  • **数据处理:**Pandas 1.0.5 + Numpy 1.19.0+mkl + 其他
  • Javascript库: jQuery
  • **前端css:**Semantic UI 2.4
  • **前端交互图表:**Pyecharts 1.8.1
  • **前端数据表格:**jQuery Datatables
  • **部署:**Apache2.4 + mod_wsgi

这套解决方案有很多地方都是可以斟酌替换的,如选择Django作为web框架对于一个自用小平台来说略显臃肿,可能Flask或FastAPI更灵活些,但是Django的文档最全生态健康,其实也挺适合我们这些二手程序员的。数据库使用Mssql是因为在老东家法国企业不允许用开源数据库,习惯沿用到了现在,Mysql或者Sqlite都可以替换。前端在当时没有使用React和Vue等更先进的框架,而是只使用了css,这是未来可以改进的方向。Semantic UI是我选择用来替代Bootstrap的。Pyecharts的替代方案则有highcharts等,但考虑echarts是国人出品可能对潜在的中国地图的展示需求更友好些。而Datatables的替代方案就更多了,数不胜数。可能唯独无可替代的就是Pandas+Numpy了,极大地提高了数据处理的效率,我真是太喜欢了。

那么,在我有勇气开始在下一篇进入正题之前,在本文末先看看实际效果吧。实际数据使用了医疗行业最著名的I司的外部销售数据,希望I司的人不会来找我麻烦。

第(二)篇,初步搭建Django环境,请移步: