Uploaded avatar of iHiD

Itt az Analitikus április!

@iHiD
Több, mint 3 éve ezelőtt
Videó

Sziasztok! A Functional February és a Mechanical March már mögöttünk van. Most az Analytical April következik, amelyben olyan nyelvekre fókuszálunk, amelyek remekül használhatók adattudományhoz.

Ahogy az elmúlt néhány hónapban megszokhattad, ebben a videóban Erik és én gyors áttekintést adunk arról, hogy miről szól ez a hónap, és milyen nyelveket fogunk felfedezni.

Szóval ahogy szokásos, Erik egy kicsit később végigvezet minket a nyelveken, de én kezdem a hónap néhány gyakorlati részletével.

Szóval először is: a hónap kiemelt nyelvei. Ebben a hónapban mindössze három van: a Julia, a Python és az R. Mindegyik nyelv meglehetősen különbözik a többitől, és a Python nyilvánvalóan nagyon sokoldalú nyelv, de ebben a hónapban arra biztatunk, hogy próbáld ezeket a nyelveket adattudományos szemlélettel használni.

Ahhoz, hogy megkapd az Analytical April jelvényt, öt feladatot kell teljesítened valamelyikükből. A különbségeiket mindjárt meg is nézzük, de az Exercism szempontjából a Python-kurzusunknak fantasztikus tanterve van, úgyhogy igazán ajánlom, hogy próbáld ki. Azt is reméljük, hogy a hónap során elindul egy Julia-tanterv. A munkának nagy része már kész, csak egy kis csiszolásra van szükség. Az R-nek nincs tanterve, de rengeteg érdekes feladatot kínál, amikkel játszhatsz.

Öt kiemelt feladatot próbálhatsz ki:

  • etl: amelyben felfedezheted, hogyan alakítsd át az adatokat más formátumba
  • largest-series-product: ahol egy számjegyekből álló stringben hatékony mintázatkeresést gyakorolhatsz
  • saddle-points: hogy felfedezd a többdimenziós tömbökkel és mátrixokkal való munkát
  • sum-of-multiples: hogy gyakorold egy számsorozat szűrését és összegzését
  • word-count: alakítsd a stringet szavakká, és számold meg őket

Emlékeztetőül: az Analytical April jelvény mellett van egy egész éves #12in23 jelvény is, amelyet azért kaphatsz meg, ha az év során bármikor megoldod a különféle kiemelt feladatokat. Tehát ahhoz, hogy megkapd ezt a jelvényt, idén valamikor meg kell oldanod azt az 5 feladatot Pythonban, R-ben vagy Juliában! A feladatok teljes listáját az Analytical April oldaláról elérhető fórumbejegyzés tartalmazza.

Végül, mielőtt belevágunk a nyelvekbe, egy emlékeztető: márciusban indítjuk az új Discord-szerverünket. Rengeteg jó móka volt ott, úgyhogy mindenképp nézd meg! A link a lenti leírásban van!

Nos, akkor fedezzük fel a nyelveket. Először gyors áttekintést adunk mindegyikről, aztán részletesebben megnézzük a jellemzőiket és a felhasználási eseteiket. Kezdjük a Pythonnal!

Python

  • Guido van Rossum találta ki és fejlesztette az 1980-as évek végén az ABC programozási nyelv utódjaként. Először 1991-ben jelent meg.
  • Hollandiában fejlesztették ki a Centrum Wiskunde & Informaticában (CWI) (arról híres, hogy itt végezte Edsger Dijkstra munkájának nagy részét), amely egy államilag finanszírozott kutatóintézet.
  • Guido C-ben és shell-szkriptekkel programozott, de mindkettőnek megvoltak a maga hátrányai. A Python célja, hogy a kettő legjobbjait nyújtsa, a hátrányok nélkül.
  • A Python Software Foundation gondozza, és a nyelv változásai Python Enhancement Proposals (PEP-ek) formájában történnek (az RFC-khez hasonlóan).

R

  • Ross Ihaka és Robert Gentleman alkotta meg az Aucklandi Egyetemen. Az R az S nyelv egy másik implementációjának tekinthető (viszonylag kisebb különbségekkel), amelynek az S-plus lett az utódja, az S kereskedelmi (nem nyílt) implementációja. Bár az R a szintaxisát nagyrészt az S-sel osztja, a szemantikáját a Scheme ihlette.
  • Cél: egy olyan nyelv létrehozása, amely jobban illik a statisztikai számításokhoz és a grafikákhoz, és könnyebben használható, mint az informatikusok által tervezett hasonló szoftverek.

Julia

  • Jeff Bezanson, Stefan Karpinski, Viral B. Shah és Alan Edelman fejlesztette nyíltan; jelenleg több mint ezer közreműködője van.
  • Cél: egy ingyenes, magas szintű nyelv létrehozása, amely a C sebességét, a Ruby dinamizmusát, a LISP metaprogramozását, a Python általános célú képességeit, az R statisztikai támogatását, a MatLab lineáris algebra támogatását és a Perl szövegfeldolgozási erejét egyesíti, mindezt úgy, hogy közben a masszívan párhuzamos végrehajtást is támogatja.
  • Kiváló tudományos számításokhoz, de általános célú nyelv is (Genie keretrendszer webalkalmazásokhoz).

Ahogy sok más nyelv, mindhárom is elégedetlenségből született :)

Remek. Akkor térjünk rá a felhasználási esetekre: mikor melyiket érdemes használni a többivel szemben?

Python

  • Valóban általános célú nyelv (weboldalak, szkriptek, tudományos számítások)
  • Sokféle célra használható: AI (TensorFlow), tudományos számítások (NumPy), szkriptek, weboldalak (Django), beágyazott rendszerek (micro Python), hardverrel való kapcsolódás (pl. Raspberry Pi), játékok (EVE Online), és a Python még a Marsra is eljutott
  • Kiváló a programozás tanulásához: rengeteg forrás és hatalmas közösség. Rengeteg útmutató segít Pythonos kódot írni (vagyis idiomatikus Python kódot írni, példákkal), köztük az „Az explicit jobb, mint az implicit” és „Az olvashatóság számít” elvek. Sok operációs rendszeren alapból telepítve van
  • Jelenleg az egyik leggyakrabban használt nyelv, így rengeteg dokumentáció, könyvtár és nagy közösség tartozik hozzá

R

  • Az R-t rengeteg helyen használják: kutatók kísérletek adatainak elemzésére, egyetemek statisztika és adatelemzés oktatására, a pénzügyi szektorban, ahol a statisztika kulcsfontosságú (pl. a biztosításban), ugyanígy a kiskereskedelemben (az Amazon adatelemzésre használja az R-t) és a gyártásban (a John Deere megbecsüli, hány alkatrészt kell legyártani), a National Weather Service segít előre jelezni az időjárást és a katasztrófákat, az adatújságírásban (valós adatok elemzése és értelmezése, gyakran vizualizációval), és széles körben használják az egészségügyben, például egy gyógyszer biztonságosságának meghatározására a preklinikai vizsgálatok alapján

Julia:

  • Kiváló tudományos számításokhoz, adatbányászathoz, gépi tanuláshoz, lineáris algebrához és elosztott számításhoz. A jelölése hasonlónak tűnik majd a matematikai jelöléshez, így az egyenletből kód viszonylag könnyen megy
  • Elosztott számítás: a taskok (=korutinok) és a csatornák lehetővé teszik, hogy a kód párhuzamosan fusson és kommunikáljon egymással, a többfolyamatos támogatás üzenetküldéssel működik (kiváló nagy teljesítményű számítástechnikához)
  • Használják a Celeste projektben (szuperszámítógép, amely Julia-kóddal 178 terabyte csillagászati adatot elemez) (emiatt a Julia a petaflop klub tagja lett, amelyben akkoriban csak a C, a C++ és a Fortran volt benne; a Julia az első dinamikus nyelv, másodpercenként egy billiárd, azaz 1 tizenöt nullával írható lebegőpontos számítással), a Clima (Climate Modeling Alliance) a Caltech, az MIT és a NASA Jet Propulsion Laboratory munkatársaival klíma-előrejelzési modellt fejleszt, valamint a CERN és az ASML

És programozási szempontból miben különböznek? Funkcionálisak, objektumorientáltak, vagy mi?

Python:

  • Dinamikus és erősen típusos
  • Több paradigmát támogató: imperatív, funkcionális, de valójában objektumorientált nyelv (minden egy objektum)
  • Az alapértelmezett értelmező, a CPython bytecode-ra fordít, amit aztán egy virtuális gép értelmez. A PyPy a CPython helyettesítője, amely just-in-time gépi kódra fordít

R:

  • Dinamikus és erősen típusos
  • Több paradigmát támogató, funkcionális mag, de támogatja az eljárásorientált vagy objektumorientált stílust is

Julia:

  • Dinamikus és erősen típusos, just-in-time fordított
  • Több paradigmát támogató: imperatív, objektumorientált (túlterhelés multiple dispatch-en keresztül), funkcionális (magasabb rendű függvények, részleges alkalmazás, pipe operátor)
  • A kód futásidőben fordul le, just-in-time és előre (ahead-of-time) módon

És továbbra is programozási szemszögből nézve: van valamelyik nyelvnek különösen kiemelkedő jellemzője?

Python:

  • Kellemes szintaxis: a whitespace-érzékenység miatt a scope könnyen átlátható. A kód általában könnyen olvasható, például az ember által is olvasható boolean feltételek (and/or)
  • Kifejező: sok mindent meg lehet tenni viszonylag kevés kóddal (listaértelmezések, generátorok, dekorátorok)
  • Rengeteg könyvtár érhető el a legkülönfélébb célokra
  • Ahogy korábban említettük, valóban általános célú nyelv, hiszen sokféle helyzetben használható

Julia

  • Multiple dispatch. A függvényhívást az összes argumentum típusa alapján dönti el (mint a függvénytúlterhelés)
  • Dinamikus, mégis kiváló teljesítmény. A Julia teljesítménye felveszi a versenyt a Fortranéval, és megközelíti a C-ét. A „normál” kód gyakran hatékony (nincs szükség őrült trükkökre, sőt a kisebb függvényeket kifejezetten támogatja). Könyvtárak a GPU-n futtatott kód támogatásához
  • Elosztott számítás: a taskok (=korutinok) és a csatornák lehetővé teszik, hogy a kód párhuzamosan fusson és kommunikáljon egymással, a többfolyamatos támogatás üzenetküldéssel működik (kiváló nagy teljesítményű számítástechnikához)
  • Kiváló tudományos számításokhoz, adatbányászathoz, gépi tanuláshoz, lineáris algebrához és elosztott számításhoz. A jelölése hasonlónak tűnik majd a matematikai jelöléshez, így az egyenletből kód viszonylag könnyen megy

R:

  • Rugalmas adattípusok: a vektor az alaptípus, még a skalárok is vektorok. A vektorokhoz metaadatok kapcsolódhatnak (például az elemeik nevei). A listák heterogének (eltérő típusú elemeket tartalmazhatnak). Különleges dataframe típus a vektorok gyűjteményére (mindegyik azonos hosszúságú).
  • A vektorizált műveletek tömör, hatékony és olvasható módon teszik lehetővé a vektorok frissítését
  • Az R a szoftvereszközök integrált készlete adatok manipulálásához, számításokhoz és grafikus megjelenítéshez. Könnyű felfedezni, vizualizálni és manipulálni az adatokat az RStudio segítségével. Kiváló adatbányászathoz
  • Nagyszerű, barátságos és sokszínű közösség. Az R for Data Science Online Learning Community olyan R-t tanulók közössége, akik minden készségszinten együtt dolgoznak, hogy fejlesszék a tudásukat. Van egy nyílt Slack-csoport, ahol a tagok kapcsolatban maradhatnak, és segíthetnek egymásnak a problémák megoldásában.

Ha valaki bizonytalan, hogy áprilisban melyiket próbálja ki, mit javasolnál, mi alapján döntsön?

Mint az informatika minden területén: attól függ! Ebben az esetben azt mondanám, hogy leginkább a céljaidtól és a személyes tapasztalatodtól függ.

Ha viszonylag új vagy a programozásban, érdekel az AI vagy a gépi tanulás, vagy olyan nyelvet szeretnél tanulni, amelyet sokféle dologra használhatsz, akkor valószínűleg a Pythont javasolnám kezdésnek: Hatalmas mennyiségű forrás érhető el a Pythonhoz, köztük sok ingyenes online kurzus A Pythont mindenhol használják az AI-hoz és a gépi tanuláshoz A Python rengeteg célra használható A Python-kurzushoz be van kapcsolva a tanulómód, amely szórakoztató módon segít elsajátítani a nyelv alapvető fogalmait

Ha statisztikai munkát szeretnél végezni, adatokat szeretnél felfedezni és vizualizálni, vagy kíváncsi vagy arra, hogyan lehet másképp dolgozni az adatokkal, az R nyelv remek választás: Az R adattípusai adatgyűjteményeken (vektorokon és listákon) alapulnak, és a műveletek könnyedén alkalmazhatók a gyűjteményekre (nincs szükség ciklusra) Az RStudio IDE remek az adatok felfedezéséhez és vizualizálásához Az R kiváló támogatást nyújt a statisztikai elemzéshez Az R-rel könnyedén lehet adatokat ábrázolni

Ha érdekel a tudományos számítás, párhuzamosan szeretnél kódot futtatni, igazán fontos a teljesítmény, vagy egy modern, elegáns nyelvet szeretnél tanulni, amely mást kínál, mint a legtöbb nyelv, akkor a Juliát javasolnám:

  • A multiple dispatch sokaknak új lesz, és hihetetlenül erős
  • A Julia kiváló a tudományos számításokhoz
  • A Julia típusrendszere rugalmas és kifejező
  • A Julia teljesítménye kiváló
  • A Julia kiváló a párhuzamos végrehajtáshoz

Persze, ha van időd, azt javaslom, hogy mind a hármat próbáld ki! Sosem tudhatod igazán, melyik nyelvet élvezed majd, amíg ki nem próbáltad.

1. Apr 2023 · Hasznosnak találtad?