数据分析流程记录

本文详细介绍了NumPy库中的一元和二元通用函数,包括数学运算、三角函数、对数函数等,并提供了相关示例。此外,还讲解了如何使用NumPy进行数组操作,如矩阵运算、数据处理、向量运算等。同时,文章提到了Pandas的Series和DataFrame对象的属性和常用方法,包括数据读取、属性检查、数据清洗等。最后,讨论了如何使用Pandas进行数据重塑和清洗,强调了数据预处理在数据分析中的重要性。
摘要由CSDN通过智能技术生成

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)广义逆
qrQR分解(把矩阵分解成一个正交矩阵与一个上三角矩阵的积)
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对象中元素的个数
valuesndarray的方式返回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中的单个值。
columnsDataFrame对象列的索引
dtypesDataFrame对象每一列的数据类型
emptyDataFrame对象是否为空
loc / iloc通过标签获取DataFrame中的一组值。
ndimDataFrame对象的维度
shapeDataFrame对象的形状(行数和列数)
sizeDataFrame对象中元素的个数
valuesDataFrame对象的数据对应的二维数组

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

重塑数据

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

数据清洗

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

缺失值

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值