Generating network graphs with Python and pygexf

When you have data collected that consists of some form of connected elements, then visualization may be a fruitful method for exploring that data. If you are familiar with Python, or programming in general, creating network graphs that can be visualized in Gephi is a rather trivial task. The snippet below shows how to traverse an arbitrary number of connected elements and how to generate a graph that be loaded into Gephi:

def generate_graph(node,graph):

    # We start by adding the current node to the graph
    graph.addNode(id=str(node["label"]), label=str(node["id"]))

    # Loop over each child node, or twitter replies
    for reply in node["replies"]:
        # ... and go one level deeper if child nodes exists
        graph = generate_graph(reply, graph)

        # ... then connect the child node that now exists with the current parent node
        graph.addEdge(id=str(reply["id"]), source = str(reply["id"]), target = str(node["id"]))

    # When all child nodes has been appended, or if no more exists,
    return graph

The main element in the code is the line graph = generate_graph(r, graph) as it adds the recursion to the algorithm, meaning that the function calls itself. The call also provides the graph currently being constructed, and the node(s) to be added. In this example all nodes already exists as objects appended as a list of “replies” to the node. The node element is an element consisting of a dict object with nested list as the “replies” element. See below for the most simple example of a connected graph as dict/list elements.

{node_id=1, replies=[{node_id=2, replies=[]}]s}

The graph object needs to be created initially, and the data needs to be gathered. The data can be appended to the function in the cursive loop, but this would however affect both complexity and speed. I would advocate to first collect the data, then work with it. The code below illustrates how to initially setup create the graph object and later how to write the complete graph to file.

def main(argv):
   gexf = Gexf("Name of Graph collection","Info on graph collection")
   graph=gexf.addGraph("directed","static","Information about graph")

   # function to get data
   thread = get_single_thread()

   # generate graph
   graph = generate_graph(thread,graph)

   # we end by writing the graph to file
   output_file=open("graph.gexf","w")
   gexf.write(output_file)

The following example is a graph generated to visualize reply-threads in Twitter data.

Replies on Twitter

Replies on Twitter

Data for the graph above was captured using Phirehose, the graphs were generated using Python and the pygexf library, and the network was visualized using Gephi. Read more about social web mining in ‘Mining the Social web’.

What is the main function of Twitter in crisis?

What is the main function of Twitter in crisis?

During a large scale forrest fire in Sweden this summer I was able to capture a few interesting dataset. One of those consists of a months worth of Twitter data. While doing a “test run” on the data to generate visualizations I found two really interesting patterns. By looking at these two graphs, I would say that Twitter users mainly look for interesting or important information, and forward it to our followers. There is hardly any conversations (or replies), and that really surprised me.

Screen Shot 2014-09-24 at 10.02.13 Screen Shot 2014-09-24 at 10.02.44

The left image shows the small number of reply networks with 315 reply tweets in total. The right image show a much larger network of retweets, with 9952 retweets. Clearly there is very little conversations going on Twitter, at least using the “official” hashtag of the forrest fire. Now the question for you! Why is this important, and how does it affect research on social media use in crisis in general?

More is to come regarding both this dataset and the event. Data was captured using Phirehose, the graphs were generated using Python and the pygexf library, and the network was visualized using Gephi.

Printing whiteboards

Aspects of digitizing response work interests me a great deal, and recent years innovation and adoption of services, methods and devices have been truly interesting to study. What we have seen is that communication, documentation, and many more aspects of work are getting digitized, thus allowing for new kinds of content to be generated and made part of response activities. One environment to study such change is “situation rooms”. These work intensive, white board clad, and collaboratory environments have seen huge changes in the last couple of years. What struck me today is that I found i predecessor to todays “smartboard” that had completely gone me by. Printing whiteboards allows for digital copies to be made, stored, shared and of course, printed. We commonly see whiteboards being photographed for backup, sharing and to make permanent as part of emergency response work and other similar and related disciplines. I have however not seen a whiteboard able of doing those tasks themselves. (And maybe it not all to hard to imagine why I haven’t seen these devices in the wild.) Here is a video for you to consider. Would features relate to situation room work as we know it today?

Nästa steg i en värld av sensorer

Vi har länge pratat om mänskliga sensorer och hur står påverkan introduktionen av “smart phones” har haft när det gäller generering av sensordata. Exempel på dessa är bland annat United States Geographical Surveys (USGS) projekt “Did you fell it”(DYFI) och “Twitter Earthquake Detector”(TED). DYFI samlar in rapporter från allmänheten gällande hur väl en jordbävning har känts av för att skapa modeller om en jordbävnings påverkan. TED är idag en av världens snabbaste metoder för att upptäcka jordbävningar. Genom att scanna av Twitter efter tecken på jordbävningar kan man ofta upptäcka dem snabbare än via sin seismiska utrustning då en tweet rör sig snabbare än en chockvåg genom jorden.

Senaste årens explosionsartade utveckling av hälsoteknik har nu bland annat lett till att miljontals människor bär på sig sensorer dygnet runt, även i sängen. Normalt är syftet att logga fysisk aktivitet och sömnkvalitet, men företaget Jawbone visar nu sensordata som ger intressanta insikter från jordbävningen i Napa Valley i västra USA.

Screenshot 2014-08-26 14.03.40Datan visar reaktionen i sömnmönster från användare i berörda områden då sensordatan från armbandet paras ihop med positionsdata från telefonen. Själva datan i sig kanske inte säger så mycket mer än hur kraftig jordbävning vissa personer klarade att sova sig igenom, men det visar spännande egenskaper av en möjlig nära framtid. Troligtvis kommer inte hemmen att rymma en mindre mängd sensorer, och automatisk larmdata kommer troligen kunna berätta vad som har inträffat, vilka som är eller inte är hemma, samt vilket tillstånd de är i. Frågan är hur vi ska tänka kring den informationen vi skapar och i vilket sammanhang den kan användas. Om mitt aktivitetsarmband säger att jag ligger hemma stilla samtidigt som min brandvarnare larmar om brand så vill jag gärna att någon blir varse denna information.

Via theverge.com

Hantering av “kris-effekten” hos Länsstyrelsen mdfl

#Salabranden visade i många olika former hur stort tryck det kan bli efter tidsenlig och tillförlitlig information när krisen stundar. Samtidigt som trycket efter informationen är som störst går många av de viktigaste hemsidorna ner, eller ger svarstider på minuter. Enligt en artikel på IDG klarade helt enkelt webtjänsterna trycket från den stora massan:

Webbplatserna var inte dimensionerade för det trycket så där fick vi vår första överbelastningsproblematik, berättar Nichlas Blomqvist, till vardags driftchef för Länsstyrelsernas tekniska it-leveranser, och den som ledde it-enhetens arbete under förra veckan.

Så arbetar Länsstyrelsernas it-enhet under branden – IDG

Detta plötsliga, stora, och ibland oförutsedda tryck på en hemsida har många likheter med den så kallade “Slashdot-effekten“. Kort beskrivet innebär detta att när en hemsida snabbt blir populär eller uppmärksammas i ett större sammanhang är det vanligt att den inte klarar lasten och snabbt går ner. Problemet är sedan länge känt och hanteras idag ofta genom att publicera webbsidor på skalbar infrastruktur med redundans, spegling och stor tillgäng kapacitet. En stor del webbhotell tillhandahåller idag denna typen av tjänst, och många marknadsför sig som “ej sårbara för slashdot-effekten”. Många populära nyhetssidor, bloggar mm är helt beroende av denna typ av skalbarhet för att klara effekten av att ett inlägg snabbt blir populär, hänvisas av andra sidor och sprids via sociala medier.

Nu när slashdot-effekten inte längre är ett större problem för den medvetne aktören på internet kan man inte bli annat än förvånad när sveriges krishanteringsapparat inte klarar av att hantera vad jag vill kalla “kris-effekten”. Kris-effekten kan enkelt förklaras som fenomenet som inträffar när en myndighet blir utpekad som ansvarig för krishanteringen och informationsflödet från en kris. Vad nyhetssidor, bloggar, inlägg på sociala medier mm gör då är att hänvisa till denna tillförlitliga källa, och resultatet är att alla drabbade eller intresserade av krisen kommer att besöka denna källa. Även om #salabranden var en mycket allvarlig händelse så var den ändå förhållandevis “mild” i sin natur och händelseförlopp i jämförelse många av de möjliga katastrofer vi har byggt upp en beredskap för i Sverige. En allvarlig kärn-teknisk olycka, en allvarlig brand eller explosion på någon av våra många kem- och olje anläggningar, eller ett större terror-angrepp skulle alla ge ännu ett större tryck efter tidsenlig och tillförlitlig information.

Jag hoppas att man i Sverige nu drar lärdom från denna händelse och ser över sina tjänsteplattformar och tar i beräkning det stora trycket som kan uppstå vid en allvarlig händelse. Ett par miljoner besökare under en dag bör inte vara ett problem. Troligt är att en seriös leverantör kan hantera detta. “Säkra” webbhotell kostar idag inte mer än ett par tior i månaden. Inte att förglömma att detta är en uppmaning gällande från den lilla kommunen till den stora myndigheten.

Länkar och referenser:

#Salabranden på Facebook och Twitter

Kriser är relativt ovanliga i Sverige, så när de väl inträffar får vi passa på att samla in den data vi kan. Dels har Jonas Landgren genomfört fältstudier hos räddningtjänsten, och dels studerar vi krisen på avstånd via sociala medier. Inom vår forskning i Crisis Response Lab har vi ett stort intresse för social medias roll vid kriser då det snabba tekniska och sociala utvecklingen har tvingar oss att omtolka hur kriser påverkar samhället. Och på sociala medier är det full fart, mängden publik data gällande #salabranden är relativt enorm. Med publik data menar vi inlägg, kommenterar, “gilla”-klick mm som har gjorts på Facebooks öppna sidor. Hittills under vecka 32 har följande mängden data genererats på Facebook:
2781 status-inlägg  där 2166 är skrivna, 505 är länkar, 105 är foton eller bilder och 5 är videoklipp.
Dessa inlägg har genererat 8502 kommentarer, 63396 delningar, och 197634 “likes”.

Bild från Länsstyrelsen i Västmanland från branden

Bild från Länsstyrelsen i Västmanland från branden

Detta är data som vi har kunnat observera, men självklart finns det många gånger mer data i de privata/personliga flödena. Datan speglar både grupper som har skapats specifikt för att koordinera privata insatser vid branden, men även myndigheters deltagande på sociala medier. Datan är ovärderlig när det gäller att förstå modern kriskommunikation då vi idag delar med oss så stora delar av våra tankar, reaktioner, reflektioner och lärdomar från vår vardag.

Data samlas även från Twitter, där har 4438 tweets om branden har filtrerats ut sedan måndag morgon.

En djupare analys av datan kommer att ske vid senare tillfälle när händelsen har ebbat ut och vi har en bättre bild av hur bland annat Facebook har använts. Listan av grupper och konton vi tittar närmare på uppdateras hela tiden och för närvarande ser den ut så här. (Säg gärna till om du känner till ett konto eller grupp som utgör en viktig del av Facebook-flödet gällande skogsbranden)

  • “Hjälp finnes (Skogsbranden)”
  • “Skogsbranden Västmanland”
  • “Skogsbrand Husrum Västmanland”
  • “Koordinerad Insats – Ludvika/Smedjebackens kommun”
  • “Hjälp finns i Håbo kommun (skogsbranden)”
  • “Länsstyrelsen i Västmanlands län”
  • “Krisinformation.se”
  • “Sala Kommun”
  • “Räddningstjänsten Sala-Heby”
  • “SOS-Alarm 112″
  • “Polisen Västmanland”
  • “Sveriges Radio P4 Västmanland”