统计学

龙望、胡智星

目录

  • 1 第一单元   绪论
    • 1.1 课程总体介绍
    • 1.2 理论部分
    • 1.3 应用部分
    • 1.4 单元小结
    • 1.5 随堂小练
    • 1.6 课后习题详解
    • 1.7 【思政导读】统计学家:戴世光
  • 2 第二单元  数据的搜集
    • 2.1 理论部分
    • 2.2 应用部分
    • 2.3 单元小结
    • 2.4 随堂小测
    • 2.5 课后习题详解
    • 2.6 【思政导读】统计学家:吴定良
  • 3 第三单元  数据的图表展示
    • 3.1 理论部分
    • 3.2 应用部分
    • 3.3 单元小结
    • 3.4 随堂小测
    • 3.5 课后习题详解
    • 3.6 【思政导读】数据可视化名人
  • 4 第四单元   数据的概括性度量
    • 4.1 理论部分
    • 4.2 应用部分
    • 4.3 单元小结
    • 4.4 随堂小测
    • 4.5 课后习题详解
    • 4.6 【思政导读】趣味统计故事会
  • 5 第五单元  概率与概率分布
    • 5.1 理论部分
    • 5.2 应用部分
    • 5.3 单元小结
    • 5.4 随堂小测
    • 5.5 课后习题详解
    • 5.6 【思政导读】正态分布的前世今生
  • 6 第六单元  统计量及其抽样分布
    • 6.1 理论部分
    • 6.2 应用部分
    • 6.3 单元小结
    • 6.4 随堂小测
    • 6.5 课后习题详解
    • 6.6 【思政导读】T分布的由来
  • 7 第七单元  参数估计
    • 7.1 理论部分
    • 7.2 应用部分
    • 7.3 单元小结
    • 7.4 随堂小测
    • 7.5 课后习题详解
    • 7.6 【思政导读】脱贫普查工作
  • 8 第八单元  假设检验
    • 8.1 理论部分
    • 8.2 应用部分
    • 8.3 单元小结
    • 8.4 随堂小测
    • 8.5 课后习题详解
    • 8.6 【思政导读】 P 值详解
  • 9 第九单元  分类数据分析
    • 9.1 理论部分
    • 9.2 应用部分
    • 9.3 单元小结
    • 9.4 随堂小测
    • 9.5 课后习题详解
    • 9.6 【思政导读】从数据的角度看《泰坦尼克号》
  • 10 第十单元  方差分析
    • 10.1 理论部分
    • 10.2 应用部分
    • 10.3 单元小结
    • 10.4 随堂小测
    • 10.5 课后习题详解
    • 10.6 【思政导读】方差分析的应用
  • 11 第十一单元 一元线性回归
    • 11.1 理论部分
    • 11.2 应用部分
    • 11.3 单元小结
    • 11.4 随堂小测
    • 11.5 课后习题详解
    • 11.6 【思政导读】高尔顿与回归
  • 12 第十二单元 多元线性回归
    • 12.1 理论部分
    • 12.2 应用部分
    • 12.3 单元小结
    • 12.4 随堂小测
    • 12.5 课后习题详解
    • 12.6 【思政导读】统计学家:许宝騄
  • 13 第十三单元 时间序列分析和预测
    • 13.1 理论部分
    • 13.2 应用部分
    • 13.3 单元小结
    • 13.4 随堂小测
    • 13.5 课后习题详解
    • 13.6 【思政导读】毛主席田野调查
  • 14 第十四单元 指数…
    • 14.1 理论部分
    • 14.2 应用部分
    • 14.3 单元小结
    • 14.4 随堂小测
    • 14.5 课后习题详解
    • 14.6 【思政导读】中国统计思维
  • 15 【选学】专题1:统计调查
    • 15.1 调查问卷基础知识
    • 15.2 网络问卷实操
  • 16 【选学】专题2:空间统计基础
    • 16.1 理论:空间统计学
    • 16.2 应用1:空间模式识别
  • 17 【选学】专题3:多元统计分析
    • 17.1 多元统计分析入门
    • 17.2 【实操案例】K-means聚类分析
    • 17.3 【实操案例】主成分分析
  • 18 【选学】专题4:高级统计工具
    • 18.1 R语言之Rstudio入门
    • 18.2 python之Jupyter notebook入门
    • 18.3 数据可视化BI工具
  • 19 【选学】专题5:文本大数据统计应用
    • 19.1 理论
    • 19.2 应用
  • 20 【选学】专题6:统计建模竞赛
    • 20.1 大学生统计建模培训
    • 20.2 空间计量建模
  • 21 国贸专题:国际贸易网络流数据分析
    • 21.1 网络计量方法
    • 21.2 国际贸易网络分析实践
  • 22 审计与财管专题:统计实务
    • 22.1 ppt
    • 22.2 应用案例
  • 23 数经与财管专题:商务大数据分析
    • 23.1 RFM:识别客户群体
  • 24 金科专题:时间序列预测综合
python之Jupyter notebook入门

Jupyter notebook入门 


Jupyter notebook 是一个很强大的交互式和展示数据科学项目的工具,它可以作为一个开发文档,包含代码、解释说明文字、代码运行结果、J数学公式等等,功能非常强大,也是现在非常流行的工具。

本文会通过一个简单的数据分析例子来介绍 Jupyter notebook 的使用方法。这里的例子就是给定一个自 1955 年发布以来,一共 50 年时间的美国 500 家公司的数据,任务是分析这些公司的利润变化过程。

1. 安装

最简单的安装方式就是通过 Anaconda进行安装,Anaconda是使用最广泛的环境管理工具,并且它可以预先安装很多常用的第三方库,包括 numpy、pandas、matplotlib等。具体的 Anaconda可以查看之前公众号发表过的一篇文章--Python 基础入门--简介和环境配置


除了通过 Anaconda

 安装,也可以直接采用 pip


pip install jupyter

2. 创建你的第一个 Notebook

这一部分将介绍如何运行和保存 

notebooks

,熟悉 

Jupyter notebook

 的结构和交互界面。这里将通过一个例子来熟悉一些核心的用法,更好的了解 Jupyter notebook

 的使用。


运行 Jupyter

在 Windows,可以通过添加到开始菜单的快捷方式运行 Jupyter

 ,当然也可以通过在命令行输入命令 

jupyter notebook

 开始运行,然后会在默认浏览器中打开一个新的窗口,窗口内容如下:




当然上述还不是一个 notebook,它是 Notebook 的管理界面,用于管理当前文件夹的所有 Notebooks。

注意,这里仅仅展示 Jupyter 运行时候的所在文件夹内的文件和文件夹,也就是在命令行运行 

jupyter notebook

 时所在的文件夹,当然这个也可以改变,运行命令的时候可以指定文件夹位置,即输入:


jupyter notebook filepath

此外,这里在浏览器上的 URL 地址是类似 

http://localhost:8888/tree

,其中 

localhost

 是表示本地地址,然后 

8888

 是端口。


接下来就是创建一个新的 notebook,可以如下图所示,在管理界面的右上角位置,点击 

New

 菜单,这里就可以选择 

Python 3

 (或者其他的版本),然后就可以创建成功,并且是在新的窗口打开这个 notebook,在默认命名就是 

Untitled.ipynb




ipynb 文件

每个 

ipynb

 文件都是通过 

JSON

 格式来描述 notebook 的内容,包括每个单元及其内容,都是通过 

metadata

 的格式展示。这里可以在打开 

ipynb

 文件后,菜单中选择 

Edit->Edit Notebook Metadata

 ,进行编辑。


notebook 界面

现在开始介绍下 notebook 的界面信息,一个新的 notebook 界面如下图所示。



这里有两个术语需要知道--

cells

 和 

kernels

 ,两个都是非常重要的术语:


  • kernel

     :表示计算引擎,用于执行 notebook 中的代码块

  • cell

     :单元块,用于展示文本或者是代码。

单元(Cells)

首先介绍的是 

Cells

 ,一个 

Cell

 就是上图中绿色框部分,它是 notebook 的主要部分,通常有两种主要的 

cell

 类似:


  • code cell

     :包括需要执行的代码,以及其运行结果

  • Markdown cell

     :包含的是 Markdown 格式的文本并且其执行结果

下图展示了一个简单的例子,第一行 

Jupyter 入门教程

 这个就是一个 

Markdown cell

 ,这里展示的是执行这个 

cell

 的结果,如果需要执行一个 

cell

 ,可以点击 

Run

 按钮,或者快捷键 

Ctrl + Enter

 即可,然后下方两个都是 

code cell

 ,第一个是导入第三方库,第二个则是打印一段话以及其运行结果。




可以注意到 

code cell

 的左侧会有一个标签 

In [1]

 ,这里的数字表示该代码块运行的次序,即在该 notebook 中,如果没有执行,显示的是 

In [ ]

 ,如果是该 notebook 第一个运行的代码块,则是 

In [1]

 ,如果再次运行,则显示 

In [2]

,依次类推,同个代码块多次执行,这个数字也是会改变的。而 

In

 是 

Input

 的缩写。如果代码块运行时间有点久,它会显示 

In [*]

 ,表示当前代码块正在运行中。


对于 notebook,还可以直接展示变量的数值,或者是函数的返回值,不需要调用 

print

 函数,如下图所示,当然它只会打印当前单元的最后一行的内容。




还需要注意的一件事情就是,对于一个单元,如果正在编辑,其边界框显示的是绿色,而运行时候则显示蓝色。这里展示的就是两种模式,即绿色表示编辑模式,蓝色表示命令模式

快捷键

notebook 有很多快捷键,可以通过菜单中的 

Help->Keyboard Shortcuts

 查看,也可以直接用快捷键 

Ctrl+Shift+P

 查看。下面简单介绍一些快捷键:


  • 编辑模式和命令模式可以通过 

    Esc

     和 

    Enter

     进行转换,一般是按 

    Esc

     进入命令模式,

    Enter

     进入编辑模式

命令模式下:

  • 在 

    cell

     之间上下浏览采用上下箭头,或者 

    Up

     和 

    Down

     键

  • A

     表示在当前 

    cell

     上方插入一个新的 

    cell

     ,而 

    B

     则是下方插入新的

    cell
  • M

     表示变为 

    Markdown cell

     ,而 

    Y

     是表示变为 

    code cell
  • 连续按两次 

    D

     是删除当前 

    cell
  • Z

     是撤销操作

  • Shift

     加上 

    Up

     或者 

    Down

     可以一次选择多个 

    cells

     ,接着采用 

    Shift + M

     可以合并多个 

    cells

Markdown


Markdown

 是一个轻量级的易于学习使用的标记语言,主要用于格式化文本文字。它的语法类似 HTML 语言,是一个非常有帮助的语言,可以用于添加注释说明或者添加图片。


可以尝试在 Jupyter notebook 中输入下面的文字,记住是在 

Markdown cell

中:


解释

# This is a level 1 heading
## This is a level 2 heading
This is some plain text that forms a paragraph.
Add emphasis via **bold** and __bold__, or *italic* and _italic_.
Paragraphs must be separated by an empty line.
* Sometimes we want to include lists.
* Which can be indented.
1. Lists can also be numbered.
2. For ordered lists.
[It is possible to include hyperlinks](https://www.example.com)
Inline code uses single backticks: `foo()`, and code blocks use triple backticks:
```
bar()
```
Or can be indented by 4 spaces:
foo()
And finally, adding images is easy: ![Alt text](https://www.example.com/image.jpg)

得到的结果如下图所示:



如果想添加图片,有三种做法:

  • 使用网络上的图片,添加其网络链接 URL,比如上述例子就是这种做法,URL 是 https://www.example.com/image.jpg

  • 采用一个本地 URL,那么图片就只能使用在该 notebook 中,比如在同一个 git 仓库中

  • 菜单栏选择 “Edit->Insert Image",这种做法会将图片转换为字符串形式并存储在 

    .ipynb

     文件中,这种做法会增加 

    ipynb

     文件的大小

Markdown 的使用方法可以参考其发明者 John Gruber 的官方教程:

daringfireball.net/proj

Kernels

每个 notebook 都有一个 kernel。当执行一个单元内的代码的时候,就是采用 kernel 来运行代码,并将结果输出显示在单元内。同时 kernel 的状态会保留,并且不止局限在一个单元内,即一个单元内的变量或者导入的第三方库,也是可以在另一个单元内使用的,并不是相互独立的。

某种程度来说,notebook 可以看做是一个脚本文件,除了增加了更多输入方式,比如说明文字、图片等等。

这里同样用一个代码例子进行介绍 kernel 的这种特性,如下图所示,分别在两个单元内输入两段代码,第一个单元内时导入 

numpy

 并定义函数 

square()

,而第二个单元内就调用了这个函数 

square()

 ,并成功运行输出结果。




大部分情况下都是自顶向下的运行每个单元的代码,但这并不绝对,实际上是可以重新回到任意一个单元,再次执行这段代码,因此每个单元左侧的 

In [ ]

 就非常有用,其数字就告诉了我们它是运行的第几个单元。


此外,我们还可以重新运行整个 kernel,这里介绍菜单 

Kernel

 中的几个选项:


  • Restart

     :重新开始 kernel,这会清空 notebook 中所有的变量定义

  • Restart & Clear Output

    : 和第一个选项相同,但还会将所有输出都清除

  • Restart & Run All

    : 重新开始,并且会自动从头开始运行所有的单元内的代码

通常如果 kernel 陷入某个单元的代码运行中,希望停止该代码的运行,则可以采用 

Interupt

 选项。


选择一个 kernel

在 

Kernel

 菜单中同样提供了一个更换 

kernel

 的选项,最开始创建一个 

notebook

 的时候,就是选择了一个 

kernel

 ,当然这里能否选择其他的 

kernel

 ,取决于是否有安装,比如 

Python

 的版本,当你同时安装了 

python3.6

 和 

python2.7

 ,那么就有这两个选择,除了 

Python

 语言,Juypter notebook 支持的 

kernel

 还包括其他超过一百种语言,比如 Java、C、R、Julia 等等。


3. 数据分析例子

现在就开始文章开始说的数据分析例子,即从一份公司财富数据中分析公司的利润变化情况。

命名 notebooks

首先,给 notebook 命名一个有意义的名字,比如 

jupyter-notebook-tuorial

,可以直接在 notebook 界面直接点击上方文件名,如果未命名,那就是 

Untitle.ipynb

 ,当然也可以返回管理界面进行命名,如下所示,选择 notebook 后,上方会出现一行选项,包括:


  • Duplicate

    :复制

  • Shutdown

    :停止该 notebook 的 kernel

  • View

    :查看 notebook 内容

  • Edit

     :编辑其 

    metadata

     内容

以及还有一个删除文件的选项。



注意,关闭 notebook 的界面并不会关掉 notebook 的 kernel,它会一直在后台运行,在管理界面看到 notebook 还是绿色状态,就表明其在运行,这需要选择 

Shutdown

 选项,或者命令行里关掉 

Jupyter notebook

 的命令。


准备工作

首先导入一些需要用的第三方库:

解释

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")


pandas

 用于处理数据,

Matplotlib

 用于绘制图表,而 

seaborn

 可以让图表更加漂亮。通常也需要导入 

Numpy

 ,不过在本例中我们将通过 

pandas

 来使用。此外,

%matplotlib inline

 这并不是 python 的命令,它是 Jupyter 中独有的魔法命令,它主要是让 Jupyter 可以捕获 Matplotlib 的图片,并在单元输出中渲染。


接着就是读取数据:

df = pd.read_csv('fortune500.csv')

保存和检查点(checkpoint)

在开始前,要记得定时保存文件,这可以直接采用快捷键 

Ctrl + S

 保存文件,它是通过一个命令--“保存和检查点”实现的,那么什么是检查点呢?


每次创建一个新的 notebook,同时也创建了一个 

checkpoint

 文件,它保存在一个隐藏的子文件夹 

.ipynb_checkpoints

 中,并且也是一个 

.ipynb

 文件。默认 Jupyter 会每隔 120 秒自动保存 notebook 的内容到 

checkpoint

 文件中,而当你手动保存的时候,也会更新 notebook 和 checkpoint 文件。这个文件可以在因为意外原因关闭 notebook 后恢复你未保存的内容,可以在菜单中 

File->Revert to Checkpoint

 中恢复。


对数据集的探索

现在开始处理我们的数据集,通过 

pandas

 读取后得到的是称为 

DataFrame

 的数据结构,首先就是先查看下数据集的内容,输入以下两行代码,分别表示输出数据的前五行,和最后五行的内容。


df.head()
df.tail()

输出内容如下所示:



通过查看,我们了解到每行就是一个公司在某一年的数据,然后总共有 5 列,分别表示年份、排名、公司名字、收入和利润。

接着,为了方便,可以对列重命名:

df.columns = ['year', 'rank', 'company', 'revenue', 'profit']

然后,还可以查看数据量,如下所示:

len(df)

如下图所示,总共有 25500 条数据,刚好就是 500 家公司从 1955 到 2005 的数据量。



接着,我们再查看数据集是否和我们希望导入的一样,一个简单的检查方法就是查看数据类型是否正确:



这里可以发现 

profit

 数据类型居然是 

object

 而不是和收入 

revenue

 一样的

float64

 类型,这表示其中可能包含一些非数字的数值,因此我们需要检查一下:




输出结果表明确实存在非整数的数值,而是是 

N.A

,然后我们需要确定是否包含其他类型的数值:




输出结果表示只有 

N.A

 ,那么该如何处理这种缺失情况呢,这首先取决有多少行数据缺失了 

profit

 :




369 条数据缺失,相比于总共 25500 条数据,仅占据 1.5% 左右。如果缺失的数据随着年份的变化符合正态分布,那么最简单的方法就是直接删除这部分数据集,代码如下所示



从结果看,缺失数据最多的一年也就是 25 条也不到,相比每年 500 条数据,最多占据 4%,并且只有在 90 年代的数据缺失会超过 20 条,其余年份基本在 10 条以下,因此可以接受直接删除缺失值的数据,代码如下:



删除数据后,

profit

 就是 

float64

 类型了。


简单的数据探索完成了,接下来进行图表的绘制。

采用 matplotlib 进行绘制图表

首先绘制随着年份变化的平均利润表,同时也会绘制收入随年份的变化情况,如下图所示:



结果看起来有点类似指数式增长,但出现两次巨大的下降情况,这其实和当时发生的事件有关系,接下来可以看看收入的变化情况,如下图所示:



从收入看,变化并没有像利润一样出现两次波动。

参考 stackoverflow.com/a/475,我们添加了利润和收入的标准差情况,用于反馈同一年不同公司的收入或者利润差距,如下图所示:



结果表明了不同公司的差距还是很大的,存在有收入几十亿,也有亏损几十亿的公司。

其实还有很多问题可以深入探讨,但目前给出的例子已经足够入门 Jupyter notebook,这部分例子展示了如何分析探索数据,绘制数据的图表。