《Python 基础》课程

无论是数据科学、人工智能还是机器学习, Python 都是最热门的首选语言。本课程从零基础对 Python 进行教学,从基础的数据类型与结构、条件判断与循环、函数,到进阶的面向对象编程和函数式编程进行学习,并且每章节都安排了相应的实战练习,加强对知识点的理解与掌握,让 Python 快速的成为高校学生的编程工具。

《Python 数据分析》课程

Python是一种面向对象、直译式计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明。由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python 又被称之为胶水语言,是目前『云计算』 Openstack 的标准开发语言。同时,Python 拥有非常丰富的库,使其在数据分析领域也有广泛的应用。本课程涵括 Python 在大数据分析领域中的五大核心应用:

  1. 数据统计;(NumPy/Pandas 库)
  2. 数据采集;(Scrapy Web 爬虫采集)
  3. 数据处理;(清理、转换、合并、重塑)
  4. 数据分析;(数据聚合与时间序列)
  5. 数据可视化;(Matplotlib 库)

同时,配套数据科学与大数据分析科研教学实践环境,为高等院校数据科学与大数据技术专业、大数据技术应用专业学生提供完整的数据科学与大数据分析生态环境。为高等院校数据科学与大数据技术方向科研实验室建设提供完善的支撑。

Kaggle 官网课程:从 Python 到机器学习

Kaggle 官网发布了一套完整的 Python 免费微课 ——课程特色:快速上手,在线练习,社区讨论。一共 12 门课,包括一节测试课。课程的设置是以实用为导向,按照数据项目所需要的核心技能来分小节,保证学完就能用,让学时间习性价比最大化。Python,机器学习入门,中极机器学习,数据可视化,Pandas,特征学习,深度学习,SQL 入门,SQL 进阶,地理空间分析,机器学习可解释性。

Kaggle Learn - Faster Data Science Education
Kaggle Learn – Faster Data Science Education

Python 知识卡片完整中文版

此前,跨象乘云™ 发布了一系列 Python 数据科学核心库的多份知识卡片,包括 ——

此前的知识卡片主要是英文原版,再次跨象乘云™ 发布《Python 知识卡片完整中文版》,覆盖:Bokeh,Jupyter Notebook,Keras,Matplotlib 绘图,Numpy 基础,Pandas 基础,Pandas 进阶,Python 基础,Scikit-Learn,SciPy,Seaborn,Spark RDD 基础,Spark SQL 基础,导入数据等核心技术领域。

Scikit-Learn 中文实践教程

Scikit-learn 是基于 Python 的开源机器学习库,它基于 NumPy 和 SciPy 等科学计算库,并支持支持向量机、随即森林、梯度提升树、K 均值聚类等学习算法。Scikit-learn 目前主要由社区成员自发进行维护,且专注于构建机器学习领域内经广泛验证的成熟算法。—— 这里是一份高质量的中文翻译实践教程

Scikit-Learn 中文实践教程
Scikit-Learn 中文实践教程

Scikit-learn 项目最早为数据科学家 David Cournapeau 于 2007 年发起的 scikits.learn 项目,且 Scikit 的名字可视为 SciPy Toolkit,即 SciPy 的第三方扩展。Scikit-learn 大部分都是由 Python 构建,但还是有很多核心算法是由 Cython 完成而实现更好的效果,例如支持向量机就是由 Cython 构建。

在监督学习部分,Scikit-learn 提供了广义线性模型、支持向量机、最近邻算法、高斯过程、朴素贝叶斯、决策树和集成方法等算法教程,同时还介绍了特征选择、随即梯度下降算法、线性与二次判别分析等在监督学习中非常重要的概念。

除了监督学习,半监督学习中的标签传播算法和无监督学习中的聚类与降维算法都有非常多的教程。此外,在模型选择中,文档教程描述了交叉验证的使用、估计器超参数的调整、模型评估方法和模型持久化概念等。

另外,跨象乘云™ 此前还发布了:《Python 知识卡片:Scikit-Learn》,《scikit-learn算法工程导图》等关于 scikits.learn 学习资源。

GitHub地址项目 GitHub 地址

神经网络结构可视化工具

对于我们算法分析人员来说,机器学习和神经网络早已不是什么新鲜内容,搭建、训练出来一个好的模型用于线上生产是必不可少的基础功能,对于业务人员或者是对于模型细节并不是很清楚或者是关注的人来说,这个就显得很抽象了,这个时候必要的可视化工作就显得很重要了,当前比较成熟的可视化工具大致包括:matplotlib、seaborn、Chaco 、pychart 、VPython 、yellowbrick等,这些是比较主流使用比较多的模块,但是对于模型结构的可是话来说显得就比较鸡肋了,这里迫切需要一些专业领域内的工具来帮助我们完成这些工作。

CNN
CNN
CNN
CNN

上面的这些图片都是可以一键生成的,顿时觉得功能很强大的。

GitHub地址项目 GitHub 地址

微软官方教程:在 Windows 进行 Python 开发

在 Windows 上做 Python 开发太痛苦?微软最近发布了一系列官方教程,这些教程将指导使用者如何设置开发环境、是否在原生 Windows 或 Windows Subsystem for Linux (WSL) 系统上安装自己的工具,以及如何集成 VS Code、Git 等工具。

具体教程如下所示:

  • 初学者在 Windows 上使用 Python 的教程
  • Web 开发者在 Windows 上使用 Python 的教程
  • 在 Windows 上使用 Python 编写脚本和自动执行文件系统操作
  • 在 Windows 上使用 Python 执行机器学习任务
在 Windows 进行 Python 开发
在 Windows 进行 Python 开发

 

数据科学家常用自然语言处理Python库

此前,跨象乘云™ 发布过系列文章 ——

互联网上大约有 70% 以上的数据不是结构化格式的。非结构化数据包括传感器数据、图像、视频文件、音频文件、网站和 API 的数据、社交媒体数据、电子邮件以及更多与文本相关的信息。由于其特殊的特性,我们无法以一种简单的方式处理数据,为了解决这一问题,在大数据和数据科学环境下,出现了许多技术和工具来解决这一问题。

自然语言处理,是人工智能领域的前沿技术之一。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。NLP 的最终目标是以一种有价值的方式阅读、破译、理解和理解人类语言。大多数 NLP 技术依靠机器学习从人类语言中获得意义。基于 NLP 最著名的应用是:

  • Google Speech Recognition.
  • Apple’s Siri.
  • Microsoft’s Cortona.
  • Amazon’s Alexa.
  • Ok Google in Android Mobiles.
  • Interactive voice responses used in call centers.
  • Grammarly

1. spaCy

非常优化的 NLP 库,可以与 TensorFlowPyTorch 等深度学习框架一起使用。它是一个高级的 NLP 库,可在 Python 和 Cython 中的使用,它帮助我们可以进行快速的开发,spaCy 提供了预先训练的统计模型和单词向量,目前支持 50 多种语言的标记化。它具有最先进的速度,卷积神经网络模型的标签,解析和命名实体识别和易于深入学习集成。

# Importing the Library
import spacy

NLPLagnguageType = spacy.load('en')
text = NLPLanguageType('Earth Revolves around the sun.')
# Iterating over the text
for token in text:
print(token.text,token_pos_)

在上面的例子中,我们实现了一个简单的 NLP 例子,他将输出文本,并加上每个单词的词性:

> > > 地球名词

> > > 是动词

这样的例子不胜枚举。它将生成给定文本中每个单词的词性。

2. Gensim

Gensim 是一个用于从文档中自动提取语义主题的 Python 库,目标受众是自然语言处理 (NLP) 和信息检索 (IR) 社区。具有以下特性:

  • 内存独立:对于训练语料来说,没必要在任何时间将整个语料都驻留在RAM中
  • 有效实现了许多流行的向量空间算法,包括 tf-idf,分布式 LSA,分布式 LDA 以及 RP;并且很容易添加新算法
  • 对流行的数据格式进行了 IO 封装和转换
  • 在其语义表达中,可以相似查询

Gensim 的创建的目的是,由于缺乏简单的(java 很复杂)实现主题建模的可扩展软件框架。

import gensim
id2word = gensim.corpora.Dictionary.load_from_text('wiki_en_wordids.txt')
mm = gensim.corpora.MmCorpus('wiki_en_tfidf.mm')

lda = gensim.models.ldamodel.LdaModel(corpus=mm, id2word=id2word, num_topics=10, update_every=1, chunksize=10000, passes=1)

lda.print_topics(1)

上面示例可以看到一个通过 LDA 从 Wikipedia 转储中提取主题的非常简单的示例。

3. Pattern

Pattern 是采用 Python 开发的数据挖掘库,用于抓取和解析各种数据源,如谷歌、Twitter、Wikipedia 等等。

它提供了各种 NLP 工具 (PoS 标签、n- gram、WordNet)、机器学习功能 (向量空间模型、聚类、分类) 和用于进行网络分析的各种工具。它是由 CLiPS 维护的,因此不仅有很好的文档和许多例子,而且有许多学术出版物正在利用图书馆。

# Importing Libraries
from pattern.web import Google
from pattern.en import ngrams

engine = Google(license=API_LICENSE)

for result in engine.search('NLP', cached=False):
print(result.url, result.text)
print(ngrams(result.text, n=2))

在上面的示例中,是爬取谷歌以获取包含关键字『NLP』的结果,它将输出所有的结果 url 和文本。虽然这确实是一个毫无意义的示例,但它展示了如何通过 Pattern 执行爬行和 NLP 任务。

4. Natural Language Tool KIT [NLTK]

NLTK 是可用来训练 NLP 模型的最好的库之一。这个库很容易使用。它是一个初学者友好的 NLP 库。它有很多预先训练好的模型和语料库,可以帮助我们很容易地分析事物。

# Importing Libraries
import nltk
text = 'Earth Revovles around the Sun.'
# Token Generator--> Separates the sentence into tokens
tokens = nltk.word_tokenize(text)
for token in tokens:
print(token)

word_tokenize() 将帮助我们将一组文本创建为简单的单词。我们把它叫做 token,输出 ——

Earth
Revolves
around
the
Sun

5. TextBlob

TextBlob 基于 Pattern 和 NLTK,后者为所有常见的 NLP 操作提供了一个很棒的 API 调用。它不是最快或最完整的库,但它以一种极容易访问和管理的方式提供了人们日常所需功能。

# Importing Module
from textblob import TextBlob

text = 'Earth Revolves around the sun.'

text_blob = TextBlob(text)

for sentence in blob.sentences:
print(sentence.sentiment.polarity)

在上面的示例中,我们考虑 NLTK 库中获取的相同示例文本。在这个程序中,textblob 首先将句子分割成 Token,并在标记上执行情感分析,这只是句子极性分析。希望你对 Python 中自然语言的流行库有一个完整,由于 NLP 是一门难学课程,初学者可能无法正确理解它。但是那些想要开始 NLP 的人,那么你应该使用上面的任何一个库。如果你是一名自然语言处理的新手,我强烈建议您从 NLTK 开始,这将是一个很好的开始。

GitHub 超 2.7 万星,最全 Python 入门算法

Github 上超过 2.7 万星标;最全算法及 Python 实现

该项目的算法包括排序:

搜索等经典算法,描述较为详细,对算法原理本身、应用场景以及实现过程的可视化等。

我们讨论机器学习的时候,其实很多时候都是在讨论算法。今天就向大家推荐一个好资源,用 Python 实现所有算法。该项目在 Github 上已经获得了超过 2.7 万星标,可以说非常受欢迎了。

该项目主要包括两方面内容:

  • 算法的基本原理讲解,
  • 以及 Python 代码实现,并给出了算法实现过程的动图,非常直观易懂。

项目地址:

GitHub地址项目 GitHub 地址

1. 冒泡算法

冒泡算法
冒泡算法

代码实现:

https://www.toptal.com/developers/sorting-algorithms/bubble-sort

2. 桶排序算法

桶排序算法
桶排序算法

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。

3. 鸡尾酒排序算法

鸡尾酒排序算法
鸡尾酒排序算法

鸡尾酒排序,也叫双向冒泡排序(Bidirectional Bubble Sort)等。这是冒泡排序的一种变体。不同之处在于,冒泡排序是从低到高比较序列里的每个元素,而鸡尾酒排序从两个方向(低到高、高到低)来回排序,效率更高。

代码实现:

https://en.wikipedia.org/wiki/Cocktail_shaker_sort

4. 插入排序

插入排序
插入排序

插入排序(英语:Insertion Sort )是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/insertion-sort

5. 归并排序

归并排序
归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/merge-sort

6. 快速排序

快速排序
快速排序

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出,用作按顺序放置数组元素的系统方法。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/quick-sort

7. 堆排序

堆排序(英语:Heapsort )是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/heap-sort

8. 基数排序

基数排序(英语:Radix sort )是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机( Tabulation Machine )上的贡献。

9. 选择排序

选择排序
选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

代码实现:

https://www.toptal.com/developers/sorting-algorithms/selection-sort

10. 希尔排序

希尔排序
希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率

但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

代码实现:

https://www.toptal.com/developers/sorting-algorithms/shell-sort

11. 拓扑排序

在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点 u 到顶点 v 的每个有向边uv ,u 在排序中都在 v 之前。例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个任务之前执行的约束; 在这个应用中,拓扑排序只是一个有效的任务顺序。 如果且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的。任何 DAG 具有至少一个拓扑排序,并且已知这些算法用于在线性时间内构建任何 DAG 的拓扑排序。

搜索算法

12. 线性搜索

线性搜索
线性搜索

线性搜索或顺序搜索是一种寻找某一特定值的搜索算法,指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止。是最简单的一种搜索算法。

13. 二分搜索算法

二分搜索算法
二分搜索算法

二分搜索(英语:binary search ),也称折半搜索(英语:half-interval search ),对数搜索(英语:logarithmic search ),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

14. 插值搜索算法

插值查找( Interpolation Search )是根据要查找的关键字 key 与顺序表中最大、最小记录的关键字比较后的查找方法,它假设输入数组是线性增加的(这个假设的精确度会影响算法的效率,但不会影响算法的正确性)。

15. 跳跃搜索算法

跳跃搜索算法( Jump Search )跟二分查找算法类似,它也是针对有序序列的查找,只是它是通过查找比较少的元素找到目标。当然它需要通过固定的跳跃间隔,这样它相比二分查找效率提高了很多。

16. 快速选择

快速选择
快速选择

快速选择(英语:Quickselect )是一种从无序列表找到第k小元素的选择算法。它从原理上来说与快速排序有关。与快速排序一样都由托尼·霍尔提出的,因而也被称为霍尔选择算法。它在实际应用是一种高效的算法,具有很好的平均时间复杂度,然而最坏时间复杂度则不理想。快速选择及其变种是实际应用中最常使用的高效选择算法。与快速排序一样,快速选择一般是以原地算法的方式实现,除了选出第k小的元素,数据也得到了部分地排序。

17. 禁忌搜索

禁忌搜索( Tabu Search,TS,又称禁忌搜寻法)是一种现代启发式算法,由美国科罗拉多大学教授 Fred Glover 在 1986 年左右提出的,是一个用来跳脱局部最优解的搜索方法。其先创立一个初始化的方案;基于此,算法“移动”到一相邻的方案。经过许多连续的移动过程,提高解的质量。

加密算法

18. 凯撒密码

凯撒密码(英语:Caesar cipher ),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D ,B 变成 E ,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

19. 维吉尼亚密码

维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。维吉尼亚密码曾多次被发明。该方法最早记录在吉奥万·巴蒂斯塔·贝拉索( Giovan Battista Bellaso )于 1553 年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》(意大利语:La cifra del. Sig. Giovan Battista Bellaso )中。然而,后来在 19 世纪时被误传为是法国外交官布莱斯·德·维吉尼亚(Blaise De Vigenère )所创造,因此现在被称为“维吉尼亚密码”。

20. 置换密码

又名取代加密法,是密码学中按规律将文字加密的一种方式。置换密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。由于拼音文字中字的组成为有限的字母,以英语为例只有 26 个字母,组成可能的单元数较少,因此使用置换密码相对较为容易,而且亦可使用简单机械进行加密;相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字,较难转换,因此使用置换密码的示例比较少。

21. RSA 加密算法

RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德·李维斯特( Ron Rivest )、阿迪·萨莫尔( Adi Shamir )和伦纳德·阿德曼( Leonard Adleman )一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式解破。到当前为止,世界上还没有任何可靠的攻击 RSA 算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能被解破的。

22. ROT13 算法

ROT13(回转 13 位,rotate by 13 places ,有时中间加了个连字符称作 ROT-13 )是一种简易的替换式密码。它是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13 被描述成“杂志字谜上下颠倒解答的 Usenet 点对点体”。(Usenet equivalent of a magazine printing the answer to a quiz upside down.)ROT13  也是过去在古罗马开发的凯撒加密的一种变体。

23. 异或密码

异或密码是密码学中一种简单的加密算法,异或运算符常作为更为复杂的加密算法的组成部分。对于其本身来说,如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。如果消息的内容被猜出或知道,密钥就会泄露。异或密码值得使用的原因主要是其易于实现,而且计算成本小。简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息。

开源 Python 爬虫网站秒搜所有豆瓣好书

程序员在提升自己的道路,大多还是会选择阅读编程书籍这一途径,但找到一本好书就没那么容易了。

通过查看各大销售网站的销量数据和评价,以及豆瓣评分和评价人数,可以帮助我们更快的挖掘出经典的计算机书籍,还有那些被人们忽视的好书。

为什么说它很好用呢?演示一遍你就知道了:

好书一下
好书一下

可以看出这网站的界面非常简洁,没有花里花哨的内容,只有干货,你可以直接通过关键字、分数、和评价人数这三个选项进行搜索,比如我们可以搜索关键字:编程;分数:9.0;评价人数:100 人以上

查找结果的显示方式有按照分数排序和人数排序两种,按照分数排序的截图如下:

分数排序
分数排序

按照评价人数排序的截图如下:

人数排序
人数排序

除了以上演示的操作,这个网站并实现了以下功能:

  • 可以爬下豆瓣读书标签下的所有图书
  • 按评分排名依次存储
  • 存储到 Excel 中,可方便大家筛选搜罗,比如筛选评价人数 >1000 的高分书籍;可依据不同的主题存储到 Excel 不同的 Sheet
  • 采用 User Agent 伪装为浏览器进行爬取,并加入随机延时来更好的模仿浏览器行为,避免爬虫被封

也就是说你不仅可以在网站上搜索,还能通过下载各类目下的 Excel 书单文件,直接在 Excel 中搜索

Excel书单文件
Excel书单文件

效果截图如下:

效果截图
效果截图

GitHub地址项目 GitHub 地址