这篇也是脑洞系列,属于我觉得好玩、分析后认为技术上可行、但限于时间或精力没去做的事,分享出来,有兴趣的小伙伴可以去折腾

我有很多想法,只差一个程序员啦


先前的工作

jobsVisualization是一个可视化工具,用来帮你可视化地筛选工作

一图胜千言

jobsVisualization

关于为何想做这个项目,我在可视化筛选你中意的工作一文中有说明

大体原因是因为目前职位相关的特征数据很多,要选出最合适的职位(综合多种特征,相互对比)十分不易,人脑很难对数据有直观认知,而这正是可视化帮得上忙的

bokeh example app movies项目的启发,我做了这个东西

泛化能力

我最初在折腾bokeh example app movies的时候就觉得,卧槽这是个泛化能力极好的模型呀,可以应用的领域太广了,这个模型里,只要求我们关注的对象(比如电影)有多维标签数据(比如评论数、票房)即可!用户就可以根据这些数据来可视化筛选数据,从而得出自己喜欢的电影,用户也可以随时调整筛选指标(通过变化坐标轴关联的数据标签)

我的jobsVisualization就是一个典型的例子,你还用以用来做的其他事包括如何选股票,如何选桃子,如何选女朋友(如果有的选的话,邪恶一笑)之类的

只完成一半

在我的最初计划里,当前的工作其实只完成了一半,尽管它看去已经完整了(语出@ryseven)

我的另一半计划是,用户能够订阅自己关注的区间,好比订阅月薪在10K-20K之间,工作地点在上海的职位,每当采集到新的数据,便向订阅用户推送这些信息

那么用户怎么订阅呢,他只需要在图中圈一下

jons

这样便订阅了薪资在10k-20k,简历提交次数在30次以下的职位

这是一种信息筛选和推送的服务

算法问题

最后剩下的就是一个算法问题,假设有有A个用户订阅了该服务,他们关注的薪资区间各不相同(先假设只有薪资一个变量)。我们的爬虫每天早上爬取一组职位数据,我们要如何将合适的职位推送给合适的用户。怎样的机制较优(可以从时间复杂度和空间复杂度两方面考虑),简单的办法包括

  • 为每个用户执行一次筛选
  • 为每个职位找合适的用户

我们看到这两种做法都不好,许多信息被反复查看,并没有充分利用

另一个小问题

我们可以先绕开算法问题,处理消息推送中的优化策略

如果你折腾过消息系统(notification system),你会发现这个问题在构建消息系统是可能也会遇到类似的,一群人订阅了一个话题,当话题有更新时,如何通知这些人。消息到达用户的方式通常有pull和push两种。

针对push/pull模型采取的策略可能不尽相同,在pull模型中(用户拉取),我们可以根据用户的活跃情况决定为其生成消息的策略,诸如活跃用户优先,而非活跃用户可以访问时生成也无妨(celery)。

这样可以节省空间

优化问题还蛮好玩的,不过我最近掉到NLP(自然语言处理)的蜜罐里,暂时出不来,就不继续折腾这个项目了,有兴趣的小伙伴可以继续玩耍

结语

这个可视化订阅服务是泛化性很好的项目,小伙伴们可以自己去折腾出好玩的东西,如果这个服务能帮到大家找到喜欢的东西(电影或是工作),节省信息筛选的时间,那么说不定有许多人请你喝咖啡呢