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

老规矩,先看效果

在这里插入图片描述

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

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

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

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

  • 支持从本地选取数据集

  • 支持自动化可视化分析

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

  • 支持查看训练记录

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

  • 支持预测新数据集

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

  • 其他细节

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

在这里插入图片描述

核心工具

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

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

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

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

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

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

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

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

准备环境

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

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

pip install streamlit
pip install streamlit_pandas_profiling
pip install pycaret

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

  • main.py 我们的代码

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

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

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

在这里插入图片描述

辅助程序

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

import streamlit as st # 用于设计网页
import pandas as pd
from pandas_profiling import ProfileReport # 用于生成报表
from streamlit_pandas_profiling import st_profile_report # 用于在streamlit中显示报表
import os
import 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 path
    if str(file_folder)[-1] != '/':
        file_selected_path = file_folder + '/' + file_selected
    else:
        file_selected_path = file_folder + file_selected
    return file_selected_path
  • 加载数据集,注意这里为了软件的性能,会将数据集放入缓存,重复加载同一数据集不会重复占用系统资源。
@st.cache(suppress_st_warning=True)
def load_csv(file_selected_path, nrows):
    # load certain rows
    try:
        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 = None
        nrows = 100
        st.warning(f'当前选择文件为空,请选择。')

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

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行代码(多是复制粘贴),有兴趣的朋友可以尝试。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值