更新了数据分析部分的文档

pull/724/head
jackfrued 2020-12-20 17:30:49 +08:00
parent 329dbeb84f
commit bdd01d5bf9
3 changed files with 109 additions and 1842 deletions

View File

@ -66,13 +66,50 @@
![](res/run-anaconda-navigator.png)
对于Windows用户建议按照安装向导的提示和推荐的选项来安装Anaconda。在完成安装之后通过Windows的“开始菜单”找到Anaconda并选择要执行的功能。我们可以选择启动名为“Jupyter Notebook”的工具以下都简称为Notebook来开始数据科学的探索之旅我们也可以运行名为“Spyder”的工具来编写Python代码。
对于Windows用户建议按照安装向导的提示和推荐的选项来安装Anaconda除了安装路径基本也没有什么需要选择的安装完成后可以在“开始菜单”中找到“Anaconda3”。
#### conda命令
如果希望使用conda工具来管理依赖项或者创建项目的虚拟环境可以在终端或命令行提示符中使用conda命令。Windows用户可以在“开始菜单”中找到“Anaconda3”然后点击“Anaconda Prompt”来启动支持conda的命令行提示符。macOS用户建议直接使用“Anaconda-Navigator”中的“Environments”通过可视化的方式对虚拟环境和依赖项进行管理。
1. 版本和帮助信息。
- 查看版本:`conda -V`或`conda --version`
- 获取帮助:`conda -h`或`conda --help`
- 相关信息:`conda list`
2. 虚拟环境相关。
- 显示所有虚拟环境:`conda env list`
- 创建虚拟环境:`conda create --name venv`
- 指定Python版本创建虚拟环境`conda create --name venv python=3.7`
- 指定Python版本创建虚拟环境并安装指定依赖项`conda create --name venv python=3.7 numpy pandas`
- 通过克隆现有虚拟环境的方式创建虚拟环境:`conda create --name venv2 --clone venv`
- 分享虚拟环境并重定向到指定的文件中:`conda env export > environment.yml`
- 通过分享的虚拟环境文件创建虚拟环境:`conda env create -f environment.yml`
- 激活虚拟环境:`conda activate venv`
- 退出虚拟环境:`conda deactivate`
- 删除虚拟环境:`conda remove --name venv --all`
> **说明**:上面的命令中,`venv`和`venv2`是虚拟环境文件夹的名字,可以将其替换为自己喜欢的名字,但是**强烈建议**使用英文且不要出现空格或其他特殊字符。
3. 包(三方库或工具)管理。
- 查看已经安装的包:`conda list`
- 搜索指定的包:`conda search matplotlib`
- 安装指定的包:`conda install matplotlib`
- 更新指定的包:`conda update matplotlib`
- 移除指定的包:`conda remove matplotlib`
> **说明**:在搜索、安装和更新软件包时,默认会连接到官方网站进行操作,如果觉得速度不给力,可以将默认的官方网站替换为国内的镜像网站,推荐使用清华大学的开源镜像网站。将默认源更换为国内镜像的命令是:`conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ `。如果需要换回默认源,可以使用命令`conda config --remove-key channels`。
### 使用Notebook
#### 安装和启动Notebook
如果已经安装了Anaconda可以按照上面所说的方式直接启动Notebook。对于安装了Python环境但是没有安装Anaconda的用户可以用Python的包管理工具pip来安装`jupyter`然后在终端Windows系统称之为命令行提示符中运行`jupyter notebook`命令来启动Notebook如下所示。
如果已经安装了AnacondamacOS用户可以按照上面所说的方式在“Anaconda-Navigator”中直接启动“Jupyter Notebook”以下统一简称为Notebook。Windows用户可以在“开始菜单”中找到Anaconda文件夹接下来选择运行文件夹中的“Jupyter Notebook”就可以开始数据科学的探索之旅。
对于安装了Python环境但是没有安装Anaconda的用户可以用Python的包管理工具pip来安装`jupyter`然后在终端Windows系统称之为命令行提示符中运行`jupyter notebook`命令来启动Notebook如下所示。
安装:
@ -183,32 +220,25 @@ Notebook是基于网页的用于交互计算的应用程序可以用于代码
- **均值**mean均值代表某个数据集的整体水平它的缺点是容易受极值的影响可以使用加权平均值来消除极值的影响但是可能事先并不清楚数据的权重所以对于正数可以用几何平均值来替代算术平均值二者的计算公式如下所示。
算术平均值:
$
\bar{x}=\frac{\sum_{i=1}^{n}x_{i}}{n}=\frac{x_{1}+x_{2}+\cdots +x_{n}}{n}
$
算术平均值:$\bar{x}=\frac{\sum_{i=1}^{n}x_{i}}{n}=\frac{x_{1}+x_{2}+\cdots +x_{n}}{n}$
几何平均值:
$
\left(\prod_{i=1}^{n}x_{i}\right)^{\frac{1}{n}}={\sqrt[{n}]{x_{1}x_{2} \cdots x_{n}}}
$
几何平均值:$\left(\prod_{i=1}^{n}x_{i}\right)^{\frac{1}{n}}={\sqrt[{n}]{x_{1}x_{2} \cdots x_{n}}}$
- **分位数**将一个随机变量的概率分布范围分为几个具有相同概率的连续区间比如最常见的中位数二分位数median就是将数据集划分为数量相等的上下两个部分。除此之外常见的分位数还有四分位数quartile、百分位数percentile等。
- 中位数:${Q}_{\frac {1}{2}}(x)={\begin{cases}x'_{\frac{n+1}{2}},&{n \mbox{ is odd}}\\\\{\frac {1}{2}}(x'_{\frac{n}{2}}+x'_{{\frac{n}{2}}+1}),&{n \mbox{ is even}}\end{cases}}$
- 中位数:$${Q}_{\frac {1}{2}}(x)={\begin{cases}x'_{\frac{n+1}{2}},&{n \mbox{ is odd}}\\{\frac {1}{2}}(x'_{\frac{n}{2}}+x'_{{\frac{n}{2}}+1}),&{n \mbox{ is even}}\end{cases}}$$
- 四分位数:
**第一四分位数**$Q_1$),又称**较小四分位数**或**下四分位数**等于该样本中所有数值由小到大排列后第25%的数字。
**第一四分位数****$Q_1$),又称**较小四分位数**或**下四分位数**等于该样本中所有数值由小到大排列后第25%的数字。**
**第二四分位数**$Q_2$),又称**中位数**等于该样本中所有数值由小到大排列后第50%的数字。
**第三四分位数**$Q_3$),又称**较大四分位数**或**上四分位数**等于该样本中所有数值由小到大排列后第75%的数字。
第三四分位数**$Q_3$),又称**较大四分位数**或**上四分位数**等于该样本中所有数值由小到大排列后第75%的数字。**
**四分位距离**$IQR$Inter-Quartile Range即$Q_3-Q_1$的值。
在实际工作中,我们经常通过四分位数再配合[箱线图](https://zhuanlan.zhihu.com/p/110580568)来发现异常值。例如,小于$Q_1 - 1.5 \times IQR$的值或大于$Q3 + 1.5 \times IQR$的值可以视为普通异常值,而小于$Q_1 - 3 * IQR$的值或大于$Q3 + 3 * IQR$的值通常视为极度异常值。这种检测异常值的方法跟[“$3\sigma$法则”](https://zh.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7%E5%8E%9F%E5%89%87)的道理是一致的,如下图所示。
在实际工作中,我们经常通过四分位数再配合[箱线图](https://zhuanlan.zhihu.com/p/110580568)来发现异常值。例如,小于$Q_1 - 1.5 \times IQR$的值或大于$Q3 + 1.5 \times IQR$的值可以视为普通异常值,而小于$Q_1 - 3 \times IQR$的值或大于$Q3 + 3 \times IQR$的值通常视为极度异常值。这种检测异常值的方法跟[“3西格玛法则”](https://zh.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7%E5%8E%9F%E5%89%87)的道理是一致的,如下图所示。
![](res/quartile_and_3sigma.png)
@ -216,7 +246,7 @@ Notebook是基于网页的用于交互计算的应用程序可以用于代码
- **极值**就是最大值maximum、最小值minimum代表着数据集合中的上限和下限。
- **极差**range又称“全距”是一组数据中的最大观测值和最小观测值之差记作$R$。一般情况下,极差越大,离散程度越大,数据受极值的影响越严重。
- 方差variance将每个值与均值的偏差进行平方最后除以总数据量的值。简单来说就是表示数据与期望值的偏离程度。方差越大就意味着每个值与平均值的差值平方和越大、越不稳定、波动越剧烈因此代表着数据整体比较分散呈现出离散的趋势而方差越小代表着每个值与平均值的差值平方和越小、越稳定、波动越平滑因此代表着数据整体很集中。
- **方差**variance将每个值与均值的偏差进行平方最后除以总数据量的值。简单来说就是表示数据与期望值的偏离程度。方差越大就意味着每个值与平均值的差值平方和越大、越不稳定、波动越剧烈因此代表着数据整体比较分散呈现出离散的趋势而方差越小代表着每个值与平均值的差值平方和越小、越稳定、波动越平滑因此代表着数据整体很集中。
- **标准差**standard deviation将方差进行平方根与方差一样都是表示数据与期望值的偏离程度。
- **分位差**:分位数的差值,如上面提到的四分位距离。
@ -227,52 +257,53 @@ Notebook是基于网页的用于交互计算的应用程序可以用于代码
#### 推理性统计
1. 概率分布
1. 基本概念
- 随机试验:在相同条件下对某种随机现象进行观测的试验。随机试验满足三个特点:
- 可以在相同条件下重复的进行。
- 每次试验的结果不止一个,事先可以明确指出全部可能的结果。
- 重复试验的结果以随机的方式出现(事先不确定会出现哪个结果)。
- 随机变量:如果$X$指定给概率空间$S$中每一个事件$e$有一个实数$X(e)$,同时针对每一个实数$r$都有一个事件集合$A_r$与其相对应,其中$A_r=\{e: X(e) \le r\}$,那么$X$被称作随机变量。从这个定义看出,$X$的本质是一个实值函数,以给定事件为自变量的实值函数,因为函数在给定自变量时会产生因变量,所以将$X$称为随机变量。
- 概率质量函数/概率密度函数:概率质量函数是描述离散型随机变量为特定取值的概率的函数,通常缩写为**PMF**。概率密度函数是描述连续型随机变量在某个确定的取值点可能性的函数,通常缩写为**PDF**。二者的区别在于,概率密度函数本身不是概率,只有对概率密度函数在某区间内进行积分后才是概率。
2. 概率分布
- 离散型分布:如果随机发生的事件之间是毫无联系的,每一次随机事件发生都是独立的、不连续的、不受其他事件影响的,那么这些事件的概率分布就属于离散型分布。
- 二项分布Binomial distribution$n$个独立的是/非试验中成功的次数的离散概率分布,其中每次试验的成功概率为$p$。一般地,如果随机变量$X$服从参数为$n$和$p$的二项分布,记为$X\sim B(n,p)$。$n$次试验中正好得到$k$次成功的概率由概率质量函数给出,如下所示。
$
\displaystyle f(k,n,p)=\Pr(X=k)={n \choose k}p^{k}(1-p)^{n-k}
$
对于$k= 0, 1, 2, ..., n$,其中${n \choose k}={\frac {n!}{k!(n-k)!}}$
- 泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。如某一服务设施在一定时间内受到的服务请求的次数、汽车站台的候客人数、机器出现的故障数、自然灾害发生的次数、DNA序列的变异数、放射性原子核的衰变数等等。泊松分布的概率质量函数为
$
P(X=k)=\frac{e^{-\lambda}\lambda^k}{k!}
$
泊松分布的参数$\lambda$是单位时间(或单位面积)内随机事件的平均发生率。
- 二项分布binomial distribution$n$个独立的是/非试验中成功的次数的离散概率分布,其中每次试验的成功概率为$p$。一般地,如果随机变量$X$服从参数为$n$和$p$的二项分布,记为$X\sim B(n,p)$。$n$次试验中正好得到$k$次成功的概率由概率质量函数给出,$$\displaystyle f(k,n,p)=\Pr(X=k)={n \choose k}p^{k}(1-p)^{n-k}$$,对于$k= 0, 1, 2, ..., n$,其中${n \choose k}={\frac {n!}{k!(n-k)!}}$。
- 泊松分布poisson distribution适合于描述单位时间内随机事件发生的次数的概率分布。如某一服务设施在一定时间内受到的服务请求的次数、汽车站台的候客人数、机器出现的故障数、自然灾害发生的次数、DNA序列的变异数、放射性原子核的衰变数等等。泊松分布的概率质量函数为$P(X=k)=\frac{e^{-\lambda}\lambda^k}{k!}$,泊松分布的参数$\lambda$是单位时间(或单位面积)内随机事件的平均发生率。
- 连续型分布:
- 正态分布:又名**高斯分布**Gaussian distribution是一个非常常见的连续概率分布经常用自然科学和社会科学中来代表一个不明的随机变量。若随机变量$X$服从一个位置参数为$\mu$、尺度参数为$\sigma$的正态分布,记为$X \sim N(\mu,\sigma^2)$,其概率密度函数为:
$
\displaystyle f(x)={\frac {1}{\sigma {\sqrt {2\pi }}}}\;e^{-{\frac {\left(x-\mu \right)^{2}}{2\sigma ^{2}}}}
$
- 均匀分布uniform distribution如果连续型随机变量$X$具有概率密度函数$f(x)=\left\{{\begin{matrix}{\frac{1}{b-a}}&{a \leq x \leq b},\\0&{\mbox{elsewhere}}.\end{matrix}}\right.$,则称$X$服从$[a,b]$上的均匀分布,记作$X\sim U[a,b]$。
- 指数分布exponential distribution如果连续型随机变量$X$具有概率密度函数$f(x)=\left\{\begin{matrix} \lambda e^{-\lambda x}&x \ge 0, \\ 0 & x \lt 0. \end{matrix}\right.$,则称$X$服从参数为$\lambda$的指数分布,记为$X \sim Exp(\lambda)$。指数分布可以用来表示独立随机事件发生的时间间隔,比如旅客进入机场的时间间隔、客服中心接入电话的时间间隔、知乎上出现新问题的时间间隔等等。指数分布的一个重要特征是无记忆性(无后效性),这表示如果一个随机变量呈指数分布,它的条件概率遵循:$P(T \gt s+t \ | \ T \gt t)=P(T \gt s) \ \ \forall s,t \ge 0$。
- 正态分布normal distribution又名**高斯分布**Gaussian distribution是一个非常常见的连续概率分布经常用自然科学和社会科学中来代表一个不明的随机变量。若随机变量$X$服从一个位置参数为$\mu$、尺度参数为$\sigma$的正态分布,记为$X \sim N(\mu,\sigma^2)$,其概率密度函数为:$\displaystyle f(x)={\frac {1}{\sigma {\sqrt {2\pi }}}}\;e^{-{\frac {\left(x-\mu \right)^{2}}{2\sigma ^{2}}}}$。
- 伽马分布gamma distribution假设$X_1, X_2, ... X_n$为连续发生事件的等候时间,且这$n$次等候时间为独立的,那么这$n$次等候时间之和$Y$$Y=X_1+X_2+...+X_n$)服从伽玛分布,即$Y \sim \Gamma(\alpha,\beta)$,其中$\alpha=n, \beta=\lambda$,这里的$\lambda$是连续发生事件的平均发生频率。
- 卡方分布chi-square distribution若$k$个随机变量$Z_1,Z_2,...,Z_k$是相互独立且符合标准正态分布数学期望为0方差为1的随机变量则随机变量$Z$的平方和$X=\sum_{i=1}^{k}Z_i^2$被称为服从自由度为$k$的卡方分布,记为$X \sim \chi^2(k)$。
- 伽马分布:假设$X_1, X_2, ... X_n$为连续发生事件的等候时间,且这$n$次等候时间为独立的,那么这$n$次等候时间之和$Y$$Y=X_1+X_2+...+X_n$)服从伽玛分布,即$Y \sim \Gamma(\alpha,\beta)$,其中$\alpha=n, \beta=\lambda$,这里的$\lambda$是连续发生事件的平均发生频率
3. 大数定律:样本数量越多,则其算术平均值就有越高的概率接近期望值。
- 卡方分布:若$k$个随机变量$Z_1,Z_2,...,Z_k$是相互独立且符合标准正态分布数学期望为0方差为1的随机变量则随机变量$Z$的平方和$X=\sum_{i=1}^{k}Z_i^2$被称为服从自由度为$k$的卡方分布,记为$X \sim \chi^2(k)$。
- 弱大数定律(辛钦定理):样本均值依概率收敛于期望值,即对于任意正数$\epsilon$,有:$\lim_{n \to \infty}P(|\bar{X_n}-\mu|>\epsilon)=0$。
- 强大数定律样本均值以概率1收敛于期望值$P(\lim_{n \to \infty}\bar{X_n}=\mu)=1$。
- 大数定律:样本数量越多,则其算术平均值就有越高的概率接近期望值
4. 中心极限定理:如果统计对象是大量独立的随机变量,那么这些变量的平均值分布就会趋向于正态分布,不管原来它们的概率分布是什么类型,即:$X_1, X_2, ..., X_n$是一组独立同分布的随机变量,且有$E(x_i)=\mu, D(X_i)=\sigma ^2$,当$n$足够大时,均值$\bar{X}=\frac{\sum_i^nX_i}{n}$的分布接近于$N(\mu,\sigma ^2/n)$正态分布,如果对$\bar{X}$进行标准化处理,可以得到$X'=\frac{\bar{X} - \mu}{\sigma / \sqrt n}$标准正态分布
- 弱大数定律(辛钦定理):样本均值依概率收敛于期望值,即对于任意正数$\epsilon$,有:
$
\lim_{n \to \infty}P(|\overline{X_n}-\mu|>\epsilon)=0
$
- 强大数定律样本均值以概率1收敛于期望值
$
P(\lim_{n \to \infty}\overline{X_n}=\mu)=1
$
- 中心极限定理:如果统计对象是大量独立的随机变量,那么这些变量的平均值分布就会趋向于正态分布,不管原来它们的概率分布是什么类型。
2. 假设检验
5. 假设检验
假设检验就是通过抽取样本数据,并且通过**小概率反证法**去验证整体情况的方法。假设检验的核心思想是小概率反证法首先假设想推翻的命题是成立的然后试图找出矛盾找出不合理的地方来证明命题为假命题即在原假设零假设null hypothesis的前提下估算某事件发生的可能性如果该事件是小概率事件在一次研究中本来是不可能发生的现在却发生了这时候就可以推翻原假设接受备择假设alternative hypothesis。如果该事件不是小概率事件我们就找不到理由来推翻之前的假设实际中可引申为接受所做的无效假设。
假设检验会存在两种错误情况,一种称为“拒真”,一种称为“取伪”。如果原假设是对的,但你拒绝了原假设,这种错误就叫作“拒真”,这个错误的概率也叫作显著性水平$\alpha$,或称为容忍度;如果原假设是错的,但你承认了原假设,这种错误就叫作“取伪”,这个错误的概率我们记为$\beta$。
6. 条件概率和贝叶斯定理
**条件概率**是指事件A在事件B发生的条件下发生的概率通常记为$P(A|B)$。设A与B为样本空间$\Omega$中的两个事件,其中$P(B) \gt 0$。那么在事件B发生的条件下事件A发生的条件概率为$P(A|B)=\frac{P(A \cap B)}{P(B)}$,其中$P(A \cap B)$是联合概率即A和B两个事件共同发生的概率。
事件A在事件B已发生的条件下发生的概率与事件B在事件A已发生的条件下发生的概率是不一样的。然而这两者是有确定的关系的**贝叶斯定理**就是对这种关系的陈述,即:$P(A|B)=\frac{P(A)P(B|A)}{P(B)}$,其中:
- $P(A|B)$是已知B发生后A的条件概率也称为A的后验概率。
- $P(A)$是A的先验概率也称为边缘概率是不考虑B时A发生的概率。
- $P(B|A)$是已知A发生后B的条件概率称为B的似然性。
- $P(B)$是B的先验概率。
按照上面的描述,贝叶斯定理可以表述为:`后验概率 = (似然性 * 先验概率) / 标准化常量`​,简单的说就是后验概率与先验概率和相似度的乘积成正比。
描述性统计通常用于研究表象,将现象用数据的方式描述出来;推理性统计通常用于推测本质,也就是你看到的表象的东西有多大概率符合你对隐藏在表象后的本质的猜测。

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@
> 说明:以下数据参考了主要的招聘门户网站以及职友集。
| 职位 | 所需技能 | 招聘需求量 |
| ---------------------------------------------- | ------------------------------------------------------------ | ---------------- |
| Python后端开发工程师 | Python基础<br>Django / Flask / Tornado / Sanic<br>RESTful / 接口文档撰写<br>MySQL / Redis / MongoDB / ElasticSearch<br>Linux / Git / Scrum / PyCharm | |
| ---------------------------------------------- | ------------------------------------------------------------ | ---------- |
| Python后端开发工程师 | Python基础<br>Django / Flask / Tornado / Sanic<br>RESTful / 接口文档撰写<br>MySQL / Redis / MongoDB / ElasticSearch<br>Linux / Git / Scrum / PyCharm | 一般 |
| Python爬虫开发工程师 | Python基础<br>常用标准库和三方库<br>Scrapy / PySpider<br>Selenium / Appnium<br>Redis / MongoDB / MySQL<br>前端 / HTTP(S) / 抓包工具 | 较少 |
| Python量化交易开发工程师 | Python基础<br>数据结构 / 算法 / 设计模式<br>NoSQLKV数据库<br>金融学(两融、期权、期货、股票) / 数字货币 | 较大(一线城市) |
| Python数据分析工程师 /<br>Python机器学习工程师 | 统计学专业 / 数学专业 / 计算机专业<br>Python基础 / 算法设计<br>SQL / NoSQL / Hive / Hadoop / Spark<br>NumPy / Scikit-Learn / Pandas / Seaborn<br>PyTorch / Tensorflow / OpenCV | 较大(一线城市) |
| Python量化交易开发工程师 | Python基础<br>数据结构 / 算法 / 设计模式<br>NoSQLKV数据库<br>金融学(两融、期权、期货、股票) / 数字货币 | 一般 |
| Python数据分析工程师 /<br>Python机器学习工程师 | 统计学专业 / 数学专业 / 计算机专业<br>Python基础 / 算法设计<br>SQL / NoSQL / Hive / Hadoop / Spark<br>NumPy / Scikit-Learn / Pandas / Seaborn<br>PyTorch / Tensorflow / OpenCV | |
| Python自动化测试工程师 | Python基础 / 单元测试 / 软件测试基础<br>Linux / Shell / JIRA / 禅道 / Jenkins / CI / CD<br>Selenium / Robot Framework / Appnium<br>ab / sysbench / JMeter / LoadRunner / QTP | 大 |
| Python自动化运维工程师 | Python基础 / Linux / Shell <br>Fabric / Ansible / Playbook<br>Zabbix / Saltstack / Puppet<br>Docker / paramiko | 较大(一线城市) |
| Python云平台开发工程师 | Python基础<br>OpenStack / CloudStack<br>Ovirt / KVM<br>Docker / K8S | 较少(一线城市) |
| Python自动化运维工程师 | Python基础 / Linux / Shell <br>Fabric / Ansible / Playbook<br>Zabbix / Saltstack / Puppet<br>Docker / paramiko | |
| Python云平台开发工程师 | Python基础<br>OpenStack / CloudStack<br>Ovirt / KVM<br>Docker / K8S | 较少 |
如果弄清了自己将来要做的方向,就可以开始有针对性的学习了,下面给大家一个推荐书籍的清单。