网易首页 > 网易号 > 正文 申请入驻

一小时开发数据分析和机器学习平台(手把手,附Python代码)

0
分享至

老规矩,先看效果

说到数据分析平台,可能我们会想到重量级AWS和阿里云。他们提供的平台和服务可以进行数据分析和机器学习。我们今天分享的方法主要是针对无前端知识,无开发团队的业务人员,数据分析师和建模师,如何快速搭建数据分析和机器学习平台,让自己的日常工作更加方便。

人生苦短,我用python。没错,我们就是用纯python搭建!

我们初步需要实现如下功能:

  • 设计一个网页版的用户界面,支持交互

  • 支持从本地选取数据集

  • 支持自动化可视化分析

  • 支持回归分析和分类分析,机器学习算法多样

  • 支持查看训练记录

  • 支持查看所有训练模型的参数,结果,甚至绘图

  • 支持预测新数据集

  • 支持其他机器学习任务(比如异常检测,规则关联,自然语言处理)

  • 其他细节

软件很轻量,功能很齐全。这么多功能特性,平时怎么着也得一个团队开开发。但是有了python,我们可以一个人一个小时搞定,因为本教程代码量不到100行!!!先看效果:

‍‍

核心工具

Python胜在我们不用重复造轮子。创建数据分析和机器学习平台,我们自然也要找到神兵利器。streamlit和pycaret 便是其中最核心的工具

streamlit的官方链接在此:https://docs.streamlit.io/en/stable/

streamlit工具对于业务人员来说,有两个优点:

  • 既有的组件方便快速设计网页:

    该库已经内置很多组件,比如文本输入,侧边栏,按钮,滑块,图画显示等组件。

    调用方式也很简单,就是单个函数即可。

  • 部署和运行方便:只需要一个命令即可--> streamlit run main.py

pycaret 属于基于sklearn的更高阶的机器学习库,高阶到无需了解数据,无需了解算法,便可完成全自动机器学习建模和预测。当然,对于我们学习来说,还是需要了解算法和数据。之前的文章我们已经介绍了pycaret库,可以参考

准备环境

既然是基于Python的解决方案,就需要基本的python IDE,我一般推荐pycharm,尤其是涉及到网页开发或者项目开发。

安装以下库,通过pip安装即可。


pip install streamlitpip install streamlit_pandas_profilingpip install pycaret

项目文件夹里面包含如下(文末提供源码)

  • main.py 我们的代码

  • data 文件夹用于放置示例数据集,可不用

  • mlruns 文件夹 ,用于管理训练的机器学习模块记录,系统会自动生成

  • logs.log 用于记录系统日志

辅助程序

首先导入需要的库,具体见代码。


import streamlit as st # 用于设计网页import pandas as pdfrom pandas_profiling import ProfileReport # 用于生成报表from streamlit_pandas_profiling import st_profile_report # 用于在streamlit中显示报表import osimport pycaret.classification as pc_cl # 自动机器学习分类import pycaret.regression as pc_rg # 自动机器学习回归import mlflow # 模型管理

接下来我们需要准备几个辅助函数,这些函数主要是用于处理一些用户交互的细节。

  • 逐行读取logs.log,显示最末选定行数,用户可以设定行数。


def get_model_training_logs(n_lines = 10):file = open('logs.log', 'r')lines = file.read().splitlines()file.close()return lines[-n_lines:]
  • 获取当前路径下特定类型的文件列表,比如data文件夹的所有csv文件

def list_files(directory, extension):
# list certain extension files in the folder
return [f for f in os.listdir(directory) if f.endswith('.' + extension)]

  • 获取文件的完整路径,用于读取数据集


def concat_file_path(file_folder, file_selected):# handle the folder path with '/' or 'without './'# and concat folder path and file pathif str(file_folder)[-1] != '/':file_selected_path = file_folder + '/' + file_selectedelse:file_selected_path = file_folder + file_selectedreturn file_selected_path
  • 加载数据集,注意这里为了软件的性能,会将数据集放入缓存,重复加载同一数据集不会重复占用系统资源。


@st.cache(suppress_st_warning=True)def load_csv(file_selected_path, nrows):# load certain rowstry:if nrows == -1:df = pd.read_csv(file_selected_path)else:df = pd.read_csv(file_selected_path, nrows=nrows)except Exception as ex:df = pd.DataFrame([])st.exception(ex)return df

设计主程序

主程序包含了网页相关的界面设计以及用户操作响应,主要是选取合适的streamlit组件以及触发相应的函数。

下图是网页侧边栏(功能栏)设计的组件选择,侧边栏的设计是重中之重,因为它涉及主要功能模块,需要根据用户的操作来执行相应的函数。

定义数据源与探索性分析

当“定义数据源”的checkbox被勾选后,相应的功能才被激活,用户才可以执行后续动作:

  • 输入文件夹路径,这里支持相对路径,比如输入data,表示读取当前路径下的data文件夹

  • 文件夹路径输入后(回车键),系统会自动读取所选文件夹的csv文件,并且将文件名列出到下拉列表。

  • 在输入行数中可以选择需要读取的行数。


if st.sidebar.checkbox('定义数据源'):file_folder = st.sidebar.text_input('文件夹', value="data")data_file_list = list_files(file_folder, 'csv')if len(data_file_list) ==0:st.warning(f'当路径无可用数据集')else:file_selected = st.sidebar.selectbox('选择文件', data_file_list)file_selected_path = concat_file_path(file_folder, file_selected)nrows = st.sidebar.number_input('行数', value=-1)n_rows_str = '全部' if nrows == -1 else str(nrows)st.info(f'已选择文件:{file_selected_path},读取行数为{n_rows_str}')else:file_selected_path = Nonenrows = 100st.warning(f'当前选择文件为空,请选择。')

探索性分析相对简单,只需要一个按钮即可。之后会调用pandas-profiling 来生成EDA的分析结果。pandas-profiling 的介绍可以看之前的文章:

if st.sidebar.checkbox('探索性分析'):if file_selected_path is not None:if st.sidebar.button('一键生成报告'):df = load_csv(file_selected_path, nrows)pr = ProfileReport(df, explorative=True)st_profile_report(pr)else:st.info(f'没有选择文件,无法进行分析。')

快速建模与日志

快速建模部分核心是基于pycaret库,之前我们介绍过pycaret 库,它是很强大的自动化机器学习工具,不仅支持回归分析和分类预测,而且支持自然语言处理,规则关联,聚类,异常检测等学习任务,后面这几个模块本demo中并没有实现,但是实施起来不是很难。

代码部分相对容易,没有什么技巧可言,主要是一些细节处理,比如需要从读取的数据集Dataframe中获取所有的列名,让用户选择需要的目标列。还有,回归和分类算法支持的算法列表并不相同,需要根据所选的任务来动态获取算法列表。

最后就是用户信息提醒,这里采用info,success,warning等组件提供给用户系统的状态信息。

我们通过配置pycaret,可以使过程日志保存在log中。


为节省文章篇幅,代码见文末源码

模型管理与预测

mlflow是一款独立的,成熟的模型生命周期管理软件。其中tracking 模块可以记录每一次运行的参数,运行的结果,metrics,模型的保存,绘图的保存等(当然记录哪些内容都是需要配置的)。

pycaret中集成了mlflow 模块,所以我们只需要在调用pycaret 创建模型时,允许系统调用mlflow来管理我们的运行记录。

这里我们将mlflow的运行日志通过dataframe显示出来,当然更多的细节我们可以通过mlflow的网页来查看,比如模型信息,绘图等。

如果需要查看mlflow 服务器网页,需要在命令行中输入以下代码来启动:


mlflow ui

模型在mlflow中保存为pkl格式,我们需要调用mlflow中的load_model函数来获取模型的信息。pycaret的模型相比于一般的sklearn的模型,多了pipeline的(管道模型)信息,这个pipeline可以用于对数据集进行预处理

加载的模型支持predict 方法,因此我们只需要输入数据集即可预测。这里为了节省布局控件,我们继续采用“定义数据源”的数据集来进行预测。


为节省文章篇幅,代码见文末源码

整合与运行程序

我们把上面的所有涉及网页设计的代码,放置在一个函数下,比如:


def app_main():#上面的所有涉及网页的代码

然后设置程序的入口代码:


if __name__ == '__main__':app_main()

以上就是所有的代码。

运行程序我们只需要在当前路径下,在命令行输入:


streamlit run main.py

系统会在8501 端口下,运行app,在浏览器中输入网址即可运行。

总结

本文的代码难度属于入门级别,但是达成的效果却是很实用。因为这样的数据分析平台在日常中绝对可用,而且很顺手。如果需要扩展自动机器学习的任务,比如自然语言处理,也很简单。只需要参考回归或者分类的代码即可,相信工作量不会超过10行代码(多是复制粘贴),有兴趣的朋友可以尝试。

上述的源代码都放在github上:bingblackbean/streamlit_pycaret




三连在看,月入百万

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
反转!国际乒联官方释疑奥运选拔,陈梦参赛无悬念,王曼昱梦碎

反转!国际乒联官方释疑奥运选拔,陈梦参赛无悬念,王曼昱梦碎

足球慢镜头
2024-06-20 11:17:41
中国校花在美国留学,却偷偷带两个白人男子回宿舍,闺蜜:要自爱

中国校花在美国留学,却偷偷带两个白人男子回宿舍,闺蜜:要自爱

爱讲故事的猪头
2023-09-06 17:13:07
汪小菲杀疯了,深圳新店开业阵仗堪比明星,网友:光头嫂要后悔了

汪小菲杀疯了,深圳新店开业阵仗堪比明星,网友:光头嫂要后悔了

小咪侃娱圈
2024-06-19 16:31:23
新加坡前外交官:炫什么“使馆车、外交豁免权”? 中国人不吃这一套!

新加坡前外交官:炫什么“使馆车、外交豁免权”? 中国人不吃这一套!

新加坡眼
2024-06-19 19:45:03
上海的真实收入到底是怎样的?网友:少上网多看看现实吧!

上海的真实收入到底是怎样的?网友:少上网多看看现实吧!

王姐懒人家常菜
2024-06-20 10:27:30
第一次性生活有多痛?进不去怎么办

第一次性生活有多痛?进不去怎么办

喜马拉雅主播暮霭
2024-06-12 09:53:49
说透了美国做着和俄核战、印太全面战争准备,印太针对超过对苏联

说透了美国做着和俄核战、印太全面战争准备,印太针对超过对苏联

邵旭峰域
2024-06-19 15:30:02
俄乌战争已接近尾声

俄乌战争已接近尾声

战域笔墨
2024-06-17 17:45:59
第一批小米车主已经开始卖车了:有人不堪月供重负,有人转向华为问界

第一批小米车主已经开始卖车了:有人不堪月供重负,有人转向华为问界

金融界
2024-06-18 22:43:11
菲律宾受伤士兵照片公开,失去拇指退休金不够生活

菲律宾受伤士兵照片公开,失去拇指退休金不够生活

三叔的装备空间
2024-06-19 15:45:34
我住院15天无人问津,出院我就把要过户到儿子名下的房产收回

我住院15天无人问津,出院我就把要过户到儿子名下的房产收回

小女子不简单
2024-06-20 16:09:04
英国以涉俄为由制裁5家中企,时隔5天后,中方行动,直击英方要害

英国以涉俄为由制裁5家中企,时隔5天后,中方行动,直击英方要害

花小猫的美食日常
2024-06-19 19:50:45
英格兰队内讧!索斯盖特调停!短短10字,皇马1.8亿巨星让位

英格兰队内讧!索斯盖特调停!短短10字,皇马1.8亿巨星让位

阿泰希特
2024-06-20 14:14:56
明天3点,西班牙VS意大利,强强对话,精准预测:会打出个3比3?

明天3点,西班牙VS意大利,强强对话,精准预测:会打出个3比3?

第一体育
2024-06-20 14:26:44
王思聪女儿疑似蝴蝶手,一岁多还不会说话,黄一鸣回应惹争议!

王思聪女儿疑似蝴蝶手,一岁多还不会说话,黄一鸣回应惹争议!

古希腊掌管月桂的神
2024-06-19 16:50:48
广东多所高校为受灾学生提供临时困难补助

广东多所高校为受灾学生提供临时困难补助

新京报
2024-06-19 18:10:39
2024年起,中国或将迎四大降价潮,除房价外,这三类也准备降价了

2024年起,中国或将迎四大降价潮,除房价外,这三类也准备降价了

趣味萌宠的日常
2024-06-19 19:32:44
导弹从天而降!船只起火一名菲船员失踪,菲方:将采取必要措施

导弹从天而降!船只起火一名菲船员失踪,菲方:将采取必要措施

兵说
2024-06-19 17:20:34
统计局公布数据,依旧在降,惨烈的时候可能要来了

统计局公布数据,依旧在降,惨烈的时候可能要来了

海蓝聊房
2024-06-20 11:50:32
重大失误!日本大型银行误判欧美降息时机 遭受史上罕见损失

重大失误!日本大型银行误判欧美降息时机 遭受史上罕见损失

财联社
2024-06-19 21:51:10
2024-06-20 17:12:49
机器学习与Python社区
机器学习与Python社区
机器学习算法与Python
2473文章数 10252关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

报道称中国或对欧盟乳制品发起反补贴调查 商务部回应

头条要闻

报道称中国或对欧盟乳制品发起反补贴调查 商务部回应

体育要闻

绿军的真老大,开始备战下赛季了

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

日本银行巨头突然爆雷!

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

艺术
手机
游戏
教育
军事航空

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

手机要闻

喜大泪奔,华为Pura 70系列总算降价,入手国产自主手机不再是梦

《EVE Vanguard》Steam页面 暂不支持中文

教育要闻

云南农业大学再“出圈”居然新增了一个咖啡专业?

军事要闻

乌媒:乌军遭受一系列惨痛失败 乌军总司令或将被解职

无障碍浏览 进入关怀版