前言
大数据时代,数据的重要性不言而喻,掌握数据者得天下。很多同学可能对一堆数据不知如何进行处理分析得到有用的信息,本文主要基于anaconda 简单介绍 Numpy 模块的使用,重点演示 Pandas 的应用。
- 数据分析:把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律
- 数据分析三剑客:Numpy,Pandas,Matplotlib
- Numpy与Padas是数据结构、Matplotlib绘图使用
0. 环境准备
# 环境变量 for zsh,并为 anaconda 的pip命别名
export PATH=$PATH:/Applications/anaconda3/bin
alias cpip="/Applications/anaconda3/bin/pip"
source ~/.zhsrc
1. numpy
- NumPy(Numerical Python):Python语言的一个扩展程序库,支持大量的维度数据与矩阵运算,针对数组提供大量的数学函数库。
1. 使用np.array()创建
- 数组
import numpy as np
# 一维数组
np.array([1,2,3])
# 二维数组
np.array([[1,2,3], [4,5,6]])
# 返回值优先级:str > float > int
- matplotlib绘图
import matplotlib.pylab as plt
# 返回一个数组,图片是三维数据
img_arr = plt.imread('./cat.jpg')
plt.imshow(img_arr)
plt.imshow(img_arr-100)
2. np的数组(4)
- linspace
# 平均生成 num 个 start-stop数据
np.linspace(start, stop, num)
- arange:等差数列
# start 默认是 0, step默认是 1, 给定 step 必须有start
np.arange([start,] stop[, step,], dtype=None)
# 不包含 10
np.arange(0, 10, 2)
- random.randint():随机数
# [low, high),high=None表示 [0-low), size=(1,2,3...)表示维度
np.random.randint(randint(low, high=None, size=None, dtype='l')
# 固定随机性,随机因子(系统时间)
np.random.seed(10)
np.random.randint(0,100, size=(4,5))
- random.random(size)
# 默认大小是 0-1
np.random.random(size=(4,5))
3. ndarray属性(3)
arr.shape # (4,5),返回的是数组的形状
arr.size # 元素个数
arr.dtype # ('int64'),数据类型
4. 操作(4)
- 索引
arr[1] # 第一个元素,索引从 0 开始
arr[2, 3] # 第二行第三列元素
- 切片
arr[0:2] # 前两行
arr[:, 0:2] # , 左边是行,右边是列
arr[::-1] # 行倒序
arr[:, ::-1] # 列倒序
arr[:, ::-1, :]
- 变形:参数是一个tuple
arr.reshape()
# 容量必须刚刚好
arr.reshape((20,))
arr.reshape((1, 20))
arr.reshape(1, 20)
# 自动计算行数
arr.reshape((-1, 4))
- 级联
- 数据的拼接,注意行或列的长度
# axis=0 表示作用于行(纵向拼接),axis=1作用于列(横向拼接)
np.concatenate((arr, arr), axis=0)
- 算术运算
- 广播机制:如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失维度和(或)轴长度为1的维度上进行。
b = np.array([[1],[2],[3]])
a = np.array([1,2,3])
b-a
--> array([[ 0, -1, -2],
[ 1, 0, -1],
[ 2, 1, 0]])
5. ndarray聚合
- np.sum/mean
arr.sum(axis=None) # 计算所有元素的和
arr.sum(axis=0) # 作用于列,数据并到一行。列的和
arr.sum(axis=1) # 作用于行,数据并到一列。行的和
arr.mean(axis=None/0/1) # 平均数
- 其他
np.sqrt(arr) # 开方
np.prod(arr) # 所有元素相乘
np.min(arr) # 最小值
np.max(arr) # 最大值
np.std(arr) # 标准差
np.var(arr) # 方差
np.median(arr) # 中数
np.power(arr,2) # 幂运算
np.argmin(arr) # 最小值的下标
np.argmax(arr) # 最大值的下标
np.inf # 无穷大
np.exp(10) # 以e为底的指数,e**10
np.log(10) # 对数,e为底
6. ndarray排序
- sort排序
# axis默认-1:表示按照上次的排序规则排序
# axis=0:表示按照列元素排序,1表示行元素排序
np.sort(arr, axis=-1, kind='quicksort', order=None)
# 列元素排序,列有序,arr被修改
arr.sort(axis=0)
# 列元素排序,列有序,不改变原数据
np.sort(arr, axis=0)
Note(2)
- axis=0:表示针对行进行计算或排序,列有序
- axis=1:表示针对列进行计算或排序,行有序
2. pandas
SQL中的select是根据列的名称来选取;Pandas则更为灵活,不但可根据列名称选取,还可以根据列所在的position(数字,在第几行第几列,注意pandas行列的position是从0开始)选取。相关函数如下:
loc # 基于列label,可选取特定行(根据行index)
iloc # 基于行/列的position(默认的索引,整型)
at # 根据指定行index及列label,快速定位DataFrame的元素
iat # 与at类似,不同的是根据position来定位的
ix # 为loc与iloc的混合体,既支持label也支持position
- 导入需要的包
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
1. Series
1. 创建和去重
- 是一种类似与一维数组的对象
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
- 创建:由列表或numpy