From 4e091d9ba1372fe89af7e86126afb3f269e68886 Mon Sep 17 00:00:00 2001 From: jackfrued Date: Mon, 8 Mar 2021 00:25:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...13\345\222\214\347\272\277\347\250\213.md" | 6 +- .../index.html" | 2 +- ...15\344\275\234\347\263\273\347\273\237.md" | 2 +- Day36-40/code/HRS_create_and_init.sql | 2 +- ...66\344\275\234\346\212\245\350\241\250.md" | 2 +- ...06\345\222\214\350\247\243\346\236\220.md" | 2 +- ...Py\347\232\204\345\272\224\347\224\250.md" | 6 +- ...as\347\232\204\345\272\224\347\224\250.md" | 339 +++++++++++++- Day66-70/code/Day68.ipynb | 424 ++++++++++++++++++ Day66-70/code/Day69.ipynb | 45 ++ Day66-70/code/Day70.ipynb | 45 ++ Day66-70/res/pandas-series.png | Bin 0 -> 82041 bytes ...00\346\234\257\350\257\246\350\247\243.md" | 2 +- README.md | 2 +- ...61\347\232\204\345\215\232\345\256\242.md" | 6 +- .../\347\216\251\350\275\254PyCharm.md" | 16 +- 16 files changed, 876 insertions(+), 25 deletions(-) create mode 100644 Day66-70/code/Day68.ipynb create mode 100644 Day66-70/code/Day69.ipynb create mode 100644 Day66-70/code/Day70.ipynb create mode 100644 Day66-70/res/pandas-series.png rename "Day91-100/92.Docker\345\256\271\345\231\250\350\257\246\350\247\243.md" => "Day91-100/92.Docker\345\256\271\345\231\250\346\212\200\346\234\257\350\257\246\350\247\243.md" (99%) diff --git "a/Day01-15/13.\350\277\233\347\250\213\345\222\214\347\272\277\347\250\213.md" "b/Day01-15/13.\350\277\233\347\250\213\345\222\214\347\272\277\347\250\213.md" index b24b5b3..2c93c14 100644 --- "a/Day01-15/13.\350\277\233\347\250\213\345\222\214\347\272\277\347\250\213.md" +++ "b/Day01-15/13.\350\277\233\347\250\213\345\222\214\347\272\277\347\250\213.md" @@ -316,7 +316,7 @@ if __name__ == '__main__': 但是,切换作业是有代价的,比如从语文切到数学,要先收拾桌子上的语文书本、钢笔(这叫保存现场),然后,打开数学课本、找出圆规直尺(这叫准备新环境),才能开始做数学作业。操作系统在切换进程或者线程时也是一样的,它需要先保存当前执行的现场环境(CPU寄存器状态、内存页等),然后,把新任务的执行环境准备好(恢复上次的寄存器状态,切换内存页等),才能开始执行。这个切换过程虽然很快,但是也需要耗费时间。如果有几千个任务同时进行,操作系统可能就主要忙着切换任务,根本没有多少时间去执行任务了,这种情况最常见的就是硬盘狂响,点窗口无反应,系统处于假死状态。所以,多任务一旦多到一个限度,反而会使得系统性能急剧下降,最终导致所有任务都做不好。 -是否采用多任务的第二个考虑是任务的类型,可以把任务分为计算密集型和I/O密集型。计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如对视频进行编码解码或者格式转换等等,这种任务全靠CPU的运算能力,虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低。计算密集型任务由于主要消耗CPU资源,这类任务用Python这样的脚本语言去执行效率通常很低,最能胜任这类任务的是C语言,我们之前提到了Python中有嵌入C/C++代码的机制。 +是否采用多任务的第二个考虑是任务的类型,可以把任务分为计算密集型和I/O密集型。计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如对视频进行编码解码或者格式转换等等,这种任务全靠CPU的运算能力,虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低。计算密集型任务由于主要消耗CPU资源,这类任务用Python这样的脚本语言去执行效率通常很低,最能胜任这类任务的是C语言,我们之前提到过Python中有嵌入C/C++代码的机制。 除了计算密集型任务,其他的涉及到网络、存储介质I/O的任务都可以视为I/O密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待I/O操作完成(因为I/O的速度远远低于CPU和内存的速度)。对于I/O密集型任务,如果启动多任务,就可以减少I/O等待时间从而让CPU高效率的运转。有一大类的任务都属于I/O密集型任务,这其中包括了我们很快会涉及到的网络应用和Web应用。 @@ -324,9 +324,9 @@ if __name__ == '__main__': ### 单线程+异步I/O -现代操作系统对I/O操作的改进中最为重要的就是支持异步I/O。如果充分利用操作系统提供的异步I/O支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型。Nginx就是支持异步I/O的Web服务器,它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上,可以运行多个进程(数量与CPU核心数相同),充分利用多核CPU。用Node.js开发的服务器端程序也使用了这种工作模式,这也是当下实现多任务编程的一种趋势。 +现代操作系统对I/O操作的改进中最为重要的就是支持异步I/O。如果充分利用操作系统提供的异步I/O支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型。Nginx就是支持异步I/O的Web服务器,它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上,可以运行多个进程(数量与CPU核心数相同),充分利用多核CPU。用Node.js开发的服务器端程序也使用了这种工作模式,这也是当下并发编程的一种流行方案。 -在Python语言中,单线程+异步I/O的编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序。协程最大的优势就是极高的执行效率,因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销。协程的第二个优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不用加锁,只需要判断状态就好了,所以执行效率比多线程高很多。如果想要充分利用CPU的多核特性,最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。关于这方面的内容,我稍后会做一个专题来进行讲解。 +在Python语言中,单线程+异步I/O的编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序。协程最大的优势就是极高的执行效率,因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销。协程的第二个优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不用加锁,只需要判断状态就好了,所以执行效率比多线程高很多。如果想要充分利用CPU的多核特性,最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。关于这方面的内容,在后续的课程中会进行讲解。 ### 应用案例 diff --git "a/Day21-30/code/\345\236\203\345\234\276\345\210\206\347\261\273\346\237\245\350\257\242/index.html" "b/Day21-30/code/\345\236\203\345\234\276\345\210\206\347\261\273\346\237\245\350\257\242/index.html" index e2596c3..534ecc9 100644 --- "a/Day21-30/code/\345\236\203\345\234\276\345\210\206\347\261\273\346\237\245\350\257\242/index.html" +++ "b/Day21-30/code/\345\236\203\345\234\276\345\210\206\347\261\273\346\237\245\350\257\242/index.html" @@ -102,7 +102,7 @@ // 查询垃圾分类的函数 search() { if (this.word.trim().length > 0) { - let key = '9636cec76ee2593ba6b195e5b770b394' + let key = 'e8c5524dd2a365f20908ced735f8e480' let url = `http://api.tianapi.com/txapi/lajifenlei/?key=${key}&word=${this.word}` fetch(url) .then(resp => resp.json()) diff --git "a/Day31-35/31-35.\347\216\251\350\275\254Linux\346\223\215\344\275\234\347\263\273\347\273\237.md" "b/Day31-35/31-35.\347\216\251\350\275\254Linux\346\223\215\344\275\234\347\263\273\347\273\237.md" index f0fe19b..33bce52 100644 --- "a/Day31-35/31-35.\347\216\251\350\275\254Linux\346\223\215\344\275\234\347\263\273\347\273\237.md" +++ "b/Day31-35/31-35.\347\216\251\350\275\254Linux\346\223\215\344\275\234\347\263\273\347\273\237.md" @@ -954,7 +954,7 @@ Linux系统的命令通常都是如下所示的格式: 8. 创建/激活/关闭交换分区 - **mkswap** / **swapon** / **swapoff**。 -> 说明:执行上面这些命令会带有一定的风险,如果不清楚这些命令的用法,最好不用随意使用,在使用的过程中,最好对照参考资料进行操作,并在操作前确认是否要这么做。 +> **说明**:执行上面这些命令会带有一定的风险,如果不清楚这些命令的用法,最好不用随意使用,在使用的过程中,最好对照参考资料进行操作,并在操作前确认是否要这么做。 ### 编辑器 - vim diff --git a/Day36-40/code/HRS_create_and_init.sql b/Day36-40/code/HRS_create_and_init.sql index 4b991e4..9337477 100644 --- a/Day36-40/code/HRS_create_and_init.sql +++ b/Day36-40/code/HRS_create_and_init.sql @@ -1,5 +1,5 @@ drop database if exists hrs; -create database hrs default charset utf8mb4; +create database hrs default charset utf8mb4 collate utf8_bin; use hrs; diff --git "a/Day41-55/45.\345\210\266\344\275\234\346\212\245\350\241\250.md" "b/Day41-55/45.\345\210\266\344\275\234\346\212\245\350\241\250.md" index 12d728b..ef9de3a 100644 --- "a/Day41-55/45.\345\210\266\344\275\234\346\212\245\350\241\250.md" +++ "b/Day41-55/45.\345\210\266\344\275\234\346\212\245\350\241\250.md" @@ -46,7 +46,7 @@ def export_teachers_excel(request): # 中文文件名需要处理成百分号编码 filename = quote('老师.xls') # 通过响应头告知浏览器下载该文件以及对应的文件名 - resp['content-disposition'] = f'attachment; filename*=utf-8''{filename}' + resp['content-disposition'] = f'attachment; filename*=utf-8\'\'{filename}' return resp ``` diff --git "a/Day61-65/62.\346\225\260\346\215\256\351\207\207\351\233\206\345\222\214\350\247\243\346\236\220.md" "b/Day61-65/62.\346\225\260\346\215\256\351\207\207\351\233\206\345\222\214\350\247\243\346\236\220.md" index e8caf86..672cd0d 100644 --- "a/Day61-65/62.\346\225\260\346\215\256\351\207\207\351\233\206\345\222\214\350\247\243\346\236\220.md" +++ "b/Day61-65/62.\346\225\260\346\215\256\351\207\207\351\233\206\345\222\214\350\247\243\346\236\220.md" @@ -225,7 +225,7 @@ XPath是在XML文档中查找信息的一种语法,它使用路径表达式来 29.99 - Learning XML + 三国演义 39.95 diff --git "a/Day66-70/67.NumPy\347\232\204\345\272\224\347\224\250.md" "b/Day66-70/67.NumPy\347\232\204\345\272\224\347\224\250.md" index 3cfb855..cf2a7d6 100644 --- "a/Day66-70/67.NumPy\347\232\204\345\272\224\347\224\250.md" +++ "b/Day66-70/67.NumPy\347\232\204\345\272\224\347\224\250.md" @@ -103,7 +103,7 @@ Numpy最为核心的数据类型是`ndarray`,使用`ndarray`可以处理一维 产生10个$[1, 100)$范围的随机整数,代码: ```Python - array5 = np.random.randint(1, 101, 10) + array5 = np.random.randint(1, 100, 10) array5 ``` @@ -1124,7 +1124,7 @@ print(np.power(array37, array38)) | 函数 | 说明 | | --------------------------------- | ---- | -| `add(x, y)` / `substract(x, y)` / `multiply` | 加法函数 / 减法函数 | +| `add(x, y)` / `substract(x, y)` | 加法函数 / 减法函数 | |`multiply(x, y)` / `divide(x, y)`|乘法函数 / 除法函数| | `floor_divide(x, y)` / `mod(x, y)` | 整除函数 / 求模函数 | |`allclose(x, y)`|检查数组`x`和`y`元素是否几乎相等| @@ -1139,7 +1139,7 @@ print(np.power(array37, array38)) | `setdiff1d(x, y)` | 计算`x`和`y`的差集,返回这些元素构成的数组 | | `setxor1d(x, y)` | 计算`x`和`y`的对称差,返回这些元素构成的数组 | ->**补充说明:在二维空间内,两个向量$\boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \end{bmatrix}$和$\boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}$的叉积是这样定义的:$\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$,其中$\begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix}$称为行列式。但是一定要注意,叉积并不等同于行列式,行列式的运算结果是一个标量,而叉积运算的结果是一个向量。如果不明白,我们可以看看三维空间两个向量,$\boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix}$和$\boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix}$的叉积是$\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>$,其中$\hat{i}, \hat{j}, \hat{k}$代表每个维度的单位向量。 +>**补充说明**:在二维空间内,两个向量$\boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \end{bmatrix}$和$\boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}$的叉积是这样定义的:$\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$,其中$\begin{vmatrix} a_1 \quad a_2 \\ b_1 \quad b_2 \end{vmatrix}$称为行列式。但是一定要注意,叉积并不等同于行列式,行列式的运算结果是一个标量,而叉积运算的结果是一个向量。如果不明白,我们可以看看三维空间两个向量,$\boldsymbol{A}=\begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix}$和$\boldsymbol{B}=\begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix}$的叉积是$\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>$,其中$\hat{i}, \hat{j}, \hat{k}$代表每个维度的单位向量。 #### 广播机制 diff --git "a/Day66-70/68.Pandas\347\232\204\345\272\224\347\224\250.md" "b/Day66-70/68.Pandas\347\232\204\345\272\224\347\224\250.md" index c5c8abb..7c602c0 100644 --- "a/Day66-70/68.Pandas\347\232\204\345\272\224\347\224\250.md" +++ "b/Day66-70/68.Pandas\347\232\204\345\272\224\347\224\250.md" @@ -2,23 +2,356 @@ Pandas是Wes McKinney在2008年开发的一个强大的**分析结构化数据**的工具集。Pandas以NumPy为基础(数据表示和运算),提供了用于数据处理的函数和方法,对数据分析和数据挖掘提供了很好的支持;同时Pandas还可以跟数据可视化工具Matplotlib很好的整合在一起,非常轻松愉快的实现数据的可视化展示。 -Pandas核心的数据类型是`Series`、`DataFrame`,分别用于处理一维和二维的数据,除此之外还有一个名为`Index`的类型及其子类型,它为`Series`和`DataFrame`提供了索引功能。日常工作中以`DataFrame`使用最为广泛,因为二维的数据本质就是一个有行有列的表格(想一想Excel电子表格和关系型数据库中的二维表)。上述这些类型都提供了大量的处理数据的方法,数据分析师可以以此为基础实现对数据的各种常规处理。 +Pandas核心的数据类型是`Series`(数据系列)、`DataFrame`(数据表/数据框),分别用于处理一维和二维的数据,除此之外还有一个名为`Index`的类型及其子类型,它为`Series`和`DataFrame`提供了索引功能。日常工作中以`DataFrame`使用最为广泛,因为二维的数据本质就是一个有行有列的表格(想一想Excel电子表格和关系型数据库中的二维表)。上述这些类型都提供了大量的处理数据的方法,数据分析师可以以此为基础实现对数据的各种常规处理。 ### Series的应用 +Pandas库中的`Series`对象可以用来表示一维数据结构,跟数组非常类似,但是多了一些额外的功能。`Series`的内部结构包含了两个数组,其中一个用来保存数据,另一个用来保存数据的索引,如下图所示。 + +![](res/pandas-series.png) + #### 创建Series对象 +> **提示**:在执行下面的代码之前,请先导入pandas以及相关的库文件,具体的做法可以参考上一章。 + +- 方法1:通过列表或数组创建Series对象。 + + 代码: + + ```Python + # data参数表示数据,index参数表示索引标签 + # 如果没有指定index属性,默认使用数字索引 + ser1 = pd.Series(data=[320, 180, 300, 405], index=['一季度', '二季度', '三季度', '四季度']) + ser1 + ``` + + 输出: + ``` + 一季度 320 + 二季度 180 + 三季度 300 + 四季度 405 + dtype: int64 + ``` -####基本属性和方法 +- 方法2:通过字典创建Series对象。 + 代码: + ```Python + # 字典中的键就是索引标签,字典中的值就是数据 + ser2 = pd.Series({'一季度': 320, '二季度': 180, '三季度': 300, '四季度': 405}) + ser2 + ``` + + 输出: + + ``` + 一季度 320 + 二季度 180 + 三季度 300 + 四季度 405 + dtype: int64 + ``` + +#### 索引和切片 + +跟数组一样,Series对象也可以进行索引和切片操作,不同的是Series对象因为内部维护了一个保存索引的数组,所以除了可以使用整数索引通过位置检索数据外,还可以通过自己设置的索引标签获取对应的数据。 + +- 使用正负向整数索引 + + 代码: + + ```Python + print(ser2[0], ser2[2], ser2[-1]) + ser2[0], ser2[-1] = 350, 360 + print(ser2) + ``` + + 输出: + + ``` + 320 300 405 + 一季度 350 + 二季度 180 + 三季度 300 + 四季度 360 + dtype: int64 + ``` + +- 使用自己设置的标签索引 + + 代码: + + ```Python + print(ser2['一季度'], ser2['三季度']) + ser2['一季度'] = 380 + print(ser2) + ``` + + 输出: + + ``` + 350 300 + 一季度 380 + 二季度 180 + 三季度 300 + 四季度 360 + dtype: int64 + ``` + +- 切片操作 + + 代码: + + ```Python + print(ser2[1:3]) + print(ser2['二季度':'四季度']) + ``` + + 输出: + + ``` + 二季度 180 + 三季度 300 + dtype: int64 + 二季度 500 + 三季度 500 + 四季度 520 + dtype: int64 + ``` + + 代码: + + ```Python + ser2[1:3] = 400, 500 + ser2 + ``` + + 输出: + + ``` + 一季度 380 + 二季度 400 + 三季度 500 + 四季度 360 + dtype: int64 + ``` + +- 花式索引 + + 代码: + + ```Python + print(ser2[['二季度', '四季度']]) + ser2[['二季度', '四季度']] = 500, 520 + print(ser2) + ``` + + 输出: + + ``` + 二季度 400 + 四季度 360 + dtype: int64 + 一季度 380 + 二季度 500 + 三季度 500 + 四季度 520 + dtype: int64 + ``` + +- 布尔索引 + + 代码: + + ```Python + ser2[ser2 >= 500] + ``` + + 输出: + + ``` + 二季度 500 + 三季度 500 + 四季度 520 + dtype: int64 + ``` + +####属性和方法 + +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`对象中的值 | + +`Series`对象的方法很多,我们通过下面的代码为大家介绍一些常用的方法。 + +- 统计相关方法 + + 代码: + + ```Python + # 求和 + print(ser2.sum()) + # 求均值 + print(ser2.mean()) + # 求最大 + print(ser2.max()) + # 求最小 + print(ser2.min()) + # 计数 + print(ser2.count()) + # 求标准差 + print(ser2.std()) + # 求方差 + print(ser2.var()) + # 求中位数 + print(ser2.median()) + ``` + + 输出: + + ``` + 1900 + 475.0 + 520 + 380 + 4 + 64.03124237432849 + 4100.0 + 500.0 + ``` + + `Series`对象还有一个名为`describe()`的方法,可以获得上述所有的描述性统计信息,如下所示。 + + 代码: + + ```Python + ser2.describe() + ``` + + 输出: + + ``` + count 4.000000 + mean 475.000000 + std 64.031242 + min 380.000000 + 25% 470.000000 + 50% 500.000000 + 75% 505.000000 + max 520.000000 + dtype: float64 + ``` + + > **提示**:因为`describe()`返回的也是一个`Series`对象,所以也可以用`ser2.describe()['mean']`来获取平均值。 + + 如果`Series`对象的数据中有重复元素,我们可以使用`unique()`方法获得去重之后的`Series`对象,如果想要统计重复元素重复的次数,可以使用`value_counts()`方法,这个方法会返回一个`Series`对象,它的索引就是原来的`Series`对象中的元素,而每个元素出现的次数就是返回的`Series`对象中的数据,在默认情况下会按照元素出现次数做降序排列。 + + 代码: + + ```Python + ser3 = pd.Series(data=['apple', 'banana', 'apple', 'pitaya', 'apple', 'pitaya', 'durian']) + ser3.value_counts() + ``` + + 输出: + + ``` + apple 3 + pitaya 2 + durian 1 + banana 1 + dtype: int64 + ``` + +- 数据处理方法 + + `Series`对象的`dropna`和`fillna`方法分别用来删除空值和填充空值,具体的用法如下所示。 + + ```Python + ser4 = pd.Series(data=[10, 20, np.NaN, 30, np.NaN]) + ser4.dropna() + ``` + + 输出: + + ``` + 0 10.0 + 1 20.0 + 3 30.0 + dtype: float64 + ``` + + 代码: + + ```Python + # 将空值填充为40 + ser4.fillna(value=40) + ``` + + 输出: + + ``` + 0 10.0 + 1 20.0 + 2 40.0 + 3 30.0 + 4 40.0 + dtype: float64 + ``` + + 代码: + + ```Python + # backfill或bfill表示用后一个元素的值填充空值 + # ffill或pad表示用前一个元素的值填充空值 + ser4.fillna(method='ffill') + ``` + + 输出: + + ``` + 0 10.0 + 1 20.0 + 2 20.0 + 3 30.0 + 4 30.0 + dtype: float64 + ``` + + 需要提醒大家注意的是,`dropna`和`fillna`方法都有一个名为`inplace`的参数,它的默认值是`False`,表示删除空值或填充空值不会修改原来的`Series`对象,而是返回一个新的`Series`对象来表示删除或填充空值后的数据系列,如果将`inplace`参数的值修改为`True`,那么删除或填充空值会就地操作,直接修改原来的`Series`对象,那么方法的返回值是`None`。后面我们会接触到的很多方法,包括`DataFrame`对象的很多方法都会有这个参数,它们的意义跟这里是一样的。 + + `Series`对象的`apply`和`map`方法可以用于对数据进行处理,代码如下所示。 + + `Series`对象的`mask`和`where`方法可以将满足或不满足条件的值进行替换。 + + `Series`对象的`sort_index`和`sort_values`方法可以用于对索引和数据的排序,具体的用法请参考下面的例子。 + + `Series`对象的`value_counts`方法可以统计每个值出现的次数并且以从大到小的顺序进行排列,`Series`对象的`unique`方法可以获取到不重复的值。 + + #### 绘制图表 +Series对象有一个名为`plot`的方法可以用来生成图表,如果选择生成折线图、散点图、柱状图等,默认会使用Series对象的索引作为横坐标,使用Series对象的数据作为纵坐标。 + -#### Index的使用 +利用Series对象的数据也可以生成表示占比的饼图和显示数据分布的直方图,如下面的代码所示。 diff --git a/Day66-70/code/Day68.ipynb b/Day66-70/code/Day68.ipynb new file mode 100644 index 0000000..539f639 --- /dev/null +++ b/Day66-70/code/Day68.ipynb @@ -0,0 +1,424 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "%config InlineBackend.figure_format='svg'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams['font.sans-serif'] = 'FZJKai-Z03S'\n", + "plt.rcParams['axes.unicode_minus'] = False" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "一季度 320\n", + "二季度 180\n", + "三季度 300\n", + "四季度 405\n", + "dtype: int64" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser1 = pd.Series(data=[320, 180, 300, 405], index=['一季度', '二季度', '三季度', '四季度'])\n", + "ser1" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "一季度 320\n", + "二季度 180\n", + "三季度 300\n", + "四季度 405\n", + "dtype: int64" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser2 = pd.Series({'一季度': 320, '二季度': 180, '三季度': 300, '四季度': 405})\n", + "ser2" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "320 300 405\n", + "一季度 350\n", + "二季度 180\n", + "三季度 300\n", + "四季度 360\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(ser2[0], ser2[2], ser2[-1])\n", + "ser2[0], ser2[-1] = 350, 360 \n", + "print(ser2)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "350 300\n", + "一季度 380\n", + "二季度 180\n", + "三季度 300\n", + "四季度 360\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(ser2['一季度'], ser2['三季度'])\n", + "ser2['一季度'] = 380\n", + "print(ser2)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "二季度 180\n", + "三季度 300\n", + "dtype: int64\n", + "二季度 180\n", + "三季度 300\n", + "四季度 360\n", + "dtype: int64\n", + "一季度 380\n", + "二季度 400\n", + "三季度 500\n", + "四季度 360\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(ser2[1:3])\n", + "print(ser2['二季度': '四季度'])\n", + "ser2[1:3] = 400, 500\n", + "print(ser2)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "二季度 400\n", + "四季度 360\n", + "dtype: int64\n", + "一季度 380\n", + "二季度 500\n", + "三季度 500\n", + "四季度 520\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(ser2[['二季度', '四季度']])\n", + "ser2[['二季度', '四季度']] = 500, 520\n", + "print(ser2)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "二季度 500\n", + "三季度 500\n", + "四季度 520\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(ser2[ser2 >= 500])" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1900\n", + "475.0\n", + "520\n", + "380\n", + "4\n", + "64.03124237432849\n", + "4100.0\n", + "500.0\n" + ] + } + ], + "source": [ + "# 求和\n", + "print(ser2.sum())\n", + "# 求均值\n", + "print(ser2.mean())\n", + "# 求最大\n", + "print(ser2.max())\n", + "# 求最小\n", + "print(ser2.min())\n", + "# 计数\n", + "print(ser2.count())\n", + "# 求标准差\n", + "print(ser2.std())\n", + "# 求方差\n", + "print(ser2.var())\n", + "# 求中位数\n", + "print(ser2.median())" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 4.000000\n", + "mean 475.000000\n", + "std 64.031242\n", + "min 380.000000\n", + "25% 470.000000\n", + "50% 500.000000\n", + "75% 505.000000\n", + "max 520.000000\n", + "dtype: float64" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser2.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "apple 3\n", + "pitaya 2\n", + "durian 1\n", + "banana 1\n", + "dtype: int64" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser3 = pd.Series(data=['apple', 'banana', 'apple', 'pitaya', 'apple', 'pitaya', 'durian'])\n", + "ser3.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 10.0\n", + "1 20.0\n", + "3 30.0\n", + "dtype: float64" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser4 = pd.Series(data=[10, 20, np.NaN, 30, np.NaN])\n", + "ser4.dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 10.0\n", + "1 20.0\n", + "2 40.0\n", + "3 30.0\n", + "4 40.0\n", + "dtype: float64" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser4.fillna(value=40)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 10.0\n", + "1 20.0\n", + "2 20.0\n", + "3 30.0\n", + "4 30.0\n", + "dtype: float64" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ser4.fillna(method='ffill')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day66-70/code/Day69.ipynb b/Day66-70/code/Day69.ipynb new file mode 100644 index 0000000..36803f8 --- /dev/null +++ b/Day66-70/code/Day69.ipynb @@ -0,0 +1,45 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day66-70/code/Day70.ipynb b/Day66-70/code/Day70.ipynb new file mode 100644 index 0000000..36803f8 --- /dev/null +++ b/Day66-70/code/Day70.ipynb @@ -0,0 +1,45 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Day66-70/res/pandas-series.png b/Day66-70/res/pandas-series.png new file mode 100644 index 0000000000000000000000000000000000000000..279ba2ba20ddf2373685efb97949bda405aa03ed GIT binary patch literal 82041 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 literal 0 HcmV?d00001 diff --git "a/Day91-100/92.Docker\345\256\271\345\231\250\350\257\246\350\247\243.md" "b/Day91-100/92.Docker\345\256\271\345\231\250\346\212\200\346\234\257\350\257\246\350\247\243.md" similarity index 99% rename from "Day91-100/92.Docker\345\256\271\345\231\250\350\257\246\350\247\243.md" rename to "Day91-100/92.Docker\345\256\271\345\231\250\346\212\200\346\234\257\350\257\246\350\247\243.md" index 4fe34cc..47bdb8d 100644 --- "a/Day91-100/92.Docker\345\256\271\345\231\250\350\257\246\350\247\243.md" +++ "b/Day91-100/92.Docker\345\256\271\345\231\250\346\212\200\346\234\257\350\257\246\350\247\243.md" @@ -1,4 +1,4 @@ -## Docker容器详解 +## Docker容器技术详解 Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版本的Linux系统上。 diff --git a/README.md b/README.md index f725ad8..32c5bb6 100644 --- a/README.md +++ b/README.md @@ -394,7 +394,7 @@ Python在以下领域都有用武之地。 ### Day86~90 - [大数据分析概述](./Day86-90) -####Day86 - [大数据概述](./Day86-90/86.大数据概述.md) +#### Day86 - [大数据概述](./Day86-90/86.大数据概述.md) #### Day87 - [Hive查询](./Day86-90/87.Hive查询.md) diff --git "a/\347\225\252\345\244\226\347\257\207/\344\275\277\347\224\250Hexo\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204\345\215\232\345\256\242.md" "b/\347\225\252\345\244\226\347\257\207/\344\275\277\347\224\250Hexo\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204\345\215\232\345\256\242.md" index 0527b47..49362d2 100644 --- "a/\347\225\252\345\244\226\347\257\207/\344\275\277\347\224\250Hexo\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204\345\215\232\345\256\242.md" +++ "b/\347\225\252\345\244\226\347\257\207/\344\275\277\347\224\250Hexo\346\220\255\345\273\272\350\207\252\345\267\261\347\232\204\345\215\232\345\256\242.md" @@ -250,7 +250,11 @@ deploy: ```Markdown --- title: Python编程惯例 -category: Python基础 +categories: +- Python基础 +tags: +- Python +- PEP8 date: 2019-8-1 --- ## Python惯例 diff --git "a/\347\225\252\345\244\226\347\257\207/\347\216\251\350\275\254PyCharm.md" "b/\347\225\252\345\244\226\347\257\207/\347\216\251\350\275\254PyCharm.md" index 3069dbd..bb5c682 100644 --- "a/\347\225\252\345\244\226\347\257\207/\347\216\251\350\275\254PyCharm.md" +++ "b/\347\225\252\345\244\226\347\257\207/\347\216\251\350\275\254PyCharm.md" @@ -12,23 +12,23 @@ PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个 第一次使用PyCharm时,会有一个导入设置的向导,如果之前没有使用PyCharm或者没有保存过设置的就直接选择“Do not import settings”进入下一步即可,下面是我在macOS系统下第一次使用PyCharm时的截图。 -![](./res/pycharm-import-settings.png) +![](res/pycharm-import-settings.png) 专业版的PyCharm是需要激活的,**强烈建议大家在条件允许的情况下支付费用来支持优秀的产品**,如果不用做商业用途或者不需要使用PyCharm的高级功能,我们可以暂时选择试用30天或者使用社区版的PyCharm。如果你是一名学生,希望购买PyCharm来使用,可以看看[教育优惠官方申请指南](https://sales.jetbrains.com/hc/zh-cn/articles/207154369)。如下图所示,我们需要点击“Evaluate”按钮来试用专业版PyCharm。 -![](./res/pycharm-activation.png) +![](res/pycharm-activation.png) 接下来是选择UI主题,可以根据个人喜好进行选择,深色的主题比较护眼而浅色的主题对比度更好。 -![](./res/pycharm-ui-themes.png) +![](res/pycharm-ui-themes.png) 再接下来是创建可以在“终端”或“命令行提示符”中运行PyCharm的启动脚本,当然也可以不做任何勾选,直接点击“Next: Featured plugins”按钮进入下一环节。 -![](./res/pycharm-create-launcher.png) +![](res/pycharm-create-launcher.png) 然后可以选择需要安装哪些插件,我们可以暂时什么都不安装,等需要的时候再来决定。 -![](./res/pycharm-install-plugins.png) +![](res/pycharm-install-plugins.png) 最后点击上图右下角的“Start using PyCharm”(开始使用PyCharm)就可以开启你的PyCharm之旅了。 @@ -36,17 +36,17 @@ PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个 启动PyCharm之后会来到一个欢迎页,在欢迎页上我们可以选择“创建新项目”(Create New Project)、“打开已有项目”(Open)和“从版本控制系统中检出项目”(Get from Version Control)。 -![](./res/pycharm-welcome.png) +![](res/pycharm-welcome.png) 如果选择了“Create New Project”来创建新项目就会打一个创建项目的向导页。下图所示是PyCharm专业版创建新项目的向导页,可以看出专业版支持的项目类型非常的多,而社区版只能创建纯Python项目(Pure Python),没有这一系列的选项。 -![](./res/pycharm-project-wizard.png) +![](res/pycharm-project-wizard.png) 接下来,我们要为项目创建专属的虚拟环境,每个Python项目最好都在自己专属的虚拟环境中运行,因为每个项目对Python解释器和三方库的需求并不相同,虚拟环境对不同的项目进行了隔离。在上图所示的界面在,我们可以选择新建虚拟环境(New environment using Virtualenv),这里的“Virtualenv”是PyCharm默认选择的创建虚拟环境的工具,我们就保留这个默认的选项就可以了。 项目创建完成后就可以开始新建各种文件来书写Python代码了,如下图所示。左侧是项目浏览器,可以看到刚才创建的项目文件夹以及虚拟环境文件夹。我们可以在项目上点击鼠标右键,选择“New”,在选择“Python File”来创建Python代码文件,下图中我们创建了两个Python文件,分别是`poker_game.py`和`salary_system.py`。当然,如果愿意,也可以使用复制粘贴的方式把其他地方的Python代码文件复制到项目文件夹下。 -![](./res/pycharm-workspace.png) +![](res/pycharm-workspace.png) 在工作窗口点击鼠标右键可以在上下文菜单中找到“Run”选项,例如要运行`salary_system.py`文件,右键菜单会显示“Run 'salary_system'”选项,点击这个选项我们就可以运行Python代码啦,运行结果在屏幕下方的窗口可以看到,如下图所示。 -- GitLab