﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Velká data" directory="big">

<!--
  <example>
    <text>
    </text>
    <hint>
    </hint>
    <solution src="big/.py" lang="python" />
  </example>
-->


  <example>
    <text>
        Jako rozcvičku si nejdříve připravíme soubory pro další cvičení: Načtěte data ze souboru <a href="/priklady/python/_txt/syn2010_word.vyber-ascii.zip">SYN2010</a> (upravený přehled slov z českých textů k příslušnému roku) a vybudujte z nich slovník slov klíčovaný délkou slov. Následně daný slovník uložte pomocí modulu <code>pickle</code> do souboru.
    </text>
    <hint>
        Python sice umí zpracovat zazipované soubory, ale pro potřeby tohoto a následujících cvičení archiv rozbalte, ať pracujete přímo s textovými daty.
    </hint>
    <solution src="big/1.py" lang="python" />
  </example>

  <example>
    <text>
        Nyní si uvedený soubor pouze načtěte, vybudujte slovník a spočtěte, jak dlouho to trvalo.
    </text>
    <hint>
        Použijte <code>time.time()</code>. Dejte si pozor, abyste uvnitř měření času nezapomněli nějaké vypisování na konzoli, pak by bylo všechno špatně.
    </hint>
    <solution src="big/2.py" lang="python" />
  </example>

  <example>
    <text>
        Vybudovat slovník můžete buď klasicky pomocí <em>dict</em> nebo jednodušeji pomocí <em>defafultdict</em>. Srovnejte časy zpracování obou metod.
    </text>
    <hint>
        Možná trochu překvapivě by vám asi mělo vyjít, že <code>defaultdict()</code> je rychlejší.
    </hint>
    <solution src="big/3.py" lang="python" />
  </example>

  <example>
    <text>
        Zopakujte si načtení souboru z předchozího příkladu, ale nyní pomocí knihovny <em>mmap</em> a porovnejte, jak dlouho trvá v normálním souborovém přístupu a jak dlouho při mapování pomocí modulu <em>mmap</em>.
    </text>
    <hint>
        I když síla <em>mmap</em>u se projeví především při mapování skutečně velkých souborů po jejich částech do paměti, mělo by být zpracování rychlejší už i v tomto případě.
    </hint>
    <solution src="big/4.py" lang="python" />
  </example>

  <example>
    <text>
        Ještě zbývá zkusit načíst slovník uložený ve formátu <em>pickle</em>. Opět srovnejte dobu načítání s předchozími výsledky. Jaká kombinace metod a knihoven je nejvhodnější při zpracování takto velikých dat?
    </text>
    <hint>
        Navzdory tomu, že zpracovaný slovník uložený ve formátu <em>pickle</em> je větší než originální data, jeho načtení je – alespoň při této velikosti – podstatně rychlejší než vybudování slovníku jakoukoliv jinou metodou.
    </hint>
    <solution src="big/5.py" lang="python" />
  </example>


</examples>
