30 March 2014
Over the past weeks, I've spent a lot of time working on grano, a social network analysis toolkit for news applications. My goal is to make a reusable, adaptable and open source tool that helps journalists and researchers to map relations between people, companies and institutions.
While there are many awesome projects working along similar lines, none of the platforms have found wide adoption. Yet sharing technology is essential, as the effort required to make network analysis useful for understanding social systems is substantial.
The domains in which people use social network analysis are diverse, from lobbying and political corruption and company ownership to music bands or fictional characters. That is why
grano isn't a ready-made platform to model all of society. I want to avoid converging on the lowest common denominator of power mapping: drawing busy network diagrams which may be pretty, but are often poor tools for analysis.
Rather, the goal is to build a toolkit of APIs and task-specific components that can be assembled to fit a particular task and to support whatever approach is needed to understand the domain at hand. My central goal is to make
grano an open source project; not just in terms of it's license, but by creating the kind of documentation and installation process that makes it easy for people to contribute and build upon the existing code.
The database at the foundation of
grano is rich with metadata, allowing users to define the types of entities and relations that their project requires; who has access to the data; and to store the source and history of each fact stored by the system. To accomodate this information, the Flask-based Python application runs against a Postgres database as its main store. At the same time, I'm planning to support Neo4J as a secondary store to be able to perform powerful graph queries for those use cases which require them.
At this point,
grano is already used to run OpenInterests.eu and Kompromatron. Both applications combine large sets of raw data from a variety of sources that refer to the same set of entities (EU organisations in one case, German politicians in the other). This type of data integration - combining many sets of relationships into a combined network - is a scenario that I want to focus on. That means building the means for non-technical users to perform raw data imports and entity deduplication through
grano administration interface.
So, this post is a call for contributors: people who want to contribute to the application; but also those who would like to analyze power structures by means of mapping them as a network. Please get in touch, file issues on GitHub, send pull requests and follow @GranoProject on Twitter for updates on where this journey is going.