同学去哪了

前些天发现就业网公布了14届毕业生去向统计表,刚好想学gnuplot,心血来潮要把统计表做成图片。

xls转csv

首先要做的是将xls格式转换成便于脚本处理的csv格式。一开始使用excel另存。后来发现Linux上有可用的工具(可惜没成功,貌似是编码的问题,这里仅记录一下软件安装)。添加epel源后可用直接安装。

epel详见http://mirrors.fedoraproject.org/publiclist/EPEL/。选择一个国内的安装:

yum search查询xls2csv

之后yum安装catdoc即可。

另外有些文章和软件可以参考一下:

  • http://leslie-chu.blog.163.com/blog/static/199863243201263935085/
  • xls2doc

处理csv文件

根据关键词获取具体去向。关键词从命令行参数获取。支持以学号为关键词,但是为了好理解会附加一个变量即ADD_KEY。当KEY为数字的时候,取专业那一列作为ADD_KEY。

去向不区分派遣升学和回原籍灵活就业,所以 报到证开具单位、到人才备注单位和回原籍备注单位统一处理,具体规则是,默认以报到证开具单位为去向,如果到人才备注单位或者回原籍备注单位不为空,则去向用它们的值覆盖。

为了加快处理速度,模拟一个多线程。

对具体去向进行处理, 主要是统一去向名称和去重计数及排序。

统一名称主要基于一个替换规则文件$REPLACE,文件的格式如下。第二列为空的表示删除第一列。

用gnuplot画图

想用饼图,搜了之后得知gnuplot不支持饼图,只好用柱状图了。

其中set style data histograms就是指定画柱状图。

在这里折腾时间比较长的标题的偏移。一开始做的是水平的柱状图,图片很宽,不容易看到标题,需要把标题移动到左边。但是offset默认单位是character,不能明确的指定位置。经过长时间的搜索和调试,发现以graph为单位时比较容易控制。

graph已图片左下角为 0,0,右上角为 1,1,根据图片宽度及字体大小(12pt的字体大概宽16px),测算偏移量。一般越宽的图片偏移量越大。下面代码中WIDTH是图片宽度。

 Convert转换图片

为了便于在网上发布,想要做成垂直的柱状图,gnuplot没有找到方法,就用convert旋转图片(需yum安装ImageMagick)。

这时折腾很久的gnuplot的offset就难排上用场了,调来调去总是不能满意。好在convert命令可以添加文字注释。convert的坐标大概是已像素为单位,做上角为0,0,往右往下增加。于是确定添加TITLE的位置为:

然后坐标也需要旋转,横坐标为公司名称,逆时针旋转90度后和柱图有些错位,因此将横坐标右移一个1符的偏移量:

convert旋转并添加标题注释。

旋转后图片左边留白太多,剪切掉。

结果展示

垂直图

信科院14届

信科院14届

水平图

2010081-h

2010081-h

附:完整代码见 https://github.com/annProg/hnu-graduates

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注