{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"vscode":{"interpreter":{"hash":"267fdfe96fa7a504aacdc9335fe5a6b8d723b7b9c8037a0d00bde7f4e13d528f"}}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install opensmile\nimport opensmile\nimport pandas as pd\nimport numpy as np\nimport glob\nimport os\nimport pickle\nimport random\nimport librosa\nfrom sklearn.preprocessing import MinMaxScaler, StandardScaler\nfrom sklearn.manifold import TSNE\nimport matplotlib.pyplot as plt\nsmile = opensmile.Smile(\n    feature_set=opensmile.FeatureSet.eGeMAPSv02,\n    feature_level=opensmile.FeatureLevel.Functionals,\n    num_workers=24,\n)\nscaler = StandardScaler()","metadata":{"execution":{"iopub.status.busy":"2023-09-09T13:53:04.010588Z","iopub.execute_input":"2023-09-09T13:53:04.011006Z","iopub.status.idle":"2023-09-09T13:53:31.423066Z","shell.execute_reply.started":"2023-09-09T13:53:04.010973Z","shell.execute_reply":"2023-09-09T13:53:31.421842Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Load Data and Extract Feature","metadata":{}},{"cell_type":"code","source":"rangpur_data = glob.glob('/kaggle/input/rangpur-train-test/rangpur/*/*.wav')\ndf_rangpur = smile.process_files(rangpur_data)\n\n\nctg_data = glob.glob('/kaggle/input/chittagong-train-test/chittagong/*/*.wav')\ndf_ctg = smile.process_files(ctg_data)\n\n\nkishor_data = glob.glob('/kaggle/input/kishoreganj-train-test/kishoreganj/*/*.wav')\ndf_kishor = smile.process_files(kishor_data)\n\n\nnarail_data = glob.glob('/kaggle/input/narail-train-test/narail/*/*.wav')\ndf_narail = smile.process_files(narail_data)\n\nnarsh_data = glob.glob('/kaggle/input/narsingdi-train-test/narsingdi/*/*.wav')\ndf_narsh = smile.process_files(narsh_data)\n\nmacro_data = glob.glob('/kaggle/input/bengaliai-speech-wav-dataset-0/*/*.wav')[:10000]\ndf_macro = smile.process_files(macro_data)","metadata":{"execution":{"iopub.status.busy":"2023-09-09T13:53:31.425120Z","iopub.execute_input":"2023-09-09T13:53:31.425611Z","iopub.status.idle":"2023-09-09T14:48:20.792299Z","shell.execute_reply.started":"2023-09-09T13:53:31.425574Z","shell.execute_reply":"2023-09-09T14:48:20.790716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Concat All Data","metadata":{}},{"cell_type":"code","source":"vertical_concat = pd.concat([df_rangpur, df_ctg, df_kishor, df_narail, df_narsh, df_macro], axis=0)\nvertical_concat = vertical_concat.dropna().drop_duplicates()\nprint(vertical_concat.shape)","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:48:20.794180Z","iopub.execute_input":"2023-09-09T14:48:20.794535Z","iopub.status.idle":"2023-09-09T14:48:21.004931Z","shell.execute_reply.started":"2023-09-09T14:48:20.794501Z","shell.execute_reply":"2023-09-09T14:48:21.004045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vertical_columns = vertical_concat.columns.to_list()\nvertical_index = vertical_concat.index.tolist()","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:48:21.007271Z","iopub.execute_input":"2023-09-09T14:48:21.008049Z","iopub.status.idle":"2023-09-09T14:48:21.020133Z","shell.execute_reply.started":"2023-09-09T14:48:21.008016Z","shell.execute_reply":"2023-09-09T14:48:21.019222Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load GENEVA feature set .pkl file\ndomains = []\nfor f in vertical_index :\n    filename = f[0]\n    domain_name = filename.split(\"/\")[-3]\n    if domain_name == 'bengaliai-speech-wav-dataset-0':\n        domain_name = 'OOD_Speech'\n    domains.append(domain_name)\n#domains","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:48:21.021388Z","iopub.execute_input":"2023-09-09T14:48:21.022072Z","iopub.status.idle":"2023-09-09T14:48:21.048174Z","shell.execute_reply.started":"2023-09-09T14:48:21.022040Z","shell.execute_reply":"2023-09-09T14:48:21.047099Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"vertical_concat['domain'] = domains\ndf_normalized =  pd.DataFrame(scaler.fit_transform(vertical_concat[vertical_columns]), columns=vertical_columns,)\ndf_normalized","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:48:21.049677Z","iopub.execute_input":"2023-09-09T14:48:21.049999Z","iopub.status.idle":"2023-09-09T14:48:21.139848Z","shell.execute_reply.started":"2023-09-09T14:48:21.049971Z","shell.execute_reply":"2023-09-09T14:48:21.138684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fit and transform the dataframe using the scaler object\ndf_normalized = pd.DataFrame(scaler.fit_transform(vertical_concat[vertical_columns]), columns=vertical_columns,)\ndf_normalized[\"domains\"] = domains\n#df_normalized[\"domains\"] = df_normalized[\"domains\"].apply(lambda x: \"OpenSLR\" if x.startswith(\"0\") else x) \n#df_normalized[\"domains\"] = df_normalized[\"domains\"].apply(lambda x: domain_name_map[x] if x in domain_name_map.keys() else x)\n\ndf_normalized = df_normalized[df_normalized['domains']!='OOD_Speech']\n\nlabels = df_normalized[\"domains\"].unique().tolist()\ncolors = plt.cm.get_cmap('tab20').colors\ncolor_map = {label: colors[i % len(colors)] for i, label in enumerate(labels)}\ncolor_map[\"MaCro train\"] = (1,.25,.05)\ndomain_color = [color_map[x] for x in df_normalized['domains']]\nprint(labels)","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:48:21.141431Z","iopub.execute_input":"2023-09-09T14:48:21.142571Z","iopub.status.idle":"2023-09-09T14:48:21.199557Z","shell.execute_reply.started":"2023-09-09T14:48:21.142526Z","shell.execute_reply":"2023-09-09T14:48:21.198219Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.rcParams['figure.dpi'] = 600\nplt.rcParams['font.size'] = '12'\n# Perform t-SNE on the feature set\ntsne = TSNE(n_components=2, random_state=44, perplexity=30, metric=\"l2\", n_iter=5000, early_exaggeration=50.0)\ntsne_results = tsne.fit_transform(df_normalized[vertical_columns])\n# Plot t-SNE results\n# plt.scatter(tsne_results[:, 0], tsne_results[:, 1], s = .3, c=domain_color)\n# plt.axis('off')\n# plt.legend()\n# plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:48:21.201336Z","iopub.execute_input":"2023-09-09T14:48:21.201803Z","iopub.status.idle":"2023-09-09T14:52:16.806933Z","shell.execute_reply.started":"2023-09-09T14:48:21.201749Z","shell.execute_reply":"2023-09-09T14:52:16.805868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import seaborn as sns\ntsne_df   = pd.DataFrame(tsne_results)\nhtw = tsne_df.to_numpy(copy = True)\ntsne_df['tsne_x'] = htw[:, 0]\ntsne_df['tsne_y'] = htw[:, 1]\ntsne_df.head()\nmy_cmap = sns.color_palette(list(color_map.values()))\nplt.rcParams['figure.dpi'] = 600\n\nsns.scatterplot(\n      x       = \"tsne_x\",\n      y       = \"tsne_y\",\n      hue= df_normalized.domains.to_list(),\n      data    = tsne_df,\n      alpha   = 0.9,\n      s= 2,\n      palette = my_cmap\n   )\n\n\nplt.legend( loc = 'best', ncol= 4, fontsize= 6, bbox_to_anchor=(1.1,0), frameon=False)\nplt.axis('off')\n\nplt.savefig('sushmitSNE.png', bbox_inches='tight')\n\n#plt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:52:16.812208Z","iopub.execute_input":"2023-09-09T14:52:16.814683Z","iopub.status.idle":"2023-09-09T14:52:20.569581Z","shell.execute_reply.started":"2023-09-09T14:52:16.814613Z","shell.execute_reply":"2023-09-09T14:52:20.568525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(df_normalized.shape)","metadata":{"execution":{"iopub.status.busy":"2023-09-09T14:55:53.481811Z","iopub.execute_input":"2023-09-09T14:55:53.482199Z","iopub.status.idle":"2023-09-09T14:55:53.488152Z","shell.execute_reply.started":"2023-09-09T14:55:53.482168Z","shell.execute_reply":"2023-09-09T14:55:53.486960Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_normalized['domains'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:06:20.876846Z","iopub.execute_input":"2023-09-09T15:06:20.877263Z","iopub.status.idle":"2023-09-09T15:06:20.892053Z","shell.execute_reply.started":"2023-09-09T15:06:20.877224Z","shell.execute_reply":"2023-09-09T15:06:20.890865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rangpur = df_normalized[df_normalized[\"domains\"] == \"rangpur\"]\nrangpur = rangpur.drop(columns=[\"domains\"])\nrangpur = rangpur[:1321]\nprint(rangpur.shape)\nrangpur_values = rangpur.values\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:29:10.779040Z","iopub.execute_input":"2023-09-09T15:29:10.779423Z","iopub.status.idle":"2023-09-09T15:29:10.792767Z","shell.execute_reply.started":"2023-09-09T15:29:10.779395Z","shell.execute_reply":"2023-09-09T15:29:10.791453Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"kishoreganj = df_normalized[df_normalized[\"domains\"] == \"kishoreganj\"]\nkishoreganj = kishoreganj.drop(columns=[\"domains\"])\nkishoreganj = kishoreganj[:1321]\nprint(kishoreganj.shape)\nkishoreganj_values = kishoreganj.values\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:29:15.511374Z","iopub.execute_input":"2023-09-09T15:29:15.511790Z","iopub.status.idle":"2023-09-09T15:29:15.524932Z","shell.execute_reply.started":"2023-09-09T15:29:15.511756Z","shell.execute_reply":"2023-09-09T15:29:15.523735Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"narail = df_normalized[df_normalized[\"domains\"] == \"narail\"]\nnarail = narail.drop(columns=[\"domains\"])\nnarail = narail[:1321]\nprint(narail.shape)\nnarail_values = narail.values","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:29:20.485045Z","iopub.execute_input":"2023-09-09T15:29:20.485418Z","iopub.status.idle":"2023-09-09T15:29:20.496971Z","shell.execute_reply.started":"2023-09-09T15:29:20.485388Z","shell.execute_reply":"2023-09-09T15:29:20.495743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"chittagong = df_normalized[df_normalized[\"domains\"] == \"chittagong\"]\nchittagong = chittagong.drop(columns=[\"domains\"])\nchittagong = chittagong[:1321]\nprint(chittagong.shape)\nchittagong_values = chittagong.values","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:29:24.907773Z","iopub.execute_input":"2023-09-09T15:29:24.908306Z","iopub.status.idle":"2023-09-09T15:29:24.922277Z","shell.execute_reply.started":"2023-09-09T15:29:24.908263Z","shell.execute_reply":"2023-09-09T15:29:24.920489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"narsingdi = df_normalized[df_normalized[\"domains\"] == \"narsingdi\"]\nnarsingdi = narsingdi.drop(columns=[\"domains\"])\nnarsingdi = narsingdi[:1321]\nprint(narsingdi.shape)\nnarsingdi_values = narsingdi.values","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:29:31.238354Z","iopub.execute_input":"2023-09-09T15:29:31.238830Z","iopub.status.idle":"2023-09-09T15:29:31.251617Z","shell.execute_reply.started":"2023-09-09T15:29:31.238789Z","shell.execute_reply":"2023-09-09T15:29:31.250309Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from scipy.ndimage.filters import gaussian_filter\n# from scipy.stats import entropy\n\n# def kl(P,Q):\n#     epsilon = 0.00001\n\n#     # You may want to instead make copies to avoid changing the np arrays.\n#     P = P+epsilon\n#     Q = Q+epsilon\n#     divergence = np.sum(P*np.log(P/Q))\n#     return divergence\n# num_bins = 88\n# idx = list(range(88))\n# cols_rangpur = []\n# cols_chittagong = []\n# cols_narail = []\n# cols_kishoreganj =[]\n# cols_narsingdi =[]\n# kl_divs = []\n# sigma = 1\n# for i in idx:\n#     _,bins = np.histogram(\n#         np.concatenate([rangpur_values[:,i],chittagong_values[:,i], narail_values[:,i],kishoreganj_values[:,i],narsingdi_values[:,i]],axis=0),\n#         num_bins\n#     )\n#     hist1,_ = np.histogram(rangpur_values[:,i],bins)\n#     # print(hist)\n#     cols_rangpur.append(hist1)\n\n#     hist2,_ = np.histogram(chittagong_values[:,i],bins)\n#     cols_chittagong.append(hist2)\n    \n    \n#     hist3,_ = np.histogram( narail_values[:,i],bins)\n#     cols_narail.append(hist3)\n    \n#     hist4,_ = np.histogram(kishoreganj_values[:,i],bins)\n#     cols_kishoreganj.append(hist4)\n    \n#     hist5,_ = np.histogram(narsingdi_values[:,i],bins)\n#     cols_narsingdi.append(hist5)\n    \n#     asmooth, bsmooth = (gaussian_filter(hist1, sigma),\n#                         gaussian_filter(hist2, sigma),\n#                        gaussian_filter(hist3, sigma),\n#                        gaussian_filter(hist4, sigma),\n#                        gaussian_filter(hist5, sigma))\n\n# #     hist3,_ = np.histogram(asr_feature_values[:,i],bins)\n# #     cols_asr.append(hist3)\n#     # kl_div = kl(bsmooth, asmooth)\n#     # # kl_div = entropy(hist1, hist2)\n#     # kl_divs.append(kl_div)\n\n# img_rangpur = np.vstack(cols_rangpur).T\n# img_chittagong = np.vstack(cols_chittagong).T\n# img_narail= np.vstack(cols_narail).T\n# img_kishoreganj = np.vstack(cols_kishoreganj).T\n# img_narsingdi = np.vstack(cols_narsingdi).T\n\n# print(img_rangpur.shape)\n# print(img_chittagong.shape)\n# print(img_narail.shape)\n# print(img_kishoreganj.shape)\n# print(img_narsingdi.shape)\n\n# # norm = [float(i)/sum(kl_divs) for i in kl_divs]\n# # norm\n# # plt.rcParams['figure.dpi'] = 600\n# # plt.rcParams['font.size'] = '12'\n# # plt.imshow(np.log(img_train+1))\n# # # plt.title('Train set GENEVA features histograms')\n# # plt.axis(\"off\")\n# # plt.savefig(\"train_geneva_hmap.png\", dpi=600)","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:36:16.713172Z","iopub.execute_input":"2023-09-09T15:36:16.713595Z","iopub.status.idle":"2023-09-09T15:36:16.782506Z","shell.execute_reply.started":"2023-09-09T15:36:16.713563Z","shell.execute_reply":"2023-09-09T15:36:16.781383Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom scipy.ndimage import gaussian_filter\nfrom scipy.stats import entropy\n\ndef kl(P, Q):\n    epsilon = 0.00001\n\n    # You may want to instead make copies to avoid changing the np arrays.\n    P = P + epsilon\n    Q = Q + epsilon\n    divergence = np.sum(P * np.log(P / Q))\n    return divergence\n\nnum_bins = 88\nidx = list(range(88))\ncols_rangpur = []\ncols_chittagong = []\ncols_narail = []\ncols_kishoreganj = []\ncols_narsingdi = []\nkl_divs = []\nsigma = 1\n\nfor i in idx:\n    _, bins = np.histogram(\n        np.concatenate([rangpur_values[:, i], chittagong_values[:, i], narail_values[:, i], kishoreganj_values[:, i], narsingdi_values[:, i]], axis=0),\n        num_bins\n    )\n    hist1, _ = np.histogram(rangpur_values[:, i], bins)\n    cols_rangpur.append(hist1)\n\n    hist2, _ = np.histogram(chittagong_values[:, i], bins)\n    cols_chittagong.append(hist2)\n\n    hist3, _ = np.histogram(narail_values[:, i], bins)\n    cols_narail.append(hist3)\n\n    hist4, _ = np.histogram(kishoreganj_values[:, i], bins)\n    cols_kishoreganj.append(hist4)\n\n    hist5, _ = np.histogram(narsingdi_values[:, i], bins)\n    cols_narsingdi.append(hist5)\n\n    asmooth = gaussian_filter(hist1, sigma)\n    bsmooth = gaussian_filter(hist2, sigma)\n\n    kl_div = kl(bsmooth, asmooth)\n    kl_divs.append(kl_div)\n\nimg_rangpur = np.vstack(cols_rangpur).T\nimg_chittagong = np.vstack(cols_chittagong).T\nimg_narail = np.vstack(cols_narail).T\nimg_kishoreganj = np.vstack(cols_kishoreganj).T\nimg_narsingdi = np.vstack(cols_narsingdi).T\n\nprint(img_rangpur.shape)\nprint(img_chittagong.shape)\nprint(img_narail.shape)\nprint(img_kishoreganj.shape)\nprint(img_narsingdi.shape)\n\n# Calculate the normalized KL divergence values\nnorm = [float(i) / sum(kl_divs) for i in kl_divs]\nprint(norm)\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:38:47.005926Z","iopub.execute_input":"2023-09-09T15:38:47.006396Z","iopub.status.idle":"2023-09-09T15:38:47.131350Z","shell.execute_reply.started":"2023-09-09T15:38:47.006363Z","shell.execute_reply":"2023-09-09T15:38:47.130226Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:44:17.504976Z","iopub.execute_input":"2023-09-09T15:44:17.505723Z","iopub.status.idle":"2023-09-09T15:44:19.979823Z","shell.execute_reply.started":"2023-09-09T15:44:17.505686Z","shell.execute_reply":"2023-09-09T15:44:19.978670Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.rcParams['figure.dpi'] = 600\nplt.rcParams['font.size'] = '12'\nplt.imshow(np.log(img_rangpur+1))\n# plt.title('Train set GENEVA features histograms')\nplt.axis(\"off\")\nplt.savefig(\"rangpur_geneva_hmap.png\", dpi=600)\n\nplt.imshow(np.log(img_chittagong+1))\n# plt.title('Train set GENEVA features histograms')\nplt.axis(\"off\")\nplt.savefig(\"chittagong_geneva_hmap.png\", dpi=600)\n\nplt.imshow(np.log(img_narail+1))\n# plt.title('Train set GENEVA features histograms')\nplt.axis(\"off\")\nplt.savefig(\"narail_geneva_hmap.png\", dpi=600)\n\nplt.imshow(np.log(img_kishoreganj+1))\n# plt.title('Train set GENEVA features histograms')\nplt.axis(\"off\")\nplt.savefig(\"kishoreganj_geneva_hmap.png\", dpi=600)\n\nplt.imshow(np.log(img_narsingdi+1))\n# plt.title('Train set GENEVA features histograms')\nplt.axis(\"off\")\nplt.savefig(\"narshingdi_geneva_hmap.png\", dpi=600)\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:48:35.450801Z","iopub.execute_input":"2023-09-09T15:48:35.451234Z","iopub.status.idle":"2023-09-09T15:48:52.644428Z","shell.execute_reply.started":"2023-09-09T15:48:35.451202Z","shell.execute_reply":"2023-09-09T15:48:52.643103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# target_idx =  [47, 54, 41, 55, 42]\n# num_rows = 2\n# num_cols = 3\n\n# # create figure and subplots\n# fig, axs = plt.subplots(num_rows, num_cols)\n\n# for i in range(num_rows):\n#     for j in range(num_cols):\n\n# for i in target_idx:\n#     print(vertical_columns[i])\n#     plt.hist(rangpur_values[:,i],bins,alpha=.5,label='rangpur');\n#     plt.hist(chittagong_values[:,i],bins,alpha=.5,label='chittagong');\n#     plt.hist(narail_values[:,i],bins,alpha=.5,label='narail');\n#     plt.hist(kishoreganj_values[:,i],bins,alpha=.5,label='kishoreganj');\n#     plt.hist(narsingdi_values[:,i],bins,alpha=.5,label='narsingdi');\n    \n#     plt.yscale('log')\n#     plt.xlabel(vertical_columns[i])\n#     plt.legend()\n#     plt.axis(\"on\")\n#     # plt.savefig(f'{vertical_columns[i]}.pdf',transparent = True, bbox_inches = 'tight', pad_inches = 0)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\n# Define the target indices and number of rows and columns for subplots\ntarget_idx = [47, 54, 41, 55, 42, 50]\nnum_rows = 2\nnum_cols = 3\n\n# Create a figure with subplots\nfig, axs = plt.subplots(num_rows, num_cols, figsize=(12, 8))\n\n# Create histograms for each target index\nfor i, ax in enumerate(axs.ravel()):\n    if i < len(target_idx):\n        idx = target_idx[i]\n        ax.hist(rangpur_values[:, idx], bins, alpha=0.5, label='rangpur')\n        ax.hist(chittagong_values[:, idx], bins, alpha=0.5, label='chittagong')\n        ax.hist(narail_values[:, idx], bins, alpha=0.5, label='narail')\n        ax.hist(kishoreganj_values[:, idx], bins, alpha=0.5, label='kishoreganj')\n        ax.hist(narsingdi_values[:, idx], bins, alpha=0.5, label='narsingdi')\n\n        ax.set_yscale('log')\n        ax.set_xlabel(vertical_columns[idx])\n        ax.legend()\n        ax.set_title(f'Index {idx}')\n        ax.axis(\"on\")\n\n# Adjust layout and display the figure\nplt.tight_layout()\nplt.savefig(\"histogramssss.png\", dpi=300, bbox_inches=\"tight\")\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T16:05:35.021236Z","iopub.execute_input":"2023-09-09T16:05:35.021670Z","iopub.status.idle":"2023-09-09T16:06:01.185004Z","shell.execute_reply.started":"2023-09-09T16:05:35.021624Z","shell.execute_reply":"2023-09-09T16:06:01.183777Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\n# Define the target indices\ntarget_idx = [47]\n\n# Create a single figure with one subplot\nfig, ax = plt.subplots(figsize=(10, 6))\n\n# Create histograms for each target index\nfor idx in target_idx:\n    ax.hist(rangpur_values[:, idx], bins, alpha=0.5, label='rangpur')\n    ax.hist(chittagong_values[:, idx], bins, alpha=0.5, label='chittagong')\n    ax.hist(narail_values[:, idx], bins, alpha=0.5, label='narail')\n    ax.hist(kishoreganj_values[:, idx], bins, alpha=0.5, label='kishoreganj')\n    ax.hist(narsingdi_values[:, idx], bins, alpha=0.5, label='narsingdi')\n\nax.set_yscale('log')\nax.set_xlabel('Value')\nax.legend()\nax.set_title('Histograms for Multiple Datasets')\nax.grid(True)\n\n# Display the figure\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-09T15:58:57.005836Z","iopub.execute_input":"2023-09-09T15:58:57.006325Z","iopub.status.idle":"2023-09-09T15:59:00.993906Z","shell.execute_reply.started":"2023-09-09T15:58:57.006290Z","shell.execute_reply":"2023-09-09T15:59:00.992738Z"},"trusted":true},"execution_count":null,"outputs":[]}],"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"}}