A pandák a kategorikus értékeket int értékekké konvertálják

A Pandak A Kategorikus Ertekeket Int Ertekekke Konvertaljak



A gépi tanulás végrehajtásához szükséges adatkészletek numerikus és kategorikus változókat is tartalmaznak. A kategorikus változók olyan karakterlánc típusú adatok, amelyeket az emberek könnyen megértenek. A gépek viszont nem képesek közvetlenül megérteni a kategorikus bemeneteket. Következésképpen a kategorikus tartalmat olyan számértékekké kell alakítani, amelyeket a gépek értelmezni tudnak.

Módszerek a kategorikusból Int

A „pandákban” elérhető technikák a DataFrame kategorikus értékeinek int értékké konvertálására itt találhatók:

    • DataFrame.replace() metódus
    • DataFrame.apply(factorize()) metódus

Ebben a cikkben ezeket a módszereket fogjuk használni, és részletesen elmagyarázzuk, hogyan használhatjuk mindkét módszert „pandákban”.







1. példa: A Pandas Replace() metódus használata

A DataFrame-ben lévő kategorikus értékek a pandák „DataFrame.replace()” metódusával int-re konvertálhatók. Itt tanuljuk meg ennek a módszernek a használatát.



A „Spyder” eszközt használtuk a technika optimális végrehajtásához Pythonban. A szkript írásának megkezdéséhez nyisson meg egy új Python-fájlt a „Spyder” eszközben. A szkript megírásának legjelentősebb követelménye a megfelelő könyvtárak importálása. Mivel egy „pandák” módszert kell megvalósítanunk, a „pandák importálása pd-ként” lesz a „pandák” funkcióinak eléréséhez. Ezután elindítjuk az alapvető Python kódunkat. Létrehoztunk egy DataFrame-et a „pd.DataFrame()” metódussal. A DataFrame-et három oszlop „Név”, „Fokozat” és „Jövedelem” inicializálja. A DataFrame összes oszlopa azonos hosszúságú értékeket tárol.



Az első oszlop, a „Név” nyolc értéket tartalmaz, amelyek a következők: „bush”, „albert”, „harry”, „peter”, „emma”, „newton”, „smith” és „elsa”. A második oszlop, a „Fokozat” szintén nyolc kategorikus értéket tárol, amelyek a következők: „BS”, „MS”, „MS”, „BS”, „BS”, „BS”, „MS” és „MS”. Az utolsó „Jövedelem” oszlop nyolc egész számot tartalmaz: „60000”, „80000”, „75000”, „45000”, „56000”, „65000”, „55000” és „70000”. Létrehoztunk egy „staff” DataFrame objektumot, amely tárolja a „pd.DataFrame()” függvény meghívásának kimenetét. A kezdeti DataFrame megjelenítéséhez a „print()” metódust használtuk, és a DataFrame neve „staff” volt a paramétere a szkript utolsó sorában.






A terminál kimenetének megtekintéséhez használja a „Fájl futtatása” gombot a „Spyder” eszközön, vagy nyomja meg a „Shift+Enter” billentyűket. A terminálon megjelenített kimenet egy DataFrame-et mutat három oszloppal, amelyek sikeresen generálásra kerültek.


Most elkészült a DataFrame-ünk, amelyre a szükséges technikát kell alkalmazni. A pandák „DataFrame.replace()” metódusa egy adott oszlop kategorikus értékeit egész számokká konvertálja, hogy a gépek olvashatóvá tegyék azokat.



A DataFrame nevét megadtuk annak az oszlopnak a nevével, amelynek értékeit le kell cserélnünk, ez a „staff[’degree’]”. Azt akarjuk, hogy a „Fok” oszlop értékeit, amelyek kategorikus értékeket tartalmaznak, egész értékekkel helyettesítsük. Ezután a „.replace()” metódus kerül meghívásra. Két készletbe adtuk át; az első a „['BS', 'MS']” két kategorikus értéket tartalmazza, amelyeket a „Fokozat” oszlopból vettünk ki. Mint látható, a „Fokozat” oszlop ezt a két értéket ismételten használja. Ha volt egy harmadik értékünk, azt is meg kell említenünk. A második halmaznak két int értéke van „[0, 1]”, amelyek rendre felváltják az első beállított értékeket. A másik paraméter, az „inplace” értéke „True”, lehetővé téve az értékek cseréjét. Ha „False”-ra van állítva, akkor letiltja a cserét. Végül a „print()” metódust használtuk a frissített „staff” DataFrame megjelenítésére.


Az eredményül kapott DataFrame egész számokat tartalmaz a „Degree” oszlopban. A „BS” érték helyébe „0s”, az „MS” pedig „1s” lép.


Még az egyes oszlopok adattípusát is ellenőrizheti a „dataframe.dtype” tulajdonság használatával. Ezzel megkapjuk a megadott DataFrame összes oszlopának adattípusát.


Itt megkaptuk a DataFrame adattípusait. Láthatjuk, hogy a „Fok” oszlop adattípusa „int64”-re módosult.

2. példa: A Pandas apply() metódus használata

A másik módszer, amelyet a pandák biztosítottak számunkra, a „DataFrame.apply()” függvény, amellyel kategorikus értékeket egész számokká alakíthatunk. Az előző példában megtanultunk egy kategorikus oszlopot egész számmá alakítani. Most látni fogjuk, hogyan alakíthatjuk át a DataFrame összes kategorikus oszlopát int.

A gyakorlati megvalósítástól kezdve importálnunk kell ennek a módszernek a nélkülözhetetlen könyvtárát, a pandákat. Az „import pandas as pd” szkriptet használtuk a pandák importálására a Python fájlunkba a „Spyder” eszközben, amely lehetővé teszi a panda modulok elérését a „pd” használatával. A „pd.DataFrame()” függvényt használtuk egy DataFrame létrehozásához.

Ez a DataFrame négy oszlopból áll: „csoport”, „pozíció”, „pontszámok” és „segítések”. Minden oszlop 9 értéket tárol. A „csoport” oszlop értékei: „X”, „X”, „Y”, „X”, „Y”, „Y”, „Y”, „X” és „Y”. A „pozíció” oszlop 9 értékkel rendelkezik, amelyek a következők: „A”, „C”, „D”, „A”, „C”, „B”, „B”, „D” és „B”. A „pontszámok” oszlop egész számokat tartalmaz: „4”, „8”, „7”, „10”, „9”, „5”, „7”, „3” és „23”. Az utolsó, „segítők” oszlop értéke „10”, „2”, „3”, „9”, „3”, „7”, „4”, „2” és „9”.

Létrehoztunk egy „prog” DataFrame objektumot, és hozzárendeltük a „pd.DataFrame()” metódus meghívásának kimenetét. Tehát a „pd.DataFrame()”-ből generált DataFrame-keret a „prog”-ban lesz tárolva. Most ennek az objektumnak a használatával érhetjük el a DataFrame-et. Ennek a DataFrame-nek a megtekintéséhez a „print()” metódust alkalmaztuk a „prog” DataFrame objektum paraméterével.


Az előző Python program végrehajtásakor egy négy oszlopból álló DataFrame jelenik meg a terminálon.


Több kategorikus oszlop egész számokká alakításához ezt a technikát követtük. Először ki kell jelölnünk az összes olyan oszlopot, amely objektum adattípust tartalmaz a pandák „DataFrame.select_dtypes().columns” metódusával. Amikor szükség szerint használjuk a szkriptünkben, akkor ez „prog.select_dtypes([‘objektum’]).columns” lesz. Kijelöli az összes „object” adattípusú oszlopot a „prog” DataFrame-ben. Létrehoztunk egy „concate_col” változót a metódus kimenetének tárolására. Mostantól az „object” adattípus oszlopokat egyszerűen a „concat_col” változó használatával érhetjük el.

Most, hogy ezeket az oszlopokat egész számokká alakítsuk, a „DataFrame.apply()” pandákat használtuk a „pd.factorize()” metódussal. A DataFrame névvel a „concat_col” változót használtuk, majd az „.apply()” metódus kerül meghívásra. Az „.apply” metódus zárójelében a „pd.factorize()” metódus szerepel, ahol az „x” tetszőleges érték lehet a „prog” DataFrame-ből „object” adattípussal. Így ez az egész kódsor a következőképpen van írva: „prog['concat_col'] = prog['concat_col'].apply(lambda x : pd.factorize(x)[0])”. A faktorizálási metódus értéke egy „objektum” adattípust, és konvertálja „int”-vé. A végső kimenet a “print()” függvény meghívásával jeleníthető meg, a “prog” változó paraméterként való átadásával.


A frissített DataFrame-ben megfigyelhetjük, hogy a „csoport” és a „pozíció” oszlop értéke kezdetben kategorikus, azaz objektum volt. Még mindig a frissített kimeneti DataFrame-ben mindkét oszlop egész számmal rendelkezik. A „csoport” oszlopban az „X” helyett „0”, az „Y” helyett „1” lép. Míg a „pozíció” oszlop „A” helyett „0”, „C” „1”, „D” „2” és „B” helyett „3”.


Most ellenőrizzük a frissített adattípusokat.


Az összes következő oszlop „int64” adattípussal rendelkezik.

Következtetés

Útmutatónk a kategorikus értékek számértékekké alakításáról szól, hogy azokat a gépek érthetővé tegyék, mivel az objektum adattípusát nem tudják feldolgozni. Bemutattuk Önnek a „pandas” könyvtár által kínált két megközelítést a szükséges adattípusok beszerzéséhez. Ezenkívül a „Spyder” eszközön futtatott példakódok gyakorlati megvalósításával megosztottuk az egyes példák eredményét. Végül minden lépést részletesen kidolgoztunk a kívánt eredmény elérése érdekében.