Skip to content

Instantly share code, notes, and snippets.

@PaladhiDinesh
Last active March 19, 2016 00:32
Show Gist options
  • Save PaladhiDinesh/617c3ef60a692d2f972a to your computer and use it in GitHub Desktop.
Save PaladhiDinesh/617c3ef60a692d2f972a to your computer and use it in GitHub Desktop.
Webscience Assignment Week-6 Q3

Using D3, create a graph of the Karate club before and after the split.

import sys
import json
from bs4 import BeautifulSoup
input_file = open('karate.GraphML','r')
output_file = open('karate.json','w')
soup_data=BeautifulSoup(input_file)
#print soup_data
elements={}
edge_elements={}
output_file.write('{\n "nodes": [\n')
for node in soup_data.find_all('node'):
node_data=dict(node.attrs)
#print node_data
id=node_data['id']
id_val=int(id.strip('n'))
#print id
#print id_val
faction,name = node.find_all('data')
faction_val=faction.contents
name_val=name.contents
elements['id']=id_val
elements['faction']=int(faction_val[0])
elements['name']=str(name_val[0])
#print count
output_file.write(json.dumps(elements)+',\n')
if(id_val == 33):
output_file.write('],\n')
break
output_file.write('"links": [\n')
for edge in soup_data.find_all('edge'):
edge_data=dict(edge.attrs)
edge_src=edge_data['source']
edge_src_Val=int(edge_src.strip('n'))
edge_target=edge_data['target']
edge_target_Val=int(edge_target.strip('n'))
weight = edge.find('data')
weight_val=int(weight.contents[0])
edge_elements['source']=edge_src_Val
edge_elements['target']=edge_target_Val
edge_elements['weight']=weight_val
output_file.write(json.dumps(edge_elements)+',\n')
if(edge_src_Val == 32):
output_file.write(']\n}')
break
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.node {
stroke: #999;
stroke-width: 2.1px;
}
.link {
stroke: #999;
stroke-opacity: 1.6;
}
</style>
<body>
<div id="option1">
<input name="split1" type="button" value="Before the split" onclick="beforesplit()">
</div>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var width = 900,
height = 600;
var color = d3.scale.category20();
var force = d3.layout.force()
.charge(-400)
.linkDistance(10)
.size([width, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("karate.json", function(error, graph) {
if (error) throw error;
force
.nodes(graph.nodes)
.links(graph.links)
.start();
var link = svg.selectAll(".link")
.data(graph.links)
.enter().append("line")
.attr("class", "link")
var node = svg.selectAll(".node")
.data(graph.nodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", 5)
.call(force.drag);
node.append("title")
.text(function(d) { return d.name; });
force.on("tick", function() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});
});
function beforesplit()
{
d3.selectAll('.node').style("fill", function(d) { return color(); })
}
function aftersplit()
{
d3.selectAll('.node').style("fill", function(d) { return color(d.faction); })
}
</script>
<div id="option">
<input name="split" type="button" value="After the split" onclick="aftersplit()">
</div>
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<!-- Created by igraph -->
<key id="name" for="graph" attr.name="name" attr.type="string"/>
<key id="Citation" for="graph" attr.name="Citation" attr.type="string"/>
<key id="Author" for="graph" attr.name="Author" attr.type="string"/>
<key id="Faction" for="node" attr.name="Faction" attr.type="double"/>
<key id="name" for="node" attr.name="name" attr.type="string"/>
<key id="weight" for="edge" attr.name="weight" attr.type="double"/>
<graph id="G" edgedefault="undirected">
<data key="name">Zachary&apos;s karate club network</data>
<data key="Citation">Wayne W. Zachary. An Information Flow Model for Conflict and Fission in Small Groups. Journal of Anthropological Research Vol. 33, No. 4 452-473</data>
<data key="Author">Wayne W. Zachary</data>
<node id="n0">
<data key="Faction">1</data>
<data key="name">Mr Hi</data>
</node>
<node id="n1">
<data key="Faction">1</data>
<data key="name">Actor 2</data>
</node>
<node id="n2">
<data key="Faction">1</data>
<data key="name">Actor 3</data>
</node>
<node id="n3">
<data key="Faction">1</data>
<data key="name">Actor 4</data>
</node>
<node id="n4">
<data key="Faction">1</data>
<data key="name">Actor 5</data>
</node>
<node id="n5">
<data key="Faction">1</data>
<data key="name">Actor 6</data>
</node>
<node id="n6">
<data key="Faction">1</data>
<data key="name">Actor 7</data>
</node>
<node id="n7">
<data key="Faction">1</data>
<data key="name">Actor 8</data>
</node>
<node id="n8">
<data key="Faction">2</data>
<data key="name">Actor 9</data>
</node>
<node id="n9">
<data key="Faction">2</data>
<data key="name">Actor 10</data>
</node>
<node id="n10">
<data key="Faction">1</data>
<data key="name">Actor 11</data>
</node>
<node id="n11">
<data key="Faction">1</data>
<data key="name">Actor 12</data>
</node>
<node id="n12">
<data key="Faction">1</data>
<data key="name">Actor 13</data>
</node>
<node id="n13">
<data key="Faction">1</data>
<data key="name">Actor 14</data>
</node>
<node id="n14">
<data key="Faction">2</data>
<data key="name">Actor 15</data>
</node>
<node id="n15">
<data key="Faction">2</data>
<data key="name">Actor 16</data>
</node>
<node id="n16">
<data key="Faction">1</data>
<data key="name">Actor 17</data>
</node>
<node id="n17">
<data key="Faction">1</data>
<data key="name">Actor 18</data>
</node>
<node id="n18">
<data key="Faction">2</data>
<data key="name">Actor 19</data>
</node>
<node id="n19">
<data key="Faction">1</data>
<data key="name">Actor 20</data>
</node>
<node id="n20">
<data key="Faction">2</data>
<data key="name">Actor 21</data>
</node>
<node id="n21">
<data key="Faction">1</data>
<data key="name">Actor 22</data>
</node>
<node id="n22">
<data key="Faction">2</data>
<data key="name">Actor 23</data>
</node>
<node id="n23">
<data key="Faction">2</data>
<data key="name">Actor 24</data>
</node>
<node id="n24">
<data key="Faction">2</data>
<data key="name">Actor 25</data>
</node>
<node id="n25">
<data key="Faction">2</data>
<data key="name">Actor 26</data>
</node>
<node id="n26">
<data key="Faction">2</data>
<data key="name">Actor 27</data>
</node>
<node id="n27">
<data key="Faction">2</data>
<data key="name">Actor 28</data>
</node>
<node id="n28">
<data key="Faction">2</data>
<data key="name">Actor 29</data>
</node>
<node id="n29">
<data key="Faction">2</data>
<data key="name">Actor 30</data>
</node>
<node id="n30">
<data key="Faction">2</data>
<data key="name">Actor 31</data>
</node>
<node id="n31">
<data key="Faction">2</data>
<data key="name">Actor 32</data>
</node>
<node id="n32">
<data key="Faction">2</data>
<data key="name">Actor 33</data>
</node>
<node id="n33">
<data key="Faction">2</data>
<data key="name">John A</data>
</node>
<edge source="n0" target="n1">
<data key="weight">4</data>
</edge>
<edge source="n0" target="n2">
<data key="weight">5</data>
</edge>
<edge source="n0" target="n3">
<data key="weight">3</data>
</edge>
<edge source="n0" target="n4">
<data key="weight">3</data>
</edge>
<edge source="n0" target="n5">
<data key="weight">3</data>
</edge>
<edge source="n0" target="n6">
<data key="weight">3</data>
</edge>
<edge source="n0" target="n7">
<data key="weight">2</data>
</edge>
<edge source="n0" target="n8">
<data key="weight">2</data>
</edge>
<edge source="n0" target="n10">
<data key="weight">2</data>
</edge>
<edge source="n0" target="n11">
<data key="weight">3</data>
</edge>
<edge source="n0" target="n12">
<data key="weight">1</data>
</edge>
<edge source="n0" target="n13">
<data key="weight">3</data>
</edge>
<edge source="n0" target="n17">
<data key="weight">2</data>
</edge>
<edge source="n0" target="n19">
<data key="weight">2</data>
</edge>
<edge source="n0" target="n21">
<data key="weight">2</data>
</edge>
<edge source="n0" target="n31">
<data key="weight">2</data>
</edge>
<edge source="n1" target="n2">
<data key="weight">6</data>
</edge>
<edge source="n1" target="n3">
<data key="weight">3</data>
</edge>
<edge source="n1" target="n7">
<data key="weight">4</data>
</edge>
<edge source="n1" target="n13">
<data key="weight">5</data>
</edge>
<edge source="n1" target="n17">
<data key="weight">1</data>
</edge>
<edge source="n1" target="n19">
<data key="weight">2</data>
</edge>
<edge source="n1" target="n21">
<data key="weight">2</data>
</edge>
<edge source="n1" target="n30">
<data key="weight">2</data>
</edge>
<edge source="n2" target="n3">
<data key="weight">3</data>
</edge>
<edge source="n2" target="n7">
<data key="weight">4</data>
</edge>
<edge source="n2" target="n8">
<data key="weight">5</data>
</edge>
<edge source="n2" target="n9">
<data key="weight">1</data>
</edge>
<edge source="n2" target="n13">
<data key="weight">3</data>
</edge>
<edge source="n2" target="n27">
<data key="weight">2</data>
</edge>
<edge source="n2" target="n28">
<data key="weight">2</data>
</edge>
<edge source="n2" target="n32">
<data key="weight">2</data>
</edge>
<edge source="n3" target="n7">
<data key="weight">3</data>
</edge>
<edge source="n3" target="n12">
<data key="weight">3</data>
</edge>
<edge source="n3" target="n13">
<data key="weight">3</data>
</edge>
<edge source="n4" target="n6">
<data key="weight">2</data>
</edge>
<edge source="n4" target="n10">
<data key="weight">3</data>
</edge>
<edge source="n5" target="n6">
<data key="weight">5</data>
</edge>
<edge source="n5" target="n10">
<data key="weight">3</data>
</edge>
<edge source="n5" target="n16">
<data key="weight">3</data>
</edge>
<edge source="n6" target="n16">
<data key="weight">3</data>
</edge>
<edge source="n8" target="n30">
<data key="weight">3</data>
</edge>
<edge source="n8" target="n32">
<data key="weight">3</data>
</edge>
<edge source="n8" target="n33">
<data key="weight">4</data>
</edge>
<edge source="n9" target="n33">
<data key="weight">2</data>
</edge>
<edge source="n13" target="n33">
<data key="weight">3</data>
</edge>
<edge source="n14" target="n32">
<data key="weight">3</data>
</edge>
<edge source="n14" target="n33">
<data key="weight">2</data>
</edge>
<edge source="n15" target="n32">
<data key="weight">3</data>
</edge>
<edge source="n15" target="n33">
<data key="weight">4</data>
</edge>
<edge source="n18" target="n32">
<data key="weight">1</data>
</edge>
<edge source="n18" target="n33">
<data key="weight">2</data>
</edge>
<edge source="n19" target="n33">
<data key="weight">1</data>
</edge>
<edge source="n20" target="n32">
<data key="weight">3</data>
</edge>
<edge source="n20" target="n33">
<data key="weight">1</data>
</edge>
<edge source="n22" target="n32">
<data key="weight">2</data>
</edge>
<edge source="n22" target="n33">
<data key="weight">3</data>
</edge>
<edge source="n23" target="n25">
<data key="weight">5</data>
</edge>
<edge source="n23" target="n27">
<data key="weight">4</data>
</edge>
<edge source="n23" target="n29">
<data key="weight">3</data>
</edge>
<edge source="n23" target="n32">
<data key="weight">5</data>
</edge>
<edge source="n23" target="n33">
<data key="weight">4</data>
</edge>
<edge source="n24" target="n25">
<data key="weight">2</data>
</edge>
<edge source="n24" target="n27">
<data key="weight">3</data>
</edge>
<edge source="n24" target="n31">
<data key="weight">2</data>
</edge>
<edge source="n25" target="n31">
<data key="weight">7</data>
</edge>
<edge source="n26" target="n29">
<data key="weight">4</data>
</edge>
<edge source="n26" target="n33">
<data key="weight">2</data>
</edge>
<edge source="n27" target="n33">
<data key="weight">4</data>
</edge>
<edge source="n28" target="n31">
<data key="weight">2</data>
</edge>
<edge source="n28" target="n33">
<data key="weight">2</data>
</edge>
<edge source="n29" target="n32">
<data key="weight">4</data>
</edge>
<edge source="n29" target="n33">
<data key="weight">2</data>
</edge>
<edge source="n30" target="n32">
<data key="weight">3</data>
</edge>
<edge source="n30" target="n33">
<data key="weight">3</data>
</edge>
<edge source="n31" target="n32">
<data key="weight">4</data>
</edge>
<edge source="n31" target="n33">
<data key="weight">4</data>
</edge>
<edge source="n32" target="n33">
<data key="weight">5</data>
</edge>
</graph>
</graphml>
{
"nodes": [
{"id": 0, "name": "Mr Hi", "faction": 1},
{"id": 1, "name": "Actor 2", "faction": 1},
{"id": 2, "name": "Actor 3", "faction": 1},
{"id": 3, "name": "Actor 4", "faction": 1},
{"id": 4, "name": "Actor 5", "faction": 1},
{"id": 5, "name": "Actor 6", "faction": 1},
{"id": 6, "name": "Actor 7", "faction": 1},
{"id": 7, "name": "Actor 8", "faction": 1},
{"id": 8, "name": "Actor 9", "faction": 2},
{"id": 9, "name": "Actor 10", "faction": 2},
{"id": 10, "name": "Actor 11", "faction": 1},
{"id": 11, "name": "Actor 12", "faction": 1},
{"id": 12, "name": "Actor 13", "faction": 1},
{"id": 13, "name": "Actor 14", "faction": 1},
{"id": 14, "name": "Actor 15", "faction": 2},
{"id": 15, "name": "Actor 16", "faction": 2},
{"id": 16, "name": "Actor 17", "faction": 1},
{"id": 17, "name": "Actor 18", "faction": 1},
{"id": 18, "name": "Actor 19", "faction": 2},
{"id": 19, "name": "Actor 20", "faction": 1},
{"id": 20, "name": "Actor 21", "faction": 2},
{"id": 21, "name": "Actor 22", "faction": 1},
{"id": 22, "name": "Actor 23", "faction": 2},
{"id": 23, "name": "Actor 24", "faction": 2},
{"id": 24, "name": "Actor 25", "faction": 2},
{"id": 25, "name": "Actor 26", "faction": 2},
{"id": 26, "name": "Actor 27", "faction": 2},
{"id": 27, "name": "Actor 28", "faction": 2},
{"id": 28, "name": "Actor 29", "faction": 2},
{"id": 29, "name": "Actor 30", "faction": 2},
{"id": 30, "name": "Actor 31", "faction": 2},
{"id": 31, "name": "Actor 32", "faction": 2},
{"id": 32, "name": "Actor 33", "faction": 2},
{"id": 33, "name": "John A", "faction": 2}
],
"links": [
{"source": 0, "target": 1, "weight": 4},
{"source": 0, "target": 2, "weight": 5},
{"source": 0, "target": 3, "weight": 3},
{"source": 0, "target": 4, "weight": 3},
{"source": 0, "target": 5, "weight": 3},
{"source": 0, "target": 6, "weight": 3},
{"source": 0, "target": 7, "weight": 2},
{"source": 0, "target": 8, "weight": 2},
{"source": 0, "target": 10, "weight": 2},
{"source": 0, "target": 11, "weight": 3},
{"source": 0, "target": 12, "weight": 1},
{"source": 0, "target": 13, "weight": 3},
{"source": 0, "target": 17, "weight": 2},
{"source": 0, "target": 19, "weight": 2},
{"source": 0, "target": 21, "weight": 2},
{"source": 0, "target": 31, "weight": 2},
{"source": 1, "target": 2, "weight": 6},
{"source": 1, "target": 3, "weight": 3},
{"source": 1, "target": 7, "weight": 4},
{"source": 1, "target": 13, "weight": 5},
{"source": 1, "target": 17, "weight": 1},
{"source": 1, "target": 19, "weight": 2},
{"source": 1, "target": 21, "weight": 2},
{"source": 1, "target": 30, "weight": 2},
{"source": 2, "target": 3, "weight": 3},
{"source": 2, "target": 7, "weight": 4},
{"source": 2, "target": 8, "weight": 5},
{"source": 2, "target": 9, "weight": 1},
{"source": 2, "target": 13, "weight": 3},
{"source": 2, "target": 27, "weight": 2},
{"source": 2, "target": 28, "weight": 2},
{"source": 2, "target": 32, "weight": 2},
{"source": 3, "target": 7, "weight": 3},
{"source": 3, "target": 12, "weight": 3},
{"source": 3, "target": 13, "weight": 3},
{"source": 4, "target": 6, "weight": 2},
{"source": 4, "target": 10, "weight": 3},
{"source": 5, "target": 6, "weight": 5},
{"source": 5, "target": 10, "weight": 3},
{"source": 5, "target": 16, "weight": 3},
{"source": 6, "target": 16, "weight": 3},
{"source": 8, "target": 30, "weight": 3},
{"source": 8, "target": 32, "weight": 3},
{"source": 8, "target": 33, "weight": 4},
{"source": 9, "target": 33, "weight": 2},
{"source": 13, "target": 33, "weight": 3},
{"source": 14, "target": 32, "weight": 3},
{"source": 14, "target": 33, "weight": 2},
{"source": 15, "target": 32, "weight": 3},
{"source": 15, "target": 33, "weight": 4},
{"source": 18, "target": 32, "weight": 1},
{"source": 18, "target": 33, "weight": 2},
{"source": 19, "target": 33, "weight": 1},
{"source": 20, "target": 32, "weight": 3},
{"source": 20, "target": 33, "weight": 1},
{"source": 22, "target": 32, "weight": 2},
{"source": 22, "target": 33, "weight": 3},
{"source": 23, "target": 25, "weight": 5},
{"source": 23, "target": 27, "weight": 4},
{"source": 23, "target": 29, "weight": 3},
{"source": 23, "target": 32, "weight": 5},
{"source": 23, "target": 33, "weight": 4},
{"source": 24, "target": 25, "weight": 2},
{"source": 24, "target": 27, "weight": 3},
{"source": 24, "target": 31, "weight": 2},
{"source": 25, "target": 31, "weight": 7},
{"source": 26, "target": 29, "weight": 4},
{"source": 26, "target": 33, "weight": 2},
{"source": 27, "target": 33, "weight": 4},
{"source": 28, "target": 31, "weight": 2},
{"source": 28, "target": 33, "weight": 2},
{"source": 29, "target": 32, "weight": 4},
{"source": 29, "target": 33, "weight": 2},
{"source": 30, "target": 32, "weight": 3},
{"source": 30, "target": 33, "weight": 3},
{"source": 31, "target": 32, "weight": 4},
{"source": 31, "target": 33, "weight": 4},
{"source": 32, "target": 33, "weight": 5}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment