{"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"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"![](https://storage.googleapis.com/kaggle-competitions/kaggle/44224/logos/header.png)","metadata":{}},{"cell_type":"markdown","source":"<div style=\"color:#254E58;margin:0;font-size:45px;font-family:Georgia;text-align:center;display:fill;border-radius:5px;overflow:hidden;font-weight:600;\"> Identify bird calls in soundscapes <br> BirdCLEF 2023</div>\n\n<h5 style=\"text-align: center; font-family: Verdana; font-size: 12px; font-style: normal; font-weight: bold; text-decoration: None; text-transform: none; letter-spacing: 1px; color: #7B0F2D; background-color: #ffffff;\">CREATED BY: PΣTR PΣTRUK</h5>\n\n<br>  \n<div style=\"background-color:#254E58;margin:0;font-size:45px;font-family:Georgia;text-align:center;display:fill;border-radius:5px;overflow:hidden;font-weight:600;\"> \n<p style=\"text-align: center;\">\n    <img src=\"https://media2.giphy.com/media/B81XkL3dtnWTe/giphy.gif?cid=ecf05e47m7npabh0eerhuktdewvfqk9ad6kw20heokwhh72g&rid=giphy.gif\" style='width: 600px; height: 450px;'>\n</p>\n</div>","metadata":{}},{"cell_type":"markdown","source":"<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>📋 Table of Content</strong>\n</div>\n\n\n<div style=\"border-radius:10px;\n            border :#0A0104 solid;\n            padding: 15px;\n            background-color:  ;\n            font-family: 'Segoe Script', cursive;\n            font-size:20px;\n            text-align: left\">\n    <a id=\"table\"></a>\n    <center>\n        > <a href=\"#1\"> Motivation and Prediction 🔎</a>\n        <br>\n        > <a href=\"#2\"> Goal of creating this Notebook 📌</a>\n        <br>\n        > <a href=\"#3\"> 📖 Basic concepts</a>\n        <br>\n        > <a href=\"#4\"> 📖 Example solution pipeline</a>\n        <br>\n        > <a href=\"#5\"> 📚 Importing Libraries</a>\n        <br>\n        > <a href=\"#6\"> ⚙️ CONFIG</a>\n        <br>\n        > <a href=\"#7\"> Read and Explain Dataset 🧾</a>\n        <br>\n        > <a href=\"#7.1\"> The .csv files 📁</a>\n        <br>\n        > <a href=\"#7.2\"> The Audio Files🔈🔉🔊</a>\n        <br>\n    </center>\n</div>","metadata":{}},{"cell_type":"markdown","source":"<a id=\"1\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>1. Motivation and Prediction 🔎</strong>\n  <p style=\"\n    margin-top: 10px;\n    font-size: 18px;\n  \">\n      \n_ _ _ \n      \n<p style = \"font-size:20px; color:white\">\n🌍🐦🎧🤖🏆 Join the Eastern African Bird Sound Classification competition and help protect avian biodiversity in Africa! 🌳🦜🌳 With your machine-learning skills, you'll develop computational solutions to identify Eastern African bird species by sound. 🤖🎧🦜<br><br>\nBy participating in this competition, you'll be contributing to ongoing efforts to measure the success of restoration projects and protect the planet at scale. 🌍🌳🦜<br><br>\nPlus, you'll be helping researchers and conservation practitioners accurately survey avian population trends, evaluate threats, and adjust their conservation actions more effectively. 🤝🐦💚<br><br>\nJoin the collaborative effort by Chemnitz University of Technology, Google Research, K. Lisa Yang Center for Conservation Bioacoustics at the Cornell Lab of Ornithology, LifeCLEF, NATURAL STATE, OekoFor GbR, and Xeno-canto, and make a difference for avian biodiversity in Africa! 🌍🦜🤝🏆</p>\n</div>\n","metadata":{"execution":{"iopub.status.busy":"2023-03-08T10:58:09.749643Z","iopub.execute_input":"2023-03-08T10:58:09.750183Z","iopub.status.idle":"2023-03-08T10:58:09.763632Z","shell.execute_reply.started":"2023-03-08T10:58:09.750138Z","shell.execute_reply":"2023-03-08T10:58:09.761365Z"}}},{"cell_type":"markdown","source":"<a id=\"2\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>2. Goal of creating this Notebook 📌</strong>\n  <p style=\"\n    margin-top: 10px;\n    font-size: 18px;\n  \">\n\n_ _ _ \n<p style = \"font-size:20px;color:white\">\n🔍🤔💻📊 Welcome to my EDA Notebook for the Eastern African Bird Sound Classification competition! The goal of creating this Notebook is to provide fellow competitors and data enthusiasts with a comprehensive guide to exploratory data analysis (EDA) for this competition. 📈🐦💻<br><br>\nIn this Notebook, I'll be sharing my step-by-step approach to data exploration, visualization, and analysis, with a focus on identifying key patterns and trends in the audio data. 📊🎧👀<br><br>\nWhether you're a seasoned data analyst or a beginner just starting out, this Notebook is designed to help you gain insights into the Eastern African bird species and develop effective machine learning models for sound classification. 🤖🦜👩‍💻<br><br>\nSo if you're ready to dive deep into the world of avian biodiversity and explore the unique sounds of Eastern African birds, join me on this exciting journey of EDA! 🌍🐦🔍💻</p>\n</div>\n","metadata":{}},{"cell_type":"markdown","source":"<a id=\"3\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>3. 📖 Basic concepts</strong>\n\n_ _ _ \n  <p style=\"\n    margin-top: 10px;\n    font-size: 18px;\n  \">\n    <div style=\"\n  text-align: justify;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 20px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n<p style = \"font-size:20px;color:white\">\n🤔📚📈 In order to understand the data in this competition, it's important to have a basic understanding of some key concepts in the field of data science and machine learning. Here are a few important terms to keep in mind:\n<li> \n    Machine learning - this is a type of artificial intelligence that allows machines to learn from data and improve their performance over time. 🤖📈</li><br>\n\n<li>\n    Audio signal processing - this is the process of analyzing audio data and extracting useful information from it. In this competition, we'll be using audio signal processing techniques to extract features from the bird sounds that will help us identify the species. 🎧📊\n</li><br>\n\n<li>\n    Feature engineering - this is the process of selecting and extracting relevant features from the audio data. The features we extract will be used to train our machine learning models to classify the bird sounds. 🦜🔍\n</li><br>\n\n<li>\n    Classification - this is the process of assigning a label or category to a given input based on its features. In this competition, we'll be using machine learning algorithms to classify the bird sounds based on the features we've extracted. 🐦🤖\n</li><br>\n\n<li> \n    Evaluation metrics - these are measures we use to evaluate the performance of our machine learning models. In this competition, we'll be using metrics such as accuracy and F1 score to evaluate our models' performance. 📈📊👩‍💻\n</li><br>\n\n<li>\n    Data augmentation 📈 this is a technique for increasing the size of the training dataset by creating additional samples from existing data by modifying, rotating, scaling, etc. This can help improve the model's quality and reduce the risk of overfitting.\n</li><br>\n\n<li>\n    Convolutional Neural Network (CNN) 🧠 this a machine learning algorithm used for processing images, sounds, and other types of data with spatial structure. It consists of several layers, each of which applies convolution and pooling to extract features from input data. CNN networks are often used in image and sound recognition tasks.\n</li><br>\n\n<li>\n    Mel-Frequency Cepstral Coefficients (MFCCs) 🎶 these are coefficients obtained from an audio signal that represent its spectral form. They are extracted from the spectrogram of a sound wave and used in speech and sound recognition tasks.\n</li><br>\n\n<li>\n    Transfer Learning 🤝 this a machine learning model training method that uses pre-trained models as base models for solving a new task. This can reduce the time and cost of training a new model and improve its quality, especially if you have limited data.\n</li><br>\n\n<li>\n    Gradient Boosting 📈 this a machine learning method that uses an ensemble of weak models, such as decision trees, and gradually improves them by adapting to the errors of the previous models. It is widely used in classification and regression tasks and can help improve prediction accuracy.\n</li><br>\n    By understanding these key concepts, we'll be better equipped to analyze and interpret the data in this competition and develop effective machine learning models for bird sound classification. 🌍🐦🔍💻\n</p>\n</div>\n</div>\n","metadata":{}},{"cell_type":"markdown","source":"<a id=\"4\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>4. 📖 Example solution pipeline</strong>\n  <p style=\"\n    margin-top: 10px;\n    font-size: 18px;\n  \">\n\n_ _ _\n<center> <img src=\"https://amikolajczyk.netlify.app/project/bird-song-classification/featured_hu3aff5ccb3ea948bda04165592820c0b8_127550_720x0_resize_q90_lanczos.jpg\" style='width: 900px; height: 500px;'>","metadata":{}},{"cell_type":"markdown","source":"<a id=\"5\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>5. 📚 Importing Librarie</strong>\n</div>\n​\n","metadata":{}},{"cell_type":"code","source":"import os\nimport folium\nimport librosa\nimport pandas as pd\nimport seaborn as sns\nfrom tqdm import tqdm\nimport librosa.display\nimport plotly.express as px\nfrom IPython.display import Audio\nfrom folium.plugins import HeatMap\nfrom matplotlib import pyplot as plt","metadata":{"_kg_hide-input":true,"_kg_hide-output":false,"execution":{"iopub.status.busy":"2023-03-14T11:00:14.186053Z","iopub.execute_input":"2023-03-14T11:00:14.186515Z","iopub.status.idle":"2023-03-14T11:00:14.194831Z","shell.execute_reply.started":"2023-03-14T11:00:14.186483Z","shell.execute_reply":"2023-03-14T11:00:14.193107Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"6\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>6. ⚙️ CONFIG</strong>\n</div>","metadata":{}},{"cell_type":"code","source":"class CFG:\n    class path:\n        to_base_floder = \"/kaggle/input/birdclef-2023\"\n        to_train_audio_folder = \"/kaggle/input/birdclef-2023/train_audio\"        \n        to_test_audio_folder = \"/kaggle/input/birdclef-2023/test_soundscapes\"\n        \n        to_taxonomy = \"/kaggle/input/birdclef-2023/eBird_Taxonomy_v2021.csv\"\n        to_train_metadata = \"/kaggle/input/birdclef-2023/train_metadata.csv\"\n        to_sample_submission = \"/kaggle/input/birdclef-2023/sample_submission.csv\"\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:00.437873Z","iopub.execute_input":"2023-03-13T15:11:00.438373Z","iopub.status.idle":"2023-03-13T15:11:00.448726Z","shell.execute_reply.started":"2023-03-13T15:11:00.438323Z","shell.execute_reply":"2023-03-13T15:11:00.447178Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"7\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>7. Read and Explain Dataset 🧾</strong>\n</div>\n​\n","metadata":{}},{"cell_type":"code","source":"metadata = pd.read_csv(CFG.path.to_train_metadata)\nsubmission = pd.read_csv(CFG.path.to_sample_submission)\ntaxonomy = pd.read_csv(CFG.path.to_taxonomy)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:00.450884Z","iopub.execute_input":"2023-03-13T15:11:00.451396Z","iopub.status.idle":"2023-03-13T15:11:00.727055Z","shell.execute_reply.started":"2023-03-13T15:11:00.451348Z","shell.execute_reply":"2023-03-13T15:11:00.725857Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"7.1\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>7.1 The .csv files 📁</strong>\n<p>\n \n_ _ _ \n</p>\n    <div style=\"\n  text-align: justify;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 20px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">Train_metadata.csv <br><br>\n<p style = \"font-size:20px;color:white\">\nA wide range of metadata is provided for the training data. The most directly relevant fields are:\n* primary_label - a code for the bird species. You can review detailed information about the bird codes by appending the code to https://ebird.org/species/, such as https://ebird.org/species/amecro for the American Crow. \n\n* latitude & longitude: coordinates for where the recording was taken. Some bird species may have local call 'dialects,' so you may want to seek geographic diversity in your training data. \n* author - The user who provided the recording.\n* filename: the name of the associated audio file.\n    \n_ _ _\n    \n<p style = \"font-size:20px;color:white\"> sample_submission.csv \n\nA valid sample submission.\n* row_id: A slug of [soundscape_id]_[end_time] for the prediction.\n* [bird_id]: There are 264 bird ID columns. You will need to predict the probability of the presence of each bird for each row.\n\n_ _ _\n<p style = \"font-size:20px;color:white\"> eBird_Taxonomy_v2021.csv\n      \nData on the relationships between different species.\n    </div>\n</div>\n","metadata":{}},{"cell_type":"code","source":"print(f\"metadata.shape={metadata.shape}\")\nmetadata.head()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:00.730540Z","iopub.execute_input":"2023-03-13T15:11:00.731566Z","iopub.status.idle":"2023-03-13T15:11:00.770321Z","shell.execute_reply.started":"2023-03-13T15:11:00.731525Z","shell.execute_reply":"2023-03-13T15:11:00.768913Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metadata.isna().sum()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:00.771781Z","iopub.execute_input":"2023-03-13T15:11:00.773165Z","iopub.status.idle":"2023-03-13T15:11:00.795916Z","shell.execute_reply.started":"2023-03-13T15:11:00.773108Z","shell.execute_reply":"2023-03-13T15:11:00.794683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metadata.dropna(inplace=True)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:00.797252Z","iopub.execute_input":"2023-03-13T15:11:00.798252Z","iopub.status.idle":"2023-03-13T15:11:00.827682Z","shell.execute_reply.started":"2023-03-13T15:11:00.798204Z","shell.execute_reply":"2023-03-13T15:11:00.826250Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, ax = plt.subplots(figsize=(16, 8))\nsns.countplot(data=metadata, x='rating', ax=ax);\nplt.title(\"Rating Distribution\");","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:00.829820Z","iopub.execute_input":"2023-03-13T15:11:00.830778Z","iopub.status.idle":"2023-03-13T15:11:01.260453Z","shell.execute_reply.started":"2023-03-13T15:11:00.830726Z","shell.execute_reply":"2023-03-13T15:11:01.259121Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metadata.primary_label.nunique()","metadata":{"execution":{"iopub.status.busy":"2023-03-13T15:11:01.262201Z","iopub.execute_input":"2023-03-13T15:11:01.263002Z","iopub.status.idle":"2023-03-13T15:11:01.272374Z","shell.execute_reply.started":"2023-03-13T15:11:01.262965Z","shell.execute_reply":"2023-03-13T15:11:01.270985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 38))\n\nsns.countplot(y='primary_label', data=metadata, order=metadata['primary_label'].value_counts().index)\nplt.title('Number of Recordings per Bird Species')\nplt.xlabel('Number of Recordings')\nplt.ylabel('Bird Species')\n\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-14T09:28:34.299887Z","iopub.execute_input":"2023-03-14T09:28:34.301313Z","iopub.status.idle":"2023-03-14T09:28:38.301667Z","shell.execute_reply.started":"2023-03-14T09:28:34.301254Z","shell.execute_reply":"2023-03-14T09:28:38.300399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nsns.scatterplot(x='longitude', y='latitude', data=metadata)\nplt.title('Geographic Distribution of Recordings')\nplt.xlabel('Longitude')\nplt.ylabel('Latitude')\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:04.926030Z","iopub.execute_input":"2023-03-13T15:11:04.926720Z","iopub.status.idle":"2023-03-13T15:11:05.240470Z","shell.execute_reply.started":"2023-03-13T15:11:04.926681Z","shell.execute_reply":"2023-03-13T15:11:05.239243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = px.scatter_mapbox(metadata, lat=\"latitude\", lon=\"longitude\", color=\"common_name\",\n                        hover_name=\"filename\", hover_data=[\"common_name\", \"author\", \"rating\"],\n                        zoom=3, height=500)\nfig.update_layout(mapbox_style=\"open-street-map\")\nfig.show()","metadata":{"_kg_hide-input":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = px.density_mapbox(metadata, lat='latitude', lon='longitude', radius=10,\n                        center=dict(\n                            lat=metadata['latitude'].mean(),\n                            lon=metadata['longitude'].mean(),\n                        ),\n                        zoom=2,\n                        mapbox_style=\"stamen-terrain\")\nfig.update_layout(title_text=\"Distribution of Bird Sightings\")\nfig.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:08.295566Z","iopub.execute_input":"2023-03-13T15:11:08.296330Z","iopub.status.idle":"2023-03-13T15:11:08.393995Z","shell.execute_reply.started":"2023-03-13T15:11:08.296292Z","shell.execute_reply":"2023-03-13T15:11:08.392697Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nsns.countplot(x='author', data=metadata, order=metadata['author'].value_counts().iloc[:20].index)\nplt.xticks(rotation=45)\nplt.title('Top 20 Authors with the Most Recordings')\nplt.xlabel('Author')\nplt.ylabel('Number of Recordings')\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:08.395363Z","iopub.execute_input":"2023-03-13T15:11:08.395670Z","iopub.status.idle":"2023-03-13T15:11:08.776543Z","shell.execute_reply.started":"2023-03-13T15:11:08.395640Z","shell.execute_reply":"2023-03-13T15:11:08.775664Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"taxonomy.shape={taxonomy.shape}\")\ntaxonomy.head()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:08.777779Z","iopub.execute_input":"2023-03-13T15:11:08.778289Z","iopub.status.idle":"2023-03-13T15:11:08.793704Z","shell.execute_reply.started":"2023-03-13T15:11:08.778255Z","shell.execute_reply":"2023-03-13T15:11:08.792199Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = px.histogram(taxonomy, x=\"TAXON_ORDER\", color_discrete_sequence=['aquamarine'])\nfig.update_layout(title_text=\"Distribution of Taxonomic Orders\")","metadata":{"execution":{"iopub.status.busy":"2023-03-14T11:07:47.240044Z","iopub.execute_input":"2023-03-14T11:07:47.240835Z","iopub.status.idle":"2023-03-14T11:07:47.377094Z","shell.execute_reply.started":"2023-03-14T11:07:47.240766Z","shell.execute_reply":"2023-03-14T11:07:47.375159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = px.box(taxonomy, x=\"CATEGORY\", y=\"TAXON_ORDER\", color_discrete_sequence=['red'])\nfig.update_layout(title_text=\"Taxonomic Order Distribution by Category\")","metadata":{"execution":{"iopub.status.busy":"2023-03-14T11:07:55.791878Z","iopub.execute_input":"2023-03-14T11:07:55.792313Z","iopub.status.idle":"2023-03-14T11:07:55.922689Z","shell.execute_reply.started":"2023-03-14T11:07:55.792282Z","shell.execute_reply":"2023-03-14T11:07:55.920572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = px.scatter(taxonomy, x=\"FAMILY\", y=\"TAXON_ORDER\")\nfig.update_layout(title_text=\"Taxonomic Order Distribution by Family\")","metadata":{"execution":{"iopub.status.busy":"2023-03-14T11:08:00.530960Z","iopub.execute_input":"2023-03-14T11:08:00.531531Z","iopub.status.idle":"2023-03-14T11:08:00.653120Z","shell.execute_reply.started":"2023-03-14T11:08:00.531480Z","shell.execute_reply":"2023-03-14T11:08:00.651638Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nsns.countplot(x='CATEGORY', data=taxonomy, order=taxonomy['CATEGORY'].value_counts().index)\nplt.title('Number of Bird Species in Each Genus')\nplt.xlabel('Genus')\nplt.ylabel('Number of Bird Species')\nplt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:08.795282Z","iopub.execute_input":"2023-03-13T15:11:08.796344Z","iopub.status.idle":"2023-03-13T15:11:09.055058Z","shell.execute_reply.started":"2023-03-13T15:11:08.796308Z","shell.execute_reply":"2023-03-13T15:11:09.053792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nsns.countplot(y='ORDER1', data=taxonomy, order=taxonomy['ORDER1'].value_counts().index)\nplt.title('Number of Bird Species in Each Family')\nplt.xlabel('Family')\nplt.ylabel('Number of Bird Species')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-03-13T15:11:09.056461Z","iopub.execute_input":"2023-03-13T15:11:09.056788Z","iopub.status.idle":"2023-03-13T15:11:09.642020Z","shell.execute_reply.started":"2023-03-13T15:11:09.056756Z","shell.execute_reply":"2023-03-13T15:11:09.640777Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f\"submission.shape={submission.shape}\")\nsubmission.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-13T15:11:09.643496Z","iopub.execute_input":"2023-03-13T15:11:09.644266Z","iopub.status.idle":"2023-03-13T15:11:09.663922Z","shell.execute_reply.started":"2023-03-13T15:11:09.644229Z","shell.execute_reply":"2023-03-13T15:11:09.662724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"7.2\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>7.2 The Audio Files🔈🔉🔊</strong>\n<p>\n \n_ _ _ \n</p>\n    <div style=\"\n  text-align: justify;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 20px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">train_audio <br><br>\n<p style = \"font-size:20px;color:white\">\nThe training data consists of short recordings of individual bird calls generously uploaded by users of xenocanto.org. These files have been downsampled to 32 kHz where applicable to match the test set audio and converted to the ogg format. The training data should have nearly all relevant files; we expect there is no benefit to looking for more on xenocanto.org.<br><br>\n\n_ _ _\n<p style = \"font-size:20px;color:white\"> test_soundscapes <br><br>\nWhen you submit a notebook, the test_soundscapes directory will be populated with approximately 200 recordings to be used for scoring. They are 10 minutes long and in ogg audio format. The file names are randomized. It should take your submission notebook approximately five minutes to load all of the test soundscapes.\n    </p>\n    </div>\n</div>","metadata":{}},{"cell_type":"code","source":"example_audio_dir = \"/kaggle/input/birdclef-2023/train_audio/abethr1\"\nabs_dir_path = os.path.abspath(example_audio_dir)\n\nfile_list = os.listdir(example_audio_dir)\nabs_file_list = [os.path.join(abs_dir_path, filename) for filename in file_list]\nabs_file_list","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:09.665399Z","iopub.execute_input":"2023-03-13T15:11:09.665736Z","iopub.status.idle":"2023-03-13T15:11:09.678687Z","shell.execute_reply.started":"2023-03-13T15:11:09.665703Z","shell.execute_reply":"2023-03-13T15:11:09.677580Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"abs_file_list[0]","metadata":{"execution":{"iopub.status.busy":"2023-03-13T15:12:29.202179Z","iopub.execute_input":"2023-03-13T15:12:29.203199Z","iopub.status.idle":"2023-03-13T15:12:29.209908Z","shell.execute_reply.started":"2023-03-13T15:12:29.203147Z","shell.execute_reply":"2023-03-13T15:12:29.208845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for filename in abs_file_list:\n    display(Audio(filename))    \n    \n    plt.figure(figsize=(12, 6))\n    \n    y, sr = librosa.load(filename)\n    librosa.display.specshow(librosa.power_to_db(librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000)), y_axis='mel', fmax=8000, x_axis='time')\n    \n    plt.colorbar(format='%+2.0f dB')\n    plt.title('Mel-Spectrogram')\n    plt.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-03-13T15:11:09.680313Z","iopub.execute_input":"2023-03-13T15:11:09.680683Z","iopub.status.idle":"2023-03-13T15:11:31.848500Z","shell.execute_reply.started":"2023-03-13T15:11:09.680653Z","shell.execute_reply":"2023-03-13T15:11:31.847552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"![](https://pinscreen.com/static/Terry_grey-e9c9adf34700234c4bed2e3da207b1b2.jpg)","metadata":{}},{"cell_type":"markdown","source":"<a id=\"3\"></a>\n\n<div style=\"\n  text-align: center;\n  background-color: #254E58;\n  font-family: 'Segoe Script', cursive;\n  font-size: 28px;\n  padding: 15px;\n  line-height: 1.2;\n  border: 2px solid #;\n  border-radius: 20px;\n  margin-bottom: 1em;\n  color: #fff;\n\">\n  <strong>Thank you for watching!</strong>\n\n\n_ _ _\n<center>\n<p style=\"font-family:newtimeroman;font-size:100%;text-align:center;border-radius:20px 20px; color:white\"> If you liked this Notebook, please do upvote.<br> If you have any questions, feel free to comment!<br> ✨Best Wishes✨</p>\n     \n<center> <img src=\"data:image/jpeg;base64,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\" style='width: 1200; height: 600px;'>\n    \n    \n    ","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}