陶玉印的博客

企业数据治理、数据仓库、数据质量与AI应用实践

0%

记住些宏观数据

在生活和工作中经常会接触到各种各样的信息,信息的质量参差不齐,应该怎样判断信息的真实性。信息里面有时候会包含一些数据,可以从甄别数据合理性的角度帮助对信息的判断。现在的信息传播和流动很快,数据量非常大,脑子不能记住很多的数据。那么该怎么甄别数据的合理性呢,可以记住一些宏观的数据,用这些数据作为我们的锚点数据,用这些锚点数据验证新接触到的数据的合理性。虽然不能给出准确地判断,拥有了宏观数据思维,随着锚点数据越来越广,对信息进行更合理地判断,不再人云亦云。下面列一些很常见的数据,从这些数据抽象形容下宏观数据思维。

国家宏观数据

下面的数据都是宏观数据,来源于国家统计局2019年度数据,看的过程中可以把这些数据默记下来。
从以下数据展开:

  • 行政区划
  • 人口
  • 就业人口
  • GDP
  • 财政
  • 教育

先大概列这些,太多了确实记不住。

行政区划

一级行政区34个:
中国共计34个一级行政区,包括23个省、5个自治区、4个直辖市、2个特别行政区。

地级市337个:
广东省最多,21个地级市,青海省最少,2个地级市。

县级行政区2844个:
包括973个市辖区、388个县级市、1312个县、117个自治县、49个旗、3个自治旗、1个特区、1个林区。

人口

年末总人口14亿:
男性人口71527万,女性人口68478万。
男女人口比例为1.0445:1。

城镇人口84843万,乡村人口55162万。
城镇乡村人口比例为1.5381:1,城镇人口占比60.6%。

人口出生率(‰) 10.48
人口死亡率(‰) 7.14
人口自然增长率(‰) 3.34

人口自然增长率自 2000 年以来呈逐年下降趋势,2009-2015 趋于稳定,全面二孩政策于2016年1月1日起正式实施,2016年人口自然增长率有回升,之后又呈下降趋势。

就业人口

就业人员(万人) 77471.0
城镇就业人员(万人) 44247.0
乡村就业人员(万人) 33224.0

就业人口占总人口的55.33%

GDP

国内生产总值(亿元) 990865.1,接近百万亿人民币。
换成同口径美元为143635.77亿,排名世界第二,排名第一是美国214315.52亿,排名第三是日本50827.82亿。

人均国内生产总值(元)70892。
人均GDP突破1万美元大关,按照世界银行标准,属于中等偏上收入国家,开始向高收入国家迈进。

财政

财政收入(亿元) 190382.23
财政支出(亿元) 238874.02
国家税收收入(亿元) 157992.21
国家国内增值税(亿元) 62346.22
国家企业所得税(亿元) 37300.07
国家个人所得税(亿元) 10388.48

国家财政收入的82.99%来自税收,增值税、企业所得税、个人所得税占整体税收的69.65%,个人所得税占整体税收的6.58%。

关于中国税收,另开文章做介绍。

教育

研究生培养机构学校数(所) 815
本科院校学校数(所) 1245
专科院校学校数(所) 1418
普通高等学校在校学生数(万人) 3031
普通高中在校学生数(万人) 2414
初中在校学生数(万人) 4827
普通小学在校学生数(万人) 10561
小学生人数规模是1亿多。

数据思考场景

看了这么多数据,用一个场景模拟下判断数据合理性。
假设一条信息包含高考考生规模,如果人数是 1500 万,可能不太好判断数字是否精准,起码可以结合总人口和出生率推算出同龄人口规模的数量级是对的。
如果人数是 5000 万,不考虑初升高升学率和各年龄人口占比差异,高中及以下 12 个年级粗略计算 6 亿人,再加上大学生,中国超过一半的人在上学,这显然不合理。
看下实际数,2019 年高考人数1031万。所以有了宏观数据做参考,很容易判断一些信息里数据的量级和规模的合理性。

借助这个思路,可以梳理出你的业务中的宏观数据,形成业务宏观数据思维,助力对业务的思考。

看一个场景,目前就职于在线教育行业,主要人群面向中小学生,初中小学生人数规模是1.5亿,粗略用行业转化率3%计算,付费用户群体达 500 万的规模,从各种渠道看到的行业数据看,在线教育的渗透率还有提升的空间,主要看怎么做触达和转化。

如果恰巧你也是数据从业者,以宏观数据为脉络,形成数据网络,助力对信息的判断和方向的把控。

再看一个场景,上面的城镇人口占比60.6%,也就是城镇化率。
2000年中国城镇化率为35.877%,2009年为47.88%,2000至2009年十年间年均1.2%增长。
2010年为49.226%,2019年为60.6%,近十年间仍保持年均1.1%的增幅。这是房价整体上涨不会降的原因。
中国城镇化率首次突破50%是在2011年,这一年美国城镇化率是80.944%,世界城镇化率是52.1%,中国还低于世界平均水平。中国城镇化率赶上并超过世界水平是在2013年。
2019年美国城镇化率是82.459%,如果以美国为标准,中国有一定的差距。不过美国2000年是79.057%,近二十年增长空间仅为3.4%。中国未来推进城镇化率,还有上升的空间,不过未来十年增速会下降,城镇化推动房价上升的权重也会下降。

记住一些关键数据,多一种思考问题的视角和方式。

参考

使用 Docker 在本地构建 Jupyter Notebook

先看下 Jupyter 官方的介绍

The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.

一个很方便地使用 Python 做数据分析和数据科学的 Web 应用,赶快在本地构建一个用起来吧。

安装和使用 Docker

这篇文章的假设前提是你对 Docker 比较熟悉,或者至少安装了 Docker。
如果你不知道 Docker 是什么或者不知道怎么使用,需要先查阅和熟悉下 Docker 的资料和使用方法。

基于镜像 jupyter/scipy-notebook 再进行 build

1
$ docker search jupyter # 从Docker Hub查找Jupyter镜像

发现已经有构建好的Jupyter镜像,我使用jupyter/scipy-notebook,发现没有 Hive 环境以及相关依赖,所以基于这个镜像进行了再次构建。

编写 requirements.txt 和 run.sh

Python 链接 Hive 我用的是PyHive,需要安装相关的依赖。

1
2
3
4
5
6
$ cat requirements.txt
PyHive==0.5.0
thrift==0.10.0
thriftpy==0.3.9
sasl==0.2.1
thrift-sasl==0.3.0
1
2
$ cat run.sh
tini -g -- start-notebook.sh # 启动脚本

编写 Dockerfile

Dockerfile 是一个文本文件,里面是指令和 shell 命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FROM jupyter/scipy-notebook:b2562c469cdd    # 基于一个Docker image

USER root # 指定 root 。基础镜像以用户jovyan运行,执行 apt-get 报权限问题
RUN apt-get update # RUN 后面写 shell 命令
RUN apt-get install libsasl2-dev libsasl2-2 libsasl2-modules-gssapi-mit


USER jovyan # 切换回用户jovyan
RUN mkdir code # 创建一个目录
COPY ./ code # 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
RUN pip install -r code/requirements.txt -i https://pypi.douban.com/simple/ # 安装Python库

RUN cp code/lib/hive.py /opt/conda/lib/python3.8/site-packages/pyhive/hive.py # 安装的库源码有语法兼容问题,这里我做了修改和替换

CMD ["/bin/bash","code/run.sh"] # 在docker run 时运行 code/run.sh

最后当前目录包含如下的文件

1
2
3
4
5
6
7
$ tree ./
./
├── Dockerfile
├── lib
│   └── hive.py
├── requirements.txt
├── run.sh

docker build

开始构建镜像

1
$ docker build -t myrepo/jupyter -f Dockerfile . # -t 镜像的名字 -f 指定要使用的Dockerfile路径

build 完成后可以看到镜像

1
2
3
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myrepo/jupyter latest c5520af88d36 50 minutes ago 2.71GB

docker run

现在创建一个容器并运行了

1
2
3
4
5
6
$ docker run \
--name myrepo-jupyter \ # 给容器起个名字
-p 8888:8888/tcp \ # 端口映射
-e GRANT_SUDO=yes \ # 设置环境变量
--user root j\ # 以 root 执行
myrepo/jupyter:latest # 刚才构建的镜像

运行起来后终端会输出一个带 token 的本地连接 http://127.0.0.1:8888/?token=,点击打开。

查看版本和测试功能

新建一个 Python 文件运行查看下版本

1
2
3
4
5
6
7
8
9
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import sys

print('Python version ' + sys.version)
print('Pandas version ' + pd.__version__)
print('Matplotlib version ' + matplotlib.__version__)

可以写一个类似下面的简单脚本测试下 Hive 连接功能是否正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from pyhive import hive
from TCLIService.ttypes import TOperationState
import pandas as pd
import numpy as np

cursor = hive.connect(host='',port=10000,username='x',password='x',auth='LDAP').cursor()

hql='''
select
id,
add_date
from dwd.dwd_user_dim_user_base
limit 1000
'''

cursor.execute(hql)
df = pd.DataFrame(cursor.fetchall(), columns = ['id','add_date'])
df.head(20)

好了,至此一个本地的 Jupyter 环境就部署好了。

参考

利用 PicGo 和 GitHub 构建图床

使用 Markdown 写作,需要有个图片上传的地方,可以利用 PicGo 和 GitHub 构建自己的图床。

创建 GitHub 仓库

我的 Repository name 用的 picgo2,点击 Create repository。

生成 GitHub Token

在 GitHub 生成一个 Token,以备在 PicGo 配置用
点击展开头像,依次点击 Settings、Developer settings、Personal access tokens
或者直接输入 https://github.com/settings/tokens

然后点击页面的 Generate new token 按钮
在 Note 处输入一个名字,我输入的是刚才创建的 Repository name
Select scopes 勾选 repo。
点击下面的 Generate token 按钮。

Token 创建好了,页面暂时不要动或保存下 Token。

安装 PicGo

我使用的是2.3.0版本
PicGo 下载地址 https://github.com/Molunerfinn/PicGo/releases
Mac 下直接安装就好。

配置 PicGo

点击图床设置下的 GitHub 图床
依次输入
设定仓库名,taoyuyin/picgo2
设定分支名,我用的 master
设定Token,刚才创建的 Token
指定存储路径,我用的 pics/。注意需要带上斜杠,GitHub 会自动创建个目录。

点击确定,一个基于 PicGo 和 GitHub 的图床就构建好了。

上传图片

点击上传区,就可以上传图片了,选用 Markdown 模式,上传后生成的链接可以直接在 Markdown 里使用了。

在 Linux 下通过 find 和 grep 查找包含指定字符串的文件

直接上示例,拿走即用

1
$ find /home -type f -name '*.py' -exec grep -n 'MySQL' --color=auto {} \; -print

作用是在’/home’目录下查找包含’MySQL’以’py’结尾的文件,输出内容和行号,将结果打印在屏幕

注意点:

  • 可以根据要查找的字符串或文件类型修改单引号里面的内容
  • 最好不要使用根目录,尽量缩小 Path 范围

拆分讲解

1
$ find /home -type f # 类型参数, f 为普通文件
1
$ find /home -name '*.py' # 根据文件名查找,查找 Python 文件

结合 -exec 与其他命令配合使用, find 在返回后执行

1
$ find /home -name '*.py' -exec grep -n 'MySQL' {} \; # 查找 Python 文件,搜索包含'MySQL'的行
1
$ find /home -name '*.py' -exec grep -n 'MySQL' --color=auto {} \; -print # 查找 Python 文件,搜索包含'MySQL'的行,将文件打印出来

其他用法可以分别查看 find 和 grep 的用法。