{ "cells": [ { "cell_type": "markdown", "id": "5f7c9658-c285-4854-96c0-e899fc55421b", "metadata": {}, "source": [ "# DM project: cheese" ] }, { "cell_type": "code", "execution_count": 73, "id": "7f4f2b89-8257-468c-9f5e-a77e11b8b8ff", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from mlxtend.preprocessing import TransactionEncoder\n", "from mlxtend.frequent_patterns import apriori\n", "import geopy\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": null, "id": "38096d49-fe67-4c60-a05e-8ad8c442b19c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 2, "id": "1a0afba8-692b-4377-a2ce-5114983e3bbb", "metadata": {}, "outputs": [], "source": [ "data=pd.read_csv(\"cheeses.csv\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "06f7d328-7b6a-4193-b155-3d47519a1e9a", "metadata": {}, "outputs": [ { "data": { "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", " \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", " \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", "
cheeseurlmilkcountryregionfamilytypefat_contentcalcium_contenttexturerindcolorflavoraromavegetarianvegansynonymsalt_spellingsproducers
0Aarewasserhttps://www.cheese.com/aarewasser/cowSwitzerlandNaNNaNsemi-softNaNNaNbutterywashedyellowsweetbutteryFalseFalseNaNNaNJumi
1Abbaye de Bellochttps://www.cheese.com/abbaye-de-belloc/sheepFrancePays BasqueNaNsemi-hard, artisanNaNNaNcreamy, dense, firmnaturalyellowburnt caramellanolineTrueFalseAbbaye Notre-Dame de BellocNaNNaN
2Abbaye de Belvalhttps://www.cheese.com/abbaye-de-belval/cowFranceNaNNaNsemi-hard40-46%NaNelasticwashedivoryNaNaromaticFalseFalseNaNNaNNaN
3Abbaye de Citeauxhttps://www.cheese.com/abbaye-de-citeaux/cowFranceBurgundyNaNsemi-soft, artisan, brinedNaNNaNcreamy, dense, smoothwashedwhiteacidic, milky, smoothbarnyardy, earthyFalseFalseNaNNaNNaN
4Abbaye de Tamiéhttps://www.cheese.com/tamie/cowFranceSavoieNaNsoft, artisanNaNNaNcreamy, open, smoothwashedwhitefruity, nuttyperfumed, pungentFalseFalseNaNTamié, Trappiste de Tamie, Abbey of TamieNaN
............................................................
1182Sveciaosthttps://www.cheese.com/sveciaost/cowSwedenLow-laying regionsNaNsemi-hard, brined45%NaNcreamy, supplerindlesspale yellowacidicNaNFalseFalseNaNNaNNaN
1183Swaghttps://www.cheese.com/swag/goatAustraliaSouth AustraliaNaNfresh firm, artisanNaNNaNcreamy, crumblyash coatedwhiteacidic, creamyfreshTrueFalseNaNNaNWoodside Cheese Wrights
1184Swaledalehttps://www.cheese.com/swaledale/sheepEnglandSwaledale, North YorkshireNaNhardNaNNaNsemi firmNaNyellowsmooth, sweetfloralTrueFalseSwaledale Sheep CheeseNaNNaN
1185Sweet Style Swisshttps://www.cheese.com/sweet-style-swiss/NaNSwitzerlandNaNNaNsemi-hard, artisanNaNNaNfirm, supplewaxedNaNnuttynutty, sweetFalseFalseNaNNaNNaN
1186Swiss cheesehttps://www.cheese.com/swiss/cowUnited StatesNaNSwiss Cheesehard, artisan, processed7.8 g/100gNaNfirmrindlesspale yellownutty, sweetNaNTrueFalseAmerican Swiss CheeseNaNVarious
\n", "

1187 rows × 19 columns

\n", "
" ], "text/plain": [ " cheese url milk \\\n", "0 Aarewasser https://www.cheese.com/aarewasser/ cow \n", "1 Abbaye de Belloc https://www.cheese.com/abbaye-de-belloc/ sheep \n", "2 Abbaye de Belval https://www.cheese.com/abbaye-de-belval/ cow \n", "3 Abbaye de Citeaux https://www.cheese.com/abbaye-de-citeaux/ cow \n", "4 Abbaye de Tamié https://www.cheese.com/tamie/ cow \n", "... ... ... ... \n", "1182 Sveciaost https://www.cheese.com/sveciaost/ cow \n", "1183 Swag https://www.cheese.com/swag/ goat \n", "1184 Swaledale https://www.cheese.com/swaledale/ sheep \n", "1185 Sweet Style Swiss https://www.cheese.com/sweet-style-swiss/ NaN \n", "1186 Swiss cheese https://www.cheese.com/swiss/ cow \n", "\n", " country region family \\\n", "0 Switzerland NaN NaN \n", "1 France Pays Basque NaN \n", "2 France NaN NaN \n", "3 France Burgundy NaN \n", "4 France Savoie NaN \n", "... ... ... ... \n", "1182 Sweden Low-laying regions NaN \n", "1183 Australia South Australia NaN \n", "1184 England Swaledale, North Yorkshire NaN \n", "1185 Switzerland NaN NaN \n", "1186 United States NaN Swiss Cheese \n", "\n", " type fat_content calcium_content \\\n", "0 semi-soft NaN NaN \n", "1 semi-hard, artisan NaN NaN \n", "2 semi-hard 40-46% NaN \n", "3 semi-soft, artisan, brined NaN NaN \n", "4 soft, artisan NaN NaN \n", "... ... ... ... \n", "1182 semi-hard, brined 45% NaN \n", "1183 fresh firm, artisan NaN NaN \n", "1184 hard NaN NaN \n", "1185 semi-hard, artisan NaN NaN \n", "1186 hard, artisan, processed 7.8 g/100g NaN \n", "\n", " texture rind color flavor \\\n", "0 buttery washed yellow sweet \n", "1 creamy, dense, firm natural yellow burnt caramel \n", "2 elastic washed ivory NaN \n", "3 creamy, dense, smooth washed white acidic, milky, smooth \n", "4 creamy, open, smooth washed white fruity, nutty \n", "... ... ... ... ... \n", "1182 creamy, supple rindless pale yellow acidic \n", "1183 creamy, crumbly ash coated white acidic, creamy \n", "1184 semi firm NaN yellow smooth, sweet \n", "1185 firm, supple waxed NaN nutty \n", "1186 firm rindless pale yellow nutty, sweet \n", "\n", " aroma vegetarian vegan synonyms \\\n", "0 buttery False False NaN \n", "1 lanoline True False Abbaye Notre-Dame de Belloc \n", "2 aromatic False False NaN \n", "3 barnyardy, earthy False False NaN \n", "4 perfumed, pungent False False NaN \n", "... ... ... ... ... \n", "1182 NaN False False NaN \n", "1183 fresh True False NaN \n", "1184 floral True False Swaledale Sheep Cheese \n", "1185 nutty, sweet False False NaN \n", "1186 NaN True False American Swiss Cheese \n", "\n", " alt_spellings producers \n", "0 NaN Jumi \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 Tamié, Trappiste de Tamie, Abbey of Tamie NaN \n", "... ... ... \n", "1182 NaN NaN \n", "1183 NaN Woodside Cheese Wrights \n", "1184 NaN NaN \n", "1185 NaN NaN \n", "1186 NaN Various \n", "\n", "[1187 rows x 19 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "code", "execution_count": null, "id": "7d354e9e-3abc-4d6a-9aea-a00a92ce3c3c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 4, "id": "2018aac2-6f3d-489a-b5d0-90b7c7793076", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'blue',\n", " 'blue-grey',\n", " 'brown',\n", " 'brownish yellow',\n", " 'cream',\n", " 'golden orange',\n", " 'golden yellow',\n", " 'green',\n", " 'ivory',\n", " nan,\n", " 'orange',\n", " 'pale white',\n", " 'pale yellow',\n", " 'pink and white',\n", " 'red',\n", " 'straw',\n", " 'white',\n", " 'yellow'}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(data[\"color\"])" ] }, { "cell_type": "code", "execution_count": 5, "id": "71b1853e-d2a4-4afe-9ad0-4f15689f2e23", "metadata": {}, "outputs": [ { "data": { "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", " \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", " \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", "
cheeseurlmilkcountryregionfamilytypefat_contentcalcium_contenttexturerindcolorflavoraromavegetarianvegansynonymsalt_spellingsproducers
10Acapellahttps://www.cheese.com/acapella/goatUnited StatesCaliforniaNaNsoft, soft-ripenedNaNNaNNaNNaNNaNbutteryfresh, herbalFalseFalseNaNNaNNaN
13Acornhttps://www.cheese.com/acorn/sheepUnited KingdomBethaniaNaNhard, artisan52%NaNcrumbly, firmNaNNaNburnt caramel, citrusy, herbaceousfruityTrueFalseNaNNaNNaN
19Afuega'l Pituhttps://www.cheese.com/afuegal-pitu/cowSpainAsturiasNaNsoft, artisanNaNNaNsmoothcloth wrappedNaNspicy, strongNaNFalseFalseNaNNaNNaN
48Alpe di Frabosahttps://www.cheese.com/alpe-di-frabosa/cowItalyNaNNaNsemi-softNaNNaNNaNNaNNaNbittermilky, mushroomFalseFalseNaNNaNNaN
50Alpicrèmehttps://www.cheese.com/alpicreme/goatFranceNaNNaNsoftNaNNaNNaNNaNNaNNaNNaNFalseFalseNaNNaNNaN
............................................................
1172Strathdon Bluehttps://www.cheese.com/strathdon-blue/cowScotlandTainBluesemi-softNaNNaNcreamyNaNNaNcreamy, spicyaromatic, richTrueFalseNaNNaNHighland Fine Cheeses Limited
1175String Cheesehttps://www.cheese.com/string/NaNNaNNaNNaNsemi-hardNaNNaNchewy, firm, stringyNaNNaNNaNNaNNaNNaNNaNNaNNaN
1177Sulgunihttps://www.cheese.com/sulguni/buffalo, cowGeorgiaSvaneti, SamegreloNaNsemi-firmNaNNaNdense, elasticNaNNaNsalty, smokey , sourNaNNaNNaNGeorgian Pickle CheeseMegruli Sulguni, Shebolili Megruli SulguniNaN
1181Sussex Slipcotehttps://www.cheese.com/sussex-slipcote/sheepEnglandNaNNaNsoftNaNNaNNaNNaNNaNsharpNaNTrueFalseNaNNaNHigh Weald Dairy
1185Sweet Style Swisshttps://www.cheese.com/sweet-style-swiss/NaNSwitzerlandNaNNaNsemi-hard, artisanNaNNaNfirm, supplewaxedNaNnuttynutty, sweetFalseFalseNaNNaNNaN
\n", "

142 rows × 19 columns

\n", "
" ], "text/plain": [ " cheese url \\\n", "10 Acapella https://www.cheese.com/acapella/ \n", "13 Acorn https://www.cheese.com/acorn/ \n", "19 Afuega'l Pitu https://www.cheese.com/afuegal-pitu/ \n", "48 Alpe di Frabosa https://www.cheese.com/alpe-di-frabosa/ \n", "50 Alpicrème https://www.cheese.com/alpicreme/ \n", "... ... ... \n", "1172 Strathdon Blue https://www.cheese.com/strathdon-blue/ \n", "1175 String Cheese https://www.cheese.com/string/ \n", "1177 Sulguni https://www.cheese.com/sulguni/ \n", "1181 Sussex Slipcote https://www.cheese.com/sussex-slipcote/ \n", "1185 Sweet Style Swiss https://www.cheese.com/sweet-style-swiss/ \n", "\n", " milk country region family \\\n", "10 goat United States California NaN \n", "13 sheep United Kingdom Bethania NaN \n", "19 cow Spain Asturias NaN \n", "48 cow Italy NaN NaN \n", "50 goat France NaN NaN \n", "... ... ... ... ... \n", "1172 cow Scotland Tain Blue \n", "1175 NaN NaN NaN NaN \n", "1177 buffalo, cow Georgia Svaneti, Samegrelo NaN \n", "1181 sheep England NaN NaN \n", "1185 NaN Switzerland NaN NaN \n", "\n", " type fat_content calcium_content texture \\\n", "10 soft, soft-ripened NaN NaN NaN \n", "13 hard, artisan 52% NaN crumbly, firm \n", "19 soft, artisan NaN NaN smooth \n", "48 semi-soft NaN NaN NaN \n", "50 soft NaN NaN NaN \n", "... ... ... ... ... \n", "1172 semi-soft NaN NaN creamy \n", "1175 semi-hard NaN NaN chewy, firm, stringy \n", "1177 semi-firm NaN NaN dense, elastic \n", "1181 soft NaN NaN NaN \n", "1185 semi-hard, artisan NaN NaN firm, supple \n", "\n", " rind color flavor \\\n", "10 NaN NaN buttery \n", "13 NaN NaN burnt caramel, citrusy, herbaceous \n", "19 cloth wrapped NaN spicy, strong \n", "48 NaN NaN bitter \n", "50 NaN NaN NaN \n", "... ... ... ... \n", "1172 NaN NaN creamy, spicy \n", "1175 NaN NaN NaN \n", "1177 NaN NaN salty, smokey , sour \n", "1181 NaN NaN sharp \n", "1185 waxed NaN nutty \n", "\n", " aroma vegetarian vegan synonyms \\\n", "10 fresh, herbal False False NaN \n", "13 fruity True False NaN \n", "19 NaN False False NaN \n", "48 milky, mushroom False False NaN \n", "50 NaN False False NaN \n", "... ... ... ... ... \n", "1172 aromatic, rich True False NaN \n", "1175 NaN NaN NaN NaN \n", "1177 NaN NaN NaN Georgian Pickle Cheese \n", "1181 NaN True False NaN \n", "1185 nutty, sweet False False NaN \n", "\n", " alt_spellings \\\n", "10 NaN \n", "13 NaN \n", "19 NaN \n", "48 NaN \n", "50 NaN \n", "... ... \n", "1172 NaN \n", "1175 NaN \n", "1177 Megruli Sulguni, Shebolili Megruli Sulguni \n", "1181 NaN \n", "1185 NaN \n", "\n", " producers \n", "10 NaN \n", "13 NaN \n", "19 NaN \n", "48 NaN \n", "50 NaN \n", "... ... \n", "1172 Highland Fine Cheeses Limited \n", "1175 NaN \n", "1177 NaN \n", "1181 High Weald Dairy \n", "1185 NaN \n", "\n", "[142 rows x 19 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[pd.isnull(data[\"color\"])]" ] }, { "cell_type": "markdown", "id": "bf3b548c-5ac4-4126-9ae9-5578ad158015", "metadata": {}, "source": [ "## Cleaning" ] }, { "cell_type": "code", "execution_count": 6, "id": "fb5ddb0a-8551-4e7c-971e-00a819ebb4b3", "metadata": {}, "outputs": [ { "data": { "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", " \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", " \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", "
cheeseurlmilkcountryregionfamilytypefat_contentcalcium_contenttexturerindcolorflavoraromavegetarianvegansynonymsalt_spellingsproducers
10Acapellahttps://www.cheese.com/acapella/goatUnited StatesCaliforniaNaNsoft, soft-ripenedNaNNaNNaNNaNNaNbutteryfresh, herbalFalseFalseNaNNaNNaN
13Acornhttps://www.cheese.com/acorn/sheepUnited KingdomBethaniaNaNhard, artisan52%NaNcrumbly, firmNaNNaNburnt caramel, citrusy, herbaceousfruityTrueFalseNaNNaNNaN
19Afuega'l Pituhttps://www.cheese.com/afuegal-pitu/cowSpainAsturiasNaNsoft, artisanNaNNaNsmoothcloth wrappedNaNspicy, strongNaNFalseFalseNaNNaNNaN
48Alpe di Frabosahttps://www.cheese.com/alpe-di-frabosa/cowItalyNaNNaNsemi-softNaNNaNNaNNaNNaNbittermilky, mushroomFalseFalseNaNNaNNaN
50Alpicrèmehttps://www.cheese.com/alpicreme/goatFranceNaNNaNsoftNaNNaNNaNNaNNaNNaNNaNFalseFalseNaNNaNNaN
............................................................
1172Strathdon Bluehttps://www.cheese.com/strathdon-blue/cowScotlandTainBluesemi-softNaNNaNcreamyNaNNaNcreamy, spicyaromatic, richTrueFalseNaNNaNHighland Fine Cheeses Limited
1175String Cheesehttps://www.cheese.com/string/NaNNaNNaNNaNsemi-hardNaNNaNchewy, firm, stringyNaNNaNNaNNaNNaNNaNNaNNaNNaN
1177Sulgunihttps://www.cheese.com/sulguni/buffalo, cowGeorgiaSvaneti, SamegreloNaNsemi-firmNaNNaNdense, elasticNaNNaNsalty, smokey , sourNaNNaNNaNGeorgian Pickle CheeseMegruli Sulguni, Shebolili Megruli SulguniNaN
1181Sussex Slipcotehttps://www.cheese.com/sussex-slipcote/sheepEnglandNaNNaNsoftNaNNaNNaNNaNNaNsharpNaNTrueFalseNaNNaNHigh Weald Dairy
1185Sweet Style Swisshttps://www.cheese.com/sweet-style-swiss/NaNSwitzerlandNaNNaNsemi-hard, artisanNaNNaNfirm, supplewaxedNaNnuttynutty, sweetFalseFalseNaNNaNNaN
\n", "

142 rows × 19 columns

\n", "
" ], "text/plain": [ " cheese url \\\n", "10 Acapella https://www.cheese.com/acapella/ \n", "13 Acorn https://www.cheese.com/acorn/ \n", "19 Afuega'l Pitu https://www.cheese.com/afuegal-pitu/ \n", "48 Alpe di Frabosa https://www.cheese.com/alpe-di-frabosa/ \n", "50 Alpicrème https://www.cheese.com/alpicreme/ \n", "... ... ... \n", "1172 Strathdon Blue https://www.cheese.com/strathdon-blue/ \n", "1175 String Cheese https://www.cheese.com/string/ \n", "1177 Sulguni https://www.cheese.com/sulguni/ \n", "1181 Sussex Slipcote https://www.cheese.com/sussex-slipcote/ \n", "1185 Sweet Style Swiss https://www.cheese.com/sweet-style-swiss/ \n", "\n", " milk country region family \\\n", "10 goat United States California NaN \n", "13 sheep United Kingdom Bethania NaN \n", "19 cow Spain Asturias NaN \n", "48 cow Italy NaN NaN \n", "50 goat France NaN NaN \n", "... ... ... ... ... \n", "1172 cow Scotland Tain Blue \n", "1175 NaN NaN NaN NaN \n", "1177 buffalo, cow Georgia Svaneti, Samegrelo NaN \n", "1181 sheep England NaN NaN \n", "1185 NaN Switzerland NaN NaN \n", "\n", " type fat_content calcium_content texture \\\n", "10 soft, soft-ripened NaN NaN NaN \n", "13 hard, artisan 52% NaN crumbly, firm \n", "19 soft, artisan NaN NaN smooth \n", "48 semi-soft NaN NaN NaN \n", "50 soft NaN NaN NaN \n", "... ... ... ... ... \n", "1172 semi-soft NaN NaN creamy \n", "1175 semi-hard NaN NaN chewy, firm, stringy \n", "1177 semi-firm NaN NaN dense, elastic \n", "1181 soft NaN NaN NaN \n", "1185 semi-hard, artisan NaN NaN firm, supple \n", "\n", " rind color flavor \\\n", "10 NaN NaN buttery \n", "13 NaN NaN burnt caramel, citrusy, herbaceous \n", "19 cloth wrapped NaN spicy, strong \n", "48 NaN NaN bitter \n", "50 NaN NaN NaN \n", "... ... ... ... \n", "1172 NaN NaN creamy, spicy \n", "1175 NaN NaN NaN \n", "1177 NaN NaN salty, smokey , sour \n", "1181 NaN NaN sharp \n", "1185 waxed NaN nutty \n", "\n", " aroma vegetarian vegan synonyms \\\n", "10 fresh, herbal False False NaN \n", "13 fruity True False NaN \n", "19 NaN False False NaN \n", "48 milky, mushroom False False NaN \n", "50 NaN False False NaN \n", "... ... ... ... ... \n", "1172 aromatic, rich True False NaN \n", "1175 NaN NaN NaN NaN \n", "1177 NaN NaN NaN Georgian Pickle Cheese \n", "1181 NaN True False NaN \n", "1185 nutty, sweet False False NaN \n", "\n", " alt_spellings \\\n", "10 NaN \n", "13 NaN \n", "19 NaN \n", "48 NaN \n", "50 NaN \n", "... ... \n", "1172 NaN \n", "1175 NaN \n", "1177 Megruli Sulguni, Shebolili Megruli Sulguni \n", "1181 NaN \n", "1185 NaN \n", "\n", " producers \n", "10 NaN \n", "13 NaN \n", "19 NaN \n", "48 NaN \n", "50 NaN \n", "... ... \n", "1172 Highland Fine Cheeses Limited \n", "1175 NaN \n", "1177 NaN \n", "1181 High Weald Dairy \n", "1185 NaN \n", "\n", "[142 rows x 19 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[data[\"color\"].isnull()]" ] }, { "cell_type": "code", "execution_count": 7, "id": "a0a77563-518e-4808-b744-9fc0c76763fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1162\n", "939\n" ] } ], "source": [ "print(len(data[pd.isnull(data[\"calcium_content\"])]))\n", "print(len(data[pd.isnull(data[\"fat_content\"])]))" ] }, { "cell_type": "code", "execution_count": 8, "id": "c8489ffa-1067-4eb7-b65a-2fa18fdb4b04", "metadata": {}, "outputs": [], "source": [ "del data[\"alt_spellings\"]\n", "del data[\"producers\"]\n", "del data[\"calcium_content\"]\n", "del data[\"url\"]\n", "del data[\"fat_content\"]\n", "del data[\"synonyms\"]" ] }, { "cell_type": "code", "execution_count": 9, "id": "5379265a-cd49-41fa-845c-bfae33bb8f5a", "metadata": {}, "outputs": [ { "data": { "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", " \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", "
cheesemilkcountryregionfamilytypetexturerindcolorflavoraromavegetarianvegan
0AarewassercowSwitzerlandNaNNaNsemi-softbutterywashedyellowsweetbutteryFalseFalse
1Abbaye de BellocsheepFrancePays BasqueNaNsemi-hard, artisancreamy, dense, firmnaturalyellowburnt caramellanolineTrueFalse
2Abbaye de BelvalcowFranceNaNNaNsemi-hardelasticwashedivoryNaNaromaticFalseFalse
3Abbaye de CiteauxcowFranceBurgundyNaNsemi-soft, artisan, brinedcreamy, dense, smoothwashedwhiteacidic, milky, smoothbarnyardy, earthyFalseFalse
4Abbaye de TamiécowFranceSavoieNaNsoft, artisancreamy, open, smoothwashedwhitefruity, nuttyperfumed, pungentFalseFalse
..........................................
1182SveciaostcowSwedenLow-laying regionsNaNsemi-hard, brinedcreamy, supplerindlesspale yellowacidicNaNFalseFalse
1183SwaggoatAustraliaSouth AustraliaNaNfresh firm, artisancreamy, crumblyash coatedwhiteacidic, creamyfreshTrueFalse
1184SwaledalesheepEnglandSwaledale, North YorkshireNaNhardsemi firmNaNyellowsmooth, sweetfloralTrueFalse
1185Sweet Style SwissNaNSwitzerlandNaNNaNsemi-hard, artisanfirm, supplewaxedNaNnuttynutty, sweetFalseFalse
1186Swiss cheesecowUnited StatesNaNSwiss Cheesehard, artisan, processedfirmrindlesspale yellownutty, sweetNaNTrueFalse
\n", "

1187 rows × 13 columns

\n", "
" ], "text/plain": [ " cheese milk country region \\\n", "0 Aarewasser cow Switzerland NaN \n", "1 Abbaye de Belloc sheep France Pays Basque \n", "2 Abbaye de Belval cow France NaN \n", "3 Abbaye de Citeaux cow France Burgundy \n", "4 Abbaye de Tamié cow France Savoie \n", "... ... ... ... ... \n", "1182 Sveciaost cow Sweden Low-laying regions \n", "1183 Swag goat Australia South Australia \n", "1184 Swaledale sheep England Swaledale, North Yorkshire \n", "1185 Sweet Style Swiss NaN Switzerland NaN \n", "1186 Swiss cheese cow United States NaN \n", "\n", " family type texture \\\n", "0 NaN semi-soft buttery \n", "1 NaN semi-hard, artisan creamy, dense, firm \n", "2 NaN semi-hard elastic \n", "3 NaN semi-soft, artisan, brined creamy, dense, smooth \n", "4 NaN soft, artisan creamy, open, smooth \n", "... ... ... ... \n", "1182 NaN semi-hard, brined creamy, supple \n", "1183 NaN fresh firm, artisan creamy, crumbly \n", "1184 NaN hard semi firm \n", "1185 NaN semi-hard, artisan firm, supple \n", "1186 Swiss Cheese hard, artisan, processed firm \n", "\n", " rind color flavor aroma \\\n", "0 washed yellow sweet buttery \n", "1 natural yellow burnt caramel lanoline \n", "2 washed ivory NaN aromatic \n", "3 washed white acidic, milky, smooth barnyardy, earthy \n", "4 washed white fruity, nutty perfumed, pungent \n", "... ... ... ... ... \n", "1182 rindless pale yellow acidic NaN \n", "1183 ash coated white acidic, creamy fresh \n", "1184 NaN yellow smooth, sweet floral \n", "1185 waxed NaN nutty nutty, sweet \n", "1186 rindless pale yellow nutty, sweet NaN \n", "\n", " vegetarian vegan \n", "0 False False \n", "1 True False \n", "2 False False \n", "3 False False \n", "4 False False \n", "... ... ... \n", "1182 False False \n", "1183 True False \n", "1184 True False \n", "1185 False False \n", "1186 True False \n", "\n", "[1187 rows x 13 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "code", "execution_count": 10, "id": "633ed80e-e416-41f6-ae58-b86ce4c132af", "metadata": {}, "outputs": [ { "data": { "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", " \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", "
cheesemilkcountryregionfamilytypetexturerindcolorflavoraromavegetarianvegan
0AarewassercowSwitzerlandNaNNaNsemi-softbutterywashedyellowsweetbutteryFalseFalse
1Abbaye de BellocsheepFrancePays BasqueNaNsemi-hard, artisancreamy, dense, firmnaturalyellowburnt caramellanolineTrueFalse
2Abbaye de BelvalcowFranceNaNNaNsemi-hardelasticwashedivoryNaNaromaticFalseFalse
3Abbaye de CiteauxcowFranceBurgundyNaNsemi-soft, artisan, brinedcreamy, dense, smoothwashedwhiteacidic, milky, smoothbarnyardy, earthyFalseFalse
4Abbaye de TamiécowFranceSavoieNaNsoft, artisancreamy, open, smoothwashedwhitefruity, nuttyperfumed, pungentFalseFalse
..........................................
1182SveciaostcowSwedenLow-laying regionsNaNsemi-hard, brinedcreamy, supplerindlesspale yellowacidicNaNFalseFalse
1183SwaggoatAustraliaSouth AustraliaNaNfresh firm, artisancreamy, crumblyash coatedwhiteacidic, creamyfreshTrueFalse
1184SwaledalesheepEnglandSwaledale, North YorkshireNaNhardsemi firmNaNyellowsmooth, sweetfloralTrueFalse
1185Sweet Style SwissNaNSwitzerlandNaNNaNsemi-hard, artisanfirm, supplewaxedNaNnuttynutty, sweetFalseFalse
1186Swiss cheesecowUnited StatesNaNSwiss Cheesehard, artisan, processedfirmrindlesspale yellownutty, sweetNaNTrueFalse
\n", "

1181 rows × 13 columns

\n", "
" ], "text/plain": [ " cheese milk country region \\\n", "0 Aarewasser cow Switzerland NaN \n", "1 Abbaye de Belloc sheep France Pays Basque \n", "2 Abbaye de Belval cow France NaN \n", "3 Abbaye de Citeaux cow France Burgundy \n", "4 Abbaye de Tamié cow France Savoie \n", "... ... ... ... ... \n", "1182 Sveciaost cow Sweden Low-laying regions \n", "1183 Swag goat Australia South Australia \n", "1184 Swaledale sheep England Swaledale, North Yorkshire \n", "1185 Sweet Style Swiss NaN Switzerland NaN \n", "1186 Swiss cheese cow United States NaN \n", "\n", " family type texture \\\n", "0 NaN semi-soft buttery \n", "1 NaN semi-hard, artisan creamy, dense, firm \n", "2 NaN semi-hard elastic \n", "3 NaN semi-soft, artisan, brined creamy, dense, smooth \n", "4 NaN soft, artisan creamy, open, smooth \n", "... ... ... ... \n", "1182 NaN semi-hard, brined creamy, supple \n", "1183 NaN fresh firm, artisan creamy, crumbly \n", "1184 NaN hard semi firm \n", "1185 NaN semi-hard, artisan firm, supple \n", "1186 Swiss Cheese hard, artisan, processed firm \n", "\n", " rind color flavor aroma \\\n", "0 washed yellow sweet buttery \n", "1 natural yellow burnt caramel lanoline \n", "2 washed ivory NaN aromatic \n", "3 washed white acidic, milky, smooth barnyardy, earthy \n", "4 washed white fruity, nutty perfumed, pungent \n", "... ... ... ... ... \n", "1182 rindless pale yellow acidic NaN \n", "1183 ash coated white acidic, creamy fresh \n", "1184 NaN yellow smooth, sweet floral \n", "1185 waxed NaN nutty nutty, sweet \n", "1186 rindless pale yellow nutty, sweet NaN \n", "\n", " vegetarian vegan \n", "0 False False \n", "1 True False \n", "2 False False \n", "3 False False \n", "4 False False \n", "... ... ... \n", "1182 False False \n", "1183 True False \n", "1184 True False \n", "1185 False False \n", "1186 True False \n", "\n", "[1181 rows x 13 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data=data.dropna(subset=[\"country\",\"region\"], how=\"all\")\n", "data" ] }, { "cell_type": "code", "execution_count": null, "id": "e28eb2ee-1bed-4dd7-8133-c99b1f7ea26b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 11, "id": "5a4c0e30-8535-498b-9a9e-0d7d232d4eb7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_39592/2649664722.py:2: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " data[\"country\"]=data[\"country\"].fillna(\"\")\n", "/tmp/ipykernel_39592/2649664722.py:3: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " data[\"region\"]=data[\"region\"].fillna(\"\")\n" ] } ], "source": [ "data[[\"country\",\"region\"]]\n", "data[\"country\"]=data[\"country\"].fillna(\"\")\n", "data[\"region\"]=data[\"region\"].fillna(\"\")" ] }, { "cell_type": "code", "execution_count": 35, "id": "0edcee6f-a2c3-4804-a665-507b77f2651b", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_39592/3582726305.py:1: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " data[\"location\"]=data[\"region\"]+\", \"+data[\"country\"]\n" ] } ], "source": [ "data[\"location\"]=data[\"region\"]+\", \"+data[\"country\"]" ] }, { "cell_type": "code", "execution_count": 36, "id": "017e30da-4f60-4d16-b6d4-56fb76acb740", "metadata": {}, "outputs": [ { "data": { "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", " \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", "
cheesemilkcountryregionfamilytypetexturerindcolorflavoraromavegetarianveganlocation
0AarewassercowSwitzerlandNaNsemi-softbutterywashedyellowsweetbutteryFalseFalse, Switzerland
1Abbaye de BellocsheepFrancePays BasqueNaNsemi-hard, artisancreamy, dense, firmnaturalyellowburnt caramellanolineTrueFalsePays Basque, France
2Abbaye de BelvalcowFranceNaNsemi-hardelasticwashedivoryNaNaromaticFalseFalse, France
3Abbaye de CiteauxcowFranceBurgundyNaNsemi-soft, artisan, brinedcreamy, dense, smoothwashedwhiteacidic, milky, smoothbarnyardy, earthyFalseFalseBurgundy, France
4Abbaye de TamiécowFranceSavoieNaNsoft, artisancreamy, open, smoothwashedwhitefruity, nuttyperfumed, pungentFalseFalseSavoie, France
.............................................
1182SveciaostcowSwedenLow-laying regionsNaNsemi-hard, brinedcreamy, supplerindlesspale yellowacidicNaNFalseFalseLow-laying regions, Sweden
1183SwaggoatAustraliaSouth AustraliaNaNfresh firm, artisancreamy, crumblyash coatedwhiteacidic, creamyfreshTrueFalseSouth Australia, Australia
1184SwaledalesheepEnglandSwaledale, North YorkshireNaNhardsemi firmNaNyellowsmooth, sweetfloralTrueFalseSwaledale, North Yorkshire, England
1185Sweet Style SwissNaNSwitzerlandNaNsemi-hard, artisanfirm, supplewaxedNaNnuttynutty, sweetFalseFalse, Switzerland
1186Swiss cheesecowUnited StatesSwiss Cheesehard, artisan, processedfirmrindlesspale yellownutty, sweetNaNTrueFalse, United States
\n", "

1181 rows × 14 columns

\n", "
" ], "text/plain": [ " cheese milk country region \\\n", "0 Aarewasser cow Switzerland \n", "1 Abbaye de Belloc sheep France Pays Basque \n", "2 Abbaye de Belval cow France \n", "3 Abbaye de Citeaux cow France Burgundy \n", "4 Abbaye de Tamié cow France Savoie \n", "... ... ... ... ... \n", "1182 Sveciaost cow Sweden Low-laying regions \n", "1183 Swag goat Australia South Australia \n", "1184 Swaledale sheep England Swaledale, North Yorkshire \n", "1185 Sweet Style Swiss NaN Switzerland \n", "1186 Swiss cheese cow United States \n", "\n", " family type texture \\\n", "0 NaN semi-soft buttery \n", "1 NaN semi-hard, artisan creamy, dense, firm \n", "2 NaN semi-hard elastic \n", "3 NaN semi-soft, artisan, brined creamy, dense, smooth \n", "4 NaN soft, artisan creamy, open, smooth \n", "... ... ... ... \n", "1182 NaN semi-hard, brined creamy, supple \n", "1183 NaN fresh firm, artisan creamy, crumbly \n", "1184 NaN hard semi firm \n", "1185 NaN semi-hard, artisan firm, supple \n", "1186 Swiss Cheese hard, artisan, processed firm \n", "\n", " rind color flavor aroma \\\n", "0 washed yellow sweet buttery \n", "1 natural yellow burnt caramel lanoline \n", "2 washed ivory NaN aromatic \n", "3 washed white acidic, milky, smooth barnyardy, earthy \n", "4 washed white fruity, nutty perfumed, pungent \n", "... ... ... ... ... \n", "1182 rindless pale yellow acidic NaN \n", "1183 ash coated white acidic, creamy fresh \n", "1184 NaN yellow smooth, sweet floral \n", "1185 waxed NaN nutty nutty, sweet \n", "1186 rindless pale yellow nutty, sweet NaN \n", "\n", " vegetarian vegan location \n", "0 False False , Switzerland \n", "1 True False Pays Basque, France \n", "2 False False , France \n", "3 False False Burgundy, France \n", "4 False False Savoie, France \n", "... ... ... ... \n", "1182 False False Low-laying regions, Sweden \n", "1183 True False South Australia, Australia \n", "1184 True False Swaledale, North Yorkshire, England \n", "1185 False False , Switzerland \n", "1186 True False , United States \n", "\n", "[1181 rows x 14 columns]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "code", "execution_count": 37, "id": "bf9d5b2a-bd47-4c4c-85c4-5ad7769a3f31", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "430" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(set(data[\"location\"]))" ] }, { "cell_type": "code", "execution_count": 44, "id": "e7ae8f76-b33b-42ce-9dea-9fab9e33069e", "metadata": {}, "outputs": [], "source": [ "locs=list(set(loc for loc in data[\"location\"]))" ] }, { "cell_type": "code", "execution_count": 49, "id": "fb044984-c33c-492c-91a2-4e9fff29ceb3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Oristano, Italy',\n", " 'Isere, France',\n", " 'Romanian Carpathians, Romania',\n", " 'French Basque Country, Midi-Pyrénées, France',\n", " 'Kilmallock County Limerick, Ireland',\n", " ', Australia',\n", " 'massif des Causses, France',\n", " 'Basque, Pyrenees Mountains, France',\n", " 'Modena, Italy',\n", " 'Vermont, United States',\n", " 'Rhone-Alps, France',\n", " 'Brooklyn NY, United States',\n", " 'Coast of Oregon, United States',\n", " 'Veneto, Trentino, Italy',\n", " 'Emilia Romagna, Italy',\n", " ', Middle East',\n", " 'Carmarthenshire, Wales',\n", " ', Egypt, Lebanon, Syria',\n", " 'Jura, Switzerland',\n", " ', Australia, France',\n", " 'Rio Grande do Sul, Brazil',\n", " ', Turkey',\n", " 'Banks Peninsular in Canterbury, New Zealand',\n", " 'Loire Valley, France',\n", " 'Berry, France',\n", " 'Seattle, Washington, United States',\n", " 'Marathon, NY, United States',\n", " 'Setubal, Palmela and Sesimbra, Portugal',\n", " 'Central Balkan Mountains, Bulgaria',\n", " 'North Wootton, England',\n", " 'Allagau, Bavarian Alps, Germany',\n", " 'Colorado, United States',\n", " ', Armenia',\n", " 'Lebanon, CT, United States',\n", " 'Centre-Val de Loire, France',\n", " 'Barcelona, Spain',\n", " 'South West England, England',\n", " 'Laqueuille, France',\n", " 'Fethard, Co Tipperary, Ireland',\n", " 'Mornington Peninsula, Melbourne, Australia',\n", " 'Odell, Bedfordshire, England, Great Britain, United Kingdom',\n", " 'Shelburne Farms, United States',\n", " ', Israel',\n", " 'South Australia, Australia',\n", " 'Bornholm, Denmark',\n", " 'Pyrénées, France',\n", " 'Sardinia & Campania, Italy',\n", " 'Hunter Valley, Australia',\n", " 'Greenville, Indiana, United States',\n", " 'Pokolbin, Hunter Valley, Australia',\n", " 'Landford, England, Great Britain, United Kingdom',\n", " 'Carrigtwohill, Ireland',\n", " 'Minnesota, United States',\n", " 'Lombardy, Italy',\n", " 'County Cavan, Ireland',\n", " ', Argentina',\n", " ', France',\n", " 'Avila, Spain',\n", " 'Crotone, Italy',\n", " 'New Hampshire, United States',\n", " ', Serbia',\n", " 'Lombardy, Canada, Italy',\n", " 'Pays d’Auge, Normandy, France',\n", " 'Wisconsin, United States',\n", " 'Tomales, California, United States',\n", " ', Netherlands',\n", " 'Serra da Estrela, Portugal',\n", " 'St. Gallen (canton), Tufertschwil, Switzerland',\n", " 'Extremadura, Spain',\n", " ', Spain',\n", " 'Pesaro-Urbino, Italy',\n", " 'New York, France, United States',\n", " 'Northern Holland, Netherlands',\n", " 'South West England, United Kingdom',\n", " 'Mankato, MN, United States',\n", " 'Charentes-Poitou, France',\n", " 'Postel, Belgium',\n", " 'Auvergne, Salers, France',\n", " 'Leiden, Netherlands',\n", " 'Apulia, Italy, United States',\n", " ', Afghanistan',\n", " 'Canary Islands, Spain',\n", " ', Great Britain, United Kingdom, Wales',\n", " 'Oregon Coast Range, United States',\n", " 'Calabria, Italy',\n", " 'Utah, United States',\n", " 'Gâtinais, France',\n", " 'North Yorkshire, England',\n", " 'Carnia, Italy',\n", " 'Passendale, Belgium',\n", " \"Lucerne, Schwyz, Unterwald, and Zoug, and the following additional places: Muri district in d'Argovi, Switzerland\",\n", " 'Carrigtwohill, ',\n", " 'Adamstown, Co Wexford, Ireland',\n", " 'Bermondsey, London, England, Great Britain, United Kingdom',\n", " 'Lapland, Finland',\n", " 'Tasmania, Australia',\n", " 'Staffordshire, England, Great Britain, United Kingdom',\n", " 'Ile de France, France',\n", " 'Lodi, Italy',\n", " 'Macedonia, Thrace, Thessalia, Peloponissos, Ionian Islands, Aegean islands, Crete Island and Epirus, Greece',\n", " ', United Kingdom, United States',\n", " 'Southern California, United States',\n", " 'South West England, England, United Kingdom',\n", " 'Haute Vienne, France',\n", " 'Menorca, Balearic Islands, Spain',\n", " 'Aberdeenshire, Scotland',\n", " 'Kimball, United States',\n", " 'Schoonrewoerd, Leerdam, Netherlands',\n", " 'Friuli-Venezia Giulia, Italy',\n", " 'Larzac, France',\n", " 'Nottinghamshire, England, Great Britain, United Kingdom',\n", " 'Charm, Ohio, United States',\n", " 'Troyes , Aube, France',\n", " ', Denmark, Finland, Germany, Iceland, Norway, Sweden',\n", " 'Québec, Canada',\n", " 'Herault, France',\n", " 'Pullman, Washington, United States',\n", " 'Dumfries, Scotland',\n", " 'Tieton, Washington, United States',\n", " 'Murazzano, Italy',\n", " 'Pennsylvania, United States',\n", " 'Co. Carlow, Ireland',\n", " 'Languedoc-Roussillon, France',\n", " 'Aquitaine, France',\n", " 'Franche Comté, France, Switzerland',\n", " 'Duhallow, Ireland',\n", " 'Gippsland, Victoria, Australia',\n", " 'British Columbia, Canada',\n", " ', Austria, Germany',\n", " 'Hamilton, New Zealand',\n", " 'Roncq, France',\n", " 'St. Louis, Missouri, United States',\n", " 'Iowa, United States',\n", " 'Burgund, France',\n", " 'Pembrokeshire, Great Britain, United Kingdom, Wales',\n", " 'Ballarat, Victoria, Australia',\n", " 'Nord-Pas-de-Calais, France',\n", " 'Aconcagua, Chile',\n", " 'Massachusetts, United States',\n", " 'North Yorkshire, England, Great Britain, United Kingdom',\n", " 'Bregenzerwald, Kleinwalsertal, Großwalsertal, Laiblachtal (Pfänderstock) and Rheintal, Austria',\n", " ', Denmark',\n", " 'Ile-de-France/Champagne, France',\n", " 'Castilla Leon, Spain',\n", " 'Asiago, Italy',\n", " 'Manitoba, Canada',\n", " 'Cheshire, England, Great Britain, United Kingdom',\n", " 'County Tipperary, Clogheen, Ireland',\n", " 'Valpadana, Italy',\n", " 'Severn Valley, England, Great Britain, United Kingdom',\n", " 'Co Clare, Ireland',\n", " 'Timsbury, Somerset, England, Great Britain, United Kingdom',\n", " 'Somerset, England, Great Britain, United Kingdom',\n", " 'Greensboro, VT, United States',\n", " 'Dorset, England, Great Britain, United Kingdom',\n", " 'Orkney Islands, Great Britain, Scotland, United Kingdom',\n", " 'East Midlands, England',\n", " 'Northeastern Brazil, Brazil',\n", " 'NY, United States',\n", " ', England, Great Britain, United Kingdom',\n", " 'Alba, Italy',\n", " 'Fife, Scotland',\n", " 'Stranraer, England, Scotland, United Kingdom',\n", " 'Castelo Branco, Fundão and Idanha-a-Nova, Portugal',\n", " 'Moliterno, Italy',\n", " 'Dorset, England',\n", " 'Cornwall, England, Great Britain, United Kingdom',\n", " 'Northwest, United States',\n", " 'Carneros, Sonoma, California, United States',\n", " 'Croisy-sur-Eure, France',\n", " 'Pyrenees-Atlantiques, France',\n", " 'Västra Götaland, Sweden',\n", " 'Brisbane, Australia',\n", " 'Campania, Paestum, Foggia, Italy',\n", " 'Cevenes, France',\n", " ', England',\n", " 'Corsica, France',\n", " ', Austria',\n", " 'Ann Arbor, Michigan, United States',\n", " 'Po valley region, Italy',\n", " 'Banon, France',\n", " 'Herefordshire, West Midlands, United Kingdom',\n", " 'Zasavica, Serbia',\n", " ', United Kingdom, Wales',\n", " 'Lower Normandy, France',\n", " 'Piave Valley, Italy, Italy',\n", " 'Nicasio, United States',\n", " 'Beara Peninsula, Co. Cork, Ireland',\n", " 'Cotswolds, England, Great Britain, United Kingdom',\n", " 'Missouri, United States',\n", " 'Rhone Valley, France',\n", " 'California, United States',\n", " 'Oxfordshire, Great Britain',\n", " 'Petaluma, California, United States',\n", " 'Prince Edward Island, Canada',\n", " 'North Cornwall, England',\n", " 'Coquet, England',\n", " 'Emilia-Romagna, Italy',\n", " 'Castille-Leon, Spain',\n", " ', Cyprus',\n", " 'Bethania, United Kingdom',\n", " 'Puimichel in Provence Alpes, France',\n", " 'Gloucestershire County, England, United Kingdom',\n", " 'Galicia, Spain',\n", " 'Flanders, Belgium',\n", " ', Canada, Denmark, France, Germany, Netherlands, United States',\n", " 'Lanarkshire, Great Britain, Scotland, United Kingdom',\n", " 'Pays Basque, France',\n", " 'Veneto, Italy',\n", " ', Scotland',\n", " 'Victoria, Australia',\n", " 'Co Limerick, Ireland',\n", " 'Treviso, Veneto, Italy',\n", " 'Wales, Great Britain',\n", " 'Serra da Canastra, Minas Gerais state, Brazil',\n", " 'Devon, England, United Kingdom',\n", " 'Gevrey-Chambertin, Burgundy, France',\n", " ', Brazil',\n", " 'Gloucestershire, England, Great Britain, United Kingdom',\n", " 'Averyon, France',\n", " 'Midi-Pyrénées, France',\n", " 'Tipperary, Ireland',\n", " 'Maribo, Denmark',\n", " 'province of Brittany, France',\n", " 'Bavaria, Germany',\n", " ', United States',\n", " 'Northern Wisconsin, United States',\n", " 'New York, United States',\n", " 'Blarney, Ireland',\n", " 'Stewarton, Scotland, United Kingdom',\n", " 'Monterey, California, United States',\n", " 'Wigtownshire, Scotland',\n", " 'Cornwall, England',\n", " 'Co. Offaly, Ireland',\n", " 'Karlovy Vary, Czech Republic',\n", " 'Quebec, Canada',\n", " 'Laruns, France',\n", " 'Maine, United States',\n", " ', Mauritania',\n", " 'Piemonte, Italy',\n", " 'Brittany, France',\n", " 'Poitou-Charentes, France',\n", " 'Swaledale, North Yorkshire, England',\n", " 'Timsbury, Somerset, England, Scotland, Wales',\n", " ', Iceland',\n", " 'Oviken, Sweden',\n", " 'Pyrénées-Atlantiques, France',\n", " 'Pinconning, Michigan, United States',\n", " 'Belvederis, Lithuania',\n", " 'Chelmarsh, Bridgnorth, Shropshire, England',\n", " 'Peekskill, United States',\n", " 'Ceredigion, United Kingdom',\n", " 'All Holland, Netherlands',\n", " 'Normandy, France',\n", " 'Inagh, Co Clare, ',\n", " 'Amou, Gascony, France',\n", " 'Colby, Wisconsin, United States',\n", " 'Southwestern Wisconsin, United States',\n", " 'Lincolnshire, England, United Kingdom',\n", " 'Bas-Languedoc, Comtat Venaissin, France',\n", " ', United Kingdom',\n", " ', Switzerland',\n", " ', Portugal',\n", " 'Comox Valley, Vancouver Island, Canada',\n", " 'Derbyshire, Leicestershire, Nottinghamshire, England',\n", " 'Huizen, Netherlands',\n", " 'Asturias, Spain',\n", " 'Piedmont, Italy',\n", " ', Canada, India, United States',\n", " 'County Antrim, Ireland',\n", " ', Italy',\n", " 'St Antoine, France',\n", " ', Hungary',\n", " 'County Carlow, Ireland',\n", " 'Provencale, France',\n", " ', Sweden',\n", " 'Allgau, Germany',\n", " 'North Carolina, United States',\n", " 'Basilicata, Italy',\n", " ', Canada',\n", " 'Beira Baixa Province, Portugal',\n", " 'Ann Arbor, MI, United States',\n", " ', China, Nepal, Tibet',\n", " 'Bursa, Turkey',\n", " 'Websterville, VT, United States',\n", " 'Kent, United Kingdom',\n", " 'County Wexford, Ireland',\n", " 'island wide, Cyprus',\n", " 'Pyrenees, France',\n", " ', Mexico',\n", " 'Duchy of Limburg, Belgium, Germany, Netherlands',\n", " 'Cotherstone, England, United Kingdom',\n", " 'Richfield, Wisconsin, United States',\n", " 'Pienza, Italy',\n", " 'Dalmatia, Croatia',\n", " 'Taxco, Mexico',\n", " 'Plessisville, Quebec, Canada, France',\n", " ', Lebanon, Middle East',\n", " 'Mols, Denmark',\n", " '+, Cyprus, Egypt, Israel, Jordan, Lebanon, Middle East, Syria',\n", " 'Prince Edward County, Ontario, Canada',\n", " ', Belgium',\n", " 'Auvergne, France',\n", " ', Canada, United States',\n", " 'Upper Corsica, France',\n", " 'New South Wales, Australia',\n", " 'Tibet, China, Nepal, Tibet',\n", " 'West Bengal, India',\n", " ', Iraq',\n", " 'Béarnaise in Pyrénées-Atlantique, France',\n", " 'Co. Cork, Ireland',\n", " 'Vorarlberg, Austria',\n", " 'Midi-Pyrenees, France',\n", " ', Ireland',\n", " 'Wallonia, Belgium',\n", " 'Devon, England',\n", " 'South East England, United Kingdom',\n", " 'Indiana, United States',\n", " 'Island of Pag, Croatia',\n", " 'Sonoma, California, United States',\n", " 'Port Townsend, United States',\n", " 'old Liburnia (Dalmatia), Croatia',\n", " ', Mexico and Caribbean',\n", " 'North Yorkshire, England, United Kingdom',\n", " 'Charentes, France',\n", " 'La Velle, Wisconsin, United States',\n", " ', Germany',\n", " 'Monterey, California, Mexico, United States',\n", " 'Roxburghshire, Scotland, United Kingdom',\n", " 'Minas Gerais, Brazil',\n", " 'Sardinia (Italy), Southern Corsica (France), France, Italy',\n", " ', Hungary, Poland, Slovakia',\n", " 'Allgaeu Alps, Germany',\n", " 'Orkney Isles, Scotland, United Kingdom',\n", " 'East Sussex, United Kingdom',\n", " 'Póvoa de Lanhoso, Portugal',\n", " 'Central and Western Macedonia, Thessalia, Greece',\n", " 'Friuli Venezia Giulia and Veneto, Italy',\n", " 'Somerset, England, United Kingdom',\n", " 'Brickhill, Co. Clare, Ireland',\n", " 'New York, France',\n", " 'Burgundy, France',\n", " ', Holland',\n", " 'Gujarat, India',\n", " 'Pembrokeshire, United Kingdom',\n", " 'Milford, NJ, United States',\n", " 'Campania, Italy',\n", " ', Mongolia',\n", " 'Valencia, Spain',\n", " 'Tibet, China, Tibet',\n", " 'Bourgogne, France',\n", " 'Bjurholm, Sweden',\n", " 'Het Groene Hart, Netherlands',\n", " 'Kinfauns, Perthshire, Scotland',\n", " 'Stoneyford, Ireland',\n", " 'West Pawlet, VT, United States',\n", " 'Sebastopol, California, United States',\n", " 'Airedale farming district, New Zealand',\n", " 'Wales, London, United Kingdom, Wales',\n", " 'Tain, Scotland',\n", " 'Naples, Italy',\n", " 'Chirac, France',\n", " 'Fornells de la Selva, Gironès, Spain',\n", " 'Canton of Glarus, Switzerland',\n", " ', Belgium, Canada, France, Switzerland, United States',\n", " 'Tuscany, Italy',\n", " 'Haute-Savoie / Upper Savoy, France',\n", " 'Cornwall, ',\n", " 'Centre , the department of Loiret, France',\n", " ', Poland',\n", " 'Rhône-Alpes, France',\n", " 'Trakia, Albania, Bulgaria, Croatia, Greece, Israel, Macedonia, Romania, Serbia',\n", " 'Somerset, England',\n", " 'North East Victoria, Australia',\n", " 'Sardegna, Italy',\n", " 'Fairview, United States',\n", " 'Murcia, Spain',\n", " 'Languedoc, France',\n", " 'Veneto, ',\n", " 'Umbria, Lazio, Italy',\n", " 'Sulzberg, Austria',\n", " 'Queenstown, New Zealand',\n", " 'Bergues, France',\n", " 'Piora Valley, Switzerland',\n", " 'Savoie, France',\n", " 'Galax, Virginia, United States',\n", " ', New Zealand',\n", " 'Devon, England, Great Britain, United Kingdom',\n", " 'Avesnes, France',\n", " 'Dumfriesshire, Scotland, United Kingdom',\n", " ', Greece',\n", " 'Franche Comté, France',\n", " 'Ontario, Canada',\n", " 'North East Victoria, ',\n", " 'Oregon, United States',\n", " 'Loire, France',\n", " 'Friuli-Venezia Giulia and the Veneto, Italy',\n", " 'Virginia, United States',\n", " 'Central and Western Macedonia, Thessaly, Greece',\n", " 'Co. Mayo, Ireland',\n", " 'Normandy, Auvilliers, France',\n", " 'Bloomdale, United States',\n", " 'Azores, Portugal',\n", " 'Georgia, United States',\n", " 'Swabia, Germany',\n", " 'Äänekoski, Finland',\n", " 'Lazio, Sardinia, Italy',\n", " 'Buxton, Derbyshire, England, United Kingdom',\n", " 'Inagh, Co Clare, Ireland',\n", " 'Landshut, Germany',\n", " 'East Midlands, England, Great Britain, United Kingdom',\n", " 'East Midlands, England, United Kingdom',\n", " 'Stawley, near Wellington, Somerset, England, Great Britain, United Kingdom',\n", " 'Allgäu, Germany',\n", " ', Bangladesh, India',\n", " 'Stonegate, East Sussex, England, Great Britain, United Kingdom',\n", " 'Castile-Leon, Spain',\n", " 'New Jersey, United States',\n", " 'Svaneti, Samegrelo, Georgia',\n", " 'Low-laying regions, Sweden',\n", " 'California, Netherlands, United States',\n", " 'Gravina in Puglia, Murgia, Italy',\n", " 'Aveyron, Laguiole, France',\n", " 'Provence, France',\n", " 'Illoud (Haute-Marne), France',\n", " 'Cumbrian, United Kingdom',\n", " ', Wales',\n", " 'Illinois, United States',\n", " 'Aveyron, France',\n", " 'Anjou, France']" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "locs" ] }, { "cell_type": "code", "execution_count": 40, "id": "debb780e-ec13-4502-ac44-6001335e507d", "metadata": {}, "outputs": [], "source": [ "from geopy.geocoders import Nominatim" ] }, { "cell_type": "code", "execution_count": 41, "id": "eed3ac7b-5283-4d8e-bc26-61e1d821ccaf", "metadata": {}, "outputs": [], "source": [ "geolocator=Nominatim(user_agent=\"toto\")" ] }, { "cell_type": "code", "execution_count": 48, "id": "0043fe0d-e2d2-48f0-8953-ffc3dee52ba6", "metadata": {}, "outputs": [], "source": [ "location=geolocator.geocode(locs[1])" ] }, { "cell_type": "code", "execution_count": null, "id": "710341db-408f-4a4a-a849-65b963582ebc", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a2bbdb40ac6c43b0bfe08d014970db40", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/430 [00:00]" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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aAem+emnn5rbt2/3Pl599VVTkvmXv/zFrK2tNU3zWAFrW1ub930lJSUUsP7T3r17zdNOO828/PLLza+++srvda5fz84++2xz6dKl3uft7e3mSSedRAFwAB0dHeaSJUvMvLw888MPP/R73VPE+pe//MV7bNeuXRSxmqbpdrt9/tZt377dnDx5snn11Veb27dv59qF4IorrvArAL7xxhvN4uJi0zSPFQD/6le/8r7ucrnivgCYMBODqqqq/GYzHT582MzOzja/853vmDt27DCffvppMy0tzXz44Yeta2iM2Lt3r3nqqaeaF1xwgbl3716zrq7O+/Dg+vXs6aefNlNSUswnnnjCfP/9983FixebQ4YMMevr661uWsy54YYbTKfTab7++us+v2tHjhzxnnP99debBQUF5rp168zNmzebxcXF3psNfHWdzWSaXLvevP322+Zxxx1n3nPPPeZHH31krlq1ykxLSzP/93//13tOWVmZOWTIEPNvf/ub+d5775nf+ta3zKKiIrOlpcXClkcWYSYGBQozpmma27ZtM6dPn26mpKSYJ510kllWVmZNA2PM448/bkoK+OiK69ezBx54wCwoKDCTk5PNs88+23zrrbesblJMCva79vjjj3vPaWlpMX/wgx+YGRkZZlpamnnppZf6hGsc0z3McO169/zzz5tjx441U1JSzNGjR5uPPPKIz+sdHR3m7bffbmZnZ5spKSnmBRdcYO7evdui1kaHYZqmGfWxLQAAgDBhNhMAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALA1wgwAALC1/wdCADCp7OSqUwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "len(locations)\n", "locations\n", "x=[]\n", "y=[]\n", "for l in locations:\n", " if l is not None:\n", " x.append(l[0])\n", " y.append(l[1])\n", "plt.plot(x,y,\".\")" ] }, { "cell_type": "code", "execution_count": null, "id": "66ce4e4a-7006-411f-abd0-ee94d7cf99b3", "metadata": {}, "outputs": [], "source": [ "def filter_df(df, cols=None):\n", " if cols is None:\n", " cols = [\"milk\", \"country\", \"type\", \"texture\", \"flavor\", \"aroma\", \"family\", \"rind\"]\n", "\n", " df = df.copy()\n", " attributes = set() # Get all the possible attributes (some are mixed in different columns)\n", " for col in cols:\n", " values = set()\n", " for val in set(df[col]):\n", " if type(val) == float: # skip NaN values\n", " continue\n", " values = values.union([x.strip() for x in set(val.split(\",\"))])\n", " attributes = attributes.union(values)\n", " \n", " \n", " row_attrs = [set() for _ in range(len(df))] # get the attributes specific to each row\n", " for col in cols:\n", " for i, row in enumerate(df[col]):\n", " if type(row) != float:\n", " row_attrs[i] = row_attrs[i].union([x.strip() for x in row.split(\",\")])\n", "\n", " for attr in attributes: # Add attributes rows\n", " df[attr] = list(attr in row_attrs[i] for i in range(len(df[col])))\n", " for col in cols:\n", " del df[col]\n", "\n", " return df.copy()" ] }, { "cell_type": "code", "execution_count": null, "id": "fda6aaad-7b1e-4daa-8d28-cd049df9cec2", "metadata": {}, "outputs": [], "source": [ "data_features=filter_df(data)" ] }, { "cell_type": "markdown", "id": "a1b022a3-a2f9-4e39-9e79-48ae9f6adca5", "metadata": {}, "source": [ "## Classification" ] }, { "cell_type": "code", "execution_count": null, "id": "94bcde38-784b-41d9-89b0-3e2e17aa2979", "metadata": {}, "outputs": [], "source": [ "from sklearn import tree" ] }, { "cell_type": "code", "execution_count": null, "id": "7b2b9d3e-d7da-4f43-9e1c-4e62e837ed0b", "metadata": {}, "outputs": [], "source": [ "c=tree.DecisionTreeClassifier()" ] }, { "cell_type": "code", "execution_count": null, "id": "0b52b082-0554-45f2-9eff-e6a3ba6a8d08", "metadata": {}, "outputs": [], "source": [ "c.fit(" ] }, { "cell_type": "code", "execution_count": null, "id": "6d0b0d25-3476-4fbb-84c7-008437e87903", "metadata": {}, "outputs": [], "source": [ "data[[\"country\",\"region\"]]" ] }, { "cell_type": "markdown", "id": "100a7c2e-2d24-4814-bd68-4b9f6433ce4d", "metadata": {}, "source": [ "Transformer: la couleur en RGB; la localisation en GPS\n", "1ère question: est-ce que la couleur suffit à savoir d'où ça vient ? \n", "2ème question: est-ce que si on ajoute le type ça marche ? \n", "3ème question: et les caractéristiques gustatives ?\n" ] }, { "cell_type": "code", "execution_count": null, "id": "24e7ff6e-c308-4cc8-aeac-eeb372f4c479", "metadata": {}, "outputs": [], "source": [ "data_features" ] }, { "cell_type": "code", "execution_count": null, "id": "ca969d41-a88a-47d9-b94b-8b633d3d3348", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e2c9b84f-b899-4c99-abb7-37a9deeafbb5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d41c1cfc-1564-4131-8391-c8a8971b9d13", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "42a1e4ed-9a1e-41f8-a322-b5d2de68d24a", "metadata": {}, "outputs": [], "source": [ "data[pd.isnull(data[\"country\"])&pd.isnull(data[\"region\"])]\n" ] }, { "cell_type": "markdown", "id": "038cd38e-3890-4f73-91a7-c30294b3bc5b", "metadata": {}, "source": [ "## Pattern Mining" ] }, { "cell_type": "code", "execution_count": null, "id": "2e6b0dc1-030c-4239-803f-52736a41bcb5", "metadata": {}, "outputs": [], "source": [ "data" ] }, { "cell_type": "code", "execution_count": null, "id": "23b75579-95bb-4889-928f-9c3c1309a18a", "metadata": {}, "outputs": [], "source": [ "apriori(data)" ] }, { "cell_type": "code", "execution_count": null, "id": "61959c04-61bf-464a-89ca-72ec4782f927", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "744f8d1d-0874-4b92-921f-5a85ccf598ad", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f99af4d2-20e9-4bff-802a-dbdb91f95a96", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fa04bb73-ba5c-4164-a1af-f061d9627557", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "36ff5c84-93f3-4854-b2c4-e6082859c974", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }