前言:为什么用python做数据分析

1. Python数据分析的理由

对于数据分析师从业者而言,经常需要从事:数据库操作、报告撰写、数据可视化、数据挖掘的工作。这些工作不写代码也可以操作,利用 Excel 进行数据可视化、使用 SPSS 等一些亲民类平台工具进行数据挖掘,在《数据分析是什么?》中我们介绍了使用平台工具虽然可造作性强,但是不可避免的会存在重复机械的劳动,从而降低自己的工作效率,但如果你会用 Python 编写代码,操作的自由度更高,发展的潜力更大。

1) Python强大的第三方库

Python 语言拥有简洁易读的特性,它是个生态完善且开源软件包很多的高级动态编程语言。在数据分析过程中,可以通过调用不同的包来完成相应的工作,比如上述介绍的 Numpy、SciPy 和 Matplotlib以及 pandas,这些模块分别承担着数据分析工作不同的任务。就拿 Numpy 来说吧,Numpy (Numerical Python)的简称,是 Python 科学计算的基础包。功能主要如下:

  • 快速高效的多维数组对象 ndarray。
  • 线性代数运算、傅里叶变换,以及随机数生成。
  • 用于将 C、C++、Fortran(公式翻译语言)代码集成到 Python 的工具。
  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。

Numpy 除了为 Python 提供快速的数组处理能力,它的另外一个主要作用是作为在算法之间传递数据的容器。对于数值型数据,NumPy 数组在存储和处理数据时要比内置的 Python 数据结构高效得多,在后续章节中我们对 Numpy 进行详细介绍。

2) 分析过程可控复用性强

当我们使用 Python 做数据分析时,可以将分析的过程保存下来,从而实现对分析过程的追溯,最后当一个数据分析的任务完成后,我们可以代码以脚本的形式保存下来,以实现后续复用的目的,从而提升你的工作效率。

3) Python语言功能完善

Python 不仅在数据分析方面有很突出的表现能力,还在网络爬虫、Web 站点开发、游戏开发、自动化运维等众多领域都有很广泛的应用。这对于软件公司来说无疑是一件锦上添花的事情,让使用一种语言完成全部服务成为可能。

我们可以用 Python 的爬虫框架 Scrapy 来爬取数据,然后交给 pandas 做数据清洗处理,最后使用Python 的 Django 框架搭建 Web 站点将结果展示出来,你会发现在这一过程中,我们仅靠 Python 语言的框架实现了全部需求。所有的开发人员使用同一种编程工具将会给企业带来非常显著的效益。

4) Python作为胶水语言

Python 是一种“胶水语言”,顾名思义就是“粘合”的意思 ,Python 在设计初期就面向科研人员,以降低编程难度,提高编程效率为目的。Python 之所以在科学计算领域能够功成名就,这和它能够轻松地集成 C、C++以及 Fortran 代码有不可分割原因。大部分现代计算环境都利用了 Fortran 和 C库来实现线性代数、积分、傅里叶变换等诸多算法。

5) Python与AI紧密相连

你可能感觉 人工智能是很神秘的事物,其实它离一个数据分析师并不遥远。现在大部分深度学习框架都优先选择支持 Python 语言,比如当下火热的谷歌深度学习框架Tensorflow,它虽然是C++编写的,但对 Python 语言支持是最好。

img

Tensorflow 的数据类型与 numpy 的数据类型是等价的,这是因为 Tensorflow 在设计的时候就是参考了 numpy 的数据类型,目的就是使其成为 Python 科学计算系列库的重要部分。所以使用 Python 做数据分析,对于和 AI 人工智能接轨有很好的帮助。这无疑将拓宽你的视野与道路,增加自身的软实力。

Pandas 概览

PandasPython (opens new window)的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。

Pandas 适用于处理以下类型的数据:

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  • 有序和无序(非固定频率)的时间序列数据;
  • 带行列标签的矩阵数据,包括同构或异构型数据;
  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

Pandas 的主要数据结构是 Series (opens new window)(一维数据)与 DataFrame (opens new window)(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPy (opens new window)开发,可以与其它第三方科学计算支持库完美集成。

Pandas 就像一把万能瑞士军刀,下面仅列出了它的部分优势 :

  • 处理浮点与非浮点数据里的缺失数据,表示为 NaN
  • 大小可变:插入或删除 DataFrame 等多维对象的列;
  • 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;
  • 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;
  • 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;
  • 基于智能标签,对大型数据集进行切片花式索引子集分解等操作;
  • 直观地合并(merge)连接(join)数据集;
  • 灵活地重塑(reshape)透视(pivot)数据集;
  • 支持结构化标签:一个刻度支持多个标签;
  • 成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;
  • 时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。

这些功能主要是为了解决其它编程语言、科研环境的痛点。处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。

其它说明:

  • Pandas 速度很快。Pandas 的很多底层算法都用 Cython (opens new window)优化过。然而,为了保持通用性,必然要牺牲一些性能,如果专注某一功能,完全可以开发出比 Pandas 更快的专用工具。
  • Pandas 是 statsmodels (opens new window)的依赖项,因此,Pandas 也是 Python 中统计计算生态系统的重要组成部分。
  • Pandas 已广泛应用于金融领域。

数据结构

维数 名称 描述
1 Series 带标签的一维同构数组
2 DataFrame 带标签的,大小可变的,二维异构表格

为什么有多个数据结构?

Pandas 数据结构就像是低维数据的容器。比如,DataFrame 是 Series 的容器,Series 则是标量的容器。使用这种方式,可以在容器中以字典的形式插入或删除对象。

此外,通用 API 函数的默认操作要顾及时间序列与截面数据集的方向。多维数组存储二维或三维数据时,编写函数要注意数据集的方向,这对用户来说是一种负担;如果不考虑 C 或 Fortran 中连续性对性能的影响,一般情况下,不同的轴在程序里其实没有什么区别。Pandas 里,轴的概念主要是为了给数据赋予更直观的语义,即用“更恰当”的方式表示数据集的方向。这样做可以让用户编写数据转换函数时,少费点脑子。

处理 DataFrame 等表格数据时,index(行)或 columns(列)比 axis 0axis 1 更直观。用这种方式迭代 DataFrame 的列,代码更易读易懂:

for col in df.columns:
    series = df[col]
    # do something with series

大小可变与数据复制

Pandas 所有数据结构的值都是可变的,但数据结构的大小并非都是可变的,比如,Series 的长度不可改变,但 DataFrame 里就可以插入列。

Pandas 里,绝大多数方法都不改变原始的输入数据,而是复制数据,生成新的对象。 一般来说,原始输入数据不变更稳妥。

pandas是什么

pandas是⼀个开源的、BSD许可的库 为Python编程语⾔提供⾼性能、易于使⽤的数据结构和数据分析⼯具

列表:使用方便、效率不高

numpy:存储单一(数值类型)、大大提高效率

pandas:构建在numpy之上,继承了numpy效率高的优点、自己易于使用的优点(行索引 列索引)

在这里插入图片描述

高性能

list :不连续的

pandas:内存地址是连续的

在这里插入图片描述

易用

numpy:二维数组只有数字索引

在这里插入图片描述

pandas:二维数据 还有标签索引支持行列索引

在这里插入图片描述 在这里插入图片描述

pandas常用方法(点击下载pdf)

请添加图片描述

pandas.append()

上下拼接多个表格

请添加图片描述

pandas.join()

左右拼接俩个表格

请添加图片描述

pandas.concat()

设置上下(axis=0)或左右(axis=1)拼接多个表格

请添加图片描述

pandas.merge()

依照俩个表格相同的元素把俩个表格连接在一起

请添加图片描述

pandas.pivot_table()

相当于excel中的透视操作

请添加图片描述

俩种窗口操作

请添加图片描述

第一种是固定窗口滚动操作

rolling( )

请添加图片描述

第二种是扩展窗口操作

expanding( )

请添加图片描述