NBA Salaries and Tattoos: the effects of ink

“Future Studies…” is a highly scientific and tongue-in-cheek exploration into relationships previously (and rightfully) unexplored. While the author may gain skill in data analysis in the course of the writing of these articles, the fields they cover will almost assuredly gain nothing.

    Once seen as the mark of a degenerate, tattoos are now generally accepted as a form of self expression. Even in the NBA, tattoos are a relatively recent development. You’d be hard pressed to find an NBA star sporting so much as a butterfly behind the ear even 20 years ago, and shorts were so short that even the most secret of thigh tattoos would be out of the question. Stars were more likely to serve as the inspiration for terrible tattoos than to have them themselves. Eventually Allen Iverson and the early 2000s rolled around, and with them came a golden era of personal expression the likes of which had never been seen on the hardwood since The Phantom of the Opera left Broadway. We are still enjoying this era today.

    The obvious question here is to what degree does having a tattoo limit an NBA player’s earning potential? It is easy nowadays for most working folks to cover any tattoos they might have with a long sleeve shirt and a pair of Dockers, virtually negating the stigma (or what’s left of it). I can only assume that many NBA players, thinking that they too would be given the luxury of long sleeves, went ahead and got that sleeve they’d been wanting without fear of lost wages. Imagine the sheer panic that set in when someone told them they had been drafted into the NBA, dooming them to a life of bare arms, their ink freely available for potential employers to see. This is a study into whether or not having tattoos affects how much a player is paid in the 2014-15 season. The hypothesis of course is that having visible tattoos limits the earning of an NBA player.

    The dataset on player contracts for this study was downloaded from Information concerning the inked status of players was downloaded from’s github page. I won’t comment on how the good people over at fivethirtyeight got the information on whether or not players have tattoos, but I’ll assume that the scope of their data is mostly visible tattoos. I combined these csv files, then opened them up using Pandas and iPython, and got to work.


First, I imported pandas and loaded the csv file into a dataframe, the main data structure of the pandas package.


import pandas as pd
df = pd.read_csv("C:/Users/Andrew/Desktop/salaries.csv")


The only problem with the data in this format is that the amounts in the salary columns are represented as strings, not as numbers. In order to fix this I wrote a quick function to strip the non-numeric characters and switch the datatype to a float. The float type will allow us to treat the salaries as numbers, which is important for the purposes of this article.


def cleanData(framedData, column):
framedData[column] = framedData[column].str.replace("$","")
framedData[column] = framedData[column].str.replace(",","")
framedData[column] = framedData[column].str.replace(" ","")
framedData[column] = framedData[column].astype(float)


In this case I’ll be using “df” as my framedData parameter, and the column “2014-15” as the column parameter. It would be easy to run on all the columns but many of the players are under contracts which expire after the 2014-15 season, so I’ll just focus on the current season.


cleanData(df, "2014-15")


Now if I were to see the first 5 salaries (which could be done using df["2014-15"][:5]), they would appear as 62552, 1145685, 1227985, 3805000, 12000000. Similarly, using df["2014-15"].dtypes, we can check the data type of the column that was just manipulated. It now says ‘float64’.

Now, the data is able to be sorted and analyzed. First, let’s take a look at the top five players with tattoos and without tattoos in terms of salary. To do this I’ll create a couple of tattoo specific dataframes, one for tattooed players and one for those without.


has_tattoos = df[df["Tattoos"]=="yes"]
no_tattoos = df[df["Tattoos"]=="no"]


The above code creates two new dataframes, “has_tattoos” and “no_tattoos”. Each of these only include the rows with a “Tattoos” column values of “yes” in the case of has_tattoos, or “no” in the case of no_tattoos.

Now let’s look at the top 5 earners for each of these two categories. We’ll have to sort both in descending order first, easily done with the following code.


has_tattoos = has_tattoos.sort("2014-15", ascending = False)
no_tattoos = no_tattoos.sort("2014-15", ascending = False)


Now, we’ll look at the top 5 salaries for tattooed players and those without tattoos.


Player Tm 2014-15 Tattoos
248 Kobe Bryant LAL 23500000 yes
14 Amar’e Stoudemire NYK 23410988 yes
207 Joe Johnson BRK 23180790 yes
65 Carmelo Anthony NYK 22458000 yes
75 Chris Bosh MIA 20644400 yes


Player Tm 2014-15 Tattoos
120 Dwight Howard HOU 21436271 no
81 Chris Paul LAC 20068563 no
52 Brandon Roy POR 19317326 no
45 Blake Griffin LAC 17674612 no
275 Marc Gasol MEM 15829688 no


While it is interesting to see that 4 of the top 5 tattooed players get paid more than the top non-tattooed guy, Dwight Howard, just comparing the highest paid players in each category is not the best way to find significant differences between them. Means and mean comparisons are appropriate here.




The mean for players with tattoos is $62,297.17 greater than the mean for players without tattoos. However, is this difference statistically significant? In order to find out we’ll use an independent samples t-test, which will determine whether or not the differences in mean salary is due to differences in tattooed status. We’ll be using the Scipy module to run this test.


from scipy.stats import ttest_ind
ttest_ind(has_tattoos["2014-15"], no_tattoos["2014-15"])
(0.132178, 0.894904)


    The ttest_ind function from the scipy package has two parameters, both of which are the columns of data being compared. Above I specified that I wanted to compare the means of salaries in the 2014-15 season for those players with tattoos (has_tattoos["2014-15"]), and those players who do not have tattoos (no_tattoos["2014-15"]). ttest_ind returns two values: the t statistic and the two-tailed p value, which can be viewed above. The large p value of 0.895 is close to 1.0, indicating that the difference in mean salaries for tattooed and tattoo free players is not statistically significant. In fact the means are very similar.

    Based on my very scientific analysis, it seems that visible tattoos are not detrimental to NBA players in terms of salary. NBA players are able to show off their tattoos without fear of losing out on future employment opportunities or losing money in contract negotiations. Future studies should avoid this line of inquiry, and perhaps the experimenters should consider becoming NBA basketball players. Not only are they allowed to have tattoos (even bad tattoos), but NBA players also seem to make a pretty good living.