{"cells":[{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import os\nimport warnings\n\nimport numpy as np\n\nfrom scipy.io.wavfile import write\n\nimport pandas as pd\n\nfrom mpl_toolkits.mplot3d import Axes3D\nimport matplotlib.pyplot as plt\n\nimport seaborn as sns\n\nimport IPython.display as ipd\n\nimport librosa\n\nfrom tqdm import tqdm","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv('/kaggle/input/birdsong-recognition/train.csv')\n\ndf_train.head()\ndf_train['ebird_code'].nunique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#read in dataframe of 5s samples from mp3 files 30s or less\n#id is 'filename_x' where x*5 is the start time of the audio sample within the mp3 \ndf_samples = pd.read_pickle('/kaggle/input/birdcall-samples/train_audio_samples.pkl')\n\nprint(len(df_samples.iloc[0]['sample']))\ndf_samples.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_samples['bird'].nunique()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"features = []\n\n#get top most occuring birds\ntop_birds = df_samples['bird'].value_counts()[:5]\n\ndf_samples = df_samples[df_samples['bird'].isin(top_birds.index)]\n\nfor sample in tqdm(df_samples['sample']):\n    #for each sample populate a row of features\n    row = {'mean': sample.mean(),\n           'max': sample.max(),\n           'min': sample.min(),\n           'spectral centroid': librosa.feature.spectral_centroid(sample).mean(),\n           'spectral bandwidth': librosa.feature.spectral_bandwidth(sample).mean(),\n           'spectral rolloff': librosa.feature.spectral_rolloff(sample).mean()}\n    \n    #'mfcc': librosa.feature.mfcc(sample).mean()\n    #'zero crossing rate': librosa.feature.zero_crossing_rate(sample).mean()\n    features.append(row)\n    \nX = pd.DataFrame(features)\nsample_id = df_samples['id'].reset_index(drop = True)\ny = df_samples['bird'].reset_index(drop = True)\ndf = pd.concat([X,y,sample_id], axis = 1)\n\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.cluster import KMeans\n\nfor bird in top_birds.index:\n    \n    df_bird = pd.DataFrame(df[df['bird']==bird])\n    \n    #try to cluster birdcalls/background noise\n    kmeans = KMeans(n_clusters=2)\n    kmeans.fit(df_bird.drop(['bird','id'], axis = 1))\n\n    df_bird['labels'] = kmeans.labels_\n    \n    g = sns.pairplot(df_bird, hue = 'labels', height = 2)\n    g.fig.suptitle(bird, y=1.08)\n    perc = sum(df_bird['labels'])/len(df_bird['labels'])\n    print(str(perc)+':'+str(1-perc))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(df_bird[df_bird['labels'] == 0][['bird','id']])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(df_bird[df_bird['labels'] == 1][['bird','id']])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}