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

作者: E思无邪 | 来源:发表于2018-01-11 18:35 被阅读889次
    基础库.png

    前言

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

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

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

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


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

    • python高级编程之AI数据分析-基础库
    • python高级编程之AI数据分析-语法要点
    • python高级编程之AI数据分析-数据导入导出
    • python高级编程之AI数据分析-提取和筛选
    • python高级编程之AI数据分析-数据处理
    • python高级编程之AI数据分析-统计分析
    • python高级编程之AI数据分析-可视化

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

    环境配置

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

    • 1Anaconda简述
      Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令 conda 来进行package和environment的管理,并且已经包含了Python和相关的配套工具。这里先解释下conda、anaconda这些概念的差别。 conda 可以理解为一个工具,也是一个可执行命令,其核心功能是包管理环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,所以也称为Python的一种发行版。其实还有Miniconda,顾名思义,它只包含最基本的内容——python与conda,以及相关的必须依赖项,对于空间要求严格的用户,Miniconda是一种选择。进入下文之前,说明一下conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换。

    • 2 Anaconda安装
      可以从这里下载 Anaconda 的安装程序以及查看安装说明。无论是 Windows、Linux 还是 MAC 的 OSX 系统,都可以找到对应的安装软件。如果你的电脑是64位则尽量选64位版本。至于 Python 的版本是 2.7 还是 3.x,这里推荐你使用 Python3,因为 Python2 终将停止维护。可能目前市面上大多数教程使用的都还是 Python2,这也不用着急,因为在 Anaconda 中可以同时管理两个 Python 版本的环境。

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

    • Anaconda Navigator :用于管理工具包和环境的图形用户界面,后续涉及的众多管理命令也可以在 Navigator 中手工实现。
    • Jupyter notebook :基于web的交互式计算环境,可以编辑易于人们阅读的文档,用于展示数据分析的过程。

    • qtconsole :一个可执行 IPython 的仿终端图形界面程序,相比 Python Shell 界面,qtconsole 可以直接显示代码生成的图形,实现多行代码输入执行,以及内置许多有用的功能和函数。

    • spyder :一个使用Python语言、跨平台的、科学运算集成开发环境。

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

    conda upgrade --all
    
    

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

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

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

    • 3 Anaconda常用命令
      安装一个 package:
    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数据分析的环境管理,接下来讲解数据分析常用的基础库:

    • 1.Numpy

    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常用的函数可以分为几种:

    • 创建函数
      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) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素
    • 线性函数(numpy.linalg)
    函数 说明
    diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换成为方阵(非对角线元素为0)
    dot 矩阵乘法
    trace 计算对角线元素的和
    det 计算矩阵行列式
    eig 计算方阵的本征值和本征向量)
    inv 计算方阵的逆)
    pinv 计算矩阵的Moore-Penrose伪逆
    qr 计算QR分解
    svd 计算奇异值分解(SVD)
    solve 解线性方程组Ax=b,其中A为一个方阵
    lstsq 计算Ax=b的最小二乘解
    • 随机函数(numpy.random)
    函数 说明
    seed 确定随机数生成器的种子
    permutation 返回一个序列的随机排列和返回一个随机排列的范围
    shuffle 对一个序列就地随机排序
    rand 产生均匀分布的样本值
    randint 从给定的上下限范围内随机选取整数
    randn 产生正态分布(平均值为0,标准差为1)的样本值,类似于MATLAB接口
    binomial 产生二项分布的样本值
    normal 产生正态(高斯)分布的样本值
    beta 产生Beta分布的样本值
    chisquare 产生卡方分布的样本值
    gamma 产生Gamma分布的样本值
    uniform 产生在[0,1)中均匀分布的样本值
    • 2.pandas

    以下内容摘自十分钟搞定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最重要的一个类,这篇文章中总结了其部分常用函数,以便查找。!

    相关文章

      网友评论

        本文标题:python高级编程之AI数据分析-基础库

        本文链接:https://www.haomeiwen.com/subject/ldofnxtx.html