Hur jag kombinerade webbskrapning, jordbruksvetenskap och NOAA API för att skapa ett verktyg som optimerar foderkostnader baserat på miljödata Ranching är en verksamhet av rakare-tunna marginaler. Två av de största variablerna som kan göra eller bryta ett år är kostnaden för foder överlägset den största driftskostnadenoch vädret. Som utvecklare med bakgrund inom jordbruket såg jag en möjlighet att ansluta dessa två domäner.Vad händer om jag kunde bygga ett verktyg som inte bara hittar det mest kostnadseffektiva fodret utan också börjar lägga grunden för att justera rekommendationer baserat på verkliga miljödata? Så jag byggde en prototyp. Det är en samling av Python-skript som fungerar som en datadriven assistent för en rancher. Den har två kärnmoduler: en att optimera kostnaderna för foder och för att dra kritiska väderdata. här är hur det fungerar. Economic Engine Environmental Monitor Modul 1: Den ekonomiska motorn - Skrapa för besparingar Den första uppgiften var att svara på en grundläggande fråga: "Med tanke på min hjords näringsbehov, vilket är det billigaste sättet att mata dem?" Detta krävde två delar: en vetenskaplig kalkylator och en webbskrapa. Del A: Översätt jordbruksvetenskap till Python Först behövde jag beräkna "Dry Matter Intake" (DMI) - ett vetenskapligt mått på hur mycket mat en ko behöver. Detta är inte ett enkelt tal; det beror på koens vikt, livsstadium (mjölkning, tillväxt, graviditet), mjölkproduktion och mer. 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) Detta skript frågar användaren för detaljer om sin flock och beräknar de totala pounds av foder som krävs. Därefter behövde jag den . Efterfrågan Leveranserna Del B: Webbskraparen för realtidspriser Jag skrev en webbskrapa med hjälp av förfrågningar och BeautifulSoup för att dra produktnamn och priser direkt från en lokal foderbutik webbplats. 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)) Skriptet beräknar den totala kostnaden för att möta hjordens DMI för varje foderprodukt och sorterar sedan listan för att hitta de billigaste och dyraste alternativen. Modul 2: Miljöövervakningen - Tapping in i NOAA API Kostnaden för foder är bara hälften av ekvationen.Miljöstress, särskilt värme, har en enorm inverkan på boskap.En ko som lider av värmestress kommer att äta mindre, producera mindre mjölk och ha lägre fertilitet. Jag vände mig till National Oceanic and Atmospheric Administration (NOAA), som erbjuder en fantastisk, gratis API för historiska och aktuella väderdata från tusentals stationer. Mitt skript, weather_1.py, är utformat för att dra viktiga datapunkter för en lista över specifika väderstationer i mitt område av intresse (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 ... Skriptet frågar systematiskt API för varje station och sparar resultaten i JSON-filer, vilket skapar en lokal databas över senaste miljöförhållanden. Nästa steg: Anslut punkterna Just nu är dessa två moduler separata. Men kraften ligger i att ansluta dem. Nästa utveckling av detta projekt är att använda väderdata som en dynamisk inmatning för DMI-kalkylatorn. Du kan beräkna den från NOAA-data – en standardmetrik för mätning av värmestress hos nötkreatur. När THI stiger över en viss tröskel (runt 72 för mjölkkor) börjar DMI sjunka. Temperature-Humidity Index (THI) Nästa version av DMI-formeln skulle se ut så här: adjusted_dmi = beräknad_dmi * get_heat_stress_factor(THI) Detta skulle göra det möjligt för verktyget att göra smartare, mer realistiska rekommendationer.Till exempel kan det råda en rancher att under en förutsedd värmeböljan kommer deras hjords intag sannolikt att minska med 10%, vilket gör att de kan justera foderköp och undvika avfall. Vad jag lärt mig Offentliga API:er är guldgruvor: Regeringsorgan som NOAA tillhandahåller en otrolig mängd högkvalitativa, fria data. Webbskrapning är en superkraft: För ekonomiska data som inte är tillgängliga via ett API kan ett enkelt Python-skript förvandla en webbplats till en strukturerad datakälla. Men genom att kombinera ekonomiska data (matpriser) med miljödata (väder), skapar du ett verktyg som är mycket mer kraftfullt och närmare hur den verkliga världen faktiskt fungerar. Detta projekt är en utgångspunkt, men det visar den enorma potentialen för utvecklare att bygga verktyg som ger datavetenskap och automation till traditionella industrier, skapa verkligt värde och lösa konkreta problem.