Natural language analysis of Bowie personas

Share this post:

As musical styles changed through the seasons of David Bowie’s career, he ably adapted to the trends and changes in sound. His evolving personas were visually striking and almost immediately engaging. Many became iconic.


Tied to those personas are guitar riffs and drum patterns that are instantly recognizable. It is little wonder that his mastery of sound and vision inspired us.

As for many of us, his passing last year took me by surprise. So, I turned to digital design and development as a way of remembering him. I tinkered on a Bluemix app called ‘Ziggy’ that works to showcase the psychology behind Bowie’s personas, using Watson Personality Insights.

Bluemix app called 'Ziggy'

You can check out the app yourself by clicking the button below:

My hypothesis was that perhaps his very visual personas aligned with distinct emotional or psychological directions too. There could be many influences when writing songs… I wondered if Bowie consciously or subconsciously might have taken on a mental persona when he made the albums too.

So, I began by drawing my understanding of Bowie’s personas as cartoon characters using Adobe Illustrator. Since Bowie was so fashionable, I used Pantone’s Colors of Spring for 2016 as my palette (which worked really well for the outfits I researched when drawing). I also began listening more closely to his music, associating date ranges, and subsets of his albums with each persona.

Watson’s insights into Bowie’s lyrics

Perhaps the aspect of this project that excited me most was exploring the different values of the persona data. I was frantically programming the JavaScript to combine and input the data for each persona and time, and was desperately eager to dig into it each time I iterated on the code.

There’s a toggle button at the top of the page that turns the line charts into bar charts to compare personas rather than timelines. Most of the code that combines the comparison data is written in JavaScript on the web client. (That could just as easily be handled on the server.)

There’s actually a lot of data for Watson to work with, and it takes a minute or two to produce the individual insights on the combined lyrics for each persona, so it is freshly cached each time the app is deployed to Bluemix.


What’s immediately apparent from the ‘openness’ chart above is that openness varied for each persona. It is very strong generally for most of the personas – in the 80th percentile – but it drops significantly in the Aladdin Sane and Thin White Duke periods.

Bowie himself critiqued the ‘Thin White Duke’ as a ‘nasty piece of work’. It marks a period of time when Bowie struggled with drug addiction.

If you play with the picker, you’ll see that the artistic interests highest of all for the lyrics at that time, yet the imagination was lowest of all in his career.


Curiously, for two of the strongest visual extraverts—Ziggy Stardust and Pierrot —the lyrics scored the lowest in the extraversion category.


Tied to that, when I think of Lazarus and the imagery and sentiment I have around that, I feel it mentally more introverted – yet it scored the highest for extraversion lyrically.

Ziggy and Pierrot scored highest for self consciousness (neuroticism sub-trait) yet the Lazarus era scored lowest. The Thin White Duke era had the angriest lyrics.


I’m still exploring and processing the data. It is causing me to re-listen to the songs a lot, which is wonderful. The project was a guilty pleasure – a way to process both his music and the memories it gave me.

When I reflect on Bowie’s songs, I think of them as snapshots or stories. Some of them are more conversational than others, but for me they conjure up scenes and characters. I’d love to try this exercise out with other songwriters, like Carole King, Bacharach & David or Lennon & McCartney 🙂 I think my son wants me to put one together for Drake!

Why is this technology significant for business?

What excites me is that possibly for the first time in our history, we can begin to treat customers as individuals on a grand scale.

We’ve been dabbling with that in our applications for years now… with little things… allowing us to customize colors and content for instance. But in those cases we each need to go out of our way to teach the software deliberately.

Combinations of Personality Insights, Tone Analyzer, and Speech to Text quietly turn the words we choose into data about us. They represent choices we make – how we react, the way we feel – and the context in which we make those choices.

It’s an opportunity to take our written words or verbal interactions, and use them to make guesses about our future behavior.

I like the idea that user interfaces shouldn’t make you do more work than you need to. They should be able to build off the data they have already. Used subtly and smartly, this kind of personality data can help us interact more personally with customers, and help us learn more about ourselves.

Over time, this data can be used to develop an understanding of our major traits, and might help to route us to the best call handler, or match us to products loved by people with similar traits.

The corporations that I sometimes consult with are sitting on goldmines of data from customer feedback and interactions in all segments of business. My Bowie example is really the first time I’ve seen such data compared side-by-side or charted over time, which was part of my motivation for developing the app.

At the end of the day we don’t design for or interact with an army of faceless customers. We interact with individuals. Surely the happier the interaction, the more brand loyalty will come of it.

Implementation of Ziggy on Bluemix

Data Model

This code example shows the beginnings of my foundational data model that integrates Wikipedia articles about the albums, videos, links to Apple Music and some notes for the artwork I was making.

I’ve found that the work I do is a lot more meaningful when it is built on a reliable data foundation. My design approach depends on a solid data model; it doesn’t have to be a complex model, just meaningful, and consistent. Actually, the data model almost feels like a mental model that I want to communicate. It’s the spine that connects all the parts.

My Bowie personas exist as a list of JSON data in Cloudant. The list can be evolved and tweaked, and crucially iterated over easily by JavaScript on the web client, or Python in the cloud.

In addition, there is a database of album data structures, containing lists of songs on each album. Finally, there is a database of song lyrics. When the system is launched, it reads the albums and songs that belong to each persona, collects the words for that persona, then analyzes them with Watson Personality Insights.


Python on Bluemix

Around this time, I was invited to share a Python example on Bluemix at a conference. So, rather than work with my favored Node.js this time, it made sense to work with Python. I was happy to have a reason to program in Python again.

I’m amazed at how powerful the Watson APIs are with Python – you write very little code when iterating on the data. Designing a simple data model helps a lot.

Deploying Python apps to Bluemix should be pretty familiar to Python programmers. Bluemix works with Pip package manager, and relies on a requirements.txt file for dependency organization.

The default Python projects build around Flask, which is a very lean, simple yet powerful framework. I was surprised how quickly Python apps deploy. It is genuinely a lovely, no nonsense approach to building web apps, if Python is your language of choice.

It certainly has me interested in learning more. The IBM-Bluemix/ziggy project is on Github where you can see that is a single page of code.

Coincidentally, one of our IBM clients was getting very serious about using Watson with Python around this time, so it proved helpful, and timely to sharpen our minds. We were able to share our ideas and discoveries from this project with them. If Python isn’t your thing, no worries, Watson has libraries for lots of languages.

User Experience

The persona drawings cross fade into each other along a time line on the welcome page. I wanted my site to at least try to showcase how Bowie’s personas changed over time, and offer a storybook type flow for anyone curious about his personas.

Clicking on one of the drawings opens a page that looks like a Twitter page for that persona.


The page presents personality data as tweets; each tweet is a Sankey diagram that breaks down the traits that influence the score for that factor of the big five personality traits. The big five traits are a measure of openness, conscientiousness, agreeableness, extraversion and neuroticism.

I chose to use a mock Twitter page to emphasize the idea of a unique personality, and hoped it would be a fun, colorful way to navigate the data. The album covers that contribute lyric data are on the pages, the pages play a video from that era of that persona.

Actually, it auto-plays, so either turn it up if you’re at home, or make judgement call if you’re somewhere public!

All of the layout and effects are written with just pure HTML5 and CSS3. I’m starting to feel opinionated about leveraging the raw interfaces, and it was interesting for me to puzzle through ways of achieving a behavior that I had in mind. I tried a lot of approaches, and actually have a new one in mind again, but will have to save it for another time, or another project.

I used a library for the charts, but no libraries like Bootstrap or jQuery for layouts. I use a lot of flex box layouts, which I’m a huge fan of. I feel that there’s a real affinity between the data model and the box model. I use a similar approach with stack views when I program for iOS.

I still have a little work to do with responsive design, but I thought I’d share this much for now.

Clicking on the albums links to Wikipedia articles about them. This page is a way of exploring that era of Bowie, and then looking at the results Watson produced on those lyrics. You can navigate to the other personas using the ‘who to follow’ section.

It becomes a little more interesting when we start comparing the Watson data over time, and across the personas. You can return to the main page and click on the chart button there to explore that.


Your inner Bowie

Finally, clicking on the little ID card icon on the main page takes you to a page where you can enter your Twitter id. The app will read your tweets, carry out personality insights on them, and then map you to the Bowie persona that most closely aligns.

Compared with @antonmc

My tweets aligned with the Berlin era. This view uses a radar diagram to plot the grey Bowie persona data underneath the orange Twitter data. I wanted to push the data in fresher visual ways (Sankey, Line charts, Bar charts, Pickers, Radar) to show how versatile it is, and how many contexts it can be viewed from.

While it is maybe fun to play with, this view demonstrates more seriously how we can use this technology not just to compare, but to target personalities if we so wish, and where it begins feeling personal to interact with.


So, I can conclude that lyrically there is variance in each of the personas, and that some of the data is significantly stronger for some of the eras.

I’m not sure the data helps me tell what songs are more angry or happy or anxious… it’d be interesting to dig into it song by song. But the project has helped me understand more about Bowie’s music and changes over time… through research and insight.

Crucially, it has helped me grow as a developer, and has excited me more about a hyper-personalized approach to software. I can see a little more clearly where this kind of data could become useful.

I can’t admit to being the biggest David Bowie fan in the world, but seeing him perform when I was a young student living near London completely changed the way I felt about him. It marked a time of transition and growth in myself that I’ll always remember.

I can still see him on that stage.

I’m really grateful to have had time and encouragement to complete my experiment with Bowie’s lyrics, and hope the project is interesting for others to explore, learn from or maybe even be inspired by!

If you do have thoughts or observations, I’d love to hear about them.

More Community stories
April 29, 2019

Transforming Customer Experiences with AI Services (Part 1)

This is an experience from a recent customer engagement on transcribing customer conversations using IBM Watson AI services.

Continue reading

April 26, 2019

Updated Tutorial: Database-Driven Chatbot

The tutorial on how to build a database-driven chatbot has been updated. It's now simpler to deploy and and offers more options—Slack, Facebook Messenger, Wordpress, and more.

Continue reading

April 23, 2019

Announcing the Deprecation of the Watson Machine Learning JSON Token Authentication Service

We’d like to inform you about the deprecation of the Watson Machine Learning JSON Token Authentication service. This method of authentication will be retired on May 30, 2019.

Continue reading