前言
STEP1:分析原文代码
首先说明一下原文代码的问题,以及原文代码用到的python包。
我讲原文代码拷贝拼接后,发现第一个问题,包引用的问题。
第一个重量级的包,“haohan = pd.read_excel('水浒人物.xlsx')”通过这句以及平时的经验可以知道引用了pandas包,通用写法“import pandas as pd”。
第二个比较蹊跷的包引用是“bar = Bar("水泊梁山年收入TOP10")”。可能是本人经验有限,没有用过Bar包(也可能是模块)。于是求助百度,几番搜索尝试之下,终于找到了pyecharts。核对后面引用的方法,确定是此包无疑。
python包有了,于是安装两个包。安装语句如下:
pip install pandas
pip install pyecharts
本以为解决了包的问题,就可以运行徐麟兄的代码,岂知事情并非如此简单。
PART1代码如下:
第一二行是读取文本文件,弱弱的说一句,缺少了文件关闭语句。不过由于此文是读取文件,不影响程序执行。不过从代码规范性看,file.colse()是必不可少的。
第三、四、五行代码是对读取的内容进行简单处理并切分成一段一段的list集合。不知徐麟兄是故意为之还是笔误,第三行将换行符替换成了空字符,第四行又用空格符进行切分。按照后文提到的按段落划分,应该是将换行符替换成空格符,然后根据空格符切分才合理。
第七行获取所有段落中包含“宋江”字符串的段落;
第八行读取水浒人物表生成DataFrame,暂无该文档,不知其内容。
第九行更诡异,直接将DataFrame的一个新字段全部设置为0.
正是由于第九行全部设置为0,所以我运行后面的代码得到的结果如下。
很诡异吧,全部是0。但是分析了上面的代码我才知道了原因。
认真学习了徐麟兄后面的内容,基本明白了其“出场段落”字段的含义。后文写到“作为能够长期运作的互联网公司,在员工收入分配方面始终员工KPI(出场段落数量)相挂钩,我们来看一下年薪TOP10和BOTTOM10”,其实只是普通的wordcount单词统计的一个变异,大致意思就是将原文按照行或者段落划分,统计水浒108将的名字在所有段落中出现的段落数,即每一个人物(文章称haohan)如果在一个自然段中出现一次或者多次,则视为该人物KPI+1.
上文第七行以宋江为例的代码可以看出这一点。
songjiang_set=[k for k in shuihu_set if '宋江' in k]
PART2是引用pyecharts包中的Bar模块实现数据展现,这一部分内容比较简单易懂,也非我所长,略过后文再叙。
PART3部分的代码如下:
这部分代码再次让我感受到了迷茫。继续尝试解读一下吧。
第一行,定义了一个五个字段的DataFrame;
第二、三行创建了一个两层的循环,让水浒108好汉两两成对进行匹配成对;
第四行计算两两成对的好汉出现在同一个自然段或者说原文同一行的次数;
第五至九行给DataFrame拼接数据;
第十行只是输出了两两成对的姓名。
That's all?这样就完了?
其后只是简单的一句“我们在去除一些社交网络节点数据(聊天总数较少或聊天数量占一方数量比例过少)的情况后,用Gephi软件绘制出了整体的社交网络图如下:”就把我们带入了分析结果的页面。作为读者,个人是觉得徐麟兄这篇文章是不太负责任的,写得太粗糙了。
STEP2:亮出我的代码
为了能实现后面的内容,我只好自行补充完善了这部分代码。
首先,准备两个素材,《水浒传.txt》和《水浒人物.xlsx》,我自行去网上下载了这本小说文字版,并找到了所有人物姓名。经检查,小说文章是按行划分段落,满足要求。《水浒人物.xlsx》仅有一列,字段名为“姓名”。
然后改写代码如下:
第一二三行是读取文本文件,本次采用自带的os模块之间读取文件每一行生成一个list。
第三行读取excel文档中水浒人物的姓名。
第四行通过水浒人物的姓名计算出对于人物在水浒传中的“KPI”,即(出场段落数量)
至此,数据准备完毕。
STEP3:沿用原来的分析代码生成分析结果。
原文代码如下:
本次生成的结果截图如下:
两图数据和徐麟兄的结果略有差异,可能是我们用的文本文件不一致造成的。这个并不影响我们进一步分析。
STEP4:生成数据及社交网络分析
到了社交网络这一部分了,我并不知道“我们在去除一些社交网络节点数据(聊天总数较少或聊天数量占一方数量比例过少)的情况后”去除了一些什么数据,只能尝试这用一下Gephi软件。
根据百度上的了解和对徐麟原文的分析,生成社交网络总共需要'Source','Target','Weight','Source_Ratio','Target_Ratio'五个字段的数据,经分析,我改写的程序完全可以接上第三部分的程序,因此不做任何修改,仅将结果导出到csv文件。
加上代码“net_df.to_csv('sjwl.csv',index=False,sep=',')”
生成数据如上图。
领取专属 10元无门槛券
私享最新 技术干货