全文共2327字,预计学习时长15分钟

图源:unsplash

笔者刚开始学习给数据科学编程时,发现要找到创建模块和包的简单解释以及教程非常困难,尤其是数据科学项目方面。

数据科学代码通常是非常线性的。一般情况下,要先从数据源提取数据,应用一系列转换,然后执行分析、计算或训练模型。但是为了代码的可读性、高效性和可重复性,将代码模块化并打包很有用。

本文将告诉你如何为数据科学和机器学习创建和使用自己的包和模块。笔者将使用成年人数据集,这个数据集通常用来建立分类机器学习模型,目标是预测给定成年人的年收入是否超过5万美元。

模块的数据科学用例

Python模块仅仅是Python的一组操作,通常是函数形式,保存在扩展名为.py的文件中。可以将该文件导入到Jupyter notebook、IPython shell或其他模块中,以便在项目中使用。

尝试运行一个实例。如下代码(从CSV文件中读取)将使用Pandas:

import pandas as pddata =pd.read_csv('adults_data.csv')

data.head()

这个数据集包含许多分类特征。如果打算用它来训练机器学习模型,就需要先执行一些预处理。通过分析这些数据,笔者决定在训练模型之前,采取以下步骤对数据进行预处理。

· 将雇主的单位类型、婚姻状况、家庭关系、种族和性别进行独热编码。

· 选取最常见的值,将余下的值归为“其他”,并对结果特征进行独热编码。该操作在最高教育水平、工作类型、原籍国中执行,因为它们包含大量特殊的值。

· 缩放剩余数值。

执行这些任务需要编写大量代码,这些任务都可能被多次执行,为使代码更具可读性并易于重用,可以将一系列函数写入到一个单独的文件中,并导入到 notebook(一个模块)中使用。

图源:unsplash

编写模块

要创建模块,就需要创建扩展名为.py的新空白文本文件。可以使用普通的文本编辑器,但也有许多人使用集成开发环境(Integrated Development Environment, IDE)。

集成开发环境为编写代码提供了很多附加功能,包括编译代码、调试和与Github集成的工具。它有许多不同类型可用,值得自行尝试,以发现最适合的一款。笔者个人更喜欢PyCharm。

笔者先创建了新的Python文件用以编写模块:

将其命名为preprocessing.py:

在这个文件中编写第一个预处理函数,并且在Jupyter Notebook中测试导入和使用。

preprocessing.py文件的顶部的代码如下,并为其添加了一些注释,理解起来是不是容易多了。

def one_hot_encoder(df,column_list):

"""Takes in adataframe and a list of columns

for pre-processing via one hotencoding"""

df_to_encode = df[column_list]

df = pd.get_dummies(df_to_encode)

return df

将此模块导入Jupyter Notebook中,只需编写以下代码:

import preprocessing as pr

autoreload是IPython的扩展,用起来方便快捷。倘若在导入之前添加了如下代码,无论在模块文件中做出了何种更改,都将同步反映在Notebook中。

%load_ext autoreload

%autoreload 2import preprocessing as pr

测试一下,使用它对数据进行预处理:

cols = ['workclass','marital-status', 'relationship', 'race', 'gender']one_hot_df =pr.one_hot_encoder(data, cols)

现在,将余下的预处理函数添加到preprocessing.py 文件中:

def one_hot_encoder(df,column_list):

"""Takes in adataframe and a list of columns

for pre-processing via one hotencoding returns

a dataframe of one hot encodedvalues"""

df_to_encode = df[column_list]

df = pd.get_dummies(df_to_encode)

return df

def reduce_uniques(df, column_threshold_dict):

"""Takes in adataframe and a dictionary consisting

of column name : value countthreshold returns the original

dataframe"""

for key, value incolumn_threshold_dict.items():

counts = df[key].value_counts()

others = set(counts[counts< value].index)

df[key] =df[key].replace(list(others), 'Others')

returns a dataframe of scaledvalues"""

df_to_scale = df[column_list]

x = df_to_scale.values

min_max_scaler =preprocessing.MinMaxScaler()

x_scaled =min_max_scaler.fit_transform(x)

df_to_scale = pd.DataFrame(x_scaled,columns=df_to_scale.columns)

return df_to_scale

如果返回到Notebook,就可以使用所有的函数来转换数据:

import pandas as pd

from sklearn import preprocessing%load_ext autoreload

%autoreload 2import preprocessing as prone_hot_list = ['workclass','marital-status', 'relationship', 'race', 'gender']

reduce_uniques_dict = {'education' : 1000,'occupation' : 3000, 'native-country': 100}

scale_data_list = data.select_dtypes(include=['int64','float64']).columnsone_hot_enc_df = pr.one_hot_encoder(data, one_hot_list)

reduce_uniques_df = pr.reduce_uniques(data, reduce_uniques_dict)

reduce_uniques_df = pr.one_hot_encoder(data, reduce_uniques_dict.keys())

scale_data_df = pr.scale_data(data, scale_data_list)final_data =pd.concat([one_hot_enc_df, reduce_uniques_df, scale_data_df], axis=1)

现在有了一个完全数值化的数据集,可以用来训练机器学习模型:

转换列的快照

当进行机器学习项目时,通常需要或有时需要创建几个相关模块并将其打包,以便一起安装使用。

图源:unsplash

例如,笔者目前在使用的一款针对机器学习模型的谷歌云部署解决方案,名为 AI Platform。此工具要求在机器学习模型中进行打包预处理、训练和预测步骤,以便上传并安装在平台上,来部署最终模型。

Python包是包含模块、文件和子目录的目录。该目录需要包含名为__init__.py的文件。此文件意味着应将其包含的目录视为包,并指定应导入的模块和函数。

下一步,为预处理管道模型中的所有步骤创建包。__init__.py 文件的内容如下。

from .preprocessing importone_hot_encoder

from .preprocessing import reduce_uniques

from .preprocessing import scale_data

from .makedata import preprocess_data

同一个包的模块可以导入到另一个模块中使用。另一个名为makedata.py的模块将被添加进目录中,该模块使用preprocessing.py模块执行数据转换,然后将最终数据集导出为CSV文件,供后续使用。

import preprocessing as pr

import pandas as pd

def preprocess_data(df, one_hot_list, reduce_uniques_dict, scale_data_list,output_filename):

one_hot_enc_df =pr.one_hot_encoder(data, one_hot_list)

reduce_uniques_df = pr.reduce_uniques(data,reduce_uniques_dict)

reduce_uniques_df =pr.one_hot_encoder(data, reduce_uniques_dict.keys())

scale_data_df = pr.scale_data(data,scale_data_list)

final_data =pd.concat([one_hot_enc_df, reduce_uniques_df, scale_data_df], axis=1)

final_data.to_csv(output_filename)

新目录如下所示:

现在可以回到Jupyter Notebook,使用这个包来执行所有的预处理。代码已经变得十分简单干净:

import pandas as pd%load_extautoreload

%autoreload 2

import preprocessing as prdata = pd.read_csv('adults_data.csv')one_hot_list =['workclass', 'marital-status', 'relationship', 'race', 'gender']

reduce_uniques_dict = {'education' : 1000,'occupation' : 3000, 'native-country': 100}

scale_data_list = data.select_dtypes(include=['int64','float64']).columnspr.preprocess_data(data, one_hot_list, reduce_uniques_dict,scale_data_list,'final_data.csv')

在目前的工作目录中,将有一个名为final_data.csv的新CSV文件,包含预处理数据集。现在对其重新读取并检查,以确保包按预期执行。

data_ =pd.read_csv('final_data.csv')

data.head()

本文演示了如何将模块和包用于数据科学和机器学习项目,这样的代码更具可读性和可复制性,你学会了吗?。

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

python一年收入_你的年收入过5万了吗?数据科学家的Python模块和包相关推荐

  1. python数据分析年薪百万_如何成为一个年薪 50 万以上的数据分析师?

    年薪50万?先结合身边数据分析朋友如何做到年薪百万的来谈一谈: 最近,年薪百万似乎成了一个人职业生涯中绕不开的话题.问答类社交网站.自媒体上都不乏讨论这个话题的内容,如:什么样的人在年薪百万的范围内, ...

  2. python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的 ...

  3. python商业分析_科研进阶 | 纽约大学 | 商业分析、量化金融:基于Python的商业分析工具...

    科研进阶 | 纽约大学 | 商业分析.量化金融:基于Python的商业分析工具(8.22开课)​mp.weixin.qq.com 课题名称 = 基于Python的商业分析工具 = 项目背景 数据分析为 ...

  4. python 青少年人工智能_青少年人工智能教育的典范 优必学教孩子用Python编写一部人工智能的字典...

    Python是一种计算机程序设计语言,是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本.从20世纪90年代初诞生至今,Python正在迅速成为全球大中小学编程入门课程的首选教学语言,这种 ...

  5. python打包命令_三个你必须要记住的Pyinstaller打包命令——利用Python实现打包exe...

    /1 前言/ 嘿,各位小伙伴,晚上好呀,我相信各位小伙伴都是python的爱好者.也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇.再不行,让代码替我们干着 ...

  6. 编程python自学课程_就算你是文科生,也能轻松自学编程——《Python 自学手册》正式上线...

    说起来也有趣,谁能想到我身为一个文科生,最后却走上了 Coder 的道路. 中学时候,我对物理就抱有深深的恐惧,它一度让我在高二年级分班的时候毅然决然地选择了文科:高考后录取的学校也是文科院校,似乎跟 ...

  7. 潭州教育可以学python爬虫吗?_什么是爬虫?其运行原理是什么?只有Python才可以吗?...

    爬虫是什么? 本文所说的爬虫不是自然界中的爬行动物,而是运行在网络中的一个自动处理信息的程序. 爬虫是一个程序,该程序利用网络请求(HTTP/HTTPS)进行数据的筛选和录入.因为网络信息维度很广泛, ...

  8. python脚本编写_【PyQGIS】编写用于处理框架(QGIS3)的Python脚本

    可以编写可通过QGIS中的Python控制台运行的独立pyqgis脚本.进行一些调整,即可使您的独立脚本通过处理框架运行.这具有几个优点.首先,获取用户输入和写入输出文件要容易得多,因为Process ...

  9. python 函数调用列表_在项目列表上调用一个函数的最简洁方法 - python

    在python 2中,我使用map将函数应用于多个项目,例如,删除所有与模式匹配的项目: map(os.remove,glob.glob("*.pyc")) 当然我忽略了os.re ...

最新文章

  1. ajax异步提交 java_jquery ajax异步提交表单数据的方法
  2. 干货!推荐8个强大好用的办公软件,解决很多需求
  3. Gartner:企业架构开始更加紧密地向业务看齐
  4. 导入json数据到Elasticsearch(bulk方法)
  5. vim trick之 vimrc更改立即生效
  6. Python视频制作工具Manim入门,文本使用详细介绍
  7. java 有序容器_Java 容器集合框架概览
  8. 怎么查到运行的时间_“我的成考录取通知书怎么还没来,它是不是迷路了?”...
  9. 腾讯宣布五年5000亿投入计划,发力新基建(2020年5月)
  10. vue中的watch监听数据变化
  11. 机器学习笔记(二十四):召回率、混淆矩阵
  12. AI企航58自动发帖软件图片视频教程
  13. vue官网中文文档下载,vue官网最新版本下载
  14. 树莓派4B 安装卸载pip、pip3
  15. APISpace 银行卡三要素API 推荐
  16. oracle中算百分比,Oracle百分比分析函数RATIO_TO_REPORT() OVER()实例详解
  17. linux实验报告ALU,《linux内核分析》第一次课 实验作业
  18. c语言程序小兔子吃萝卜图片,小白兔吃萝卜看图写话范文
  19. A block IDR(s) method for nonsymmetric linear systems with multiple right-hand sides
  20. 编写一个方法,将一段文本中的各个单词的字母顺序翻转题

热门文章

  1. 嫦娥五号完美落月,背后黑科技令人惊叹
  2. java字符类的英文表示_java 字符串截取类 区分中文、英文、数字、标点符号
  3. java 死锁种类_用java写一个死锁
  4. 计算机硬盘工作时应该避免什么,什么是电脑硬盘?有何作用?如何保养它?
  5. matlab波形振幅,MATLAB正交振幅调制解调仿真分析(一)
  6. arrays中copyof复制两个数组_Python数组切片中的复制与否问题-list篇
  7. python爬贴吧回复内容_Python 基础语法+简单地爬取百度贴吧内容
  8. 洛谷 P2756 飞行员配对方案问题 (二分图/网络流,最佳匹配方案)
  9. 关于GeneXus封装方法Model的方法
  10. dealloc时取weakself引起崩溃