Name that Baby!

I had another itch to create a fun Data Visualization.  This time, I explore baby names.  The Social Security Administration has a great webpage to look at popular baby names by year.  I knew this data would be perfect for a Tableau visualization.  The problem was, the CGI interface only allowed you to view one year of data at a time and didn't have a data export link.  So, I was faced with two options: Manually go to each of the 135 pages and copy/paste the data into Excel, or write a script.

I knew the social security web page was a CGI program (meaning all processing and HTML generation happens on the server).  It allowed the user to POST to it and pass in a "year" parameter, and in return would get an HTML page with a table of baby names for that year.  I knew I could write a script to loop through the years 1880-2015 and call the page and somehow parse the HTML results into a table I could easily turn into a tableau data set.

I've been getting re-acquainted with coding and have been learning (and loving) Python.  It has turned into a swiss-army-knife of sorts.  There is an http request extension which allows you to generate a POST request and receive the resulting HTML as a string.  So, looping through the years and generating POST requests and receiving HTML output was the easy part.  The hard part was turning that into a data set (either excel or csv) that could be imported.

I could have parsed the HTML to create a csv file by looking for the <TD> and <TR> tags, but I knew for this purpose it was over-engineering.  However, I knew that in a web browser, I could copy and paste the contents of an HTML table and paste them into Excel directly.  Since this was a one-time-use of this data, I thought it was a good approach.

I created a python script to generate an HTML table with 2,700 rows: one row for each rank (1-20) for each year (1880-2015).  To find the "relevant" part of the HTML, I just ham-fisted a find() function to find the start of where their HTML table began.  Of course, this method is not flexible, and would break if they changed their CGI code.  But, again, for a one-time-use, I was happy with it.  I also, for good measure, included a short sleep() at the bottom of each loop just so I didn't accidentally simulate a Denial-of-Service attack.

The code is below, but I AM NOT CERTIFYING THAT IT WORKS.  If you use it it is AT YOUR OWN RISK.  I claim NO RESPONSIBILITIES for what you use this code to do.  That said, it worked for me as a quick one-time-use hack.  I think Python is a great tool to have in the toolkit, and it has a wide array of extensions for things just like this.

So, sorry for geeking out for a bit.  Below you'll see the final result.  My goal was a clean, intuitive, interactive and fun visualization.  

Click on the thumbnail below to see it on Tableau Public!

Some fun facts I discovered while playing with it:

Did you know Bertha was once a popular baby name?

Did you know John is like the Michael Jordan of Baby Names (persistently #1).  Ironically, Michael is the Kobe Bryant of Baby Names, the more recent #1.  

I'm looking forward to all of the college-aged Jacob's entering the workforce in about 10 years.

Emma has got to be the "comeback name of the year."  It only took 100 years for it to come back.

Again, please let me know what you think!

Tableau Dashboard: Labor Statistics 1990-2015

I found some interesting data at the Bureau of Labor Statistics.  I wanted to make a dashboard that focused on one measure (in this case, number of employees) across a time dimension, a categorical dimension and a geographic dimension.    It's a little slow to load because it's driven by 1.2 million rows of data (25 years x every industry x every county).



I tried to emphasize clean and usable visualizations that allowed you to answer interesting questions.  The version above is narrow format to fit on this page.  Click here to view the full version which includes additional graphs.  As always I appreciate any feedback or comments about this.

Analyzing Dice Statistics with Tableau

And I thought it couldn't get nerdier than Bowling and Data Visualzation, oh boy...

More powerful dice simulation tools exist, but I wanted to challenge myself to make an interactive and attractive way to visualize common RPG dice rolls (in this case, damage).  I am also going to work on a "damage per round" simulator where you can "build" a character and monster and have a visualization that shows you the average damage you might do per round as well as the expected number of rounds to defeat it.

I generated the data using a little bit of Python scripting.  I wanted to challenge myself to use python.  I can't take credit for the algorithm, but here's the script.  It generates text in csv format:


And here is the visualization, which is available on Tableau public. 

Click to view on Tableau Public

Meet the Team, Part 1

Hey, it's been almost a year guys!  No one reads this, but for me it's like a journal, so whatever.

I'll be posting pics of Team Triple Toss, which is going strong (and level 5-6!).  I'd like to journal the journey as it goes, and I've been keeping a journal of the adventure, but alas, time is not a kind mistress.  But, here is a picture of one of the team members!


Meet Toggaf, the brains of the operation, elf mage who constantly makes my job as DM incredibly hard.


I'll post the other characters throughout the week.

Team Triple Toss

I've been DM'ing a Swords & Wizardry Game on Roll20.   My players have finally come up with their adventuring party's name.  Their name was inspired by their first few sessions, when I was not fully-understanding the rulesof missile weapons, and the party was very, very effective (too effective) at throwing 3 darts per round.

Presenting, Team Triple Toss.

When someone suggested the name, the image above was evoked immediately.  I just now had the patience to draw it out.


Birthday Girl

It's been too long.  I want to maintain this blog, but want to branch out from the normal post-a-picture-every-6-months usual.  



Freyja_1st_Birthday - 21.jpg

Here's a picture of our new (well, we got her like 8 months ago) dachshund, Freyja.  (Get it?  Thor and Freyja?)  She tries to fill the void that Cleo left with lots of barking and mischief.  I guess Dachshunds are just bred to be brats.  But we love her.

Metroid Metal Muppets

Chances are you know at least two of the words in the title.  If you are what I would call a "cool dude," you know all three.

I was just at Magfest, a huge celebration of geekery, gaming and music.  Between getting my face melted off, some of the Metroid Metal forum members got together for a Secret Santa gift exchange.  For my match, I decided to get more creative.  

I created the above poster and printed it at 16x20.  It depicts the Metroid Metal band members as muppets.  I had the idea for months ahead of time, but the impending gift exchange inspired me to finish it.  It took 15-20 hours in photoshop.  The more I worked on it, the more I learned just how much in common attendees of Magfest and similar events have with the Muppets.  We're all a little weird, we're all a band of misfits.

It was a great success as a gift and as a creative excercise.  He was able to get it signed by the band and everyone loved it!

If you do not know about Metroid Metal, you are wasting time by not clicking this link.  The whole VGM scene is amazing and I was happy to celebrate being a geek with some of the coolest geeks I know.

Split-Tone Time Machine With Dogs

Today was a glorious Fall day.  I decided to do a portrait shoot with the pups. I also split-toned the photos in lightroom to give it that vintage look.  I added yellow to the highlights and purple to the shadows.  This is not to be confused with using Instagram as a crutch to try and make a boring cell-phone photo appear interesting...  

Personally I love these shots (but I'm biased based on the subject matter).  I'm not always a fan of this coloring technique, but with the lighting and the shallow depth of field, I think it helps the images quite a bit.  I love these photos of Cleo.  You can just see her age in every white hair on her nose.



Meatballs and Covered Bridges

A couple of weeks ago on Labor Day weekend we took a drive out to Indiana.  It was a spontaneous adventure. Our mission:  Check out the "Little Italy" festival in Clinton, Indiana.  Then, maybe find some covered bridges (they are fairly prolific and the area is quite proud of them).

When we arrived to Clinton, Indiana, we were surrounded by a scene stuck in the 50s.  I've been in the midwest long enough to know the type of small towns that are scattered across the counties, left behind because they are just a few miles away from the Interestate.  We were greeted by the smell of marina sauce, fried snickers, and farm equipment.

Our luck could not have been better, because just as soon as we made our rounds of the artery-clogging booths and ederly arts-and-crafts vendors, we saw that they were going to start the meatball eating contest.  The children's contest was amateur hour.  What I was interested in was the Men's division.  The real olympians of gorging yourself with balls of meat.  I hope I captured "The Last Meatball Supper" adequately.

It was quite impressive to witness in person.

After we had our fill of nachos and diet soda, we headed out to find the old, forgotten, dusty roads that wound around and through some covered bridges.  I had never seen one in person, and they were kind of fun to photograph.  Christina was a little anxious driving over them, but I've seen the trucks people drive around these old dirt roads, and I knew we'd be fine.

And we were.

Horace Digital Painting

I may officially have a problem.  I love drawing Horace Gentry.  He's just so fun to draw, and he's a character I have some attachment to, since I play in a regular D&D session as him.  This piece in particular I busted out right before bed, thinking I was going to do a quick sketch.

Well, I went a little further, and did this piece in about 2 hours with Photoshop and my Wacom tablet.  When I've been running on the treadmill I'll do some painting in my head sometimes.  Imagine new ways to show hair highlights, blend skin tones, etc.  So, I was dying to do another Horace piece in a new style.  It's obviously way more detailed than I usually do.  I was pleasantly surprised at how it turned out.

One day I'd love to write up my digital painting process.  Of course, I know I'm not nearly as good as most people that I'm drawing my inspiration from, but I'd love to know how my process stacks up to other profressional digital painters.

Watercolor Horace

I have been a strictly digital artist for years now.  All I need is photoshop and a Wacom tablet, right?  It's served me quite well all these years, but there's just something so wonderful about just putting marks on real physical paper. 

I've been itching to get back into drawing and sketching, and what better way to do it than with a nice pencil, in a nice sketchbook on a nice comfy couch?

This past weekend I bought a nice mechanical pencil, erasers, brush marker and watercolor set.  one of my favorite subjects has been my Swords and Wizardry (a D&D clone) character, Horace.  Now a level 2 (by accident!) Cleric, I tried to capture him here:

I have to say I'm quite pleased with how it turned out.   I think watercolors quite suit my cartooning style.  It was fun and liberating to add layers of color for shading, etc.  I plan to do many more watercolor pieces, considering how fun this one was to do!