最近发现了一个好玩的Python库,它可以将训练好的机器学习模型转换为Java、C、JavaScript、Go、Ruby,VBA 本地代码,可以让连Python和机器学习一无所知的同学也能感受预测的神奇。

先看效果哈

其实做这个小东西,感觉还能玩出别的花样,但不清楚到底有什么场景。写这篇文章的时候,我对Excel的 VBA 一无所知,百度了几个用法就开搞了。现在我也能用 VBA 写一些函数和过程了,这也许是最大的收货吧。

m2cgen

m2cgen(Model 2 Code Generator)是一个轻量级代码生成器,它可以将训练好的机器学习模型转换成无需依赖库的本地代码。

m2cgen目前支持的模型还蛮多的,常用常见的都包括了:

使用方法

m2cgen的安装非常方便,直接pip:

pip install m2cgen

使用,先用XGBClassifier训练一个模型

# import packages
import pandas as pd
import numpy as np
import os re
from random import sample
from sklearn import datasets
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pickle
import m2cgen as m2c seed = 2020
test_size = 0.3
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model on training data
model = XGBClassifier()
model.fit(X_train, y_train)

将模型转为VBA

code = m2c.export_to_visual_basic(model, function_name = 'pred')

VBA的英文全称是Visual Basic for Applications,是一门标准的宏语言,通常使用来实现Excel中没有提供的功能、编写自定义函数、实现自动化功能等。VBA语言不能单独运行,只能被office软件(如:Word、Excel等)所调用。

生成的VBA长这样:

实话实话,我对VBA还是小白,也懒得深究,于是就把代码改成了过程,这里就不贴了,我把改好之后的代码放到了github。有VBA大神可以帮忙,欢迎提交 PR。

https://github.com/tjxj/excel2ml

想省事的同学直接去copy即可

Excel

点击excel菜单中的【开发工具】(如果没有开发工具选项卡,请参考:excel开发工具选项卡在哪?原来需要自己添加),然后在代码选项卡中点击【Visual Basic】 即可,也可以直接Alt + F11 唤出:

点击插入-模块,把改好的 VBA 代码贴进去即可

保存后退出,然后回到sheet页,开发工具-插入-按钮



编辑好文字后,右键指定宏,选中我们刚才保存的那个即可。



然后就一切OK了。

The End

太骚了,用Excel玩机器学习的更多相关文章

  1. [excel玩转表格教程][1G][AVI]

    [excel玩转表格教程][1G][AVI] 下载地址 :http://www.fu83.cn/thread-222-1-1.html

  2. 线程的 run() 和 start() ; 太骚了 ~~

    线程的 run() 和 start() ; 太骚了 ~~ 线程的 run() 和 start() ; 太骚了 ~~注:本文转载于:CodeCow · 程序牛 的个人博客:http://www.code ...

  3. 谁说搞Java的不能玩机器学习?

    简介 机器学习在全球范围内越来越受欢迎和使用. 它已经彻底改变了某些应用程序的构建方式,并且可能会继续成为我们日常生活中一个巨大的(并且正在增加的)部分. 没有什么包装且机器学习并不简单. 它对许多人 ...

  4. 年薪100万的人都是怎么玩Excel的?

    年薪100万的人都是怎么玩Excel的? 2017-12-21 13:42美国 作者:珍妮Jenny 来源:一周进步(ID:weekweekup) 本文已获原作者转载授权,如需转载请联系原公号 本文重 ...

  5. [从产品角度学EXCEL 00]-为什么要关注EXCEL的本质

    前言 Hello 大家好,我是尾巴,从今天开始,在这里连载<从产品角度学EXCEL>的系列文章.本文不接受无授权转载,如需转载,请先联系我,非常感谢. 与世面上的大部分EXCEL教程不同的 ...

  6. 从Excel转Access的一个方法说开去(DataRow的state状态)

    因为客户对access不太熟悉,更喜欢玩EXCEL.但是系统要求导入ACCESS.所以我们得做个把EXCEL转换成Access的小工具.(别问我为啥不让系统直接导入excel....我不知道!),然后 ...

  7. 个人永久性免费-Excel催化剂功能第102波-批量上传本地图片至网络图床(外网可访问)

    自我突破,在100+功能后,再做有质量的功能,非常不易,相对录制视频这些轻松活,还是按捺不住去写代码,此功能虽小,但功课也做了不少,希望对真正有需要的群体带来一些惊喜. 背景介绍 图床的使用,一般是写 ...

  8. 个人永久性免费-Excel催化剂功能第45波-逻辑判断函数增强

    自定义函数的最大的作用是可以按需定制,在Excel的原生函数不提供的场景时,传统方法需要使用大量的嵌套函数去实现,实在太累,今天Excel催化剂再次送上一波绝对十分常用的函数逻辑判断类函数给大家使用! ...

  9. 吐槽下Excel的十大不规范使用问题

    Excel是个老少咸宜的软件工具,这是不争的事实,无论哪个级别的用户,都能在乐在其中.但问题是太多的人群因为不懂得正确的使用姿势,硬生生地把Excel玩得让人啼笑皆非,同样留给接手者一个难堪无比的烂摊 ...

随机推荐

  1. java实现excel表格导入数据库表

    导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程 一.上传excel 前端jsp页面,我的是index.jsp 在页面中我自己加入了一个下载上传文 ...

  2. 学习AJAX必知必会(4)~同源策略、解决跨域问题(JSONP、CORS)

    一.同源策略(Same-Origin Policy),是浏览器的一种安全策略. 1.同源(即url相同):协议.域名.端口号 必须完全相同.(请求是来自同一个服务) 2.跨域:违背了同源策略,即跨域. ...

  3. 集合框架-LinkedList集合练习(堆栈和队列)

    1 package cn.itcast.p2.linkedlist.test; 2 3 import java.util.LinkedList; 4 5 /* 6 * 请使用LinkedList来模拟 ...

  4. mybatis配置入门中遇到的问题

    问题一 非法注射 问题描述:WARNING: An illegal reflective access operation has occurred 这种问题主要是jdk版本和mybatis的jar包 ...

  5. 学习Java第4天

    今天所作的工作: 1.类 2.类的构造方法 3.静态变量 4.类的主方法 5.对象 今天没有完成昨天的工作安排,因为发现进入类之后的编程思想发生的变化,相对与c++的逻辑既有较大的相似性又有不同的性质 ...

  6. 求一个number数组中的最大值和最小值的差

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  7. Mybatisplus和JdbcTemplate的简单使用

    Mybatisplus 简介 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的 ...

  8. Tomcat多实例单应用部署方案 (转)

    一.Tomcat部署的场景分析 通常,我们对tomcat部署需求可以分为几种:单实例单应用,单实例多应用,多实例单应用,多实例多应用. 对于第一种场景,如果不要求周期性地维护tomcat版本,一般的做 ...

  9. html重点标签总结

    一. iframe 的学习 iframe通俗的的理解就是,可以在页面里面嵌套新的页面 它的使用会使页面变卡,一般会有一个固定的尺寸,默认的.他也属于可替换元素行列.我们可以通过CSS来改变尺寸 fra ...

  10. Nodejs中调用系统命令、Shell脚本的方法和实例

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/ch ...