写在狗年来临之前

个人随笔 fireling 13973℃

很早就准备了一些话,想写在这里,结果拖到现在,趁着狗年来临之际,梳理一下,总结一下,规划一下。

去年的年终总结:写在鸡年来临之前,先分享给读者。

过去的一年,我的技术栈搭建更加丰满,掌握技能进一步丰富,同时作为在单位中负责开发、咨询于一体的部门,除了技术,我对于自己在其他方面的能力,如项目的需求把控、实现方案及规划、与客户的交流沟通等,也在积极的培养。

关于数据抓取:

目前我关注的重点不在这一块,就简单几句。

基于很早以前工作的积累,我整理并总结了关于网络爬虫的一系列心得分享:Python入门网络爬虫之精华版 PythonSpiderNotes,目前在Github上已经获得了1.7k+的stars。

个人认为,爬虫是一项“攻”“防”的拉锯战与持久战。搞好爬虫的重点在于你需要明白,怎样做反爬,怎样分析页面,怎么去重及存储,等等。

关于数据储存:

数据库方面,我来回折腾了一段时间的mysql、mongodb、oracle、sqlserver、elesticsearch,另外hivehbase也做了一番细致的学习和使用。

讲几点印象比较深刻的部分。

Python来连接mysql数据库,以前Python2有MySQLdb库,由于时代变了,Python2未来会逐步被Python3取代,为了与时俱进,我尝试了mysqlclientPyMySQL,它们都支持Python2和Python3。

在遇到导入oracle数据库的时候,通常需要获取dmp文件的字符集。如果该数据文件较小,完全可以采用编辑器如UltraEdit以16进制方式打开,看第2第3个字节的内容。如果dmp文件过大,那就需要在Linux上进行文件操作,使用如下命令,即可查询到字符。


cat *.dmp | od -x | head -1 | awk '{print $2 $3}' | cut -c 3-6

上面这种方式给我们带来一些启发,在处理一些大的sql文件时,我们可能只关心sql文件中的部分字段,这就可以采用sedawk命令对sql文件进行操作,提取目标字段,整合新的sql指令重写到新的sql文件中,再进行导入。

检索是一个很广泛的需求,以前大部分应用是基于lucene,而elasticsearch是一个基于lucene的搜索服务器,本质上也是一个分布式数据库,包括index、type、document、fields等概念,可以与关系型数据库做类比进行学习,这里我把它就归结到本节吧。

关于数据处理:

数据处理是数据分析和数据挖掘的前提基础,凡是好的分析和挖掘一定存在一个好的数据处理流程。很多情况下,我们获取到的原始数据,往往不是我们能够直接使用的,往往需要进行相关计算或操作。

有一些基于JDK环境的ETL工具,如kettle、openrefine,但是这往往不解渴,而且对于数据量的支持并不能灵活扩展到很大。

Python下的Pandas库则是一个科学计算的利器,尤其是Pandas能与多种数据源进行IO操作。掌握了SeriesDataFrame两种数据结构的使用,基本上在数据处理方面,可以所向披靡。

干货分享:

Pandas数据处理

关于数据分析:

个人认为,数据分析重点在于业务的理解思路的规划,因此,营销的技巧有时也是必需的。好的数据分析,本质上来说,就是给大家讲出一个好的精彩的story,这个story能带给大家思考并引起共鸣。下图是我在进行一个数据分析项目时,提炼出来的几个关键步骤。

关于数据可视化:

数据分析离不开数据可视化,我研究了市面上比较常用的在线可视化工具,包括BDP、百度图说、大数据魔镜。关联分析及可视化,是一个大的需求点,在反欺诈领域和知识图谱领域应用很广,基于此,我也重点研究了gephineo4j。下图是neo4j的UI界面,读者感兴趣的可以进一步尝试。

其他BI系统,也在持续关注,一个跟了很久的项目,superset,打算细致研究。

关于数据挖掘:

我这里说的数据挖掘,主要偏重机器学习算法

做数据挖掘的人,最怕不懂数据又似懂非懂算法的客户提需求。

数据挖掘很多时候第一步理解业务和客户需求,这一步往往被客户和销售忽略掉。我们得到的往往是客户一下子扔过来的数据,外加没有相关文档及字段说明,”你们按照需求做吧”。要知道,在梳理数据,我们往往需要从浩瀚的数据表来找关联,处理各种可能遇到的编码、字符缺失等一系列绊脚石,好的情况是做出来了,但是客户又改需求指定算法,我们往往又得另起炉灶进行数据的清理。

机器学习算法,多数情况下,是为产品服务的,而不是为项目服务的。项目在变,需求在变,算法实现也在变。而产品则是出于不断优化、精益求精的目的来做的,目标功能明确,与产品契合较好。

目前做过的项目,大致可以归纳为几类:基于时间序列进行预测的,基于线性或非线性进行回归拟合的,基于用户标签的关联分析的。项目需要,期间我重温了超参数调参的库:Optunity,并实现了粒子群算法。

时间序列预测,要注意不管是ARMAARIMA或是其他,都需要输入平稳序列,如果不是则需要做差分运算,将其转换为平稳序列。Python的statsmodels库支持时间序列预测,除此之外,它还支持线性回归预测。

在经典的机器学习算法理论方面,我重温了基本经典书籍,包括李航的《统计学习方法》、周志华的《机器学习》、Peter Harrington的《Machine Learing In Action》,详细论证了经典模型的理论推导,撸了一遍常用模型的实现代码。另外,将吴恩达的机器学习教程及讲义梳理了一遍,还有李宏毅的讲课视频,在youtube上的两个videolist:机器学习深度学习,深刻理解了CNNRNNLSTM的原理。

另外,为了给准备入门机器学习的读者一些帮助,我在Github上开源了一些个人的总结,包括Keras、TensorFlow、sklearn等常见的机器学习框架的基本使用。

干货分享:

一些常用的机器学习算法实现 MachineLearningAlgorithm

关于Python开发:

Python方面,我梳理了一个PPT和一个文档,主要是在试水在线PPT在线文档的生成。

Flaskflask-restful库在以前学习的基础上,进一步做了深化。目前有一些个人项目在云端“服役”,关于web的大都是基于flask。

干货分享:

Python编程进阶

Python进阶文档

关于Linux开发:

工欲善其事,必先利其器。我学习并熟练掌握了几个能提高工作效率的工具,包括wormhole、fire、yapf、supervisor、apscheduler、fabric。

在云端部署一些开发应用,目前倡导微服务架构,将一个大型的应用和服务拆分成若干个用于支持的微服务。以Docker为典型代表的虚拟化技术,将微服务架构的搭建变成了一件有意思的事情。镜像(image)容器(container)是Docker中的两个重要概念,使用Dockerfile进行镜像的自动构建、使用docker-compose进行容器的编排,能够让Docker服务的部署简单、快捷、高效。

干货分享:

Docker入门之精华版 DockerNotes

关于大数据开发:

关于hadoop生态体系,其实很早以前我就在来回摸索、滚动学习,期间走了不少弯路。目前主要研究了hadoop、spark、hive、hbase、zookeeper,并做了一些部署开发,加深了对这些框架的理解。像我理解基于hdfs的应用,目的就是做“变换”,将你本地文件系统上的数据,转换成hdfs文件系统上的数据,再进行操作。为了实现对hdfs文件系统上的数据方便存取,hive与hbase分别起到了mysqlnosql的角色。总之,每一个系统负责了自己擅长的一部分,同时相互依托,形成了整个hadoop生态。

目前,我总结了一个关于大数据与分布式的专题,另外,采用Docker技术提交并推送了一个部署hadoop基本环境的镜像,感兴趣的读者可以直接使用如下拉该镜像并进行二次开发。


docker pull lining0806/sshd_ubuntu_full:hadoop

干货分享:

video分享

关于宁哥的小站:

宁哥的小站,从网站后台的nginx服务,到数据库的异地灾备,以及重要文件的增量同步等,都做了全方位的优化。并且一直持续在运行我本人的一些个人项目。

关于未来:

过去的一年,我有很多自己的“感悟”。主要是自己各方面想的太多了,想关于职业发展,想关于未来前(钱)景,想关于人生规划,想关于家庭、老人、孩子,想关于技术、算法,相关于产品、项目、团队……想的太多,导致很多事来回琢磨,自认为很透彻,但就是因为琢磨太透,导致那股冲上头脑的激情,容易褪去。

唯一还好的就是状态,特别是学习状态,一往如前,仍然保持着这种对新技术的渴望,保持着快速搜集及汇总知识的能力,不忘初心地前行。

过去工作的近五年,主要精力放在学习上。其实这句话,一点都不假,我认为,工作中应该不断去学习,学习自然也会促进工作,二者本来就没有那条明显的分隔线。虽然我很享受静心学习总结的收获,但是我有点厌倦了这种状态,不是说厌倦学习,而是厌倦那种输入的状态。没错,年轻人确实需要不断从外界输入,即使你觉得你在这一方面很优秀,不过对内输入的目的就在于对外输出。

这个阶段,我会逐渐转变自己,改变自己的心态,应该越来越重视自己的输出,将自己的所能转化为对外界、对公司、乃至对自己的价值回报。

NOW,我一直准备着!带上自己,走出舒适区!嗯!

P.S. 今天是2月14日,祝大家新年快乐,情人节快乐!

转载请注明:宁哥的小站 » 写在狗年来临之前

喜欢 (56)