Az elnevezés hatása az adattudományi kódban

Annak ellenére, hogy vannak olyan eszközök, amelyek lehetővé teszik az adattudomány kódolás nélküli gyakorlását, ezek messze nem elegendőek. Az adattudósok kódot írnak és olvasnak majd. A rosszul olvasható kód olvasása szörnyű élmény. Ez a bejegyzés az entitások (például változók, függvények) elnevezésének fontosságára összpontosít, és arra, hogy ez milyen könnyen javítja a kód minőségét.

"Lesz kód"

„… Arra is számítok, hogy a domain-specifikus nyelvek száma tovább fog növekedni. Ez jó dolog lesz. De ez nem fogja megszüntetni a kódot."

„Robert C. Martin” írta a „Clean Code: A Handbook of Agile Software Craftsmanship” című könyvének első oldalán, az első fejezetben „lesz kód”. Mi, adattudósok kódot írunk és olvasunk. Annak ellenére, hogy vannak segítő eszközök, továbbra is írunk és olvasunk kódot. Ez az egyik alapvető gyakorlatunk. Így elemezzük az adatokat, modellezzük, előrejelezzük az eredményeket és még sok mást. Meggyőződésem, hogy egy adattudós számára nincs menekvés a kód alól.

Az adattudományt valamilyen szinten kódolás nélkül is gyakorolhatjuk. A kezdetektől napjainkig léteztek grafikus eszközök, amelyek lehetővé tették az adatok elemzését vagy a gépi tanulás gyakorlását. Az ilyen eszközök egyik példája a "WEKA". A WEKA grafikus felhasználói felülettel rendelkező gépi tanulási eszközök csomagja. A Wikipédia szerint fejlesztése 1993-ban kezdődött*. Lehetővé teszi a felhasználók számára, hogy gépi tanulási kísérleteket és még sok mást végezzenek anélkül, hogy egyetlen kódsort is írnának. Akkor miért ragaszkodom ahhoz, hogy a kód írása és olvasása alapvető fontosságú az adattudósok számára? Mert lesznek egyedi műveletek.

A grafikus eszközöknek csak ennyi műveletük van. Ha nem ugyanazokat a feladatokat végzi el minden nap, akkor eljön az idő, amikor az eszközök nem rendelkeznek a szükséges műveletekkel. Ez lehet egy elemzés, egy gépi tanulási modell vagy más művelet. Valamilyen szinten ellenőrzésre, testreszabásra és bővítésre van szüksége a műveletek felett. A szint a feladattól, a könyvtáraktól vagy az eszközöktől függ. Mivel sok probléma új vagy egyedi megközelítést igényel, hamarosan túlnőni fogja ezeket a grafikus eszközöket.

Ritkán dolgozunk egyedül. A szervezeteknek gyakran nincs egyetlen adattudósa, hanem adattudományi csoportjaik. Még ha nem is ez a helyzet, az adattudósok más tudományágakkal dolgoznak. Ehhez az együttműködéshez jó adattudományi kódminőség szükséges.

Sőt, ha Ön egy cégnél dolgozik, más csapatokból származó kollégáinak szüksége lesz a kódjára. Ahhoz, hogy modelljeit háttérrendszerbe, előtérbe vagy más rendszerbe ágyazza be, kódra lesz szüksége. Egy olyan modell, amelyet nem lehet telepíteni vagy integrálni, haszontalan lenne a vállalat számára.

Ha egyetért azzal, hogy lesz kód az adattudományban, beszéljünk arról, hogyan írjunk jó kódot az adattudomány számára. Jó kódot írni nehéz feladat. Vannak jól megírt szövegek, amelyek elmagyarázzák, miért van szükség erre, és hogyan lehet elérni. Ebben a bejegyzésben az a célom, hogy ennek egy picire koncentráljak. Az a bit, amely nem igényel képzést vagy oktatást, de jelentősen javítja a kód minőségét. Az a rész, amelyre összpontosítok, az elnevezésre vonatkozik, és ez javítja a "kód olvashatóságát".

Egy egyszerű trükk: átnevezés

Szörnyű élmény olyan kódrészletet olvasni, amelyik rosszul olvasható. Nézzük meg ezt az egyszerű példát az alábbiakban:

import pandas as pd
df = pd.DataFrame({"f1": [42, 12, 5, 8, 15, 65], 
                   "f2": [172, 155, 110, 120, 158, 168]})
df2 = df[df.f1 >= 18]
out = df2.f2.mean()
# out: 170.0

Próbáld kitalálni, mit csinál ez a kód. Ennek a kódnak a szerzője ismerte az egyes sorok célját és az egész kód célját, miközben azt írta. Olvasóként azonban egy kódrészletet lát, amelyet meg kell fejteni. Mivel a szerző nem fordított figyelmet az olvashatóságra, több időt és energiát fog fordítani a kód megértésére. Ezenkívül hajlamosabb lesz a hibákra. Nézzük meg ezt a példát, hogy meglássuk, miért rossz:

  • import pandas as pdTudom, hogy a pandák pd-ként történő importálása manapság nagyon általános. Minden adattudós, aki pandákkal dolgozik, megérti ezt a rövidítést. Nem ez a legnagyobb probléma a kódban, de úgy gondolom, hogy ez javítható. Ráadásul a rövid (pl. 2 karakteres) változónevek zavaróak az automatikus kiegészítésben (pl. pd vs pdb).
  • df = ... Ismét valószínűleg a panda oktatóanyagok miatt, széles körben alkalmazott gyakorlat a DataFrame df elnevezése. Azonban elrejti, hogy ebben a kontextusban milyen adatokról van szó. Milyen adatról van szó?
  • "f1":... "f2":... Ezek az adatkeretünk oszlopai. Ez azonban nem tájékoztató jellegű. Milyen adatok vannak ezekben az oszlopokban? Miért szerepelnek 1-ként és 2-ként? Van-e célja a felsorolásnak (pl. valaminek az első és második), vagy nincs?
  • df[df.f1 >= 18] Mit jelent ebben a sorban a 18? Ez valami mágikus szám? Miért szűrünk nagyobb vagy egyenlő 18-nál, és miért szűrünk az f1 oszlopra?
  • out = df2.f2.mean() Mindenhol ugyanaz a probléma. Mi a jelentősége az f2 oszlopnak? Miért vesszük az értelmet?

Most pedig hadd írjam át olvashatóbb módon, ahelyett, hogy elmagyaráznám a célját. Csak átnevezem a változókat, és a kód többi részét megtartom.

import pandas
physical_data = \
        pandas.DataFrame({"age": [42, 12, 5, 8, 15, 65], 
                          "height": [172, 155, 110, 120, 158, 168]})
adult_physical_data = physical_data[physical_data.age >= 18]
mean_height_of_adults = adult_physical_data.height.mean()
# mean_height_of_adults: 170.0

Az átnevezéssel csak egy pillantással értheti meg a kódrészlet célját és az egyes sorok műveletét. Úgy gondolom, hogy a kód magyarázata most nem szükséges, mivel nagyon világos.

adatok = …, de melyik adat?

Úgy gondolom, hogy az adattudományi kódban az elnevezés nehezebb lehet, mint egy általános szoftverkódban. Kevesebb olyan koncepciónk van, amely illeszkedik az objektumtervezésbe, elvontabb entitások és változatos gyűjtemények. Ez megnehezíti a névadást az adattudományban. Példaként gondoljon arra, hogy sok oszlopot tartalmazó táblázattal dolgozhat. Például egy táblázat, amely oszlopokat tartalmaz az ügyfélről mint személyről (pl. név, életkor), a vásárlói viselkedésről (pl. vásárlások), földrajzi információkról (pl. a vásárlás címe) és időbeli információkról (pl. a vásárlás időpontjáról). Hogyan nevezné el ezt a táblázatot?

Különböző neveket találhat ki ennek a táblázatnak, de vannak gyakori rosszak. Például ne nevezze el dt vagy df. Annak ellenére, hogy a df minden helyen megjelenik a pandák dokumentációjában, meg kell értenie, hogy ezek rövid példakódok, amelyek nem tartoznak egy projekthez. Ne nevezze el data . Igen, ez adat, de megnevezne egy olyan változót, amely tartalmazza az életkort „egész szám”? Az „adat” név nagyon homályos. Melyik adat ez? Milyen információkat tartalmaz?

Ne féljen hosszú neveket használni. A hosszabb nevek általában több információt tartalmaznak az entitásról. A hosszabb nevek nem teher. Sok tisztességes IDE van automatikus kiegészítéssel, mint például a "PyCharm", így nem kell a teljes nevet írnod.

Kódoláskor gondoljon a következő személyre, aki elolvassa a kódot. Meg fogja érteni a forgatókönyv fő célját, és azt, hogy az egyes sorok hogyan szolgálják ezt a célt? Konkrétabban az elnevezéssel kapcsolatban: gyorsan megragadja az entitás jelentését pusztán a névvel?

Nincs mentség a rossz kódra

A jobb nevek használata nem csak a csapattársaidnak vagy csak magadnak szól. Mind a csapattársaid, mind önmagad profitálnak ebből a szokásból. Csapattársa szemszögéből ő könnyebben és gyorsabban fogja elolvasni az Ön által írt kódot. Személyes szemszögéből nézve könnyebben fogja megírni a kódot, mivel kevésbé lesz képes megjegyezni entitásai jelentését. Ennek eredményeképpen a csapata és a szervezete profitálni fog ebből a szokásból.

A jobb névadás szokását nehéznek tűnik először kialakítani. Lehet, hogy nem szeretné jobb nevek keresésére fordítani az idejét. Ez azonban egy olyan szokás, amely megtérül. Akkor is gyakorolnia kell, ha az Ön által írt kód prototípus, vagy egy apró projekt része. Anélkül, hogy tudnánk, egy ilyen kód egy nagyobb projektté válhat. Sok olyan eset van, amikor a projektek nagyon kicsik voltak, de a fejlesztés évekig tartott; A „tűz és felejts” elnevezésű projektek nagyon fontosak lettek a szervezet számára. Ez az oka annak, hogy még a legrövidebb kódnak is jó elnevezéssel kell rendelkeznie.

Ha soha nem gondolt jobb elnevezésre, remélem, miután elolvasta ezt, megpróbálja jobban elnevezni entitásait, és meglátja, hogyan javítja a kódja minőségét.