python:技术库(开源组件/扩展包/工具包)

672 阅读7分钟

1/前言

学习python,你只学习基础语法,这只是一个起步,能做的事情很少。
学习了基础语法之后,你需要去学习一个又一个的技术库,或者叫开源组件。
每个方向都是不一样的。
这些不同的开源组件存在于一个叫pypi的仓库中。

python的技术库有很多,你没有必要把所有的技术库都掌握。
当你确定了你的发展方向之后,你就可以把你发展的领域相关的技术库去精通。

2/爬虫

<1>requests

<2>beautifulsoup

<3>selenium

<4>scrapy

 是一个爬虫框架,可以应对复杂的大型的爬虫需求。

3/web开发

<1>flask

   这是一个轻量级的web框架,
   可以用来写中小型的后台服务以及做借口的自动化测试。
   

<2>django

  这是一个大而全的重量级的web框架。可以应对复杂的系统。

4/数据分析

numpy pandas matplotlib 这是数据分析的三剑客

<1>numpy

Python列表(list数据对象)和Numpy数组(ndarray数据对象)的区别:
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组,那么为什么还需要使用Numpy呢

Numpy是专门针对数组的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。
通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,
所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。

ndarray: 是n dim array的简写。

首先需要明确数组与列表的区别:
   数组是一种特殊变量,虽与列表相似,但列表可以存储任意类型的数据,数组只能存储一种类型的数据,
   同时,数组提供了许多方便统计计算的功能(如平均值mean、标准差std等)。

python本身并没有提供数组功能,虽然列表可以完成基本的数组功能,但列表还不是真正的数组。
在数据量大的情况下,使用列表的速度会慢的让人难以接受,
numpy库提供了真正的数组功能,以及对数组进行快速处理的函数。
numpy内置函数处理数据的速度是c语言级别的。
    import numpy as np
    
    # 生成一维数组
    a = np.zeros(10)
    # [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
    # 因为没有指定数据类型,所以默认是float64
    
    a = np.zeros(10,dtype=int)
    # [0 0 0 0 0 0 0 0 0]
    
    
    # 生成多维数组
    a = np.zeros((4,4),dtype=int)
    # 生成了一个4*4的数组,类型是int
    
    np.zeros()函数返回来一个给定形状和类型的用0填充的数组,
    同理,np.ones()函数返回来一个给定形状和类型的用1填充的数组。
    但更多情况下我们想指定某个值,这时用np.full(shape, val)生成全为val的值,
    如下:
       a = np.full((2,2),100)
       生成了一个22列,都是100的数组
       
    # 数组相乘
    arr1 = np.full((3,3),100)
    arr2 = arr1 * arr1
    # 这是数组相乘,对应位置的元素相乘,最后得到的是和arr2形状相同的数组。
    
    #数组的随机功能
    #生成一个3*3的数组,每个元素都是[0,1]之间的一个小数
    a = np.random.random((3,3))
    
    # 指定步长的数组
    a = np.arange(0,10,2)
    [0,2,4,6,8]
    
    # 在0-3范围内产生100个数
    np.linspace(0,3,100)
    
    # 数组的访问
    a[2]
    a[:4]
    
    np.unique(list,return_counts=True)
    该函数是对可迭代序列进行去重处理,
    参数return_counts如果为True,则返回2个列表对象,每个元素重复的次数
    values,cnts = np.unique(list,return_counts=True)  
numpy 提供了多维数组功能,但是它只是一般的数组,并不是矩阵。
例如当2个数组相乘时,只是对应元素相乘,而不是矩阵乘法

<2>pandas

pandas是基于numpy数组构建的,但二者最大的不同是pandas是专门为处理表格和混杂数据设计的,
比较契合统计分析中的表结构,而numpy更适合处理统一的数值数组数据。
pandas数组结构有**一维Series****二维DataFrame**。

dataframe中的一列的数据类型必须是相同的,不同列之间的数据类型可以是不同的.
这正好贴切'python是基于numpy数组构建的'。
因为数组numpy的数据类型dtype是唯一的。
一个数组中只能有一种数据类型。

<3>matplotlib

matplotlib 是用来做可视化的第三方库,主要用于二维绘图,也可以用于简单的三维绘图
用matplotlib第三方库绘图时,需要掌握3个常用概念:
   figure: 一般简写为fig,一个是执行程序时弹出的窗口,figure相当于一个总的画布,由函数plt.figure()生成
   axes: 在每个figure中,又可以存在多个子图(当然也可以只有一个子图),这种子图叫做axes
   axis: 在每个子图axes中,都有坐标轴(x轴和y轴),即axis

5/办公自动化

<1>xlwings

<2>openpyxl

6/数据存储

<1>pymysql

<2>redis

<3>pymongo

7/人工智能

 人工智能中,包括机器学习和深度学习
 

<1>sklearn(机器学习)

机器学习相关的库,提供了强大的机器学习工具箱,包括数据预处理,分类,回归,聚类,预测,模型分析等。
sklearn 作为机器学习的库虽然很强大,但是它不包括一种强大的模型,即神经网络。
正好keras弥补了这一缺点。

<2>keras(深度学习)

keras是除了TensorFlow之外,用的最多的深度学习框架
keras是用来做深度学习的。tensorflow比较难学,keras是高度封装好的,适合新手学习。

<3>tensorflow(深度学习)

<4>pytorch(深度学习)

8/数据可视化

<1>matplotlib

  是最为经典的python用于数据可视化的技术库/开源组件
  

<2>plotly

  相比于matplotlib,plotly是新一代的python的可视化的技术库

9/量化投资以及量化投资的回测

 量化投资就是对股票进行数据分析。那么第一步是你得有股票的数据。
 

<1>tushare(量化投资)

  这个开源组件是中国人开发的一个,可以非常方便的获取A股,港股,美股等股票数据的一个技术库。

<2>backtrader(量化投资的回测)

  量化投资的回测就是:你写一个交易策略,然后用历史的股票数据来验证你的这个策略是否有效。

10/自然语言处理

<1>gensim

gensim是一款开源的python第三方工具包(扩展包),用于从原始的非结构化文本中,无监督的学习到文本隐藏的主题向量表达。
安装gensim  pip install gensim
它支持tf-idf,lsa,lda,word2vec等多种算法。

一些基本的概念术语:
语料(Corpus):一组原始文本的集合,用于无监督地训练文本主题的隐层结构。语料中不需要人工标注的附加信息。在Gensim中,Corpus通常是一个可迭代的对象(比如列表)。每一次迭代返回一个可用于表达文本对象的稀疏向量。

向量(Vector):由一组文本特征构成的列表。是一段文本在Gensim中的内部表达。

稀疏向量(SparseVector):通常,我们可以略去向量中多余的0元素。此时,向量中的每一个元素是一个(key, value)的元组

模型(Model):是一个抽象的术语。定义了两个向量空间的变换(即从文本的一种向量表达变换为另一种向量表达)。
通常,我们要处理的原生语料是一堆`文档`的集合,每一篇`文档`又是一些原生字符的集合。
在交给Gensim的模型训练之前,我们需要将这些原生字符解析成Gensim能处理的稀疏向量的格式。由于语言和应用的多样性,我们需要先对原始的文本进行分词、去除停用词等操作,得到每一篇文档的特征列表。例如,在词袋模型中,文档的特征就是其包含的word:
corpus = [ ['human', 'interface', 'computer'],
          ['survey', 'user', 'computer', 'system', 'response', 'time'],
          ['eps', 'user', 'interface', 'system'],
          ['system', 'human', 'system', 'eps'],
          ['user', 'response', 'time'],
          ['trees'],
          ['graph', 'trees'],
          ['graph', 'minors', 'trees'],
          ['graph', 'minors', 'survey']
         ]

corpus中的每一个元素代表一篇文档(被分词之后,并且去掉一些停用词)。