在前面的这篇文章中 —— 优秀的程序员是如何利用工具来提升工作效率的?,石头介绍了可以提高程序猿工作效率的一些软件和工具及相关配置。文中提到了, 程序猿应该了解一些常见的命令行工具来提高效率。
本文是一个命令行工具的综合应用,将用一个具体的例子来阐述如何用 Shell 来进行高效地数据统计和分析。最近北京又开始了新一批积分落户的填报工作,恰好这篇文章用 shell 来对首批北京积分落户同学进行 "大数据"分析。
现如今到处都是各种"大数据",本文分析对象也就是首批积分落户的6000多条数据而已,显然不能算什么大数据。
印象中,我记得当初该官网的这6000多条数据也是一次性就能wget下来的(后端估计没做限制,可能稍微调整下接口的分页参数之类不需要严格按照各种分页多次下载)。(注:本文旧文重新整理发送。)
问题描述
输入是 json数据,格式化之后的 json 数据主题结构如下所示,rows为数组,数组中元素所代表的 object 即描述了获得北京户口的同学的各种属性:例如分数、排名、身份证号(后四位打码了)、公司等等信息。为了方便大家练习对数据进行试验,我将文中的数据附在这里(https://www.tanglei.name/resources/use-shell-to-analysis-the-first-people-of-getting-residence-of-beijing-by-score/jifenluohu.json.gz)。
- "rows": [
- {
- "id": 62981,
- "idCard": "32092219721222****",
- "idCardSHA": "9ef70bde894959a4e4a1d1b2b9592b470294f9e4012a8cf480319665d1a7c1c6",
- "insertTime": 1539518353000,
- "integralQualified": 1,
- "internetAnnual": {
- "annual": 2018,
- "id": 43,
- "insertTime": 1539518353000,
- "publicityEnd": 1540224000000,
- "publicityStart": 1539591600000,
- "publishResultEndDate": 1541679300000,
- "publishResultStartDate": 1539591600000,
- "publishResultStatus": 1,
- "score": 90.75,
- "status": 1
- },
- "md5Code": "54e9ff7ce0b004f7141b157f8afc66db",
- "name": "杨效丰",
- "pxid": 1,
- "ranking": 1,
- "s1": 51,
- "s10": 0,
- "s2": 12.59,
- "s3": 15,
- "s4": 0,
- "s5": 4,
- "s6": 0,
- "s7": 20,
- "s8": 20,
- "s9": 0,
- "score": 122.59,
- "unit": "北京利德华福电气技术有限公司"
- },
拿到这个文件,比如希望你用最快的方法获得以下信息,你将会怎么做?
- 获取取得户口名额最多的top10公司
- 获取取得户口名额的人中姓氏最多的
- 获取户口名字中叫啥名最流行
- 获取年龄分布
- 获取取得户口的同学户籍地top10
- 生肖/星座/生日…
当然,方法有很多,比如熟悉各种编程语言的,例如 python, php, java 等等写个简单的脚本程序,也能比较快获取答案。或者把相应的数据提取出来,放到 excel 中也可以。
如果你对 Shell 很熟悉,那真的是分分钟,应该是秒秒钟就能获取答案。就算用 Shell 来实现,不同的人可能也有不同的写法,后面我就列举其中的一种来解决这些问题。
本文不对 Shell 具体每个命令做过多的解释,不熟悉的同学可以直接 man $cmd 或者 $cmd –help 等等查看。