01_Python数据开发简介
学习目标
- 了解 Python 做数据开发的优势
- 知道 Python 数据开发常用开源库
1.1 为什么要使用Python做数据开发
注意:这里的数据开发包含了数据分析以及大数据开发
1.1.1 Python在数据开发领域的优势
Python作为当下最为流行的编程语言之一,可以独立完成数据开发的各种任务:
- 语言本身就简单易学,书写代码简单快速
- 同时在数据分析以及大数据领域里有海量的功能强大的开源库,并持续更新
- Pandas:数据清洗、数据处理、数据分析
- Sklearn:机器学习、统计分析
- PySpark:Spark使用Python
- PyFlink:Flink使用Python
- Matplotlib、Seaborn、Pyecharts:数据可视化(出图表)
- ...
1.1.2 为什么要学习 Pandas
Python在数据处理上独步天下:代码灵活、开发快速;尤其是Python的 Pandas 开源库,无论是在数据分析领域、还是在大数据开发场景中都具有显著的优势:
- Pandas 是 Python 中的一个第三方数据分析开源库,也是商业和工程领域最流行的结构化数据工具集,用于数据清洗、处理以及分析
- Pandas 和 PySpark 中很多功能都类似,甚至使用方法都是相同的;当我们学会 Pandas 之后,再学习 PySpark 就更加简单快速
- Pandas在数据处理上具有独特的优势
- 底层是基于Numpy构建的,所以运行速度特别的快
- 有专门的处理缺失数据的API
- 强大而灵活的分组、聚合、转换功能
- Pandas 在整个数据开发的流程中的应用场景
- 在大数据场景下,数据在流转的过程中,Pandas 中丰富的API能够更加灵活、快速的对数据进行清洗和处理
- 数据量大到 excel 严重卡顿,且又都是单机数据的时候,我们使用 Pandas
- 在大数据 ETL 数据仓库中,对数据进行清洗及处理的环节使用 Pandas
1.1.3 其他常用Python库介绍
在数据分析、数据开发领域,除了 Pandas 还有其他常用的一些库,如下:
扩展包 | 简介 |
---|---|
NumPy |
Python 中的一个开源数学运算库,运行速度非常快,主要用于数组计算 |
Matplotlib |
Matplotlib 是一个功能强大的数据可视化开源 Python 库 |
Seaborn |
Python 中的一个数据可视化开源库,建立在 Matplotlib 之上,并集成了 Pandas 的数据结构 |
Pyecharts |
基于百度的 echarts 的 Python 数据可视化开源库,有完整丰富的中文文 档及示例 |
Sklearn |
即scikit-learn,是基于 Python 语言的机器学习工具,经常用于统计分析计算 |
PySpark |
是 Spark 为 Python 开发者提供的 API,具有 Spark 全部的 API 功能 |
02_pandas快速入门
学习目标
- 能够知道 DataFrame 和 Series 数据结构
- 能够加载 csv 和 tsv 数据集
- 能够区分 DataFrame 的行列标签和行列位置编号
- 能够获取 DataFrame 指定行列的数据
2.1 DataFrame 和 Series 简介
pandas是用于数据分析的开源Python库,可以实现数据加载,清洗,转换,统计处理,可视化等功能。
pandas最基本的两种数据结构:
1)DataFrame
- 用来处理结构化数据(SQL数据表,Excel表格)
- 可以简单理解为一张数据表(带有行标签和列标签)
2)Series
- 用来处理单列数据,也可以以把DataFrame看作由Series对象组成的字典或集合
- 可以简单理解为数据表的一行或一列
2.2 加载数据集(csv和tsv)
2.2.1 csv和tsv文件格式简介
csv 和 tsv 文件都是存储一个二维表数据的文件类型。
注意:其中csv文件每一列的列元素之间以逗号进行分割,tsv文件每一行的列元素之间以\t进行分割。
2.2.2 加载数据集(tsv和csv)
1)首先打开jupyter notebook,进入自己准备编写代码目录下方,创建01-pandas快速入门.ipynb
文件:
注意:提前将提供的 data 数据集目录放置到 01-pandas快速入门.ipynb 同级目录下,后续课程会加载 data 目录下的数据集。
2)导入 pandas 包
注意:pandas 并不是 Python 标准库,所以先导入pandas
# 在 ipynb 文件中导入 pandas
import pandas as pd
3)加载 csv 文件数据集
tips = pd.read_csv('./data/tips.csv')
tips
4)加载 tsv 文件数据集
# sep参数指定tsv文件的列元素分隔符为\t,默认sep参数是,
china = pd.read_csv('./data/china.tsv', sep='\t')
china
2.3 DataFrame 的行列标签和行列位置编号
2.3.1 DataFrame 的行标签和列标签
1)如果所示,分别是 DataFrame 的行标签和列标签
2)获取 DataFrame 的行标签
# 获取 DataFrame 的行标签
china.index
3)获取 DataFrame 的列标签
# 获取 DataFrame 的列标签
china.columns
4)设置 DataFrame 的行标签
# 注意:DataFrame设置行标签时,并不会改变原来的DataFrame,而是返回的副本
china_df = china.set_index('year')
2.3.2 DataFrame 的行位置编号和列位置编号
DataFrame 除了行标签和列标签之外,还具有行列位置编号。
行位置编号:从上到下,第1行编号为0,第二行编号为1,…,第n行编号为n-1
列位置编号:从左到右,第1列编号为0,第二列编号为1,…,第n列编号为n-1
注意:默认情况下,行标签和行位置编号是一样的。
2.4 DataFrame 获取指定行列的数据
以下示例都使用加载的 gapminder.tsv 数据集进行操作,注意将 year 这一列设置为行标签。
2.4.1 loc函数获取指定行列的数据
基本格式:
语法 | 说明 |
---|---|
df.loc[[行标签1, ...], [列标签1, ...]] |
根据行标签和列标签获取对应行的对应 列的数据,结果为:DataFrame |
df.loc[[行标签1, ...]] |
根据行标签获取对应行的所有列的数据 结果为:DataFrame |
df.loc[:, [列标签1, ...]] |
根据列标签获取所有行的对应列的数据 结果为:DataFrame |
df.loc[行标签] |
1)如果结果只有一行,结果为:Series 2)如果结果有多行,结果为:DataFrame |
df.loc[[行标签]] |
无论结果是一行还是多行,结果为DataFrame |
df.loc[[行标签], 列标签] |
1)如果结果只有一列,结果为:Series, 行标签作为 Series 的索引标签 2)如果结果有多列,结果为:DataFrame |
df.loc[行标签, [列标签]] |
1)如果结果只有一行,结果为:Series, 列标签作为 Series 的索引标签 2)如果结果有多行,结果为DataFrame |
df.loc[行标签, 列标签] |
1)如果结果只有一行一列,结果为单个值 2)如果结果有多行一列,结果为:Series, 行标签作为 Series 的索引标签 3)如果结果有一行多列,结果为:Series, 列标签作为 Series 的索引标签 4)如果结果有多行多列,结果为:DataFrame |
演示示例:
示例1:获取行标签为 1952, 1962, 1972 行的 country、pop、gdpPercap 列的数据
示例2:获取行标签为 1952, 1962, 1972 行的所有列的数据
示例3:获取所有行的 country、pop、gdpPercap 列的数据
示例4:获取行标签为 1957 行的所有列的数据
示例5:获取行标签为 1957 行的 lifeExp 列的数据
示例实现:
1)示例1:获取行标签为 1952, 1962, 1972 行的 country、pop、gdpPercap 列的数据
# 示例1:获取行标签为 1952, 1962, 1972 行的 country、pop、gdpPercap 列的数据
china_df.loc[[1952, 1962, 1972], ['country', 'pop', 'gdpPercap']]
2)示例2:获取行标签为 1952, 1962, 1972 行的所有列的数据
# 示例2:获取行标签为 1952, 1962, 1972 行的所有列的数据
china_df.loc[[1952, 1962, 1972]]
3)示例3:获取所有行的 country、pop、gdpPercap 列的数据
# 示例3:获取所有行的 country、pop、gdpPercap 列的数据
china_df.loc[:, ['country', 'pop', 'gdpPercap']]
4)示例4:获取行标签为 1957 行的所有列的数据
# 示例4:获取行标签为 1957 行的所有列的数据
china_df.loc[1957]
# 示例4:获取行标签为 1957 行的所有列的数据
china_df.loc[[1957]]
5)示例5:获取行标签为 1957 行的 lifeExp 列的数据
# 示例5:获取行标签为 1957 行的 lifeExp 列的数据
china_df.loc[[1957], 'lifeExp']
或
china_df.loc[1957, ['lifeExp']]
或
china_df.loc[1957, 'lifeExp']