{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## `very_fast_eda` Tutorial "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Welcome to `very_fast_eda` package documentation! This package offers a suite of functions designed to smplify your EDA. below is an illustration of the usage of the functions with real life examples, featuring, Bill, a student at UON, who is undertaking his final year project on data analysis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Bill's Journey"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the last four years in college Bill has been used to perform exploratory data analysis using his computer and an excel spreadsheet. He found it to be very time consuming and frustrating at time if he has very large data sets. His friend, Mark, came across this package and recommended him to use it. After pondering for sometime, he decided to give it a try and he was not dissapointed. Infact, he went ahead to introduce it to his professors and fellow classmates. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Putting the `fast_eda` package into use \n",
"\n",
"To start he had to import all the necessary libraries and the module from our packages as an alias `eda`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Import\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import seaborn as sns\n",
"import pandas as pd\n",
"import fast_eda.fast_eda as eda"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Load a sample dataset\n",
"\n",
"Bill then went ahead to load the data set he will be using for his analysis. He choose the famous Iris dataset from the Seaborn library (Iris dataset). He could use any data set if he wanted but he has to ensure that is the format of a pandas dataframe. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
sepal_length
\n",
"
sepal_width
\n",
"
petal_length
\n",
"
petal_width
\n",
"
species
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
5.1
\n",
"
3.5
\n",
"
1.4
\n",
"
0.2
\n",
"
setosa
\n",
"
\n",
"
\n",
"
1
\n",
"
4.9
\n",
"
3.0
\n",
"
1.4
\n",
"
0.2
\n",
"
setosa
\n",
"
\n",
"
\n",
"
2
\n",
"
4.7
\n",
"
3.2
\n",
"
1.3
\n",
"
0.2
\n",
"
setosa
\n",
"
\n",
"
\n",
"
3
\n",
"
4.6
\n",
"
3.1
\n",
"
1.5
\n",
"
0.2
\n",
"
setosa
\n",
"
\n",
"
\n",
"
4
\n",
"
5.0
\n",
"
3.6
\n",
"
1.4
\n",
"
0.2
\n",
"
setosa
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sepal_length sepal_width petal_length petal_width species\n",
"0 5.1 3.5 1.4 0.2 setosa\n",
"1 4.9 3.0 1.4 0.2 setosa\n",
"2 4.7 3.2 1.3 0.2 setosa\n",
"3 4.6 3.1 1.5 0.2 setosa\n",
"4 5.0 3.6 1.4 0.2 setosa"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"iris = sns.load_dataset('iris')\n",
"iris.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bill wanted to get more information about the dataset and therefore he uses `iris.info()` to get a summary of the dataframe but this is not enough for analysis. He wants to know about the distriubution, correlation, null counts, and some summary statistics. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 150 entries, 0 to 149\n",
"Data columns (total 5 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 sepal_length 150 non-null float64\n",
" 1 sepal_width 150 non-null float64\n",
" 2 petal_length 150 non-null float64\n",
" 3 petal_width 150 non-null float64\n",
" 4 species 150 non-null object \n",
"dtypes: float64(4), object(1)\n",
"memory usage: 6.0+ KB\n"
]
}
],
"source": [
"iris.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Therefore, Bill then went ahead to use the functions in the package to undertake his analysis of the dataset. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exploratory Data Analysis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here he could see the distribution plot of all the columns and he derived some insights from it. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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O9vM/XkyXafbAABA3ihDAQAoGFcH3R06dJD+/fvL7t27vet27doljz76qHTs2NGvaQMAwMkoQwEAKBhXB91vv/22pKamSp06deS8884zS926dc26t956y9/JAwDAsShDAQAoGFf36a5Vq5asWbPG9EnbvHmzWad90zp16uTvpAEA4GiUoQAAFIwra7p/+OEHM9iL3o0PCQmRq6++2ozCqkvLli3NPKM//vijv5MJAIDjUIYCAFA4rgy6X3/9dbn//vslPDz8lG0RERHy4IMPymuvveaXtAEA4GSUoQAAFI4rg+5ff/1Vrr322ny361QniYmJxZomAAACAWUoAACF48qge+/evXlOc+JRsmRJ+fvvv4s1TQAABALKUAAACseVQfe5554rGzZsyHf7b7/9JtWrVy/WNAEAEAgoQwEAKBxXBt3XXXedDB06VI4dO3bKtvT0dBk2bJjccMMNfkkbAABORhkKAEDhuDLofuaZZ+Sff/6R888/X1566SX56quvzDJmzBhp2LCh2fb0008X+HjLli2TG2+8UWrUqGFGcp09e3au7ZZlybPPPmvu/JctW9ZMp7J161YbcgYAQGCVoQAABDtXztMdHR0tK1askN69e8uQIUNMUKw0YI6Li5Nx48aZfQrq33//lWbNmknPnj2lW7dup2zXi5I333xTPvjgA6lbt66pIdD32bRpk5QpU8aneQMAIJDKULhbcnKy7N+/v1jeKykpqVjeBwBO5sqgW9WuXVu++eYbOXjwoPzxxx/moqFBgwZSuXLlQh+rc+fOZsmLHlenV9GagS5duph1H374obkg0Rrx22+//azzAgBAoJahcHfAHRvbSNLTjxbr+2ZlZBbr+wGAa4NuD71AaNmypW3H37Ztm+zZs8c0Kc85j2nr1q0lISEh36A7IyPDLB6pqam2pREAACeWoQhuWsOtAXfrnsMkvHod298vZX2CbJgzSY4fP277ewFATq4Puu2mAbc6uamdPvdsy8uoUaNk+PDhtqcPAADAnzTgjoxpaPv7pKZsFzcormb0NNcHCo6g26G0n9zAgQNz1XTXqlXLr2kCAACAM6UfPqCjK0iPHj2K9X1prg+cGUG3zapVq2b+7t27N9e8pfq8efPm+b4uLCzMLAAAAMCZZB1N09GEpPmdg+WcurG2vx/N9YGCI+i2mY5WroH3okWLvEG21lqv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QpephTF16lSpVKnSafd57rnnpHnz5qfdZ/v27absXLdunY9TCPgfQTcAnAUnBfsAABS32267TX7//XdH3AAAnKqkvxMAAAAAIDCVLVvWLADyR003gHx9/vnncuGFF5rCtEqVKtKpUyf5999/zbb33ntPGjVqJGXKlJHY2FgZP378KU3EZsyYIZdddpnZp0mTJrJ06VLvPidOnJBevXpJ3bp1zfEbNmwob7zxhs/SnpGRIY8//rice+65Ur58eWndurVp9n1yc7jvvvvO5KNChQpy7bXXSkpKinef48ePyyOPPGL20/wPHjxY4uPjvXfn9U695knTrfnVRfPukZiYKJdccomUK1fOnIctW7b4LH8AgMASKGXq3LlzTbmnx1Ta3Fvf/8knn/Tuc99990mPHj3ybV4+evRoiY6OlooVK5p0HTt2LFdT8w8++EC++uorb9mZs3z+66+/pH379qbsbNasmSQkJBQpH4CTEHQDyJMGn3fccYf07NlTkpKSTIHYrVs3sSxLpk2bJs8++6yMHDnSbHvxxRdl6NChphDN6YknnpDHHntM1q5dK23atJEbb7xRDhw4YLZlZ2dLzZo1ZebMmbJp0yZzvKeeeko+++wzn6S/b9++pqDWi5TffvtNbrnlFhNUb9261bvP0aNH5ZVXXpGPPvpIli1bJsnJySZQ9xgzZozJ65QpU2T58uWSmpoqs2fP9m7XCxrN1/3332/Oly61atXybn/66afl1VdfldWrV0vJkiXNuQQAuE8glalXXHGFpKWlmfdRGtxHRUXlCox1nXavyou+pwbWmg8t/6pXr57rJoKWs7feeqv3RrcuejMhZ9mp+2iwf/7555vzpjfBgYBmAUAeEhMTLf2J2L59+ynbzjvvPGv69Om51j3//PNWmzZtzONt27aZ144ePdq7PSsry6pZs6Y1ZsyYfN+zT58+1s033+x9Hh8fb3Xp0qVA6b3qqqus/v37m8c7duywSpQoYe3atSvXPh07drSGDBliHk+ZMsWk8Y8//vBuHzdunBUdHe19ro9ffvll7/Pjx49bMTExudKU8309Fi9ebI69cOFC77p58+aZdenp6QXKDwAgeARamXrxxRd7y7+uXbtaI0eOtEqXLm2lpaVZ//vf/0x6fv/9d295GhER4X2tpvvhhx/OdbzWrVtbzZo1O21aPPl87733vOs2btxo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NTXXslRVrlzZvPaee+7xbs/OzpZBgwZJZGSkyUfOMhUIdATdAM5Ig82SJUuawvSNN96Q1157zQSsSi8eEhISZMaMGfLbb7/JLbfcItdee61s3bpVLrvsMtO3OTw83DRB00UvKFRWVpY8//zz8uuvv5oCWwvjnIXv2fjxxx/l7rvvlv79+8umTZvknXfeMc3yRo4cmWs/DcRvvfVWk+7rrrtOunfvLv/884/Ztm3bNvnvf/8rXbt2NWl88MEH5emnn/a+9nR5U6+++qr3guPhhx+W3r17y5YtW3ySPwBAYHJyeapB8JVXXukN9A8ePChJSUmSnp4umzdvNuuWLl0qLVu2NDerT3bkyBG54YYbpHHjxpKYmGiC5pzlYq1ateSLL74wj7U81DzoOch5bvRmw6pVq+Sll16SESNGyIIFCwqdD8CRLAA4jauuuspq1KiRlZ2d7V03ePBgs27Hjh1WiRIlrF27duV6TceOHa0hQ4aYx1OmTLEiIiLO+D6//PKL3uq30tLSzPPFixeb5wcPHjzja09+D33/F198Mdc+H330kVW9enXvcz32M888431+5MgRs+7bb7/15rFJkya5jvH000/nSlN+eatdu7bVo0cP73M9d1WrVrUmTJhwxrwAAIJTIJSnb775pnXBBReYx7Nnz7Zat25tdenSxVt+derUyXrqqae8++txZ82aZR6/8847VpUqVaz09HTvdn2d7rN27drTpkXPzeWXX55rXcuWLc35AYIBNd0AzujSSy81d8A92rRpY+68r1+/Xk6cOCHnn3++VKhQwbvonfA///zztMfUu+A33nijaXqtTeKuuuoqsz45Ofms06t3+/UOec403X///eauuqdJnGratKn3sd5d1xoET5M8vQuvd/NzatWqVYHTkPPYeu60qZwvm88DAAKP08tTfa22EPv777/Ne2uTeF209ltr1FesWGGe50VrxbXs06blOfNXlHJTabN2yk0ECwZSA1Bk2pSsRIkSpsDXvznpxUJ+/v33X4mLizPLtGnTTB8yvTjQ55mZmT5JlzYd79at2ynbcl4MlCpVKtc2vRDSPmW+YOexAQDBxSnl6YUXXmj6VGvArYt2y9KbxmPGjJFffvnFBN7a1N0OlJsIZgTdAM5I+1fltHLlSjPAmA6Wonfm9U70FVdckedrS5cubfbJSfuGHThwQEaPHm36eKnVq1f7LL06gJrWVNevX7/Ix2jYsKF88803udbpBceZ8gYAQKCWpxro6vvrYKQbN26Uyy+/3PTf1kHedHwUHatEW4blpVGjRmZQt2PHjnlvcGv+Ts6DouyE29C8HMAZ6V3zgQMHmkD2k08+kbfeessMUqbN4HTwMR207MsvvzSDj+ngMKNGjZJ58+aZ19apU8fcwV+0aJHs37/fNO/WJnBa8Opx/vrrLzNKuA4C4yvPPvusfPjhh6a2Wy8atMmbDkzzzDPPFPgYOnCaXswMHjxYfv/9d/nss8/MYGzK0zQwr7wBABDI5ak2H9e06cjlWsseGhpqBljTmnRP0/W86KjpWj5qdy5toq43rl955ZVc+9SuXdvsM3fuXNOEXfMDuAFBN4Az0osAHb1U+zT36dPHXCA88MADZtuUKVPM9scee8zUDuto31ojrBcCSpuhPfTQQ3LbbbeZZm86Iqn+1QB25syZZpRTvUN/csF8NrRZnRbo33//vemXrX3oxo4dawr7gqpbt66ZNkUvfrSf2YQJE7yjl+t0KfnlDQCAQC5PNbDWmuicfbf18cnrTqYB+tdff236p2vNvZaZ2iw9J50OTW+IP/nkkxIdHW1GbAfcIERHU/N3IgA4lxawerdbpypxO+3bNnHiRNm5c6e/kwIACDCUp4B70acbAPIxfvx4U1NepUoVWb58ubz88svclQcAAECh0LwcgON17tw51xQqOZcXX3zRtvfVaVy6dOlimuxpHzlt8vfcc8/Z9n4AAARjeQq4Hc3LATjerl27TB+4vOjUJroAAIDTozwF/IOgGwAAAAAAm9C8HAAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNStp1YPhWdna27N69WypWrCghISH+Tg4AIABYliVpaWlSo0YNCQ3lPjsAAP5A0B0gNOCuVauWv5MBAAhAO3fulJo1a/o7GQAAuBJBd4DQGm7PhVN4eLi/kwMACACpqanmhq2nDAEAAMWPoDtAeJqUa8BN0A0AKAy6JQEA4D908AIAAAAAwCYE3QAAAAAA2ITm5QHmymc+kRJhZf2dDMdLfPlufycBAAAAAKjpBgAAAADALgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0H2S7du3S0hIiKxbt87fSQEAAAAABDiCbgAAAAAAbBK0Qffnn38uF154oZQtW1aqVKkinTp1kn///ddse++996RRo0ZSpkwZiY2NlfHjx3tfV7duXfP3oosuMjXe7dq1M8+zs7NlxIgRUrNmTQkLC5PmzZvL/Pnzva/LzMyUvn37SvXq1c1xa9euLaNGjfJuf+2110x6ypcvL7Vq1ZKHH35Yjhw5UoxnBAAAAABQ3EpKEEpJSZE77rhDXnrpJfnPf/4jaWlp8uOPP4plWTJt2jR59tln5e233zaB9dq1a+X+++83wXB8fLz8/PPP0qpVK1m4cKFccMEFUrp0aXPMN954Q1599VV55513zOsmT54sN910k2zcuFEaNGggb775psyZM0c+++wziYmJkZ07d5rFIzQ01OyjQf1ff/1lgu5BgwblCvgBAAAAAMElxNJINMisWbNGWrRoYfpna41zTvXr15fnn3/eBOUeL7zwgnzzzTeyYsUK8xoNjDUY19psj3PPPVf69OkjTz31lHedBuctW7aUcePGySOPPGICcA3WtYa8IDXxDz30kOzfvz/P7RkZGWbxSE1NNTXkzfpNlBJhZQt9Ttwm8eW7/Z0EAPA7LTsiIiLk8OHDEh4e7u/kAADgSkHZvLxZs2bSsWNH05z7lltukXfffVcOHjxompf/+eef0qtXL6lQoYJ30aBb15/uomX37t3Stm3bXOv1eVJSknl8zz33mMHXGjZsaALw77//Pte+GoxrmjR4r1ixotx1111y4MABOXr0aJ7vqU3T9ULJs2jADQAAAAAILEEZdJcoUUIWLFgg3377rTRu3FjeeustEwxv2LDBbNcgXANkz6LrV65ceVbvefHFF8u2bdtMLXp6errceuut8t///tds09rzG264QZo2bSpffPGFJCYmmtpxT1/wvAwZMsTUTHiWnE3VAQAAAACBISj7dCtt4q010bpoH25tZr58+XKpUaOG6VPdvXv3PF/n6cN94sQJ7zptkqev09dfddVV3vX6XJuY59zvtttuM4sG3Ndee638888/JsjWgdi0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Lr/88gIfR2u0v/jiC29wOW3aNBPganCqNcXatLtChQre5f777zcDoR09etR7DE9w7dG7d28TRGtTcA3Q82oG76G18tqc3BNw56RBrgbMJ9fo63OtQc+Lrm/Tpo13lHfP/keOHJH//e9/3nUtWrQ447nRc5lzRHgN5gEAAAAALqjp1hpfDbwbNmxoglalzcE1UNVm2gV14403imVZMm/ePNMkW48xduxYs00DVe3Dndec4NrH20P7cuektec7duyQb775RhYsWGBq0fv06WNqrU+mfb794eQ052XIkCEycOBA73M9twTeAAAAAOCCmu7GjRubPs633nqr7Nu3zzQ11/7XmzdvliZNmhT4OBo8a1CtNdyffPKJCeJ14DSlf7ds2SL169c/ZfE0086PDqKmzdI//vhj0xRcB23LS9OmTU2gn9eo5zqwmg70pv2uc9Lnmv+8NGrUSBISEsyNhJz76wBtOhhbYWg/c01DzgUAAAAAEFiKPHeWBqQvvvjiWSdAm5jr6OE6iniPHj2867UPtK6PiYmR//73v94m5xs2bDhlYLKc9HXafPuCCy4wzdbnzp1rguG86Cjib731lmnSrjXL2ox75cqVZvRxvQHwxBNPmP7j5513nmmurqOga5N0vUmQl4cfftgE+f369TPH1psG+nqtsT7TjQIAAAAAQPApciSoNcQaJF922WVm1G710UcfyU8//VSo43To0EEiIyNNgKqDonnoSOEaMH///fem6bmOjK5Nz2vXrn3a4+mo4BpAay22NoHXubm1j3deqlSpYprDa1P2q666ygTr7777rreP9yOPPGIC5scee0wuvPBCM7L6nDlzzEBoeTn33HNNs/aff/5ZmjVrJg899JD06tVLnnnmmUKdEwAAAABAcAixcraFLiAd/Oyuu+4ytdQaaOsUXTq6uI7arUGnLvAt7dOtNfHN+k2UEmH+6YsO4P9JfPlufycBKHDZobOL0E0JAIAAqunW5t06v3TOWmHPSN1r1qzxZfoAAAAAAHBX0K1NwbXp9sn0bvqhQ4d8kS4AAAAAANwZdFerVk3++OOPU9Zrf25tZg4AAAAAAIoYdN9///3Sv39/WbVqlYSEhMju3bvNiN6PP/649O7d2/epBAAAAADALVOGPfnkk5KdnS0dO3aUo0ePmqbmOq+0Bt06XRYAAAAAAChi0K21208//bSZ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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dist_plots = eda.distribution_plots(iris, 2, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here Bill was able to know how many values are missing in any given column that might affect his analysis."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"sepal_length 0\n",
"sepal_width 0\n",
"petal_length 0\n",
"petal_width 0\n",
"species 0\n",
"dtype: int64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nulls_values = eda.count_nulls(iris)\n",
"\n",
"nulls_values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bill was also able to see the correlation of the different features in the dataset. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
""
],
"text/plain": [
"alt.Chart(...)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"correlation_matrix_plot = eda.correlation_matrix_viz(iris).properties(\n",
" width=400, # Adjust width as needed\n",
" height=200 # Adjust height as needed\n",
")\n",
"correlation_matrix_plot\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, bill was able to see summary statistics about the different columns in the dataset. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary Statistics Calculation: mean, median, and stdv\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Numerical columns in the Iris dataset:\n",
"['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
sepal_length
\n",
"
sepal_width
\n",
"
petal_length
\n",
"
petal_width
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
150.000000
\n",
"
150.000000
\n",
"
150.000000
\n",
"
150.000000
\n",
"
\n",
"
\n",
"
mean
\n",
"
5.843333
\n",
"
3.057333
\n",
"
3.758000
\n",
"
1.199333
\n",
"
\n",
"
\n",
"
std
\n",
"
0.828066
\n",
"
0.435866
\n",
"
1.765298
\n",
"
0.762238
\n",
"
\n",
"
\n",
"
min
\n",
"
4.300000
\n",
"
2.000000
\n",
"
1.000000
\n",
"
0.100000
\n",
"
\n",
"
\n",
"
25%
\n",
"
5.100000
\n",
"
2.800000
\n",
"
1.600000
\n",
"
0.300000
\n",
"
\n",
"
\n",
"
50%
\n",
"
5.800000
\n",
"
3.000000
\n",
"
4.350000
\n",
"
1.300000
\n",
"
\n",
"
\n",
"
75%
\n",
"
6.400000
\n",
"
3.300000
\n",
"
5.100000
\n",
"
1.800000
\n",
"
\n",
"
\n",
"
max
\n",
"
7.900000
\n",
"
4.400000
\n",
"
6.900000
\n",
"
2.500000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sepal_length sepal_width petal_length petal_width\n",
"count 150.000000 150.000000 150.000000 150.000000\n",
"mean 5.843333 3.057333 3.758000 1.199333\n",
"std 0.828066 0.435866 1.765298 0.762238\n",
"min 4.300000 2.000000 1.000000 0.100000\n",
"25% 5.100000 2.800000 1.600000 0.300000\n",
"50% 5.800000 3.000000 4.350000 1.300000\n",
"75% 6.400000 3.300000 5.100000 1.800000\n",
"max 7.900000 4.400000 6.900000 2.500000"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = sns.load_dataset('iris')\n",
"\n",
"# Get all numerical columns\n",
"numerical_columns = df.select_dtypes(include=['number']).columns.tolist()\n",
"\n",
"print(\"\\nNumerical columns in the Iris dataset:\")\n",
"print(numerical_columns)\n",
"\n",
"df = iris[numerical_columns]\n",
"\n",
"eda.describe_function(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Final Remarks \n",
"\n",
"We hope you found these examples informative and learned through Bills experience. If anything remains unclear, we suggest reviewing the function documentation or creating an issue in our repository and we will get back to you."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "524",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}