Přejít k navigační liště

Zdroják » Různé » Začněte používat jazyk Julia 1.0. Představujeme možného nástupce R.

Začněte používat jazyk Julia 1.0. Představujeme možného nástupce R.

Články Různé

Zaznamenali jste vydání programovacího jazyka Julia 1.0 a přemýšlíte, co by vám mohl přinést? Má cenu se jím zabývat? Nebude to stát moc času? V článku ukážeme první kroky, u kterých se můžete rozhodnout, zda chcete dát Julii šanci.

Nálepky:

Vývoj jazyka Julia začal již roku 2009, později byl jazyk opensourcován a před několika dny dospěl do verze 1.0.

Pavel Tišnovský v úvodu svého seriálu o tomto jazyce představuje Julii takto:

Jedná se o programovací jazyk, který byl navržen takovým způsobem, aby dokázal nahradit takové nástroje, jakými jsou Matlab, R, GNU Octave či Python s knihovnami Numpy a SciPy a současně dokázal překládat programy do optimalizovaného kódu, který by mohl konkurovat Céčku či (dokonce) Fortranu. Důvod je jednoduchý – tvůrci jazyka Julia používali pro svou práci (numerická matematika a statistika) různé nástroje, z nichž každý byl specializován pro určitou oblast (Matlab pro výpočty s maticemi), R pro statistické výpočty apod.), ovšem kooperace mezi těmito nástroji nebyla ideální. Obecné jazyky typu Ruby či Python byly zase (opět podle mínění autorů jazyka Julia) pomalé, zejména při porovnání s klasickým céčkem, ale i s Javou.

Snahou původního autora Stefana Karpinského bylo vytvořit nový programovací jazyk založený na ve své době nejnovějších technologiích typu LLVM a současně používající to nejlepší ze světů imperativních i funkcionálních programovacích jazyků. Výsledkem měl být jazyk, který by byl snadno použitelný (zejména pro amatérské programátory), robustní, škálovatelný a současně i dostatečně rychlý, aby mohl soutěžit s C či Fortranem. Navíc měl jazyk Julia nabízet možnost snadné kooperace s knihovnami vytvořenými právě v C či Fortranu.

Jak začít?

Máte tři možnosti:

  • Stáhnete si konzolovou verzi Julie 1.0. Ta vám v zásadě postačí. Pokud používáte Linux a Julii z vaší linuxové distribuce, dost možná máte příliš starou verzi (např. 0.4), stáhněte si novou verzi z webu projektu.
  • Druhou možností je stáhnout JuliaPro, což je jeden z mnoha nabízených balíků společnosti Julia Computing. Základní verze je zdarma, vedle toho zde najdete řadu komerčních verzí. Zatím používají starší verzi Julie 0.6.4. Získáte celé vývojové prostředí Atom připravené pro Julii (to si ale můžete stáhnout i samostatně) a řadu dalších nástrojů.
    Pokud si chcete Julii zatím jen vyzkoušet, tuto možnost nedoporučuji. Musíte podstoupit registraci, stáhnout několik set megabitů, samotná instalace má pak přes 2.5 GB. Opravdu to chcete?
  • Třetí možnost naopak velmi doporučuji, a sice neinstalovat Julii vůbec 😊, ale použít webový interface JuliaBox. Ten vám nabídne jednak možnosti konzolové Julie a vedle toho grafické prostředí s integrovaným tutoriálem (ano, tohle chcete!). Základní verze je zdarma, pokud byste časem prováděli náročnější výpočty, musíte si připlatit. Téhle variantě se budu věnovat ve zbytku článku.
    Pokud by se vám postesklo, a chtěli byste si takovou webovou verzi Julie rozjet lokálně na vašem stroji, tak můžete. Je součástí předchozího mega-balíku jmenuje se Jupyter for JuliaPro.

Pozn. pro zoufalce: Pokud jste byli zvyklí jako já, že ve starších verzích se Julie ukončuje příkazem quit(), možná vás překvapí, že ten ve verzi 1.0 nefunguje. Ušetřím vám trápení, používejte příkaz exit() nebo kombinaci CTRL+D.

Pozn. pro Davida Grudla: Davide! Nedávno jsi otevřel debatu o problematickém financování open source. Julia je (snad) dobrý příklad toho, jak je financování projektu již od začátku pečlivě integrováno, přímo všito, do samotného produktu a existuje mnoho cest, jak se lze od základního produktu, který je otevřený a zdarma, dříve či později dostat do fáze, kdy bude „snad už nejlepší za to začít platit“. To  jen pro inspiraci. Ale uvidíme, jak to financování Julie pojede za takových deset let.

Pozn. pro ostatní: Odstavec výše nebyl jen pro Davida, ale pro všechny, kdo se zajímají o financování open source projektů.

Boxujeme s Julií

Přihlásíme se tedy na JuliaBox.com a čeká nás velmi dobře provedené prostředí. Jeho první načtení může chvíli trvat, pak již ale vše jede svižně.

Prostředí je postavené na open source projektu Jupyter, který toho umí poměrně dost, a tak si můžeme kupříkladu upravit editor, aby se choval podobně jako Sublime, Vim nebo Emacs. Podporuje také integraci s Gitem nebo Google Drive.

Před sebou vidíte dva adresáře. Otevřete adresář tutorials (s tím chcete začít, že?). Pokračujte do intro-to-julia. Pokud nemáte moc času, otevřete short-version. A můžete začít. Jednotlivé kapitoly vás provedou základy používání Julie.

Vyzkoušíte si základní operace, práci s proměnnými a funkcemi. Na tom vás ani nic nepřekvapí. Pokud nepočítám sčítání koček. Julie je opravdu miluje. Deset koček je jí málo.

Grafy kreslíme funkcí plot()

Samozřejmostí je tvorba grafů, kterou od programu, jenž se snaží navázat na R, jistě očekáváte. Graf na obrázku si během tutoriálu vygenerujete sami.

Rychlá jako blesk

Julie je rychlá. To autoři demonstrují vygenerováním deseti miliónů náhodných čísel a jejich sečtením. Obojí proběhne okamžitě i na starším stroji.

Chybové výpisy

Pokud něco selže, čeká vás bohatý výpis chyby.

Balíčky, balíčky a zase balíčky

Součástí Julie jsou tisíce balíčků. Za těch pár let vývoje vznikl opravdu bohatý ekosystém. Používají se snadno, balíček jednou nainstalujete spuštěním Pkg.add("nazev") a pak jej již zahrnujete do projektu příkazem using nazev.

Spolupráce s Céčkem

Opravdu silnou stránkou Julie je jednoduchá spolupráce s kódem v jiných jazycích. Ostatně to byl jeden z důvodů jejího vzniku. Funguje to tak dobře, že můžete kód v Céčku vložit do Julie jako text, nechat si ho zkompilovat a rovnou zavolat.

Ostatně počítá se, že Julii budou používat vědci, kteří nepotřebují řešit, jak komunikace mezi jazyky probíhá. Potřebují kód zadat a vidět výsledek. Julia jim to splní.

Spolupráce s Pythonem

Anebo chcete Python a některou z jeho knihoven? Žádný problém, stačí říct. Tady nepotřebujeme řešit žádnou kompilaci. Kód v Pythonu prostě vložíme a zavoláme. Julie se s ním domluví.

A tím se blížíme k závěru. Za upozornění stojí, že výše uvedené příklady probíhají na serveru JuliaBox, nevykonávají se ve vašem prohlížeči, který slouží jen jako editor a zobrazovač výsledků. Pokud prohlížeč zavřete, instance Julie stále na serveru poběží (a bude pravděpodobně automaticky ukončena po nějaké době). Editor proto zavírejte nabídkou File - Close and Halt. Tím jak zavřete daný soubor, tak ukončíte běh prostředí na serveru. V záložce Running pak můžete vidět přehled procesů, které pod vaším účtem na serveru běží (například nějaké delší výpočty).

Mirka Spáčilová, Julie a Hello world!

Ale ještě není konec. Mám pro vás malou výzvu, ideální, pokud si chcete hned Julii osahat.

Stalo se u nás raritou vyzkoušet si zpracování statistických dat z webu pomocí specifické úlohy, která prakticky nahradila onen stereotypní Hello world.

Zadání zní: Nakreslete distribuci hodnocení filmů recenzentkou Mirkou Spáčilovou.

Prvním známým řešitelem tohoto úkolu byl Michal Bláha, který jej publikovat v článku Filmová kritička Mirka Spáčilová v číslech, k řešení použil nástroj Apify.

Následoval jej Jakub Balada, který se ve svém článku Jak je sladěná Mirka Spáčilová s Františkem Fukou, ČSFD a IMDB? zaměřil na korelaci hodnocení Mirky Spáčilové a dalších recenzentů. K řešení také použil komerční nástroj Apify.

Nyní ovšem přituhuje. Petr Kajzar se rozhodl vyzkoušet otevřené řešení R, které včera publikoval v článku Jak je to s tou Mirkou Spáčilovou a jejími 60 %. Bravo.

A zde je úkol pro vás milý čtenáři. Jelikož byla Julia navržena jakožto hrdý nástupce jazyka R, mělo by být snadné v ní tuto úlohu vyřešit. Nemusíte nic instalovat, stačí použít JuliaBox popsaný výše. Potřebné knihovny pro práci s HTTP a HTML si najděte v dokumentaci nebo na StackOverflow. Kolik řešení se nám sejde? Necháme se překvapit.

Další zdroje pro zájemce o Julii

Komentáře

Subscribe
Upozornit na
guest
3 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Vláďa Smitka

Já už začal s výzvou v Pythonu – protože mám ve svém okolí několik lidí, co přechází z R do Pythonu, nebo úplně začínají, tak jsem přepsal příklad v R krok za krokem do Pythonu s Pandas.

https://github.com/lynt-smitka/spacilova

Rád přijmu PR na řešení v Julii. Když se mi bude chtít, možná ho i sám napíšu, Julii máme v našem Jupyter labu.

Vláďa Smitka

Tak jsem jí dal šanci, ale moc spokojený s tím nejsem. Odolal jsem pokušení použít knihovny z Pythonu, které se pro dané řešení přímo nabízely, takže nevím, zda jsem použil nejvhodnější možné… Rychlost mi přišla o několik řádů nižší, než to samé v Pythonu. Docela jsem zápasil s dokumentací (hlavně u knihoven).

Výsledek: https://github.com/lynt-smitka/spacilova/blob/master/spacilova-julia.ipynb

Lze si všimnout, že historgram vypadá trochu jinak, než v předchozích případech – je totiž započítána i okrajová hodnota, takže co v R a v Pythonu byla skupina <50-60), tak zde je (50-60>, to je ale možná dané chováním dané knihovny.

I když se nestane mojím oblíbeným jazykem, tak vidím velkou sílu v možnosti spolupráce s Céčkem a Pythonem.

Petr Kajzar

Díky za pěkný článek!

Pobavila mě vaše výzva, tak jsem si odpoledne taky pohrál s Julií. Nedokončený výsledek je na webu. Než jsem stačil vyřešit graf, tak mi Julia začala stávkovat a nechce už překompilovat žádné balíčky. Takže mám jen CSV a tabulku… Díky za dobrý nápad s praktickým příkladem – člověk se to takhle naučí snadněji, než když pasivně čte tutoriály. :-)

@Vláďa Smitka: Skvělé, díky. :-)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.