Skip to main content

A client library for fetching and processing crop price data.

Project description

Crop Price Client

This module implements a client for fetching and processing crop price data from a REST API. It allows filtering by crop types, regions, districts, dates, and ordering. The data is fetched as a CSV, converted into a pandas DataFrame, and preprocessed for analysis.

Table of Contents

  1. Features
  2. Requirements
  3. Installation
  4. Usage
  5. Classes
  6. Error Handling
  7. Logging
  8. Testing
  9. License
  10. Contributing

Features

  • Flexible Filtering: Filter crop price data by crops, regions, districts, date range, and ordering.
  • Chained Configuration: Use a chainable builder pattern for constructing DataFrames with specific parameters.
  • Progress Tracking: Displays a download progress bar.
  • Data Cleanup: Preprocesses and formats data for consistency.

Requirements

  • Python 3.11+
  • Required Packages:
    • pandas
    • requests
    • tqdm

Installation

To install this library, use pip:

pip install agritechtz-pycli

Or, if you’re installing from source:

git https://github.com/cloudnuttz/agritechtz-pycli.git
cd agritechtz-pycli
pip install .

Usage

Initialize the Builder:

The CropPriceDataFrameBuilder class allows you to configure and retrieve crop price data as a pandas DataFrame. Here’s an example of how to use it:

from agritechtz import CropPriceDataFrameBuilder

df = CropPriceDataFrameBuilder.of("Maize", "Rice") \
    .in_regions("Dar es saalam/Kinondoni", "Mbeya/Sido") \
    .from_date("2023-01-01") \
    .to_date("2023-12-31") \
    .order_by("-ts") # Order data by date in descending order\
    .build()

print(df.head())

Classes and Methods

CropPriceFilterParams

A data class for setting up filter parameters.

Parameters include:

Attribute Type Description
crops List[str] A list of crop names
regions List[str] A list of regions
districts List[str] A list of districts
start_date Union[date,str] Specify start date (ISO8601 format) of our time series data
end_date Union[date,str] Specify end date (ISO8601 format) of our time series data
ordering List[str] Specify sort priority. + or - before the parameter name where +=ascending -=descending

CropPriceDataFrameBuilder

A builder class for constructing crop price DataFrames with chainable configuration methods.

Methods:

Method Parameters Return Type Description
of Comma separated list of crops e.g., "Maize","Rice" An instance CropPriceDataFrameBuilder Crops to retrieve from the API
in_regions Comma separated list of regions The current instance created by the of method Specify regions to include in your API query
from_date Date object or String representation of the date in ISO8601 format The current instance created by the of method Specify the starting date to include in your API query
end_date Date object or String representation of the date in ISO8601 format The current instance create by the of method Specify the end date to include in your API query. If specified togehter with the start_date, they will create time horizon for your time series data.
ordering Comma separated list of sort specifications. e.g., "+ts" The current instance created by the of method. Specify the order parameter to use in sorting. The sign before parameter indicates sorting direction +/asc, -/desc
build N/A DataFrame Builds the dataframe using the data from the API you've specified in the parameters above.

Error Handling

The library raises informative errors in specific cases:

  • Date Format Errors: Raises ValueError for invalid date formats.
  • API Errors: Raises RuntimeError if network or request errors occur during data fetching.

Note: Since this is a public API, we employed rate limit techniques in order to safeguard against Denial of service (DoD) attacks. Therefore, once you exceeds 5 req/minute you'll be locked.

Logging

Logs messages at the CRITICAL level by default and outputs errors and warnings in case of invalid data or network issues.

Testing

Run tests by typing python -m unittest tests/test_crop_price_data_frame_builder.py

License

This project is licensed under the MIT License - see the LICENSE file for details.


Contributing

Contributions are welcome! To contribute:

  • Fork the repository.
  • Create a new branch (git checkout -b feature-branch).
  • Make your changes.
  • Commit your changes (git commit -m 'Add new feature').
  • Push to the branch (git push origin feature-branch).
  • Open a pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agritechtz-pycli-1.0.1.tar.gz (6.4 kB view details)

Uploaded Source

File details

Details for the file agritechtz-pycli-1.0.1.tar.gz.

File metadata

  • Download URL: agritechtz-pycli-1.0.1.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for agritechtz-pycli-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f933d9cb7a7bdc3886a4267930dd706600ac723c1147209bffee2e57a0b8d0a0
MD5 e955889bcb9d0931c8f635ca0b339a93
BLAKE2b-256 67dd8fff9364695f9d71fcfff7893d7ba0a8b65c40c5d9d29f0f19f1d5adc3ad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page