{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":29761,"databundleVersionId":2558973,"sourceType":"competition"}],"dockerImageVersionId":30120,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-info\">  \n    <center><h3><strong>👨‍💻 Getting Started with Google Landmark Retrieval 2021</strong></h3></center>\n    <i></i>\n</div>","metadata":{}},{"cell_type":"markdown","source":"# <center><img src=\"https://akm-img-a-in.tosshub.com/businesstoday/images/story/201712/data-analytics_660_120717022837.jpg\"></center>","metadata":{}},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-danger\">  \n<h2><center><strong>Importing Python Libraries 📕 📗 📘 📙</strong></center></h2>\n        \n</div>","metadata":{}},{"cell_type":"code","source":"import os\n\n\nimport random\nimport seaborn as sns\nimport cv2\n\n# General packages\nimport pandas as pd\nimport numpy as np\nimport matplotlib\nimport matplotlib.pyplot as plt\nimport PIL\nimport IPython.display as ipd\nimport glob\nimport h5py\nimport plotly.graph_objs as go\nimport plotly.express as px\nfrom PIL import Image\nfrom tempfile import mktemp\n\nfrom bokeh.layouts import column, row\nfrom bokeh.models import ColumnDataSource, LinearAxis, Range1d\nfrom bokeh.models.tools import HoverTool\nfrom bokeh.palettes import BuGn4\nfrom bokeh.plotting import figure, output_notebook, show\nfrom bokeh.transform import cumsum\nfrom math import pi\n\noutput_notebook()\n\n\nfrom IPython.display import Image, display\nimport warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.listdir('../input/landmark-recognition-2021/')\n","metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-danger\">  \n<h2><center><strong>Loading the data 📁 📂</strong></center></h2>\n        \n</div>","metadata":{}},{"cell_type":"code","source":"BASE_PATH = '../input/landmark-recognition-2021'\n\nTRAIN_DIR = f'{BASE_PATH}/train'\nTEST_DIR = f'{BASE_PATH}/test'\n\nprint('Reading data...')\ntrain = pd.read_csv(f'{BASE_PATH}/train.csv')\nsubmission = pd.read_csv(f'{BASE_PATH}/sample_submission.csv')\nprint('Reading data completed')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### The dataset comprises of following important files:\n\n* **train.csv**: This file contains, ids and targets\n    * `id`: image id\n    * `landmark_id`: target landmark id\n    \n\n* The training set is available in the `train/` folder, with corresponding landmark labels in `train.csv`. \n* The test set images are listed in the `test/` folder. Each image has a unique id. \n\n> Note: Since there are a large number of images, each image is placed within three subfolders according to the first three characters of the image id (i.e. image abcdef.jpg is placed in a/b/c/abcdef.jpg).\n","metadata":{}},{"cell_type":"code","source":"display(train.head())\nprint(\"Shape of train_data :\", train.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display(submission.head())\nprint(\"Shape of submission :\", submission.shape)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-danger\">  \n<h2><center><strong>Exploratory data analysis 🔎 📊</strong></center></h2>\n        \n</div>\n\n### Target Distribution (Number of images per landmark_id)\n","metadata":{}},{"cell_type":"code","source":"# displaying only top 30 landmark\nlandmark = train.landmark_id.value_counts()\nlandmark_df = pd.DataFrame({'landmark_id':landmark.index, 'frequency':landmark.values}).head(30)\n\nlandmark_df['landmark_id'] =   landmark_df.landmark_id.apply(lambda x: f'landmark_id_{x}')\n\nfig = px.bar(landmark_df, x=\"frequency\", y=\"landmark_id\",color='landmark_id', orientation='h',\n             hover_data=[\"landmark_id\", \"frequency\"],\n             height=1000,\n             title='Number of images per landmark_id (Top 30 landmark_ids)')\nfig.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Inference**\n\n* There are 81313 unique landmark_ids\n* There is only one landmark which has more than 2300 images (landmark_id: 138982)\n* Number of images per landmark_id ranges from 2 to 6272.\n* Out of 81313, there are 79298 (97.5%) landmark_ids with less than 100 images.","metadata":{}},{"cell_type":"markdown","source":"<div class=\"alert alert-block alert-danger\">  \n<h1><center><strong>Data Visualization 📝</strong></center></h1>\n\n\n   \n        \n</div>","metadata":{}},{"cell_type":"code","source":"import PIL\nfrom PIL import Image, ImageDraw\n\n\ndef display_images(images, title=None): \n    f, ax = plt.subplots(5,5, figsize=(18,22))\n    if title:\n        f.suptitle(title, fontsize = 30)\n\n    for i, image_id in enumerate(images):\n        image_path = os.path.join(TRAIN_DIR, f'{image_id[0]}/{image_id[1]}/{image_id[2]}/{image_id}.jpg')\n        image = Image.open(image_path)\n        \n        ax[i//5, i%5].imshow(image) \n        image.close()       \n        ax[i//5, i%5].axis('off')\n\n        landmark_id = train[train.id==image_id.split('.')[0]].landmark_id.values[0]\n        ax[i//5, i%5].set_title(f\"ID: {image_id.split('.')[0]}\\nLandmark_id: {landmark_id}\", fontsize=\"12\")\n\n    plt.show() ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"samples = train.sample(25).id.values\ndisplay_images(samples)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Visualizing landmark with images (landmark_id: 89894)","metadata":{}},{"cell_type":"code","source":"samples = train[train.landmark_id == 89894].sample(25).id.values\n\ndisplay_images(samples)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Visualizing landmark with  images (landmark_id: 82267)","metadata":{}},{"cell_type":"code","source":"samples = train[train.landmark_id == 82267].sample(25).id.values\n\ndisplay_images(samples)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Visualizing landmark with images (landmark_id: 162833)","metadata":{}},{"cell_type":"code","source":"samples = train[train.landmark_id == 162833].sample(25).id.values\n\ndisplay_images(samples)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualizing landmark images (landmark_id: 10419)","metadata":{}},{"cell_type":"code","source":"samples = train[train.landmark_id == 10419].sample(25).id.values\n\ndisplay_images(samples)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Guideline to submit the results","metadata":{}},{"cell_type":"code","source":"sample_submission = pd.read_csv('../input/landmark-recognition-2021/sample_submission.csv')\nsample_submission.to_csv('submission.csv',index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}