├── 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 | --------------------------------------------------------------------------------