SAMSUNG_022024B Advertisement SAMSUNG_022024B Advertisement SAMSUNG_022024B Advertisement

Strojové učenie v Pythone 4 – práca s údajmi

0

predchádzajúcej časti sme ukázali import a export údajov vo formáte CSV, čiže hodnoty oddelené čiarkou. V tejto kapitole ukážeme ako zistíte informácie o tabuľkách v objektoch DataFrame, zostavíme podmienky pre výber údajov. Ukážeme možnosti utriedenia a tiež vizualizáciu údajov pomocou grafov

Postup vytvorenia príkladov je v krátkom videu

Budeme pracovať jednak s jednoduchou tabuľkou (objektom DataFrame), ktorú sme použili aj v predchádzajúcej časti Kód na vytvorenie:

import numpy as np
import pandas as pd
 
data_ludia = {'Ev_cislo':[132,133,134,135,136],
      'Priezvisko': ['Kukučka','Zalabak','Novák','Dvorak','Abel'],\
      'Vek':[32,37,37,26,51],
      'mzda':[1200,860,1600,1100,1350] }
df_ludia = pd.DataFrame(data_ludia)
print (df_ludia)  
 
Ev_cislo Priezvisko  Vek  mzda
0       132    Kukučka   32  1200
1       133    Zalabak   37   860
2       134      Novák   37  1600
3       135     Dvorak   26  1100
4       136       Abel   51  1350

A taktiež s tabuľkou, ktorá bude obsahovať viac záznamov, konkrétne 25 a 8 atribútov. Pre jednoduchosť ju naplníme pomocou generátora náhodných čísel

df_data = pd.DataFrame(np.random.randint(0,100,size=(25, 8)), columns=list('ABCDEFGH'))

Informácie o tabuľke, čiže objekte DataFrame zistíte pomocou príkazu .info()

print(df_ludia.info())
 
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
 #   Column      Non-Null Count  Dtype
---  ------      --------------  -----
 0   Ev_cislo    5 non-null      int64
 1   Priezvisko  5 non-null      object
 2   Vek         5 non-null      int64
 3   mzda        5 non-null      int64
dtypes: int64(3), object(1)
memory usage: 288.0+ bytes
None

Zoznam atribútov zistíte z atribútu columns.

df_ludia.columns
Index(['Ev_cislo', 'Priezvisko', 'Vek', 'mzda'], dtype='object')

Základné štatistické parametre pre číselné atribúty zistíte pomocou príkazu describe(). Takto zistíte počet záznamov, aritmetický štandardnú odchýlku, minimum, maximum a percentily. Napríklad 25 % percentil označuje hodnotu pre ktorú platí, že 25 % hodnôt je menších a 75 % hodnôt je väčších než je táto hodnota.

df_ludia.describe()

Môžete zadať aj konkrétne hodnoty percentilov napríklad 30, 50 a 70 percent

df_ludia.describe(percentiles=[0.3, 0.5, 0.7])

Pomocou príkazu head(n) vypíšete n záznamov od začiatku a príkazu tail(n) n záznamov od konca.

print(df_data.head(3))

Môžete vybrať len konkrétne atribúty prípadne v kombinácii s príkazom head(), alebo tail()

df_ludia.head(3)[['Priezvisko', 'Vek']]

Samozrejme môžete vybrať len údaje, ktoré vyhovujú určitej podmienke, napríklad

print(df_ludia.loc[df_ludia['Vek'] > 36, ['Priezvisko', 'Vek', 'mzda']]) Priezvisko 
  Priezvisko  Vek  mzda
1    Zalabak   37   860
2      Novák   37  1600
4       Abel   51  1350

Môžete taktiež zmeniť údaje pre atribúrty vyhovujúce podmienke. Napríklad každému pracovníkovi nad 36 rokov pridať k mzde 100 €

df_ludia.loc[df_ludia['Vek'] > 36, ['mzda']] = df_ludia['mzda']+100
print(df_ludia)
 
Ev_cislo Priezvisko  Vek  mzda
0       132    Kukučka   32  1200
1       133    Zalabak   37   960
2       134      Novák   37  1700
3       135     Dvorak   26  1100
4       136       Abel   51  1450

Podmienky môžeme kombinovať. Napríklad nás zaujímajú ľudia pod 35 rokov  s mzdou nad 1100 €

df_ludia.loc[(df_ludia['Vek']<35) & (df_ludia['mzda']>1100)]

Ukážeme aj podmienku na výskyt reťazca znakov. V našom prípade vypíšeme priezviská, ktoré obsahujú reťazec 'ak'

df_ludia.loc[(df_ludia['Priezvisko'].str.contains('ak')]

Údaje môžete zoskupiť podľa nejakého kritériá a na takto zoskupené údaje aplikovať vhodnú funkciu. V našom prípade zoskupíme údaje podľa veku. Nakoľko máme v tabuľke dvoch ľudí s vekomn 37 rokov, zistíme priemer ich miezd.

df_ludia.groupby('Vek').mean()

Ukážeme aj názornú vizualizáciu pomocou grafov. Implicitne je na osi X index

df_ludia[['mzda']].plot.bar()

V našom prípade by sme potrebovali mať na osi X priezvisko. Jedným z riešení je vytvoriť nový DataFrame s takýmto indexom

df2 = df_ludia.set_index(df_ludia['Priezvisko'])
df2[['mzda']].plot(kind="bar")

Údaje v tabuľke môžeme utriediť podľa rôznych kritérií, napríklad pomocou indexov. Nakoľko indexy máme usporiadané vo vzostupnom poradí, parameter ascending=False špecifikuje, že chceme opačné poradie, čiže od najväčšej po najmenšiu hodnotu. Parameter axis=0 utriedi údaje podľa indexov riadkov.

df_data.sort_index(axis=0, ascending=False)

Parameter axis=1 utriedi údaje podľa indexov stĺpcov.

df_data.sort_index(axis=1, ascending=False)

Viac nás bude zaujímať triedenie podľa stĺpcov. Vytvoríme novú tabuľku (DataFrame) utriedenú podľa priezvisk

df_priezvisko = df_ludia.sort_values('Priezvisko')

Kód pre utriedenie v zostupnom poradí

df_priezvisko = df_ludia.sort_values('Priezvisko', ascending=False) print(df_priezvisko)
 
   Ev_cislo Priezvisko  Vek  mzda
1       133    Zalabak   37   960
2       134      Novák   37  1700
0       132    Kukučka   32  1200
3       135     Dvorak   26  1100
4       136       Abel   51  1450

Údaje môžeme utriediť aj podľa viacerých stĺpcov. V tomto prípade napríklad podľa veku a ľudí rovnakého veku podľa mzdy

df_vek = df_ludia.sort_values(['Vek', 'mzda'])

Aj v tomto prípade môžeme definovať poradie od najmenšej, alebo od najväčšej hodnoty

df_vek = df_ludia.sort_values(['Vek', 'mzda'], ascending=[True, False])

V doterajších príkladoch sme vytvorili nový DataFrame s utriedenými údajmi. Ak chceme utriediť údaj v pôvodnom DataFrame, použijeme parameter inplace=True.

df_ludia.sort_values('Priezvisko', inplace=True)
df_ludia

Ukážeme ako premenovať stĺpce

df_vek.rename(columns={"mzda": "priemerna mzda"}, inplace=True)
print(df_vek)
 
     Ev_cislo Priezvisko  Vek  priemerna mzda
3       135     Dvorak   26            1100
0       132    Kukučka   32            1200
2       134      Novák   37            1700
1       133    Zalabak   37             960
4       136       Abel   51            1450

Odstránenie stĺpca

df_vek.drop(columns=["Ev_cislo", "priemerna mzda"], inplace=True)

V budúcom pokračovaní sa budeme podrobnejšie venovať vizualizácii údajov pomocou knižnice matplotlib

Predchádzajúce diely:

Strojové učenie v Pythone 1 – prostredie Google Colab

Strojové učenie v Pythone 2 – knižnica Pandas na prácu s údajmi

ML v Pythone 3 – export a import údajov vo formáte CSV a Excel

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
Python machine learning strojove ucenie Pandas

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať