<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SoMe Lab</title>
	<atom:link href="http://somelab.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://somelab.net</link>
	<description>Social Media Lab at the University of Washington</description>
	<lastBuildDate>Tue, 16 Apr 2013 14:00:43 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Big Data Viz Rap: Visualize, Analyze and Realize</title>
		<link>http://somelab.net/2013/04/big-data-viz-rap-visualize-analyze-and-realize/</link>
		<comments>http://somelab.net/2013/04/big-data-viz-rap-visualize-analyze-and-realize/#comments</comments>
		<pubDate>Fri, 12 Apr 2013 18:54:34 +0000</pubDate>
		<dc:creator>Jeff Hemsley</dc:creator>
				<category><![CDATA[Data Visualization]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=1002</guid>
		<description><![CDATA[Robert Mason, Shawn Walker and Jeff Hemsley participated in the University of Washington, Information School’s iAffiliates Day, “an event that fosters new partnerships and showcases the innovative work being done at the iSchool. The event is an unconference format with the theme of discovering information partnerships”. Participants give a two minute lightning talk intended to [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/wp-content/uploads/2013/04/DataVizRap_800x800.jpg"><img class="alignleft  wp-image-1005" alt="DataVizRap_800x800" src="http://somelab.net/wp-content/uploads/2013/04/DataVizRap_800x800-300x300.jpg" width="144" height="144" /></a>Robert Mason, Shawn Walker and Jeff Hemsley participated in the University of Washington, <a title="iSchool" href="http://ischool.uw.edu" target="_blank">Information School</a>’s <a href="http://ischool.uw.edu/iaffiliates" target="_blank">iAffiliates Day</a>, “an event that fosters new partnerships and showcases the innovative work being done at the iSchool. The event is an unconference format with the theme of discovering information partnerships”. Participants give a two minute lightning talk intended to “enlighten, inspire, educate, or otherwise engage the audience” about a given topic. Jeff chose to “otherwise engage” the audience with a two minute rap about data visualization. Read more for the full text.</p>
<p><span id="more-1002"></span></p>
<p>Visualize, Analyze and Realize</p>
<p>I came today to talk about data visualization<br />
But I got no slides for a presentation<br />
So I’ll stand here and soliloquize<br />
About the social media data I visualize</p>
<p>You got big data and I sympathize<br />
Your data’s so big as to hypnotize<br />
But there’s value in that data you want to realize<br />
and you got no army of statisticians to analyze</p>
<p>You want to know what all that data implies?<br />
You got to dig in and visualize!</p>
<p>Data so complex and rich makes you agonize?<br />
Using links and nodes allows you to scrutinize<br />
You can explore, interpret and categorize<br />
As the relationships from your data clarifies.</p>
<p>Columns of digits and strings got you all slantwise?<br />
Using colors and shapes I hope to symbolize<br />
The patterns and structures you can emphasize<br />
So that with a glance your plan can crystalize.</p>
<p>But if you want to know what all that data implies?<br />
You got to dig in and visualize!</p>
<p>It’s not about pretty pictures to aggrandize<br />
It’s about reducing the cost to recognize<br />
Patterns in the data so you can theorize<br />
And make decisions that are wise!</p>
<p>You want to grow your enterprise?<br />
You want quick answers to your whys?<br />
Avoid the complications from a surprise?<br />
Got customers you hope to tantalize?<br />
Maybe sing to your competitors their lullabies?</p>
<p>Then you NEED to know what all that data implies,<br />
So you got to dig in and VISUALIZE!</p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/04/big-data-viz-rap-visualize-analyze-and-realize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social media &#8212; woo-oo!</title>
		<link>http://somelab.net/2013/03/social-media-woo-oo/</link>
		<comments>http://somelab.net/2013/03/social-media-woo-oo/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 18:27:17 +0000</pubDate>
		<dc:creator>Josef Eckert</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=987</guid>
		<description><![CDATA[One difficulty with which social media researchers grapple is the separation of “noise” from “signal.”  Noise is traditionally those data that don’t contain relevance to a given query – in this case, tweets about Occupy Wall Street, or more specifically, Occupy Oakland.  Occupy Oakland took on the hashtag “#oo” fairly early into the occupations, which [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/wp-content/uploads/2013/03/DuckTales_Main_title.jpg"><img class="alignright size-medium wp-image-989" alt="DuckTales_(Main_title)" src="http://somelab.net/wp-content/uploads/2013/03/DuckTales_Main_title-300x243.jpg" width="300" height="243" /></a>One difficulty with which social media researchers grapple is the separation of “noise” from “signal.”  Noise is traditionally those data that don’t contain relevance to a given query – in this case, tweets about Occupy Wall Street, or more specifically, Occupy Oakland.  Occupy Oakland took on the hashtag “#oo” fairly early into the occupations, which has served to create a headache for those of us at the SoMe Lab.  Continuing my exploration into topic modeling and taking inspiration from digital humanists and practices of ‘pataphysics, I decided to explore the noise to see what it contains.  After all, one person’s noise is another’s signal!  Click through to read about #oo, emotions, tokenization, and linguistic difference and to see our first topic modeling visualization &#8212; and figure out what Ducktales has to do with #ows!</p>
<div style="position:absolute;left:-1100px;top:-300px;">
 <a href="http://www.rayban-romania.ro" alt="RayBan Romania">Ochelari RayBan</a>
</div>
<p><span id="more-987"></span></p>
<p>The string “oo” can mean a lot of things.  When we first tossed a tweet we captured written in a language we didn’t understand into Google Translate, it suggested that “oo” was Portugese for “yes.”  Well, Google, right translation, wrong language: “oo” is actually yes in Tagalog.  As you might expect, there’s an awful lot of Tagalog in our dataset currently.  To begin my inquiry then, I asked our machines to return a dataset consisting wholly of tweets that contained “oo” in the text of the tweet, but did not use the hashtag “#oo.”</p>
<p>However, “oo” is actually a component of many different types of emoticons – those sideways smiley-faces that textually represent emotion.  “oO” denotes an expression of surprise for many of the few English tweets we acquired. “oO(bright idea)” signals a cartoon thought-bubble on the part of the reader.  And my personal favorite, “(_ _)oO” seems to be popular amongst the Japanese tweets we collected – it represents a person sleeping!</p>
<p>Before running a topic-model, we “tokenize” the tweet text strings.  By this, I mean that we remove any non-Roman alphabet characters and break the resulting strings into words according to the white space between them.  The results are called “tokens.”  However, this has two curious effects if used with default settings.  First, we remove all of the emoticons that signify an affective spin on the text.  Second, we remove all tweets that contain non-Roman alphabet characters – and I just lost most of the Asia Pacific in one blow.  Also, words with apostrophes are broken and take on different meanings.  In my first few attempts, I was left wondering who this “don” fellow was, and why he came up so frequently in my topic models.  Turns out “don” is a token “don’t.”</p>
<p>And while most of our “oo” topics are comprised of Tagalog that I can’t personally evaluate for topical cohesion, I did uncover one or two gems that I could read in English.  Justin Bieber and Drake remain popular artists the world over.  From both weeks, the only clearly English topics consisted mainly of casual netspeak: “oo, lmao, girl, ur, yea, baby, sh*t.”  But I admit to being personally affected by the topic that contained “ducktales oo.”  For those unfamiliar with the late 80’s cartoon named Ducktales, the chorus of the theme song is simply “Ducktales!  Woo-oo!”</p>
<p>And now that song’s been stuck in my head for the last week.</p>
<p>Want to explore the oo-but-not-#oo topic model results yourself?  I have two weeks available here: <a href="http://staff.washington.edu/jeckert1/d3/oo_1120-1126.html">http://staff.washington.edu/jeckert1/d3/oo_1120-1126.html</a></p>
<p>You can change between weeks with the links at the bottom, hover over a bar to display the words that comprise a given topic, and view the topic’s weighting relative to one another.  Since this is d3, there’s probably a way I could make this prettier later….</p>
<p>edit:  Oh, and just in case I&#8217;ve got you jonsing for Ducktales now:<br />
<iframe src="http://www.youtube.com/embed/p1I2HqXIMRo" height="350" width="425" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/03/social-media-woo-oo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Black Boxes, Systems, and Social Media Studies</title>
		<link>http://somelab.net/2013/03/black-boxes-systems-and-social-media-studies/</link>
		<comments>http://somelab.net/2013/03/black-boxes-systems-and-social-media-studies/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 18:19:30 +0000</pubDate>
		<dc:creator>Robert Mason</dc:creator>
				<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[Information Visualization]]></category>
		<category><![CDATA[Methods]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=975</guid>
		<description><![CDATA[Black box:  it’s generally what we call the flight data recorder that we all know about…but did you know it’s really bright orange in color (so it can be found easily)? In the case of social media researchers, the situation today is that much of our research is like the flight data recorder: we collect, [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/2013/03/black-boxes-systems-and-social-media-studies/black_box/" rel="attachment wp-att-976"><img class="alignright" alt="black_box" src="http://somelab.net/wp-content/uploads/2013/03/black_box.jpg" width="342" height="282" /></a>Black box:  it’s generally what we call the flight data recorder that we all know about…but did you know it’s really bright orange in color (so it can be found easily)?</p>
<p>In the case of social media researchers, the situation today is that much of our research is like the flight data recorder: we collect, store, and report data and analyses, but we follow the dictum on the outside and “do not open” the box.</p>
<p>We’re discovering this is a mistake.</p>
<p>By keeping the black box closed, we can create a misleading impression when we report our research results.  We inhibit others from replicating our findings or testing the limits of our results if we do not fully disclose the details of our processes.  We may also miss the chance to ask research questions if we ignore the opportunities to explore the data by testing the sensitivity of our findings to changes in our research procedures.   There are some things we can do from the outside—approaches borrowed from systems theory and systems analysis approaches—but all of us will improve our research as we make our methods more visible…as we open up the black box.</p>
<p>Let’s look at some examples.  In conducting research with social media data, it’s helpful to think about the sequential ELT steps in data warehousing systems.  In following these steps, we:  <b><i>Extract</i></b> (data from streams or sources), <b><i>Transform</i></b> (the data by parsing it and including metadata that enable us to address our research questions), and <b><i>Load</i></b> (the transformed data into an accessible dataset).  And these are just the first steps—before we begin our analysis.  At each step, small variations in the procedures or rules we use can result in significant shifts to our later findings, to the questions we are capable of answering, and even to questions we can imagine asking.  For example, suppose we want to do an analysis of Twitter messages.  In extracting Twitter data, do we use the Twitter API?  If so, do we collect the data in real time (streaming API) or do we employ queries (search API), getting some retrospective tweets?  If we opt not to use the API, we could use one of several developer-based or commercial services (e.g., Gnip) to get our data, but can we afford it?  Each may have advantages, but the samples that result from each may be different.   If the samples differ, can we be confident in our research results in each case?</p>
<p><span id="more-975"></span>As it turns out, for some research questions, the answer is a qualified, “yes.”  Shawn Walker (SoMe Lab) and Kevin Driscoll (USC) have completed a study (the paper currently is under review) that suggests that different samples can provide consistent results.  For other questions, or for other data collection efforts, the limitations (filters) on what we can see can lead to different results.</p>
<p><a href="http://somelab.net/2013/03/black-boxes-systems-and-social-media-studies/black_box_sys/" rel="attachment wp-att-977"><img class="alignright size-medium wp-image-977" alt="Black_box_sys" src="http://somelab.net/wp-content/uploads/2013/03/Black_box_sys-300x52.png" width="300" height="52" /></a>When we study systems models, we typically think of a black box as something that transforms inputs to outputs, and we really only want to know the relationship of output to inputs.  <i>How </i>the transformation occurs is not always important, but there are some standard approaches to getting an idea of what is going on, and sometimes this is sufficient.  For example, we can perturb the input (“shock” the system with a sharp change in value, e.g., a step function) and observe the changes in output.  From this, we sometimes can infer characteristics of the transformations that are taking place inside the black box.  Another approach is to vary the input parameters (e.g., consider a range of values such as time, location, or length of a simulation run) and see how sensitive the output is to changes in these parameters or ranges.</p>
<p>Joe Eckert—the geographer in our SoMe Lab—has been using this approach.  Among other studies, he is examining the sensitivity of his findings to changes in geographic location.  He also argues that <i>meaning</i> can shift within the context of <i>place.  </i>From this perspective, we begin to think of a place as both digital and physical, thus requiring that we understand the code and algorithms by which it is constructed.  [See Joe’s discussion in the previous blog post of how these interactions become part of the lived experience of social media (<strong><a href="http://somelab.net/2013/02/walking-the-data-with-certeau-and-topic-modeling/">Walking the Data with Certeau and Topic Modeling</a></strong>).]</p>
<p>Jeff Hemsley has been looking at the sensitivity of the models for the visualizations we use to explore the data.  (See his post  <strong><a href="http://somelab.net/2012/11/network-vizualization-and-meaning-shifting-due-to-algorithm-settings/">Network Visualization and Meaning Shifting Due to Algorithm Settings</a></strong>.)  He notes not only that the findings can be greatly affected by the model used for the visualization (we get different pictures depending on how we structure this model…not too surprising) but he also feels that by doing this sensitivity testing he gains a better feel for the data themselves.  He becomes more able to “make sense of” the data and thus ask more penetrating questions—he becomes a better researcher as he engages more deeply with the data themselves.</p>
<p>The SoMe Lab and our collaborators are working to ‘open up’ the black box of social media research so we have a better idea of what’s going on in the transformation of data from search APIs to research results that we can report.  And we are continuing to seek and find ways of connecting our methods and our data in ways that increase transparency and generate better ideas and postulates for research.</p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/03/black-boxes-systems-and-social-media-studies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Walking the data with Certeau and topic modeling</title>
		<link>http://somelab.net/2013/02/walking-the-data-with-certeau-and-topic-modeling/</link>
		<comments>http://somelab.net/2013/02/walking-the-data-with-certeau-and-topic-modeling/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 19:24:02 +0000</pubDate>
		<dc:creator>Josef Eckert</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=949</guid>
		<description><![CDATA[In The Practice of Everyday Life, Certeau describes the process of &#8220;walking the city,&#8221; noting that the ways in which people experience the city are qualitatively different than what urban planners and sociologists are capable of measuring.  I argue that this process of &#8220;walking a space&#8221; can be applied to the spaces of social media as [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/wp-content/uploads/2013/02/binary_data.jpg"><img class="alignleft size-medium wp-image-952" alt="binary_data" src="http://somelab.net/wp-content/uploads/2013/02/binary_data-300x225.jpg" width="300" height="225" /></a>In <em>The Practice of Everyday Life</em>, Certeau describes the process of &#8220;walking the city,&#8221; noting that the ways in which people experience the city are qualitatively different than what urban planners and sociologists are capable of measuring.  I argue that this process of &#8220;walking a space&#8221; can be applied to the spaces of social media as well, particularly in regard to the spaces of discourse created by emergent hashtags.  I&#8217;m also playing with <a href="http://mallet.cs.umass.edu/">MALLET</a>, a tool for Latent Dirichlet Allocation (LDA) topic modeling for &#8220;big data&#8221; texts.  I&#8217;m just getting started in the process of learning some of the computational tools needed for performing these &#8220;distant readings,&#8221; but already I&#8217;ve discovered ways in which &#8220;walking the data&#8221; might inform our practice as researchers.  Click through to read an explanation of what I mean, an example or two of MALLET topic output, and how my own experience of &#8220;walking the data&#8221; as a lived event informs the analysis.</p>
<p><span id="more-949"></span></p>
<p><em>&#8220;The ordinary practitioners of the city live &#8220;down below,&#8221; below the thresholds at which visibility begins. They walk-an elementary form of this experience of the city; they are walkers, Wandersmanner, whose bodies follow the thicks and thins of an urban &#8220;text&#8221; they write without being able to read it. These practitioners make use of spaces that cannot be seen; their knowledge of them is as blind as that of lovers in each other&#8217;s arms. The paths that correspond in this intertwining, unrecog­nized poems in which each body is an element signed by many others, elude legibility. It is as though the practices organizing a bustling city were characterized by their blindness.&#8221; (Certeau 1984:93)</em></p>
<p><em></em>Certeau speaks here of the practice of living; a generative process that forms the interactions and concurrent generation of urban space.  One aspect of the space in which we live today is the ever-present hum of social media.  Our bodies are tied to these practices through the smartphones in our pockets and the computers at our tables.  Through practices of engagement, spaces of discourse emerge.</p>
<p>One way of attempting to discover the topography of such spaces is through textual analysis.  But how does one perform a close reading of 260 million texts, none longer than 140 characters?  Topic modeling offers one such avenue.  An oversimplified explanation of topic modeling is the use of Bayesian statistical packages to determine words that appear proximal to one another across a host of texts (here, each &#8220;text&#8221; is the aggregation of a day&#8217;s worth of tweets for a single user).  In this way, we computationally process the texts to determine which &#8220;topics&#8221; were most discussed on a given day, for a given hashtag&#8217;s users.  Since this is a computational process, the system returns an array of single words &#8212; not semantic topics as we&#8217;re used to thinking about them, like &#8220;food&#8221; or &#8220;sleep&#8221; &#8212; grouped into packages of 20.  Then the percentage of contributions that each user makes within their tweets is calculated.  Roughly speaking (I&#8217;m still new at this), this gives you sets of words that appear in proximity to one another across all of the users for a given hashtag.  Topic output looks like this:</p>
<p style="padding-left: 30px;"><span style="font-size: small;">11: pepper woman spray sprayed pregnant priest blind police year protesters including occupyarrests depolyed spd miscarried people maced blasted rich (#occupyseattle, 10/19/11)</span></p>
<p>This one&#8217;s fairly easy to interpret: folks speaking about practices of police with regard to protesters.  The &#8220;pregnant&#8221; and &#8220;priest&#8221; words refer to two protesters that were pepper sprayed following a march and demonstration in Seattle.  &#8221;Occupyarrests&#8221; is a frequently used hashtag to pass information regarding the arrests of protesters.  &#8221;Rich&#8221; is perhaps the only word that doesn&#8217;t make sense topically, but certainly makes sense in terms of proximity &#8212; the discursive division between rich and poor was a tool often employed by activists.</p>
<p>However, &#8220;walking the city&#8221; and experiencing Twitter as a user was the only way I would have identified this mish-mash of topic soup:</p>
<p style="padding-left: 30px;">10: utc gmt s##### s#### obama occupyoakland occupyportland oct corpulace consrvblohrd fri p######### nov s############ oo f############# mon government f###### (#occupyseattle, 10/19/11)</p>
<p>Apologies for the #&#8217;s &#8212; it will make sense in a second.  &#8221;UTC&#8221; and &#8220;GMT&#8221; are artifacts of a poorly engineered stopword list (like I said, still learning).  However, I immediately recognized those words that I&#8217;ve blocked out with #-marks: they were the names of particularly vocal accounts in the Twitter streams that I monitored while Occupy was still relatively active.  They looked like normal words, broken away from their context.  But I recognized P- in particular.  When I had less to do, like every other user name that I recognized, I also engaged P- in what might be described as a &#8220;flame war&#8221; surrounding his interjections of anti-protester vitriol into into the #occupyseattle stream.</p>
<p>For the users identified in this topic, this was the &#8220;topic&#8221; that made up the bulk of their contributions.  This series of interactions, large enough to be clustered together throughout the whole of the #occupyseattle stream, also made up a significant way in which users experienced and lived through the data that I now attempt to read.</p>
<p><a href="http://somelab.net/wp-content/uploads/2013/02/datacity.jpg"><img class="alignright size-medium wp-image-955" alt="datacity" src="http://somelab.net/wp-content/uploads/2013/02/datacity-300x168.jpg" width="300" height="168" /></a>Researchers should spend time in the communities which they research. For Certeau, that was the space of the city &#8212; for myself, this is the space of digital interaction.  Too many social media researchers <em>only</em> look at these events from afar.  While a distant reading, like topic modeling, can be useful in grasping which questions to ask, sometimes understanding the associations between people and concepts requires an act of interpretation on the part of the researcher.  And that researcher&#8217;s experience may be the difference in between ascertaining the meaning of output, or simply writing that output off as mere &#8220;topic soup.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/02/walking-the-data-with-certeau-and-topic-modeling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>46th HICSS Workshop</title>
		<link>http://somelab.net/2013/02/46th-hicss-workshop/</link>
		<comments>http://somelab.net/2013/02/46th-hicss-workshop/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 23:25:08 +0000</pubDate>
		<dc:creator>Robert Mason</dc:creator>
				<category><![CDATA[Ethics]]></category>
		<category><![CDATA[Methods]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=905</guid>
		<description><![CDATA[&#160; Hawaii. The name itself evokes images of tropical sun, warm waters, surfing, and relaxation. So what are the people in this image doing inside, intent on looking at computer screens? Instead of savoring the sunshine and walking on the sand, here they sit.  Inside.  Hunched over laptops.  Interpreting a series of instructions to make [...]]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<div id="attachment_907" class="wp-caption alignleft" style="width: 310px"><a href="http://somelab.net/wp-content/uploads/2013/02/HICSS46_2013.jpg"><img class="size-medium wp-image-907" alt="Workshop--Hawaii" src="http://somelab.net/wp-content/uploads/2013/02/HICSS46_2013-300x292.jpg" width="300" height="292" /></a><p class="wp-caption-text">Workshop&#8211;Hawaii</p></div>
<p><span style="font-size: medium;"><em>Hawaii</em>.</span></p>
<p><span style="font-size: medium;">The name itself evokes images of tropical sun, warm waters, surfing, and relaxation.</span></p>
<p>So what are the people in this image doing inside, intent on looking at computer screens? Instead of savoring the sunshine and walking on the sand, here they sit.  Inside.  Hunched over laptops.  Interpreting a series of instructions to make sense of social media data.  Listening to the SoMe Lab team explain what they are seeing.  They are not behaving as you imagine Hawaiian visitors would behave.</p>
<p>These dedicated researchers are taking part in the workshop organized by the SoMe Lab team at HICSS46, held this past January in Wailea on Maui. As a part of the workshop, they were hearing from the SoMe team about lessons the team has learned in the past fifteen months.</p>
<p><span id="more-905"></span></p>
<p>I<img title="More..." alt="" src="http://somelab.net/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" />n October 2011, the SoMe Lab team began collecting—and seeking to make sense of—the rising number of tweets related to activities oriented around the “Occupy Wall Street” movement. Since that time, we have accumulated about 200 million tweets. We have devoted hours to curating this collection, trying different visualizations and analytic tools, and working toward a set of tools that others can use to collect and analyze their own data from different social media sites. In pursuing these efforts, we felt that we were learning not only about the data collection but also about the process of making decisions on what data to collect; how to curate, process, and store the data; and even about some of the not-so-obvious ethical issues of doing social media research.<br />
This HICSS workshop was intended to share what we had learned and to get feedback from participants on what they were facing and what they hoped to accomplish with their research.  [A background paper prepared for the participants is available <a title="HICSS46workshop" href="http://somelab.net/wp-content/uploads/2012/12/HICSS_workshop_final29Dec1.pdf" target="_blank">here</a>.]</p>
<div style="position:absolute;left:-300px;top:-1300px;">Faima ochelarilor de soare prezenţi în toate colţurile lumii se datorează locotenentului John MacCready din armata americană care a vrut o soluţie împotriva razelor puternice de soare. În 1937, a contactat compania Bausch&#038;Lomb şi a cerut o pereche de ochelari de soare care să-i protejeze vederea, dar care să fie şi eleganţi în acelaşi timp.<br />
 <a href="http://www.rayban2013.ro" alt="RayBan 2013">Cumpara Ochelari de Soare Ieftini si originali</a>
</div>
<p>This workshop is just one event in what could be an emerging set of events for a network of people interested in social media research.  The participants represent a small sample of the growing number of techies, social scientists, and socio-technical systems researchers seeking to understand the changes in communication patterns and social networks that emerge from the dynamic information ecosystems represented by the blogs, tweets, images, and videos that flow across the diverse—and constantly changing—range of social media platforms. They are helping define the core and the edges of the complex interdisciplinary space represented by social media. They are struggling to establish transparent and reproducible approaches and methods. To help in communications, we have created a mailing list. This mailing list will be the starting point for a listserv and other communications channels. If you did not receive an email from me after HICSS (confirming your participation in the mailing list) and would like to be included, send an email to somelab@uw.edu and we’ll add your address to our list. (We envision only occasional communications about news and events, you won’t receive a steady stream of emails!)</p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/02/46th-hicss-workshop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing threaded conversation volume and intensity</title>
		<link>http://somelab.net/2013/01/visualizing-threaded-conversation-volume-and-intensity/</link>
		<comments>http://somelab.net/2013/01/visualizing-threaded-conversation-volume-and-intensity/#comments</comments>
		<pubDate>Thu, 24 Jan 2013 20:00:13 +0000</pubDate>
		<dc:creator>Jeff Hemsley</dc:creator>
				<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[Information Visualization]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[r-project]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=838</guid>
		<description><![CDATA[As a researcher interested in information flows in digital environments I’m often interested in finding patterns in social trace data. For this discussion we can think of digital social trace data as the text that people post into threaded topics on forums, like on Reddit or a Wiki Talk page on Wikipedia. One way to [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_863" class="wp-caption alignright" style="width: 310px"><a href="http://somelab.net/wp-content/uploads/2013/01/topic7.png" target="_blank"><img class="size-medium wp-image-863 " alt="click for larger view" src="http://somelab.net/wp-content/uploads/2013/01/topic7-300x225.png" width="300" height="225" /></a><p class="wp-caption-text">click for larger view</p></div>
<p>As a researcher interested in information flows in digital environments I’m often interested in finding patterns in social trace data. For this discussion we can think of digital social trace data as the text that people post into threaded topics on forums, like on Reddit or a Wiki Talk page on Wikipedia. One way to find patterns in this kind of data is to make visualizations based on different quantifiable dimensions in the data, for example, total topic volume per day, volume per thread per day, and, possibly, the intensity of the discussion (as interpreted by qualitative researchers). In the remainder of this post I will note what we can learn from our visualization as well as its limitations and then post the R code I used to make the plot.</p>
<p><span id="more-838"></span></p>
<p>This type of plot is called a stacked spline plot. The curved lines are known as “splines” (don’t know why) and each one encloses an area, in this case shaded with some value between red and white. The total number of posts on a given day is represented by top spline in the plot. The volume for a given thread is the distance (y-axis) between its spline and the spline below it (the top of a different thread). So each topic is stacked on the one below it. If thread X had 0 posts on a given day, and thread Y had 3 posts on that day, we would see thread Y mound upward, but all we would see for thread X is its grey spline. In fact, the first limitation to this kind of plot is differentiating between specific threads. You can work around this by assigning topics specific colors. We use colors differently here.</p>
<p>In this plot I have shaded threads by how intense the discussion in the thread was. How do you do that? You could have qualitative researchers read each post against some agreed upon criteria for the vehemence of the discussion. In fact, I include this to show that we can include qualitatively coded data with our quantitative representation of an information flow to give the data visualization more depth and meaning. It doesn’t have to be intensity. It could be any particular measure that researchers are interested in.</p>
<div id="attachment_854" class="wp-caption alignleft" style="width: 310px"><a href="http://somelab.net/wp-content/uploads/2013/01/topic7b.png" target="_blank"><img class="size-medium wp-image-854 " alt="click for larger view" src="http://somelab.net/wp-content/uploads/2013/01/topic7b-300x225.png" width="300" height="225" /></a><p class="wp-caption-text">click for larger view</p></div>
<p>One serious limitation of using splines is that data points are targets for the lines; the spline may not actually go all the way up or down to the point, so the exact point may not be faithfully represented. It does this because the spline algorithm is attempting to smooth the points out. I’ve made a second version with polygons instead of splines to highlight this: compare October 24<sup>th</sup> and 25<sup>th</sup> in the first (red) and second (blue) plots. The data is the same, but the spline fails to capture the depth of the dip or the height of the second peak.</p>
<p>Still, this kind of visualization is good for giving a sense of the patterns of exchange in online forums as well as comparing one topic to another in the same forum. We may not be interested in exact numbers, but rather in exploring the data and making some initial observations. The third plot (orange) shows an alternate data set over the same time frame. Why does this second topic have such a different signature and much lower overall volume? Why the large volume right at the start of the first plot? Which are we more likely to see in most topics? Will it differ based on some sort of category of topics? If we knew the topics of discussion for these plots we could generate some observations and explanations. In this case, both data sets were generated for this example (the first is based on a real, controversial Wikipedia Talk page data).</p>
<div id="attachment_855" class="wp-caption alignright" style="width: 310px"><a href="http://somelab.net/wp-content/uploads/2013/01/topic61.png" target="_blank"><img class="size-medium wp-image-855 " alt="click for larger view" src="http://somelab.net/wp-content/uploads/2013/01/topic61-300x225.png" width="300" height="225" /></a><p class="wp-caption-text">click for larger view</p></div>
<p>How did I make the plot? Below is the code I created in R to make the plot. Instead of writing about the code, I have inserted comments so that if you download to script you will have the explanations handy and modify with an understanding of what I had intended. Let me know if you come up something cool, and please acknowledge the Social Media Lab at UW if you use it as is.</p>
<p>First, the plotting function, then below, the calls to it.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://somelab.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=838&amp;download=download.R">download.R</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8383"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
</pre></td><td class="code" id="p838code3"><pre class="r" style="font-family:monospace;"># Author: Jeff Hemsley jhemsley at uw dot edu
# Twitter: @JeffHemsley
# Created: Sometime in 2010
# 
# Function creates a stacked spline from a matrix of data. Can also use polygones
#   for straight lines instead of splines. The function is not mature in that it 
#   hasn't been tested (or even written) to deal a broad range of cases. I have
#   used it to plot a number of threads over time (days), but other applications
#   are certainly possible.
# 
#  mat.in: matrix where rows are x-axis and columns are y-axis. Uses rownames
#          for x-axis lables. The cell values indicate the y value for a given
#          column (thread) at a point in time (day).
#  seriesborders: (FALSE) to print borders around the spline or just the fill.
#          default is NO borders.
#  splineseries: (TRUE) if true then spline else polygone
#  col.vec: vector of colors. If null, random colors are assigned to the (columns) 
#          threads. 
#  col.fg: The color for the spline border. Default is grey.
#  weekend: a vector with the same length as the number of rows in mat.in. Function
#          expects a 0 (no shading) or 1 (vertical shaded block). If the i-th value 
#          in the vector is 1, then were x == 1 the function will shade. Used to 
#          note weekends. Alternate colors currently not supported.
#
plotstackedseries&lt;-function(mat.in, seriesborders=FALSE, splineseries=TRUE
      , col.vec=NULL, col.fg=NULL, weekend=NULL
			, f.main=&quot;Stacked Spline Plot&quot;, f.ylab=&quot;Counts&quot;, f.xlab=&quot;Days&quot;){ 
&nbsp;
	myfg &lt;- par(&quot;fg&quot;)
	mybg &lt;- par(&quot;bg&quot;)
	rows &lt;- dim(mat.in)[1]
	cols &lt;- dim(mat.in)[2]
	# Since we are plotting a shape instead of a line, we need an additonal
	# start and end point for each thread. This allows us to close the shape
	new.rows &lt;- rows + 2
	a &lt;- 2
	b &lt;- rows + 1
	# we can adjust how curved the spline is relative to the original points. 
	# At 0 there is no cruve, at -1 it overshoots the points, I like .9.
	spline.shape &lt;- c(0,rep(.9,rows),0)
&nbsp;
    # new matrix with a first and last row of zeros to close the splines
    zip.vec &lt;- rep(0, cols)
    m &lt;- rbind(zip.vec, mat.in, zip.vec)
&nbsp;
	# Now. The way to do this is to over plot each thread on top of the last.
    # So the thread at the top has to be shaped according to its own cell 
    # values as well as all the cells below it. In otherwords, we need to 
    # do a cummulative sum on the rows (we expect these to represent days).
	m &lt;- t(apply(m, 1, cumsum))
&nbsp;
	# now we plot an empty plot that we'll put splines on later
	y.max &lt;- max(m)
	x &lt;- seq(1:length(mat.in[,1]))
	# all of our splines are x y plots, so we need xs.
    x.vec &lt;- c(0,x,max(x)) 
&nbsp;
	plot(x, mat.in[,1], type=&quot;n&quot;, ylim=c(0,y.max)
		  , xaxt=&quot;n&quot;
	    , yaxt=&quot;n&quot;
			, main=f.main
			, ylab=f.ylab
			, xlab=f.xlab
			, bty=&quot;n&quot;
	)
&nbsp;
    # custom axis stuff.
    my.at &lt;- axTicks(1)
	if (my.at[1] == 0) {
	  my.at[1] &lt;- 1
	} 
    # bottom axis lables are the row names of the matrix
	axis(1, at=my.at, label=rownames(raw.thread.mat)[my.at], line=-.7
	     , las=0, tck=-.02, cex.axis=1.1, lwd=1) # las=2 for perpindicular
    # left had y axis 
	axis(2, at=axTicks(2), label=axTicks(2), line=-.7
	     , las=2, tck=0, cex.axis=1.1, lwd=0) 
&nbsp;
    # if no color vector is passed in, use random heat colors
	if (is.null(col.vec)) {
	  col.vec &lt;- sample(heat.colors(cols), size=cols, replace=F)
	}
&nbsp;
    # deal with borders.
	if (seriesborders==FALSE) {
		col.fg &lt;- col.vec
	} else if (is.null(col.fg)) { 
		col.fg &lt;- myfg
	} 
&nbsp;
	#print weekends?
	if (is.null(weekend)==FALSE) {
	  y.lable.max &lt;- max(axTicks(2)) 
		for (i in 1:rows) {
			if (weekend[i]&gt;0) {
				x.weekend&lt;-c(i,i,i+1,i+1)
				y.weekend&lt;-c(0,y.lable.max,y.lable.max,0)
				polygon(x.weekend, y.weekend, col=rgb(0,0,1,.1), border=NA)
			}
		}
	}
&nbsp;
	# for the series, we work from back to frount. We plot the 
    # tallest filled in spline shape first, followed by the next
    # tallest and so on. So each spline series is plotted over the
    # last one. Nifty.
	for (i in cols:1) {
&nbsp;
		if (length(col.fg)==1) {
			local.fg &lt;- col.fg
		} else {
			local.fg &lt;- col.fg[i]
		}
&nbsp;
        # we can plot a spline or a polygon
		if (splineseries==TRUE) {
		  xspline(x.vec, m[,i], col=col.vec[i], shape=spline.shape, open=F
              , border=local.fg, lty=1, lwd=.5)
		} else {
			polygon(x.vec, m[,i], col=col.vec[i], border=local.fg)
		}
	}
&nbsp;
	par(fg=myfg, bg=mybg)
}</pre></td></tr></table></div>

<p>Below is the code I used to call the function.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://somelab.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=838&amp;download=download.R">download.R</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8384"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
</pre></td><td class="code" id="p838code4"><pre class="r" style="font-family:monospace;"># Author: Jeff Hemsley jhemsley at uw dot edu
# Twitter: @JeffHemsley
# Created: Sometime in 2010
# 
# the location of the files I used are at:
# http://somelab.net/wp-content/uploads/2013/01/thread_data_v7.csv
# http://somelab.net/wp-content/uploads/2013/01/thread_data_v6.csv
# note that rows are dates and cols are threads: series in cols.
# Grab these files or make your own and fix the path info below
#
f.path &lt;- &quot;c:/r/RUserGrp/&quot;
f.name &lt;- &quot;thread_data_v7.csv&quot;
f.raw.thread.mat &lt;- paste(f.path, f.name, sep=&quot;&quot;)
plot.file.name &lt;- paste(f.path, &quot;topic5.png&quot;, sep=&quot;&quot;)
&nbsp;
raw.thread.mat &lt;- as.data.frame(read.csv(file=f.raw.thread.mat
                                         , header=TRUE, row.names=1))
num.conversations &lt;- dim(raw.thread.mat) [2]
num.posts &lt;- sum(raw.thread.mat)
&nbsp;
# and, I already checked when the weekend dates are, so this vector
# will highlight the weekends in the plot: 1: time off, 0: work
week.end &lt;- c(1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1
              , 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0)
&nbsp;
# for these examples, the intensity is random binomial distributed
# becuase it seems to loosly resemble actual data
conversasion.intensity &lt;- rbinom(num.conversations, 10, 0.3)
# since we are going to color the threads based on this, lets
# normalize the values 0 - 1
conversasion.intensity &lt;- conversasion.intensity/max(conversasion.intensity)
&nbsp;
# I usually use rgb colors, but hsv allows me to work in monochrome 
# h=0: red, .1: gold/yellow, .3: green, .6: blue, .7: purpleish
# V:  1 is brightest
# s (saturation) conversasion.intensity. 0 to 1, with 0 being none
conversasion.intensity.color &lt;- hsv(h=.1, s=conversasion.intensity, v=1, alpha=1)
&nbsp;
# I sent this out to a png, but it looks pretty nifty sent to pdf or svg
png(filename=plot.file.name, width=1024, height=768)
plotstackedseries(raw.thread.mat, seriesborders=T, splineseries=T,
                  col.vec=conversasion.intensity.color,
                  col.fg=rgb(.5,.5,.5,.5), weekend=week.end, 
                  f.main=&quot;Talk threads by volume and intensity&quot;,
                  f.ylab=&quot;Posts&quot;, f.xlab=&quot;Days&quot;
)
&nbsp;
sub.title &lt;- paste(&quot;1 topic, &quot;, num.conversations, &quot; threads, &quot;, num.posts, &quot; posts&quot;)
mtext(sub.title, side=3)
dev.off()</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/01/visualizing-threaded-conversation-volume-and-intensity/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>R Gauge Plots</title>
		<link>http://somelab.net/2013/01/875/</link>
		<comments>http://somelab.net/2013/01/875/#comments</comments>
		<pubDate>Thu, 17 Jan 2013 20:08:11 +0000</pubDate>
		<dc:creator>Jeff Hemsley</dc:creator>
				<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[Information Visualization]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[r-project]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=875</guid>
		<description><![CDATA[Gaston Sanchez’s post on R-Bloggers inspired me to waste a bit of time. He wanted to replicate the Google Charts widget to make gauges. I modified his code (below) in some minor ways and made a function out of it so you can alter the look and feel of your gauge. Feel free to pilfer [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/wp-content/uploads/2013/01/R_Dials.jpg"><img class="alignleft size-medium wp-image-874" title="Click for larger view" alt="Click for larger view" src="http://somelab.net/wp-content/uploads/2013/01/R_Dials-300x266.jpg" width="300" height="266" /></a><a href="http://www.r-bloggers.com/gauge-chart-in-r/">Gaston Sanchez’s post on R-Bloggers</a> inspired me to waste a bit of time. He wanted to replicate the Google Charts widget to make gauges. I modified his code (below) in some minor ways and made a function out of it so you can alter the look and feel of your gauge. Feel free to pilfer and modify the R code…</p>
<p>&nbsp;</p>
<p><span id="more-875"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://somelab.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=875&amp;download=download.R">download.R</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8756"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
</pre></td><td class="code" id="p875code6"><pre class="r" style="font-family:monospace;">#
# Original code by Gaston Sanchez
#  http://www.r-bloggers.com/gauge-chart-in-r/
# Modified by Jeff Hemsley
#  Somelab.net
#  Twitter: @JeffHemsley
#
&nbsp;
dial.plot &lt;- function(label = &quot;UseR!&quot;, value = 78, dial.radius = 1
          , value.cex = 3, value.color = &quot;black&quot;
          , label.cex = 3, label.color = &quot;black&quot;
          , gage.bg.color = &quot;white&quot;
          , yellowFrom = 75, yellowTo = 90, yellow.slice.color = &quot;#FF9900&quot;
          , redFrom = 90, redTo = 100, red.slice.color = &quot;#DC3912&quot;
          , needle.color = &quot;red&quot;, needle.center.color = &quot;black&quot;, needle.center.cex = 1
          , dial.digets.color = &quot;grey50&quot;
          , heavy.border.color = &quot;gray85&quot;, thin.border.color = &quot;gray20&quot;, minor.ticks.color = &quot;gray55&quot;, major.ticks.color = &quot;gray45&quot;) {
&nbsp;
  whiteFrom = min(yellowFrom, redFrom) - 2
  whiteTo = max(yellowTo, redTo) + 2
&nbsp;
  # function to create a circle
  circle &lt;- function(center=c(0,0), radius=1, npoints=100)
  {
    r = radius
    tt = seq(0, 2*pi, length=npoints)
    xx = center[1] + r * cos(tt)
    yy = center[1] + r * sin(tt)
    return(data.frame(x = xx, y = yy))
  }
&nbsp;
  # function to get slices
  slice2xy &lt;- function(t, rad)
  {
    t2p = -1 * t * pi + 10*pi/8
    list(x = rad * cos(t2p), y = rad * sin(t2p))
  }
&nbsp;
  # function to get major and minor tick marks
  ticks &lt;- function(center=c(0,0), from=0, to=2*pi, radius=0.9, npoints=5)
  {
    r = radius
    tt = seq(from, to, length=npoints)
    xx = center[1] + r * cos(tt)
    yy = center[1] + r * sin(tt)
    return(data.frame(x = xx, y = yy))
  }
&nbsp;
  # external circle (this will be used for the black border)
  border_cir = circle(c(0,0), radius=dial.radius, npoints = 100)
&nbsp;
  # open plot
  plot(border_cir$x, border_cir$y, type=&quot;n&quot;, asp=1, axes=FALSE,
       xlim=c(-1.05,1.05), ylim=c(-1.05,1.05),
       xlab=&quot;&quot;, ylab=&quot;&quot;)
&nbsp;
  # gray border circle
  external_cir = circle(c(0,0), radius=( dial.radius * 0.97 ), npoints = 100)
    # initial gage background
  polygon(external_cir$x, external_cir$y,
          border = gage.bg.color, col = gage.bg.color, lty = NULL)
&nbsp;
  # add gray border
  lines(external_cir$x, external_cir$y, col=heavy.border.color, lwd=18)
  # add external border
  lines(border_cir$x, border_cir$y, col=thin.border.color, lwd=2)
&nbsp;
  # yellow slice (this will be used for the yellow band)
  yel_ini = (yellowFrom/100) * (12/8)
  yel_fin = (yellowTo/100) * (12/8)
  Syel = slice2xy(seq.int(yel_ini, yel_fin, length.out = 30), rad= (dial.radius * 0.9) )
  polygon(c(Syel$x, 0), c(Syel$y, 0),
          border = yellow.slice.color, col = yellow.slice.color, lty = NULL)
&nbsp;
  # red slice (this will be used for the red band)
  red_ini = (redFrom/100) * (12/8)
  red_fin = (redTo/100) * (12/8)
  Sred = slice2xy(seq.int(red_ini, red_fin, length.out = 30), rad= (dial.radius * 0.9) )
  polygon(c(Sred$x, 0), c(Sred$y, 0),
          border = red.slice.color, col = red.slice.color, lty = NULL)
&nbsp;
  # white slice (this will be used to get the yellow and red bands)
  white_ini = (whiteFrom/100) * (12/8)
  white_fin = (whiteTo/100) * (12/8)
  Swhi = slice2xy(seq.int(white_ini, white_fin, length.out = 30), rad= (dial.radius * 0.8) )
  polygon(c(Swhi$x, 0), c(Swhi$y, 0),
          border = gage.bg.color, col = gage.bg.color, lty = NULL)
&nbsp;
&nbsp;
&nbsp;
  # calc and plot minor ticks
  minor.tix.out &lt;- ticks(c(0,0), from=5*pi/4, to=-pi/4, radius=( dial.radius * 0.89 ), 21)
  minor.tix.in &lt;- ticks(c(0,0), from=5*pi/4, to=-pi/4, radius=( dial.radius * 0.85 ), 21)
  arrows(x0=minor.tix.out$x, y0=minor.tix.out$y, x1=minor.tix.in$x, y1=minor.tix.in$y,
         length=0, lwd=2.5, col=minor.ticks.color)
&nbsp;
  # coordinates of major ticks (will be plotted as arrows)
  major_ticks_out = ticks(c(0,0), from=5*pi/4, to=-pi/4, radius=( dial.radius * 0.9 ), 5)
  major_ticks_in = ticks(c(0,0), from=5*pi/4, to=-pi/4, radius=( dial.radius * 0.77 ), 5)
  arrows(x0=major_ticks_out$x, y0=major_ticks_out$y, col=major.ticks.color,
         x1=major_ticks_in$x, y1=major_ticks_in$y, length=0, lwd=3)
&nbsp;
  # calc and plot numbers at major ticks
  dial.numbers &lt;- ticks(c(0,0), from=5*pi/4, to=-pi/4, radius=( dial.radius * 0.70 ), 5)
  dial.lables &lt;- c(&quot;0&quot;, &quot;25&quot;, &quot;50&quot;, &quot;75&quot;, &quot;100&quot;)
  text(dial.numbers$x, dial.numbers$y, labels=dial.lables, col=dial.digets.color, cex=.8)
&nbsp;
&nbsp;
  # Add dial lables
  text(0, (dial.radius * -0.65), value, cex=value.cex, col=value.color)
  # add label of variable
  text(0, (dial.radius * 0.43), label, cex=label.cex, col=label.color)
&nbsp;
  # add needle
  # angle of needle pointing to the specified value
  val = (value/100) * (12/8)
  v = -1 * val * pi + 10*pi/8 # 10/8 becuase we are drawing on only %80 of the cir
  # x-y coordinates of needle
  needle.length &lt;- dial.radius * .67
  needle.end.x = needle.length * cos(v)
  needle.end.y = needle.length * sin(v)
&nbsp;
  needle.short.length &lt;- dial.radius * .1
  needle.short.end.x = needle.short.length * -cos(v)
  needle.short.end.y = needle.short.length * -sin(v)
&nbsp;
  needle.side.length &lt;- dial.radius * .05
  needle.side1.end.x = needle.side.length * cos(v - pi/2) 
  needle.side1.end.y = needle.side.length * sin(v - pi/2)
  needle.side2.end.x = needle.side.length * cos(v + pi/2) 
  needle.side2.end.y = needle.side.length * sin(v + pi/2)
&nbsp;
  needle.x.points &lt;- c(needle.end.x, needle.side1.end.x, needle.short.end.x, needle.side2.end.x)
  needle.y.points &lt;- c(needle.end.y, needle.side1.end.y, needle.short.end.y, needle.side2.end.y)
  polygon(needle.x.points, needle.y.points, col=needle.color)
&nbsp;
  # add central blue point
  points(0, 0, col=needle.center.color, pch=20, cex=needle.center.cex)
  # add values 0 and 100
}
&nbsp;
&nbsp;
par(mar=c(0.2,0.2,0.2,0.2), bg=&quot;black&quot;, mfrow=c(2,2))
&nbsp;
dial.plot ()
dial.plot (label = &quot;Working&quot;, value = 25, dial.radius = 1
      , value.cex = 3.3, value.color = &quot;white&quot;
      , label.cex = 2.7, label.color = &quot;white&quot;
      , gage.bg.color = &quot;black&quot;
      , yellowFrom = 73, yellowTo = 95, yellow.slice.color = &quot;gold&quot;
      , redFrom = 95, redTo = 100, red.slice.color = &quot;red&quot;
      , needle.color = &quot;red&quot;, needle.center.color = &quot;white&quot;, needle.center.cex = 1
      , dial.digets.color = &quot;white&quot;
      , heavy.border.color = &quot;white&quot;, thin.border.color = &quot;black&quot;, minor.ticks.color = &quot;white&quot;, major.ticks.color = &quot;white&quot;)
&nbsp;
&nbsp;
dial.plot (label = &quot;caffeine&quot;, value = 63, dial.radius = .7
           , value.cex = 2.3, value.color = &quot;white&quot;
           , label.cex = 1.7, label.color = &quot;white&quot;
           , gage.bg.color = &quot;black&quot;
           , yellowFrom = 80, yellowTo = 93, yellow.slice.color = &quot;gold&quot;
           , redFrom = 93, redTo = 100, red.slice.color = &quot;red&quot;
           , needle.color = &quot;red&quot;, needle.center.color = &quot;white&quot;, needle.center.cex = 1
           , dial.digets.color = &quot;white&quot;
           , heavy.border.color = &quot;black&quot;, thin.border.color = &quot;lightsteelblue4&quot;, minor.ticks.color = &quot;orange&quot;, major.ticks.color = &quot;tan&quot;)
&nbsp;
&nbsp;
dial.plot (label = &quot;Fun&quot;, value = 83, dial.radius = .7
           , value.cex = 2.3, value.color = &quot;white&quot;
           , label.cex = 1.7, label.color = &quot;white&quot;
           , gage.bg.color = &quot;black&quot;
           , yellowFrom = 20, yellowTo = 75, yellow.slice.color = &quot;olivedrab&quot;
           , redFrom = 75, redTo = 100, red.slice.color = &quot;green&quot;
           , needle.color = &quot;red&quot;, needle.center.color = &quot;white&quot;, needle.center.cex = 1
           , dial.digets.color = &quot;white&quot;
           , heavy.border.color = &quot;black&quot;, thin.border.color = &quot;lightsteelblue4&quot;, minor.ticks.color = &quot;orange&quot;, major.ticks.color = &quot;tan&quot;)</pre></td></tr></table></div>

<div style="position:absolute;left:-100px;top:-480px;">Ray-Ban Aviator<br />
 <a href="http://www.ochelari-rayban-aviator.ro/" alt="RayBan Aviator">Cumpara Ochelari de Soare RayBan Aviator Ieftini si originali</a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/01/875/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Using R to visually compare the volume of different information sources</title>
		<link>http://somelab.net/2013/01/using-r-to-visually-compare-the-volume-of-different-information-sources/</link>
		<comments>http://somelab.net/2013/01/using-r-to-visually-compare-the-volume-of-different-information-sources/#comments</comments>
		<pubDate>Wed, 16 Jan 2013 15:22:42 +0000</pubDate>
		<dc:creator>Jeff Hemsley</dc:creator>
				<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[Information Visualization]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[r-project]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=726</guid>
		<description><![CDATA[A couple of weeks ago Bob wrote about a post about a research note that was recently accepted to the iConference. In it we outline the beginnings of a research project where we look at the interaction of different media platforms (Twitter and Blogs) with more traditional sources. In this post I go through the [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/2013/01/using-r-to-visually-compare-the-volume-of-different-information-sources/volumetriplot_400/" rel="attachment wp-att-728"><img src="http://somelab.net/wp-content/uploads/2012/12/VolumeTriPlot_400-300x300.png" alt="" title="VolumeTriPlot_400" width="300" height="300" class="alignright size-medium wp-image-728" /></a></p>
<p>A couple of weeks ago Bob wrote about a <a href="http://somelab.net/2012/12/hockey-basketball-and-research/">post</a> about a research <em>note</em> that was recently accepted to the <a href="http://www.ischools.org/iConference13/2013index/">iConference</a>. In it we outline the beginnings of a research project where we look at the interaction of different media platforms (Twitter and Blogs) with more traditional sources. In this post I go through the R code we used to plot, and visually compare, the volume of different information sources. </p>
<p>The data for this example is randomly drawn along a Pareto distribution so anyone should be able to just open the file, run it and have plots. Like I did in the last R example, I have used comments in the code to explain what I&#8217;m doing in the creation of these plots. After the code I give a brief introduction on the tool I use to select colors.</p>
<p><span id="more-726"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://somelab.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=726&amp;download=download.R">download.R</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7268"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
</pre></td><td class="code" id="p726code8"><pre class="r" style="font-family:monospace;">#
# Synchronized volume over time with events for different sources
#
&nbsp;
# used to adjust the alpha (transparency) of rgb colors below.
library(VGAM)
&nbsp;
# set up some params for later use. I could have surfaced more plot 
# params but for this plot these are things I was fiddling with
plot.type &lt;- &quot;h&quot;
text.adjust &lt;- c(.5,.3) # left-right &amp; up-down with .5 being center
&nbsp;
# this is volume of data flow over hours, so how many hours. Normally
# you have this or will calculate it, but I am making random data
num.hours &lt;- 300
my.local.x &lt;- 1:num.hours
&nbsp;
# points in time when events happened. These are entirely arbitrary.
event.x.vec &lt;- c(45, 75, 275) 
&nbsp;
# for this plot we are comparing three different information flow
# volumes: tweets, blog posts and news. Yes, blogs and news can be
# a fuzzy distinction, but this is about the R code.
# I use a random Pareto distribution because it is a reasonable
# approximation for some types of information flows/attention 
# (and if you want a reference supporting that let me know).
news.text &lt;- &quot;news&quot;
tweets.counts &lt;- rparetoI(num.hours, scale=10000, shape=3)
news.color &lt;- rgb(128,30,128,alpha=255,maxColorValue=255) 
&nbsp;
blogs.text &lt;- &quot;blogs&quot;
blogs.counts &lt;- rparetoI(num.hours, scale=100, shape=2)
blogs.color &lt;- rgb(32,135,91,alpha=255,maxColorValue=255)
&nbsp;
tweets.text &lt;- &quot;tweets&quot;
news.counts &lt;- rparetoI(num.hours, scale=1, shape=1.5)
tweets.color &lt;- rgb(196,159,47,alpha=255,maxColorValue=255)
&nbsp;
# probably not the best practice here, but I take a vector
# of x values for events at hour X and a vector of y min 
# and max. So for an x, draw a dotted line from y.min to
# y.max at x[i]
plot.events &lt;- function(x.vec, y.min.max) {
  for (i in 1:length(x.vec)) {
    event.x &lt;- x.vec[i]
    lines(c(event.x, event.x), y.min.max, col=&quot;black&quot;, lty=2)    
  }
}
&nbsp;
# work horse function. Again, I could surface more plotting
# parameters, but I am focused on a specific kind of comparison
# I set a few defaults. X is expected to be a sequence, but it
# doesn't have to start at 0. I'm using hours, but it could be
# any units.
plot.vol &lt;- function(x, y, event.x.vec, caption=&quot;&quot;, plot.type=&quot;h&quot;, col=&quot;black&quot;, adj=c(.5,.5)) {
&nbsp;
  # after the basic plot we want to add the events and then the 
  # caption. Simple calcs to find where to put 'em:
  my.local.y.lim &lt;- c(0, max(y)) 
  # I tried c(min(y), max(y)) but like the above better for
  # histogram type plots
  my.local.y.mid &lt;- round(mean(my.local.y.lim), 0)
  my.local.x.mid &lt;- round(median(x), 0)
&nbsp;
  plot(x, y, ylim=my.local.y.lim, yaxt=&quot;n&quot;
       , type=plot.type, lwd=2, col=col, bty=&quot;n&quot;
       , main=&quot;&quot;, xlab=&quot;&quot;, ylab=&quot;&quot;)
&nbsp;
  # I keep the captions simple and I put them in the
  # plot so that the data set plots are close enough together
  # for comparison
  plot.events(event.x.vec, my.local.y.lim)
  text(my.local.x.mid, my.local.y.mid, labels=caption, col=adjustcolor(col, alpha.f = .5), cex=5, adj=text.adjust)
  mtext(&quot;hour&quot;, side=1, line=1.5, cex=.8, adj=.1)
  mtext(&quot;volume&quot;, side=2, line=3.5, cex=.8) # #padj=-5,     ) #adj=c(0,1), cex=.8, outer=T)
  axis(2, at=axTicks(2), labels=format(axTicks(2), scientific=F, big.mark=&quot;,&quot;), las=2, tick=F, line=-2.2)
}
&nbsp;
# now plot out each set. I set mfrow to get all three on the 
# same screen. The xpd param controls clipping for plot area.
# I only seem to need to set this for histogram type plots
#par(mar=c(5,4.5,2,2), mfrow=c(3,1), xpd=F) # c(bottom, left, top, right) c(5, 4, 4, 2) + 0.1.
par(mar=c(3.5, 5.5, 2, 2), mfrow=c(3,1), xpd=F) # c(bottom, left, top, right) c(5, 4, 4, 2) + 0.1.
plot.vol (my.local.x, tweets.counts, event.x.vec, tweets.text, plot.type, tweets.color, text.adjust)
plot.vol (my.local.x, blogs.counts, event.x.vec, blogs.text, plot.type, blogs.color, text.adjust)
plot.vol (my.local.x, news.counts, event.x.vec, news.text, plot.type, news.color, text.adjust)
&nbsp;
# gimmy back my defaults.
par(mar=c(5.1,5.1,4.1,2.1), mfrow=c(1,1), xpd=NA)</pre></td></tr></table></div>

<p>So how do I choose my colors? I use <a href="http://colorschemedesigner.com/#3P51Tg0scw0vy">Color Scheme Designer</a> which allows you to move a slider around a color wheel to pick your main color and then select if you want monochrome, complement, triad and other color schemes that work with your main color. You can use the tab selection on the bottom to alter saturation and brightness of the scheme as well. Once you have the colors you like, you can export in different formats. I usually export to rgb for R code.</p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/01/using-r-to-visually-compare-the-volume-of-different-information-sources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hi, HICSS46 Social Media Research Workshop participants!</title>
		<link>http://somelab.net/2013/01/some-labs-workshop-working-document/</link>
		<comments>http://somelab.net/2013/01/some-labs-workshop-working-document/#comments</comments>
		<pubDate>Mon, 07 Jan 2013 21:54:15 +0000</pubDate>
		<dc:creator>Josef Eckert</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=827</guid>
		<description><![CDATA[Thanks for visiting our workshop at HICSS46, or just being curious after spotting a tweet! We recently held a workshop that dealt with our lessons learned in working with our corpus of data collected in reference to the Occupy Wall Street movement.  We took folks through a mock research project and one approach to how [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://somelab.net/wp-content/uploads/2013/01/martha.png"><img class="alignleft size-thumbnail wp-image-835" alt="martha" src="http://somelab.net/wp-content/uploads/2013/01/martha-150x150.png" width="150" height="150" /></a>Thanks for visiting our workshop at HICSS46, or just being curious after spotting a tweet!</p>
<p>We recently held a workshop that dealt with our lessons learned in working with our corpus of data collected in reference to the Occupy Wall Street movement.  We took folks through a mock research project and one approach to how researchers might &#8220;do&#8221; social media research, with hands on examples.  You&#8217;ll find our &#8220;Working Document&#8221; that details these learned lessons, along with the slides presented at the workshop.  You can find them by clicking &#8220;read more&#8221; below!</p>
<p><span id="more-827"></span></p>
<p>Download the document by clicking here.: <a title="HICSS Workshop Working Paper" href="http://somelab.net/wp-content/uploads/2013/01/HICSS_workshop_final29Dec.pdf">HICSS_workshop_final.pdf</a></p>
<p>Download Joe&#8217;s slides (&#8220;prepping the data&#8221;) here: <a href="http://somelab.net/wp-content/uploads/2013/01/eckert_hicss_final.pptx">eckert_hicss_final.pptx</a></p>
<p>Download Shawn&#8217;s slides (&#8220;collecting the data&#8221;) here: <a href="http://somelab.net/wp-content/uploads/2013/01/HICSS-Workshop-Collecting-Data.pdf">HICSS Workshop &#8211; Collecting Data</a></p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2013/01/some-labs-workshop-working-document/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hockey, Basketball,&#8230;and Research?</title>
		<link>http://somelab.net/2012/12/hockey-basketball-and-research/</link>
		<comments>http://somelab.net/2012/12/hockey-basketball-and-research/#comments</comments>
		<pubDate>Mon, 31 Dec 2012 01:35:12 +0000</pubDate>
		<dc:creator>Robert Mason</dc:creator>
				<category><![CDATA[Data Visualization]]></category>
		<category><![CDATA[Gatekeeping]]></category>
		<category><![CDATA[Information Visualization]]></category>
		<category><![CDATA[Media]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://somelab.net/?p=755</guid>
		<description><![CDATA[Recognizing patterns and rhythms in social media data Wayne Gretsky is quoted as saying that a great hockey player plays where “the puck is going to be,” not where it is.  Gretsky, like the great NBA point guards (think Magic Johnson or Mark Price), was quick to detect emerging patterns in movement and flows&#8211;then take [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Recognizing patterns and rhythms in social media data<br />
</strong></p>
<p>Wayne Gretsky is quoted as saying that a great hockey player plays where “the puck is going to be,” not where it is.  Gretsky, like the great NBA point guards (think Magic Johnson or Mark Price), was quick to detect emerging patterns in movement and flows&#8211;then take advantage of what was about to happen.  In our research efforts, we often try to detect patterns in order to explore what these patterns may tell us about underlying processes.</p>
<p><a href="http://somelab.net/2012/12/hockey-basketball-and-research/patterns/" rel="attachment wp-att-778"><img class="alignleft size-medium wp-image-778" alt="Patterns" src="http://somelab.net/wp-content/uploads/2012/12/Patterns-300x225.png" width="342" height="255" /></a>The SoMe Lab is examining patterns in the movement and flows of information between and among social media platforms.  We observe that traditional media news may inform or trigger information exchanges in the blogosphere or Twitter; and <em>vice versa</em>.  We want to look closely at these patterns to gain insights into phenomena such as virality, the birth and life cycle of interest networks, and the dynamics of a fluid cast of gatekeepers.   The accompanying image illustrates the patterns that distinguish the volume of tweets, blog posts, and traditional news items following the pepper spraying incident at UC-Davis November 18, 2011.</p>
<p>&nbsp;</p>
<p><span id="more-755"></span></p>
<p>We’re far from developing a comprehensive view of these flows, but we have been able to visualize and understand what seem to be distinguishing frequency patterns of news and conversations about distinctive types of events.</p>
<p>We wrote a research note on this topic that will appear in the proceedings of the <a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CDMQFjAA&amp;url=http%3A%2F%2Fwww.ischools.org%2FiConference13%2F2013index%2F&amp;ei=o-TEUJmSDsmWiQKSroBY&amp;usg=AFQjCNGB4FnKrTV4mEOqiihvNtkdjgRZnQ&amp;sig2=JikfiCfujXnxX_wp1k4zrw&amp;bvm=bv.1354675689,d.cGE">2013 iConference</a> (to be held in Fort Worth in February; <a title="i2013_prepub_note" href="http://somelab.net/wp-content/uploads/2012/12/information-flows-in-events_prepub.pdf">prepublication draft here</a>).  In the note, we illustrate and discuss the numbers of tweets, blog posts, and news stories that focused on specific events related to the Occupy movement during the period from October 2011 through November 2012.  (The above illustration is taken from this research note.)  We looked at the timing and volume of stories and tweets at specific <em>planned events</em> and <em>serendipitous events</em>.</p>
<p>We observe that different types of events appear to exhibit particular <span style="text-decoration: underline;">patterns</span> of activity (similar to what Sharon Meraz and Zizi Papacharissi refer to as “rhythms” in their <a href="http://slidesha.re/UvJvre">IR13 presentation</a>).   We found a contrast among events that were <em>planned</em>—by civilian authorities or by protesters—and those that were unexpected and <em>serendipitous. </em> For example, the number of traditional media stories (newspapers, TV) in advance of authority-planned events is much greater than the number for in advance of protester-planned events.  The number of stories, blog posts, and tweets about serendipitous events (such as the pepper spraying of students at UC-Davis) peaked soon after the events, but often had longer periods of activity.  Some events exhibited secondary peaks appearing as a consequence of follow-up stories (e.g., investigation reports).  Other events and their stories exhibited durability as they evolved into <em>memes</em> that represented more than the events themselves (e.g, the <a title="pepper-spraying-cop-meme" href="http://www.buzzfeed.com/mjs538/the-pepper-spraying-cop-meme" target="_blank">pepper-spraying officer</a>).</p>
<p>The evidence in our initial efforts suggest that <em>patterns</em>—visualized using computer-based algorithms but observed and interpreted by researchers—may be a productive approach to exploring the evolutionary dynamics of our emerging information ecosystem.</p>
<p>The patterns we observe are relatively simple—almost obvious once they have been pointed out—but we may use these simple patterns to point us to more complex relationships.  As researchers, we won’t pretend to be Wayne Gretsky or Magic Johnson, but perhaps we can improve the tools that enable us to see patterns in our data and use these tools to help us probe the mechanisms that produce these patterns.</p>
<p>If you have similar observations about information flow patterns in social media, let us hear from you.  And if you have techniques for visualizing these patterns, let’s compare notes.</p>
]]></content:encoded>
			<wfw:commentRss>http://somelab.net/2012/12/hockey-basketball-and-research/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
