数据分析流程记录

numpy方法

表1:通用一元函数

函数 说明
abs / fabs 求绝对值的函数
sqrt 求平方根的函数,相当于array ** 0.5
square 求平方的函数,相当于array ** 2
exp 计算 e x e^x ex的函数
log / log10 / log2 对数函数(e为底 / 10为底 / 2为底)
sign 符号函数(1 - 正数;0 - 零;-1 - 负数)
ceil / floor 上取整 / 下取整
isnan 返回布尔数组,NaN对应True,非NaN对应False
isfinite / isinf 判断数值是否为无穷大的函数
cos / cosh / sin 三角函数
sinh / tan / tanh 三角函数
arccos / arccosh / arcsin 反三角函数
arcsinh / arctan / arctanh 反三角函数
rint / round 四舍五入函数

表2:通用二元函数

函数 说明
add(x, y) / substract(x, y) 加法函数 / 减法函数
multiply(x, y) / divide(x, y) 乘法函数 / 除法函数
floor_divide(x, y) / mod(x, y) 整除函数 / 求模函数
allclose(x, y) 检查数组xy元素是否几乎相等
power(x, y) 数组 x x x的元素 x i x_i xi和数组 y y y的元素 y i y_i yi,计算 x i y i x_i^{y_i} xiyi
maximum(x, y) / fmax(x, y) 两两比较元素获取最大值 / 获取最大值(忽略NaN)
minimum(x, y) / fmin(x, y) 两两比较元素获取最小值 / 获取最小值(忽略NaN)
inner(x, y) 内积运算
cross(x, y) / outer(x, y) 叉积运算 / 外积运算
intersect1d(x, y) 计算xy的交集,返回这些元素构成的有序数组
union1d(x, y) 计算xy的并集,返回这些元素构成的有序数组
in1d(x, y) 返回由判断x 的元素是否在y中得到的布尔值构成的数组
setdiff1d(x, y) 计算xy的差集,返回这些元素构成的数组
setxor1d(x, y) 计算xy的对称差,返回这些元素构成的数组

补充说明:在二维空间内,两个向量 A = [ a 1 a 2 ] \boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \end{bmatrix} A=[a1a2] B = [ b 1 b 2 ] \boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix} B=[b1b2]的叉积是这样定义的: A × B = ∣ a 1 a 2 b 1 b 2 ∣ = a 1 b 2 − a 2 b 1 \boldsymbol{A}\times \boldsymbol{B}=\begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix}=a_1b_2 - a_2b_1 A×B=a1a2b1b2=a1b2a2b1,其中 ∣ a 1 a 2 b 1 b 2 ∣ \begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix} a1a2b1b2称为行列式。但是一定要注意,叉积并不等同于行列式,行列式的运算结果是一个标量,而叉积运算的结果是一个向量。如果不明白,我们可以看看三维空间两个向量, A = [ a 1 a 2 a 3 ] \boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix} A=a1a2a3 B = [ b 1 b 2 b 3 ] \boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix} B=b1b2b3的叉积是 < i ^ ∣ a 2 a 3 b 2 b 3 ∣ , − j ^ ∣ a 1 a 3 b 1 b 3 ∣ , k ^ ∣ a 1 a 2 b 1 b 2 ∣ > \left< \hat{i} \begin{vmatrix} a_2 \quad a_3 \\ b_2 \quad b_3 \end{vmatrix}, -\hat{j} \begin{vmatrix} a_1 \quad a_3 \\ b_1 \quad b_3 \end{vmatrix}, \hat{k} \begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix} \right> i^a2a3b2b3,j^a1a3b1b3,k^a1a2b1b2,其中 i ^ , j ^ , k ^ \hat{i}, \hat{j}, \hat{k} i^,j^,k^代表每个维度的单位向量。

其他常用函数

表3:NumPy其他常用函数

函数 说明
unique 去除数组重复元素,返回唯一元素构成的有序数组
copy 返回拷贝数组得到的数组
sort 返回数组元素排序后的拷贝
split / hsplit / vsplit 将数组拆成若干个子数组
stack / hstack / vstack 将多个数组堆叠成新数组
concatenate 沿着指定的轴连接多个数组构成新数组
append / insert 向数组末尾追加元素 / 在数组指定位置插入元素
argwhere 找出数组中非0元素的位置
extract / select / where 按照指定的条件从数组中抽取或处理数组元素
flip 沿指定的轴翻转数组中的元素
fromiter 通过迭代器创建数组对象
fromregex 通过读取文件和正则表达式解析获取数据创建数组对象
repeat / tile 通过对元素的重复来创建新数组
roll 沿指定轴对数组元素进行移位
resize 重新调整数组的大小
place / put 将数组中满足条件的元素/指定的元素替换为指定的值
ptp 沿指定的轴计算极差(最大值与最小值的差)
median 沿指定轴计算中位数
partition 用选定的元素对数组进行一次划分并返回划分后的数组

提示:上面的resize函数和ndarray对象的resize方法是有区别的,resize函数在调整数组大小时会重复数组中的元素作为填补多出来的元素的值,而ndarry对象的resize方法是用0来填补多出来的元素。这些小细节不清楚暂时也不要紧,但是如果用到对应的功能了就要引起注意。

numpy矩阵对象的属性。

属性 说明
A 获取矩阵对象对应的ndarray对象
A1 获取矩阵对象对应的扁平化后的ndarray对象
I 可逆矩阵的逆矩阵
T 矩阵的转置
H 矩阵的共轭转置
shape 矩阵的形状
size 矩阵元素的个数
NumPy的线性代数模块
函数 说明
diag 以一维数组的形式返回方阵的对角线元素或将一维数组转换为方阵(非对角元素元素为0)
vdot 向量的点积
dot 数组的点积
inner 数组的内积
outer 数组的叉积
trace 计算对角线元素的和
norm 求模(范数)运算
det 计算行列式的值(在方阵上计算会得到一个标量)
matrix_rank 计算矩阵的秩
eig 计算矩阵的特征值(eigenvalue)和特征向量(eigenvector)
inv 计算非奇异矩阵( n n n阶方阵)的逆矩阵
pinv 计算矩阵的摩尔-彭若斯(Moore-Penrose)广义逆
qr QR分解(把矩阵分解成一个正交矩阵与一个上三角矩阵的积)
svd 计算奇异值分解(singular value decomposition)
solve 解线性方程组 A x = b \boldsymbol{A}\boldsymbol{x}=\boldsymbol{b} Ax=b,其中 A \boldsymbol{A} A是一个方阵
lstsq 计算 A x = b \boldsymbol{A}\boldsymbol{x}=\boldsymbol{b} Ax=b的最小二乘解
Pandas属性和方法

Series对象的常用属性如下表所示。

属性 说明
dtype / dtypes 返回Series对象的数据类型
hasnans 判断Series对象中有没有空值
at / iat 通过索引访问Series对象中的单个值
loc / iloc 通过一组索引访问Series对象中的一组值
index 返回Series对象的索引
is_monotonic 判断Series对象中的数据是否单调
is_monotonic_increasing 判断Series对象中的数据是否单调递增
is_monotonic_decreasing 判断Series对象中的数据是否单调递减
is_unique 判断Series对象中的数据是否独一无二
size 返回Series对象中元素的个数
values ndarray的方式返回Series对象中的值

提示:因为describe()返回的也是一个Series对象,所以也可以用ser2.describe()['mean']来获取平均值。

如果Series对象有重复的值,我们可以使用unique()方法获得去重之后的Series对象;可以使用nunique()方法统计不重复值的数量;如果想要统计每个值重复的次数,可以使用value_counts()方法,这个方法会返回一个Series对象,它的索引就是原来的Series对象中的值,而每个值出现的次数就是返回的Series对象中的数据,在默认情况下会按照出现次数做降序排列。

读取 CSV 文件创建DataFrame对象

可以通过pandas 模块的read_csv函数来读取 CSV 文件,read_csv函数的参数非常多,下面接受几个比较重要的参数。

  • sep / delimiter:分隔符,默认是,
  • header:表头(列索引)的位置,默认值是infer,用第一行的内容作为表头(列索引)。
  • index_col:用作行索引(标签)的列。
  • usecols:需要加载的列,可以使用序号或者列名。
  • true_values / false_values:哪些值被视为布尔值True / False
  • skiprows:通过行号、索引或函数指定需要跳过的行。
  • skipfooter:要跳过的末尾行数。
  • nrows:需要读取的行数。
  • na_values:哪些值被视为空值。
读取Excel文件创建DataFrame对象

可以通过pandas 模块的read_excel函数来读取 Exce l文件,该函数与上面的read_csv非常相近,多了一个sheet_name参数来指定数据表的名称,但是不同于 CSV 文件,没有sepdelimiter这样的参数。下面的代码中,read_excel函数的skiprows参数是一个 Lambda 函数,通过该 Lambda 函数指定只读取 Excel 文件的表头和其中10%的数据,跳过其他的数据。

通过SQL从数据库读取数据创建DataFrame对象

pandas模块的read_sql函数可以通过 SQL 语句从数据库中读取数据创建DataFrame对象,该函数的第二个参数代表了需要连接的数据库。对于 MySQL 数据库,我们可以通过pymysqlmysqlclient来创建数据库连接,得到一个Connection 对象,而这个对象就是read_sql函数需要的第二个参数。

提示:执行上面的代码需要先安装pymysql库,如果尚未安装,可以先在 Notebook 的单元格中先执行!pip install pymysql,然后再运行上面的代码。上面的代码连接的是我部署在阿里云上的 MySQL 数据库,公网 IP 地址:数据库ip,用户名:用户名称,密码:数据库密码,数据库:数据库名称,表名:表名,字符集:utf8mb4,大家可以使用这个数据库,但是不要进行恶意的访问。

说明:在数据库中mgrcomm两个列的数据类型是int,但是因为有缺失值(空值),读取到DataFrame之后,列的数据类型变成了float,因为我们通常会用float类型的NaN来表示空值。

DataFrame对象的属性如下表所示。

属性名 说明
at / iat 通过标签获取DataFrame中的单个值。
columns DataFrame对象列的索引
dtypes DataFrame对象每一列的数据类型
empty DataFrame对象是否为空
loc / iloc 通过标签获取DataFrame中的一组值。
ndim DataFrame对象的维度
shape DataFrame对象的形状(行数和列数)
size DataFrame对象中元素的个数
values DataFrame对象的数据对应的二维数组

关于DataFrame的方法,首先需要了解的是info()方法,它可以帮助我们了解DataFrame的相关信息。

重塑数据

有的时候,我们做数据分析需要的原始数据可能并不是来自一个地方,就像上面的例子中,我们从关系型数据库中读取了三张表,得到了三个DataFrame对象,但实际工作可能需要我们把他们的数据整合到一起。例如:dfdf2其实都是员工的数据,而且数据结构完全一致,我们可以使用pandas提供的concat函数实现两个或多个DataFrame的数据拼接,代码如下所示。

数据清洗

通常,我们从 Excel、CSV 或数据库中获取到的数据并不是非常完美的,里面可能因为系统或人为的原因混入了重复值或异常值,也可能在某些字段上存在缺失值;再者,DataFrame中的数据也可能存在格式不统一、量纲不统一等各种问题。因此,在开始数据分析之前,对数据进行清洗就显得特别重要。

缺失值

可以使用DataFrame对象的isnullisna方法来找出数据表中的缺失值。

你可能感兴趣的:(python基础,python)