Building on the Force Directed Network Graph

Getting the force directed graph functional in d3 was a good start, but it clearly needs some tuning up.


For starters, the uniform fill color needs to be changed. Network graphs are interesting visualizations but mean very little without some differentiation between the nodes. Mapping the degree value to the node size expresses one dimension of this information, but there is a lot more information to be expressed and color is one of the simplest and notable ways to do so.

Color scales are simple to create in d3; it’s simply a matter of taking one of d3’s built in scale functions and mapping colors to the scale’s range, like so:

Var colorScale = d3.scaleOrdinal()



Colors are expressed as an array of “bins” to be matched to the values in the domain. The colors can then be called when the objects are drawn.

In the case of this network graph, I wanted to use a color scale to represent the annual budget of each node’s parent organization. The animal rights movement is championed by several organizations with budgets that far exceed that of other organizations, and this information might be interesting to compare to their presence at the animal rights national conference (Do larger organizations have some clout that bolsters their presence at these events? Does the sheer breadth of smaller organizations obfuscate their participation).

In this case, I decided to use a quantized scale to partition the Organization Budget values in 9 domains. A continuous scale may also be fitting, since Budget is a continuous variable, however if the intention is to visually describe similarity or difference between nodes using color, many different shades of many different colors may obfuscate larger trends in the data.
Quantize scales are somewhere in between ordinal and linear scales in the d3 library. Whereas ordinal scales create “bins” based on (typically) nominal or categorical variables, quantize scales take a continuous variable and partition it into equal, discrete “bins” bound to a given domain; in this case




The tooltips were then appended to include the actual Organization Budget of each node, pulled from the row of the nodes dataset while the circles are being drawn.

Another prominent issue with the visualization is that the node x and y positioning is not currently bound to the width and height of the svg canvas. As a result, some nodes fly out of the visual bounds and are not visible to the user. D3 creator Michael Bostock has a proposed solution here, however implementing this in my own code has proven problematic. The gist is that, when the x and y coordinates are pulled, the library is told to put the nodes within the range of [radius, cavaswidth-radius] for the x coordinate, and the range of [radius, canvasheight-radius] for the y coordinate.

The reason the code seems to be breaking is that the variable radius, as it appears in Bostock’s code, is a set integer, whereas in my code, radius is a function of the node’s degree centrality value. In trying to call the variable radius, my code is trying to look for a value that isn’t present in the current data which is being built by the force function. As such, I set an arbitrary value of 20 in place of Bostock’s use of radius.

The result is a graph that still fits the bounds of the box and has a bit more of a visual distinction between the types of nodes. Pretty cool! A key still needs to be implemented to explain what the colors actually mean, of course. Another concern is that the nodes still gravitate towards one another quite arbitrarily, rather than the nice subgroups that are emblematic of network graphs. This week I plan to take a deeper dive into the d3.force function to see how these forces can be used to replicate such results.


Data mapping and iterating in D3: The 3 week Stacked Bar Graph Experiment

One phrase that comes up in most of the Stack Overflow threads I’ve seen (which is a lot; I think Stack Overflow has become my visited website since starting this course) is “the d3 way of doing things”.

The name of the game in D3.JS is array manipulation. Most if not all d3 functions, follow a similar format; tell d3 what html element to look at, tell d3 to use some array, iterate over said array and create a new html element for each entry.

This is the double edged sword of using d3. On one hand, this eliminates most of the need to create iterative javascript functions to use your dataset. A typical iterative may look something like

Function(d,i) {

For I in d, i>=0, I == i

Return d.somevalue

I = I + 1


Whereas in d3, the heavy lifting is done within the library. So telling d3 to iterate over some data is as simple as This also means that creating classes of objects with the same/similar properties is incredibly simple. For example, for a simple bar chart, appending x positioning or bar height is as simple as

myGraph.selectAll("rect")//Tell d3 to look at all "rectangles"
.data(myData)//Tell d3 what datasset to iterate
.enter().append("rect")//Put in rectangles if there aren't any
.attr(“height”, function(d) { return d.y}
.attr(“width”, function(d) { return d.x}

With d3 doing the task of iterating over the array and generating bars for each row of your data.

Where this gets hairy, however, is that d3 itself like creating arrays. And it likes creating arrays from your arrays. And then arrays of those arrays from your array.

Enter my tumultuous relationship with the d3.stack function. D3.stack is a function that slices an input array based on a key that the user provides and assigns y values so that values can be compared vertically across comparison groups. So, for example, if your data has a categorical variable that you would like to use for analysis, you could instruct d3 to create subarray of values for each other variable of interest separated by those categories. So something like

Var ageBands = [“Control”,”Experiment”]

Var stack = d3.stack(myData)


Would return two arrays, one for the control group and one for the experimental group, with subarrays for each other variable in the data.

D3.stack underwent some interesting changes in the migration from version 3 to version 4. The version 3 stack function would output individual rows for each other variable with y0 and y values representing the start and end y position of each bar in the “stack”.

0: [

{x: control, y0:0 , y:12}

{x: control, y0:0, y:20}

{x: control, y0:0, y:3}


1: [

{x: experiment, y0:12, y:

In version 4, however, new variables are not defined. The y0 and y values are represented by further subarrays of two values each, like this:

0: [




Key: control


1 : [

[12, 24]





Additionally, each subarray has yet another array that contains the original data for that row. The nest array certainly makes for a more parsimonious and readable solution, however calling this information can become more problematic. Instead of accessing some value in a given array, the array has to be called via a function and then entries from the subarrays using code such as

.attr("height", function(d){ return d[0][0] - d[0][1]})

The nesting ultimately saves a lot of processing time, but takes a little getting used to, especially when the majority of resources on the internet, including d3’s API, cite examples using the old .stack() format.

So after three weeks of tinkering, this is what I’ve ended up with. No bells and whistles (yet), but everything displays where it should! In the javascript you can see the calls for the bar structures, as well as some broken tooltip code (which I am hoping to address today). The data comes from this study conducted by Faunalytics investigating the motivations, dietary habits, and recidivism among current and former vegans and vegetarians. Mean values were calculated using descriptive statistics functions in SPSS 24 and then written into the array manually.

New Goals for the Stacked Bar Chart Project

Tooltips are obviously the biggest missing piece here. The stacks themselves mean very little without the actual percentages. Another option would be to append text in the center of each bar with the percentage displayed, however I also don’t want too much visual information cluttering the visualization.

Axis labels are another concern, in the same vein. As of right now, the X-axis label is pulled from the variable names from the original dataset, and give very little contextual meaning about what those variables are supposed to represent. This is something I also considered addressing using tooltips, because of the limited space to write full descriptions along the axis.

There are other quality-of-life updates I would like to do with this code, however these are the big ones for right now.


Force Directed Network Graphs in D3

Network analysis is a unique theoretical and methodological approach to sociology that I happened to stumble into last semester. At its most basic, network analysis can help us understand networks not just in terms of who is the most connected, but who helps connect disparate parts of a network, who is closest to the most important actors in a network, and who gets shafted in the network. It ticks a lot of boxes for me; it’s quantitative, it generates a lot of hypotheses for future research projects, and most importantly, the visualizations are just really pretty.

I started toying with D3’s .force functionality shortly after the start of the course, with mixed results; chiefly because I hadn’t mastered the art of drawing SVG objects, let alone applying forces telling them where to situate themselves.

WordPress isn’t always the friendliest when it comes to embedding iframes, but a sample of what I’ve got running can be found on JSFiddle. The code itself is fairly standard; nodes are pulled from a csv list and drawn as circles with varying radii based on their degree values. Links are pulled from another csv list and drawn as lines between the circles. This is a fair start, and this visualization has some basic functions like mouseover tooltips to see who each circle represents. It can be taken a lot further, though.

For starters, the forces drawn here are completely arbitrary. I basically started with a force that would draw everything to the middle of the svg “canvas”, then created two forces to represent repulsion and attraction and stopped once I found a combination of variables that didn’t look atrocious. It would be cool to crack open the d3-force functions a little further and try to program some recognized graphing algorithms such as Yifan Hu’s popular algorithm.

Secondly, nodes are entirely indistinguishable from one another. One idea I had been playing around with was adding image url’s for each node’s organization logo to the original csv, and then assigning those url’s to the svg’s when drawn. This presents some issues considering the size discrepancy between nodes. This method could still be implemented by adding the organization’s logo to the tooltips and creating an ordinal color scale to distinguish different types of organizations.

Thirdly, the tooltips are about as meat and potatoes as you can get. A rectangle with some text. The logo’s would be a nice touch, but it would be interesting to see how d3’s onmouseover and transition functions can be used to create something snappier or more presentable; perhaps a rectangle that draws itself to size out of the cursor’s tip, or a box that wipes horizontally on mouseover to reveal the tooltip.


In Bad Company: SNA as a tool for analyzing ‘dark’ networks

The term homophily pops up frequently in conversations regarding network analysis. Homophily, most simply, is a pithier way of saying “birds of a feather flock together”. While last week we investigated some of the more positive aspects that can be shared through networks, such as happiness or a sense of belonging, sometimes the company we keep is not as uplifting.

A great example of SNA’s applicability can be seen in the realm of hacking and other cybercrimes.  The proliferation of online networks exemplifies this shift from large, hierarchical crime structures to more disconnected pockets of actors. As such, the question that criminologists face is how to target high-profile actors that could disrupt the actions of these decentralized networks. In 2012, researchers from the University of Montreal set out to examine SNA’s ability to do just that. As the authors note, the sheer volume of manpower and resources involved in uncovering cybercrimes makes investigating every individual actor a wholly impractical endeavor. As such, these researchers wanted to use social network analysis not only to quantify the relationships between cybercriminals, but also see if the methodology could identify any persons of interests that investigators may have missed.

Using stored chat logs obtained from the hard drives of convicted hackers, one-on-one conversations were used to construct connections between 771 hackers. These connections were used to determine who among these actors would be considered persons of interest (in this case, defined as persons who were contacted by two or more of the convicted hackers from which the data was obtained).  The final network of hackers and POI constituted 38 actors out of the original sample. For these actors, degree and betweenness centrality measures were calculated to determine who among them was being consulted for their expertise, or who was providing avenues for communication between actors.

In the above figure, red nodes represent convicted hackers, whereas blue nodes represent POI (Décary-Hétu, D.& Dupont, B. 2012)

The above figure represents their final network. Their findings illustrate that this intimate network of hackers and POI are all likely to be in contact with one another, however this finding also implies that the 28 hackers who scored highly on these centrality measures could be just as influential as those that were convicted. This means that although the 10 arrests made were accurately targeted towards prominent actors, and their removal effectively disrupted communication within the network, targeting some of these POI may have done so even more effectively. As the authors put it, “the nail that sticks out gets hammered down.” What is notable, however, is that SNA measures were able to accurately identify those convicted as high profile actors with relative ease, as well as identify a myriad of other actors for further investigation.  The use of social network analysis could help lighten the monetary and cognitive load that more mainstream methods of online investigation may incur.

Just as social network analysis can help characterize the nature of these crime networks, it can also help elucidate the widespread nature of seemingly individualistic crimes. For example, to say that corruption is prominent within the United States Congress is not a contentious point, however how do we determine the magnitude of this corruption? Do congressman commit acts of corruption in solitude, or is there a more overarching culture of corruption in congress?

The 109th House was particularly damning, with three congressman being sentenced for taking bribes from PACS. Though taking money from PACs is obviously not illegal in and of itself, the Federal Bribery Statute clarifies that funding that influences lawmaker voting is seen as a criminal act. Following these indictments, several theoretical explanations arose; some argued that this was a case of a few bad apples who happened to be on the wrong side of the law; others argued that this was a partisan issue, considering all three congressman were Republicans; the majority of the American public, however, theorized that Congress was a wholly corrupt institution.

To test each of these theories, authors Clayton Peoples and James Sutton wanted to illustrate just how much PAC contributions had on voting behavior across all members of congress. In their own words, “is there a statistically significant general effect of shared PAC contributors on vote similarity among pairs of lawmakers in the 109th U.S. House, controlling for other factors?” By investigating relationships rather than individual behavior, their analysis would simultaneously address all three of the proposed “theories” about the prevalence and nature of corruption in congress. In order to quantify these relationships, the researchers turned to SNA.

The authors employed social network analysis in its strictest form. Dyadic ties between congressman were drawn based on their shared attributes in order to view relationships between congressman as units of analysis. Relationships such as party affiliation, shared committee membership, and most importantly shared PAC contributors, were calculated using matrices of dyadic ties. Then, using regression analysis, they controlled for most of these relationships, isolating shared PAC contributions as their independent variable.

Their findings were frightening, to say the least. They illustrated that, across the board, shared PAC contributions played a statistically significant role on the voting habits of lawmakers. An important note is that PAC contributions played a far more significant role than shared committee membership or memberships based on state; the authors use this to discern voting that could constitute a “bribe”, rather than votes that would have occurred with the interest of constituents in mind. This finding was consistent across party lines, decrying the notion that corruption was a purely Republican issue. Through the use of social network analysis, the researchers were able to illustrate that bribery, though typically defined as an individual act, could be a part of a larger network of collusion and institutional corruption that should be investigated as such. Given that these actions seemed to be normalized practice in the 109th congress, we can safely say that this was not the case of a few bad apples; as Décary-Hétu and Dupont put it, it was just the nail that stuck out that got hammered down.



Raiding Alone: Clerics, Cliques, and K-Cores


Would we still engage in the activities we loved, even if we had to go it alone? The theoretical of backbone of network analysis suggests that without bonds, we may not even  But is it the actual bonds that we desire, or just the comfort that they’re there if we need them?

This is the question that researchers from the Virtual Human Interaction Lab at Stanford University sought to answer in 2006 using a rather fantastical sample; users of the online multiplayer roleplaying game World of Warcraft. Blizzard Entertainments’ World of Warcraft is a title that has become synonymous with basement dwelling, Dorito dust encrusted shut-ins, and is perhaps the most prominent in a long line of massive multiplayer games that exist at the impasse of extreme isolation and infinite connectedness. MMO’s (massive, multiplayer online games) are often touted as an opportunity for otherwise isolated individuals to foster sociability on a digital plane, although stories of users dying during 19-hour play sessions and built in pizza ordering commands understandably put these claims into question. As the Stanford researchers themselves observe This group of researchers wanted to investigate the social structures that existed on World of Warcraft servers to understand how important the “social factor” of the MMO played into its popularity and proliferation.

Rather than using self-report information like surveys or interviews, Ducheneaut et. al used WoW’s built in console commands to gather information on all players on a given game server in real time. WoW’s “/who” commands presents a list of all online users playing on the same server as the client. Using this method, the researchers were able to create a census of WoW’s player-base in realtime, collecting player information including their class, level, playtime, and guild affiliations every 5 to 15 minutes.

Their findings paint a picture of a player base that was relatively sparse; that is, the total number of connections between users is only a small percentage of the total possible number of connections. Most users are not connected to one another, although that is not uncommon with a network of WoW’s size. The data also demonstrates considerable discrepancies between users’ play styles. The class that users chose to play, for example, had a considerable impact on their group activities in game; users who played the role of the Priest, whose toolkit includes support and healing based skills, spent about 7% more of their play time in groups than classes like Hunters or Warriors, whose offensive skills made playing the game “solo” more of an option. Interestingly, the authors also note that these more “soloable” classes are more popular within the game.

This doesn’t mean that teamwork is completely absent, however. The analysis also found that as players attained higher and higher levels within the game, they began to spend the majority (>50%) of their time playing in groups. This finding is particularly interesting considering players that spent less time in groups attained higher levels faster; that is, people were more likely to group up even if it was counter intuitive to the “goal” of the game. It could be that lower level players or newer players tend to gravitate towards these offensive classes and spend less time in groups, skewing the distribution.

What is particularly telling in this research is the sparsity of relationships within guilds. Guilds are user-run groups within World of Warcraft that typically work within the game towards common goals. Despite the nature and purpose of guilds within the game, it is unlikely that all members of the guild will interact with one another. As guild size grows it becomes less and less likely that two guilds members will be playing WoW together.  The researchers observed that within guilds of all sizes, subgroups of players emerged between their most active members. To analyze these subgroups, the researchers performed a k-core composition for each guild.

K-core decomposition is a process of identifying subgroups within networks. Each “core” identifies groups of players that are adjacent to k members within the guild; for example, a 6-core decomposition would encompass all members of the guild that have interacted with at least 6 other guild members. Using this technique, they observed that the size of the most active subgroups of players decreases as guild size increases. A large guild, therefore, may have hundreds of member players, but only a select few would actively be playing with one another often and for prolonged periods of time.

An example of a typical medium sized guild within World of Warcraft. A clear core of key players can be seen at the center who maintain a high degree of connectedness within the group. The thickness of the lines drawn between players represents amount of time played together (Ducheneaut, N. ; Yee, N. ; Nickell, E. ; Moore, R. J., 2006).
















John Carpenter, Sociologist

I came here to discourse civilly and chew bubblegum…and I’m all out of gum.

John Carpenter’s 1988 film They Live is memorable for many reasons; firstly, it memorializes a place in time in popular culture when an iconic wrestler could get a leading role in a horror movie. It also features one of the most oft-quoted lines in movie history. What has solidified its place as a cult classic, however, is its timeless commentary on the media as a corporate tool, limiting public discourse and encouraging civil complacency.

As much as it pains me to say it, John Carpenter will not be remembered as a poignant sociological theorist. A year later in 1989, sociologist Jurgen Harbermas would expound on similar concepts in his piece The Structural Transformation of the Public Sphere: An Inquiry into a Category of Bourgeois Society (the piece itself was first published in 1962, but was translated into English in the late 80’s). Habermas described the emergence of a space between private life and political powers, which he coined the Public Sphere, where individuals could come together to freely discuss and identify social problems. First emerging in the 18th century with the collapse of feudal structures, Habermas viewed the public sphere as an arena for individual opinion to evolve into public opinion, free from the influence of government entities.

In a perfect democratic society, according to Habermas, media such as newspapers would serve as a conduit through which the public opinion would proliferate; the media could allow for asynchronous discussion of public issues, and allow for more than just the wealthy and educated to engage in these debates. As it stands, however, the movement from simple media to mass media instigated the “re-feudalization of the public sphere”; participation of the masses has become commodified, and political discourse displaced by entertainment and consumerism. As media proliferates, it becomes less about communicating public opinion, and more about shaping it.

“Editorial opinions recede behind information from press agencies and reports from correspondents; critical debate disappears behind the veil of internal decisions concerning the selection and presentation of the material.”

Habermas, The Structural Transformation of the Public Sphere

Habermas’ deductions may paint a grim picture regarding the public sphere and open discourse, others say the public sphere has moved, and perhaps grown, beyond the printed page. Sociologists such as Manuel Castells argue that the public sphere isn’t eroding, but has merely shifted to a global scale rather than a local one. For Castells, public society is not just a venn diagram between the private sphere and government entities, but a network society, in which information is processed and managed using digital technologies. In a network society, individuals are not reliant on institutions to obtain information, and can engage remotely to influence the political sphere.

Castell’s theory is corroborated by a body of work focusing on the counter-public sphere, in which marginalized communities can organize around their shared identities. Drawing on Antonio Gramsci’s theory of hegemony, counter-public spheres help form political opinion by allowing the marginalized to reframe what it means to be “hegemonic”. One example of the counter-public sphere in action can be seen in the case of Oscar Grant. Grant was shot and killed by Bay Area Transit officers in 2009, when an officer claimed that he thought he intended to fire his taser. Following the incident, videos were uploaded to Youtube, inciting public outrage and demonstrations (x). Using digital media, the witnesses were able to capture the attention of many beyond the scope of the Bay Area, turning an event witnessed by a few individuals into a public discourse.

Perhaps Habermas, and John Carpenter, are correct in lamenting the commercialization of the media. However the public sphere is not dying; it is thriving. New media has moved political opinion beyond the scope of the town pub and onto a digital stage. Digital networks allow the marginalized to create new organizational structures that go beyond the hegemony they experience on a daily basis, reframing public opinion beyond that which is portrayed in popular media. Moreso, a digital network society allows for a public opinion that can put pressure on the political sphere from beyond the walls of a town hall. And in the event that the ruling class is in fact a race of aliens bent on subduing the masses, maybe we can revisit John Carpenter’s theory.


Being Good at Doing Good: Collaboration, Citation, and Co-Authorship Amongst Animal Welfare Organizations

“Nothing can possibly be conceived in the world, or even out of it, which can be called good without qualification, except a good will.”

Immanuel Kant

That an innate desire to do good necessarily translates into effective outreach is not a given. Despite our best efforts, sometimes even our best intentions can have unintended consequences. Although there are innumerable cases of do-gooders-gone-awry, the case of PlayPumps comes to mind.

PlayPumps is a water solution system intended to replace arduous hand water pumps in African villages with Merry-go-Rounds that utilize the motion of the device to draw water. The design won a number of grants and sponsors to aid in its implementation and was widely hailed for its innovation.

Shortly after their instillation, however, PlayPumps weren’t putting the “fun” in “functionality” as initially hoped. Children found playing on the devices exhausting, and women in the villages often ended up churning the giant wheels by hand. When they broke, the cumbersome machines were often more costly to repair or replace than the original water pumps, and mechanically speaking generated less energy, and therefore less water, than the original devices. Ultimately, many villagers said they preferred the older method, and slowly the gaudy merry-go-round devices have either been replaced or lay dormant (x).

With non-profits and other altruistic endeavors, which stake their livelihood on putting on a good face, how can we see through the veneer and make sure they are doing the best possible job? Looking inward, how can these organizations evaluate their own methods to improve? And how often do they consult their peers who are working towards the same goal? In an attempt to answer these questions, I looked toward a movement close to my heart; animal welfare and animal activism.

Internal Research and The Animal Welfare Movement

Particularly in the United States, the animal welfare movement is a mixed bag of both long-established organizations and a crop of fledgling organizations that have quickly come to the forefront of the movement. Many of these newer organizations have their own internal research branches to evaluate their outreach interventions, however collaboration between groups is not well documented to say the least. Evaluative research has been done on a myriad of outreach interventions, such as corporate outreach, undercover investigations, leafleting, online ads, and humane education presentations (x). Most of this research, however, is conducted internally; the data is available, but only for those ready to spend hours mulling through obscurely linked research reports. Some organizations site academic pieces in psychological or philosophical journals to justify their interventions on their more public reports (x), however they are not as forthcoming with their citations of other animal welfare organizations.

Animal welfare organizations share many philosophical underpinnings with the effective altruism movement, a pseudo-utilitarian backbone that emphasizes highly effective activism and a commitment to ongoing research. Not all organizations share this mentality, however; Animal Welfare, “with a capital A”, is an umbrella which encompasses many smaller organizations with much more niche goals, such as humane societies, animal testing and vivisection, and wild animal rescue and shelter. In keeping with this dedication to maximizing outreach effectiveness, and focusing on organizations that would be the most likely to engage in collaborative efforts, I will not be including these more niche organizations in my analysis. My focus will be on organizations that emphasize general animal rights, industrial agriculture, general animal welfare, legal and legislative change, and metacharities, or charity evaluators.

My network analysis will investigate citation, collaboration, and coauthorship habits among animal welfare organizations in the United States. Particularly, this piece will investigate how these organizations are connected in regards to developing new interventions for effective advocacy. Using backlink tracking and html parsing of animal welfare organizations’ research publications and annual reports, I want to investigate which organizations collaborate or cite each other the most in evaluative research projects to create more effective outreach interventions.

This graphic from represents its three highest ranks charities based on internal research, cost effectiveness, and innovative strategies. How likely are they to collaborate?


Data Collection

Initial research findings and annual reports were found from prominent animal welfare organizations using Animal Charity Evaluators’ Research Library. Animal Charity Evaluators’ research library comprises thousands of publications from organizations both in the Animal Welfare mainstream, but also academic journals on the periphery, so the search criteria required some refining. Using the site’s built in search functionality, publications were able to be refined to fit three main criteria; pieces published by animal welfare organizations, pieces published in the past ten years, and pieces that focused specifically on outreach techniques and interventions. This initial search yielded 25 publications from 21 different Animal Welfare Organizations. These publications will be parsed using the BeautifulSoup Python Library to help find hyperlink connections to other organizations. This initial search and first round of hyperlinks constitutes the original sample.

Next, backlinks will be traced between this first sample of organizations and organizations that cited/collaborated on these projects. Using an online backlink search engine, edges can be drawn between . Backlinks are used commonly to construct web based network analyses, particularly in research pertaining to knowledge and coauthorship networks (x)(x)(x). Organizations that were found through backlink tracing were added to the network sample as nodes. This procedure will then be repeated for organizations found through backlinks, creating a two-stage snowball sample.

Source and Target nodes will be manually compiled into a csv formatted edgelist to be plotted, cleaned, and analyzed using the NetworkX Python library. Graph data will then be imported into Gephi for visualization.

Like any other social movement, animal rights and the organizations at its forefront are trying to answer a difficult question; how do we get people to care? It is a psychological, and ultimately deontological question so elusive that it cannot hope to be answered alone. Ultimately, the aim of this research isn’t to answer that difficult of a question, or provide a catch-all solution to creating a perfectly unified animal rights front. My goal, using network analysis as my backdrop, is to help these groups answer more organizational questions; who else cares about what we care about? And how could we be working together?




Making Sense of Node Centrality Measures, or Finding Out What’s What to find the Who’s Who

When performing social network analytics, regardless of discipline, it is important to understand the question you are asking before you start combing for data. With data analytics tools like NumPy and NetworkX, you may find yourself computing four centrality measures because it’s easy and available, but end up with twice as many values to scratch your head over. The difference between some centrality measures may seem subtle, but knowing which to use for your research question could save you from a lot of headaches at the hands of your colleagues or IRB.

Degree centrality, for example, is the easiest to understand and compute of any centrality measure; for that reason it may seem appealing for your research. Entire social network analytics tools are built on the presumption that more connections = better, or more prestigious, or more influential. This may not always be the case in regards to identifying internet network structures. Degree centrality may be helpful for identifying the Sean King’s in your network, however it could also be responsible for finding the SpamBot78887’s and Lil B’s.

Consider this forthcoming article by Hyat et. al which investigates gendered discourse patterns in online social networks. By scraping demographic information, friendship networks, and forum activity from 21,000 of MyMarker Cafe‘s members, the authors sought to investigate the role of gender in shaping the structure of online discussion boards. The authors determined that men had a higher mean degree centrality value than women, and were more likely to start threads than women. However, women were more likely to make connections through their comments on other threads, and their posts were often held in higher regard by other users than those of their male counterparts.

Hyat et. al, 2017. The authors distinguished between friendship ties and activity ties. Men exhibited higher overall degree centrality values, however women were more likely to make ties through the activity network.

The authors concluded that men still dominated discourse on MyMarker Cafe. However, if their posts weren’t as popular, and women were more connected to active participants, does degree centrality tell the whole story? Do women connect to more prominent users, making Eigenvector centrality a more appropriate measure? Does their level of activity put them at the heart of the network, making closeness centrality a better measure? Degree centrality might give a pithier answer to their research question, but in this case might not be showing the whole picture.

A better example of centrality-done-right can be seen in a 2016 article investigating floodplain management efforts in the Netherlands. Using social network analysis, Fliervoet et. al set out to investigate collaborative efforts between government organizations and local NGO’s. The data encapsulates two networks: flood protection groups and nature preservation groups, both of whom’s interests intersect at the floodplains. The authors calculated both degree centrality and betweenness centrality measures in their data analysis. As the authors hypothesized, degree centrality values were higher among government organizations than NGO’s. However, betweenness centrality tells a much more interesting story. Certain governmental organizations serve as liaisons between both networks, which were otherwise loosely connected. These organizations displayed similar degree centrality values to other governmental organizations, but in the context of the research played a much more important role: they encouraged collaboration between public groups.

Social Network Analysis techniques are valuable because they allow us to investigate dynamic relationships within a network. As researchers, we need to make sure our methods are just as dynamic in order for our analyses to be as accurate as possible.



Do we Like Bowling, or Just the Idea of Bowling?


Social Capital is a concept spanning a plethora of social sciences that is as elusive as it is salient. At its most basic, it is the idea that individuals engage in social interactions in the hopes that it will be beneficial for them (Lin, 1999). We believe that being embedded in a network or group will net us a certain amount of resources; whether information, influence, or a sense of identity; that we could not achieve on our own.  It is operationally similar to Gronvetter’s “Strength of Weak Ties” theory in network analysis; by virtue of developing these new connections and abiding by the norms and expectations of the group, we might expect the social capital we accumulate in these networks to help us land a new job because we “know a guy”, or mobilize our place as a part of the whole to influence legislation. We may even be able to level the playing field against powerful elites in the political arena.

For most interested in the subject (if the literature is any indication), social capital is a phenomenon that is a keystone of civil society. Pieces like Robert Putnam’s Bowling Alone (1995) lament the decline in social capital, citing dropping PTA participation and unionization rates as signs of declining civic engagement.  Some network analyses lend creedance to this sentiment, citing instances of social capital working as a harbinger of more balanced class relations and better governance. Others purport that federalist government structures are ideal because they encourage the production of social capital.  In all these cases, it is the ability of community members to have a dense, far reaching social capital network that benefits the greater good.

Despite these findings, not all analyses of social capital can end in stories of David conquering Goliath. The same unifying principles help explain these idealistic stories of collective action can just as easily explain the seedier side of social organization. The insular nature of dense social networks could cause them to become exclusive and unwilling to accept outsiders. Uneven distribution of capital may cause individuals at the center of these networks to impose group norms and form elitist, or even criminal, power structures (Tores, 2002).  Take, for example, the presence of alt-right supporters on twitter; according to network and textual analysis performed by New Knowledge, this online network is densely connected and encompasses at least 9 identified sub-groups. Members at the center of this network can act as bridges between their group and the larger alt-right circle, which textual analysis suggests is causing the network as a whole to become more radicalized.

A network graph depicting the network structure of 27,000 alt-right supporter twitter accounts. Node coloring denotes association with a different subgroup within the network. Retrieved from


Social capital, as fraught and divided as the literature may be, is ultimately just a concept; and a relatively underdeveloped one, at that. It is neither benevolent nor vengeful, and perhaps what the literature describes as social capital activation says more about the theoretical dispositions of the researchers than the concept itself.

Privacy Statement