diff --git a/CodTech(Task_1).ipynb b/CodTech(Task_1).ipynb new file mode 100644 index 0000000..8182c01 --- /dev/null +++ b/CodTech(Task_1).ipynb @@ -0,0 +1,178 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyM2QzlaV65g/ZAYnvM08g4J", + "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": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 527 + }, + "id": "-BX2RaY4Rb8j", + "outputId": "82bea369-8c0f-461d-a114-5cd406a61be5" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mean Squared Error: 0.5558915986952422\n", + "R-squared: 0.5757877060324524\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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iRsiIiJSKMVP9iUiIiKyhokMERERqZaiVy0RqVm5QUBq1nVcKShBZEgAOidEwNeHG5cSEcmJiQyRC2zNyMb8b44jW19iuixaF4C5QxMxMCnag5EREXkXDi0RyWxrRjaeWZVmlsQAQI6+BM+sSsPWjGwPRUZE5H2YyBDJqNwgYP43x2FpvZ3xsvnfHEe5gSvyiIjkwESGSEapWder9cRUJgDI1pcgNeu6+4IiIvJiTGSIZHSlwHoS40g7IiKyjYkMkYwiQwJkbUdERLYxkSGSUeeECETrAmBtkbUGFauXOidEuDMsIiKvxUSGSEa+PhrMHZoIANWSGePfc4cmsp4MEZFMmMgQyWxgUjSWjm2PKJ358FGULgBLx7ZnHRkiIhmxIB6RCwxMikb/xChW9iUicjEmMkQu4uujQbcmdTwdBhGRV+PQEhEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRajGRISIiItViIkNERESqxUSGiIiIVIuJDBEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRajGRISIiItViIkNERESqxUSGiIiIVIuJDBEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRajGRISIiItViIkNERESqxUSGiIiIVIuJDBEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRank0kdm9ezeGDh2KmJgYaDQabNq0yex6QRAwZ84cREdHIzAwEMnJyTh9+rRngiUiIiLF8WgiU1RUhDZt2uD999+3eP1bb72F//znP1i2bBkOHDiA4OBgDBgwACUlJW6OlIiIiJSolicffNCgQRg0aJDF6wRBwOLFi/HKK6/gvvvuAwD897//Rf369bFp0yaMHDnSnaESERGRAil2jkxWVhZycnKQnJxsukyn06FLly7Yt2+f1duVlpYiPz/f7B8RERF5J8UmMjk5OQCA+vXrm11ev35903WWpKSkQKfTmf7Fxsa6NE4iIiLyHMUmMo6aNWsW9Hq96d+FCxc8HRIRERG5iGITmaioKADA5cuXzS6/fPmy6TpLtFotQkNDzf4RERGRd1JsIpOQkICoqChs377ddFl+fj4OHDiAbt26eTAyIiIiUgqPrloqLCzEmTNnTH9nZWUhPT0dERERaNSoEaZPn47XXnsNzZo1Q0JCAmbPno2YmBjcf//9nguaiIiIFMOjicyhQ4dw9913m/6eMWMGAGDcuHFYuXIlXnrpJRQVFeHJJ59EXl4eevToga1btyIgIMBTIRMREZGCaARBEDwdhCvl5+dDp9NBr9dzvgwREZFKiD1+K3aODBEREZE9TGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWopOpEpLy/H7NmzkZCQgMDAQDRp0gQLFiyAIAieDo2IiIgUoJanA7Bl4cKFWLp0KT777DO0atUKhw4dwoQJE6DT6TB16lRPh0dEREQepuhE5pdffsF9992HIUOGAADi4+Oxdu1apKamejgyIiIiUgJFDy3ddddd2L59O06dOgUAOHr0KPbs2YNBgwZZvU1paSny8/PN/hEREZF3UnSPzMyZM5Gfn48WLVrA19cX5eXleP311zFmzBirt0lJScH8+fPdGCURERF5iqJ7ZL744gusXr0aa9asQVpaGj777DP8+9//xmeffWb1NrNmzYJerzf9u3DhghsjJiIiInfSCApeAhQbG4uZM2di8uTJpstee+01rFq1CidOnBB1H/n5+dDpdNDr9QgNDXVVqERERCQjscdvRffIFBcXw8fHPERfX18YDAYPRURERERKoug5MkOHDsXrr7+ORo0aoVWrVjhy5AjeeecdPPbYY54OjYiIiBRA0UNLBQUFmD17NjZu3IgrV64gJiYGo0aNwpw5c+Dv7y/qPji0REREpD5ij9+KTmTkwESGiIhIfbxijgwRERGRLUxkiIiISLWYyBAREZFqMZEhIiIi1WIiQ0RERKrFRIaIiIhUi4kMERERqRYTGSIiIlItRW9RQERERMpU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\n" + }, + "metadata": {} + } + ], + "source": [ + "\n", + "from sklearn.datasets import fetch_california_housing\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error, r2_score\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the California Housing dataset\n", + "california_housing = fetch_california_housing()\n", + "X = california_housing.data\n", + "y = california_housing.target\n", + "\n", + "# Split the data into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Create a Linear Regression model\n", + "model = LinearRegression()\n", + "\n", + "# Train the model\n", + "model.fit(X_train, y_train)\n", + "\n", + "# Make predictions on the test set\n", + "y_pred = model.predict(X_test)\n", + "\n", + "# Evaluate the model\n", + "mse = mean_squared_error(y_test, y_pred)\n", + "r2 = r2_score(y_test, y_pred)\n", + "\n", + "print(f\"Mean Squared Error: {mse}\")\n", + "print(f\"R-squared: {r2}\")\n", + "\n", + "# Visualize the results (optional)\n", + "plt.scatter(y_test, y_pred)\n", + "plt.xlabel(\"Actual Prices\")\n", + "plt.ylabel(\"Predicted Prices\")\n", + "plt.title(\"Actual Prices vs Predicted Prices\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "source": [ + "LINEAR REGRESSION ON HOUSEING PRICE" + ], + "metadata": { + "id": "p1EcKhzjR1Ea" + } + }, + { + "cell_type": "code", + "source": [ + "\n", + "def calculate_bmi(height, weight):\n", + " \"\"\"Calculates Body Mass Index (BMI).\"\"\"\n", + " height_m = height / 100 # Convert height from cm to meters\n", + " bmi = weight / (height_m * height_m)\n", + " return bmi\n", + "\n", + "# Get user input\n", + "height = float(input(\"Enter your height in centimeters: \"))\n", + "weight = float(input(\"Enter your weight in kilograms: \"))\n", + "\n", + "# Calculate BMI\n", + "bmi = calculate_bmi(height, weight)\n", + "\n", + "# Print BMI\n", + "print(f\"Your BMI is: {bmi:.2f}\")\n", + "\n", + "# Interpret BMI (you can add more detailed categories)\n", + "if bmi < 18.5:\n", + " print(\"You are underweight.\")\n", + "elif 18.5 <= bmi < 25:\n", + " print(\"You have a healthy weight.\")\n", + "elif 25 <= bmi < 30:\n", + " print(\"You are overweight.\")\n", + "else:\n", + " print(\"You are obese.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "O_r6OMU3SIYK", + "outputId": "8018e9d7-9149-4c8c-842e-87c0cbf5c41f" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Enter your height in centimeters: 45\n", + "Enter your weight in kilograms: 50\n", + "Your BMI is: 246.91\n", + "You are obese.\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "DVwdFh1FTjBa" + } + }, + { + "cell_type": "markdown", + "source": [ + "BMI TRACKER APP" + ], + "metadata": { + "id": "yiQ0MKZ4TjGP" + } + } + ] +} \ No newline at end of file diff --git a/Codtech(Task_1).ipynb b/Codtech(Task_1).ipynb new file mode 100644 index 0000000..07823f9 --- /dev/null +++ b/Codtech(Task_1).ipynb @@ -0,0 +1,162 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMN2qchgnY2vfa83Oz9RtOo", + "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": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 527 + }, + "id": "-BX2RaY4Rb8j", + "outputId": "82bea369-8c0f-461d-a114-5cd406a61be5" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mean Squared Error: 0.5558915986952422\n", + "R-squared: 0.5757877060324524\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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iRsiIiJSKMVP9iUiIiKyhokMERERqZaiVy0RqVm5QUBq1nVcKShBZEgAOidEwNeHG5cSEcmJiQyRC2zNyMb8b44jW19iuixaF4C5QxMxMCnag5EREXkXDi0RyWxrRjaeWZVmlsQAQI6+BM+sSsPWjGwPRUZE5H2YyBDJqNwgYP43x2FpvZ3xsvnfHEe5gSvyiIjkwESGSEapWder9cRUJgDI1pcgNeu6+4IiIvJiTGSIZHSlwHoS40g7IiKyjYkMkYwiQwJkbUdERLYxkSGSUeeECETrAmBtkbUGFauXOidEuDMsIiKvxUSGSEa+PhrMHZoIANWSGePfc4cmsp4MEZFMmMgQyWxgUjSWjm2PKJ358FGULgBLx7ZnHRkiIhmxIB6RCwxMikb/xChW9iUicjEmMkQu4uujQbcmdTwdBhGRV+PQEhEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRajGRISIiItViIkNERESqxUSGiIiIVIuJDBEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRajGRISIiItViIkNERESqxUSGiIiIVIuJDBEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRajGRISIiItViIkNERESqxUSGiIiIVIuJDBEREakWExkiIiJSLSYyREREpFpMZIiIiEi1mMgQERGRank0kdm9ezeGDh2KmJgYaDQabNq0yex6QRAwZ84cREdHIzAwEMnJyTh9+rRngiUiIiLF8WgiU1RUhDZt2uD999+3eP1bb72F//znP1i2bBkOHDiA4OBgDBgwACUlJW6OlIiIiJSolicffNCgQRg0aJDF6wRBwOLFi/HKK6/gvvvuAwD897//Rf369bFp0yaMHDnSnaESERGRAil2jkxWVhZycnKQnJxsukyn06FLly7Yt2+f1duVlpYiPz/f7B8RERF5J8UmMjk5OQCA+vXrm11ev35903WWpKSkQKfTmf7Fxsa6NE4iIiLyHMUmMo6aNWsW9Hq96d+FCxc8HRIRERG5iGITmaioKADA5cuXzS6/fPmy6TpLtFotQkNDzf4RERGRd1JsIpOQkICoqChs377ddFl+fj4OHDiAbt26eTAyIiIiUgqPrloqLCzEmTNnTH9nZWUhPT0dERERaNSoEaZPn47XXnsNzZo1Q0JCAmbPno2YmBjcf//9nguaiIiIFMOjicyhQ4dw9913m/6eMWMGAGDcuHFYuXIlXnrpJRQVFeHJJ59EXl4eevToga1btyIgIMBTIRMREZGCaARBEDwdhCvl5+dDp9NBr9dzvgwREZFKiD1+K3aODBEREZE9TGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWoxkSEiIiLVYiJDREREqsVEhoiIiFSLiQwRERGpFhMZIiIiUi0mMkRERKRaTGSIiIhItZjIEBERkWopOpEpLy/H7NmzkZCQgMDAQDRp0gQLFiyAIAieDo2IiIgUoJanA7Bl4cKFWLp0KT777DO0atUKhw4dwoQJE6DT6TB16lRPh0dEREQepuhE5pdffsF9992HIUOGAADi4+Oxdu1apKamejgyIiIiUgJFDy3ddddd2L59O06dOgUAOHr0KPbs2YNBgwZZvU1paSny8/PN/hEREZF3UnSPzMyZM5Gfn48WLVrA19cX5eXleP311zFmzBirt0lJScH8+fPdGCURERF5iqJ7ZL744gusXr0aa9asQVpaGj777DP8+9//xmeffWb1NrNmzYJerzf9u3DhghsjJiIiInfSCApeAhQbG4uZM2di8uTJpstee+01rFq1CidOnBB1H/n5+dDpdNDr9QgNDXVVqERERCQjscdvRffIFBcXw8fHPERfX18YDAYPRURERERKoug5MkOHDsXrr7+ORo0aoVWrVjhy5AjeeecdPPbYY54OjYiIiBRA0UNLBQUFmD17NjZu3IgrV64gJiYGo0aNwpw5c+Dv7y/qPji0REREpD5ij9+KTmTkwESGiIhIfbxijgwRERGRLUxkiIiISLWYyBAREZFqMZEhIiIi1WIiQ0RERKrFRIaIiIhUi4kMERERqRYTGSIiIlItRW9RQERERMpU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\n" + }, + "metadata": {} + } + ], + "source": [ + "\n", + "from sklearn.datasets import fetch_california_housing\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error, r2_score\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Load the California Housing dataset\n", + "california_housing = fetch_california_housing()\n", + "X = california_housing.data\n", + "y = california_housing.target\n", + "\n", + "# Split the data into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Create a Linear Regression model\n", + "model = LinearRegression()\n", + "\n", + "# Train the model\n", + "model.fit(X_train, y_train)\n", + "\n", + "# Make predictions on the test set\n", + "y_pred = model.predict(X_test)\n", + "\n", + "# Evaluate the model\n", + "mse = mean_squared_error(y_test, y_pred)\n", + "r2 = r2_score(y_test, y_pred)\n", + "\n", + "print(f\"Mean Squared Error: {mse}\")\n", + "print(f\"R-squared: {r2}\")\n", + "\n", + "# Visualize the results (optional)\n", + "plt.scatter(y_test, y_pred)\n", + "plt.xlabel(\"Actual Prices\")\n", + "plt.ylabel(\"Predicted Prices\")\n", + "plt.title(\"Actual Prices vs Predicted Prices\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "source": [ + "LINEAR REGRESSION ON HOUSEING PRICE" + ], + "metadata": { + "id": "p1EcKhzjR1Ea" + } + }, + { + "cell_type": "code", + "source": [ + "\n", + "def calculate_bmi(height, weight):\n", + " \"\"\"Calculates Body Mass Index (BMI).\"\"\"\n", + " height_m = height / 100 # Convert height from cm to meters\n", + " bmi = weight / (height_m * height_m)\n", + " return bmi\n", + "\n", + "# Get user input\n", + "height = float(input(\"Enter your height in centimeters: \"))\n", + "weight = float(input(\"Enter your weight in kilograms: \"))\n", + "\n", + "# Calculate BMI\n", + "bmi = calculate_bmi(height, weight)\n", + "\n", + "# Print BMI\n", + "print(f\"Your BMI is: {bmi:.2f}\")\n", + "\n", + "# Interpret BMI (you can add more detailed categories)\n", + "if bmi < 18.5:\n", + " print(\"You are underweight.\")\n", + "elif 18.5 <= bmi < 25:\n", + " print(\"You have a healthy weight.\")\n", + "elif 25 <= bmi < 30:\n", + " print(\"You are overweight.\")\n", + "else:\n", + " print(\"You are obese.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "O_r6OMU3SIYK", + "outputId": "8018e9d7-9149-4c8c-842e-87c0cbf5c41f" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Enter your height in centimeters: 45\n", + "Enter your weight in kilograms: 50\n", + "Your BMI is: 246.91\n", + "You are obese.\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Kavya/README.md b/Kavya/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Kavya/README.md @@ -0,0 +1 @@ + diff --git a/Kavya/Task1 b/Kavya/Task1 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Kavya/Task1 @@ -0,0 +1 @@ + diff --git a/Kavya/j_kavya/task10/task10.py b/Kavya/j_kavya/task10/task10.py new file mode 100644 index 0000000..2fee7c7 --- /dev/null +++ b/Kavya/j_kavya/task10/task10.py @@ -0,0 +1,43 @@ +import seaborn as sns +import pandas as pd +import matplotlib.pyplot as plt + +# Load the Iris dataset from Seaborn +iris = sns.load_dataset("iris") +numeric_iris = iris.drop(columns='species') + +# Display the first few rows of the dataset +print("First few rows of the dataset:") +print(iris.head()) + +# Summary statistics +print("\nSummary statistics:") +print(iris.describe()) + +# Checking for missing values +print("\nMissing values:") +print(iris.isnull().sum()) + +# Visualizations +# Pairplot +sns.pairplot(iris, hue="species") +plt.title("Pairplot of Iris Dataset") +plt.show() + +# Boxplot +plt.figure(figsize=(10, 6)) +sns.boxplot(data=iris, orient="h") +plt.title("Boxplot of Iris Dataset") +plt.show() + +# Histograms +plt.figure(figsize=(10, 6)) +iris.hist() +plt.suptitle("Histograms of Iris Dataset") +plt.show() + +# Correlation heatmap +plt.figure(figsize=(8, 6)) +sns.heatmap(numeric_iris.corr(), annot=True, cmap="coolwarm") +plt.title("Correlation Heatmap of Iris Dataset") +plt.show() diff --git a/Kavya/j_kavya/task11/task11.py b/Kavya/j_kavya/task11/task11.py new file mode 100644 index 0000000..85bc4e1 --- /dev/null +++ b/Kavya/j_kavya/task11/task11.py @@ -0,0 +1,40 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error + +# Fetch the Boston housing dataset from the original source +data_url = "http://lib.stat.cmu.edu/datasets/boston" +raw_df = pd.read_csv(data_url, sep=r"\s+", skiprows=22, header=None) +data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]]) +target = raw_df.values[1::2, 2] + +# Split the dataset into training and testing sets +X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42) + +# Create and train the linear regression model +model = LinearRegression() +model.fit(X_train, y_train) + +# Make predictions on the training and testing sets +y_train_pred = model.predict(X_train) +y_test_pred = model.predict(X_test) + +# Calculate the mean squared error for training and testing sets +train_mse = mean_squared_error(y_train, y_train_pred) +test_mse = mean_squared_error(y_test, y_test_pred) + +print("Train MSE:", train_mse) +print("Test MSE:", test_mse) + +# Plot residuals +plt.scatter(y_train_pred, y_train_pred - y_train, c='blue', marker='o', label='Training data') +plt.scatter(y_test_pred, y_test_pred - y_test, c='green', marker='s', label='Test data') +plt.xlabel('Predicted values') +plt.ylabel('Residuals') +plt.legend(loc='upper left') +plt.hlines(y=0, xmin=min(y_train_pred.min(), y_test_pred.min()), xmax=max(y_train_pred.max(), y_test_pred.max()), color='red') +plt.title('Residuals plot') +plt.show() diff --git a/Kavya/j_kavya/task12/task12.py b/Kavya/j_kavya/task12/task12.py new file mode 100644 index 0000000..98c044f --- /dev/null +++ b/Kavya/j_kavya/task12/task12.py @@ -0,0 +1,66 @@ +from PIL import Image +import os + +def get_size_format(b, factor=1024, suffix="B"): + """ + Scale bytes to its proper byte format. + e.g: 1253656 => '1.20MB', 1253656678 => '1.17GB' + """ + for unit in ["", "K", "M", "G", "T", "P", "E", "Z"]: + if b < factor: + return f"{b:.2f}{unit}{suffix}" + b /= factor + return f"{b:.2f}Y{suffix}" + +def compress_img(image_name, new_size_ratio=0.9, quality=90, width=None, height=None, to_jpg=True): + try: + # Load the image into memory + img = Image.open(image_name) + + # Print the original image shape + print("[*] Image shape:", img.size) + + # Get the original image size in bytes + image_size = os.path.getsize(image_name) + print("[*] Size before compression:", get_size_format(image_size)) + + if width and height: + # If width and height are set, resize with them instead + img = img.resize((width, height), Image.LANCZOS) + elif new_size_ratio < 1.0: + # If resizing ratio is below 1.0, multiply width & height with this ratio to reduce image size + img = img.resize((int(img.size[0] * new_size_ratio), int(img.size[1] * new_size_ratio)), Image.LANCZOS) + + # Split the filename and extension + filename, ext = os.path.splitext(image_name) + + # Make a new filename appending "_compressed" to the original file name + if to_jpg: + # Change the extension to JPEG + new_filename = f"{filename}_compressed.jpg" + # Ensure image is in RGB mode for JPEG + if img.mode in ("RGBA", "LA"): + img = img.convert("RGB") + else: + # Retain the same extension of the original image + new_filename = f"{filename}_compressed{ext}" + + # Save the compressed image + img.save(new_filename, optimize=True, quality=quality) + + # Print the new image shape + print("[+] New Image shape:", img.size) + + # Get the new image size in bytes + new_image_size = os.path.getsize(new_filename) + print("[*] Size after compression:", get_size_format(new_image_size)) + print(f"[*] Compressed image saved as: {new_filename}") + + except FileNotFoundError: + print("Error: The file was not found.") + except OSError as e: + print(f"Error: {e}") + +# Example usage: +input_image = input("Enter the path to the image: ") +compress_img(input_image, new_size_ratio=0.8, quality=80, width=800, height=600) diff --git a/Kavya/j_kavya/task9/task9.py b/Kavya/j_kavya/task9/task9.py new file mode 100644 index 0000000..fcd4fc3 --- /dev/null +++ b/Kavya/j_kavya/task9/task9.py @@ -0,0 +1,37 @@ +from PIL import Image +import os + +def convert_image(input_path, output_path, output_format): + try: + # Open the image + with Image.open(input_path) as img: + # Check if the image has an alpha channel and convert it to RGB if necessary + if output_format == 'JPEG' and img.mode == 'RGBA': + img = img.convert('RGB') + + # Convert and save the image to the desired format + img.save(output_path, format=output_format) + print(f"Image converted successfully to {output_format} format.") + except Exception as e: + print(f"An error occurred: {e}") + +def main(): + input_path = input("Enter the path to the input image: ") + output_format = input("Enter the desired output format (e.g., JPEG, PNG, BMP, GIF): ").upper() + + # Validate output format + if output_format not in ['JPEG', 'PNG', 'BMP', 'GIF']: + print("Invalid output format. Please choose from JPEG, PNG, BMP, or GIF.") + return + + # Extract the file name and extension + file_name, file_extension = os.path.splitext(input_path) + + # Set the output path + output_path = f"{file_name}_converted.{output_format.lower()}" + + # Convert the image + convert_image(input_path, output_path, output_format) + +if __name__ == "__main__": + main() diff --git a/M.Bhavya/Task10/TASK-10.py b/M.Bhavya/Task10/TASK-10.py new file mode 100644 index 0000000..2fee7c7 --- /dev/null +++ b/M.Bhavya/Task10/TASK-10.py @@ -0,0 +1,43 @@ +import seaborn as sns +import pandas as pd +import matplotlib.pyplot as plt + +# Load the Iris dataset from Seaborn +iris = sns.load_dataset("iris") +numeric_iris = iris.drop(columns='species') + +# Display the first few rows of the dataset +print("First few rows of the dataset:") +print(iris.head()) + +# Summary statistics +print("\nSummary statistics:") +print(iris.describe()) + +# Checking for missing values +print("\nMissing values:") +print(iris.isnull().sum()) + +# Visualizations +# Pairplot +sns.pairplot(iris, hue="species") +plt.title("Pairplot of Iris Dataset") +plt.show() + +# Boxplot +plt.figure(figsize=(10, 6)) +sns.boxplot(data=iris, orient="h") +plt.title("Boxplot of Iris Dataset") +plt.show() + +# Histograms +plt.figure(figsize=(10, 6)) +iris.hist() +plt.suptitle("Histograms of Iris Dataset") +plt.show() + +# Correlation heatmap +plt.figure(figsize=(8, 6)) +sns.heatmap(numeric_iris.corr(), annot=True, cmap="coolwarm") +plt.title("Correlation Heatmap of Iris Dataset") +plt.show() diff --git a/M.Bhavya/Task11/TASK-11.py b/M.Bhavya/Task11/TASK-11.py new file mode 100644 index 0000000..85bc4e1 --- /dev/null +++ b/M.Bhavya/Task11/TASK-11.py @@ -0,0 +1,40 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error + +# Fetch the Boston housing dataset from the original source +data_url = "http://lib.stat.cmu.edu/datasets/boston" +raw_df = pd.read_csv(data_url, sep=r"\s+", skiprows=22, header=None) +data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]]) +target = raw_df.values[1::2, 2] + +# Split the dataset into training and testing sets +X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42) + +# Create and train the linear regression model +model = LinearRegression() +model.fit(X_train, y_train) + +# Make predictions on the training and testing sets +y_train_pred = model.predict(X_train) +y_test_pred = model.predict(X_test) + +# Calculate the mean squared error for training and testing sets +train_mse = mean_squared_error(y_train, y_train_pred) +test_mse = mean_squared_error(y_test, y_test_pred) + +print("Train MSE:", train_mse) +print("Test MSE:", test_mse) + +# Plot residuals +plt.scatter(y_train_pred, y_train_pred - y_train, c='blue', marker='o', label='Training data') +plt.scatter(y_test_pred, y_test_pred - y_test, c='green', marker='s', label='Test data') +plt.xlabel('Predicted values') +plt.ylabel('Residuals') +plt.legend(loc='upper left') +plt.hlines(y=0, xmin=min(y_train_pred.min(), y_test_pred.min()), xmax=max(y_train_pred.max(), y_test_pred.max()), color='red') +plt.title('Residuals plot') +plt.show() diff --git a/M.Bhavya/Task12/TASK-12.py b/M.Bhavya/Task12/TASK-12.py new file mode 100644 index 0000000..98c044f --- /dev/null +++ b/M.Bhavya/Task12/TASK-12.py @@ -0,0 +1,66 @@ +from PIL import Image +import os + +def get_size_format(b, factor=1024, suffix="B"): + """ + Scale bytes to its proper byte format. + e.g: 1253656 => '1.20MB', 1253656678 => '1.17GB' + """ + for unit in ["", "K", "M", "G", "T", "P", "E", "Z"]: + if b < factor: + return f"{b:.2f}{unit}{suffix}" + b /= factor + return f"{b:.2f}Y{suffix}" + +def compress_img(image_name, new_size_ratio=0.9, quality=90, width=None, height=None, to_jpg=True): + try: + # Load the image into memory + img = Image.open(image_name) + + # Print the original image shape + print("[*] Image shape:", img.size) + + # Get the original image size in bytes + image_size = os.path.getsize(image_name) + print("[*] Size before compression:", get_size_format(image_size)) + + if width and height: + # If width and height are set, resize with them instead + img = img.resize((width, height), Image.LANCZOS) + elif new_size_ratio < 1.0: + # If resizing ratio is below 1.0, multiply width & height with this ratio to reduce image size + img = img.resize((int(img.size[0] * new_size_ratio), int(img.size[1] * new_size_ratio)), Image.LANCZOS) + + # Split the filename and extension + filename, ext = os.path.splitext(image_name) + + # Make a new filename appending "_compressed" to the original file name + if to_jpg: + # Change the extension to JPEG + new_filename = f"{filename}_compressed.jpg" + # Ensure image is in RGB mode for JPEG + if img.mode in ("RGBA", "LA"): + img = img.convert("RGB") + else: + # Retain the same extension of the original image + new_filename = f"{filename}_compressed{ext}" + + # Save the compressed image + img.save(new_filename, optimize=True, quality=quality) + + # Print the new image shape + print("[+] New Image shape:", img.size) + + # Get the new image size in bytes + new_image_size = os.path.getsize(new_filename) + print("[*] Size after compression:", get_size_format(new_image_size)) + print(f"[*] Compressed image saved as: {new_filename}") + + except FileNotFoundError: + print("Error: The file was not found.") + except OSError as e: + print(f"Error: {e}") + +# Example usage: +input_image = input("Enter the path to the image: ") +compress_img(input_image, new_size_ratio=0.8, quality=80, width=800, height=600) diff --git a/M.Bhavya/Task9/TASK-9.py b/M.Bhavya/Task9/TASK-9.py new file mode 100644 index 0000000..fcd4fc3 --- /dev/null +++ b/M.Bhavya/Task9/TASK-9.py @@ -0,0 +1,37 @@ +from PIL import Image +import os + +def convert_image(input_path, output_path, output_format): + try: + # Open the image + with Image.open(input_path) as img: + # Check if the image has an alpha channel and convert it to RGB if necessary + if output_format == 'JPEG' and img.mode == 'RGBA': + img = img.convert('RGB') + + # Convert and save the image to the desired format + img.save(output_path, format=output_format) + print(f"Image converted successfully to {output_format} format.") + except Exception as e: + print(f"An error occurred: {e}") + +def main(): + input_path = input("Enter the path to the input image: ") + output_format = input("Enter the desired output format (e.g., JPEG, PNG, BMP, GIF): ").upper() + + # Validate output format + if output_format not in ['JPEG', 'PNG', 'BMP', 'GIF']: + print("Invalid output format. Please choose from JPEG, PNG, BMP, or GIF.") + return + + # Extract the file name and extension + file_name, file_extension = os.path.splitext(input_path) + + # Set the output path + output_path = f"{file_name}_converted.{output_format.lower()}" + + # Convert the image + convert_image(input_path, output_path, output_format) + +if __name__ == "__main__": + main() diff --git a/jagannati_kavya/task10/TASK-10.py b/jagannati_kavya/task10/TASK-10.py new file mode 100644 index 0000000..2fee7c7 --- /dev/null +++ b/jagannati_kavya/task10/TASK-10.py @@ -0,0 +1,43 @@ +import seaborn as sns +import pandas as pd +import matplotlib.pyplot as plt + +# Load the Iris dataset from Seaborn +iris = sns.load_dataset("iris") +numeric_iris = iris.drop(columns='species') + +# Display the first few rows of the dataset +print("First few rows of the dataset:") +print(iris.head()) + +# Summary statistics +print("\nSummary statistics:") +print(iris.describe()) + +# Checking for missing values +print("\nMissing values:") +print(iris.isnull().sum()) + +# Visualizations +# Pairplot +sns.pairplot(iris, hue="species") +plt.title("Pairplot of Iris Dataset") +plt.show() + +# Boxplot +plt.figure(figsize=(10, 6)) +sns.boxplot(data=iris, orient="h") +plt.title("Boxplot of Iris Dataset") +plt.show() + +# Histograms +plt.figure(figsize=(10, 6)) +iris.hist() +plt.suptitle("Histograms of Iris Dataset") +plt.show() + +# Correlation heatmap +plt.figure(figsize=(8, 6)) +sns.heatmap(numeric_iris.corr(), annot=True, cmap="coolwarm") +plt.title("Correlation Heatmap of Iris Dataset") +plt.show() diff --git a/jagannati_kavya/task11/Task11/TASK-11.py b/jagannati_kavya/task11/Task11/TASK-11.py new file mode 100644 index 0000000..85bc4e1 --- /dev/null +++ b/jagannati_kavya/task11/Task11/TASK-11.py @@ -0,0 +1,40 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error + +# Fetch the Boston housing dataset from the original source +data_url = "http://lib.stat.cmu.edu/datasets/boston" +raw_df = pd.read_csv(data_url, sep=r"\s+", skiprows=22, header=None) +data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]]) +target = raw_df.values[1::2, 2] + +# Split the dataset into training and testing sets +X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42) + +# Create and train the linear regression model +model = LinearRegression() +model.fit(X_train, y_train) + +# Make predictions on the training and testing sets +y_train_pred = model.predict(X_train) +y_test_pred = model.predict(X_test) + +# Calculate the mean squared error for training and testing sets +train_mse = mean_squared_error(y_train, y_train_pred) +test_mse = mean_squared_error(y_test, y_test_pred) + +print("Train MSE:", train_mse) +print("Test MSE:", test_mse) + +# Plot residuals +plt.scatter(y_train_pred, y_train_pred - y_train, c='blue', marker='o', label='Training data') +plt.scatter(y_test_pred, y_test_pred - y_test, c='green', marker='s', label='Test data') +plt.xlabel('Predicted values') +plt.ylabel('Residuals') +plt.legend(loc='upper left') +plt.hlines(y=0, xmin=min(y_train_pred.min(), y_test_pred.min()), xmax=max(y_train_pred.max(), y_test_pred.max()), color='red') +plt.title('Residuals plot') +plt.show() diff --git a/jagannati_kavya/task12/TASK-12.py b/jagannati_kavya/task12/TASK-12.py new file mode 100644 index 0000000..98c044f --- /dev/null +++ b/jagannati_kavya/task12/TASK-12.py @@ -0,0 +1,66 @@ +from PIL import Image +import os + +def get_size_format(b, factor=1024, suffix="B"): + """ + Scale bytes to its proper byte format. + e.g: 1253656 => '1.20MB', 1253656678 => '1.17GB' + """ + for unit in ["", "K", "M", "G", "T", "P", "E", "Z"]: + if b < factor: + return f"{b:.2f}{unit}{suffix}" + b /= factor + return f"{b:.2f}Y{suffix}" + +def compress_img(image_name, new_size_ratio=0.9, quality=90, width=None, height=None, to_jpg=True): + try: + # Load the image into memory + img = Image.open(image_name) + + # Print the original image shape + print("[*] Image shape:", img.size) + + # Get the original image size in bytes + image_size = os.path.getsize(image_name) + print("[*] Size before compression:", get_size_format(image_size)) + + if width and height: + # If width and height are set, resize with them instead + img = img.resize((width, height), Image.LANCZOS) + elif new_size_ratio < 1.0: + # If resizing ratio is below 1.0, multiply width & height with this ratio to reduce image size + img = img.resize((int(img.size[0] * new_size_ratio), int(img.size[1] * new_size_ratio)), Image.LANCZOS) + + # Split the filename and extension + filename, ext = os.path.splitext(image_name) + + # Make a new filename appending "_compressed" to the original file name + if to_jpg: + # Change the extension to JPEG + new_filename = f"{filename}_compressed.jpg" + # Ensure image is in RGB mode for JPEG + if img.mode in ("RGBA", "LA"): + img = img.convert("RGB") + else: + # Retain the same extension of the original image + new_filename = f"{filename}_compressed{ext}" + + # Save the compressed image + img.save(new_filename, optimize=True, quality=quality) + + # Print the new image shape + print("[+] New Image shape:", img.size) + + # Get the new image size in bytes + new_image_size = os.path.getsize(new_filename) + print("[*] Size after compression:", get_size_format(new_image_size)) + print(f"[*] Compressed image saved as: {new_filename}") + + except FileNotFoundError: + print("Error: The file was not found.") + except OSError as e: + print(f"Error: {e}") + +# Example usage: +input_image = input("Enter the path to the image: ") +compress_img(input_image, new_size_ratio=0.8, quality=80, width=800, height=600) diff --git a/jagannati_kavya/task9/TASK-9.py b/jagannati_kavya/task9/TASK-9.py new file mode 100644 index 0000000..fcd4fc3 --- /dev/null +++ b/jagannati_kavya/task9/TASK-9.py @@ -0,0 +1,37 @@ +from PIL import Image +import os + +def convert_image(input_path, output_path, output_format): + try: + # Open the image + with Image.open(input_path) as img: + # Check if the image has an alpha channel and convert it to RGB if necessary + if output_format == 'JPEG' and img.mode == 'RGBA': + img = img.convert('RGB') + + # Convert and save the image to the desired format + img.save(output_path, format=output_format) + print(f"Image converted successfully to {output_format} format.") + except Exception as e: + print(f"An error occurred: {e}") + +def main(): + input_path = input("Enter the path to the input image: ") + output_format = input("Enter the desired output format (e.g., JPEG, PNG, BMP, GIF): ").upper() + + # Validate output format + if output_format not in ['JPEG', 'PNG', 'BMP', 'GIF']: + print("Invalid output format. Please choose from JPEG, PNG, BMP, or GIF.") + return + + # Extract the file name and extension + file_name, file_extension = os.path.splitext(input_path) + + # Set the output path + output_path = f"{file_name}_converted.{output_format.lower()}" + + # Convert the image + convert_image(input_path, output_path, output_format) + +if __name__ == "__main__": + main()