Archive for the ‘People’ Category

Money and CA Propositions

Monday, June 7th, 2010

Since tomorrow we’ll be having another one of those practice democracy drills here in California, I thought I’d put together a few bar charts.

There are five propositions on tomorrow’s ballot. In researching them, Lena came across the Cal-Access Campaign Finance Activity: Propositions & Ballot Measures.

Unfortunately, for each proposition, you have to click through each committee to get the details for the amount of money they’ve raised and spent. Here’s a run-down in visual form, the only data manipulation I did was round to the nearest dollar. Note: no committees formed to support or oppose Proposition 13.

Here’s how much money was raised, by proposition:

Money Raised

Just in case you didn’t get the full picture, here is the same data plotted on a common scale:

Money Raised (common scale)

And the same two plots for money spent1:

Money Spent

Money Spent (common scale)

It could just be my perception of things, but I get pretty suspicious when there’s a ton of money involved in politics, especially when it’s this lopsided.

The only thing I have to add is you should Vote “YES” on Prop 15, because Larry Lessig says so, and so do the Alameda County Greens!

Update #1: Let me write it out in text, so that the search engines have an easier time finding this. According to the official record from Cal-Access (Secretary of State), as of May 22nd, 2010, there were $54.4 million spent in support of various propositions, most notably $40.5 million on Prop 16, $8.9 million on Prop 17, and $4.6 million on Prop 14. Compare that with a “grand” total of less than $1.2 million spent to oppose them, with a trivial $78 thousand (!!) to oppose Prop 16′s $40.5 million deep pockets.

Update #2: The California Voter Foundation included more recent totals (they don’t seem to be that different), as well as a listing of the top 5 donors for each side of a proposition in their Online Voter Guide.

Also, here’s the python code used to generate these plots (enable javascript to get syntax highlighting):

# Create contributions and expenditures bar charts of committees supporting and
# opposing various propositions on the California Ballot for June 8th, 2010
# created by Paul Ivanov (http://pirsquared.org)

# figure(0) - Contributions by Proposition (as subplots)
# figure(1) - Expenditures by Proposition (as subplots)
# figure(2) - Contributions on a common scale
# figure(3) - Expenditures on a common scale

import numpy as np
from matplotlib import pyplot as plt
import locale

# This part was done by hand by collecting data from CalAccess:
# http://cal-access.sos.ca.gov/Campaign/Measures/
prop = np.array([
     4650694.66, 4623830.07    # Yes on 14 Contributions, Expenditures
    , 216050, 52796.71         # No  on 14 Contributions, Expenditures
    , 118807.45, 264136.30     # Yes on 15 Contributions, Expenditures
    , 200750.01, 86822.79      # No  on 15 Contributions, Expenditures
    , 40706258.17, 40582036.58 # Yes on 16 Contributions, Expenditures
    , 83187.29,	78063.91       # No  on 16 Contributions, Expenditures
    , 10328675.12, 8932786.06  # Yes on 17 Contributions, Expenditures
    , 1229783.79, 965218.48    # No  on 17 Contributions, Expenditures
    ])
prop.shape = -1,2,2 

def currency(x, pos):
    """The two args are the value and tick position"""
    if x==0:
        return "$0"
    if x < 1e3:
        return '$%f' % (x)
    elif x< 1e6:
        return '$%1.0fK' % (x*1e-3)
    return '$%1.0fM' % (x*1e-6)

from matplotlib.ticker import FuncFormatter
formatter = FuncFormatter(currency)

yes,no = range(2)
c = [(1.,.5,0),'blue']  # color for yes/no stance
a = [.6,.5]             # alpha for yes/no stance
t = ['Yes','No ']       # text  for yes/no stance

raised,spent = range(2)
title = ["Raised for", "Spent on" ] # reuse code by injecting title specifics
field = ['Contributions', 'Expenditures']

footer ="""
Data from CalAccess: http://cal-access.sos.ca.gov/Campaign/Measures/
'Total %s 1/1/2010-05/22/2010' field extracted for every committee
and summed by position ('Support' or 'Oppose').  No committees formed to
support or oppose Proposition 13. cc-by Paul Ivanov (http://pirsquared.org).
""" # will inject field[col] in all plots

color = np.array((.9,.9,.34))*.9 # spine/ticklabel color
plt.rcParams['savefig.dpi'] = 100

def fixup_subplot(ax,color):
    """ Tufte-fy the axis labels - use different color than data"""
    spines = ax.spines.values()
    # liberate the data! hide right and top spines
    [s.set_visible(False) for s in spines[:2]]
    ax.yaxis.tick_left() # don't tick on the right

    # there's gotta be a better way to set all of these colors, but I don't
    # know that way, I only know the hard way
    [s.set_color(color) for s in spines]
    [s.set_color(color) for s in ax.yaxis.get_ticklines()]
    [s.set_visible(False) for s in ax.xaxis.get_ticklines()]
    [(s.set_color(color),s.set_size(8)) for s in ax.xaxis.get_ticklabels()]
    [(s.set_color(color),s.set_size(8)) for s in ax.yaxis.get_ticklabels()]
    ax.yaxis.grid(which='major',linestyle='-',color=color,alpha=.3)

# for subplot spacing, I fiddle around using the f.subplot_tool(), then get
# this dict by doing something like:
#    f = plt.gcf()
#    adjust_dict= f.subplotpars.__dict__.copy()
#    del(adjust_dict['validate'])
#    f.subplots_adjust(**adjust_dict)

adjust_dict = {'bottom': 0.12129189716889031, 'hspace': 0.646815834767644,
 'left': 0.13732508948909858, 'right': 0.92971038073543777,
 'top': 0.91082616179001742, 'wspace': 0.084337349397590383}

for col in [raised, spent]: #column to plot - money spent or money raised
    # subplots for each proposition (Fig 0 and Fig 1)
    f = plt.figure(col); f.clf(); f.dpi=100;
    for i in range(len(prop)):
        ax = plt.subplot(len(prop),1, i+1)
        ax.clear()
        p = i+14    #prop number
        for stance in [yes,no]:
            plt.bar(stance, prop[i,stance,col], color=c[stance], linewidth=0,
                    align='center', width=.1, alpha=a[stance])
            lbl = locale.currency(round(prop[i,stance,col]), symbol=True, grouping=True)
            lbl = lbl[:-3] # drop the cents, since we've rounded
            ax.text(stance, prop[i,stance,col], lbl , ha='center', size=8)

        ax.set_xlim(-.3,1.3)
        ax.xaxis.set_ticks([0,1])
        ax.xaxis.set_ticklabels(["Yes on %d"%p, "No on %d"%p])

        # put a big (but faded) "Proposition X" in the center of this subplot
        common=dict(alpha=.1, color='k', ha='center', va='center', transform = ax.transAxes)
        ax.text(0.5, .9,"Proposition", size=8, weight=600, **common)
        ax.text(0.5, .50,"%d"%p, size=50, weight=300, **common)

        ax.yaxis.set_major_formatter(formatter) # plugin our currency labeler
        ax.yaxis.get_major_locator()._nbins=5 # put fewer tickmarks/labels

        fixup_subplot(ax,color)

    adjust_dict.update(left=0.13732508948909858,right=0.92971038073543777)
    f.subplots_adjust( **adjust_dict)

    # Figure title, subtitle
    extra_args = dict(family='serif', ha='center', va='top', transform=f.transFigure)
    f.text(.5,.99,"Money %s CA Propositions"%title[col], size=12, **extra_args)
    f.text(.5,.96,"June 8th, 2010 Primary", size=9, **extra_args)

    #footer
    extra_args.update(va='bottom', size=6,ma='left')
    f.text(.5,0.0,footer%field[col], **extra_args)

    f.set_figheight(6.); f.set_figwidth(3.6); f.canvas.draw()
    f.savefig('CA-Props-June8th2009-%s-Subplots.png'%field[col])

    # all props on one figure (Fig 2 and Fig 3)
    f = plt.figure(col+2); f.clf()
    adjust_dict.update(left= 0.06,right=.96)
    f.subplots_adjust( **adjust_dict)
    f.set_figheight(6.)
    f.set_figwidth(7.6)

    extra_args = dict(family='serif', ha='center', va='top', transform=f.transFigure)
    f.text(.5,.99,"Money %s CA Propositions"%title[col], size=12, **extra_args)
    f.text(.5,.96,"June 8th, 2010 Primary", size=9, **extra_args)

    extra_args.update(ha='left', va='bottom', size=6,ma='left')
    f.text(adjust_dict['left'],0.0,footer%field[col], **extra_args)

    ax = plt.subplot(111)
    for stance in [yes,no]:
        abscissa=np.arange(0+stance*.30,4,1)
        lbl = locale.currency(round(prop[:,stance,col].sum()),True,True)
        lbl = lbl[:-3] # drop the cents, since we've rounded
        lbl = t[stance]+" Total"+ lbl.rjust(12)
        plt.bar(abscissa,prop[:,stance,col], width=.1, color=c[stance],
                alpha=a[stance],align='center',linewidth=0, label=lbl)
        for i in range(len(prop)):
            lbl = locale.currency(round(prop[i,stance,col]), symbol=True, grouping=True)
            lbl = lbl[:-3] # drop the cents, since we've rounded
            ax.text(abscissa[i], prop[i,stance,col], lbl , ha='center',
                    size=8,rotation=00)

    ax.set_xlim(xmin=-.3)
    ax.xaxis.set_ticks(np.arange(.15,4,1))
    ax.xaxis.set_ticklabels(["Proposition %d"%(i+14) for i in range(4)])
    fixup_subplot(ax,color)

    # plt.legend(prop=dict(family='monospace',size=9)) # this makes legend tied
    # to the subplot, tie it to the figure, instead
    handles, labels = ax.get_legend_handles_labels()
    l = plt.figlegend(handles, labels,loc='lower right',prop=dict(family='monospace',size=9))
    l.get_frame().set_visible(False)
    ax.yaxis.set_major_formatter(formatter) # plugin our currency labeler
    f.canvas.draw()
    f.savefig('CA-Props-June8th2009-%s.png'%field[col])

plt.show()
  1. I don’t fully understand what these numbers mean, as some groups’ “Total Expenditures” exceed their “Total Contributions” and still had positive “Ending Cash”

Standing up to the Madness is an excellent read

Saturday, May 2nd, 2009

Standing up to the Madness: Ordinary Heroes in Extraordinary TimesMy labmate Tim sent me an email on Wednesday (April 15th) saying that Amy Goodman “Democracy Now! fame, and my heroin” [sic] was speaking on campus at noon. The place was packed, and it’s the best way I could have imagined to snap back out of the Qualifying Exam bubble I’ve spent the last several months in, and re-engage with the world at large.

One of the excuses for the tour is the paperback release of Standing up to the Madness: Ordinary Heroes in Extraordinary Times by Amy and David Goodman.

Now that I’m a tenured grad student, I can actually allow myself to read for pleasure – guilt free! So I went to the library that Thursday, and picked up the hardcover, which came out last year.

What I liked about this book is what sets it apart from other political books of today. Amy and David don’t just provide us with a laundry list of wrongdoing by the Bush administration, congress, various governmental agencies, as well as highlighting some of the ongoing local struggles. Though the book is chock-full of such details, they are all provided in the context of a particular vignette. What’s more – instead of simply stating the problems, or providing an outline of the authors’ opinions regarding what course of action should be taken, the book highlights the work average citizens have already done to oppose injustice, censorship, racism, etc. One example is T-shirt “terrorist” Raed Jarrar, who wore a shirt with the words “We will not be silent” – written in both English and Arabic – a reference to the White Rose – and was forced to put another shirt over it because JetBlue customers were threatened or offended. With the help of the ACLU, Jarrar sued the TSA and JetBlue, who ended up paying $240,000 to settle the discrimination charges.

Like Hochschild’s King Leopold’s Ghost1, this book is non-fiction that reads like fiction. Not because it is well-written, though it is, but because of the shocking realities of the content. Leadership cannot be taught, it can only be revealed. Standing up to the Madness gives us dozens of snapshots of the ongoing work of ordinary heroes.

  1. which, after I first read it in 2001 became my measuring stick for gauging the quality of non-fiction

My first foray into the production of motion pictures

Wednesday, November 28th, 2007

I want to thank Curt Siffert for granting me permission to use his song “All Aboard (v2)” which you can download (for free) here. This is the first video1 I’ve ever made, but I’ve wanted to make films for as long as I’ve been writing2 (even before Sally said “Hey guys, I’m going to make movies!” and then did), so I’m glad I’ve finally started.

I put this together for a video contest here at I-house. You can see all of the videos for the contest here, the winner was Life At I-House, A Glimpse by KirstyandEliana.

  1. yes, okay, it’s more of a slideshow with an intro, but my brother Mike told me that Ken Burns would be proud
  2. creatively, which would be 1999warning: link contains some extremely cheesy content, including an early version of what evolved into this journal

Weinberger’s talk and OLPC

Wednesday, August 8th, 2007

Here’s David Weinberger talking about Everything is Miscellaneous (the book I reviewed here and many others did here). The hour-long talk stands on its own and covers much of the book, though I don’t recommend watching it if you’re planning to read the book.

I went to Linux World Expo today and played with one of these upcoming One-Laptop-Per-Child project’s XO-1 laptops at the Creative Commons booth.
OLPC XO-1 at Linux World
Photo by Scott Beale / Laughing Squid (cc)

While OLPC is a noble effort, I think it still feels like another example of trying to solve a problem with technology where technology is not the bottleneck. For example, I was bummed that they took away the hand-crank power-supply a while back because I think this severely limits who’ll be able to eventually use these. The UI and networking stuff is pretty novel, but my overall impression is that it’s too gadgety. I felt pretty lost in all just the buttons on the keyboard, but then again I only used it for 20 minutes and this wasn’t made for me. With that said, I’m not holding my breath, but it could be a great thing if this takes off. I say “could” because technology by itself just isn’t enough1. This is a point I keep coming back to again and again.

  1. A point the OLPC project acknowledges in their vision.

thoughts about the sea of information

Tuesday, July 31st, 2007

Everything is MiscellaneousI just finished reading1 David Weinberger’s Everything is Miscellaneous and I find it to be a pretty engaging description of how the state of knowledge evolved with time, and now it has given me a chance to write down some thoughts.

The basic gist of the book is that knowledge is no longer tied to the physical (e.g. books), which used to limit how one went about organizing and finding it (e.g. Dewey decimal system). Now we can attach as much metadata as our hearts desire, which technology helps us sift through to help us find what we want. Instead of each book having a particular place, as in a warehouse, or a relative position (alphabetical within a subject), an individual leaf of information lives on a multitude of trees simultaneously, and the trees themselves are dynamically created and rearranged for each user on the fly.

The first few chapters focused on how knowledge has been historically organized over the centuries. I did skim through a few of the middle chapters, it seemed to be pretty straightforward commentary on the digital lives most of us now lead – user created content, social tags and lists, auto-recommendation, etc. Some over-simplified, in that sometimes unavoidable awkwardness that comes out of describing something neat and complex yet obvious to those leading digital lives. It was refreshing to read about the downsides of scientific publications like Nature and Science (e.g. good science isn’t enough2 to publish because of how few articles get in, the research has to be “sexy”) and how the new comer PLoS One aims to correct these shortcomings. Because this was just the topic that was discussed at the Neuroscience retreat last year (in a lecture about the then-upcoming PLoS One), scientists care about this stuff and it comes back every so often.

Although I never considered it myself, I totally got it when Danae started her Master of Library Science. I would argue that more than anything else, what we’re producing most of in the world today is information. Perhaps capture and disseminate is a more appropriate description. Information, by itself, is agnostic to how it gets used (or abused). But the Cliff Stoll-ian side of me says that we should be weary of the exponentially growing amount of information, and not just for the obvious Big Brother / privacy reasons (e.g. “Plate reader draws objections of ACLU“).

The non-obvious threat of information is that we’re drowning in it (my claim). Here I’m glad Weinberger mentions Cass Sunstein’s book Republic.com3, the basic thesis of which4 is that with more and more information out there, we can all end up listening, watching, and reading only that which reinforces our world view – drowning out everything else without even having to plug up our ears and going “LALALALALA”, but by finding podcasts, channels, and blogs where others are doing the “LALALALALA” for us.

Touched by His Noodly AppendageIn many ways, this leads to huge portions of the population nonsensically parroting something like “Evolution is just a theory” to one another. Scientific theories both explain observed phenomena (why living organisms share so much of their DNA) and make predictions about future observations (my niece’s hair color based on that of her parents, or maybe one you don’t hear about so often: regular use of antibacterial soap might be a bad idea, placing evolutionary pressure on the bacteria to evolve immunity to the soap). Moreover simpler or more elegant, straightforward theories are preferred (aka Occam’s Razor). Which is why Intelligent Design is on par with Flying Spaghetti Monsterism, not science. But this has been better described in other places and elsewhere (suggestions welcome). The point is that I’m worried that there’s no way anyone get through to the people that end up isolating themselves in their own feedback loops. I worry that not enough people engage enough to think on their own. Technology can’t fix this problem. No amount of metadata will ever be enough5.

In this entry, I’ve linked to Wikipedia a few times, and while I agree it should not be regularly used for primary research, I also welcome the explicit uncertainty inherent in a publicly editable wiki, as it reflects the tentative nature of information, and I think we should be somewhat skeptical about a great deal. I have also been recommended, though I have not yet read Manuel Castells’ The Internet Galaxy, though perhaps it is more topical for a future post I’ve been brewing for a while. Has anyone read it? …Anyway, this is my first pass at processing this stuff, hope it’s not too scatterbrained6.

  1. In three evening sittings at Moe’s Books
  2. some might even argue “isn’t required”
  3. Republic.com starts with a succinct vignette: “the daily me
  4. on my quick skimming at the UCD bookstore this past Picnic Day.
  5. a point I think the book misses
  6. Cory Doctrow does a better job reviewing the book.