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
- Features
- Requirements
- Installation
- Usage
- Classes
- Error Handling
- Logging
- Testing
- License
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agritechtz-pycli-1.0.3.tar.gz.
File metadata
- Download URL: agritechtz-pycli-1.0.3.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a35e7a79c6d9384cedb3aac11c745f13f8554700d9951a71bb29d1949636d95
|
|
| MD5 |
f25111f79203a3789790a7803b2de1ac
|
|
| BLAKE2b-256 |
273dc2e107216f70d7d00655225d0e68c58a74392221df1814224cb82c03aa8a
|
File details
Details for the file agritechtz_pycli-1.0.3-py3-none-any.whl.
File metadata
- Download URL: agritechtz_pycli-1.0.3-py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2f1708ca8880d02c2f6047c436a7a87448c290c6f7c83a03f6a9c033f341fb4
|
|
| MD5 |
c1a85c5e70a354adc8c1d787876de313
|
|
| BLAKE2b-256 |
30c89dfcf456f82529a0bad658f019ce179098f46c16ad9ab9e2d3c6179a31cf
|