├── README.md
├── _config.yml
├── code
├── build_cultural_dimensions.R
├── w2v_train_model.py
└── word_pairs
│ ├── affluence_pairs.csv
│ ├── gender_pairs.csv
│ └── race_pairs.csv
└── survey_data
├── survey_means_unweighted.csv
├── survey_means_weighted.csv
├── survey_standard_errors_weighted.csv
└── variance_unweighted.csv
/README.md:
--------------------------------------------------------------------------------
1 | Geometry of Culture
2 | =================
3 | Code and data associated with the ASR paper on the Geometry of Culture. The full paper can be found here: https://journals.sagepub.com/doi/full/10.1177/0003122419877135
4 |
5 | ## Data
6 | Word Embedding Models
7 | * We provide 2 pre-trained word embedding models that are used in our analyses.
8 | * Google News embedding: https://www.dropbox.com/s/5m9s5326off2lcg/google_news_embedding.zip?dl=0
9 | * Google Ngrams US, 2000-12: https://www.dropbox.com/s/v823bz2hbalobhs/google_us_ngrams_embedding.zip?dl=0
10 | * GLoVe embedding: https://nlp.stanford.edu/projects/glove/
11 |
12 |
13 | Google Ngrams Raw Text
14 |
15 | * For our historical analyses and contemporary validation, we train embedding models on the full Google Ngrams US corpus for particular time periods. The Google Ngrams US corpus is publicly available for download and is hosted here: http://storage.googleapis.com/books/ngrams/books/datasetsv2.html
16 |
17 |
18 | Survey of Cultural Associations
19 |
20 | * We also provide results from the Mechanical Turk survey of cultural associations. Data files include mean associations on race, class, and gender dimensions for 59 terms. We provide files with and without poststratification weights. These files are hosted here on github in the "survey_data" directory. Details of the survey can be found in Appendix A of the article.
21 |
22 |
23 | ## Code
24 | * We provide scripts to assist in training embeddings and building "cultural dimensions" according to the method described in the paper. Scripts for complete replication are forthcoming.
25 | * w2v_train_model.py trains embedding model on raw text. It is specifically set up to read 5grams, but could be slightly adjusted to read in sentences of natural language.
26 | * build_cultural_dimensions.R loads in the pretrained models available above, builds cultural dimensions from the antonym pairs provided in the attached csv files, and validates correspondence between survey estimates and embedding projections.
27 |
28 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman
--------------------------------------------------------------------------------
/code/build_cultural_dimensions.R:
--------------------------------------------------------------------------------
1 | library("ggplot2")
2 | memory.limit(1500000)
3 |
4 |
5 | survey<-read.csv(file="/DIRECTORY/survey_dataset_means_weighted.csv",header=TRUE,row.names=1)
6 | df<-read.csv(file="/DIRECTORY/GoogleNews_Embedding.csv", header=TRUE,row.names=1, sep=",")
7 | #df<-read.csv(file="/DIRECTORY/US_Ngrams_2000_12.csv", header=TRUE,row.names=1, sep=",")
8 |
9 | #####DEFINE FUNCTIONS##########
10 | #Calculate norm of vector#
11 | norm_vec <- function(x) sqrt(sum(x^2))
12 |
13 | #Dot product#
14 | dot <- function(x,y) (sum(x*y))
15 |
16 | #Cosine Similarity#
17 | cos <- function(x,y) dot(x,y)/norm_vec(x)/norm_vec(y)
18 |
19 | #Normalize vector#
20 | nrm <- function(x) x/norm_vec(x)
21 |
22 | #Calculate semantic dimension from antonym pair#
23 | dimension<-function(x,y) nrm(nrm(x)-nrm(y))
24 |
25 | ###STORE EMBEDDING AS MATRIX, NORMALIZE WORD VECTORS###
26 | cdfm<-as.matrix(data.frame(df))
27 | cdfmn<-t(apply(cdfm,1,nrm))
28 |
29 |
30 | ###IMPORT LISTS OF TERMS TO PROJECT AND ANTONYM PAIRS#####
31 | ant_pairs_aff <- read.csv("DIR/affluence_pairs.csv",header=FALSE, stringsAsFactor=F)
32 | ant_pairs_gen <- read.csv("DIR/gender_pairs.csv",header=FALSE, stringsAsFactor=F)
33 | ant_pairs_race <- read.csv("DIR/race_pairs.csv",header=FALSE, stringsAsFactor=F)
34 |
35 |
36 | word_dims<-matrix(NA,nrow(ant_pairs_aff),300)
37 |
38 |
39 | ###SETUP "make_dim" FUNCTION, INPUT EMBEDDING AND ANTONYM PAIR LIST#######
40 | ###OUTPUT AVERAGE SEMANTIC DIMENSION###
41 |
42 | make_dim<-function(embedding,pairs){
43 | word_dims<-data.frame(matrix(NA,nrow(pairs),300))
44 | for (j in 1:nrow(pairs)){
45 | rp_word1<-pairs[j,1]
46 | rp_word2<-pairs[j,2]
47 | tryCatch(word_dims[j,]<-dimension(embedding[rp_word1,],embedding[rp_word2,]),error=function(e){})
48 | }
49 | dim_ave<-colMeans(word_dims, na.rm = TRUE)
50 | dim_ave_n<-nrm(dim_ave)
51 | return(dim_ave_n)
52 | }
53 |
54 |
55 | #####CONSTRUCT AFFLUENCE, GENDER, AND RACE DIMENSIONS######
56 | aff_dim<-make_dim(df,ant_pairs_aff)
57 | gender_dim<-make_dim(df,ant_pairs_gen)
58 | race_dim<-make_dim(df,ant_pairs_race)
59 |
60 |
61 | ####ANGLES BETWEEN DIMENSIONS#######
62 | cos(aff_dim,gender_dim)
63 | cos(aff_dim,race_dim)
64 | cos(gender_dim,race_dim)
65 |
66 |
67 | ####CALCULATE PROJECTIONS BY MATRIX MULTIPLICATION####
68 | ###(Equivalent to cosine similarity because vectors are normalized)###
69 | aff_proj<-cdfmn%*%aff_dim
70 | gender_proj<-cdfmn%*%gender_dim
71 | race_proj<-cdfmn%*%race_dim
72 |
73 | projections_df<-cbind(aff_proj, gender_proj, race_proj)
74 | colnames(projections_df)<-c("aff_proj","gender_proj","race_proj")
75 |
76 |
77 | ####MERGE WITH SURVEY AND CALCULATE CORRELATION####
78 | projections_sub<-subset(projections_df, rownames(projections_df) %in% rownames(survey))
79 | colnames(projections_sub)<-c("aff_proj","gender_proj","race_proj")
80 | survey_proj<-merge(survey,projections_sub,by=0)
81 |
82 |
83 | cor(survey_proj$survey_class,survey_proj$aff_proj)
84 | cor(survey_proj$survey_gender,survey_proj$gender_proj)
85 | cor(survey_proj$survey_race,survey_proj$race_proj)
86 |
87 | ########################################################################
88 |
89 |
90 | ###CREATE VISUALIZATION###
91 | wlist=c("camping","baseball","boxing","volleyball","softball","golf","tennis","soccer","basketball","hockey")
92 | Visualization<-ggplot(data=data.frame(projections_df[wlist,]),aes(x=gender_proj,y=aff_proj,label=wlist)) + geom_text()
93 | Visualization+ theme_bw() +ylim(-.25,.25) +xlim(-.25,.25)
94 |
95 | ########################################################################
96 |
97 |
--------------------------------------------------------------------------------
/code/w2v_train_model.py:
--------------------------------------------------------------------------------
1 | ##year_1 and year_2 comprise the time period of ngrams to read##
2 | year_1=2000
3 | year_2=2012
4 |
5 | import numpy
6 | import scipy
7 | import cython
8 | import gensim
9 | from gensim import models, similarities
10 | import logging
11 | import os
12 | import re
13 | import sys
14 | import itertools
15 | import math
16 |
17 | #reload(sys)
18 | #sys.setdefaultencoding('utf8')
19 | logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
20 |
21 | class MySentences(object):
22 | def __init__(self, dirname, start_year, end_year, limit=None):
23 | self.dirname = dirname
24 | self.start_year = start_year
25 | self.end_year = end_year
26 | self.limit = limit
27 |
28 | def __iter__(self):
29 | # iterate through each the compressed file directory
30 | for fname in os.listdir(self.dirname):
31 | # for each compressed file open it
32 | with gensim.utils.smart_open(os.path.join(self.dirname, fname)) as fin:
33 | for line in itertools.islice(fin, self.limit):
34 | line = gensim.utils.to_unicode(line).split("\t")
35 | if len(line)<3:
36 | continue
37 | ngram = line[0]
38 | try:
39 | year = int(line[1])
40 | except ValueError:
41 | continue
42 | match_count = int(line[2])
43 | if year < self.start_year or year > self.end_year:
44 | continue
45 | # lower case the ngram, remove pos
46 | processed_ngram = [word.split("_")[0] for word in ngram.lower().split()]
47 | for x in range(match_count):
48 | yield processed_ngram
49 |
50 | assert gensim.models.word2vec.FAST_VERSION > -1
51 | ##Reads ngrams one-by-one into word2vec##
52 | sentences = MySentences("/dir_name_here/", year_1, year_2) # a memory-friendly iterator
53 |
54 | ###Set parameters. Details here: https://radimrehurek.com/gensim/models/word2vec.html###
55 | model = gensim.models.word2vec.Word2Vec(sentences,sg=1, size=300, window=5, min_count=10, workers=10, hs=0, negative=8)
56 | model.save('w2vmodel_ng5_'+str(year_1)+'_'+str(year_2)+'_full')
57 | syn0_object=model.wv.syn0
58 |
59 | ##output vector space##
60 | numpy.savetxt('syn0_ngf_'+str(year_1)+'_'+str(year_2)+'_full.txt',syn0_object,delimiter=" ")
61 |
62 | #output vocab list#
63 | vocab_list = model.wv.index2word
64 | for i in range(0,len(vocab_list)):
65 | if vocab_list[i] == '':
66 | vocab_list[i] = "thisisanemptytoken"+str(i)
67 |
68 | with open('vocab_list_ngf_'+str(year_1)+'_'+str(year_2)+'_full.txt','wb') as outfile:
69 | for i in range(0,len(vocab_list)):
70 | outfile.write(vocab_list[i].encode('utf8')+"\n".encode('ascii'))
71 |
--------------------------------------------------------------------------------
/code/word_pairs/affluence_pairs.csv:
--------------------------------------------------------------------------------
1 | rich,poor
2 | richer,poorer
3 | richest,poorest
4 | affluence,poverty
5 | advantaged,disadvantaged
6 | affluent,destitute
7 | classy,beggarly
8 | costly,economical
9 | exorbitant,impecunious
10 | expensive,inexpensive
11 | exquisite,ruined
12 | extravagant,necessitous
13 | flush,skint
14 | invaluable,cheap
15 | lavish,economical
16 | luxuriant,penurious
17 | luxurious,threadbare
18 | luxury,cheap
19 | moneyed,unmonied
20 | opulent,indigent
21 | plush,threadbare
22 | posh,plain
23 | precious,cheap
24 | priceless,worthless
25 | privileged,underprivileged
26 | propertied,bankrupt
27 | prosperous,unprosperous
28 | developed,underdeveloped
29 | solvency,insolvency
30 | successful,unsuccessful
31 | sumptuous,plain
32 | swanky,basic
33 | opulent,needy
34 | upscale,squalid
35 | valuable,valueless
36 | wealthy,impoverished
37 | ritzy,ramshackle
38 | opulence,indigence
39 | solvent,insolvent
40 | moneyed,moneyless
41 | rich,penniless
42 | affluence,penury
43 |
--------------------------------------------------------------------------------
/code/word_pairs/gender_pairs.csv:
--------------------------------------------------------------------------------
1 | man,woman
2 | men,women
3 | he,she
4 | him,her
5 | his,her
6 | his,hers
7 | boy,girl
8 | boys,girls
9 | male,female
10 | masculine,feminine
11 |
--------------------------------------------------------------------------------
/code/word_pairs/race_pairs.csv:
--------------------------------------------------------------------------------
1 | black,white
2 | blacks,whites
3 | African,caucasian
4 | African,European
5 | Afro,Anglo
6 | Black,White
7 | Blacks,Whites
8 |
--------------------------------------------------------------------------------
/survey_data/survey_means_unweighted.csv:
--------------------------------------------------------------------------------
1 | "","survey_gender","survey_class","survey_race"
2 | "basketball",72.0448877805486,38.2244389027431,80.4763092269327
3 | "baseball",76.8329177057357,45.643391521197,39.6783042394015
4 | "boxing",86.4912718204489,34.4937655860349,64.8079800498753
5 | "softball",32.3940149625935,45.2294264339152,28.1346633416459
6 | "volleyball",33.4887780548628,53.6633416458853,26.3366583541147
7 | "tennis",44.1770573566085,75.927680798005,25.3815461346633
8 | "golf",62.9476309226933,83.6783042394015,20.9576059850374
9 | "hockey",83.7306733167082,41.8453865336658,18.5486284289277
10 | "soccer",62.9750623441397,44.6284289276808,36.8902743142145
11 | "hairdresser",21.0872817955112,25.6483790523691,50.1097256857855
12 | "lawyer",62.3092269326683,83.1047381546135,34.426433915212
13 | "doctor",61.2069825436409,85.8453865336658,35.8703241895262
14 | "plumber",81.5536159600997,22.571072319202,41.4688279301746
15 | "scientist",60.8753117206983,74.4039900249377,33.0274314214464
16 | "engineer",69.3266832917706,73.3017456359102,33.4563591022444
17 | "banker",60.0773067331671,74.0872817955112,32.1122194513716
18 | "nanny",17.0997506234414,27.1371571072319,42.1221945137157
19 | "carpenter",80.5885286783042,26.8029925187032,42.284289276808
20 | "journalist",48.640897755611,55.4912718204489,38.857855361596
21 | "nurse",26.359102244389,46.5660847880299,44.1695760598504
22 | "jazz",56.6857855361596,62.8428927680798,63.211970074813
23 | "bluegrass",60.1072319201995,32.715710723192,28.9800498753117
24 | "punk",68.8703241895262,28.2094763092269,25.5137157107232
25 | "hiphop",69.9526184538653,27.5610972568579,81.8478802992519
26 | "rap",76.2668329177057,23.5236907730673,84.3316708229426
27 | "opera",31.8653366583541,84.9625935162095,18.5835411471322
28 | "techno",56.214463840399,41.5511221945137,31.4039900249377
29 | "hamburger",67.4139650872818,31.284289276808,48.9002493765586
30 | "cheesecake",37.0523690773067,58.3640897755611,38.8154613466334
31 | "salad",30.5985037406484,58.5236907730673,36.8678304239401
32 | "steak",74.8029925187032,63.7231920199501,43.3790523690773
33 | "wine",33.9426433915212,74.2344139650873,31.9476309226933
34 | "beer",76.0099750623441,29.2044887780549,45.5635910224439
35 | "pastry",35.2394014962594,58.9900249376559,38.5112219451372
36 | "motorcycle",77.6758104738155,40.359102244389,37.0548628428928
37 | "minivan",32.4937655860349,36.7655860349127,38.2069825436409
38 | "skateboard",71.2668329177057,28.9750623441397,35.0149625935162
39 | "SUV",56.9152119700748,56.0847880299252,44.0274314214464
40 | "truck",78.498753117207,33.6034912718205,40.0623441396509
41 | "bicycle",52.0947630922693,36.0872817955112,43.9501246882793
42 | "limousine",53.8802992518703,86.6558603491272,33.14463840399
43 | "blouse",14.0997506234414,55.4588528678304,44.5610972568579
44 | "pants",61.214463840399,48.1197007481297,49.9451371571072
45 | "necklace",22.2319201995012,61.3790523690773,46.7356608478803
46 | "tuxedo",86.7905236907731,84.3890274314214,38.0249376558603
47 | "briefcase",71.2967581047382,72.9077306733167,38.2693266832918
48 | "shirt",55.9177057356608,46.9201995012469,49.788029925187
49 | "dress",10.7281795511222,57.7481296758105,45.4239401496259
50 | "suit",78.139650872818,74.7007481296758,40.7955112219451
51 | "socks",53.5162094763092,47.5386533665835,49.3740648379052
52 | "shorts",51.3765586034913,41.3915211970075,49.0124688279302
53 | "Jake",87.5386533665835,49.925187032419,25.2443890274314
54 | "Shanice",14.9201995012469,34.1571072319202,82.3815461346633
55 | "Aaliyah",15.5361596009975,40.571072319202,79.5211970074813
56 | "Connor",83.2518703241895,59.6882793017456,20.71072319202
57 | "Jamal",87.3192019950125,33.1795511221945,85.9850374064838
58 | "Molly",11.5860349127182,52.1670822942643,22.3416458852868
59 | "Tyrone",89.2942643391521,33.0149625935162,86.0274314214464
60 | "Amy",11.5236907730673,53.0548628428928,23.3765586034913
61 |
--------------------------------------------------------------------------------
/survey_data/survey_means_weighted.csv:
--------------------------------------------------------------------------------
1 | ,gender_mean,class_mean,race_mean
2 | basketball,72.49233,37.48029,81.05358
3 | baseball,77.60552,46.90747,38.39533
4 | boxing,86.39916,36.92365,64.95531
5 | softball,32.61073,45.31939,26.8206
6 | volleyball,31.83629,54.05517,25.8108
7 | tennis,42.65294,75.34252,25.93527
8 | golf,64.9276,82.92412,21.00702
9 | hockey,84.42197,40.18831,18.71368
10 | soccer,64.12531,44.74304,35.9177
11 | hairdresser,20.6902,25.58188,50.86118
12 | lawyer,61.77906,83.59479,35.66758
13 | doctor,60.06721,86.58565,37.82003
14 | plumber,80.25067,22.84663,39.27434
15 | scientist,61.87003,75.96935,32.74435
16 | engineer,69.79498,73.64344,32.92745
17 | banker,59.9074,72.64936,32.65704
18 | nanny,17.65112,26.94414,41.04066
19 | carpenter,80.9367,27.46218,42.08532
20 | journalist,47.79544,54.5116,39.90278
21 | nurse,26.29599,45.08054,43.68505
22 | jazz,57.35235,62.31129,64.47241
23 | bluegrass,59.70648,33.35516,27.6354
24 | punk,68.8997,28.03863,25.61954
25 | hiphop,70.36341,27.69916,80.38662
26 | rap,77.08481,23.63341,84.40913
27 | opera,30.27255,84.88982,18.43137
28 | techno,55.59327,41.66504,31.80039
29 | hamburger,67.21136,30.87822,49.86356
30 | cheesecake,37.24012,57.44231,40.98562
31 | salad,29.50207,57.14181,37.81654
32 | steak,74.79743,65.7538,44.73505
33 | wine,32.28771,72.63448,32.88507
34 | beer,76.73858,29.18468,45.83547
35 | pastry,34.25504,57.02082,38.23769
36 | motorcycle,78.09129,40.7948,35.71057
37 | minivan,31.53552,34.76901,36.71924
38 | skateboard,71.73591,27.84433,33.28712
39 | suv,56.46473,55.58908,43.94845
40 | truck,78.91742,34.28461,40.08299
41 | bicycle,53.6302,34.8723,44.11113
42 | limousine,54.79961,87.28196,33.15888
43 | blouse,13.86655,54.48048,44.10218
44 | pants,61.52048,47.87089,49.03491
45 | necklace,22.3849,60.73257,45.81803
46 | tuxedo,87.36133,84.54303,38.43134
47 | briefcase,71.59772,73.14077,38.03526
48 | shirt,55.09586,46.58241,48.94017
49 | dress,10.09335,57.52888,44.54394
50 | suit,78.95429,74.72621,40.26133
51 | socks,53.1593,46.93888,48.06988
52 | shorts,50.21759,40.7444,48.08671
53 | Jake,88.12366,51.34486,24.33859
54 | Shanice,14.569,35.08187,82.21732
55 | Aaliyah,15.66787,40.41475,78.23722
56 | Connor,83.58592,59.13945,20.59342
57 | Jamal,87.80617,33.63767,86.35431
58 | Molly,11.40538,52.93874,20.65734
59 | Tyrone,89.98954,33.37189,86.50137
60 | Amy,11.52517,54.33826,22.09146
61 |
--------------------------------------------------------------------------------
/survey_data/survey_standard_errors_weighted.csv:
--------------------------------------------------------------------------------
1 | ,gender_se,class_se,race_se
2 | basketball,1.293867,1.159264,0.8553299
3 | baseball,1.082011,1.685607,1.124619
4 | boxing,0.9145117,1.891672,1.323796
5 | softball,1.735328,1.610595,1.023695
6 | volleyball,1.136189,0.9689276,1.106939
7 | tennis,1.021738,0.9514282,1.430841
8 | golf,1.108239,1.189398,1.072324
9 | hockey,0.9323494,1.245276,1.201703
10 | soccer,1.278796,1.980936,1.509651
11 | hairdresser,1.05563,0.9420383,1.161763
12 | lawyer,1.004389,0.9358272,1.054412
13 | doctor,1.134285,0.7755137,1.719941
14 | plumber,1.188415,1.090353,1.074723
15 | scientist,0.8105719,0.8723661,0.9871276
16 | engineer,0.843248,1.120465,1.078623
17 | banker,1.285277,1.723813,1.472126
18 | nanny,1.147332,1.333859,1.866109
19 | carpenter,0.9249455,1.350936,1.058526
20 | journalist,0.8606767,1.091528,0.8708502
21 | nurse,1.063177,1.29042,0.9321451
22 | jazz,1.099672,1.835415,1.054202
23 | bluegrass,0.8527585,1.898293,1.420024
24 | punk,1.006995,1.34121,1.401008
25 | hiphop,0.9669906,1.049029,1.862318
26 | rap,0.9328728,0.9995601,1.011889
27 | opera,0.9680865,0.9216341,1.088122
28 | techno,0.9244552,1.549665,1.205955
29 | hamburger,1.09965,0.9500684,1.047319
30 | cheesecake,1.342707,1.865131,1.149285
31 | salad,0.9247673,1.075781,0.9190993
32 | steak,0.9056177,0.905856,1.049454
33 | wine,0.9222234,0.9526348,1.148629
34 | beer,0.9532244,1.346391,0.8263825
35 | pastry,0.938991,1.181297,1.082205
36 | motorcycle,0.9563616,0.9451993,1.035451
37 | minivan,1.093047,1.119604,1.051681
38 | skateboard,1.287962,1.027619,1.051262
39 | suv,1.831846,0.9349235,1.816449
40 | truck,0.9818832,1.04166,1.925063
41 | bicycle,1.16727,1.080319,1.78655
42 | limousine,1.265974,0.8443094,1.11142
43 | blouse,1.076209,0.7807322,1.219643
44 | pants,1.273713,0.8240287,1.023458
45 | necklace,1.104013,0.7678121,1.192926
46 | tuxedo,0.8821287,0.9338478,1.383733
47 | briefcase,1.090977,0.8954868,1.35626
48 | shirt,0.6331058,0.696698,1.138169
49 | dress,0.8808759,0.848091,1.154602
50 | suit,1.011131,0.9384057,1.283769
51 | socks,0.5661482,1.182152,1.039768
52 | shorts,0.9488151,1.012709,1.185894
53 | Jake,0.9110089,1.147779,1.303657
54 | Shanice,1.072162,1.233151,1.228984
55 | Aaliyah,1.154786,1.197977,1.511355
56 | Connor,1.055872,1.187545,1.164659
57 | Jamal,0.9235424,1.202036,0.924698
58 | Molly,0.9719612,1.083338,1.019008
59 | Tyrone,0.8069182,1.248409,0.8722595
60 | Amy,1.060039,1.138878,1.165433
61 |
--------------------------------------------------------------------------------
/survey_data/variance_unweighted.csv:
--------------------------------------------------------------------------------
1 | "","survey_gender","survey_class","survey_race"
2 | "basketball",263.582980049875,395.529501246883,256.14006234414
3 | "baseball",274.059513715711,368.100012468828,363.798753117207
4 | "boxing",244.565548628429,497.900586034913,279.145536159601
5 | "softball",467.329364089776,387.7322319202,350.216820448878
6 | "volleyball",337.610498753117,309.258877805486,355.933877805486
7 | "tennis",249.706072319202,244.647256857855,376.261558603491
8 | "golf",283.584750623441,213.553753117207,406.510698254364
9 | "hockey",254.667281795511,477.196034912718,394.98825436409
10 | "soccer",258.559376558604,425.864089775561,328.332930174564
11 | "hairdresser",352.009862842893,311.78855361596,246.837930174564
12 | "lawyer",229.199139650873,220.174002493766,371.110199501247
13 | "doctor",223.469551122195,196.811034912718,343.468142144638
14 | "plumber",264.377743142145,352.555561097257,324.759650872818
15 | "scientist",224.289413965087,258.5313840399,343.38674563591
16 | "engineer",273.660511221945,275.106221945137,347.298715710723
17 | "banker",312.38150872818,372.719862842893,397.174875311721
18 | "nanny",307.220024937656,472.193640897756,364.73753117207
19 | "carpenter",262.677768079801,417.338591022444,307.85897755611
20 | "journalist",195.14572319202,270.195548628429,261.947244389027
21 | "nurse",344.15072319202,323.586246882793,219.351172069825
22 | "jazz",240.49102244389,392.497755610973,395.417456359102
23 | "bluegrass",243.080972568579,465.92897755611,692.784600997506
24 | "punk",284.448142144638,343.871009975062,412.060436408978
25 | "hiphop",286.990249376559,381.836882793017,279.784301745636
26 | "rap",265.556122194514,356.77006234414,275.497219451372
27 | "opera",375.651820448878,240.981097256858,400.028628428928
28 | "techno",270.413890274314,346.168004987531,424.3413840399
29 | "hamburger",270.603204488778,305.71897755611,177.050024937656
30 | "cheesecake",311.519750623441,269.84710723192,278.175860349127
31 | "salad",313.880897755611,239.91506234414,288.909987531172
32 | "steak",283.558591022444,341.665685785536,246.395960099751
33 | "wine",347.339201995012,278.719912718205,308.909750623441
34 | "beer",288.914900249377,347.503079800499,237.231571072319
35 | "pastry",336.947543640898,322.284900249377,311.255498753117
36 | "motorcycle",257.30963840399,306.32572319202,313.486982543641
37 | "minivan",376.540586034913,382.659912718205,319.244551122195
38 | "skateboard",239.751122194514,318.014376558603,395.579775561097
39 | "SUV",387.557793017456,310.572793017456,313.21674563591
40 | "truck",272.115623441397,369.209887780549,350.883603491272
41 | "bicycle",195.060997506234,362.534862842893,292.402506234414
42 | "limousine",266.255635910224,257.466271820449,391.184027431421
43 | "blouse",307.385024937656,236.158927680798,182.666882793017
44 | "pants",254.003890274314,149.605635910224,71.9669825436409
45 | "necklace",390.408578553616,220.425960099751,181.824950124688
46 | "tuxedo",252.571009975062,249.668279301746,336.339376558603
47 | "briefcase",334.58421446384,257.988965087282,307.507281795511
48 | "shirt",178.530710723192,154.6836159601,74.6524563591022
49 | "dress",280.658428927681,217.998902743142,150.954825436409
50 | "suit",310.765448877806,262.285224438903,270.488079800499
51 | "socks",113.28536159601,139.254127182045,64.2047256857855
52 | "shorts",201.690349127182,226.068827930175,144.347344139651
53 | "Jake",291.799127182045,299.949389027431,448.985124688279
54 | "Shanice",329.1936159601,405.147755610973,381.851558603491
55 | "Aaliyah",386.879314214464,381.320561097257,415.505174563591
56 | "Connor",365.953902743142,338.175087281796,383.536109725686
57 | "Jamal",265.207855361596,385.792680798005,280.664775561097
58 | "Molly",271.683204488778,285.144513715711,394.290486284289
59 | "Tyrone",207.19819201995,362.849775561097,272.52174563591
60 | "Amy",280.20506234414,248.076982543641,377.195349127182
61 |
--------------------------------------------------------------------------------