这次的大盘点主要是因为每次做数据分析都要找很不方便我希望有一个目录或者思维导图一样的东西能够在我需要时供我搜索于是就写了这篇。既然是大盘点我就从第一步开始一点一点总结数据分析这里会写的全面一些希望需要的家人无论有没有基础都能看明白。好的话不多说我们开始。一.numpy这个库想必不用说了是很常见的。我们很多运算都可以直接用它来计算比如说算平均值、中位数等等。首先numpy最基本的构建数组就是np.array。关于数组有一维数组、二维数组、三维数组.....怎么区别我们可以通过看[[ ]]的数量。当最外侧是“[[”两个中括号那么该数组就是二维数组其他的同理并且注意我们的数组是通过空格隔开的不是逗号。在数组中要统一数据类型。然后是数组计算分为两种一种是数组和数字的运算一种是数组和数组之间的运算。对于第一种我们通常是直接计算即可比如说现在你的数组是ARR那么我们想让数组中的元素都增大2那么我们直接写成print(ARR2)即可。对于第二种也是同理对应位置的元素会进行运算我们手里有ARR和ASS两个数组我们想让对应元素相加直接写成print(ARRAEE)即可。二.pandas2.1Seriea相比于numpy来说pandas更擅长处理二维数组。并且pandas是基于numpy的对于pandas来说有两种最常见的数据类型我们先来看第一种series。它就很像我们以前见过的“字典”但是我们知道“字典”是不能够计算的因此我们希望有一种即带着索引又能够直接来计算的这时就来到了series。series就类似于一个一维数组左侧是索引右侧是值中间用空格隔开。对于index索引来说我们可以命名各种便于记忆和理解办公的名字我们搜索是通过他们的位置就像是列表中通过[0]、[1]来索引一样。但是如果你没有给index命名那么就会默认是0、1、2等这些数字作为index。对于value可以是各种类型比如说浮点型小数、布尔型True、字符串英文字母、整数1但是value中的类型必须保持一致只能保留一种类型。那么了解了这么多我们应该怎么构建一个series首先我们的语句是pd.Series()。括号里面放的是data也就是value和index。比如说我现在有两个数组a[m,n,o]和b[1,2,3]这个时候我们想要让123为索引应该怎么书写这个语句pd.Series(a,indexb)。接着就是应该怎么访问一共有两种方法。第一种就是位置访问就像是我们的列表访问下标一样。如果我们现在已经创建好了Series它的名字叫做info那么我们想要访问里面的第一个元素也就是value这时我们写info[0]即可。第二种是索引访问我们可以通过访问该元素对应的索引来访问元素比如说我们想要访问第二个元素它对应的索引是“ABC”这时我们写info[ABC]即可。2.2DataFrame它是一个二维的矩阵既有行索引又有列索引能够快速定位到具体的值。那么同样都是pandas的数据类型Series和DataFrame有什么关联呢。DataFrame就像是Series的合成因为DataFrame的行名也就是最左边标黄的一列就相当于index而右边的两列就相当于value。因此如果index没有定义名称那么就会是默认从0开始的数字对于DataFrame中的值来说每一列必须是相同数据类型但是不同列可以是不同的数据类型。那么我们应该怎么构造DataFrame它的构造函数是这样的pd.DataFrame(data,index)和Series一样括号里面先是data然后是index。对于data我们可以使用字典传入就像上面的示例我们的字典就要写成{“0”[May,Tony,Kevin]“1”[689,659,635]}。其中字典的“Key”也就是“1”“0”变成了列名也就是columns字典中的value就是图片中的values。除了字典data还可以用列表。对于上面的图片写成列表的形式传导就是[[May,689],[Tony,659],[Kevin,635]]那么就有人会发现了列名也就是columns没有定义。没错如果没有定义的话就直接是默认从0开始的数字了。那么如果不希望columns也就是列名是数字怎么办我们需要在构造函数的时候就提前定义好。我们构造时就写成pd.DataFrame(data,index[ ],columns[name,score])这样就有列名了。值得一提的是因为DataFrame是二维数组因此它还有一个概念叫做“轴”。如图所示横向的是axis1而竖向的是axis0。这个有什么用呢。比如我们在求解平均数的时候要在竖直方向上求解我们就写成mean(axis0)即可。三.文件读取我们这一章想要给大家讲的就是数据分析那么在分析数据之前肯定要先对我们拿到的数据进行处理。那么数据处理我们就要导入文件一般常见的文件类型有两种一种是.csv的另一种是.xlsx。那么我们先来了解一下这两种。3.1CSV文件首先是.csv的格式。CSV文件是以文本的格式存储数字、文本的。每个元素之间用“”隔开每一列是相同的数据类型不同列可以是不同的数据类型。那么应该调用CSV文件呢。我们使用pandas函数一般我们都会返回成DataFrame的格式。比如说上面的电商数据我们用语句pd.read_csv(/Users/yequ/电商数据清洗.csv)来读取CSV文件然后就会返回成上面的DataFrame格式列索引就是CSV文件的第一行因为没有特别规定index因此默认从0开始。但是在显示操作中我们往往会遇到各种各样的问题导致没办法正确输出完美格式的DataFrame因此我们需要考虑一下会出现的问题并学习对应的解决方案。第一个问题在CSV文件中经常会出现以中文命名的列名这样在读取文件输出时很可能会发生乱码。因此为了防止此类事情的发生我们要在代码中写下encodingutf-8。第二个问题在上面的调用时因为没有指明DataFrame中的index因此index直接是从0开始的数字。但是在日常应用中我们往往是想要CSV文件中的某一列作为特定的index的。因此我们在调用时可以写pd.read_csv(/Users/yequ/电商数据清洗.csv,index_colorder_id)。在这个语句中我们想要让CSV文件中的order_id作为DataFrame中的index因此把它赋值给index_col。第三个问题在表格中有时我们只需要CSV文件中的某一列信息不需要全部完整的表格。我们想要指定的某一列应该怎么将它单独调出来。比如现在我想要“user_id这一列我们需要写的语句是pd.read_csv(/Users/yequ/电商数据清洗.csv,usecols[user_id])。第四个问题。有时我们的CSV文件中是没有列名的那么在读取过程中就会将第一行的数据直接作为列名放在表头。那么我们怎么设置DataFrame中的columns呢。我们可以通过语句不让它调用第一行为columns语句datapd.read_csv(/Users/yequ/order_withoutColumns.csv,headerNone,names[订单号,用户id,支付金额,商品价格,购买数量,支付时间])。3.2EXCEL文件下面是第二种格式.xlsx的形式其实两者大体上是一样的。我们调用语句pd.read_excel()。这里也是一样的除了index其他的都会是和excel中一样的排布。因为和上面我们讲到的CSV文件基本一致因此不再过多讲解。我们来看一下只会在excel中出现的问题。对于excel来说如果我们想要读取这个excel中的第二个工作表应该怎么办呢。我们需要多加一个sheet_name的量语句pd.read_excel(/Users/yequ/2019年4月销售订单.xlsx,sheet_name销售订单数据)。这里也要注意我们路径中的.csv变成了.xlsx。四.索引和数据筛选因为在庞大的数据集中我们不可能全部做数据分析我们通常会选择最有用的部分那么我们应该怎么通过索引把这些行列挑出来呢。关于pandas中的DataFrame的索引有很多种我们先来看这四种方式后面我们还会再讲一种。4.1列索引首先是列索引。为了更好的理解我们举个例子比如说现在有“进货价”、“售价”、“利润”但是这三列的单位都是分我们想要将单位变成“元”因此要对每一列除100。那么这个时候我们就可以一列一列的除100也可以三列一起除100。我们先来看一列一列的操作这时我们用到语句data[columns]。然后我们写成data[进货价]data[进货价]/100。但是这样一列一列操作太麻烦了因此我们来学习如何进行多列一起操作。语句data[[columns_1,columns_2,columns_3]]。具体操作语句就是data[[进货价,售价,利润]]data[[进货价,售价,利润]]/100。4.2 .loc有时我们还需要调取某行或某几行某个元素或某些元素这时就会用到.loc和.iloc。对于.loc来说我们通常通过DataFrame的index调取数据。因为我们当时在导入文件时就讲过index必须要指明如果不指明就会出现默认数字的情况因此我们使用index调用的时候也要分这两种情况讨论。对于访问单行的值语句data.loc[ ]对于访问多行的值语句data.loc[起点index的值:结束index的值]访问不连续的多行值语句data.loc[[第一个index的值,第二个index的值,...]]。行和列都说了但是因为有时要找某一个或几个元素这可怎么办。别担心也可以用我们的.loc完成。我们可以通过index和columns定位某个元素记住是index在前用逗号隔开。访问单个元素时语句data.loc[index,colums]访问多个元素时语句data.loc[index切片或列表columns切片或列表]具体来说我们举个例子比如说我们现在要访问index从13到34columns从“进货价”到“总收入”语句data.loc[1334“进货价”“总收入”]。4.3 .iloc学了.loc现在我们来学.iloc它是通过行位置直接索引行的。和列表下标一样开始第一行就是0如果想要定位第一行语句data.iloc[0]如果想要定位连续的多行比如第3行到第8行语句data.iloc[2:8]因为是左闭右开因此这里写8。如果要访问多行不连续的数据比如说第2行、第145行和第276行的数据语句data.iloc[[1,144,275]]。当然和上面的.loc一样.iloc也可以访问特定元素。如果访问某个元素比如说第3行第4列语句data.iloc[2,3]。如果访问多个元素比如说第1、3行和第2、4列语句data.iloc[[0,2],[1,3]]这里访问的是第1行和第3行不是一到三行注意区分。4.4布尔索引前面学了这么多中索引方式我们记住其中一种或几种不就行了嘛为什么还要再学一种索引啊。同学们先别急之所以还要再学一种布尔索引是因为在日常生活中我们往往不知道该调取索引哪一行或哪一列我们想要调取索引的是满足某个计算结果或判断条件的行列因此我们需要用到布尔索引。比如说现在我们有一个数据表格data我们想要找到所有“cutdown_price”0的值这时应该怎么办呢。我们首先找到所有满足条件的位置data[cutdown_price]0。不要以为这样就可以了其实这样的话输出的是True和False。True是满足条件的Flase是不满足条件的。因此我们还需要通过这些True去返回他们对应的值。语句data[data[cutdown_price]0]就能返回所有符合条件的值啦。这个是只有一个判断条件的情况那么如果判断条件有很多又应该怎么办呢。这时就会用到逻辑运算符了。并且运算符两边的布尔值均为True时运算结果才为True其他情况为False。或者运算符两边的布尔值至少有一个为True时运算结果就为True仅当两边的布尔值都是False 时结果才为False。~非仅有一个布尔值参与运算运算结果为对这个布尔值取反。这些对于我们来说应该是相当熟悉了那么我们来看具体应该怎么应用吧。举个例子来说同时输出 cutdown_price大于0 和 post_fee大于0的行数据语句data[(data[cutdown_price]0) (data[post_fee]0)]。五.格式转换和时间类型在我们拿到数据之后经常需要对数据做一些处理这就是数据预处理今天我们学习一下如何用pandas做一些数据处理。4.1时间类型数据在数据中我们经常看到时间类型时间的运算和我们平时的整数型、浮点型的运算有一定区别。在日常数据中我们最经常看到三类时间形式。第一类是具体时间点2026/3/15 12点第二类是时间段3月、1年之间的差值第三类是时期2026年3月代表从3月1日到3月底。而这三种时间形式也对应着三种时间类型datetime、timedelta、period。举个例子来说现在我有一个表格里面是23级学生信息表格里面有两列分别是入学时间和毕业时间我想要算出23级学生的就读时间。这时就涉及到了时间的直接减法运算在我们的时间类型中datetime是可以直接做时间运算的。因此我们要将这两列存成datetime的形式。我们先要从datetime模块中引入datetime函数接着传入我们的数据对于datetime来说语句是datetime(年月日时分秒如果某一项没有传入就自动为0.看上面图片中就是2020年5月1日225959和2020年10月1日。这样就把这两个时间变成了datetime的时间类型然后就能算就读时间了我们直接用end-start就可以得出来”152 days, 0:00:01“就是我们所要求的量这时的结果”152 days, 0:00:01“是一个时间段那么它的时间类型就是timedelta。那么还有一种时间类型period它的使用十分少因此我们就不展开讲解了。4.2字符转时间函数在上面的例题中我们只是将其中一组数转换成了datetime的类型但是往往我们的CSV文件或者Excel文件里面会有大量的数都存储成字符串的形式我们总不能一个一个转换吧。这时批量转换我们就会用到pandas里面的to_datetime函数假设我们现在想要转换的是名为df数据集中的”creat_time“和”pay_time“这两列语句df[creat_time]pd.to_datetime(df[creat_time])。这就是转换之后的样子。现在就是datetime类型的时间了我们可以直接运算。4.3时间转字符函数因为日常中会遇到很多很多问题因此我们可能还会遇到需要将时间转字符串的情况。通过上面的例子我们最后通过datetime函数将字符串日期变成了datetime类型得到如下图的形式结果。但是我们在日常生活中往往想要最后输出的是年月日的形式。因此我们希望能够将得出的datetime类型的结果转成输出为”2023年1月1日“的字符串这时我们就会用到strftime()函数。还有.dt函数也值得一提。我们通过.dt函数输出特定的值比如说我们只想要”年和月“就会用到.dt这个函数。好的这样说起来还是非常抽象的因此我们举一个例子来说明一下。还是上面的例子我们要输出df数据集中的”creat_time“和”pay_time“中的年和月。那么我们需要用到语句df[creat_time]pd.to_datetime(df[creat_time])然后接着写语句df[creat_time]df[creat_time].dt.strftime(”%Y-%m“)就可以输出下图。那么细心的同学会发现我在上面的语句中用了一个没见过的东西”%Y-%m“这是什么呀别慌同学们可以将它想象成一个输出模板我们最终输出的格式会按照模板的样子输出。为了让大家可以更清晰看到变化我们来看下面这张图。可以通过上面的图片清晰的看到三条语句之间的差别。那除了上面展示的这两个其实还有很多格式化的符号同学们可以截图或保存一下需要了拿出来找即可。4.4格式转换函数上面我们学习了to_datetime()函数、strftime()函数能够进行字符串格式和时间格式之间的相互转换接下来我们学习一种新的函数。astype()函数能够在整数、浮点型、布尔型之间相互转换。如果要将名为df的数据集中的整数型名为pay_ment的列转换成浮点型语句df[pay_ment].astype(float)。其他的也是同理。因为数据分析的内容实在太多了因此我们分几篇内容来介绍以上内容的很多截图都来自于我的好帮手“夜曲编程”。感兴趣的同学也可以去了解一下我这里就只是做一个分享啦。