Mostanában gyakran kell bizonyos problémák megoldásához különféle adatforrásokból adatokat összeszednem, feldolgoznom, majd valamilyen könnyen értelmezhető formátumban prezentálnom.
Példák:
- Logokból, analitikából, eseménynaplókból kinyert időbélyegek alapján szeretnék készíteni egy grafikont, amin látszik, hogy az érintett komponensek mekkora késleltetést okoznak az idő függvényében.
- A magyar költségvetést szeretném ábrázolni egy treemapen és egy Sankey diagramon, kb. mint itt. Ehhez szeretném az adatokat dinamikusan lekérdezni, a diagramokat évente legfeljebb néhány alkalommal szeretném legenerálni az aktuális költségvetés adataival.
Erre ma Excelt használok, de nem igazán optimális a feladatra. Ennek több oka is van:
- Az adatokat valamennyire fel kell dolgozni a forrás oldalon, hogy egyáltalán importálható legyen Excelbe (tudom, erre használhatnék Power Query-t)
- Az importált adatok további feldolgozása nagyon körülményes (pl. ISO-8601 vagy UNIX timestampek konvertálása Excel időbélyegekre)
- Sokszor egyszerűbb manuálisan megcsinálni bizonyos lépéseket, mint implementálni Excel képletekkel
- Az adatok frissítéséhez gyakorlatilag minden lépést meg kell ismételnem manuálisan
- Az Excel for Mac-nek van néhány furcsa limitációja és bugja a Windowsos verzióhoz képest
Szeretnék egy olyan alternatívát találni ezekre a feladatokra, amivel ezt az egész adatfeldolgozást és -vizualizációt viszonylag kényelmesen meg tudom valósítani. Nagyjából ezek az igényeim:
- Adatokat be tudjam importálni legalább CSV és JSON formátumokban, legalább fájlból és vágólapról, ideális esetben HTTP querykkel is (az autentikációt ehhez meg lehessen oldani)
- Az adatokat programozottan tudjam feldolgozni (pl. szűrni, konvertálni, összerendelni a többi adatsorral), lehetőleg deklaratív programozási nyelven
- Támogasson magasabb rendű adattípusokat (pl. időbélyegek) az azokon értelmezett műveletekkel, standard formátumokról (pl. ISO-8601) lehessen könnyen létrehozni
- Egyszerűen tudjak könnyen értelmezhető kimenetet létrehozni, pl. grafikonokat, táblázatokat
- A kimenet előállításához szükséges lépéseket el tudjam menteni, így később az adatok frissítése (az esetleges manuális importot leszámítva) teljesen automatikusan történjen
Több opció is az eszembe jutott:
- Jupyter Notebook tűnik ránézésre a legalkalmasabbnak, de soha nem használtam, nincs vele tapasztalatom.
- Matlab, illetve annak alternatíváit (Octave, Scilab). Ezek inkább matematikai, mérnöki számítási feladatokra vannak kitalálva, nem tudom ilyen célra mennyire alkalmasak.
- R, Python, vagy más, adatfeldolgozásra (is) használt programozási nyelv használata a megfelelő librarykkel. Egyik említett nyelvet és környezetet sem ismerem annyira, ezért valószínűleg jó pár órát bele kellene fektetnem, mire össze tudnék rakni egy olyan környezetet, amivel már hatékonyan tudnék dolgozni.
Ti mit használnátok erre a feladatra, van tapasztalatotok a fenti opciókkal, esetleg van más is, ami nekem nem jutott eszembe?
- 982 megtekintés
Hozzászólások
Ha gyorsan akarsz haladni, akkor Python vagy esetleg Julia, akár Jupyterrel, akár anélkül (az csak egy környezet, újabban VSCode vagy akár egyéb hasonló is egyformán jó lenne). Olyan értelemben is gyorsan, hogy ha nem értesz hozzájuk kellően, akkor is tempósan lehet tanulni, ahogy folyamatosan haladsz a problémáddal. Ha pedig valami más kéne/gyorsabban, felfogható prototipizálásként, amiből már könnyebb másba átírni, viszont ezek a nyelvek nagyon erősek vizualizációban is, így eléggé adják magukat (pl. matplotlibbel).
Valószínűleg szinte bármi mással hosszabb lenne a "time-to-market" ilyen típusú feladatoknál (ha nulláról kezdesz).
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam a Jupytert. Előtte azt gondoltam, hogy ez egy framework, ami az olyan magas szintű funkciókat is nyújtja, mint az adatok importálása és a kimenet generálása. Most már értem, hogy ez inkább egy futtatókörnyezet, és ezeket a funkciókat olyan libek nyújtják, mint a Pandas és a Matplotlib. Viszont lehet használni más kernelekkel akár más nyelveket is, pl. tslib-bel TypeScriptet/JavaScriptet. De úgy látom Pythonnal érdemesebb használni, egyrészt tslib-bel jelenleg a syntax highlighting sem működik (bár korábban működött), másrészt nincsenek annyira kiforrott libek hozzá.
- A hozzászóláshoz be kell jelentkezni
Azt nem írtad, milyen programozási nyelveken van tapasztalatod. Abban néznék körül még, ha van ilyen.
Megfelelő libekkel szinte minden nyelv jó lehet erre. Én Php használattal oldottam meg hasonlókat, mert voltak készen pont olyan feldolgozó kódok, amikhez hasonlóak kellettek.
Ismerős Tableau használattal.
Utána néznék, keresnék mások tapasztalataira, hogy ők hogy oldanak meg hasonlókat.
ChatGPT szerint:
- Jupyter Notebook
- MATLAB, Octave, and Scilab
- R and Python
- Pandas and Matplotlib in Python
- RStudio
- Tableau
- A hozzászóláshoz be kell jelentkezni
Azt nem írtad, milyen programozási nyelveken van tapasztalatod.
Legtöbb tapasztalatom JavaScript/TypeScript, Java és Scala nyelveken van, illetve szívesen használok PowerShellt is. Némi tapasztalatom van ezeken kívül Kotlin, Ruby, Go, Lua, Python és még pár nyelvvel ami most nem jut eszembe.
JavaScriptet szoktam is használni az előfeldolgozásra, ha JSON-t kell feldolgozni. De kellene hozzá a körítés, vagyis a folyamat eleje (import) és vége (vizualizáció), amit nyilván össze tudok rakni libekből, de valami integráltabbra gondoltam.
Megnézem a javaslatokat, a Pandas és az RStudio is érdekesnek tűnik.
- A hozzászóláshoz be kell jelentkezni
Nem divatos manapság, de sok esetben a hasonló feladatokat mezei SQL segítségével meg lehet (és szoktam) oldani.
Betöltöd az adatokat egy DB-be (pl. postgresql, oracle), és egy szimpatikus klienssel (pl. dbeaver, pgweb) lekérdezéseket, nézeteket, stb. csinálsz rá. JSON adatok kezelése is prímán működik.
Ha grafikonra, dashboardra vagy hasonlóra vágysz, akkor a DB-re rá lehet ültetni többféle kattintós frontendet, pl.:
- Metabase
- Apache Superset
- Redash
Adatexport többféle módon lehetésges:
- kliensből kézzel
- shell scripttel
- talán a kattintós frontend is tud ilyet
A környzetet dockerrel könnyen össze lehet lőni lokális gépen is.
Ha sok az adat és/vagy egy nézetnél bonyolultabb adattranszformációkra van szükség SQL-ben, akkor pár hasznos google keresés:
- create table as select
- insert into select
Az elkészült SQL scripteket pl. shell scriptbe rendezve tudod futtatni. Persze vannak ennél komolyabb módszerek is a data pipeline beüzemelésére (apache airflow).
- A hozzászóláshoz be kell jelentkezni
PowerBI?
- A hozzászóláshoz be kell jelentkezni
Én sokszor használtam Matlab-ot és Octave-ot ilyen feladatokra, nekem kézre áll. De volt olyan feladat, ahol awk+SQLite+GnuPlot mellett tettem le a garast.
- A hozzászóláshoz be kell jelentkezni
Megjelenitesre/vizualizaciora: grafana. Annyira nem ismerem a gyakorlatban a konkret beroffentesi lepeseket, de sok projektnel hasznaljuk kvazi-valos ideju egyszeru vizualizaciora, gyk pont arra a feladatkorre amit mondasz (logokból, analitikából, eseménynaplókból kinyert időbélyegek alapján szeretnék készíteni egy grafikont). Az nem kifejezes hogy eroforrasigenyes, de azt legalabb a kliens csinalja. Biztos van hozza egy tonna backend, mint adatforras. CSV, JSON tuti.
Valojaban az a kerdes, ami nem teljesen egyertelmu hogy ezt interaktivan vagy hatterben (automatikusan) akarod csinalni.
- A hozzászóláshoz be kell jelentkezni
Az ötlet jó, korábban használtam is Grafanát.
Ez úgy lenne a legjobb, ha az adatforrásaimat közvetlenül tudnám integrálni, hogy a queryket a Grafana diagramokon tudjam definiálni. De az infrastruktúra nem az enyém, amiből az adatok jönnek, nekem csak hozzáférésem van a lekérdezések futtatásához. Ezért kérdéses, hogy ez mennyire megvalósítható.
Vagy még azt tudom elképzelni, ha az adatokat előbb importálom egy saját adatbázisba, és azon futtatok lekérdezéseket Grafanából. Ez viszont elég macerás ad-hoc adatfeldolgozásra, mert az importot manuálisan kell megoldanom.
- A hozzászóláshoz be kell jelentkezni
Erre mondtam az ELK stacket, azt tudod etetni saját custom akármiből, de az adatbázis már ott van az elasticban, a fenszi gui meg a kibanában. Szóval csak a query oldalt kell megugrani, de hát azt egyébként is meg kell valahogyan.
A logstash nem is feltétlen kell, csak említetted, hogy logok, akkor lehet, hogy azzal gyorsabb. (Egyébként pl syslog-ngvel is egész jól lehet etetni direktben)
- A hozzászóláshoz be kell jelentkezni
Épp most jött szembe, hogy lehet pythonozni az excelben már? Headlineig jutottam, szóval passz, de nem lehetetlen, hogy lehet benne import antigravity, és akkor a hiányzó szarok jó része megoldódhat.
Adattudósok szokták szeretni az ilyen félautomata izékre a jupytert. Lehet egyesével nyomkodni a play gombot, beleírni mindenféle magyarázkodást, könnyű ad-hoc kicsit belenyúlni, bele lehet ágyazni a grafikonokat a random libekből, meg lehet benne nézni kulti formában a nyersadatot.
Én lehet, hogy elgondolkodnék egy ELK stacken / valami grafanás izén, ha olyan a usecase (a bemeneti oldala kicsit macerákosnak hangzik).
De leginkább, ha egyébként is abban mozogsz, akkor várjuk meg gelei mestert, mesélje el, hogy kell ezt az MS mindenféle power meg bi cuccában jól csinálni, mert elég gyanús, hogy lehet, és hogy jó eszköz.
- A hozzászóláshoz be kell jelentkezni
Pont most néztem, insider verzióban elérhető már a Python.
- A hozzászóláshoz be kell jelentkezni
Aha. Kicsit tovább kattintva úgy tűnik, hogy konkrét cellákba lehet pythont írni, ami egyrészt jó, másrészt lehet nem fájna, ha lenne "rendes" scriptként is. De igazából itt asszem elhasal:
Python runs in the cloud
Python in Excel calculations run in the Microsoft Cloud with a standard version of the Python language. Python in Excel comes with a core set of Python libraries provided by Anaconda through a standard, secure distribution.
You don't need a local version of Python to use Python in Excel. If you have a local version of Python installed on your machine, any customizations you've made to that Python installation won’t be reflected in Python in Excel calculations.
Because Python in Excel calculations run in the cloud, Internet access is required to use the feature.
- A hozzászóláshoz be kell jelentkezni
Na, ennyire részletesen nem másztam bele, de ez eléggé árnyalja a képet. Van pro és kontra is, majd meglátjuk, hova futja ki magát... :)
- A hozzászóláshoz be kell jelentkezni
eddig én se (hálistennek mostanában nem kellett ilyeneket csinálni), csak most már rákattintottam :)
- A hozzászóláshoz be kell jelentkezni
Nem igazán vagyok fejlesztő, de én ilyen feladatoknál adatgyűjtés-tárolás-megjelenítés rétegekben szoktam gondolkodni.
Gyűjtésre valami programozási nyelvet, amit ismersz, és az adott adatforrásokból könnyen lehet adatot kigyűjteni (Nekem a Python vált be erre a célra.)
Tárolásra az adatok jellegének megfelelő adatbázist (MySQL, Postgres, Influx, elastic, akármi). Adatok átalakítása történhet a gyűjtéskor, vagy az adattároló rétegben.
Megjelenítési rétegnek azt, ami lefedi az igényeket és támogatja a választott adattárolót - grafana pl nem lehet rossz választás, ha csak grafikonok kellenek, de ha mondjuk pdf riportok kellenek szöveggel, képpel, akkor arra már nem biztos, hogy jó.
Ennek a megközelítésnek szerintem az az előnye, hogy bármelyik komponense szabadon cserélgethető.
- A hozzászóláshoz be kell jelentkezni
A legbonyolultabb ilyen scriptem bash alapon cronbol beszerezte (grep/awk) az infot, letette ahova kell, onnan idonkent egy python felnyalta, levensthein tavolsagot szamolt meg csuszo idoablakban szamolt atlagot meg levagta a kiugeo tuskeket, es az eredmenyt lerakta egy CSV -be. Azt amikor kellett, akkor felnyaltam excellel, tiz perc alatt kiszineztem, nyomtam egy grafikon varazslot es elkuldtem akinek kellett. Az a fajta kokany melo volt, amit az ember minden porcikaja elvez, hogy vegre ilyet is csinalhat. :-)
- A hozzászóláshoz be kell jelentkezni
Telegramon jött egy kérés, hogy, hogy szúrjam be ide neked (nincs hup accja az illetőnek):
Ha már workbook/runbook akkor érdemes megnézni a Julia alapú Plutot is, mert számos idegesítő hibát kiküszöböl a Jupyterből, a cellák kézzel újrafuttatásának szükségességét, a futtatási sorrend függést, a rejtett állapotot, csomagkezelés hiányát stb.
- A hozzászóláshoz be kell jelentkezni
Szépen összeszedtél mindent, amit ajánlanék, konkrétan az utolsó 3 pontban, abból is az R-t ajánlom leginkább. Esetleg még SQL (tetszés szerint, amit ismersz, SQLite, MariaDB, MySQL, Postgre, stb.), vagy akármelyik megoldást választod, a GNUplot is ott van, ha vizualizáció kell. Excelt semmiképp sem, tele van korláttal és bizonyos platformokhoz kötött proprietary szemét, beleragadsz a formátumába. Kicsit igaz ez a Matlab-ra is, de az már egy fokkal legalább komolyabb.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
Amikor nekem kellett hasonlo, pythonnal oldottam meg. Lehet pluszban Jupyterezni, az annyiban mas, hogy talan kicsit felhasznalobaratabb es interaktivabb. Bar python kodot meg pont PyCharmban szeretek irni (sokat segit), szoval annyira nem egyertelmu, de 99%-ban amugy is egyezik a kod, amit irsz. Amig kiserletezgetsz, Jupyter talan jobb ra, de ha rogton valami python scripbe irod, kesobb konnyebb automatizalni.
Rengeteg lib van mindenfele megjelenitesi/adattisztitasi/adatfeldolgozasi feladatokra, es ha sok szamitast igenyel, meg az is gyorsithato (pl. pytorch tenzormuveletek futnak gpu-n). Alapvetoen attol fugg, hogy mi a pontos celod.
Alapbol csv-t/json-t gond nelkul tudsz olvasni, de excelre is van lib. A pandas is kozvetlenul be tud importalni eleg sok formatumot, es adattisztitasra is hasznos. Tobb datumformatumot ismer, de a datum- es idokezeles a legtobb nyelven szivas (bar erre is van lib, ami magatol felismer eleg sok formatumot). Ha maskepp nem megy, akar regexpekkel is behuzhatod a logjaidbol az erdekes mezoket. Termeszetesen a halozatot is kezeli, pl. a requests lib.
Szamolasra ott a numpy, a scipy (rengeteg elore implementalt algoritmussal), ill. ha nem eleg gyors a numpy, ott a pytorch (oda-vissza atjarassal).
Megjelenites: csv-t/json-t/xlsx-et irni is tudsz. Ha webes feluletet csinalsz hozza (pl. flask, a js-es/node-os express-hez hasonlit leginkabb - irtad, a js-t ismered), html tablazatot is. Grafikonra a matplotlibet szeretik sokan, szinte mindent megeszik. A seaborn kicsit komolyabb ennel, ill. ha "desktop" feluletet irnal, pyqt5-hoz is van interaktiv grafikonmodul (pyqtgraph-al irtam ilyen progit, ami parszor 10GB-os file-bol olvasta es jelenitette meg a kert reszt akadasmentesen).
Mindenfele DB-t is tamogat, bar ha csak kesobbi feldolgozasra tenned el, a pickle a legegyszerubb (1-2 sor kiirni es visszaolvasni).
Mostanaban relative sokat pythonoztam, es nagyon sok feladatra jo volt. Ha csak adatmaceralasra van szukseged, valoszinuleg az R-rel es a Juliaval sem lohetsz nagyon melle (szamomra nem volt elonyuk, mert a pythonnal mar lefedtem amit tudnak).
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Van Jupyter integráció PyCharmban, egész jól működik.
- A hozzászóláshoz be kell jelentkezni
vscodeban is.
- A hozzászóláshoz be kell jelentkezni