In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

Palmyra's concessions

Author: Iza Romanowska

Date: 13/10/2020

Associated data: Dataset_concessions: Bobou, Olympia 2020. “Tomb concessions in Palmyra, Syria”, version 1.0. Zenodo. Doi: 10.5281/zenodo.4669962

Associated publications:

Bobou, O. et al. 2021 “Historical Trajectories of Palmyra’s elites through the lens of archaeological data.” Journal of Urban Archaeology 4: xxx.

Romanowska, I. et al. in press “Reconstructing the social, economic and demographic trends of Palmyra’s elite from funerary data.” Journal of Archaeological Science: xxx.

Raja, R. et al. 2021 “Three hundred years of Palmyrene history. Unlocking archaeological data for studying past societal transformations.” PloS One.

Description: Data analysis script visualising the phenomenon of concessions in Palmyra. Concession refers to a document granting legal rights to part of a tomb to another family. This data was collected by O. Bobou on the basis of the following publications:

Gawlikowski, M., 1970. Monuments funéraires de Palmyre, Travaux du Centre d’Archéologie Méditerranéenne de l’Académie Polonaise des Sciences. Editions scientifiques de Pologne, Warszawa. Higuchi, T. and K. Saito. 2001. Tomb F – Tomb of BWLH and BWRP – Southeast Necropolis, Palmyra, Syria, Publication of Research Center for Silk Roadology, 2 (Nara: Research Center for Silk Roadology).

In [2]:
df = pd.read_excel("SI_A_data/dataset_concessions.xlsx")
df.head()
Out[2]:
Name Foundation date CD 1 CD 2 CD 3 CD 4 CD 5 CD 6 CD 7 CD 8 CD9 CD10 Tomb size
0 Tower tomb no. 83 50 CE 215 CE NaN NaN NaN NaN NaN NaN NaN NaN NaN 33.25
1 Tower Tomb no. 118 50 CE 252 CE NaN NaN NaN NaN NaN NaN NaN NaN NaN 38.58
2 Hypogeum of Abd’astôr, son of Nûrbel 98 CE 239 CE NaN NaN NaN NaN NaN NaN NaN NaN NaN 120.2
3 Hypogeum of Julius Aurelius Salman and Julius ... 100 CE 226 CE NaN NaN NaN NaN NaN NaN NaN NaN NaN unknown
4 Hypogeum of Iarḥaî 108 CE 241 CE NaN NaN NaN NaN NaN NaN NaN NaN NaN 121.71
In [3]:
dates_replace = {"130/131":"130", "142/143":"142", "238/239": "238", "178/179":"178", "225/226":"225", "240/214": "240", "249C": "249"}
# stripping ALL the text
df = df.replace([" CE", " CCE", "after ", "before ", "unknown"], "", regex = True)
df = df.replace(dates_replace)
df.iloc[7,:]= df.loc[7,:].str.split('/').str[0]
df.iloc[:, 1:] = df.iloc[:, 1:].apply(pd.to_numeric)
df
Out[3]:
Name Foundation date CD 1 CD 2 CD 3 CD 4 CD 5 CD 6 CD 7 CD 8 CD9 CD10 Tomb size
0 Tower tomb no. 83 50 215 NaN NaN NaN NaN NaN NaN NaN NaN NaN 33.25
1 Tower Tomb no. 118 50 252 NaN NaN NaN NaN NaN NaN NaN NaN NaN 38.58
2 Hypogeum of Abd’astôr, son of Nûrbel 98 239 NaN NaN NaN NaN NaN NaN NaN NaN NaN 120.2
3 Hypogeum of Julius Aurelius Salman and Julius ... 100 226 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 Hypogeum of Iarḥaî 108 241 NaN NaN NaN NaN NaN NaN NaN NaN NaN 121.71
5 Hypogeum of Julius Aurelius Male 109 183 215 219 223 234 235 235 237 237 237 NaN
6 Hypogeum of Zabd'ateh and Moqîmû 114 131 NaN NaN NaN NaN NaN NaN NaN NaN NaN 70.84
7 Hypogeum of Shalamallat 115 147 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 Tower tomb no. 164, Tower of Obaihan 118 118 NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.79
9 Tomb O/no. 24 (Ingholt diaries) 120 130 178 225 240 265 NaN NaN NaN NaN NaN NaN
10 Tomb of Malkû 121 186 188 213 213 213 214 249 267 274 NaN 151.62
11 Tomb no. 92, Hypogeum of Yarhibola and Taimo'amad 123 243 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 Hypogeum F 128 220 224 NaN NaN NaN NaN NaN NaN NaN NaN 103.72
13 Hypogeum of Hatrai 130 130 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 Hypogeum of Nasrallat, son of Malkû/ no. 113 (... 142 263 265 NaN NaN NaN NaN NaN NaN NaN NaN 129.24
15 Tomb no. 111, Tomb of the Three Brothers 142 160 160 191 214 273 NaN NaN NaN NaN NaN 204.93
16 Hypogeum of Lisams/Tomb F (Ingholt) 150 181 186 188 228 NaN NaN NaN NaN NaN NaN 110.05
17 Unidentified tomb 178 178 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 Temple Tomb no. 173d 180 273 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 Hypogeum of Hermes 232 242 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 Tomb no. 150, Tomb of Julius Aurelius Marona 236 236 NaN NaN NaN NaN NaN NaN NaN NaN NaN 92.44
21 Hypogeum of Seleukos/Tomb C + no. 110 (Ingholt... 251 251 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 Unidentified tomb 212 212 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 Unidentified tomb 219 219 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 Tower no. 70, Tomb of Julius Aurelius Bolma 229 229 NaN NaN NaN NaN NaN NaN NaN NaN NaN 48.85
25 Unidentified tomb 222 222 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 Unidentified tomb 224 224 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 Unidentified tomb 238 238 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 Unidentified tomb 241 241 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 Unidentified tomb 265 265 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
30 Unidentified tomb 273 273 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
31 Unidentified tomb 273 273 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
32 Unidentified tomb 273 273 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
In [4]:
df.columns
Out[4]:
Index(['Name ', 'Foundation date', 'CD 1', 'CD 2', 'CD 3', 'CD 4', 'CD 5',
       'CD 6 ', ' CD 7', 'CD 8', 'CD9', 'CD10', 'Tomb size'],
      dtype='object')
In [5]:
palette = sns.color_palette('Blues_r',10 )

data = df.loc[:, df.columns.str.startswith('CD')]
data = data.T.apply(lambda x: x.dropna().tolist()).values
data = np.concatenate(data)


fig, ax = plt.subplots(2, 1, figsize = (10, 5), sharex = True, gridspec_kw={'height_ratios': [3, 1], 'hspace':0})
counter = 0
sns.distplot(data, bins = 10, ax = ax[0])
for i in df.loc[:, df.columns.str.startswith('CD')]:
    sns.scatterplot( df[i], 1, ax = ax[1], label = i, marker = "s", color = palette[counter], s = 50)
    counter += 1
plt.legend(loc='lower left', bbox_to_anchor=(0.88, 1.93))
plt.xlabel('Year (CE)')
ax[0].set_ylabel('PDF')
plt.yticks([], [])
plt.tight_layout()
plt.savefig('figures/Rom_Concessions', dpi = 600)
In [6]:
bins = range(0,350, 25)
#print(*bins)
fig, ax = plt.subplots(figsize = (15, 5))

ax = sns.distplot(data , kde = False,  bins = bins, label = 'concession')
ax = sns.distplot(df["Foundation date"].values.tolist(), kde = False, bins = bins, label = 'foundation')
plt.legend()
Out[6]:
<matplotlib.legend.Legend at 0x200eb8426a0>
In [ ]: