SAMSUNG_022024C Advertisement SAMSUNG_022024C Advertisement SAMSUNG_022024C Advertisement

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

0

úvodnom článku sme predstavili možnosti prostredia Google Colab., ktoré umožňuje spúšť kód na cloudových serveroch Googlu, takže môžete výkon grafických procesorov a procesorov TPU bez ohľadu na výkon vášh počítača. Námetom tohto dielu je knižnica Pandas na prácu s údajmi vrátane štatistík a analýz.

Postup vytvorenia príkladov je v krátkom videu

Pandas https://pandas.pydata.org/  je flexibilné prostredie na výpočty ,analýzy a manipuláciu s údajmi. Pandas využíva dva typy dátových štruktúr Series a DataFrame.

Series pracujú s údajmi v podobe dvojice atribútov index a hodnota.

DataFrame umožňujú pracovať s údajmi v tabuľkách s viacerými stĺpcami (atribútmi). Dátová štruktúra tabuliek je štandardná -  obsahuje riadky a stĺpce nad ktorými je možné vykonávať rôzne matematické, štatistické aj analytické operácie.

Začneme jednoduchým príkladom v ktorom vytvoríme dátovú štruktúru Series, čo je v podstate slovník (dictionary), ktorý obsahuje údaje v tvare index – hodnota.  Zadáme len hodnoty, indexy začínajúce nulou budú priradené automaticky. Ako prvý krok je potrebné importovať knižniceu Pandas. Táto využíva knižnicu NumPy

import numpy as np
import pandas as pd
 
hodnoty = ([19, 32, 13, 4])
zoznam = pd.Series(hodnoty)
print("Seria = \n",zoznam)
 
Seria =
0    19
1    32
2    13
3     4
dtype: int64

Pokračujeme vytvorením tabuľky s definovanými hodnotami. V tomto príklade to budú ceny  PC komponentov

komponenty = np.array(
   [['procesor', 299],
   ['Základná doska', 239],
   ['grafická karta', 440],
   ['RAM', 130],
   ['SSD disk', 170],
   ['skrinka', 110]]
)
pc_dataframe = pd.DataFrame(data=komponenty, columns= ['komponent', 'cena'])
pc_dataframe

V tomto prípade môžeme zadávať údaje aj v takomto tvare. Pridali sme aj jeden záznam, v ktorom nepoznáme cenu jednej položky. Vtedy zadáme hodnotu None, čo je ekvivalent Null v klasických databázach. Nie je to nula, ale nejaká hodnota, ktorú v daný okamih nepoznáme.

data_komponenty = {
   'komponent' : ['procesor', 'Základná doska', 'grafická karta', 'RAM',
'SSD disk', 'skrinka','softvér'],
   'cena' : [299, 239, 440, 130, 170, 110, None]
}
pc_dataframe1 = pd.DataFrame(data_komponenty)
pc_dataframe1

 

Pre výpis dátového rámca môžete použiť niekoľko príkazov

print(pc_dataframe1)
display(pc_dataframe1)
pc_dataframe1

Pre výpis stĺpca použijeme príkaz v tvare

pc_dataframe['komponent']
 
0          procesor
1    Základná doska
2    grafická karta
3               RAM
4          SSD disk
5           skrinka
Name: komponent, dtype: object

Počet záznamov zistíme príkazom

print(f"Počet záznamov: {pc_dataframe1.size}")

Môžeme zistiť aj dátové typy

pc_dataframe.dtypes
 
komponent    object
cena         float64
dtype: object

V ďalšom bloku kódu vytvoríme DataFrame obsahujúci údaje v matici  2 stĺpce a 6 riadkov. V prvom stĺpci bude vek dieťaťa a v druhom výška. Vytvoríme inštanciu triedy pd.DataFrame na vygenerovanie DataFrame. Trieda má dva argumenty. Prvý argument obsahuje údaje na naplnenie buniek. Bunka kódu volá np.array na vygenerovanie poľa 6x2 NumPy. Druhý argument definuje názvy stĺpcov.

nazvy_stlpcov = ['vek', 'výška']
udaje = np.array([[1, 85], [2, 110], [3, 125], [3, 130], [5, 140], [10, 150]])
my_dataframe = pd.DataFrame(data=udaje, columns= nazvy_stlpcov)
print(my_dataframe)
 
   vek  výška
0    1     85
1    2    110
2    3    125
3    4    130
4    6    140
5   10    150

Môžete pridávať ďalšie stĺpce, v našom prípade napríklad váhu

my_dataframe["váha"] = ([3, 5, 8, 10, 13, 18])
print(my_dataframe)
 
   vek  výška  váha
0    1     85     3
1    2    110     5
2    3    125     8
3    4    130    10
4    6    140    13
5   10    150    18

Stĺpec môže obsahovať aj odvodené hodnoty, napríklad váha s oblečením, na ktoré pripočítame 0,5 kg

my_dataframe["váha oblečený"] = my_dataframe["váha"] + 0.5
print(my_dataframe)
 
   vek  výška  váha  váha oblečený
0    1     85     3            3.5
1    2    110     5            5.5
2    3    125     8            8.5
3    4    130    10           10.5
4    6    140    13           13.5
5   10    150    18           18.5

Môžeme vypísať len niektoré záznamy (riadky). Napríklad určitý počet od začiatku, od konca, rozsah riadkov a podobne

print(f"Prvé tri riadky: \n  {my_dataframe.head(3)}")
print(f"\nPosledné dva riadky: \n  {my_dataframe.tail(2)}")
print(f"\nRiadok 2: \n  {my_dataframe.iloc[[2]]}")
print(f"\nRozsah riadkov: \n  {my_dataframe[1:4]}")
print(f"\nKonkrétny stĺpec vek: \n  {my_dataframe['vek']}")
 
Prvé tri riadky:
     vek  výška  váha  váha oblečený
0    1     85     3            3.5
1    2    110     5            5.5
2    3    125     8            8.5
 
Posledné dva riadky:
     vek  výška  váha  váha oblečený
4    6    140    13           13.5
5   10    150    18           18.5
 
Riadok 2:
     vek  výška  váha  váha oblečený
2    3    125     8            8.5
 
Rozsah riadkov:
     vek  výška  váha  váha oblečený
1    2    110     5            5.5
2    3    125     8            8.5
3    4    130    10           10.5
 
Konkrétny stĺpec vek:
  0     1
1     2
2     3
3     4
4     6
5    10
Name: vek, dtype: int64

 

V ďalšom príklade vytvoríme tabuľku 4 stĺpce x 6 riadkov, ktoré budú obsahovať akože namerané hodnoty veličín, avšak naplníme ich náhodnými číslami od 0 do 100 (vrátane)

nazvy_stlpcov =['Výška', 'Teplota', 'Tlak', 'Vlhkosť']

udaje = np.random.randint(low=0, high=101, size=(6, 4))

df = pd.DataFrame(data=udaje, columns= nazvy_stlpcov)

print(df)

Môžeme zistiť štatistické údaje, napríklad priemerné a maximálne hodnoty pre všetky stĺpce

print(f"Priemer: \n  {df.mean()}")
print(f"\nMaximum: \n  {df.max()}")
 
Priemer:
Výška      64.333333
Teplota    57.000000
Tlak       38.000000
Vlhkosť    68.666667
dtype: float64
 
Maximum:
Výška      87
Teplota    96
Tlak       90
Vlhkosť    97
dtype: int64

Pre konkrétne stĺpce

print(f"Priemerná teplota: {df['Teplota'].mean()}")
print(f"Maximum tlaku: {df['Tlak'].max()}")
 
Priemerná teplota:  57.0
Maximum tlaku:  90

Pandas podporuje dva rôzne spôsoby duplikácie DataFrame odkazovanie a kopírovanie

Odkazovanie: Ak priradíte DataFrame k novej premennej, každá zmena DataFrame alebo novej premennej sa prejaví aj v druhej premennej.

print("Odkazovanie (reference):")
odkaz_na_df = df
print("Teplota [1] df : %d" % df['Výška'][1])
print("Teplota [1] odkaz_na_df: %d\n" % odkaz_na_df['Výška'][1])
 
# Zmena hodnoty v df.
df.at[1, 'Výška'] = df['Výška'][1] + 5
print("  Aktualizovaný df: %d" % df['Výška'][1])
print("  Aktualizovaný odkaz_na_df: %d\n\n" % odkaz_na_df['Výška'][1])
 
Odkazovanie (reference):
Teplota [1] df : 76
Teplota [1] odkaz_na_df: 76
 
  Aktualizovaný df: 81
  Aktualizovaný odkaz_na_df: 81

Kopírovanie: Metóda pd.DataFrame.copy, vytvorí nezávislú kópiu. Zmeny pôvodného DataFrame, alebo kópie sa neprejavia v druhom DataFrame.

print("Kopírovanie:")
kopia_df = df.copy()
 
print("Tlak [1] df : %d" % df['Tlak'][1])
print("Tlak [1] kopia_df: %d\n" % kopia_df['Tlak'][1])
 
# Zmena hodnoty v df.
df.at[1, 'Tlak'] = df['Tlak'][1] + 10
print("  Aktualizovaný df: %d" % df['Tlak'][1])
print("  kopia_df: %d\n\n" % kopia_df['Tlak'][1])
 
Kopírovanie):
Tlak [1] df : 40
Tlak [1] kopia_df: 40
 
  Aktualizovaný df: 50
  kopia_df: 40

V budúcom pokračovaní ukážeme načítanie údajov zo súboru typu CSV, čiže hodnoty oddelené čiarkou. Do tohto formátu môžeme vyexportovať údaje z Excelu, alebo z relačných databáz

Predchádzajúce diely:

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

Zobrazit Galériu

Luboslav Lacko

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

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať