R - 员工报告结构

时间:2017-04-26 23:12:52

标签: r data-science

背景:我正在使用R和一些软件包从票务系统中提取JSON数据。我拉动了所有用户,并希望建立一个报告结构。

我有一个包含员工及其经理的数据集。这些列的名称是这样的("员工"和"经理")。我正在尝试构建一个直到根的报告结构树。我们是一个IT组织,但我正在提取所有员工数据,所以这看起来像是:

公司 - >业务部门 - >执行 - >导演 - >集团经理 - >经理 - >员工

这是基本想法。一些区域的树结构很小,其他区域则是多层。基本上,我想要做的是获得一棵树,或者我可以参考的报告结构,所以我可以确定一个员工,他们的导演是谁。这可能是1级删除或最多删除5或6级。

我遇到了data.tree,但到目前为止,在我看来,我必须提供一个定义该结构的pathString。由于我只有两列,我想要做的就是将这个数据框放到一个函数中,当它找到员工时让它遍历列表,将它放在该管理器下,当它发现该管理器为员工,在它们的直接报告下嵌套它,以及嵌套在它们下面的任何东西。

在没有定义data.tree的情况下,我还没有弄清楚如何让pathString这样做,但是这样做,我只能在pathString上构建pathString我知道每一行 - 员工和他们的经理。结果是一棵树只有2个级别,导演没有连接到他们的集团经理,集团经理也没有连接到他们的经理等等。

我考虑过编写一些逻辑/循环来完成并执行此操作,但必须有一个更简单的方法或包可以用来执行此操作。也许我没有正确定义def FindHtml(self, text): site = text #headers = {'User-agent' : 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2'} headers = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'} proxy_support = self.proxi() opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1)) urllib2.install_opener(opener) page="" #req = urllib2.Request(site, None,headers) req = urllib2.Request(site, None,headers) try: page = urllib2.urlopen(req).read() except urllib2.HTTPError, e: print e.fp.read() content = page #print content return content ....

最终,我最终的结果是一个数据框,其列如下:

员工,经理1,经理2,经理3,经理X,......

当然,有些行只会在第1列和第2列中包含条目,但其他行可能会有很多级别。有了这个,我可以在配置管理系统中查找设备,找到所有者并在相应的控制器下聚合这些计数。

任何帮助都会受到赞赏。我不能发布数据,因为它本质上是保密的,但它只包含员工及其经理。我只需连接所有点......谢谢!

2 个答案:

答案 0 :(得分:4)

data.tree包只有这个场景的FromDataFrameNetwork函数:

library(data.tree)

DataForTree <- data.frame(manager = c("CEO","sally","sally","sue","mary", "mary"),
                          employee = c("sally","sue","paul","mary","greg", "don"),
                          stringsAsFactors = FALSE)


tree <- FromDataFrameNetwork(DataForTree)

print(tree)

结果:

1 CEO                 
2  °--sally           
3      ¦--sue         
4      ¦   °--mary    
5      ¦       ¦--greg
6      ¦       °--don 
7      °--paul  

答案 1 :(得分:0)

hR包利用的data.tree,但它是专门设计为使用人/雇员数据进行数据分析的需要。您还可以根据需要返回一个宽数据帧。这有助于与其它数据结合,并继续进行分析。

library(hR)
ee = c("Dale@hR.com","Bob@hR.com","Julie@hR.com","Andrea@hR.com")
supv = c("Julie@hR.com","Julie@hR.com","Andrea@hR.com","Susan@hR.com")
hierarchyWide(ee,supv)

  Employee      Supv1         Supv2        Supv3
1   Dale@hR.com Susan@hR.com Andrea@hR.com Julie@hR.com
2    Bob@hR.com Susan@hR.com Andrea@hR.com Julie@hR.com
3  Julie@hR.com Susan@hR.com Andrea@hR.com         <NA>
4 Andrea@hR.com Susan@hR.com          <NA>         <NA>