python学习记录Python语言与信息数据获取和机器学习我爱编程

python高级编程之AI数据分析-基础库

2018-01-11  本文已影响889人  E思无邪
基础库.png

前言

使用python做数据分析已经不是什么新的技术,如上图所示,早已被用于各个行业。特别是最近两年,python的应用范围越来越广,各种培训机构也大力推出了python相关课程,在某些省份已经将python作为初高中必修课程,也被纳入到计算机等级考试中。我们有理由相信,python未来的使用会越来越广,而我个人认为这里最有意思的应该是数据分析。比如,马云就知道浙江女性的胸围最小,新疆男人最浪漫,而这全部是基于对淘宝数据得出的。

我的导师赵蔚教授是自适应学习领域研究的专家,几年前,跟着老师学习的时候,对自适应并未有深刻的认识。而今回头再看自适应,我认为其核心仍旧是数据分析——基于学生的行为分析学生的知识、倾向及兴趣爱好特征,建立学生模型,并以此为基础給学生提供合适的学习环境、学习内容等。

这些只是数据分析的一个基础应用场景,数据分析在未来将会大大滴改变生活方式。

数据分析我们该学习什么?要做数据分析,我认为必须学习以下知识:


基于上图中的知识列表,我将编写本系列教程,教程目录如下:

从本篇开始,按照上图中的知识图谱,我们逐个模块讲解。

环境配置

我们使用python进行数据控制、处理、整理、分析,这需要用到大量的第三方库,我们该如何管理这些库?如果在做多个项目时,每个项目的环境要求不一致,这样会不会出现环境上的冲突?Anaconda是做企业级大数据分析,在数据分析、可视化、机器学习方面应用非常广。

根据提示进行安装,完成后你大概会惊讶地发现电脑中多了好多应用,不用担心,我们一项项来看:

  • Anaconda Navigator :用于管理工具包和环境的图形用户界面,后续涉及的众多管理命令也可以在 Navigator 中手工实现。

安装完成后,我们还需要对所有工具包进行升级,以避免可能发生的错误。打开你电脑的终端,在命令行中输入:

conda upgrade --all

在终端询问是否安装如下升级版本时,输入 y

有的情况下,你可能会遇到找不到 conda 命令的错误提示,这很可能是环境路径设置的问题,需要添加conda环境变量:export PATH=xxx/anaconda/bin:$PATH, 其中xxx替换成anaconda的安装路径。

至此,安装完成,下面让我们看一下如何用 Anaconda 管理工具包和环境。

conda install package_name

这里 package_name 是需要安装包的名称。你也可以同时安装多个包,比如同时安装numpy 、scipy 和 pandas,则执行如下命令:

conda install numpy scipy pandas

你也可以指定安装的版本,比如安装 1.1 版本的 numpy :

conda install numpy=1.10

移除一个 package:

conda remove package_name

升级 package 版本:

conda update package_name

查看所有的 packages:

conda list

如果你记不清 package 的具体名称,也可以进行模糊查询:

conda  search search_term

数据分析基础库

上面已经讲述了Python数据分析的环境管理,接下来讲解数据分析常用的基础库:

numpy是什么?
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

numpy能做什么?
使用NumPy,开发人员可以执行以下操作:
a.数组的算数和逻辑运算;
b.傅立叶变换和用于图形操作的例程;
c.与线性代数有关的操作, NumPy 拥有线性代数和随机数生成的内置函数;
d.与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 用于替代 MatLab;

NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学计算。
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)。以下是ndarray常用的一些函数,很多数据分析不需要用到这些函数,但此处进行总结,以便查找。

首先,我们看一下ndarray数组中元素的数据类型。

dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息,它包含基本数据类型和对象型,这也是Numpy强大和灵活的原因之一。

类型 类型代码 说明
int8、uint8 i1、u1 有符号和无符号的8位(1个字节)整形
int16、uint16 i2、u2 有符号和无符号的16位(2个字节)整形
int32、uint32 i4、u4 有符号和无符号的32位(4个字节)整形
int64、uint64 i8、u8 有符号和无符号的64位(8个字节)整形
float16 f2 半精度浮点数
float32 f4或f 标准的单精度浮点数。与C的float兼容
float64 f8或d 标准的双精度浮点数。与C的double和Python的float对象兼容
float128 f16或g 扩展精度浮点数
complex64、complex128 c8、c16 分别用两个32位、64位或128位浮点数表示的复数
bool ? 存储True和False值的布尔类型
object O python的对象类型
string_ S 固定长度的字符串类型(每个字符1个字节),S10表示长度为10的字符串
unicode_ U 固定长度的unicode类型(字节数由平台决定)。跟字符串的定义方式一样(如U10)

ndarray常用的函数可以分为几种:

函数 说明 用法
array 将输入数据(列表、元组、数组等)转换为ndarray。要么推断出dtype,要么显示制定的dtype。 arr=np.array([1,2,3],dtype=np.float64)
asarray 将输入转换成ndarray,如果输入本身就是一个ndarray就不进行复制 arr=np.asarray([[1,1],[1,1]])
arange 类似于内置range,但返回的是一个ndarray而不是列表 np.arange(3) 相当于 array([1,2,3])
ones 根据指定的形状和dtype创建一个全1数组,并根据其形状和dtype创建一个全1数组 arr=np.ones((3,), dtype=int) 输出 array([1,1,1])
ones_like 以另一个数组为参数,并根据其形状和dtype创建一个全1数组 定义x=array([[0, 1],[3, 4]]),y=np.ones_like(x),则y=array([[1,1],[1,1]])
zeros、zeros_like 同上 同上
empty、empty_like 创建新数组,只分配内存空间但不填充任何值 同上
eye 创建一个正方形N*N单位矩阵(对角线为1,其余0),可以偏移 x = np.eye(5, k=2, dtype=int)(第一个数字为N,代表正方形的维数。k为偏移量,dtype为类型)
identity 创建一个正方形N*N单位矩阵(对角线为1,其余0),不可偏移 x = identity(5, dtype=int)(第一个数字为N,代表正方形的维数。dtype为类型)

ndarray有很多函数,下面列举一些常用的一元(unary)函数和二元(binary)函数,一元函数主要有:

函数 说明
abs、fabs 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt 计算各元素的平方根。相当于arr**0.5
square 计算各元素的平方,相当于arr**2
exp 计算各元素的指数
log、log10、log2、log1p 分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x)
sign 计算各元素的正负号:1(正数)、0(零)、-1(复数)
ceil 计算各元素的ceiling值,即大于等于该值的最小整数
floor 计算各元素的floor值,即小于等于该值的最大整数
rint 把各元素四舍五入到最接近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立的数组形式返回
isnan 返回一个表示“哪些值是NaN(这不是一个数字)”的布尔型数组
isfinite、isinf 分别返回一个表示“哪些元素是有穷的(非inf、非NaN)”或“哪些元素是无穷”的布尔型数组
cos、cosh、sin、sinh、tan、tanh 普通型和双曲型三角函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函数
logucal_not 计算各元素not x的真值。相当于-arr

二元函数主要有:

函数 说明
add 将数组中对应的元素相加
substract 将第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆整除法(丢弃余数)
power 对于第一个数组中的元素A,根据第二个数组中的相应元素B,计算A的B次方
maximum、fmax 元素级的最大值计算、fmax将忽略NaN
minimum、fmin 元素级的最小值计算、fmin将忽略NaN
mod 元素级的求模计算(除法的余数)
copysign 将第二个数组中的值的符号复制给第一个数组中的值
greate、greate_equal、less、less_equal 执行元素级的比较运算,最终产生布尔型数组。相当于>、>=、<、<=、==、!=
logical_and、logical_or、logical_xor 执行元素级的真值逻辑运算。相当于&、 、^
函数 说明
sum 对数组中全部或某轴向的元素求和。零长度的数组的sum为0
mean 算数平均数。零长度的数组的mean为NaN
std、var 分别为标准差和方差,自由度可调(默认为n)
min、max 最大值和最小值
argmin、argmax 分别为最大和最小元素的索引
cumsum 所有元素的累计和
cumprod 所有元素的累计积
函数 说明
unique(x) 计算x中的唯一元素,并返回有序的结果
intersect1d(x,y) 计算x和y中的公共元素,并返回有序结果
union1d(x,y) 计算x和y的并集,并返回有序结果
in1d(x,y) 得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x,y) 集合的差,即元素在x中且不在y中
setxor1d(x,y) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素
函数 说明
diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换成为方阵(非对角线元素为0)
dot 矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的本征值和本征向量)
inv 计算方阵的逆)
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解(SVD)
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解
函数 说明
seed 确定随机数生成器的种子
permutation 返回一个序列的随机排列和返回一个随机排列的范围
shuffle 对一个序列就地随机排序
rand 产生均匀分布的样本值
randint 从给定的上下限范围内随机选取整数
randn 产生正态分布(平均值为0,标准差为1)的样本值,类似于MATLAB接口
binomial 产生二项分布的样本值
normal 产生正态(高斯)分布的样本值
beta 产生Beta分布的样本值
chisquare 产生卡方分布的样本值
gamma 产生Gamma分布的样本值
uniform 产生在[0,1)中均匀分布的样本值

以下内容摘自十分钟搞定pandas,

本文是对pandas官方网站上《10 Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook 。习惯上,我们会按下面格式引入所需要的包:

image 一、 创建对象
可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。
1、可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:
image
2、通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:
image
3、通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
image
4、查看不同列的数据类型:
image
5、如果你使用的是IPython,使用Tab自动补全功能会自动识别所有的属性以及自定义的列,下图中是所有能够被自动识别的属性的一个子集:
image 二、 查看数据
详情请参阅:Basics Section
1、 查看frame中头部和尾部的行:
image
2、 显示索引、列和底层的numpy数据:
image
3、 describe()函数对于数据的快速统计汇总:
image
4、 对数据的转置:
image
5、 按轴进行排序
image
6、 按值进行排序
image 三、 选择
虽然标准的Python/Numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问方式: .at, .iat, .loc, .iloc 和 .ix详情请参阅Indexing and Selecing DataMultiIndex / Advanced Indexing
1、 选择一个单独的列,这将会返回一个Series,等同于df.A:
image
2、 通过[]进行选择,这将会对行进行切片
image
1、 使用标签来获取一个交叉的区域
image
2、 通过标签来在多个轴上进行选择
image
3、 标签切片
image
4、 对于返回的对象进行维度缩减
image
5、 获取一个标量
image
6、 快速访问一个标量(与上一个方法等价)
image
1、 通过传递数值进行位置选择(选择的是行)
image
2、 通过数值进行切片,与numpy/python中的情况类似
image
3、 通过指定一个位置的列表,与numpy/python中的情况类似
image
4、 对行进行切片
image
5、 对列进行切片
image
6、 获取特定的值
image
1、 使用一个单独列的值来选择数据:
image
2、 使用where操作来选择数据:
image
3、 使用isin()方法来过滤:
image
l 设置
1、 设置一个新的列:
image
2、 通过标签设置新的值:
image
3、 通过位置设置新的值:
image
4、 通过一个numpy数组设置一组新值:
image
上述操作结果如下:
image
5、 通过where操作来设置新的值:
image
四、 缺失值处理
在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中,详情请参阅:Missing Data Section
1、 reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:
image
2、 去掉包含缺失值的行:
image
3、 对缺失值进行填充:
image
4、 对数据进行布尔填充:
image
五、 相关操作
详情请参与 Basic Section On Binary Ops
l 统计(相关操作通常情况下不包括缺失值)
1、 执行描述性统计:
image
2、 在其他轴上进行相同的操作:
image
3、 对于拥有不同维度,需要对齐的对象进行操作。Pandas会自动的沿着指定的维度进行广播:
image
l Apply
1、 对数据应用函数:
image
l 直方图
具体请参照:Histogramming and Discretization
image
l 字符串方法
Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素,如下段代码所示。更多详情请参考:Vectorized String Methods.
image
六、 合并
Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。具体请参阅:Merging section
l Concat
image
l Join 类似于SQL类型的合并,具体请参阅:Database style joining
image
l Append 将一行连接到一个DataFrame上,具体请参阅Appending
image
七、 分组
对于”group by”操作,我们通常是指以下一个或多个操作步骤:
l (Splitting)按照一些规则将数据分为不同的组;
l (Applying)对于每组数据分别执行一个函数;
l (Combining)将结果组合到一个数据结构中;
详情请参阅:Grouping section
image
1、 分组并对每个分组执行sum函数:
image
2、 通过多个列进行分组形成一个层次索引,然后执行函数:
image
八、 Reshaping
详情请参阅 Hierarchical IndexingReshaping
l Stack
image
image
image
l 数据透视表,详情请参阅:Pivot Tables.
image
可以从这个数据中轻松的生成数据透视表:
image
九、 时间序列
Pandas在对频率转换进行重新采样时拥有简单、强大且高效的功能(如将按秒采样的数据转换为按5分钟为单位进行采样的数据)。这种操作在金融领域非常常见。具体参考:Time Series section
image
1、 时区表示:
image
2、 时区转换:
image
3、 时间跨度转换:
image
4、 时期和时间戳之间的转换使得可以使用一些方便的算术函数。
image
十、 Categorical
从0.15版本开始,pandas可以在DataFrame中支持Categorical类型的数据,详细 介绍参看:categorical introductionAPI documentation
image
1、 将原始的grade转换为Categorical数据类型:
image
2、 将Categorical类型数据重命名为更有意义的名称:
image
3、 对类别进行重新排序,增加缺失的类别:
image
4、 排序是按照Categorical的顺序进行的而不是按照字典顺序进行:
image
5、 对Categorical列进行排序时存在空的类别:
image
十一、 画图
image
对于DataFrame来说,plot是一种将所有列及其标签进行绘制的简便方法:
image
image
十二、 导入和保存数据
1、 写入csv文件:
image
2、 从csv文件中读取:
image
l HDF5,参考:HDFStores
1、 写入HDF5存储:
image
2、 从HDF5存储中读取:
image
1、 写入excel文件:
image
2、 从excel文件中读取:
image

小结:ndarray是Numpy最重要的一个类,这篇文章中总结了其部分常用函数,以便查找。!

上一篇下一篇

猜你喜欢

热点阅读