Python库介绍NumPy、Pandas、Matplotlib
数据分析介绍
- 目标
- 发现新的特征
- 对已有假设进行验证
- 手段
- 基于统计学原理
- 借助数据分析软件或框架处理数据
- 成果
- 通常是图文结合的数据分析报告
Python数据分析
- 优势
- 简单、易学,适合初学者作为入门语言
- 拥有一个巨大而活跃的科学计算社区
- 拥有强大的通用编程能力
- Python数据分析常用库
- numpy、pandas、matplotlib、scipy
- 常用开发工具
- Jupyter Notebook
Jupyter Notebook
- 运行在浏览器上的交互式笔记本
- github的明星编码方式
- 工作原理
- 实际调用的是IPython运行Python代码
- 优势/劣势
- 交互式的界面让文字、代码、图片完美融合
- 可以方便的分享项目
- Debug比较困难
Numpy数据分析库
- 支持高性能运算与矩阵运算
- 高性能科学和数据分析库的基础包
- 使用场景
- 量化交易模型
- 数据分析中的矩阵运算
ndarray数组
- 基础数据结构
- 存储单一数据类型的多维数组
- 适用于高性能运算
- 矢量运算能力
- 复杂广播能力
- ndarray可用的数据类型
- 布尔型、整型、浮点型、nan
- 查看数组数据类型
- dtype
ndarray支持的数据类型(一)
名称 | 描述 |
---|---|
bool | 用一个字节存储的布尔类型(True或False) |
inti | 由所在平台决定其大小的整数(一般为int32或int64) |
int8 | 一个字节大小,-128至127 |
int16 | 整数,-32768至32767 |
int32 | 整数,-231至232-1 |
int64 | 整数,-263至263-1 |
ndarray支持的数据类型(二)
名称 | 描述 |
---|---|
uint8 | 无符号整数,0至255 |
uint16 | 无符号整数,0至65535 |
uint32 | 无符号整数,0至2**32-1 |
uint64 | 无符号整数,0至2**64-1 |
float16 | 半精度浮点数:16位,正负号1位,指数5位,精度10位 |
float32 | 单精度浮点数:32位,正负号1位,指数8位,精度23位 |
float64或float | 双精度浮点数:64位,正负号1位,指数11位,精度52位 |
complex64 | 复数,分别用两个32位浮点数表示实部和虚部 |
complex128或complex | 复数,分别用两个64位浮点数表示实部和虚部 |
ndarray基础属性
- 构造ndarray
- 使用list构造ndarray
- 使用arange()方法构造ndarray
- 数组的形状
- shape属性
- ndarray的轴:axis
- axis从0开始计数
- ndarray的轴:axis
- reshape调整数组形状
- shape属性
ndarray基础运算
- 相同形状的ndarray数组运算
- 加减乘除运算是对应位置的元素运算
- 数组和数值间的运算
- 数值和数组的每个元素进行运算
- 支持加减乘除运算
- 数值和数组的每个元素进行运算
了解Pandas统计分析库
- Pandas介绍
- 以NumPy库为底层基础
- 提供了大量能快速便捷地处理数据的函数和方法
- 可快速处理千万级以上的数据
- 可以和Matplotlib等绘图协作,快速实现数据可视化
- Pandas数据结构
- Series
- value
- index
- DataFrame
- 由多列Series组成
- Series
Series数据结构
- 创建Series对象
- 使用列表创建Series
- 自动生成索引
- 设置索引
- 使用字典创建Series
- key被设置为索引
- 使用列表创建Series
- Series保存数据的特点
- 数值类型可以不一致
- Series算术运算
- 计算中会自动对齐不同索引的数据
Series常用方法
方法 | 说明 |
---|---|
iloc(start:end) | 通过index索引截取Series中的数据,不包括end |
head(n) | 截取Series中的前n条数据 |
[] | 根据[]中的条件截取Series中的数据 |
sort_values() | 按照Series的值进行排序,默认是升序,设置降序:ascending=False |
value_counts() | 用来计算Series里面相同数据出现的概率,生成新的Series |
max() /min() | 返回Series中的最大值和最小值 |
mean() | 求均值 |
median() | 求中位数 |
std() | 求标准差 |
isnull() | 判断是否为空值 |
DataFrame数据结构
- DataFrame介绍
- 由多列Series组成的数据结构
- 每一列Series都有一个列名
- 所有列共享索引
- DataFrame的使用
- 实现类似于数据库的复杂操作
- DataFrame和Series之间可以相互转化
创建DataFrame的方法
- 构造DataFrame的方法
- 用包含等长的列表的字典创建DataFrame对象
- 外部字典的键会成为列名
- 自动生成索引
- 用由字典组成的嵌套字典生成DataFrame对象
- 外部字典的键会成为列名
- 内部嵌套字典的键会成为索引
- 用包含等长的列表的字典创建DataFrame对象
操作DataFrame的常用方法
方法 | 说明 |
---|---|
reset_index() | 将索引转换成DataFrame的一个列,并重新添加索引,也可用于将Series转化成DataFrame,把Series的索引转化成DataFrame的列 |
df[‘col_name’] | 通过列名获取DataFrame中的一列,返回Series对象 |
df[df[‘col_name’]>n] | 通过条件筛选符合条件的行,条件为col_name列的值大于n。可以使用&(且), |
del df[‘col_name’] | 删除DataFrame中指定列名的列 |
drop() | 删除数据,默认为根据索引删除行数据 |
iloc(start:end) | 通过index索引解决DataFrame中指定区间的列 |
isnull() | 显示DataFrame中的空值状态,如果存在空值则为True |
sort_values(by=‘col_name’) | 按照选择的列的数值进行排序 |
使用Pandas加载数据
- 常见的数据源格式
- MySQL数据库
- pd.read_sql(sql,con=db)
- con可以是使用PyMySQL创建的数据库连接
- sql可以使用select * from table_name加载所有数据
- pd.read_sql(sql,con=db)
- csv格式文件
- pd.read_csv(file_path)
- json格式文件
- pd.read_json(file_path)
- MySQL数据库
数据可视化
- 数据可视化的意义
- 传递速度快
- 人脑对视觉信息的处理要比书面信息快10倍
- 数据显示的多维性
- 更直观的展示信息
- 大脑记忆能力的限制
- 传递速度快
- 数据可视化常见图形
- 柱状图
- 散点图
- 饼状图
Matplotlib绘图库
- matplotlib介绍
- 一个有效Python 2D绘图库
- 高版本也可以绘制部分3D图
- 支持多种数据结构
- list、ndarray、Series、DataFrame
- 使用Matplotlib的注意事项
- 默认不支持中文
- plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
- 在Jupyter Notebook上输出的是矢量图
- config InlineBackend.figure_format=‘svg’
- 默认不支持中文
使用matplotlib绘制基本图形
- 绘制图片的步骤
- 导入Matplotlib的Python库
- 根据绘制图形的需求准备数据
- 一般是相对应的2个维度的数据
- 使用Series时,数据由Series.index和Series提供
- 一般是相对应的2个维度的数据
- 使用关键字参数调用对应图形的绘制接口
- 散点图: scatter(x,height)
- 柱状图:bar(x,height)
- 饼状图:pie(x,labels)
- 显示图片
- show()