{"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":"code","source":"import os\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport librosa\nimport pandas as pd\nimport time","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-05-16T16:12:15.645943Z","iopub.execute_input":"2022-05-16T16:12:15.646415Z","iopub.status.idle":"2022-05-16T16:12:15.651453Z","shell.execute_reply.started":"2022-05-16T16:12:15.646381Z","shell.execute_reply":"2022-05-16T16:12:15.650750Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path = '/kaggle/input/birdclef-2022/train_audio/'\nbird_names = sorted(os.listdir(path))\nprint(bird_names)","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:12:15.657300Z","iopub.execute_input":"2022-05-16T16:12:15.658042Z","iopub.status.idle":"2022-05-16T16:12:15.672668Z","shell.execute_reply.started":"2022-05-16T16:12:15.657997Z","shell.execute_reply":"2022-05-16T16:12:15.671557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"duration = 5\nlabel = ['None']\nnumber = 0\nlabel_numbers = [number]\nall_labels = np.zeros((1, len(bird_names)))\nMagnitudes = np.array([np.zeros(110250)]) ## duration 5 seconds","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:12:15.674614Z","iopub.execute_input":"2022-05-16T16:12:15.675161Z","iopub.status.idle":"2022-05-16T16:12:15.683394Z","shell.execute_reply.started":"2022-05-16T16:12:15.675123Z","shell.execute_reply":"2022-05-16T16:12:15.682527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for bird_name in bird_names[0:3]:  ### RUNING ONLY IN THE TREE FIRST DUE TO TIME CONSUMING\n    number +=1\n    bird_tracks = os.listdir(path + bird_name)\n    for track in bird_tracks:\n        track_name = str(path + bird_name + '/' + track)\n        y, sr = librosa.load(track_name, duration=duration, offset=0)\n        if len(y) == 110250:\n            print(bird_name)\n            my_label_numbers = np.zeros((1, len(bird_names)))\n            my_label_numbers[0, number-1] = 1\n            all_labels = np.vstack((all_labels, my_label_numbers))\n            label_numbers.append(number)\n            label.append(bird_name)\n            # sd.play(y, sr)\n            dt = duration / len(y)\n            time = np.arange(0, duration, dt)\n            y_hat = np.fft.fft(y, len(y))\n            PSD = y_hat * np.conj(y_hat)  ## power spectrum density\n            Magnitudes = np.vstack((Magnitudes, PSD.real))\n            n = len(time)\n            freq = (1 / (dt * n)) * np.arange(n)\n            frequency_name = freq\n            L = np.arange(1, int(n / 2))  ##\n            print(Magnitudes.shape, np.size(label))","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:12:15.692249Z","iopub.execute_input":"2022-05-16T16:12:15.693392Z","iopub.status.idle":"2022-05-16T16:12:21.165325Z","shell.execute_reply.started":"2022-05-16T16:12:15.693326Z","shell.execute_reply":"2022-05-16T16:12:21.164261Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_label = pd.DataFrame(all_labels[1:], columns=bird_names)\n# df_label.to_csv('birds.csv', index=False)\n\nX = Magnitudes[1:, :]\nprint(X.shape)\n#yl = label_numbers[1:-1]\nyl = all_labels[1:, :]\nprint(yl.shape)","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:12:21.167104Z","iopub.execute_input":"2022-05-16T16:12:21.167414Z","iopub.status.idle":"2022-05-16T16:12:21.176019Z","shell.execute_reply.started":"2022-05-16T16:12:21.167378Z","shell.execute_reply":"2022-05-16T16:12:21.174683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import mean_absolute_error\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.ensemble import RandomForestRegressor","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:12:21.177351Z","iopub.execute_input":"2022-05-16T16:12:21.177709Z","iopub.status.idle":"2022-05-16T16:12:21.195139Z","shell.execute_reply.started":"2022-05-16T16:12:21.177671Z","shell.execute_reply":"2022-05-16T16:12:21.194035Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Split into validation and training data\ntrain_X, val_X, train_y, val_y = train_test_split(X, yl, random_state=0)\n\nmodel = RandomForestRegressor(max_leaf_nodes=150 ,random_state=0)\n#model = DecisionTreeRegressor(max_depth=50)\n#Fit Model\nprint(\"-------------------------------\")\nmodel.fit(train_X, train_y)\ny_pred = model.predict(val_X)\nprint(y_pred)\nprint(model.score(val_X, val_y))","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:12:21.197405Z","iopub.execute_input":"2022-05-16T16:12:21.197833Z","iopub.status.idle":"2022-05-16T16:13:45.077051Z","shell.execute_reply.started":"2022-05-16T16:12:21.197791Z","shell.execute_reply":"2022-05-16T16:13:45.075945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_track_path = '/kaggle/input/birdclef-2022/test_soundscapes/'\nprint(os.listdir(test_track_path))","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:13:45.078831Z","iopub.execute_input":"2022-05-16T16:13:45.079322Z","iopub.status.idle":"2022-05-16T16:13:45.089072Z","shell.execute_reply.started":"2022-05-16T16:13:45.079260Z","shell.execute_reply":"2022-05-16T16:13:45.088046Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_track = test_track_path + os.listdir(test_track_path)[0]\nprint(test_track)","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:13:45.090130Z","iopub.execute_input":"2022-05-16T16:13:45.090660Z","iopub.status.idle":"2022-05-16T16:13:45.101538Z","shell.execute_reply.started":"2022-05-16T16:13:45.090597Z","shell.execute_reply":"2022-05-16T16:13:45.100307Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y, sr = librosa.load(test_track, offset=0)\nduration = librosa.get_duration(y=y, sr=sr)\nprint(duration)\nTest_Magnitudes = np.array([np.zeros(110250)])\nend_time = [0]","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:13:45.103349Z","iopub.execute_input":"2022-05-16T16:13:45.103676Z","iopub.status.idle":"2022-05-16T16:13:47.103202Z","shell.execute_reply.started":"2022-05-16T16:13:45.103639Z","shell.execute_reply":"2022-05-16T16:13:47.102178Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for offset in range(0, int(duration), 5):\n    print(offset)\n    end_time.append(offset+5)\n    y, sr = librosa.load(test_track, duration=5, offset=offset)\n#     print(y)\n    y_hat = np.fft.fft(y, len(y))\n    PSD = y_hat * np.conj(y_hat)  ## power spectrum density\n\n    Test_Magnitudes = np.vstack((Test_Magnitudes, PSD.real))","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:13:47.104648Z","iopub.execute_input":"2022-05-16T16:13:47.104905Z","iopub.status.idle":"2022-05-16T16:13:49.472941Z","shell.execute_reply.started":"2022-05-16T16:13:47.104876Z","shell.execute_reply":"2022-05-16T16:13:49.472016Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = model.predict(Test_Magnitudes[1:, :])\n\ndf = pd.DataFrame(y_pred, columns=bird_names)\ndf['ending_time'] = end_time[1:]\n\nprint(df)\ndf.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-05-16T16:13:49.474359Z","iopub.execute_input":"2022-05-16T16:13:49.474922Z","iopub.status.idle":"2022-05-16T16:13:49.514315Z","shell.execute_reply.started":"2022-05-16T16:13:49.474881Z","shell.execute_reply":"2022-05-16T16:13:49.513249Z"},"trusted":true},"execution_count":null,"outputs":[]}]}