{"id":15906610,"url":"https://github.com/morgan-sell/trash-nothing","last_synced_at":"2026-05-01T14:33:25.259Z","repository":{"id":233201415,"uuid":"786268713","full_name":"Morgan-Sell/trash-nothing","owner":"Morgan-Sell","description":"Asynchronously retreives data from the TrashNothing API and then stores/processes data to generate a Streamlit dashboard.","archived":false,"fork":false,"pushed_at":"2024-05-05T23:03:47.000Z","size":1667,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T05:54:39.472Z","etag":null,"topics":["api","concurrent-programming","data-application","python","streamlit"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Morgan-Sell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-13T23:43:28.000Z","updated_at":"2025-02-16T18:02:54.000Z","dependencies_parsed_at":"2024-12-15T17:51:37.479Z","dependency_job_id":null,"html_url":"https://github.com/Morgan-Sell/trash-nothing","commit_stats":null,"previous_names":["morgan-sell/world-pop-analysies","morgan-sell/whiskey-auction","morgan-sell/trash-nothing"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Morgan-Sell/trash-nothing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morgan-Sell%2Ftrash-nothing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morgan-Sell%2Ftrash-nothing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morgan-Sell%2Ftrash-nothing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morgan-Sell%2Ftrash-nothing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Morgan-Sell","download_url":"https://codeload.github.com/Morgan-Sell/trash-nothing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morgan-Sell%2Ftrash-nothing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32501402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","concurrent-programming","data-application","python","streamlit"],"created_at":"2024-10-06T13:40:52.421Z","updated_at":"2026-05-01T14:33:25.234Z","avatar_url":"https://github.com/Morgan-Sell.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Garden created from trash](img/garden.png)\n\n# Trash Nothing Dashboard: Life Trends of Second-Hand Goods\n\n## Project Overview\nThis project asynchronously retrieves data from [Trash Nothing](https://trashnothing.com/beta/browse?r=logo) API then leverages Python's dataclass\nto process and store the data in a CSV file. Once the data is saved, the application loads the data and performs additional processing. The \napplication then generates a dashboard that provides both numerical and text analyses.\n\nTrashPost is a website in which people offer second-hand goods to others, predominantly for free. A post includes a title, description, day/time available for pickup, location, and more. A post also includes whether the item was picked up.\n\n## Installation\nFollow these steps to install and use the Trash Nothing Dashboard:\n\n1. **Clone the Repository**: Start by cloning this repository to your local machine:\n   \n    ```bash\n    git clone https://github.com/Morgan-Sell/trash-nothing.git\n    ```\n\n2. **Install Dependencies**: Navigate into the project directory and install the required dependencies using pip:\n\n    ```bash\n    cd trash-nothing\n    pip install -r requirements.txt\n    ```\n\n3. **Set Up API Key**: You'll need an API key from Trash Nothing to access their API. If you don't have one already, sign up for an account on [Trash Nothing](https://www.trashnothing.com) and generate an API key.\n\n4. **Configure API Key**: Once you have your API key, create a `.env` file in the root directory of the project. Add your API key to this file in the following format:\n\n    ```plaintext\n   API_KEY=your_api_key_here\n    ```\n5. **Save and Close**: Save the `.env` file and close it.\n   \n6. **Gain Access to Groups Data**: To access group data, which provides a much richer dataset, you must join a TrashNothing group. Once you join the group, ask the group administrator for the group ID. You can join more than one group.\n   \n7. **Update Config File**: When you obtain the group ID(s), update the `group_ids` key in the `API_PARAMS` on the `config.py` file. Currently, the group ID is `4673`, which corresponds to the DC ReUse It group.\n\n## Dashboard Samples\n\nHere are a few sample visualizations from the Trash Nothing dashboard.\n\nIn the below word cloud, we see the words that are most used in the post descriptions. Understandably, the primary words correspond to (1) coordination/exchange guidelines, e.g., policy, offer, pick up, and (2) general product descriptions, e.g., good condition, old, and size.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"img/wordcloud.png\" alt=\"Posts Description Word Cloud\"\u003e\n\u003c/p\u003e\n\n\nThe below count plot shows the number of items that are still available or have been promised to an individual. This visualization is misleading because it does not show the items that were taken. Once an item is taken, the users remove it from the site.\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"img/outcome.png\" alt=\"Outcome Distribution\"\u003e\n\u003c/p\u003e\n\n\nAnother interesting observation is how long do people make their items available pickup. We nearly see a binomial distribution with the apexes at 10 - 20 days and 80 - 90 days. We are unsure of the default settings. The 3 month duration may be caused by default bias.\n\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"img/days_available.png\" alt=\"Days Available\"\u003e\n\u003c/p\u003e\n\n\n## Project Structure\n\n```\nTRASH_NOTHING/\n│\n├── data/  # hidden from GitHub. demonstrates where data is stored.\n│ └── trash_posts.csv\n│\n├── img/\n│ ├── days_available.png\n│ ├── garden.png\n│ ├── interest.png\n│ ├── outcome.png\n│ ├── recycle.png\n│ └── wordcloud.png\n│\n├── src/\n│ ├── init.py\n│ ├── api.py\n│ ├── app.py\n│ ├── config.py\n│ ├── data_processing.py\n│ ├── models.py\n│ └── visualization.py\n│\n├── tests/\n│ ├── init.py\n│ ├── conftest.py\n│ ├── test_api.py\n│ ├── test_data_processing.py\n│ └── test_models.py\n│\n├── .gitignore\n├── LICENSE\n├── project.toml\n├── README.md\n├── requirements.txt\n└── LICENSE\n\n```\n### Explanation\n\n- `data/`: Contains CSV files used for data processing.\n- `img/`: Holds images used in the project for documentation or analysis.\n- `src/`: Source code including the main application and utility modules.\n- `tests/`: Contains unit tests for testing the source code.\n- `world-pop-env/`: Python virtual environment for managing dependencies.\n\n## Project Inspiration\nI developed the Trash Nothing dashboard as a final project for [ArjanCodes Next-Level Python](https://www.arjancodes.com/courses/nlp/). My goal for the project was to implement Python's dataclass and concurrent programming.\n\n## Packages\n- pandas\n- streamlit\n- aiohttp\n- plotly.express\n- wordcloud\n- matplotlib\n- pytest\n- pytest-asyncio\n- pytest-mock\n- pytest-aiohttp\n- black\n- isort\n- python-dotenv\n- setuptools\n- flake8\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorgan-sell%2Ftrash-nothing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorgan-sell%2Ftrash-nothing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorgan-sell%2Ftrash-nothing/lists"}