{"action":"created","comment":{"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments/33610348","id":33610348,"diff_hunk":"@@ -0,0 +1,421 @@\n+:author: Jordi Torrents\n+:email: jordi.t21@gmail.com\n+:institution: University of Barcelona\n+\n+:author: Fabrizio Ferraro\n+:email: fferraro@iese.edu\n+:institution: IESE Business School\n+\n+---------------------------------------------------------------------------------------------------\n+Structural Cohesion: Visualization and Heuristics for Fast Computation with NetworkX and matplotlib\n+---------------------------------------------------------------------------------------------------\n+\n+.. class:: abstract\n+\n+    The structural cohesion model is a powerful sociological conception of cohesion in social groups, but its diffusion in empirical literature has been hampered by operationalization and computational problems. We present useful heuristics for computing structural cohesion that allow a speed-up of one order of magnitude over the algorithms currently available. Both the heuristics and the exact algorithm have been implemented on NetworkX by the first author. Using as examples three large collaboration networks (co-maintenance of Debian packages, co-authorship in Nuclear Theory and High-Energy Theory) we will illustrate our approach to measure structural cohesion in relatively large networks. We also introduce a novel graphical representation of the structural cohesion analysis to quickly spot differences across networks which is implemented using matplotlib.\n+\n+\n+.. class:: keywords\n+\n+   Network Analysis, Sociology, Structral Cohesion, NetworkX, matplotlib\n+\n+\n+Introduction\n+------------\n+\n+Group cohesion is a central concept that has a long and illustrious history in sociology and organization theory, although its precise characterization has remained elusive. Its use in most sociological research has been ambiguous at best. This is largely because, as [moody2003]_ argued, it is often based on sloppy operationalization grounded mostly in intuition and common sense. Network analysis has provided a large number of solutions to this problem. From classical work in the graph-theoretic sociological tradition on cliques, clans, clubs, :math:`k`-plexes, :math:`k`-cores and lambda sets [wasserman1994]_, to the more recent contribution of physicists and computer scientists on community analysis [fortunato2010]_, network theorists have provided researchers with a wide range of measures of cohesion in social networks.\n+\n+However, neither the classical approaches nor new developments in community analysis are well-enough suited to address many of the common uses of group cohesion in the sociological and organizational literature, for three key reasons. First, while most of these measures can help us identify cohesive subgroups, they do not provide insight into their robustness, which is a critical element to the theoretical conceptualization of cohesion. In most cases, the removal of only a few actors from the subgroups can lead to its fragmentation into smaller disconnected groups [white2001]_. Secondly, many cohesive subgroup measures do not allow for overlap among subgroups. Finally, even when they do allow for overlap, most measures cannot capture the hierarchical nature of nested social groups, where subgroups, like Russian dolls, are recursively nested in one another. As a result, hardly any of the existing measures capture the theoretical complexity of cohesion, and thus fall short of offering useful operationalizations for many empirical phenomena of sociological interest.","path":"papers/jordi_torrents/structural_cohesion.rst","position":28,"original_position":28,"commit_id":"8e3b53d01ab7f662e6cd905fb380e857c9cb1752","original_commit_id":"8e3b53d01ab7f662e6cd905fb380e857c9cb1752","user":{"login":"katyhuff","id":393899,"avatar_url":"https://avatars.githubusercontent.com/u/393899?v=3","gravatar_id":"","url":"https://api.github.com/users/katyhuff","html_url":"https://github.com/katyhuff","followers_url":"https://api.github.com/users/katyhuff/followers","following_url":"https://api.github.com/users/katyhuff/following{/other_user}","gists_url":"https://api.github.com/users/katyhuff/gists{/gist_id}","starred_url":"https://api.github.com/users/katyhuff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katyhuff/subscriptions","organizations_url":"https://api.github.com/users/katyhuff/orgs","repos_url":"https://api.github.com/users/katyhuff/repos","events_url":"https://api.github.com/users/katyhuff/events{/privacy}","received_events_url":"https://api.github.com/users/katyhuff/received_events","type":"User","site_admin":false},"body":"\"is a critical element to the theoretical conceptualization of cohesion\" is a mouthful. Why not aim for clarity:\r\n\"is critical to the theory of cohesion\"\r\n\r\nThe great physicist Paul Dirac once said \"In science one tries to tell people, in such a way as to be understood by everyone, something that no one ever knew before. But in the case of poetry, it's the exact opposite!\"","created_at":"2015-06-30T18:59:53Z","updated_at":"2015-06-30T18:59:53Z","html_url":"https://github.com/scipy-conference/scipy_proceedings/pull/141#discussion_r33610348","pull_request_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141","_links":{"self":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments/33610348"},"html":{"href":"https://github.com/scipy-conference/scipy_proceedings/pull/141#discussion_r33610348"},"pull_request":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141"}}},"pull_request":{"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141","id":37733516,"html_url":"https://github.com/scipy-conference/scipy_proceedings/pull/141","diff_url":"https://github.com/scipy-conference/scipy_proceedings/pull/141.diff","patch_url":"https://github.com/scipy-conference/scipy_proceedings/pull/141.patch","issue_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/141","number":141,"state":"open","locked":false,"title":"Paper: Structural Cohesion: Visualization and Heuristics for Fast Computation with NetworkX and matplotlib (Torrents)","user":{"login":"jtorrents","id":1184374,"avatar_url":"https://avatars.githubusercontent.com/u/1184374?v=3","gravatar_id":"","url":"https://api.github.com/users/jtorrents","html_url":"https://github.com/jtorrents","followers_url":"https://api.github.com/users/jtorrents/followers","following_url":"https://api.github.com/users/jtorrents/following{/other_user}","gists_url":"https://api.github.com/users/jtorrents/gists{/gist_id}","starred_url":"https://api.github.com/users/jtorrents/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtorrents/subscriptions","organizations_url":"https://api.github.com/users/jtorrents/orgs","repos_url":"https://api.github.com/users/jtorrents/repos","events_url":"https://api.github.com/users/jtorrents/events{/privacy}","received_events_url":"https://api.github.com/users/jtorrents/received_events","type":"User","site_admin":false},"body":"Dear reviewers,\r\n\r\nA bit of context on this paper. It is based on a chapter of my thesis (see http://arxiv.org/abs/1503.04476 for the full version). I've submitted the full version to Sociology journals (rejected in one, another version is under revision in another now) and some reviewers suggested cutting or shortening the parts related to discussing algorithms, heuristics and implementation details. So I'm splitting the chapter in two publications, the paper submitted here aims to focus precisely on this. However, I felt that it was worth to discuss at length the structural cohesion model of social cohesion because it's not well known outside Sociology, and I think it might be of interest as it offer an alternative approach to meso level network structure than the more common community analysis. This makes the paper a bit too long.\r\n\r\nI've implemented the algorithms and heuristics discussed in the paper on top of NetworkX; they will be part of the upcoming 1.10 release. I'm not sure if it's OK to reference pull requests in the paper. I started adding references (ie pull requests URLs) to footnotes, but I thought that it would be better  referencing the official NetworkX documentation instead, however this will have to wait until the 1.10 release for stable URLs.\r\n\r\nFinally, the two figures for this paper (one with 4 subfigures, and the other with 6) should ideally be each a whole page with only one column. Is that possible? I've prepared two pdf for each figure (using the `subfig` latex package) and just added them as a regular figure. Now they are too small as they are squashed to one of the two columns. The pdf for the 3d scatter plots is quite big (20MB), I also added small png versions of each subplot in the paper's directory.\r\n\r\nLooking forward to your comments\r\n\r\n[Edit by jaberg] http://nipy.bic.berkeley.edu:5000/download/16","created_at":"2015-06-15T20:46:15Z","updated_at":"2015-06-30T18:59:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"10badba54e16793d4847f9756842a90f06cc4457","assignee":{"login":"katyhuff","id":393899,"avatar_url":"https://avatars.githubusercontent.com/u/393899?v=3","gravatar_id":"","url":"https://api.github.com/users/katyhuff","html_url":"https://github.com/katyhuff","followers_url":"https://api.github.com/users/katyhuff/followers","following_url":"https://api.github.com/users/katyhuff/following{/other_user}","gists_url":"https://api.github.com/users/katyhuff/gists{/gist_id}","starred_url":"https://api.github.com/users/katyhuff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/katyhuff/subscriptions","organizations_url":"https://api.github.com/users/katyhuff/orgs","repos_url":"https://api.github.com/users/katyhuff/repos","events_url":"https://api.github.com/users/katyhuff/events{/privacy}","received_events_url":"https://api.github.com/users/katyhuff/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141/commits","review_comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141/comments","review_comment_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/141/comments","statuses_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/8e3b53d01ab7f662e6cd905fb380e857c9cb1752","head":{"label":"jtorrents:jtorrents_paper","ref":"jtorrents_paper","sha":"8e3b53d01ab7f662e6cd905fb380e857c9cb1752","user":{"login":"jtorrents","id":1184374,"avatar_url":"https://avatars.githubusercontent.com/u/1184374?v=3","gravatar_id":"","url":"https://api.github.com/users/jtorrents","html_url":"https://github.com/jtorrents","followers_url":"https://api.github.com/users/jtorrents/followers","following_url":"https://api.github.com/users/jtorrents/following{/other_user}","gists_url":"https://api.github.com/users/jtorrents/gists{/gist_id}","starred_url":"https://api.github.com/users/jtorrents/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtorrents/subscriptions","organizations_url":"https://api.github.com/users/jtorrents/orgs","repos_url":"https://api.github.com/users/jtorrents/repos","events_url":"https://api.github.com/users/jtorrents/events{/privacy}","received_events_url":"https://api.github.com/users/jtorrents/received_events","type":"User","site_admin":false},"repo":{"id":37471008,"name":"scipy_proceedings","full_name":"jtorrents/scipy_proceedings","owner":{"login":"jtorrents","id":1184374,"avatar_url":"https://avatars.githubusercontent.com/u/1184374?v=3","gravatar_id":"","url":"https://api.github.com/users/jtorrents","html_url":"https://github.com/jtorrents","followers_url":"https://api.github.com/users/jtorrents/followers","following_url":"https://api.github.com/users/jtorrents/following{/other_user}","gists_url":"https://api.github.com/users/jtorrents/gists{/gist_id}","starred_url":"https://api.github.com/users/jtorrents/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jtorrents/subscriptions","organizations_url":"https://api.github.com/users/jtorrents/orgs","repos_url":"https://api.github.com/users/jtorrents/repos","events_url":"https://api.github.com/users/jtorrents/events{/privacy}","received_events_url":"https://api.github.com/users/jtorrents/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jtorrents/scipy_proceedings","description":"Tools used to generate the SciPy conference proceedings","fork":true,"url":"https://api.github.com/repos/jtorrents/scipy_proceedings","forks_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/forks","keys_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/teams","hooks_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/hooks","issue_events_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/issues/events{/number}","events_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/events","assignees_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/assignees{/user}","branches_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/branches{/branch}","tags_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/tags","blobs_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/git/refs{/sha}","trees_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/statuses/{sha}","languages_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/languages","stargazers_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/stargazers","contributors_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/contributors","subscribers_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/subscribers","subscription_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/subscription","commits_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/commits{/sha}","git_commits_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/git/commits{/sha}","comments_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/comments{/number}","issue_comment_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/issues/comments{/number}","contents_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/contents/{+path}","compare_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/merges","archive_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/downloads","issues_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/issues{/number}","pulls_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/pulls{/number}","milestones_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/milestones{/number}","notifications_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/labels{/name}","releases_url":"https://api.github.com/repos/jtorrents/scipy_proceedings/releases{/id}","created_at":"2015-06-15T14:41:03Z","updated_at":"2015-06-15T14:41:04Z","pushed_at":"2015-06-27T20:28:35Z","git_url":"git://github.com/jtorrents/scipy_proceedings.git","ssh_url":"git@github.com:jtorrents/scipy_proceedings.git","clone_url":"https://github.com/jtorrents/scipy_proceedings.git","svn_url":"https://github.com/jtorrents/scipy_proceedings","homepage":"","size":19777,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scipy-conference:2015","ref":"2015","sha":"e3df71a5659ce32396b7c520b89109716a3210fa","user":{"login":"scipy-conference","id":4884274,"avatar_url":"https://avatars.githubusercontent.com/u/4884274?v=3","gravatar_id":"","url":"https://api.github.com/users/scipy-conference","html_url":"https://github.com/scipy-conference","followers_url":"https://api.github.com/users/scipy-conference/followers","following_url":"https://api.github.com/users/scipy-conference/following{/other_user}","gists_url":"https://api.github.com/users/scipy-conference/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy-conference/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy-conference/subscriptions","organizations_url":"https://api.github.com/users/scipy-conference/orgs","repos_url":"https://api.github.com/users/scipy-conference/repos","events_url":"https://api.github.com/users/scipy-conference/events{/privacy}","received_events_url":"https://api.github.com/users/scipy-conference/received_events","type":"Organization","site_admin":false},"repo":{"id":1825629,"name":"scipy_proceedings","full_name":"scipy-conference/scipy_proceedings","owner":{"login":"scipy-conference","id":4884274,"avatar_url":"https://avatars.githubusercontent.com/u/4884274?v=3","gravatar_id":"","url":"https://api.github.com/users/scipy-conference","html_url":"https://github.com/scipy-conference","followers_url":"https://api.github.com/users/scipy-conference/followers","following_url":"https://api.github.com/users/scipy-conference/following{/other_user}","gists_url":"https://api.github.com/users/scipy-conference/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy-conference/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy-conference/subscriptions","organizations_url":"https://api.github.com/users/scipy-conference/orgs","repos_url":"https://api.github.com/users/scipy-conference/repos","events_url":"https://api.github.com/users/scipy-conference/events{/privacy}","received_events_url":"https://api.github.com/users/scipy-conference/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scipy-conference/scipy_proceedings","description":"Tools used to generate the SciPy conference proceedings","fork":false,"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings","forks_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/forks","keys_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/teams","hooks_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/hooks","issue_events_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/events{/number}","events_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/events","assignees_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/assignees{/user}","branches_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/branches{/branch}","tags_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/tags","blobs_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/refs{/sha}","trees_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/{sha}","languages_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/languages","stargazers_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/stargazers","contributors_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/contributors","subscribers_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/subscribers","subscription_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/subscription","commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/commits{/sha}","git_commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/commits{/sha}","comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/comments{/number}","issue_comment_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/comments{/number}","contents_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/contents/{+path}","compare_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/merges","archive_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/downloads","issues_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues{/number}","pulls_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls{/number}","milestones_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/milestones{/number}","notifications_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/labels{/name}","releases_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/releases{/id}","created_at":"2011-05-31T10:26:48Z","updated_at":"2015-06-22T07:22:47Z","pushed_at":"2015-06-30T18:12:43Z","git_url":"git://github.com/scipy-conference/scipy_proceedings.git","ssh_url":"git@github.com:scipy-conference/scipy_proceedings.git","clone_url":"https://github.com/scipy-conference/scipy_proceedings.git","svn_url":"https://github.com/scipy-conference/scipy_proceedings","homepage":"","size":155374,"stargazers_count":76,"watchers_count":76,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":142,"mirror_url":null,"open_issues_count":38,"forks":142,"open_issues":38,"watchers":76,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141"},"html":{"href":"https://github.com/scipy-conference/scipy_proceedings/pull/141"},"issue":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/141"},"comments":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/141/comments"},"review_comments":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141/comments"},"review_comment":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/141/commits"},"statuses":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/8e3b53d01ab7f662e6cd905fb380e857c9cb1752"}}}}