Python实现《都挺好》社交网络分析 | 您所在的位置:网站首页 › 《算法》小说 › Python实现《都挺好》社交网络分析 |
目录
1《都挺好》简介2人物共同出现频数2.1制作主要人物字典2.2计算人物相互出现的频数
3绘制人物关系图4重要人物5社区发现6人物相关系数7随时间变化的人物关系8最后
1《都挺好》简介
该小说讲述了职场金领苏明玉从小不受家人待见,生长在家庭的边缘,在孤独扭曲的环境中长大成人的故事。结局是这样的,苏明哲回到了美国,苏明成和朱丽离婚后不知所踪,苏明玉和石天冬在一起了,三个子女看清了苏大强的为人,没有人再管着他,最终苏大强得了老年痴呆症,苏明玉于心不忍,因此把他接回家照顾。 需要把《都挺好》小说txt版下载下来,刚开始我是通过jieba分词把所有nr(人名)的词语保存下来,作为人物集合,但是①某个人物多个称呼 ②nr类型会出现许多不合适的词 words=pseg.cut(single) for w in words: if(w.flag=='nr')参考电视猫中的人物关系图,单独制作了主要人物词典 (1)首先初始化一个16×16的人物频数0矩阵。 (2)在小说的每一段中,当这一段中出现了词典中的人物时,就把出现的人物两两对应的频数+1。 (3)遍历频数矩阵的右上半边(或左下半边)获得人物两两之间的频数。 # 计算人物相互出现的频数 保存成顶点-权重 def getPeopleNetwork(): plist=list(pdict.keys()) N=len(plist) pcount=np.zeros([N,N]) #初始化 人物频数 二维矩阵 pcount=pd.DataFrame(data=pcount,columns=plist,index=plist) #遍历每一段,出现的人物 频数+1 for sentence in content: s_plist=[]#出现的人物集合 words=jieba.cut(sentence) for w in words: if(getPerson(w)!='无' and getPerson(w) not in s_plist): s_plist.append(getPerson(w)) #根据出现的人物集合 进行频数+1 for p1 in s_plist: for p2 in s_plist: pcount.loc[p1][p2]+=1 #保存频数二维矩阵 pcount.to_excel('./data/人物频数矩阵.xlsx') print('w ok') #根据频数二维矩阵 计算 人物1-人物2-权重 p_network=[] for i in np.arange(N): for j in np.arange(i+1,N): p_network.append([plist[i],plist[j],pcount.iloc[i,j]]) #保存 边-权重 p_network=pd.DataFrame(data=p_network,columns=['人物1','人物2','count']) p_network.to_excel('./data/权重.xlsx') print('w ok') 3绘制人物关系图节点越大,代表该人物越重要。根据频数范围(400,200,100,30),将边划分成五个程度,红蓝黄紫橙,关系依次减弱。
|
CopyRight 2018-2019 实验室设备网 版权所有 |