Načtení dat popisujících rovnováhu z Excelu a textového souboru, jejich zobrazení v grafu.
Načtení dat z externích souborů do Pythonu je ukázáno na příkladech textového souboru a Excelu. V obou případech využijeme data k rovnováze voda–aceton–toluen při teplotě 20 °C dostupné v E-tabulkách. Soubor v Excelu vypadá následovně:
Stažený soubor je vhodné umístit do stejného adresáře, v němž je uložen Python skript, jehož prostřednictvím budeme soubor načítat, případně je možné umístit jej do složky v tomto adresáři. Pro načtení Excel souboru využijeme balíček Pandas, přestože variant pro načítání je více. Pro volání balíčku Pandas si na začátku kódu definujeme alias pd následovně:
import pandas as pd
Poté si můžeme definovat cestu k souboru. Pokud je uložen ve stejném adresáři jako Python kód stačí příkaz s názvem souboru:
='voda-aceton-toluen.xls' filename
Jestliže jsme uložili Excel soubor v adresáři do složky data, definice cesty k souboru vypadá následovně:
='data/voda-aceton-toluen.xls' filename
Nyní přejdeme k samotnému příkazu pro načtení dat. Budeme používat příkaz read_excel se specifikací názvu našeho souboru. Načtená data si rovnou přiřadíme do proměnné data:
= pd.read_excel(filename) data
Nyní si můžeme ověřit, jak vypadají data, která jsme načetli pomocí jejich vypsání:
print(data)
Část výpisu tohoto příkazu je zobrazena na přiloženém obrázku. Můžeme vidět, že je načteno vše včetně nadpisu, prázdných buněk a prázdných řádků.
My bychom chtěli omezit načtení pouze na hodnoty zlomků a hlavičky jednotlivých sloupců. Toho lze dosáhnout specifikací argumentů příkazu read_excel. Konkrétně využijeme argumenty skiprows a skipfooter, kterými definujeme, kolik řádků vynecháme shora a kolik zdola. Pro náš případ volíme hodnoty následovně:
= pd.read_excel(filename, skiprows=3, skipfooter=2) data
Další možnosti argumetů jsou k dohledání v dokumentaci. Pro ověření správného načtení je opět možné vypsat data pomocí příkazu print.
Pro načítání dat ze souborů s příponou .txt je postup pomocí balíku Pandas velmi podobný. Opět jsou zde alernativy jako například příkaz loadtxt z balíku NumPy. Prozatím zůstaneme u balíku Pandas. Vzorový textový soubor rovnovaha.txt, který jsme uložili do skožky data v adresáři, v němž je uložen Python kód, vypadá následovně:
Definujeme název načítaného dokumentu například do proměnné filename a načteme data tentokrát příkazem read_csv:
= 'rovnovaha.txt'
filename = pd.read_csv(filename,sep='\t', skiprows=3) data
Argument sep=’ říká, že data jsou v textovém souboru oddělena tabulátorem, a již známým argumentem skiprows definujeme přeskočení prvního řádku při čtení. Nyní máme hodnoty načteny pod proměnnou data a můžeme s nimi dále pracovat.
Jako první se nabízí načtená data vykreslit do grafu. Pro tvorbu grafů budeme používat balík Matplotlib. Nejprve si tedy definujeme proměnnou plt pro funkce Pyplot z balíku Matplotlib:
import matplotlib.pyplot as plt
Pokud máme připravené hodnoty pro tvorbu grafu, jako bylo popsáno v předchozích kapitolách, můžeme přejít k tvorbě grafu pomocí následujících příkazů:
'Toluenová fáze'], data['Vodná fáze'], marker="o", linestyle='None')
plt.plot(data["Zlomek toluenové fáze (-)")
plt.xlabel("Zlomek vodné fáze (-)")
plt.ylabel( plt.show()
Pomocí příkazu plt.plot definujeme popořadě x-ové a y-ové hodnoty pomocí dříve definované proměnné data a názvu daného sloupce v hranaté závorce. Dále v argumentu příkazu plt.plot speficikujeme tvar vykreslovaných bodů (marker) a druh čáry, která tyto body spojuje (linestyle). V našem případě prozatím nechceme spojení bodů čarou, proto volíme možnost None. Na dalších dvou řádcích definujeme názvy os a posledním řádkem voláme zobrazení grafu. Všimněte si, že symboly ’ a ” jsou zaměnitelné. Námi definovaný graf vypadá takto:
Pokud bychom chtěli náš graf uložit zaměníme příkaz plt.show() za následující příkaz, kde definujeme název souboru a jeho formát:
"rovnovaha.png") plt.savefig(
Do grafu můžeme přidat další datové řady a upravit jej dle preference například přidáním legendy, mřížky, názvu grafu nebo definicí rozmezí vykreslovaných hodnot na obou osách:
'Toluenová fáze'], data['Vodná fáze'], marker="o", linestyle='None', label="Absolutní zlomky")
plt.plot(data['Toluenová fáze.1'], data['Vodná fáze.1'], marker="o", linestyle='None', label="Relativní zlomky")
plt.plot(data[= 'upper left')
plt.legend(loc 'Rovnováha toluen-voda')
plt.title("Zlomek toluenové fáze (-)")
plt.xlabel("Zlomek vodné fáze (-)")
plt.ylabel(0, 0.1])
plt.xlim([0, 0.12])
plt.ylim([='grey', linestyle='--', linewidth=0.5, alpha=0.7)
plt.grid(color plt.show()
Více možností pro úpravu grafů je k dohledání v dokumentaci. Doposud jsme pracovali s načtenými daty ve formě sloupců, tak jak jsou v původních dokumentech. Pokud by při další práci s daty byl tento formát na obtíž, je možné změnit formát dat například na list, data v tomto formátu přiřadit k proměnným a pod těmito proměnými je vykreslit nebo s nimi jinak pracovat:
= list(data["Vodná fáze"])
uA = list(data["Toluenová fáze"])
wA = list(data["Vodná fáze.1"])
UA = list(data["Toluenová fáze.1"])
WA
plt.figure()="o", linestyle='None', label="Absolutní zlomky")
plt.plot(wA, uA, marker="o", linestyle='None', label="Relativní zlomky")
plt.plot(WA, UA, marker= 'upper left')
plt.legend(loc 'Rovnováha toluen-voda2')
plt.title("Zlomek toluenové fáze (-)")
plt.xlabel("Zlomek vodné fáze (-)")
plt.ylabel( plt.show()
import pandas as pd
import matplotlib.pyplot as plt
='data/voda-aceton-toluen.xls'
filename= pd.read_excel(filename, skiprows=3, skipfooter=2, sheet_name="List1")
data print(data)
'Toluenová fáze'], data['Vodná fáze'], marker="o", linestyle='None', label="Absolutní zlomky")
plt.plot(data['Toluenová fáze.1'], data['Vodná fáze.1'], marker="o", linestyle='None', label="Relativní zlomky")
plt.plot(data[= 'upper left')
plt.legend(loc 'Rovnováha toluen-voda')
plt.title("Zlomek toluenové fáze (-)")
plt.xlabel("Zlomek vodné fáze (-)")
plt.ylabel(0, 0.1])
plt.xlim([0, 0.12])
plt.ylim([='grey', linestyle='--', linewidth=0.5, alpha=0.7)
plt.grid(color plt.show()
import matplotlib.pyplot as plt
import pandas as pd
= 'rovnovaha.txt'
filename = pd.read_csv(filename,sep='\t', skiprows=3)
data
print(data)
'Toluenová fáze'], data['Vodná fáze'], marker='o', linestyle='none', label='Absolutní zlomek')
plt.plot(data['Rovnováha toluen-voda')
plt.title("Zlomek toluenové fáze (-)")
plt.xlabel("Zlomek vodné fáze (-)")
plt.ylabel(0, 0.1])
plt.xlim([0, 0.1])
plt.ylim([='grey', linestyle='--', linewidth=0.5, alpha=0.7)
plt.grid(color
plt.legend() plt.show()