Tirthajyoti Sarkar 发布的文章

R 还是 Python ? Python 脚本模仿易使用的 R 风格函数,使得数据统计变得简单易行。

“Python vs. R” 是数据科学和机器学习的现代战争之一。毫无疑问,近年来这两者发展迅猛,成为数据科学、预测分析和机器学习领域的顶级编程语言。事实上,根据 IEEE 最近的一篇文章,Python 已在 最受欢迎编程语言排行榜 中超越 C++ 成为排名第一的语言,并且 R 语言也稳居前 10 位。

但是,这两者之间存在一些根本区别。R 语言设计的初衷主要是作为统计分析和数据分析问题的快速原型设计的工具,另一方面,Python 是作为一种通用的、现代的面向对象语言而开发的,类似 C++ 或 Java,但具有更简单的学习曲线和更灵活的语言风格。因此,R 仍在统计学家、定量生物学家、物理学家和经济学家中备受青睐,而 Python 已逐渐成为日常脚本、自动化、后端 Web 开发、分析和通用机器学习框架的顶级语言,拥有广泛的支持基础和开源开发社区。

在 Python 环境中模仿函数式编程

R 作为函数式编程语言的本质为用户提供了一个极其简洁的用于快速计算概率的接口,还为数据分析问题提供了必不可少的描述统计和推论统计方法(LCTT 译注:统计学从功能上分为描述统计学和推论统计学)。例如,只用一个简洁的函数调用来解决以下问题难道不是很好吗?

  • 如何计算数据向量的平均数 / 中位数 / 众数。
  • 如何计算某些服从正态分布的事件的累积概率。如果服 从泊松分布 Poisson distribution 又该怎样计算呢?
  • 如何计算一系列数据点的四分位距。
  • 如何生成服从学生 t 分布的一些随机数(LCTT 译注: 在概率论和统计学中,学生 t-分布(Student’s t-distribution)可简称为 t 分布,用于根据小样本来估计呈正态分布且方差未知的总体的均值)。

R 编程环境可以完成所有这些工作。

另一方面,Python 的脚本编写能力使分析师能够在各种分析流程中使用这些统计数据,具有无限的复杂性和创造力。

要结合二者的优势,你只需要一个简单的 Python 封装的库,其中包含与 R 风格定义的概率分布和描述性统计相关的最常用函数。 这使你可以非常快速地调用这些函数,而无需转到正确的 Python 统计库并理解整个方法和参数列表。

便于调用 R 函数的 Python 包装脚本

我编写了一个 Python 脚本 ,用 Python 简单统计分析定义了最简洁和最常用的 R 函数。导入此脚本后,你将能够原生地使用这些 R 函数,就像在 R 编程环境中一样。

此脚本的目标是提供简单的 Python 函数,模仿 R 风格的统计函数,以快速计算密度估计和点估计、累积分布和分位数,并生成重要概率分布的随机变量。

为了延续 R 风格,脚本不使用类结构,并且只在文件中定义原始函数。因此,用户可以导入这个 Python 脚本,并在需要单个名称调用时使用所有功能。

请注意,我使用 mimic 这个词。 在任何情况下,我都声称要模仿 R 的真正的函数式编程范式,该范式包括深层环境设置以及这些环境和对象之间的复杂关系。 这个脚本允许我(我希望无数其他的 Python 用户)快速启动 Python 程序或 Jupyter 笔记本程序、导入脚本,并立即开始进行简单的描述性统计。这就是目标,仅此而已。

如果你已经写过 R 代码(可能在研究生院)并且刚刚开始学习并使用 Python 进行数据分析,那么你将很高兴看到并在 Jupyter 笔记本中以类似在 R 环境中一样使用一些相同的知名函数。

无论出于何种原因,使用这个脚本很有趣。

简单的例子

首先,只需导入脚本并开始处理数字列表,就好像它们是 R 中的数据向量一样。

from R_functions import *
lst=[20,12,16,32,27,65,44,45,22,18]
<more code, more statistics...>

假设你想从数据向量计算 Tuckey 五数摘要。 你只需要调用一个简单的函数 fivenum,然后将向量传进去。 它将返回五数摘要,存在 NumPy 数组中。

lst=[20,12,16,32,27,65,44,45,22,18]
fivenum(lst)
> array([12. , 18.5, 24.5, 41. , 65. ])

或许你想要知道下面问题的答案:

假设一台机器平均每小时输出 10 件成品,标准偏差为 2。输出模式遵循接近正态的分布。 机器在下一个小时内输出至少 7 个但不超过 12 个单位的概率是多少?

答案基本上是这样的:

使用 pnorm ,你可以只用一行代码就能获得答案:

pnorm(12,10,2)-pnorm(7,10,2)
> 0.7745375447996848

或者你可能需要回答以下问题:

假设你有一个不公平硬币,每次投它时有 60% 可能正面朝上。 你正在玩 10 次投掷游戏。 你如何绘制并给出这枚硬币所有可能的胜利数(从 0 到 10)的概率?

只需使用一个函数 dbinom 就可以获得一个只有几行代码的美观条形图:

probs=[]
import matplotlib.pyplot as plt
for i in range(11):
    probs.append(dbinom(i,10,0.6))
plt.bar(range(11),height=probs)
plt.grid(True)
plt.show()

简单的概率计算接口

R 提供了一个非常简单直观的接口,可以从基本概率分布中快速计算。 接口如下:

  • d 分布:给出点 x 处的密度函数值
  • p 分布:给出 x 点的累积值
  • q 分布:以概率 p 给出分位数函数值
  • r 分布:生成一个或多个随机变量

在我们的实现中,我们坚持使用此接口及其关联的参数列表,以便你可以像在 R 环境中一样执行这些函数。

目前已实现的函数

脚本中实现了以下 R 风格函数,以便快速调用。

  • 平均数、中位数、方差、标准差
  • Tuckey 五数摘要、 四分位距 interquartile range (IQR)
  • 矩阵的协方差或两个向量之间的协方差
  • 以下分布的密度、累积概率、分位数函数和随机变量生成:正态、均匀、二项式、 泊松 Poisson 、F、 学生 t Student’s t 卡方 Chi-square 贝塔 beta 伽玛 gamma

进行中的工作

显然,这是一项正在进行的工作,我计划在此脚本中添加一些其他方便的R函数。 例如,在 R 中,单行命令 lm 可以为数字数据集提供一个简单的最小二乘拟合模型,其中包含所有必要的推理统计(P 值,标准误差等)。 这非常简洁! 另一方面,Python 中的标准线性回归问题经常使用 Scikit-learn 库来处理,此用途需要更多的脚本,所以我打算使用 Python 的 statsmodels 库合并这个单函数线性模型来拟合功能。

如果你喜欢这个脚本,并且愿意在工作中使用,请 GitHub 仓库点个 star 或者 fork 帮助其他人找到它。 另外,你可以查看我其他的 GitHub 仓库,了解 Python、R 或 MATLAB 中的有趣代码片段以及一些机器学习资源。

如果你有任何问题或想法要分享,请通过 [tirthajyoti [AT] gmail.com](mailto:[email protected]) 与我联系。 如果你像我一样热衷于机器学习和数据科学,请 在 LinkedIn 上加我为好友或者在 Twitter 上关注我

本篇文章最初发表于走向数据科学。 请在 CC BY-SA 4.0 协议下转载。


via: https://opensource.com/article/18/10/write-favorite-r-functions-python

作者:Tirthajyoti Sarkar 选题:lujun9972 译者:yongshouzhang 校对:Flowsnow

本文由 LCTT 原创编译,Linux中国 荣誉推出

用这个简单的工具生成带有多表的大型数据库,让你更好地用 SQL 研究数据科学。

在研究数据科学的过程中,最麻烦的往往不是算法或者技术,而是如何获取到一批原始数据。尽管网上有很多真实优质的数据集可以用于机器学习,然而在学习 SQL 时却不是如此。

对于数据科学来说,熟悉 SQL 的重要性不亚于了解 Python 或 R 编程。如果想收集诸如姓名、年龄、信用卡信息、地址这些信息用于机器学习任务,在 Kaggle 上查找专门的数据集比使用足够大的真实数据库要容易得多。

如果有一个简单的工具或库来帮助你生成一个大型数据库,表里还存放着大量你需要的数据,岂不美哉?

不仅仅是数据科学的入门者,即使是经验丰富的软件测试人员也会需要这样一个简单的工具,只需编写几行代码,就可以通过随机(但是是假随机)生成任意数量但有意义的数据集。

因此,我要推荐这个名为 pydbgen 的轻量级 Python 库。在后文中,我会简要说明这个库的相关内容,你也可以阅读它的文档详细了解更多信息。

pydbgen 是什么

pydbgen 是一个轻量的纯 Python 库,它可以用于生成随机但有意义的数据记录(包括姓名、地址、信用卡号、日期、时间、公司名称、职位、车牌号等等),存放在 Pandas Dataframe 对象中,并保存到 SQLite 数据库或 Excel 文件。

如何安装 pydbgen

目前 1.0.5 版本的 pydbgen 托管在 PyPI( Python 包索引存储库 Python Package Index repository )上,并且对 Faker 有依赖关系。安装 pydbgen 只需要执行命令:

pip install pydbgen

已经在 Python 3.6 环境下测试安装成功,但在 Python 2 环境下无法正常安装。

如何使用 pydbgen

在使用 pydbgen 之前,首先要初始化 pydb 对象。

import pydbgen
from pydbgen import pydbgen
myDB=pydbgen.pydb()

随后就可以调用 pydb 对象公开的各种内部函数了。可以按照下面的例子,输出随机的美国城市和车牌号码:

myDB.city_real()
>> 'Otterville'
for _ in range(10):
    print(myDB.license_plate())
>> 8NVX937
   6YZH485
   XBY-564
   SCG-2185
   XMR-158
   6OZZ231
   CJN-850
   SBL-4272
   TPY-658
   SZL-0934

另外,如果你输入的是 city() 而不是 city_real(),返回的将会是虚构的城市名。

print(myDB.gen_data_series(num=8,data_type='city'))
>>
New Michelle
Robinborough
Leebury
Kaylatown
Hamiltonfort
Lake Christopher
Hannahstad
West Adamborough

生成随机的 Pandas Dataframe

你可以指定生成数据的数量和种类,但需要注意的是,返回结果均为字符串或文本类型。

testdf=myDB.gen_dataframe(5,['name','city','phone','date'])
testdf

最终产生的 Dataframe 类似下图所示。

生成数据库表

你也可以指定生成数据的数量和种类,而返回结果是数据库中的文本或者变长字符串类型。在生成过程中,你可以指定对应的数据库文件名和表名。

myDB.gen_table(db_file='Testdb.DB',table_name='People',

fields=['name','city','street_address','email'])

上面的例子种生成了一个能被 MySQL 和 SQLite 支持的 .db 文件。下图则显示了这个文件中的数据表在 SQLite 可视化客户端中打开的画面。

生成 Excel 文件

和上面的其它示例类似,下面的代码可以生成一个具有随机数据的 Excel 文件。值得一提的是,通过将 phone_simple 参数设为 False ,可以生成较长较复杂的电话号码。如果你想要提高自己在数据提取方面的能力,不妨尝试一下这个功能。

myDB.gen_excel(num=20,fields=['name','phone','time','country'],
phone_simple=False,filename='TestExcel.xlsx')

最终的结果类似下图所示:

生成随机电子邮箱地址

pydbgen 内置了一个 realistic_email 方法,它基于种子来生成随机的电子邮箱地址。如果你不想在网络上使用真实的电子邮箱地址时,这个功能可以派上用场。

for _ in range(10):
    print(myDB.realistic_email('Tirtha Sarkar'))
>>
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

未来的改进和用户贡献

目前的版本中并不完美。如果你发现了 pydbgen 的 bug 导致它在运行期间发生崩溃,请向我反馈。如果你打算对这个项目贡献代码,也随时欢迎你。当然现在也还有很多改进的方向:

  • pydbgen 作为随机数据生成器,可以集成一些机器学习或统计建模的功能吗?
  • pydbgen 是否会添加可视化功能?

一切皆有可能!

如果你有任何问题或想法想要分享,都可以通过 [email protected] 与我联系。如果你像我一样对机器学习和数据科学感兴趣,也可以添加我的 LinkedIn 或在 Twitter 上关注我。另外,还可以在我的 GitHub 上找到更多 Python、R 或 MATLAB 的有趣代码和机器学习资源。

本文以 CC BY-SA 4.0 许可在 Towards Data Science 首发。


via: https://opensource.com/article/18/11/pydbgen-random-database-table-generator

作者:Tirthajyoti Sarkar 选题:lujun9972 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

尝试使用 Python 掌握机器学习、人工智能和深度学习。

想要入门机器学习并不难。除了 大规模网络公开课 Massive Open Online Courses (MOOC)之外,还有很多其它优秀的免费资源。下面我分享一些我觉得比较有用的方法。

  1. 从一些 YouTube 上的好视频开始,阅览一些关于这方面的文章或者书籍,例如 《主算法:终极学习机器的探索将如何重塑我们的世界》,而且我觉得你肯定会喜欢这些关于机器学习的很酷的互动页面
  2. 对于“ 机器学习 machine learning ”、“ 人工智能 artificial intelligence ”、“ 深度学习 deep learning ”、“ 数据科学 data science ”、“ 计算机视觉 computer vision ”和“ 机器人技术 robotics ”这一堆新名词,你需要知道它们之间的区别。你可以阅览或聆听这些领域的专家们的演讲,例如这位有影响力的数据科学家 Brandon Rohrer 的精彩视频。或者这个讲述了数据科学相关的各种角色之间的区别的视频。
  3. 明确你自己的学习目标,并选择合适的 Coursera 课程,或者参加高校的网络公开课,例如华盛顿大学的课程就很不错。
  4. 关注优秀的博客:例如 KDnuggets 的博客、Mark Meloon 的博客、Brandon Rohrer 的博客、Open AI 的研究博客,这些都值得推荐。
  5. 如果你热衷于在线课程,后文中会有如何正确选择 MOOC 课程的指导。
  6. 最重要的是,培养自己对这些技术的兴趣。加入一些优秀的社交论坛,不要被那些耸人听闻的头条和新闻所吸引,专注于阅读和了解,将这些技术的背景知识和发展方向理解透彻,并积极思考在日常生活和工作中如何应用机器学习或数据科学的原理。例如建立一个简单的回归模型来预测下一次午餐的成本,又或者是从电力公司的网站上下载历史电费数据,在 Excel 中进行简单的时序分析以发现某种规律。在你对这些技术产生了浓厚兴趣之后,可以观看以下这个视频。

Python 是机器学习和人工智能方面的最佳语言吗?

除非你是一名专业的研究一些复杂算法纯理论证明的研究人员,否则,对于一个机器学习的入门者来说,需要熟悉至少一种高级编程语言。因为大多数情况下都是需要考虑如何将现有的机器学习算法应用于解决实际问题,而这需要有一定的编程能力作为基础。

哪一种语言是数据科学的最佳语言?这个讨论一直没有停息过。对于这方面,你可以提起精神来看一下 FreeCodeCamp 上这一篇关于数据科学语言的文章,又或者是 KDnuggets 关于 Python 和 R 之争的深入探讨。

目前人们普遍认为 Python 在开发、部署、维护各方面的效率都是比较高的。与 Java、C 和 C++ 这些较为传统的语言相比,Python 的语法更为简单和高级。而且 Python 拥有活跃的社区群体、广泛的开源文化、数百个专用于机器学习的优质代码库,以及来自业界巨头(包括 Google、Dropbox、Airbnb 等)的强大技术支持。

基础 Python 库

如果你打算使用 Python 实施机器学习,你必须掌握一些 Python 包和库的使用方法。

NumPy

NumPy 的完整名称是 Numerical Python,它是 Python 生态里高性能科学计算和数据分析都需要用到的基础包,几乎所有高级工具(例如 Pandasscikit-learn)都依赖于它。TensorFlow 使用了 NumPy 数组作为基础构建块以支持 Tensor 对象和深度学习的图形流。很多 NumPy 操作的速度都非常快,因为它们都是通过 C 实现的。高性能对于数据科学和现代机器学习来说是一个非常宝贵的优势。

Pandas

Pandas 是 Python 生态中用于进行通用数据分析的最受欢迎的库。Pandas 基于 NumPy 数组构建,在保证了可观的执行速度的同时,还提供了许多数据工程方面的功能,包括:

  • 对多种不同数据格式的读写操作
  • 选择数据子集
  • 跨行列计算
  • 查找并补充缺失的数据
  • 将操作应用于数据中的独立分组
  • 按照多种格式转换数据
  • 组合多个数据集
  • 高级时间序列功能
  • 通过 Matplotlib 和 Seaborn 进行可视化

Matplotlib 和 Seaborn

数据可视化和数据分析是数据科学家的必备技能,毕竟仅凭一堆枯燥的数据是无法有效地将背后蕴含的信息向受众传达的。这两项技能对于机器学习来说同样重要,因为首先要对数据集进行一个探索性分析,才能更准确地选择合适的机器学习算法。

Matplotlib 是应用最广泛的 2D Python 可视化库。它包含海量的命令和接口,可以让你根据数据生成高质量的图表。要学习使用 Matplotlib,可以参考这篇详尽的文章

Seaborn 也是一个强大的用于统计和绘图的可视化库。它在 Matplotlib 的基础上提供样式灵活的 API、用于统计和绘图的常见高级函数,还可以和 Pandas 提供的功能相结合。要学习使用 Seaborn,可以参考这篇优秀的教程

Scikit-learn

Scikit-learn 是机器学习方面通用的重要 Python 包。它实现了多种分类回归聚类算法,包括支持向量机随机森林梯度增强k-means 算法DBSCAN 算法,可以与 Python 的数值库 NumPy 和科学计算库 SciPy 结合使用。它通过兼容的接口提供了有监督和无监督的学习算法。Scikit-learn 的强壮性让它可以稳定运行在生产环境中,同时它在易用性、代码质量、团队协作、文档和性能等各个方面都有良好的表现。可以参考这篇基于 Scikit-learn 的机器学习入门,或者这篇基于 Scikit-learn 的简单机器学习用例演示

本文使用 CC BY-SA 4.0 许可,在 Heartbeat 上首发。


via: https://opensource.com/article/18/10/machine-learning-python-essential-hacks-and-tricks

作者:Tirthajyoti Sarkar 选题:lujun9972 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出