首页 > 编程知识 正文

数据可视化的基本概念,文本可视化分析

时间:2023-05-04 02:36:45 阅读:141838 作者:4383

声明:本文的CSDN作者原创投稿文章不允许任何形式的转载,原文链接

文章目录概要实验过程Pyecharts实验结果邮件交流网络图后树形图邮件主题词云图实验结论

概要学院:计算机科学与技术学院实验日期: 2020-10-17实验目的:掌握层次和网络可视化、文本可视化工具方法的实验内容:目前xx公司一个月内研发部门成员之间的邮件沟通记录(email _ dev 请按以下要求完成对公司研发部门的可视化分析) 1、邮件2、处理邮件内容数据,分析研发部门及各小组中的主要工作内容。 注:表格文件可从“我的资源”免费下载。 名为“数据可视化实验表附件”。 链接即使我设置了不积分,CSDN也不会免费下载,请直接下载到github:github链接实验过程

在这次的实验中,编程类工具Pyecharts

Pyecharts在Pycharm中创建新的python项目,并引入Pyecharts、openpyxl等必要的软件包。

制作main.py,写入以下内容。

#! /usr/仁爱大碗/env python # coding : utf-8 ' ' name : main.py author 3360 ftime :2020/10/17 21:03Desc :数据可视化实验六' ' importcopyimportopenpyxlfrompyecharts.chartsimportgraph,Tree,WordCloud, 来自pagefrompyechartsimportoptionsasoptsfrompyechartsimportglobals._ warning control.show warning=false # pye charts的警告bigbose 关闭' 1059 ',' 1068 ' ' def get data (: filename=' email _ dev _ inside.xlsx ' ws=openpyxl.load _ workbook ) 成为set(forIinrange(2,ws.max_row 1) 3360row=str ) I ) thedata .的ws['H' row].value[:4],ws [ ' I ' rori ' target ' 3360 ws [ ' h ' row ].value [ :4 ] } (thenodes.add (ws [ ' g ' row ].value [ :4 ] ) the nodes.add )。 fornodeinthenodes 3360 RES nodes.append ({ ' name ' : node,' symbolSize': 1,' draggable': 'False ', ' valse ' ' label ' : { ' normal ' : { ' show ' : ' false ' } return the data,resNodes,theLinks,thecategories graph _ categories 3360 list (: graph (opts.init opts (width=' 2000 px ',height='2000px ) )。 graph_categories,repulsion=50,line style _ opts=opts.line style opts,label_opts=opts.label ).set _ globet (render ) )研发部邮件往来图. html ) ) defgetlittleboss (big _ boss 3360 little _ boss={ } forbossinbig _ boss 336660

s] = set() for link in links: if link['source'] in big_boss and link['target'] not in bigBoss: little_boss[link['source']].add(link['target']) elif link['target'] in big_boss and link['source'] not in bigBoss: little_boss[link['target']].add(link['source']) for k, v in little_boss.items(): little_boss[k] = list(v) little_boss[k].sort() return little_bossdef getRank(): the_rank = {} for bBoss in bigBoss: the_rank[bBoss] = {} littleBoss = getLittleBoss(bigBoss) for k, v in littleBoss.items(): employee = getLittleBoss(v) for lBoss in v: the_rank[k][lBoss] = employee[lBoss] return the_rankdef getGroupEmail(): email_content = copy.deepcopy(rank) for bBoss, groups in email_content.items(): for lBoss, employeeList in groups.items(): email_content[bBoss][lBoss] = getListEmail(employeeList) return email_contentdef getListEmail(theEmployeeList: list): emailContent = {} wordList = [] for d in data: if d[0] in theEmployeeList or d[1] in theEmployeeList: if emailContent.__contains__(d[2]): emailContent[d[2]] += 1 else: emailContent[d[2]] = 0 for k, v in emailContent.items(): wordList.append(tuple((k, str(v)))) return wordListdef getTreeData(): tree_data, children = {'name': '成员结构图', 'children': []}, [] for bBoss, groups in rank.items(): tree_data['children'].append({'name': bBoss, 'children': []}) for lBoss, employeeList in groups.items(): for employee in employeeList: children.append({'name': employee, 'value': 1}) tree_data['children'][tree_data['children'].__len__() - 1]['children'].append( {'name': lBoss, 'children': children}) children = [] return tree_datadef drawTree(tree_data): Tree(opts.InitOpts(width="3500px", height="2000px")).add( "", [tree_data], collapse_interval=2, orient="TB", initial_tree_depth=-1, label_opts=opts.LabelOpts( position="top", horizontal_align="right", vertical_align="middle", rotate=-90, ), ).set_global_opts(title_opts=opts.TitleOpts(title="成员结构图")).render("成员结构图.html")def drawWordCloud(cloud_data: dict): page = Page() for bBoss, groups in cloud_data.items(): for lBoss, employeeList in groups.items(): wordCloud = WordCloud() wordCloud.add(series_name=bBoss + '-' + lBoss + "邮箱内容分析", data_pair=employeeList, word_size_range=[6, 66]).set_global_opts( title_opts=opts.TitleOpts( title=bBoss + '-' + lBoss + "邮箱内容分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23) ), tooltip_opts=opts.TooltipOpts(is_show=True), ) page.add(wordCloud) page.render("邮箱内容分析.html")if __name__ == '__main__': data, nodes, links, categories = getData() # 从xlsx拿到数据 rank = getRank() # 拿到整个阶级顺序 drawEmailGraph(nodes, links, categories) # 画出邮件来往网络图 drawTree(getTreeData()) # 画出阶级图 drawWordCloud(getGroupEmail()) # 画出每个群体的邮件内容词云# 由EmailGraph可见,研发部分为3个群体。群体负责人的邮箱用户名依次是1007,1059,1068。# 群体之间都不会互相通信,同时每个群体又分为多个小群体,小群体之间同样也不会互相通信。# 拿到3个大群体的负责人之后,可以拿到这三个人的通信记录,便可以得到每个小群体的主要负责人。# 同样地,可以拿到每个小群体的成员,拿的时候要注意避免将3个大群体的负责人认作为小群体的成员。# 然后对每个大群体和小群体的邮件内容生成词云,即可获得每个群体的工作内容。# 由Tree可以清晰地看出来部门的层次# 由WordCloud可以看出来每个群体的主要工作内容

代码流程:

读取Excel文件email_dev_inside.xlsx拿到往来邮件的邮箱用户名(四位数字)和邮件主题。根据往来邮件的邮箱用户名画出网络图,观察部门群体形态。根据部门群体形态可以判断出研发部分为3个群体。群体负责人的邮箱用户名依次是1007,1059,1068。群体之间都不会互相通信,同时每个群体又分为多个小群体,小群体之间同样也不会互相通信。根据群体负责人和小群体负责人,划分出部门的职位树图。根据划分的不同小群体及其邮件主题,画出每个小群体的邮件主题词云图。观察词云图,可以得出每个群体的主要工作内容。 实验结果 邮件往来网络图

邮件往来网络图如下所示,可以通过网络图可以得出主要负责人。

对上图进行分析:

此研发部门主要分为3个群体,负责人的邮箱用户名依次是1007,1059和1068每个群体又分为不同的小群体,并且每个小群体中有一个负责人。每个大群体之间不会相互通信,每个小群体之间也不会相互通信。 职位树图

对上图进行分析:

可以清晰地看出整个部门的结构层次,图中数字为邮箱用户名。 邮件主题词云图

对上图进行分析:

由邮件主题词云图可以看出每个小群体的主要工作,以负责人邮箱用户名为索引,结论如下:1007 1087:技术分享安排,部署与计划1092:需求、API、项目计划、问题与风险1115:前端开发、测试、配置、部署1125:概要设计、文档撰写1172:开发设计、实施方案1192:特殊字段说明、用户管理与例会1199:后端开发、文档接口与平台1224:软件部署运维1230:软件测试1281:软件部署与实施测试 1059 1057:软件开发实施监管1058:软件概要设计1079:技术分享1080:需求调研、设计概要1096:软件实施1101:系统配置子系统相关1119:软件实施与数据分析1143:总监管1155:特殊字段说明1211:软件开发文档撰写1228:软件实施与地图配置1376:需求调研与传输设置、特殊字段处理1487:系统规划,需求与原型设计 1068 1060:地图配置1098:工程初验1100:平台配置设置1154:地图配置1191:工程测试与终验1207:项目测试数据处理1209:软件开发文档管理 实验结论 研发部负责人树状图和其下人员的主要工作如下所示,其中数字为人员邮箱用户名(即邮箱前四位数字)1007 1087:技术分享安排,部署与计划1092:需求、API、项目计划、问题与风险1115:前端开发、测试、配置、部署1125:概要设计、文档撰写1172:开发设计、实施方案1192:特殊字段说明、用户管理与例会1199:后端开发、文档接口与平台1224:软件部署运维1230:软件测试1281:软件部署与实施测试 1059 1057:软件开发实施监管1058:软件概要设计1079:技术分享1080:需求调研、设计概要1096:软件实施1101:系统配置子系统相关1119:软件实施与数据分析1143:总监管1155:特殊字段说明1211:软件开发文档撰写1228:软件实施与地图配置1376:需求调研与传输设置、特殊字段处理1487:系统规划,需求与原型设计 1068 1060:地图配置1098:工程初验1100:平台配置设置1154:地图配置1191:工程测试与终验1207:项目测试数据处理1209:软件开发文档管理

数据可视化–实验六:层次和网络可视化、文本可视化实验完成,两项实验结果均符合要求,实验成功。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。