Adatbányászat Blog

Az Adatbányász Blogon a dmlab szakértőinek írásait olvashatod a big data és data science területéről.

dmlab.hu - Big data és data science tanácsadás
"Ha örülsz, hogy fejedre nőttek az adatok."

Keress minket bátran:
- Nagy-Rácz István +36704595669
- Gáspár Csaba +36208234154
- info@dmlab.hu

Hírlevél

Iratkozz fel hírlevelünkre, hogy mindig naprakészen tudjunk tájékoztatni.
Feliratkozás
Leiratkozás

Címkék

10éves (1) 2007 (1) 2010 (23) 2011 (27) 2012 (13) 2013 (23) 2014 (5) 2015 (6) 2016 (10) 2017 (3) adaptív (1) adat- és médiainformatika (1) adatárusítás (1) adatbányászat (10) adatbányászati algoritmusok (1) adatbányászati alkalmazások (2) adatbányászati meetup (1) adatbányászati oktatás (1) adatbányászati technológiák (4) adatelemzés (1) adatelemzési platformok (1) adattárház (5) adattárház fórum (6) adattárolás (1) adattisztítás (1) adatvédelem (2) advise (2) aegon (1) aglitás (1) agy (2) ajánló (11) ajánlórendszerek (1) aktivitás felismerés (1) algoritmus (1) alkalmazás (3) állásajánlat (1) amazon ec2 (1) ambiens (1) ami (1) analitika (1) analytics (1) andego (3) apache (1) api (2) Arató Bence (3) bank (1) barabási (2) Barabási (2) beharangazó (1) beharangozó (18) bejelentés (2) belami (1) best practice (9) beszámoló (14) BI (3) Bi (1) bi (13) bi-trek (1) biconsulting (7) bigdata (21) Big Data (2) big data (5) biopen (1) biztosító (1) BI Akadémia (1) bi consulting (1) bi start (1) blog (5) bme (1) BME (14) bootcamp (1) brainstorming (1) bsp (1) budapest (1) business analytics (1) business analytics szakirány (1) churn (2) ci (1) címkefelhő (2) CIO (1) clementine (1) Clementine Consulting (1) cloud computing (2) cognos (1) credit scoring (1) crisp-dm (1) crm (2) csalásdetektálás (1) DataExpert (1) dataexplorer (1) datapest (1) data mining (1) data science (5) diplomamunka (1) dmla1o (1) dmlab (12) döntési fák (1) drill (1) e-commerce (1) előadás (21) előrejelzés (1) élő közvetítés (1) Enbrite.ly (1) energetika (1) esemény (2) esettanulmány (3) etikus (1) etl (2) évforduló (2) fejlesztés (2) felmérés (5) felsőoktatás (1) felület (1) felvásárlás (3) film (1) fizetés (1) forecasting (1) forgalomelőrejelzés (2) foursquare (1) fraud detection (1) freebase (1) gartner (2) gazdasagi informatikus (2) gépi tanulás (4) google (8) google analytics (1) graphlab (1) gravity (3) greenplum (1) gyakorlat (1) hadoop (10) hallgatók (2) hálózatelemzés (3) hálózatkutatás (2) hálózatok (3) hazai (2) hiba (4) hírlevél (2) hive (1) honlap (1) HR (1) HVG (1) i5 (1) ibm (6) ibm modeler (1) ibm spss (3) icdm (1) idc (2) idősor (1) idősorok (1) ieee (1) iir (1) infobright (1) információbróker (1) innováció (5) innovatívBI (1) innovativ bi (4) inspiráció (1) intelligencia (2) Internet Hungary (1) iqsymposium (19) iqsys (16) iroda (4) jelentkezés (1) jmp (2) kaggle (2) kampánymenedzsment (1) kapcsolati hálók (1) karrier (1) kdd (3) kdnuggets (2) képzés (4) kérdés (1) kérdőív (1) kerekasztal (1) keresés (1) kereső (1) keresztvalidáció (4) klaszterezés (2) knime (1) kockázati tőke (1) kollaboratív munka (1) kompetencia (1) konferencia (70) könyv (6) környezet (1) közlekedés (1) közösség (2) közösségi hálózatok (4) közvetítés (6) kritika (1) küldetés (1) kürt akadémia (1) kutatás (2) lemorzsolódás (1) licensz (1) live (1) logisztika (1) magyar telekom (2) mahout (1) mapreduce (1) marketplace (1) média (2) meetup (11) mellékspecializáció (1) mém (3) memóriacentrikus (1) menedzsment (3) metaadat (1) metodika (1) microsoft (1) mobil (5) mobil bi (4) modeler (2) modell (3) morgan stanley (1) motion chart (1) munkaerő (1) mysql (1) mytraffic (4) nemzetközi (5) nemzetközi összehasonlítás (1) netflix prize (1) networking (1) next big thing (1) nips (1) nosql (1) nyílt forráskód (4) nyomkövetés (1) offline áruházak (1) okostelefon (1) oktatás (22) olvasók (1) online áruházak (1) online kutatás (1) open source (19) open source bi (3) operatorfa (1) osbi (12) összehasonlítás (1) ötletek (2) pandas (2) paradoxon (1) pascal (1) pentaho (1) personal data mining (1) phd (2) philips (1) piac (3) pikk (1) pilot (1) PISA-felmérés (1) pmml (1) politika (2) powerpivot (1) prága (1) praktiker (1) prediktív analitika (2) prediktív analitka (1) prediktiv modellezés (5) prediktív modellezés (1) prezi (15) privacy (1) privacy preserving data mining (1) projekt (1) projektmenedzsment (4) publikáció (1) python (9) radoop (12) random forest (1) rapid-i (2) rapidanalytics (7) rapidminer (40) RapidMiner (2) rcomm (7) refine (1) Rexer Analytics (1) rsctc (1) R nyelv (7) saas (1) sap (1) SAS (20) sas enterprise miner (2) sas enterpris guide (1) sas entprise miner (1) sas forum (3) sas fórum (1) siker (3) simptech (1) sixtep (2) smarthabits (1) spike sorting (1) sportanalitika (1) SPSS (3) spss (13) spss clementine (3) spss hungary (5) spss modeler (6) ssd (1) starschema (2) startup (9) statisztika (1) survey (1) svm (1) szabad szoftver (1) szakmai (1) szavazó eljárások (2) szélenergia (1) szélerőmű (1) szervezetfejlesztés (1) szociális hálók (1) szoftver (5) szöveg (1) szövegbányászat (2) sztaki (2) tableau (1) talend (2) támogatás (1) tanulmány (1) tanulság (1) távolság (1) technológia (1) tedx (1) telekommunikáció (2) teradata (2) teszt (1) text mining (1) tmit (5) toborzás (1) tőzsdei előrejelzés (1) tracking (1) trendek (8) tudományos (1) tunedit (1) twitter (17) ügyfél (1) üzleti intelligencia (3) üzleti modell (3) üzleti reggeli (3) validáció (4) válogatás (1) válság (1) változás (1) vélemény (1) véleméy (1) verseny (20) vezetői képzés (1) videó (3) vizualizáció (5) web (4) web2 (2) webanalitika (3) webshop (1) weka (2) wikipedia (2) workshop (1) yahoo (2) Címkefelhő

TWitter a csapat tagjaitól

2015.04.15. 10:00 Ragány Csaba

Python - Kezdetek

Címkék: python best practice


Egy ideje már gondolkodtam azon, hogy Python-os bejegyzést is írjak, de egyrészt a DMLab-ban nálam jóval tapasztaltabb Python-os kollégák is vannak, másrészt a Python kezdeteihez tele a net ismertetőkkel, leírásokkal és tutorialokkal, ha pedig már a kódolás közben nem tudnánk valamit, elég nagy valószínűséggel korábban már megkérdezte valaki az adott dolgot Stackoverflow-n, vagy ha nem, a mi kérdésünkre is egészen biztosan nagyon hamar érkezik válasz. Harmadrészt viszont a több mint 54.000 Python modulnak köszönhetően a Python nyelv annyira sokrétű, hogy futószalagon lehetne gyártani a bejegyzéseket (amiket szerencsére bőven van aki olvas, köszönet érte :) A fentiek értelmében, és mert persze adatbányászattal foglalkozunk, Python-os témában is csak egy-két érdekességnek illetve hiánypótlónak gondolt írást tervezek, melyek közül az első értelem szerűen ez a kedvcsinálónak szánt bevezető poszt, ami azon adatelemzők számára lehet hasznos, akik még csak tervezgetik a Python-ban való elmélyülést vagy csak nemrég írták meg első szkriptjeiket. De persze azt sem tartom kizártnak, hogy a tapasztaltabbak is találhatnak némi újdonságot a következő sorokat olvasva.

codeeval2015.001.jpg

 

Nos, ahhoz hogy adatelemzőként illetve adatbányászként elinduljunk a data science terület irányába, talán a legjobb amit tehetünk, ha elkezdjük megtanulni a Python nyelv használatát, hiszen ez az eszköz az egyik legelterjedtebb olyan ingyenes lehetőség, amivel az adatok világában kis túlzással minden megoldható. A Python mellett szokták említeni a SAS-t és az R-t is, mint legáltalánosabb data science eszközöket, de előbbi magánszemélyeknek illetve kisebb cégeknek is gyakorlatilag elérhetetlen a brutális ára miatt, utóbbi azonban szintén egy jó választás lehet. A “Python vs. R” témakörben számtalan írás született már, melyek alapján én azt a következtetést látom, hogy pár éve még inkább az R volt a favorit az elemzői világban, mára azonban ez megfordulni látszik. Korábban a Python hiányosságai között szerepelt pl. a gyengébb grafikai megjelenítés (ábrák készítése) vagy a kisebb community, de az elmúlt 1-2 év ezeket is bőven felülírta. Előbbire példaként íme néhány Python csomag: már az alap matplotlib-bel is rengeteg féle, többszörösen összetett (osztott, több tengelyes, színezett, adatpont szinten címkézett, egymásba ágyazott stb.) ábra generálható, de 3D-s ábrák és animációk is készíthetők vele. A lehetőségeknek korlátot inkább csak a befogadói oldal szab. Ezen túl ott van pl. a seaborn, ami nagyszerű kibővített lehetőséget nyújt az extrémebb igényű adatelemzőknek is. Egyik kedvencem a tengelyekre rajzolt hisztogram, de a speciális violinplot is mennyivel többet mutat, mint egy átlag boxplot. Az sem rossz persze, hogy ezt a könyvtárat használva kb. egy kódsorral legenerálhatók bonyolultabb ábrák is, pl. egy, az adatpontokat attribútum-párok szerint megjelenítő grid, amit természetesen akár kézzel is lekódolhatunk sima matplotlib felett. Ha interaktív ábrákra van szükségünk, a bokeh és a plotly lesznek a barátaink (utóbbival pl. streaming adatok is megjeleníthetők stream-ként), de ha csak gyorsan és okosat szeretnénk az adathalmazunkról, akkor a legegyszerűbb a pandas beépített ‘plot()’ függvényét használni. Ezek a csomagok folyamatosan bővülnek, és ez csak 5 modul az adatok megjelenítésére, így nyugodtan mondhatjuk, hogy sok esetben ma már kevésbé aktuálisak az elmúlt évek Python és R összehasonlító írásai.

Akit esetleg bővebben érdekel a különböző adatmanipulációs eszközök és programnyelvek népszerűsége, a teljesség igénye nélkül az alábbi oldalakon sok hasznos információt talál: KDnuggets 2014 poll (lassan érkezik az idei felmérés), GitHub & Stackoverflow ranking, Most Popular Coding Languages 2015, illetve az évek óta bővülő r4stats popularity írás.


Python verziók

És akkor egy picit a Python-ról: ez a nyelv egy általános célú, magas szintű, interpreteres, in-memory szkript nyelv, és ami nagyon fontos, hogy könnyen tanulható és igen jól olvasható, ezért a kisebb programozói tudással rendelkezők is bátran belevághatnak a megismerésébe, ha pedig valakinek már régóta elege van a grafikus adatelemző szoftverek korlátaiból, akkor legfőbb ideje elkezdeni a tanulást. A fentiek többsége az R-ről kevésbé mondható el, aminek egyébiránt (“csak”) 5000 modulja van (ami szintén rengeteg!). A programozási paradigmákat illetően a Python támogatja a funkcionális, az objektumorientált, az imperatív és a procedurális metodikákat egyaránt, de mapreduce kódokat is írhatunk Python-ban.

A Python nyelvet 1989 végén kezdték el írni, ‘94-ben jelent meg az 1.0-ás verzió, 2000-ben a 2.0-ás, 2008-ban pedig a 3.0-ás. Jelenleg a 2.x és a 3.x két fő verziócsalád is aktív fejlesztés alatt áll, így ezek közül a választás amennyire triviális vagy lényegtelen, annyi “vitát” is szülhet. Pár éve még a 2-es verziók melletti igen erős érvek voltak a korábbi szkriptekkel való abszolút kompatibilitás, az összes modul elérhetősége és a tudományos világ “elkötelezettsége”, mára azonban a leggyakoribb választási tanácsként az “amelyik a célodhoz, aktuális projektedhez jobban illeszkedik” hangzik el, és több helyen is megemlítik, hogy összességében a két fő verzió közti “legnagyobb” különbség a “print” utasítás függvénnyé alakulása. Ehhez szintén viccesen csak annyit tennék hozzá, hogy a 3-as Python-ban az ‘1/3’ (1 osztva 3-mal) eredménye végre már nem ‘0’ (tiszta RapidMiner ;-). A hivatalos állásfoglalás szerint a “Python 2.x is legacy, Python 3.x is the present and future of the language”. A különbségekről egy részletesebb lista itt található. Saját részről mivel az egyik legjobb Python-os adatbányászati csomag, az sklearn is csak a 2.6-os illetve 3.3-as verzióktól támogatott, és előbbi már 2008-tól elérhető, míg utóbbi csak 2012-től (igaz, maga az sklearn is csak 2010-től), így én is a 2.x-es verziót kezdtem el használni. A két verzió szerencsére tökéletesen megfér egymás mellett (lásd lentebb), és mindkettő elérhető nagyjából az összes platformra.


Python telepítése

Ennyi bevezető legyen is elég, ideje telepíteni a gépünkre a Python-t. Választhatjuk a standard Python telepítőt, amivel kapunk egy parancssori értelmezőt, ami alatt egy Python shell fut. A standard könyvtár igen kiterjedt, számos beépített objektumot, függvényt, konstanst, kivételt, metódust (pl. sztring műveletekre), adattípust, matematikai modult, operációs rendszer szintű és multimédia szolgáltatást valamint webes eszközöket tartalmaz, így már önmagában ezzel is egész komoly feladatok oldhatók meg. Azonban adatelemzőként (és egyébként is) biztosan többre lesz szükségünk, így külső modulokat kell majd telepíteni. Vannak akik szeretik precízen tudni, hogy pontosan mi és hol van a számítógépükön, így ők biztosan külön, egyesével telepítik a számukra aktuálisan szükséges csomagokat. Szerintem viszont (általános célra) sokkal egyszerűbb valamely elterjedt Python disztribúciót használni, mint amilyen például az Anaconda. Projektekhez nyilván speciális, testre szabott Python környezeteket használunk. A magam részéről az Anacondával tökéletesen meg vagyok elégedve, így nem tudom más eszközökkel összehasonlítani (mert nem próbáltam mást). Ingyenes, a legtöbb data science Python modult tartalmazza (több, mint 270 csomagot foglal magába), illetve akadémiai licenccel elérhető hozzá néhány extra (GPU, memória és CPU boost) kiegészítés is. Célszerű (a telepítéskor) ezt a Python-t beállítani alapértelmezettként, így újabb modulok a szokásos módon is telepíthetők (Windows alatt pl. python setup.py install). Parancssorban a conda list utasítás kiadásával kilistázhatók a feltelepített csomagok. Windows-ra a ‘.whl’ (wheel - speciális ZIP formátum Python csomagok telepítésére) kiterjesztésű állományok az alábbi paranccsal tehetők fel: <Anaconda home>\Scripts\pip.exe install <abc>.whl. Ezen az oldalon számos olyan Python modul érhető el Windows-ra, amit hivatalosan csak Linux-ra publikáltak. Ilyen pl. a magyar fejlesztésű igraph, ami a legtöbb esetben egy-két nagyságrenddel hatékonyabb, mint a szintén gráfanalitikai networkx modul. De ha komolyabban akarunk foglalkozni hálózatelemzéssel, akkor a graph-tool csomagot célszerű használnunk (a nagyobb performancia, akárcsak az igraph esetén, a C-ben ill. C++-ban (nem pedig Python-ban) írt algoritmusoknak köszönhető). A fenti csomagok tehát nem részei az Anaconda repository-nak. Ha az alapértelmezett repository csatornákhoz újabbakat szeretnénk felvenni, akkor a felhasználó home könyvtárában létre kell hozni egy .condarc nevű fájlt, amibe be kell másolni az összes, régi és új csatorna URL-t. A conda install <csomag neve> paranccsal telepíthetők a repository-kból elérhető modulok. Egy (repository-ból) telepített csomag frissítése a conda update <csomag neve> paranccsal történik. Erre néha szükség lehet, mert a teljes Anaconda összeállításba (telepítőbe) nem kerülnek be azonnal az egyes Python csomagok legújabb verziói (pl. aktuálisan a pár hete megjelent pandas 0.16.0), de a repository-ba igen. Vagyis csupán az Anaconda frissítésével, azaz a conda update conda illetve  conda update anaconda utasításokkal nem feltétlenül kerülnek fel a gépünkre a legújabb Python csomagok. A fenti utasítások mindegyike nyugodtan kiadható teszt jelleggel is, mert mindig van egy megerősítő kérdés a telepítéshez illetve frissítéshez, ahol kilistázásra kerülnek az aktuális (lecserélendő) és új verziójú csomagok (a megadott Python modul és automatikusan a függőségei is).


Python használata

Ha egy projekt erejéig, vagy csak teszt jelleggel más Python környezetre van szükségünk, pl. 2.7.x helyett 3.4.x verziójú Python-ra, vagy csak egy új vagy speciális Python csomagot szeretnénk kipróbálni, esetleg különböző Python csomagok egymásra hatását vizsgáljuk, akkor létrehozhatunk az Anacondán belül Python környezeteket, amik az <Anaconda home>\envs\ könyvtárba kerülnek. Például egy teljes Anaconda Python 3.4-es környezet a conda create -n <Python környezet neve> python=3.4 anaconda paranccsal hozható létre, de ha lehagyjuk a végéről az “anaconda” paramétert, akkor csak a megadott (verziójú) modul illetve automatikusan annak függőségei kerülnek feltelepítésre az adott nevű környezetbe. Parancssorban Python környezetet az activate <Python környezet neve> utasítással aktiválhatunk, a deactivate utasítással pedig visszatérhetünk az alapértelmezetten telepített Anaconda Python környezetbe (a python -V utasítással ellenőrizhetjük az aktív Python interpreter verzióját). Ezek az utasítások (batch fájlok) az Anaconda telepítésekor automatikusan hozzáadódnak a PATH-hoz, de egyébként az <Anaconda home>\Scripts\ mappa alatt fizikailag is megtalálhatók.

Szkripteket Spyder-ben érdemes írni (az Anaconda automatikusan feltelepíti), ahol a bal oldali szerkesztőfelületen készíthető el egy-egy program, a jobb alsó IPython (Interaktív Python) konzolban pedig futtatható a kód. Célszerű lehet a létrehozott Python szkripteket egy online könyvtár alá gyűjteni (pl. Google Drive vagy Dropbox), így bármikor bárhonnan elérhetők lesznek, ahol van net. A futtatáshoz természetesen használhatjuk a normál Python konzolt is az IPython konzol helyett, de az utóbbi ajánlott a számos előnye és kényelmi funkciója miatt. Egyszerre több konzolt is megnyithatunk, amikor is mindegyikhez külön Python kernel rendelődik, azonban mindegyik ugyanazon Python környezethez tartozik. Windows alatt a Spyder-rel egy ‘pythonw.exe’ és ez alól annyi ‘python.exe’ alkalmazás indul el, ahány (Python és IPython) konzolt, vagyis kernelt futtatunk (tehát nem az ‘ipython.exe’ fut, annak ellenére, hogy IPython konzolt is használunk). Ha több Python környezetünk van, célszerű mindegyikhez másolni egy Spyder parancsikont (a Start Menüből) az eredetihez hasonlóan, ügyelve az elérési utak megfelelő aktualizálására (\envs\<Python környezet neve> hozzáadása). 2.x-es és 3.x-es Python kernelt használó Spyder-ből csak egy-egy futtatható egyszerre (egymás mellett), tehát pl. két eltérő 2.7.x-es Python környezethez tartozó kernel nem.

Célszerű lehet a Spyder template-et saját ízlésünk szerint kiegészíteni, így egy új szkript írásának kezdetén (Ctr+N) már nem kell minden alkalommal begépelnünk pl. a szokásos import numpy as np, import pandas as pd stb. sorokat. Minden újonnan megnyitott konzolban egyszer (elsőként) érdemes lefuttatni néhány pandas-os beállítást, melyekkel a dataframe-k (pandas “táblázatok”) megjelenítési paraméterei állíthatók be tetszés szerinti értékekre. A pandas (panel datas) Python-ban az adatelemzés alapmodulja, ahol az adattáblákat dataframe-ekben (kétdimenziós adat panelekben) tároljuk, amiken mindenféle adatmanipuláció, elemzés, modellezés stb. könnyen, gyorsan és nagyon hatékonyan elvégezhető. Az egydimenziós “dataframe” a Series objektum (egy adatsor), a kétdimenziós a DataFrame objektum (táblázat), a három dimenziós pedig a Panel (3D mátrix), de léteznek Panel4D és PanelND objektumok is. A pandas mélységeiről talán majd később, illetve addig is mindenki használja a netet.

A Spyder-ben a pd.set_option(‘display.width’,1000) és pd.set_option( ‘max_colwidth’,70) parancsokkal adható meg a dataframe illetve az oszlopok nagyobb szélessége, alapértelmezetten ugyanis a pandas 80 karakterenként tördeli a sorokat, ami eléggé olvashatatlanná tudja tenni a nagyobb adattáblákat (az alapértelmezett oszlopszélesség pedig 50 karakter). Ha a szkriptünket bemeneti argumentumokkal szeretnénk futtatni Spyder-ből, akkor az F5 billentyű (= aktuális szkript futtatása) előtt nyomjuk meg az F6 billentyűt (= futtatás beállításai), és adjuk meg a kívánt parancssori argumentumokat. Ha a programunknak csak a szerkesztőben kijelölt egy részletét szeretnénk futtatni, akkor az F9-et nyomjuk meg a megfelelő kijelölés után. Ha futtattunk egy szkriptet (és még nem zártuk be a kernelt), akkor a futás utolsó pillanatában meglévő minden adat továbbra is elérhető a memóriából, vagyis a konzolban nyugodtan beírhatjuk pl. hogy print my_var, és ha volt ilyen nevű változónk (és a kódban nem töröltük azt), akkor megjelenik az értéke. Tehát nem szükséges a kódba utólag beírni ezt az utasítást és újrafuttatni a teljes szkriptet csak azért, mert futás közben elfelejtettük kiprintelni valamely változó végső értékét.


IPython Notebook

A fentebb említett IPython konzolnak illetve kernelnek az interaktivitása, "varázslata", rugalmassága, "klaszterezhetősége", beágyazhatósága stb. mellett a legnagyobb gyakorlati haszna, hogy általa futtathatók IPython Notebook szerverek (az Anacondának köszönhetően mindezt egy kattintással és természetesen a saját desktop gépünkön). Az IPython nem összetévesztendő a Python-nal: előbbi csupán a Python környezet egy modulja. Egy IPython Notebook szerver egy interaktív webes Python fejlesztőeszközt nyújt, ahol egy-egy cellába egy összetartozó kódblokk írható, majd a létrehozott teljes Notebook szkript cellánként futtatható. Kiválóan alkalmas tanulásra, oktatásra (rengeteg tutorial ebben készült) illetve prezentációra is. Indításakor Windows-on az ‘ipython.exe’ alkalmazás indul el, ami futtat egy “központi vezérlő” Python kernelt (‘python.exe’ állományt) illetve ez alól további annyi kernelt (szintén ‘python.exe’ fájlt), ahány Notebook szkriptet megnyitottunk a kedvenc böngészőnkben. IPython Notebook futtatókörnyezetből már annyit megnyithatunk egymás mellett, ahány Python környezetünk van, függetlenül azok fő- vagy alverzióitól. Pár napja jelent meg az IPython 3.1 verzió, ami a februári kiadású 3.0 verzióval egyetemben jó pár alapvető dologban eltér a korábbi IPython 2.x verzióktól, így adott esetben szükségünk lehet olyan Python környezetre, ami például Python 2.7.x alapon nyújt IPython 2.x felületet, illetve egy másik szintén Python 2.7.x környezetre, de már IPython 3.x csomaggal. Ugyanez igaz lehet a Python 3.x-re is. IPython 3.x alatt (egy fél-automatikus konverziót követően) futtathatók ugyan a korábbi IPython 2.x Notebook fájlok, de fordítva sajnos ez nem igaz. Az egyes IPython Notebook környezeteknek is célszerű lehet külön-külön, egyértelmű elnevezéssel (Python ill. IPython verziókkal) ellátott parancsikonokat létrehozni. Ha esetleg az újabb verziójú Anaconda telepítésével nem kerülne be egy alap IPython Notebook parancsikon a Start Menübe, akkor az általunk kreáltnak az alábbi ‘Cél’-t kell tartalmaznia:  <Anaconda home>\Scripts\ipython.exe “<Anaconda home>\Scripts\ipython-script.py” notebook. Fontos, hogy az ‘Indítás helyé”-nek olyan (szintén online) mappát adjunk meg, ahol tárolni szeretnénk a Notebook szkriptjeinket, így a szerver indítását követően automatikusan megnyíló kezdőoldal azonnal kilistázza azokat. A kernelekre picit még visszatérve: ki nem találnánk, így leírom, hogy önmagában egy darab IPython Notebook szerveren különböző Python kernelek (környezetek) felett is futtathatók a szkriptjeink, egy kattintással. Ha ez nem volna elég, durvulhatunk is :)

Ja igen, akit zavar az IPython Notebook weblap kinézete, használhat teljesen egyedi CSS-t a megjelenítéshez. Én azt szoktam beállítani, hogy a cellák balra igazítva jelenjenek meg, ne pedig középen, illetve hogy a szélességük jó nagy legyen, hogy “elférjenek benne” az adattáblák. Ehhez az alábbi tartalmú CSS fájlra lesz szükségünk (a lenti my_style.css fájlt tegyük pl. a fenti “Indítás helye” mappába):

<style>
.container {width:100% !important;}
div.cell{
    width:1700px;
    margin-left:1px;
    margin-right:1px;
}
</style>

Ezt az alábbi kóddal tölthetjük be az aktuális IPython Notebook szkriptünkbe:

from IPython.core.display import HTML
def css_styling():
    styles=open(“./my_style.css”,”r”).read()
    return HTML(styles)
css_styling()

A fenti cellát futtatni a Ctr+Enter billentyűk lenyomásával a legegyszerűbb. A széles dataframe-ekhez természetesen a fentebb írt pandas-os beállításokat is le kell futtatni egyszer kernelenként (megnyitott Notebook szkriptenként).

Nos, a poszt végére, ha a cikk közbeni linkek nem lettek volna elegendők, már csak néhány IPython Notebook illetve Pandas tutorialt tennék be, szintén a teljesség igénye nélkül:

 

 Jó szórakozást!

 A kép forrása.

6 komment

A bejegyzés trackback címe:

http://adatbanyaszat.blog.hu/api/trackback/id/tr957366034

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

pythonozok · http://visszabeszelo.blog.hu 2015.04.15. 10:23:27

Izé... SAS vs Python... azért remélem érzed, hogy a kettő messze nem egy kategória. A SAS céleszköz, a Python meg egy általános célú programnyelv, aminek van pár, e célra kifejlesztett modulja.
Régi emlékek alapján még azt is megkockáztatom, hogy a python "picivel" lassúbb, mint a SAS. (Utóbbit csak IA64 vason, HPUX-on futtatva láttam)
Egyébként adatbányászathoz nem lassú a python? Jó, a szkript nyelvek között a leggyorsabbak közé tartozik, de...

Ragány Csaba 2015.04.15. 16:29:51

@pythonozok:
Szia!
Köszi a kiegészítést :)
Performancia összehasonlításról én is szívesen olvasnék, nagy kérdés persze, hogy milyen műveleteket/feladatokat, milyen Python csomaggal, milyen hardver felett (pl. milyen GPU-n), na és persze milyen ügyesen megírt kóddal :)

pythonozok · http://visszabeszelo.blog.hu 2015.04.15. 16:37:44

@Ragány Csaba: ezekben sajnos nem tudok segíteni. Hét éve hagytam el a pályát, SAS-t egyébként is csak üzemeltetőként láttam.

pythonozok · http://visszabeszelo.blog.hu 2015.05.30. 02:30:38

Kissé offtopic, de hátha jár még erre valaki: létezik olyan ingyenes, linuxon is elérhető nyelv/szoftver, amivel könnyen lehet többé-kevésbé kötetlen formátumú szöveget elemezni?
Évek óta foglalkoztat, hogy mivel lehetne egyszerűen és gyorsan kiválogatni a fontosabb információkat bizonyos logokból.
Tudom, hogy vannak célszoftverek, de szerettem volna írni egy sajátot. Pythonban gyártottam is pár kezdeményt (pl. milyen IP címekről próbálkoztak port scannel, honnan jött a legtöbb eldobott csomag és hasonlók), de érdekelne, hogy ha nem egy rendszergarázda szemszögéből nézzük a feladatot, akkor mivel érdemes nekiesni.
(Pusztán elméleti szinten, merő kíváncsiságból kérdezem)

Ragány Csaba 2015.05.30. 11:51:09

@pythonozok:
Szia!
Egy konkrét feladat bonyolultságától függően az alábbi eszközök lehetnek hasznosak: grep, sed, awk. Utóbbival kb. mindent lehet, ami szövegelemzés. Ha a szövegelemzésen túl más is szóba jöhet, akkor a python, perl vagy akár (f)lex-yacc C kódot is lehet írni, ezekkel is kb. mindent lehet. Tehát funkcionalitásban (szövegelemzés szempontjából) az awk, python és perl kb. azonosak, de egy lexer kódban is olyan C függvényt hívhatunk meg, amilyet csak akarunk/írunk. Ha választani kellene, sima szövegelemzés feladatra awk, ha viszont a kinyert eredménnyel még vannak további teendők, akkor Python.

pythonozok · http://visszabeszelo.blog.hu 2015.05.30. 12:18:31

@Ragány Csaba: awk? Fura, eszembe nem jutott volna. Bennem az awk úgy él, mint átmenet a grep és a perl között. :)
(lásd még a2p utility! ;) )
Apróbb dolgokra szívesen használtam (perlt sohasem tudtam igazán megszokni), de ilyen feladatra, hogy logok elemzése... pedig végső soron nem kell sokkal többet tudnia a használt eszköznek.
Talán egy dolog miatt nem lett volna jó: eredetileg egy olyan programot képzeltem el, ami elé tetszőleges UI-t rakhatok. Akár Qt, akár web, akár text...
Más kérdés, hogy amilyen alaposan elszaladt a fantáziám... ahhoz már mesterséges intelligencia kellene :))