Jak jsem spojil webové škrábání, zemědělskou vědu a rozhraní NOAA API, abych vytvořil nástroj, který optimalizuje náklady na krmivo na základě environmentálních údajů Dva z největších proměnných, které mohou vytvořit nebo zlomit rok, jsou náklady na krmivo zdaleka největší provozní nákladya počasí. Jako vývojář s pozadím v zemědělství jsem viděl příležitost propojit tyto dvě domény.Co kdybych mohl vytvořit nástroj, který nejen najde nejvíce nákladově efektivní krmivo, ale také začne položit základy pro úpravu doporučení na základě reálných environmentálních údajů? Takže jsem postavil prototyp. Je to sbírka Python skriptů, které fungují jako datový asistent pro ranč. Má dva základní moduly: jeden optimalizovat náklady na krmivo a Využijte kritické údaje o počasí, takhle to funguje. Economic Engine Environmental Monitor Modul 1: Ekonomický motor - škrabání pro úspory Prvním úkolem bylo odpovědět na základní otázku: "Vzhledem k výživovým potřebám mého stáda, jaký je nejlevnější způsob, jak je krmit?" To vyžadovalo dvě části: vědecký kalkulátor a webový škrabák. Část A: Překlad zemědělské vědy do Pythonu Nejprve jsem potřeboval vypočítat "Dry Matter Intake" (DMI) - vědecké měření toho, kolik jídla kráva potřebuje.Není to jednoduché číslo; záleží na hmotnosti krávy, životní fázi (dojčení, růst, těhotenství), produkci mléka a další. cows_2.py - A Glimpse into the DMI Formulas # Formula for lactating cow DMI, based on scientific papers dmi_lac = ((3.7 + int(lac_par) * 5.7) + .305 * 624 + .022 * int(lac_weght) + \ (-.689 - 1.87 * int(lac_par)) * 3) * \ (1 - (2.12 + int(lac_par) * .136)**(-.053*int(lac_day))) # Total feed needed is the DMI multiplied by the number of cows and days all_feed_needed = (dmi_lac_needed + dmi_grow_needed + final_preg) * int(days_of_feed) Tento skript požádá uživatele o podrobnosti o jejich stádu a vypočítá celkové kilogramy krmiva potřebné. Následně jsem potřeboval . Poptávka zásobování Část B: Webový škrabák pro ceny v reálném čase Ceny krmiv se mění.Jediný způsob, jak získat aktuální údaje, je jít ke zdroji.Napsal jsem webový škrabák pomocí žádostí a BeautifulSoup, abych vytáhl názvy produktů a ceny přímo z webových stránek místního krmivářství. cow_save_scrape.py - The Scraper Logic import requests from bs4 import BeautifulSoup as soup from urllib.request import Request, urlopen websiteurl = 'https://shop.berendbros.com/departments/calf-|70|P35|P351.html' req = Request(websiteurl, headers={"User-Agent": 'Mozilla/5.0'}) webpage = urlopen(req).read() soups = soup(webpage,'html.parser') calf_name = [] calf_price = [] for link in soups.find_all('div', class_='card-body'): for product in link.find_all('div', class_='product_link'): calf_name.append(product.text) for price in link.find_all('div', class_='product_price'): # Clean the price string (e.g., "$24.99\n" -> 24.99) price_text = price.text.strip().strip('$') calf_price.append(float(price_text)) Scénář vypočítá celkové náklady na splnění DMI stáda pro každý krmivový produkt a poté třídí seznam, aby našel nejlevnější a nejdražší možnosti. Modul 2: Monitor životního prostředí - Připojení k NOAA API Náklady na krmivo je jen polovina rovnice.Environmentální stres, zejména teplo, má masivní dopad na dobytek.Kráva trpící tepelným stresem bude jíst méně, produkovat méně mléka a mají nižší plodnost. Obrátil jsem se na Národní správu oceánů a atmosféry (NOAA), která nabízí fantastický, bezplatný rozhraní API pro historické a aktuální údaje o počasí z tisíců stanic. Můj skript, weather_1.py, je navržen tak, aby čerpal klíčové datové body pro seznam konkrétních meteorologických stanic v mé oblasti zájmu (College Station, TX). weather_1.py - Fetching Key Climate Data import requests import json token = 'YOUR_NOAA_API_TOKEN' # Get this from the NOAA website base_url = 'https://www.ncei.noaa.gov/cdo-web/api/v2/data' start_date = '2024-04-01' end_date = '2024-04-03' # List of data types we want to fetch data_types = [ 'TMAX', # Maximum Temperature 'TMIN', # Minimum Temperature 'RH_AVG', # Average Relative Humidity 'WIND_SPEED_AVG', ] for station_id in us1tx_codes: print(f"--- Processing station: {station_id} ---") params = { 'datasetid': 'USCRNS', # A specific, high-quality dataset 'stationid': f'USCRNS:{station_id}', 'startdate': start_date, 'enddate': end_date, 'limit': 1000, 'datatypeid': data_types } # ... make the requests.get() call ... Skript systematicky vyhledává rozhraní API pro každou stanici a ukládá výsledky do souborů JSON, čímž vytváří místní databázi nedávných podmínek prostředí. Další krok: připojení bodů V současné době jsou tyto dva moduly oddělené, ale síla spočívá v jejich propojení.Další vývoj tohoto projektu spočívá v použití údajů o počasí jako dynamického vstupu pro kalkulačku DMI. Můžete si vypočítat z údajů NOAA – standardní metrika pro měření tepelného stresu u skotu. Jak THI stoupá nad určitou hranici (přibližně 72 pro mléčné krávy), DMI začíná klesat. Temperature-Humidity Index (THI) Další verze vzorce DMI by vypadala něco takového: adjusted_dmi = vypočítané_dmi * get_heat_stress_factor(THI) To by umožnilo, aby nástroj vydal chytřejší, realističtější doporučení. Například by mohl poradit ranči, že během předpovězené vlny horka se příjem jejich stáda pravděpodobně sníží o 10%, což jim umožní upravit nákupy krmiv a vyhnout se plýtvání. Co jsem se naučil Veřejné rozhraní API jsou Goldmines: vládní agentury jako NOAA poskytují neuvěřitelné množství vysoce kvalitních, bezplatných dat. Je to nesmírně málo využívaný zdroj pro budování praktických aplikací. Webové škrábání je supermoc: Pro ekonomická data, která nejsou k dispozici prostřednictvím rozhraní API, může jednoduchý Python skript přeměnit webovou stránku na strukturovaný zdroj dat. Ale kombinací ekonomických dat (ceny krmiv) s environmentálními daty (počasí) vytváříte nástroj, který je mnohem silnější a blíže tomu, jak reálný svět ve skutečnosti funguje. Tento projekt je výchozím bodem, ale demonstruje obrovský potenciál pro vývojáře, aby vybudovali nástroje, které přinášejí datovou vědu a automatizaci do tradičních průmyslových odvětví, vytvářejí skutečnou hodnotu a řeší hmatatelné problémy.