diff --git a/160124737026_CBIT_IT_1_EDAV_2025_CEP_39_Analyze_urban_municipal_waste_generation_and_disposal_practices_.ipynb b/160124737026_CBIT_IT_1_EDAV_2025_CEP_39_Analyze_urban_municipal_waste_generation_and_disposal_practices_.ipynb new file mode 100644 index 0000000..d7c960c --- /dev/null +++ b/160124737026_CBIT_IT_1_EDAV_2025_CEP_39_Analyze_urban_municipal_waste_generation_and_disposal_practices_.ipynb @@ -0,0 +1,2049 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "#**Analyze urban municipal waste generation and disposal practices.**\n", + "#**CBIT/IT-1/EDAV/2025/CEP-39**\n", + "#**Roll no. 160124737026**\n", + "#**Name of the Student : SAHASTHRA JERIPOTULA**\n", + "#**Dept of IT , Chaitanya Bharathi Institute of Technology , Hyderabad**" + ], + "metadata": { + "id": "jkIh6wgq4I5S" + } + }, + { + "cell_type": "markdown", + "source": [ + "**The goal of this project is to analyze and visualize school infrastructure quality across various states and school types using Python (NumPy, Pandas, Matplotlib).**" + ], + "metadata": { + "id": "zEhzvDen52Pp" + } + }, + { + "cell_type": "markdown", + "source": [ + "#**Python Version: 3.10+**\n", + "\n", + "#**Libraries used :**\n", + "\n", + "\n", + "| Library | Purpose |\n", + "| ---------------- | ---------------------------------------------------------------------- |\n", + "| **pandas** | For data loading, cleaning, and analysis (DataFrame operations) |\n", + "| **numpy** | For numerical computations and handling missing values |\n", + "| **matplotlib** | For data visualization (bar charts and plots) |\n", + "| **google.colab** | For file upload and download functionality in Google Colab environment |\n" + ], + "metadata": { + "id": "SslhcBFB6Tdm" + } + }, + { + "cell_type": "markdown", + "source": [ + "#**Q1: Calculate average waste generation per capita (BL-3)**" + ], + "metadata": { + "id": "SoVzjNH2-wvC" + } + }, + { + "cell_type": "markdown", + "source": [ + "The code first identifies the columns containing information about total waste generated and population for each urban body.\n", + "\n", + "Then, it calculates the waste generated per person by dividing the total waste generated by the population for every record in the dataset.\n", + "\n", + "After that, it computes the mean (average) of these per-person values across all rows (or optionally by year).\n", + "\n", + "This gives one combined metric called “Average Waste Generation Per Capita”, which represents the average amount of waste produced by each individual in the dataset or city." + ], + "metadata": { + "id": "_fJ8qoLU_FGu" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 340 + }, + "id": "HibBUVg61JTj", + "outputId": "fc2fc5b9-1705-46ce-8716-07b1c2a75d64" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving urban_waste_data.csv to urban_waste_data.csv\n", + "Overall average waste generation per capita: 0.03945233581982956\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " year waste_per_capita\n", + "0 2018 0.034637\n", + "1 2019 0.033006\n", + "2 2020 0.037747\n", + "3 2021 0.046157\n", + "4 2022 0.041639\n", + "5 2023 0.043419\n", + "6 2024 0.039561" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yearwaste_per_capita
020180.034637
120190.033006
220200.037747
320210.046157
420220.041639
520230.043419
620240.039561
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "avg_per_capita_by_year", + "summary": "{\n \"name\": \"avg_per_capita_by_year\",\n \"rows\": 7,\n \"fields\": [\n {\n \"column\": \"year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2,\n \"min\": 2018,\n \"max\": 2024,\n \"num_unique_values\": 7,\n \"samples\": [\n 2018,\n 2019,\n 2023\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"waste_per_capita\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.004710546281067517,\n \"min\": 0.03300640402627123,\n \"max\": 0.04615701721466702,\n \"num_unique_values\": 7,\n \"samples\": [\n 0.034636516669389474,\n 0.03300640402627123,\n 0.043419489502697396\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Load dataset\n", + "from google.colab import files\n", + "uploaded = files.upload()\n", + "df = pd.read_csv(next(iter(uploaded)))\n", + "\n", + "\n", + "# Q1: Calculate per capita waste generation\n", + "df['waste_per_capita'] = df['total_waste_generated'] / df['population']\n", + "\n", + "# Overall average waste per capita\n", + "overall_avg_per_capita = df['waste_per_capita'].mean()\n", + "\n", + "# Average per year\n", + "avg_per_capita_by_year = df.groupby('year', as_index=False)['waste_per_capita'].mean()\n", + "\n", + "print(\"Overall average waste generation per capita:\", overall_avg_per_capita)\n", + "display(avg_per_capita_by_year)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "#**Q2: Filter waste data by waste type (BL-3)**" + ], + "metadata": { + "id": "j_AMRDaV_qy3" + } + }, + { + "cell_type": "markdown", + "source": [ + "Explanation\n", + "\n", + "The code first identifies the column that contains the type of waste (for example, Plastic, Biodegradable, E-Waste, etc.).\n", + "\n", + "Then, it applies a filter condition to select only those rows where the waste type matches the chosen category (e.g., 'Plastic').\n", + "\n", + "This process isolates specific data related to one waste category, allowing focused analysis on how that particular type of waste is generated, managed, or disposed of across different urban bodies or years." + ], + "metadata": { + "id": "rdtnbovR_5U1" + } + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "\n", + "# Load dataset\n", + "CSV_PATH = '/content/urban_waste_data.csv'\n", + "df = pd.read_csv(CSV_PATH)\n", + "\n", + "# Q2: Filter by waste type\n", + "TARGET_WASTE_TYPE = 'Plastic' # Change as needed: 'Biodegradable', 'E-Waste', etc.\n", + "filtered_data = df[df['waste_type'] == TARGET_WASTE_TYPE]\n", + "\n", + "print(f\"Rows with waste_type == {TARGET_WASTE_TYPE!r}: {len(filtered_data)}\")\n", + "display(filtered_data.head())\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 224 + }, + "id": "TOSvnsh72BOQ", + "outputId": "9dfa1ba1-b41f-4f06-ecb1-74badb6957ac" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Rows with waste_type == 'Plastic': 70\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " urban_body year population waste_type total_waste_generated \\\n", + "1 Hyderabad 2018 2734489 Plastic 218458 \n", + "6 Hyderabad 2019 6613790 Plastic 127537 \n", + "11 Hyderabad 2020 2325665 Plastic 129243 \n", + "16 Hyderabad 2021 4269315 Plastic 168678 \n", + "21 Hyderabad 2022 7056168 Plastic 125151 \n", + "\n", + " waste_disposed disposal_method collection_efficiency \n", + "1 138718.912056 Recycling 78.37 \n", + "6 78605.259541 Incineration 98.95 \n", + "11 88448.599007 Landfill 87.33 \n", + "16 155631.765775 NaN 63.54 \n", + "21 92387.535908 Recycling 71.74 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
urban_bodyyearpopulationwaste_typetotal_waste_generatedwaste_disposeddisposal_methodcollection_efficiency
1Hyderabad20182734489Plastic218458138718.912056Recycling78.37
6Hyderabad20196613790Plastic12753778605.259541Incineration98.95
11Hyderabad20202325665Plastic12924388448.599007Landfill87.33
16Hyderabad20214269315Plastic168678155631.765775NaN63.54
21Hyderabad20227056168Plastic12515192387.535908Recycling71.74
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"display(filtered_data\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"urban_body\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Hyderabad\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 2018,\n \"max\": 2022,\n \"num_unique_values\": 5,\n \"samples\": [\n 2019\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"population\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2170840,\n \"min\": 2325665,\n \"max\": 7056168,\n \"num_unique_values\": 5,\n \"samples\": [\n 6613790\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"waste_type\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Plastic\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_waste_generated\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 40359,\n \"min\": 125151,\n \"max\": 218458,\n \"num_unique_values\": 5,\n \"samples\": [\n 127537\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"waste_disposed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 34148.38758863866,\n \"min\": 78605.25954124621,\n \"max\": 155631.76577533025,\n \"num_unique_values\": 5,\n \"samples\": [\n 78605.25954124621\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"disposal_method\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"Recycling\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"collection_efficiency\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13.735415173921757,\n \"min\": 63.54,\n \"max\": 98.95,\n \"num_unique_values\": 5,\n \"samples\": [\n 98.95\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#**Q3: Impute missing waste disposal records (BL-4)**" + ], + "metadata": { + "id": "wFh32proAGVo" + } + }, + { + "cell_type": "markdown", + "source": [ + "Explanation\n", + "\n", + "The code first checks for missing values in the columns related to waste disposal — such as waste_disposed and disposal_method.\n", + "\n", + "Then, it fills (imputes) the missing numerical values in waste_disposed using the median of similar records grouped by factors like urban body, waste type, and year.\n", + "\n", + "For missing categorical values in disposal_method, it replaces them with the most common (mode) method used within the same group.\n", + "\n", + "This ensures that the dataset becomes complete and consistent, allowing accurate analysis without losing valuable records due to missing data." + ], + "metadata": { + "id": "5qCjAJbVAR1z" + } + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Load dataset\n", + "CSV_PATH = '/content/urban_waste_data.csv'\n", + "df = pd.read_csv(CSV_PATH)\n", + "\n", + "# Q3: Impute missing values\n", + "df['waste_disposed'] = pd.to_numeric(df['waste_disposed'], errors='coerce')\n", + "\n", + "# Impute numeric values using median within groups\n", + "group_cols_num = ['urban_body', 'waste_type', 'year']\n", + "median_by_group = df.groupby(group_cols_num)['waste_disposed'].transform('median')\n", + "overall_median = df['waste_disposed'].median()\n", + "df['waste_disposed_imputed'] = df['waste_disposed'].fillna(median_by_group).fillna(overall_median)\n", + "\n", + "# Impute categorical values using mode\n", + "def group_mode(s):\n", + " m = s.mode(dropna=True)\n", + " return m.iloc[0] if not m.empty else np.nan\n", + "\n", + "group_cols_cat = ['urban_body', 'waste_type']\n", + "mode_by_group = df.groupby(group_cols_cat)['disposal_method'].transform(group_mode)\n", + "df['disposal_method_imputed'] = df['disposal_method'].fillna(mode_by_group).fillna('Unknown')\n", + "\n", + "# Print summary\n", + "print(\"Missing 'waste_disposed' before:\", df['waste_disposed'].isna().sum(),\n", + " \"| after:\", df['waste_disposed_imputed'].isna().sum())\n", + "print(\"Missing 'disposal_method' before:\", df['disposal_method'].isna().sum(),\n", + " \"| after:\", df['disposal_method_imputed'].isna().sum())\n", + "\n", + "display(df.head())\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 241 + }, + "id": "c0FYR-8I2Haa", + "outputId": "03f988f6-94f4-44f3-9715-efe2e20fff4e" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Missing 'waste_disposed' before: 18 | after: 0\n", + "Missing 'disposal_method' before: 18 | after: 0\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " urban_body year population waste_type total_waste_generated \\\n", + "0 Hyderabad 2018 6923388 Biodegradable 108694 \n", + "1 Hyderabad 2018 2734489 Plastic 218458 \n", + "2 Hyderabad 2018 7704212 E-Waste 180203 \n", + "3 Hyderabad 2018 7904852 Metal 5769 \n", + "4 Hyderabad 2018 3844769 Paper 10311 \n", + "\n", + " waste_disposed disposal_method collection_efficiency \\\n", + "0 93063.572329 Incineration 83.95 \n", + "1 138718.912056 Recycling 78.37 \n", + "2 117132.560216 Recycling 86.04 \n", + "3 4919.223821 Landfill 97.54 \n", + "4 9767.342686 Recycling 84.70 \n", + "\n", + " waste_disposed_imputed disposal_method_imputed \n", + "0 93063.572329 Incineration \n", + "1 138718.912056 Recycling \n", + "2 117132.560216 Recycling \n", + "3 4919.223821 Landfill \n", + "4 9767.342686 Recycling " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
urban_bodyyearpopulationwaste_typetotal_waste_generatedwaste_disposeddisposal_methodcollection_efficiencywaste_disposed_imputeddisposal_method_imputed
0Hyderabad20186923388Biodegradable10869493063.572329Incineration83.9593063.572329Incineration
1Hyderabad20182734489Plastic218458138718.912056Recycling78.37138718.912056Recycling
2Hyderabad20187704212E-Waste180203117132.560216Recycling86.04117132.560216Recycling
3Hyderabad20187904852Metal57694919.223821Landfill97.544919.223821Landfill
4Hyderabad20183844769Paper103119767.342686Recycling84.709767.342686Recycling
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"display(df\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"urban_body\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Hyderabad\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 2018,\n \"max\": 2018,\n \"num_unique_values\": 1,\n \"samples\": [\n 2018\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"population\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2373616,\n \"min\": 2734489,\n \"max\": 7904852,\n \"num_unique_values\": 5,\n \"samples\": [\n 2734489\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"waste_type\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Plastic\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_waste_generated\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 96636,\n \"min\": 5769,\n \"max\": 218458,\n \"num_unique_values\": 5,\n \"samples\": [\n 218458\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"waste_disposed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 61850.98048036466,\n \"min\": 4919.223821022559,\n \"max\": 138718.91205591924,\n \"num_unique_values\": 5,\n \"samples\": [\n 138718.91205591924\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"disposal_method\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"Incineration\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"collection_efficiency\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.021584578996396,\n \"min\": 78.37,\n \"max\": 97.54,\n \"num_unique_values\": 5,\n \"samples\": [\n 78.37\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"waste_disposed_imputed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 61850.98048036466,\n \"min\": 4919.223821022559,\n \"max\": 138718.91205591924,\n \"num_unique_values\": 5,\n \"samples\": [\n 138718.91205591924\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"disposal_method_imputed\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"Incineration\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#**Q4: Group waste data by urban bodies (BL-4)**" + ], + "metadata": { + "id": "SGCtKz0oAX_H" + } + }, + { + "cell_type": "markdown", + "source": [ + "Explanation\n", + "\n", + "The code groups the dataset by the urban body column, which represents different cities or municipalities.\n", + "\n", + "Then, it calculates aggregate values for each group — such as the total waste generated, total waste disposed, and average collection efficiency.\n", + "\n", + "It also computes per capita waste generation by dividing the total waste generated by the latest recorded population of each urban body.\n", + "\n", + "This grouping provides a summary view of waste management performance for each city, making it easier to compare efficiency and output across different urban areas." + ], + "metadata": { + "id": "S8QAFd5cAhFz" + } + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "\n", + "# Load dataset\n", + "CSV_PATH = '/content/urban_waste_data.csv'\n", + "df = pd.read_csv(CSV_PATH)\n", + "\n", + "# Q4: Group and aggregate\n", + "agg = df.groupby('urban_body').agg(\n", + " total_generated=('total_waste_generated', 'sum'),\n", + " total_disposed=('waste_disposed', 'sum'),\n", + " mean_collection_efficiency=('collection_efficiency', 'mean'),\n", + " population_latest=('population', 'last')\n", + ").reset_index()\n", + "\n", + "# Calculate per-capita generation\n", + "agg['per_capita_generation'] = agg['total_generated'] / agg['population_latest']\n", + "\n", + "display(agg.sort_values('total_generated', ascending=False))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "Ly5tEYaC2LNm", + "outputId": "c7b0ce57-e4eb-46ce-f715-7390de0c6e86" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " urban_body total_generated total_disposed mean_collection_efficiency \\\n", + "8 Mumbai 4761404 3.469207e+06 77.501143 \n", + "4 Hyderabad 4571273 3.332878e+06 80.600286 \n", + "3 Delhi 4511459 3.106791e+06 79.987429 \n", + "0 Ahmedabad 4457636 3.329175e+06 80.821714 \n", + "7 Lucknow 4369371 3.059458e+06 82.858000 \n", + "1 Bengaluru 4320643 3.303948e+06 78.850000 \n", + "5 Jaipur 4307288 3.311632e+06 80.970286 \n", + "2 Chennai 4158077 2.957547e+06 81.904286 \n", + "9 Pune 4049398 2.915668e+06 79.159714 \n", + "6 Kolkata 4046526 2.968780e+06 80.285714 \n", + "\n", + " population_latest per_capita_generation \n", + "8 2089228 2.279026 \n", + "4 3039448 1.503981 \n", + "3 4603022 0.980108 \n", + "0 7357658 0.605850 \n", + "7 8496198 0.514274 \n", + "1 6848564 0.630883 \n", + "5 3273939 1.315629 \n", + "2 8941136 0.465050 \n", + "9 5705597 0.709724 \n", + "6 3837920 1.054354 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
urban_bodytotal_generatedtotal_disposedmean_collection_efficiencypopulation_latestper_capita_generation
8Mumbai47614043.469207e+0677.50114320892282.279026
4Hyderabad45712733.332878e+0680.60028630394481.503981
3Delhi45114593.106791e+0679.98742946030220.980108
0Ahmedabad44576363.329175e+0680.82171473576580.605850
7Lucknow43693713.059458e+0682.85800084961980.514274
1Bengaluru43206433.303948e+0678.85000068485640.630883
5Jaipur43072883.311632e+0680.97028632739391.315629
2Chennai41580772.957547e+0681.90428689411360.465050
9Pune40493982.915668e+0679.15971457055970.709724
6Kolkata40465262.968780e+0680.28571438379201.054354
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"display(agg\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"urban_body\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"Pune\",\n \"Hyderabad\",\n \"Bengaluru\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_generated\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 230444,\n \"min\": 4046526,\n \"max\": 4761404,\n \"num_unique_values\": 10,\n \"samples\": [\n 4049398,\n 4571273,\n 4320643\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_disposed\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 195963.2386130693,\n \"min\": 2915668.280577688,\n \"max\": 3469207.3513263282,\n \"num_unique_values\": 10,\n \"samples\": [\n 2915668.280577688,\n 3332877.9913053266,\n 3303947.7157039074\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mean_collection_efficiency\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.537046856328317,\n \"min\": 77.50114285714285,\n \"max\": 82.858,\n \"num_unique_values\": 10,\n \"samples\": [\n 79.15971428571429,\n 80.60028571428572,\n 78.85\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"population_latest\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2410056,\n \"min\": 2089228,\n \"max\": 8941136,\n \"num_unique_values\": 10,\n \"samples\": [\n 5705597,\n 3039448,\n 6848564\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"per_capita_generation\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5667148654713653,\n \"min\": 0.4650501904903359,\n \"max\": 2.2790255539366693,\n \"num_unique_values\": 10,\n \"samples\": [\n 0.7097238027852301,\n 1.503981315028255,\n 0.6308830581126204\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#**Q5: Visualize trends in waste generation and disposal (BL-5)**" + ], + "metadata": { + "id": "0qHZ8_gNU-X1" + } + }, + { + "cell_type": "markdown", + "source": [ + "The code analyzes how waste generation and disposal have changed over time for each urban body. It first aggregates the total waste generated and disposed for every city in each year. Then, it creates clear line plots showing trends — one for total waste generated and another for total waste disposed. If disposal data is missing, it skips that graph and informs the user. Finally, it plots overall trends across all cities combined, helping visualize whether waste disposal keeps pace with generation and showing changes in waste management efficiency over the years." + ], + "metadata": { + "id": "hGlM_OUZVCjz" + } + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load dataset\n", + "CSV_PATH = '/content/urban_waste_data.csv'\n", + "df = pd.read_csv(CSV_PATH)\n", + "\n", + "# Q5: Trend visualization\n", + "SPLIT_BY_URBAN_BODY = False # change to True to see each city separately\n", + "\n", + "# 1) Overall totals by year\n", + "yearly = df.groupby('year', as_index=False).agg(\n", + " total_generated=('total_waste_generated', 'sum'),\n", + " total_disposed=('waste_disposed', 'sum')\n", + ")\n", + "\n", + "# Plot overall trends\n", + "plt.figure()\n", + "plt.plot(yearly['year'], yearly['total_generated'], marker='o', label='Total Generated')\n", + "plt.plot(yearly['year'], yearly['total_disposed'], marker='o', label='Total Disposed')\n", + "plt.title('Overall Waste Generation vs Disposal Over Time')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Tonnage')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n", + "# 2) Optional: per-urban-body plots\n", + "if SPLIT_BY_URBAN_BODY:\n", + " yearly_city = df.groupby(['urban_body','year'], as_index=False).agg(\n", + " total_generated=('total_waste_generated', 'sum'),\n", + " total_disposed=('waste_disposed', 'sum')\n", + " )\n", + " for metric in ['total_generated', 'total_disposed']:\n", + " plt.figure()\n", + " for city, grp in yearly_city.groupby('urban_body'):\n", + " plt.plot(grp['year'], grp[metric], marker='o', label=city)\n", + " plt.title(f'{metric.replace(\"_\", \" \").title()} by Urban Body Over Time')\n", + " plt.xlabel('Year')\n", + " plt.ylabel('Tonnage')\n", + " plt.legend()\n", + " plt.grid(True)\n", + " plt.show()" + ], + "metadata": { + "id": "5F-fAtgmVHTE", + "outputId": "6f0e0e79-c7ae-4c00-974a-64bbb1b7b253", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + } + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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Xq9Onz6tevfurdzc3FSVKlXUjBkz8hzT1HOyVpLclDOBgYGqRo0adyxTo0YNVa1aNaWUUmlpacrV1VU999xzecrdd999qkGDBobtgwcPKg8PDxUWFqamT5+uZs2apTp06KB0Op1asWKFoVzul0ZYWJjq2LGj+vTTTw2/mJYuXaqaNGmiJkyYoObOnavefPNN5eXlpYKDg9X169cNx7jb5EYppVq3bm1U7vTp0wpQ27dvV2+//bYKDw83PLd3714FqOnTpyultA/lWrVqqddff13NmTNHTZ48WVWtWlV5eHioc+fOGV43d+5cBaj+/furOXPmqI8//lg9+eSTasyYMUoppfbt26cGDx6sAPXRRx+p+fPnq/nz5xtaLN555x2l0+nUwIED1ezZs1VkZKTy8fFRNWrUUFeuXLnj+QUGBqratWsXWg+3KurfLjw8XN1///3q008/VS+//LKytbXN00rw/fffK51Op7p166Y+/fRTNX36dFWjRg3l6elplMQNHz5cOTo6qlq1aqnhw4erL774Qn3//fdKKaVeeOEF1b17dzV16lQ1Z84c9eSTTypbW1vVv39/w+u3b9+uunTpogBDPc6fP9/w/O0f/AcPHlSVKlVSAQEBasqUKeq9995TISEhytHR0SghLMq53i4uLk7pdDr1f//3f3meq1mzpurRo4dSSqmMjAwVEhKiAgMD1TvvvKO++uorFRkZqVq2bJlvYnSrwpKb+fPnK0DNmjXLsO/25Kaw61Sp/74oGzVqpHr16qVmzZqlHn30UQWoxx57LE9Mucf77LPP1LBhwxSg+vbtayiTmJiovLy8VN26ddX777+vvvzyS/XWW2+p+vXrGx2rWrVq6rnnnlOzZs1SH374oWrVqpUC1OrVq43KmZLcvPnmmwX+SLv9PKOiopRSSj3xxBPK09NTZWRkGJX77rvvFKB2796tlNJ+AHXt2lW5uLiosWPHqjlz5qjnn39e2dnZGZL0XICqX7++8vX1VZGRkeqzzz5Te/bsuWPsue4muWnatKkaPHiwmj17turRo4cC1Icffqjq1aunnn32WTV79mzVtm1bBag///zT8PqinJO1kuSmHLl69aoCCr04e/furQCVkpKilFJq8ODBys/PT2VnZxvKxMfHKxsbGzV58mTDvgceeEA1atTIKLPX6/WqTZs2qk6dOoZ9uV8a7dq1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WLt2bb7DUvNrlcmV+zc+ePBgnufuueceAMOX0a3vB0X72xU0XFbdnCsk95jz58/H398/T7nbh63e2iKWKycnhy5dunD58mVee+01QkNDqVSpEufOnWPEiBGlNo9LYedakMDAQNq3b8+SJUt488032blzJ6dPn2b69OlG5T744ANGjBjBzz//zIYNGxgzZgzTpk1j586d+SZ8psq9Bm7/292qONfpra1Zpuy/9flly5axc+dOfvnlF9avX88TTzzBBx98wM6dO3F1dWXLli307t2bDh06MHv2bAICArC3t2fevHksWLCgkDPP/zxXrlzJ/v376dChQ75lcj8Xb21VGTRoEHPmzGHt2rX07duXJUuWEBoaSpMmTQxl9Ho9jRo14sMPP8z3uEFBQUbb+X3ulZT8rl1TrueinpM1qtDJzYMPPsiDDz5Y4PMZGRm89dZbLFy4kKtXr9KwYUOmT59umCH0yJEjfP755xw8eNDwS7Kks/qePXvy5ZdfsnXr1nznbdmyZQunTp3i6aefNto/cOBAvvvuOzZu3MiRI0dQShn9eslt4re3t6dz5853Hd+yZcsYPnw4H3zwgWFfenq62Se6a9euHd988w0bNmwgJyeHNm3aGJ5r06YNCxcuNNyGu7Weli1bxn333cfXX39tdLyrV6/m+TVUqVIlBg4cyMCBA8nMzOThhx/m3Xff5Y033sDJyanAL4FatWqhlCIkJMTwS6koevTowVdffcWuXbto1apVoeXN9be7Va1atQDw8/O762MeOHCAY8eO8d133zFs2DDD/qioqDxlC/tCzeXr64uLiwvR0dF5njt69Cg2NjZm/eAeOHAgzz33HNHR0SxevBgXFxd69eqVp1yjRo1o1KgRb7/9Ntu3b6dt27Z88cUXvPPOO3f93vPnz0en09GlS5c7livsOs0VExNj9Pl0/Phx9Hq9YSK54OBg9Ho9MTEx1K9f31AuMTGRq1ev5plT6d577+Xee+/l3XffZcGCBQwdOpRFixYxcuRIli9fjpOTE+vXr8fR0dHwmnnz5t1VXfTs2ZNp06bx/fff55vc5OTksGDBAry8vAytuKDNNxMQEMDixYtp164dv//+O2+99ZbRa2vVqsW+fft44IEHTL4OyzprPKeiqtC3pQrz/PPPs2PHDhYtWsT+/ft55JFH6Natm6HJ/pdffqFmzZqsXr2a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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "#**Summary of Findings**\n", + "\n", + "Missing waste disposal data were successfully handled using median and mode imputation, ensuring data completeness.\n", + "\n", + "The average waste generation per capita provided a single, comparable indicator of waste output efficiency across urban bodies.\n", + "\n", + "Distinct differences were observed among cities in terms of total waste generated, disposal efficiency, and collection performance.\n", + "\n", + "Visual analysis revealed clear yearly trends in both waste generation and disposal levels.\n", + "\n", + "#**Challenges Encountered**\n", + "\n", + "Some records contained inconsistent or missing disposal values, requiring careful imputation to maintain accuracy.\n", + "\n", + "Differences in population sizes among urban bodies affected per-capita comparisons.\n", + "\n", + "Managing overlapping labels in multi-year or multi-city visualizations was necessary for readability.\n", + "\n", + "#**Future Scope**\n", + "\n", + "Incorporate more recent and multi-year datasets to analyze long-term waste management trends.\n", + "\n", + "Integrate spatial mapping or geographic data to visualize regional waste patterns.\n", + "\n", + "Develop interactive dashboards (e.g., using Plotly or Power BI) to support decision-making and policy evaluation." + ], + "metadata": { + "id": "tO8KlQxuBIi_" + } + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "udGfNkbvBJOW" + }, + "execution_count": 6, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index 9bda83f..708bc41 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@

1. Add your details:

    -
  • Name:
  • -
  • Roll Number:
  • -
  • Branch:
  • +
  • Name:Sahasthra
  • +
  • Roll Number:160124737026
  • +
  • Branch: IT