How I combined web scraping, agricultural science, and the NOAA API to create a tool that optimizes cattle feed costs based on environmental data Ranching to biznes o cienkich marginesach.Dwie z największych zmiennych, które mogą zrobić lub złamać rok, to koszt paszy, z pewnością największy koszt operacyjnyi pogoda. Co by było, gdybym mógł zbudować narzędzie, które nie tylko znajdzie najbardziej opłacalne pasze, ale także zacznie tworzyć podstawy do dostosowywania zaleceń w oparciu o rzeczywiste dane środowiskowe? Tak więc zbudowałem prototyp. Jest to zbiór skryptów Python, który działa jako asystent oparty na danych dla ranchera. Ma dwa podstawowe moduły: jeden optymalizacja kosztów żywienia oraz Aby wyciągnąć krytyczne dane pogodowe. oto jak to działa. Economic Engine Environmental Monitor Moduł 1: Silnik ekonomiczny - skrapanie na oszczędności Pierwszym zadaniem było odpowiedzieć na podstawowe pytanie: „Biorąc pod uwagę potrzeby żywieniowe mojej stada, jaki jest najtańszy sposób na karmienie ich?” Wymagało to dwóch części: kalkulatora naukowego i skraparki internetowej. Część A: Tłumaczenie nauk rolniczych na Python Po pierwsze, musiałem obliczyć "Zajmowanie suchej materii" (DMI) - naukową miarę tego, ile pokarmu potrzebuje krowa.To nie jest prosta liczba; zależy to od wagi krowy, etapu życia (dojrzałość, wzrost, ciąża), produkcji mleka i więcej. 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) Ten skrypt prosi użytkownika o szczegóły dotyczące ich stada i oblicza łączne kilogramy pożywienia wymagane. Następnie potrzebowałem . Wymagania dostawy Part B: The Web Scraper for Real-Time Prices Jedynym sposobem, aby uzyskać bieżące dane, jest przejście do źródła. Napisałem skraparkę internetową za pomocą żądań i BeautifulSoup, aby wyciągnąć nazwy produktów i ceny bezpośrednio z witryny lokalnego sklepu z paszami. 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)) Skrypt oblicza całkowity koszt, aby spełnić DMI stada dla każdego produktu paszowego, a następnie sortuje listę, aby znaleźć najtańsze i najdroższe opcje. Moduł 2: Monitor środowiska - Wejście do NOAA API Koszt paszy to tylko połowa równania. stres środowiskowy, zwłaszcza ciepło, ma ogromny wpływ na bydło. krowa cierpiąca na stres cieplny będzie jeść mniej, produkować mniej mleka i mieć niższe płodności. Zwróciłem się do Narodowej Administracji Oceanicznej i Atmosferycznej (NOAA), która oferuje fantastyczny, darmowy API dla historycznych i bieżących danych meteorologicznych z tysięcy stacji. Mój scenariusz, weather_1.py, ma na celu wyciągnięcie kluczowych punktów danych dla listy konkretnych stacji pogodowych w moim obszarze zainteresowania (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 ... Skrypt systematycznie kwestionuje API dla każdej stacji i zapisuje wyniki w plikach JSON, tworząc lokalną bazę danych o ostatnich warunkach środowiskowych. Następny krok: Podłączanie punktów Obecnie te dwa moduły są oddzielne, ale siła polega na połączeniu ich.Następną ewolucją tego projektu jest wykorzystanie danych pogodowych jako dynamicznego wejścia do kalkulatora DMI. Możesz obliczyć na W miarę wzrostu THI powyżej określonego progu (około 72 dla krów mlecznych), DMI zaczyna spadać. Temperature-Humidity Index (THI) Następna wersja formuły DMI wyglądałaby nieco tak: adjusted_dmi = obliczone_dmi * get_heat_stress_factor(THI) Na przykład, może doradzić gospodarzowi, że podczas przewidywanej fali ciepła spożycie ich stada prawdopodobnie zmniejszy się o 10%, co pozwoli im dostosować zakup pasz i uniknąć marnotrawstwa. What I Learned Publiczne interfejsy API to kopalnie złota: agencje rządowe takie jak NOAA dostarczają niesamowitą ilość wysokiej jakości, darmowych danych. Web Scraping to supermoc: dla danych ekonomicznych, które nie są dostępne za pośrednictwem API, prosty skrypt Python może przekształcić stronę internetową w ustrukturyzowane źródło danych. Ale łącząc dane ekonomiczne (ceny pasz) z danymi środowiskowymi (poziom pogody), tworzysz narzędzie, które jest o wiele bardziej potężne i bliższe temu, jak naprawdę działa świat. Ten projekt jest punktem wyjścia, ale pokazuje ogromny potencjał dla deweloperów w tworzeniu narzędzi, które przynoszą naukę o danych i automatyzację do tradycyjnych branż, tworząc rzeczywistą wartość i rozwiązując konkretne problemy.