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)
a = np.zeros(10,dtype=int)
a = np.zeros((4,4),dtype=int)
np.zeros()函数返回来一个给定形状和类型的用0填充的数组,
同理,np.ones()函数返回来一个给定形状和类型的用1填充的数组。
但更多情况下我们想指定某个值,这时用np.full(shape, val)生成全为val的值,
如下:
a = np.full((2,2),100)
生成了一个2行2列,都是100的数组
arr1 = np.full((3,3),100)
arr2 = arr1 * arr1
a = np.random.random((3,3))
a = np.arange(0,10,2)
[0,2,4,6,8]
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中的每一个元素代表一篇文档(被分词之后,并且去掉一些停用词)。