Sledování obsahu mykotoxinů ve sladovnickém ječmeni

Dvevrany
14 min readMay 30, 2023

--

Autorky: Andrea Chytilová, Marie Bartlová

Mentoři: Kristína Pavlíková, Jan Jetmar

Jak to celé začalo

Když jsme se v Impact Hubu poprvé potkaly a sedly si vedle sebe, zjistily jsme, že toho máme mnoho společného a že DA zvládneme jedině spolu. A tak se z nás stal „tým“. Kromě jiného nás obě zajímá oblast potravin. Vystudovaly jsme podobné obory (Andy analytickou chemii, Maruška hygienu a technologii potravin), proto je nám toto téma blízké. Rozhodly jsme se toho využít a zaměřit se na potraviny. Tím jsme si bohužel trochu zavařily, neboť výběr nebyl vůbec jednoduchý a sehnání vhodných dat se zdálo téměř nemožné. Na poslední chvíli nás zachránila naše skvělá mentorka, která nám dala kontakt na svého kamaráda (odborníka na chemii a technologii potravin 😉) pracujícího ve Výzkumném ústavu pivovarském a sladařském v Brně. Díky němu jsme získaly tři datasety, ze kterých jsme si po důkladné úvaze vybraly ten náš “mykotoxinový”.

Co to vlastně jsou ty mykotoxiny?

Mykotoxiny jsou produkty plísní (zejména rodů Aspergillus, Penicillium a Fusarium), které mohou mít negativní dopad na naše zdraví. Obecně lze říct, že poškozují játra a ledviny, avšak některé z nich mohou mít karcinogenní, neurotoxické, imunotoxické, mutagenní či teratogenní účinky. Jsou to převážně stabilní látky, které obvykle běžné technologické postupy neničí. Proto je nutné jejich přítomnost a množství sledovat. Jejich limity upravuje nařízení Komise (ES) 1881/2006.

Co máme za data?

Jak už bylo řečeno, data nám poskytl Výzkumný ústav pivovarský a sladařský, kde již řadu let probíhá monitoring mykotoxinů ve sladovnickém ječmeni. Tento jejich projekt probíhá ve spolupráci s největšími sladovnami a pivovary. Pro naši práci nám byla poskytnuta data z let 2008–2013. V datasetu bylo zahrnuto 611 vzorků ječmene, který byl vypěstován v různých okresech ČR. Důvodem, proč se sledují mykotoxiny ve sladovnickém ječmeni je nejen zdravotní, ale i technologické riziko. Mimo jiné také mohou způsobovat změny v kvalitě ječmene, jako je zhoršená klíčivost či nižší výtěžnost sladu. Mykotoxiny jsou poměrně velkou skupinou látek, takže se v dané surovině obvykle objevuje současně více druhů. Proto se sledovaly tzv. indikátorové mykotoxiny. Jedná se o deoxynivalenol (DON), který se vyskytuje nejčastěji a jehož přítomnost tedy ukazuje, že se ve vzorku nacházejí pravděpodobně i jiné druhy mykotoxinů. Považuje se tedy za indikátor mykotoxinové kontaminace. Druhým je zearalenon (ZON), který má estrogenní účinky a může způsobit problémy s plodností. Dále byly sledovány toxiny T-2 a HT-2, které se obvykle udávají v sumě, protože se T-2 snadno přeměňuje na HT-2 a často se stanovují společně. Oba dva mykotoxiny se vyskytují hlavně v cereáliích. Obzvláště nebezpečný je T-2, protože způsobuje alimentární toxickou aleukii. Posledním sledovaným zástupcem byl ochratoxin A (OTA), který indikuje špatné skladovací podmínky suroviny (např. vysoká vlhkost, teplota). OTA má potvrzené imunotoxické, teratogenní a karcinogenní účinky.

Úroveň napadení ječmene mykotoxiny závisí na mnoha faktorech, které se vzájemně ovlivňují. Nejvýznamnější z nich je počasí, zejména v době metání a kvetení ječmene a v období před sklizní. Jinými vlivy mohou být způsob zpracování půdy, předplodina (plodina, která se pěstovala na poli před ječmenem), stupeň náchylnosti dané odrůdy, výživa porostu, aplikace fungicidů aj. Čím více rizikových faktorů je během pěstování zapojeno, tím pravděpodobnější je výskyt mykotoxinů.

Náš dataset obsahoval kromě množství mykotoxinů v jednotlivých vzorcích také záznamy průměrných teplot a úhrnů srážek z daného období, údaj o předplodině, odrůdě ječmene, okresu, kraji a klimatické oblasti.

Cílem projektu je hodnocení množství mykotoxinů ve sladovnickém ječmeni ve zvoleném období a zjištění vlivu klimatických podmínek a dalších faktorů (předplodina, odrůda) na jejich přítomnost.

Data už máme a teď hurá na datovou analýzu!

Naším prvním úkolem bylo založení účtů na Microsoft Azure, vytvoření vlastního SQL serveru a naší cloudové databáze. Poté jsme si vytvořily databázový projekt ve Visual Studiu, abychom mohly využít automatického nasazení na SQL server. Náš databázový projekt jsme si uložily do GIT repozitáře na Azure DevOps, a to proto, abychom se jednak připravily na práci v „našem datovém týmu“ a mohly zdrojovou verzi projektu sdílet mezi sebou. A také, abychom měly zálohu pro případ, kdyby nás během práce na projektu zradila technika, což se naštěstí nestalo. Ale připravené jsme byly. 😉

Nebudeme tvrdit, že to pro nás byla hračka. Zabralo nám to půl dne, nicméně vše se úspěšně povedlo. A nyní nám nic nebránilo navrhnout datový model, abychom si určily entity a vztahy mezi nimi. Sehnaly jsme si tabuli, fixy a společnými silami jsme jej s našimi mentory dali dohromady.

Podle modelu jsme si ve Visual Studiu vytvořily databázové objekty — tabulky s jednotlivými sloupci, u kterých jsme určily datové typy a také primární a cizí klíče. Tyto tabulky jsme nasadily na naši vytvořenou databázi.

A teď už jen nahrát data a můžeme vizualizovat. 😊

Zaradovaly jsme se poněkud předčasně. Zpočátku to vypadalo, že nás nějaké velké čištění dat mine, bohužel (a nebo spíše bohudík) jsme se zmýlily.

Data jsme naimportovaly do našich předpřipravených tabulek prostřednictví SQL Server Management Studia (SSMS). Poté jsme se pomocí SQL pustily do transformace dat — změna desetinné čárky za tečku a další drobné úpravy. Největší výzvou ale pro nás byla transpozice dat z 24 sloupců (12 sloupců s průměrnými teplotami a 12 sloupců s průměrnými úhrny srážek) do řádků. Provedly jsme ji použitím dvou UNPIVOTů v jednom kroku.

Těsně před druhým hackathonem jsme při kontrole zjistily, že se nám data nenahrála správně a taky, že nejsou kompletní. Proto naše náplň druhého hackathonu byla jasná. Znovu a lépe!

Usoudily jsme, že problém mohl být v použití dvojitého UNPIVOTu. Proto jsme se je rozhodly udělat zvlášť a spojit je INNER JOINem. Poté jsme pomocí INNER JOINů napojily přes sloupec s kódy naše jednotlivé dimenze. A toto je náš výsledek:

--teplota vzduchu unpivot
select
od.Id AS DimOdrudaID
,o.Id AS DimOkresID
,kr.Id AS DimKrajID
,k.Id AS DimKlimaID
,z.Id AS DimZralostID
,p.Id AS DimPredplodinaID
,t1.DON
,t1.ZON
,t1.[ΣT2, HT2]
,t1.OTA
,t1.rok AS Rok
,t1.mesic AS Mesic
,t1.TeplotaVzduchu
,t2.UhrnSrazek
from
(
select
[zralost]
,[klima]
,[okres]
,[kraj]
,[odrůda]
,[předplodina]
,CASE WHEN [DON] = 'N' THEN NULL ELSE REPLACE (Don, ',', '.') END AS DON
,CASE WHEN [ZON] = 'N' THEN NULL ELSE REPLACE (Zon, ',', '.') END AS ZON
,CASE WHEN [ΣT2, HT2] = 'N' THEN NULL ELSE REPLACE ([ΣT2, HT2], ',', '.') END AS [ΣT2, HT2]
,CASE WHEN [OTA] = 'N' THEN NULL ELSE REPLACE (Ota, ',', '.') END AS OTA
,t.ID
,REPLACE (t.mesice, 'T', '') AS Mesic
,Rok
,t.TeplotaVzduchu
from [dbo].[raw_data] r
unpivot
(
TeplotaVzduchu
for mesice in (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
) t
) as t1

inner join

--uhrn srazek unpivot
(
select
u.ID
, u.mesice AS Mesic
, Rok
, u.UhrnSrazek
from [dbo].[raw_data] r
unpivot
(
UhrnSrazek
for mesice in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) u
) as t2 ON t1.mesic = t2.mesic AND t1.rok = t2.rok AND t1.ID = t2.ID

JOIN DimZralost z ON t1.zralost=z.kod
JOIN DimKlima k ON t1.klima=k.kod
JOIN DimOkres o ON t1.okres=o.kod
JOIN DimKraj kr ON t1.kraj=kr.kod
JOIN DimOdruda od ON t1.odrůda=od.kod
JOIN DimPredplodina p ON t1.předplodina=p.kod

A veškerá data jsme opět nahrály do naší faktové tabulky. Můžeme konečně slavit — počet řádků nám sedí! 🎉

Pro ucelenější přehled výsledků analýz jsme přidaly do faktové tabulky sloupce s legislativními limity pro jednotlivé mykotoxiny.

UPDATE [dbo].[FactMykotoxiny] 
SET DonLeg = 1250,
ZonLeg = 100,
SumaT2Ht2Leg = 200,
OtaLeg = 5

Všechny tabulky s daty jsme nahrály do Power BI, kde jsme vytvořily datumovou dimenzi pomocí DAXu.

Date = CALENDAR(DATE(2008,1,1),DATE(2013,12,31))

Když jsme měly všechny objekty připravené, propojily jsme je vazbami, a tak nám vznikl datový model ve tvaru hvězdy, který se skládá z faktové tabulky a 7 dimenzí.

Rozdělení práce

Protože se nám čas krátil a my neměly vyhodnocené výsledky a udělané vizualizace, rozhodly jsme si práci rozdělit, abychom stíhaly termíny. Maruška se vrhla na práci v Power BI a Andy si vzala na paškál Python a statistiku. Nicméně stále jsme byly v kontaktu a vše společně konzultovaly.

Andrea Chytilová

Po většinu času jsme s Maruškou dělaly na projektu společně. Naše cesty se rozdělyly až v momentě, kdy už jsme měly vyčištěná data nahrátá v naší databázi a čas nás začal nekompromisně tlačit. Domluvily jsme se, že každá zkusíme vyhodnotit data jiným způsobem. Vzhledem k tomu, že máme vědecká data, rozhodly jsme se na nich udělat základní statistické analýzy. A protože jsme si na začátku projektu plánovaly vyzkoušet i Python, pustila jsem se do toho. Díky této zkušenosti jsem si rozšířila znalosti v rámci statistiky, které bych chtěla do budoucna ještě více prohlubovat, neboť dle mého názoru může být statistika pro datového analytika velice užitečná.

Statistika nuda je, má však cenné údaje…

Nejprve jsem tedy musela vytvořit připojení Visual Studio Code k naší databázi, což bylo asi ze všeho nejnáročnější. Později jsem ovšem usoudila, že bude lepší místo opakovaného připojování k databázi na cloudu, vytvořit DataFrame s hodnotami z naší faktové tabulky FactMykotoxiny. Ten jsem uložila do csv souboru, který budeme dále prostřednictvím knihovny Pandas používat. Zde je kód pro připojení k naší databázi DBMykotoxiny a vytvoření csv souboru projekt2.csv:

import pandas as pd
import pyodbc

# Nastavení připojení k naší databázi
conn = pyodbc.connect(
'Driver={ODBC Driver 17 for SQL Server};'
'Server=sqlmykotoxiny.database.windows.net;'
'Database=DBMykotoxiny;'
'UID=Vrany;'
'PWD=**********;'
)
# Vytvoření kurzoru pro provádění dotazů
cursor = conn.cursor()
cursor.execute('SELECT * FROM FactMykotoxiny')

# Načtení výsledků
results = cursor.fetchall()
SLOUPCE = ["DimOdrudaID", "DimOkresID", "DimKrajID", "DimKlimaID", "DimZralost", "DimPredplodinaID", "Don", "Zon", "SumaT2Ht2", "Ota", "Rok", "Mesic", "TeplotaVzduchu", "UhrnSrazek", "ID", "DonLeg", "ZonLeg", "SumaT2Ht2Leg", "OtaLeg"]

# Převedení výsledků na seznam tuple pro DataFrame
results = [tuple(row) for row in results]
df = pd.DataFrame(results, columns=SLOUPCE)

# Uložení DataFrame do CSV souboru
df.to_csv("projekt2.csv", index=False, encoding="utf-8")

V první fázi statistické analýzy bylo nezbytné posoudit, zda naměřená data náleží do normálního rozdělení a tedy výskyt zjištěných mykotoxinů je náhodný nebo jsou naměřená data zatížená trendem a vykazují odchylku od normality.

Proto jsem pomocí knihovny Pandas vytvořila krabicové diagramy pro jednotlivé mykotoxiny za celkové časové období 2008–2013, které nám navíc poskytly údaje o mediánech. Použila jsem tento kód:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Načtení dat do DataFrame
df = pd.read_csv('projekt2.csv')

# Nastavení stylu grafů prostřednictvím knihovny Seaborn
sns.set(style="whitegrid", palette="pastel")
sloupce = ['Don', 'Zon', 'SumaT2Ht2', 'Ota']

# Procházení sloupců cyklem for a vytvoření boxplotu pro každý z nich
for sloupec in sloupce:
plt.figure(figsize=(8, 6))
sns.boxplot(data=df[sloupec], palette="pastel")
plt.ylabel('Hodnota')
plt.title(f'Boxplot - {sloupec}')
plt.show()

Krabicové grafy pro jednotlivé mykotoxiny za období 2008–2013

Výstupem byly krabicové grafy, z kterých můžeme zjistit, že se nejedná o normální rozdělení a že nad horní hranicí kvartilu krabicového grafu je mnoho odlehlých bodů, které způsobují deformaci rozdělení. Symetrii v oblasti kvartilů nejde jednoznačně určit, ale vizuálně je patrné, že se jedná o levostranné rozdělení pravděpodobnosti. Toto rozdělení jsem si v oblasti koncových bodů rozdělení ověřila také následujícími q-q grafy, pro které jsem v Pythonu použila kód:

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm

# Načtení dat do DataFrame
df = pd.read_csv('projekt2.csv')
sloupce = ['Don', 'Zon', 'SumaT2Ht2', 'Ota']

# Pro každý sloupec provedeme analýzu
for sloupec in sloupce:
# Vybrání hodnot sloupce z DataFrame a převedení na numpy array;
# uložení do proměnné data
data = df[sloupec].values
# Vytvoření Q-Q plotu
sm.qqplot(data, line='s')
# Popisky os a nadpisu grafu
plt.xlabel('Teoretické kvantily')
plt.ylabel('Hodnota')
plt.title(f'Q-Q plot - {sloupec} - Všechny roky')

# Zobrazení grafu
plt.show()

q-q grafy pro jednotlivé mykotoxiny za období 2008–2013

Vytvořené q-q grafy ukazují na deformaci tvaru rozdělení a opět vyvrací možnost, že by rozdělení dat bylo náhodné. Graf (Q-Q plot Ota-všechny roky) dokonce ukazuje shodně s grafem (Boxplot Ota) na existenci odlehlých bodů, které rozdělení deformují do velké míry.

Za běžných okolností by se dále ověřovala přítomnost a vliv odlehlých bodů statistickými testy. Získané hodnoty nelze ale zanedbat, protože se opírají o reálné výsledky laboratoře. Navíc tato analýza dat se zaměřuje právě na existenci odlehlých hodnot a budeme pracovat právě s nimi.

Cílem tohoto statistického šetření bude tedy stanovit limity hodnot jednotlivých mykotoxinů napříč celým souborem dat a tyto odlehlé hodnoty porovnat s dalšími zjištěnými faktory, jako jsou přítomnost předplodiny, odrůda ječmene klimatické zóny, potažmo určit, jestli je v některých letech četnost zvýšených hodnot odlišná od ostatních let.

Malé shrnutí

Krabicovými a q-q grafy pro jednotlivé mykotoxiny za celkové časové období jsme zjistily, že rozdělení pravděpodobnosti vykazují tvarovou odchylku od normálního rozdělení s levostranným charakterem. Krabicové diagramy navíc určily odlehlé body ovlivňující tvar rozdělení, které nám pomohlo získat představu o velikosti a množství odlehlých bodů reprezentovaných obsahů mykotoxinů. Závislosti odlehlých bodů na dalších parametrech budou diskutovány v následujících kapitolách.

Marie Bartlová

První část projektu, jako bylo nahrávání dat do databáze a čištění dat, jsme dělaly s Andy společně. Stejně tak jsme spolu vytvářely datový model nebo datumovou dimenzi v Power BI. Z časových důvodů jsme si posléze rozdělily práci a mým úkolem bylo vizualizovat data v Power BI. Kromě grafů jsem si vyzkoušela vytvořit mapy a také metriky v DAXu.

Vizualizace dat v Power BI

Vzhledem k tomu, že jsme naše data již nahrály do Power BI a udělaly všechny nezbytné úpravy, mohla jsem začít tvořit první grafy. Nejprve jsem udělala přehled počtu pozitivních a negativních vzorků pro všechny mykotoxiny v jednotlivých letech. Použila jsem sloupcový graf, do kterého jsem na osu x přidala roky a na osu y počet pozitivních a negativních vzorků, které jsem vytvořila pomocí DAXu.

Pro pozitivní vzorky:

CALCULATE(COUNT(FactMykotoxiny[Don]),FactMykotoxiny[Don] > 0)

Pro negativní vzorky:

CALCULATE(COUNT(FactMykotoxiny[Don]),FactMykotoxiny[Don] = 0)

Dále jsem se snažila zjistit, jestli se v našem datasetu vyskytovaly vzorky, které překročily legislativní limit. Porovnala jsem tedy maximální hodnoty mykotoxinů v jednotlivých letech s legislativním limitem. Pro toto znázornění jsem použila kombinovaný graf, kde na ose x jsou jednotlivé roky, na ose y maximální hodnoty mykotoxinů a legislativní limit je znázorněn linií. Z grafů vyplývá, že všechny analyzované vzorky splnily legislativní požadavky pro mykotoxiny OTA a ZON. U mykotoxinů DON (v roce 2009, hodnota 2213,5 µg/kg) a suma T-2 a HT-2 (v roce 2013, hodnota 206,0 µg/kg) byly nalezeny vzorky, které stanovený limit překročily. Proto u těchto mykotoxinů byl dashboard doplněn kartami s počty vzorků, které přesáhly legislativní limit, a také byly přidány hodnoty celkového počtu analyzovaných vzorků pro tyto mykotoxiny.

Jak už bylo řečeno, počasí, jako je teplota a množství srážek, významně ovlivňuje rozvoj plísní u plodin a může tedy ovlivňovat také množství mykotoxinů. Analyzovaný ječmen byl pěstován v okresech napříč ČR. Z tohoto důvodu jsem znázornila průměrné hodnoty DON mykotoxinu v jednotlivých okresech. Vybrala jsem tento mykotoxin, protože se považuje za indikátor mykotoxinové kontaminace (jestliže je nalezen DON ve vzorku, pravděpodobně se v něm nachází i jiné druhy mykotoxinů). Pro vizualizaci jsem použila mapu obrazce, kam jsem nahrála soubor JSON se všemi okresy ČR a přidala jsem průměrné hodnoty DON. Obdobně jsem postupovala také u map s průměrnou teplotou a průměrným úhrnem srážek. Pro lepší názornost jsem dashboard doplnila grafem s průměrnými úhrny srážek a teplot v jednotlivých měsících a letech. Pro jednodušší filtraci informací jsem přidala slicery na roky a měsíce, kde jsem vyfiltrovala červen a rok 2009. Podle literatury má počasí největší vliv na rozvoj plísní v období metání a kvetení ječmene (obvykle na přelomu května a června v závislosti na oblasti a počasí v daném roce). Rok 2009 jsem zvolila, protože trend úhrnů srážek a průměrných teplot byl bez výraznějších výkyvů, na rozdíl od ostatních let.

Z výsledků vyplývá, že výskyt DON částečně koreluje s průměrnou teplotou a úhrnem srážek. Největší shoda je v okresech Přerov a Brno-venkov, kde byla průměrná hodnota DON mykotoxinu vyšší a také průměrné teploty a úhrny srážek byly vyšší. Což jsou podmínky, které mohou přispívat k rozvoji plísní. Jak už bylo řečeno, počasí nemusí být jediným faktorem, který je příčinou výskytu mykotoxinů. Kromě počasí má na jejich obsah vliv odrůda ječmene, agrotechnické postupy (např. způsob orby, aplikace agrochemikálií), ale také předplodina. Příkladem může být mykotoxin DON, který se velmi často nachází v kukuřici. Z tohoto důvodu se kukuřice nepovažuje za vhodnou předplodinu pro ječmen. Následující graf znázorňuje procentuální zastoupení jednotlivých předplodin u pozitivních (statisticky významných) vzorků na DON.

Z grafu vyplývá, že největší procento tvoří skupina pozitivních vzorků, u kterých nemáme informaci o předplodině. Druhou nejzastoupenější předplodinou je kukuřice vyskytující se u 22 % pozitivních vzorků na DON.

Souhrn výsledků

Ze statisticky významných hodnot jsme udělaly přehledný souhrn za celé sledované období:

DON

  • Odrůdy s nejvyšší četností výskytu: Bojos, Sebastian, Malz
  • Předplodina: N, kukuřice, cukrovka
  • Okresy s nejvyšší četností výskytu: Kroměříž, Olomouc, Vyškov
  • Roky s nejvyšší četností výskytu: 2012, 2009, 2013

ZON

  • Odrůdy s nejvyšší četností výskytu: Sebastian, Malz, Bojos
  • Předplodina: Cukrovka, kukuřice, pšenice ozimá
  • Okresy s nejvyšší četností výskytu: Prostějov, Olomouc, Kolín
  • Roky s nejvyšší četností výskytu: 2011, 2009, 2010

SUMA T-2 a HT-2

  • Odrůdy s nejvyšší četností výskytu: Bojos, Sebastian, Malz
  • Předplodina: N, cukrovka, kukuřice
  • Okresy s nejvyšší četností výskytu: Vyškov, Prostějov, Kroměříž
  • Roky s nejvyšší četností výskytu: 2013, 2009, 2010

OTA

  • Odrůdy s nejvyšší četností výskytu: Bojos, Malz, Sebastian
  • Předplodina: Kukuřice, pšenice ozimá, řepka
  • Okresy s nejvyšší četností výskytu: Olomouc, Kroměříž, Strakonice
  • Roky s nejvyšší četností výskytu: 2012

Z výsledků naší analýzy můžeme dojít k závěru, že na zvýšeném obsahu mykotoxinů v ječmeni se významnou měrou mohou podílet předplodiny i odrůdy. Vliv počasí nelze jednoznačně prokázat. Rády bychom získaly od ČHMU podrobnější meteorologická data o maximálních a minimálních denních teplotách, relativní vlhkosti, průměrné rychlosti větru a úhrnu srážek. Také bychom si chtěly doplnit údaje o vlivu klimatických oblastí. Myslíme si, že po zahrnutí více faktorů a podrobnějších meteodat do naší analýzy bychom mohly dojít k přesnějším výsledkům. Bohužel, z časových důvodů to už v rámci tohoto projektu nestihneme. Pro Výzkumný ústav pivovarský a sladařský však budeme v práci na těchto datech pokračovat i nadále. Chtěly bychom usnadnit práci tamním zaměstnancům s automatickým načítáním nových dat do databáze, aby mohli porovnávat aktuální výsledky s výsledky z předchozích let i s legislativními limity. Získali by tak vyhodnocená data rychleji a pohodlněji.

Takové jsou naše další plány s tímto projektem po skončení akademie. Tak nám, prosím, držte palce.

Ohlédnutí

Když se ohlédneme zpět, některé věci bychom nejspíš udělaly jinak. Možná bychom nemusely tak moc lpět na tématu potravin. Získání datasetu nebylo snadné a ztratily jsme tak zbytečný čas, který jsme mohly věnovat projektu. Pro lepší organizaci práce bychom určitě využily nějakou užitečnou aplikaci, například Trello, která by nám zpřehlednila plánování úkolů. Ale shodly jsme se, že to i přes všechny nesnáze, krize a pocity zoufalství stálo za to. Do tohoto bodu bychom se však nedostaly bez našich trpělivých a vždy velice ochotných the best mentorů, kteří nám nejen pomáhali a radili, ale byli neskutečnou psychickou oporou. Z celého srdce vám, Kiko a Honzo, děkujeme. ❤️

Zdroje

https://gobarley.com/what-does-malt-taste-like/

https://cit.vfu.cz/toxikologie-potravin/soubory/doplnky%20a%20odkazy/Maskovanemykotoxiny.pdf

https://cit.vfu.cz/vegetabilie/plodiny/czech/jecmen.htm

https://pandas.pydata.org/docs/

https://learn.microsoft.com/en-us/power-bi/

https://community.fabric.microsoft.com/

stackowerflow.com

--

--