<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ancient Biotechnology</title>
    <description>The latest articles on DEV Community by Ancient Biotechnology (@ancientbiotechnology).</description>
    <link>https://dev.to/ancientbiotechnology</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4218967%2Fe4c60182-c4fa-4627-9a9c-cac2577551eb.png</url>
      <title>DEV Community: Ancient Biotechnology</title>
      <link>https://dev.to/ancientbiotechnology</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ancientbiotechnology"/>
    <language>en</language>
    <item>
      <title>Data-Wrangling Ancient Texts: Building an Open Dataset of Genesis Lifespans and Sumerian Reigns</title>
      <dc:creator>Ancient Biotechnology</dc:creator>
      <pubDate>Sat, 31 Oct 2026 11:59:27 +0000</pubDate>
      <link>https://dev.to/ancientbiotechnology/data-wrangling-ancient-texts-building-an-open-dataset-of-genesis-lifespans-and-sumerian-reigns-k5n</link>
      <guid>https://dev.to/ancientbiotechnology/data-wrangling-ancient-texts-building-an-open-dataset-of-genesis-lifespans-and-sumerian-reigns-k5n</guid>
      <description>&lt;p&gt;Most datasets start with an API or a database dump. This one started with ancient texts: Genesis 5 and 11, and the Sumerian King List. Both list people with huge numbers attached. Methuselah lives 969 years. Alulim of Eridu reigns for 28,800.&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;Ancient Biotechnology&lt;/strong&gt; we write about ancient texts. We wanted one machine-readable table that puts those numbers side by side, cites its sources and is honest about what it doesn't know. The result is the &lt;strong&gt;Ancient Lifespans Dataset&lt;/strong&gt;: 38 rows, CC BY 4.0. Here is how we built it, including the parts that went wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scope
&lt;/h2&gt;

&lt;p&gt;The CSV has four groups of rows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;19 Genesis patriarchs&lt;/strong&gt;, Adam to Terah (Genesis 5, 9:29 and 11)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 LXX-only row&lt;/strong&gt; for Cainan II, who appears in the Septuagint but not in the Hebrew text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 antediluvian kings&lt;/strong&gt; from the Sumerian King List (SKL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 early postdiluvian kings&lt;/strong&gt;, from Jushur of Kish to Ur-Nungal of Uruk&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Schema design: one wide table, no forced merging
&lt;/h2&gt;

&lt;p&gt;The first design question was whether to force the two traditions into one "years" column. We decided not to. A patriarch's &lt;em&gt;lifespan&lt;/em&gt; and a king's &lt;em&gt;reign&lt;/em&gt; are different quantities, and putting them in one column would hide that. Here are the columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name, tradition, text_source,
age_at_son_birth_MT, age_at_son_birth_LXX, age_at_son_birth_SP,
remaining_years_MT, remaining_years_LXX, remaining_years_SP,
total_lifespan_MT, total_lifespan_LXX, total_lifespan_SP,
reign_years, city, reference, notes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Genesis rows fill the nine &lt;code&gt;*_MT/_LXX/_SP&lt;/code&gt; columns and leave &lt;code&gt;reign_years&lt;/code&gt; empty. SKL rows do the opposite and add &lt;code&gt;city&lt;/code&gt;. Each row also carries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;code&gt;tradition&lt;/code&gt; label, such as &lt;code&gt;Genesis 5 antediluvian&lt;/code&gt; or &lt;code&gt;Sumerian King List - postdiluvian&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;a &lt;code&gt;reference&lt;/code&gt;, such as &lt;code&gt;Gen 5:3-5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;free-text &lt;code&gt;notes&lt;/code&gt; for manuscript variants&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A long, tidy format (one row per person per tradition) would be more "correct". But a wide table is what people actually open in a spreadsheet, and it converts to long format with &lt;code&gt;pd.melt&lt;/code&gt; in one line anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Textual variants: three Genesis traditions
&lt;/h2&gt;

&lt;p&gt;The numbers in Genesis 5 and 11 differ between the three main textual traditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Masoretic Text (MT).&lt;/strong&gt; We checked it verse by verse against the KJV, which follows the MT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Septuagint (LXX)&lt;/strong&gt; and &lt;strong&gt;Samaritan Pentateuch (SP).&lt;/strong&gt; These figures come from the comparison table in Wikipedia's &lt;em&gt;Genealogies of Genesis&lt;/em&gt;, which cites Skinner's ICC &lt;em&gt;Genesis&lt;/em&gt; (1930). Our LXX column follows the &lt;strong&gt;Lucianic recension&lt;/strong&gt;, and other LXX manuscripts disagree. For example, some read 167 instead of 187 for Methuselah's age at his son's birth, so the README says so explicitly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We followed one rule throughout: &lt;strong&gt;if a value couldn't be confirmed from a source we actually fetched, the cell stays blank.&lt;/strong&gt; For example, LXX Cainan II has no numbers. An empty cell is more honest than a plausible-looking guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sumerian reign lengths: keep what the source says
&lt;/h2&gt;

&lt;p&gt;SKL reigns are transcribed from the ETCSL composite translation (c.2.1.1). Its numbers follow manuscript &lt;strong&gt;WB-444&lt;/strong&gt;, and they are already given in years. In the cuneiform, these numbers are written in sexagesimal units. Alulim's 28,800 is 8 &lt;em&gt;šar&lt;/em&gt; (8 × 3,600). We store the year values exactly as ETCSL gives them and don't re-derive them, so every number traces back to one published translation.&lt;/p&gt;

&lt;p&gt;Other manuscripts disagree, and those readings go into &lt;code&gt;notes&lt;/code&gt; rather than into extra columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Etana: 1,500 years in WB-444, 635 in ms. P2+L2&lt;/li&gt;
&lt;li&gt;Dumuzid the fisherman: 100 in WB-444, 110 in ms. TL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other king lists, such as WB-62 and Berossus, differ in names, numbers and even how many kings there are. We left them out entirely rather than mixing them in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The encoding bug: when "š" became "c"
&lt;/h2&gt;

&lt;p&gt;ETCSL uses an ASCII transliteration convention. &lt;code&gt;c&lt;/code&gt; stands for &lt;strong&gt;š&lt;/strong&gt;, and &lt;code&gt;j&lt;/code&gt; stands for &lt;strong&gt;g̃&lt;/strong&gt;. So &lt;em&gt;Gilgameš&lt;/em&gt; shows up as &lt;code&gt;Gilgamec&lt;/code&gt;, &lt;em&gt;Jušur&lt;/em&gt; as &lt;code&gt;Jucur&lt;/code&gt;, and &lt;em&gt;Alalg̃ar&lt;/em&gt; as &lt;code&gt;Alaljar&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Our first scrape took these strings literally. That gave us a table where Gilgamesh was named "Gilgamec", which looks like a typo to anyone outside Assyriology. The fix had two parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;name&lt;/code&gt;&lt;/strong&gt; uses the conventional English spelling (Gilgamesh, Jushur, Alalgar, Meskiagkasher).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;notes&lt;/code&gt;&lt;/strong&gt; keeps the raw ETCSL form, e.g. &lt;code&gt;ETCSL ASCII spelling: Gilgamec.&lt;/code&gt;, so anyone can match a row back to the source.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The lesson: when your source has its own transliteration scheme, decode it explicitly. Keep the raw form, and never let a lossy mapping quietly overwrite it. Save everything as UTF-8 too, or a library somewhere will mangle the diacritics for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Loading it with pandas
&lt;/h2&gt;

&lt;p&gt;Here's a short script that compares the three Genesis traditions and sums the SKL reigns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ancient_lifespans.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;gen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tradition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Genesis&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)].&lt;/span&gt;&lt;span class="nf"&gt;dropna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_MT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;skl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tradition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sumerian&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_MT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_LXX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_SP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_lifespan_MT&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_lifespan_SP&lt;/span&gt;&lt;span class="p"&gt;][[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_MT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_SP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;skl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tradition&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reign_years&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;agg&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;total_lifespan_MT     609.0
total_lifespan_LXX    640.4
total_lifespan_SP     577.0
dtype: float64
      name  total_lifespan_MT  total_lifespan_SP
     Jared              962.0              847.0
Methuselah              969.0              720.0
    Lamech              777.0              653.0
      Eber              464.0              404.0
     Terah              205.0              145.0
                                   count       sum   median
tradition                                                  
Sumerian King List - antediluvian      8  241200.0  28800.0
Sumerian King List - postdiluvian     10    6425.0    522.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Samaritan Pentateuch is the "shortest" tradition.&lt;/strong&gt; Its patriarchs live 577 years on average, against 609 in the MT. The gap is concentrated in a few names. Methuselah alone loses 249 years.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Both traditions shrink after the Flood.&lt;/strong&gt; The eight antediluvian kings reign 241,200 years in total, which matches the total ETCSL gives for WB-444. The ten postdiluvian kings reign 6,425 years combined, with a median of 522.5. By Gilgamesh (126) and his son Ur-Nungal (30), reigns are almost human-scale. The Genesis patriarchs show a similar drop after Noah. We explore that parallel in more depth in our article on &lt;a href="https://ancientbiotech.com/sumerian-king-list-evidence/" rel="noopener noreferrer"&gt;the Sumerian King List and what it can and can't tell us&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Plotting the infographic
&lt;/h2&gt;

&lt;p&gt;The numbers range from 30 to 43,200, so a linear axis is useless. A horizontal bar chart on a log scale does the job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;

&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dropna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_lifespan_MT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;barh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_lifespan_MT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#8b5a2b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Genesis lifespans (MT)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;barh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;skl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reign_years&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#2b5a8b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_xscale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;log&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sumerian King List reigns (log scale)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invert_yaxis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;infographic.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dpi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dataset also ships with a ready-made &lt;code&gt;infographic.png&lt;/code&gt; (and a Spanish &lt;code&gt;infographic_es.png&lt;/code&gt;); the snippet above is a minimal version you can adapt.&lt;/p&gt;

&lt;h2&gt;
  
  
  License and where to get it
&lt;/h2&gt;

&lt;p&gt;Everything is released under &lt;strong&gt;CC BY 4.0&lt;/strong&gt;. Use it, remix it or put it in your classroom. Just credit "Ancient Biotechnology (2026), &lt;em&gt;Ancient Lifespans Dataset&lt;/em&gt;". The download includes the CSV, an English and a Spanish README with full methodology and sources, and both infographics. It's mirrored on three platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kaggle:&lt;/strong&gt; &lt;a href="https://www.kaggle.com/datasets/ancientbiotechnology/ancient-lifespans-genesis-vs-sumerian-king-list" rel="noopener noreferrer"&gt;https://www.kaggle.com/datasets/ancientbiotechnology/ancient-lifespans-genesis-vs-sumerian-king-list&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OSF:&lt;/strong&gt; &lt;a href="https://osf.io/b9n8v/" rel="noopener noreferrer"&gt;https://osf.io/b9n8v/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internet Archive:&lt;/strong&gt; &lt;a href="https://archive.org/details/ancient-lifespans" rel="noopener noreferrer"&gt;https://archive.org/details/ancient-lifespans&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaways for anyone digitizing old texts
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Model each variant as its own column&lt;/strong&gt; instead of picking a "winner".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blank beats guessed.&lt;/strong&gt; Record what you couldn't verify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cite at the row level.&lt;/strong&gt; Every row has a verse or manuscript reference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decode transliteration schemes explicitly&lt;/strong&gt; and keep the raw form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't silently convert units.&lt;/strong&gt; Store what the source says and document the system behind it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you build something on top of the dataset, such as a long-format version, an added Berossus column or a better visualization, we'd love to see it. You can find more of our writing on ancient texts at &lt;a href="https://ancientbiotech.com/" rel="noopener noreferrer"&gt;Ancient Biotechnology&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>python</category>
      <category>opensource</category>
      <category>history</category>
    </item>
  </channel>
</rss>
