{"id":5874,"date":"2020-10-21T17:15:35","date_gmt":"2020-10-21T11:45:35","guid":{"rendered":"https:\/\/www.h2kinfosys.com\/blog\/?p=5874"},"modified":"2022-07-21T16:13:06","modified_gmt":"2022-07-21T10:43:06","slug":"visualizing-bivariate-distribution-using-seaborn","status":"publish","type":"post","link":"https:\/\/www.h2kinfosys.com\/blog\/visualizing-bivariate-distribution-using-seaborn\/","title":{"rendered":"Visualizing bivariate distribution using seaborn"},"content":{"rendered":"\n<p>Now we will assign a second variable to y, and the resultant is a&nbsp; bivariate distribution. We will use the same penguins\u2019 dataset here.&nbsp;<\/p>\n\n\n\n<p>In the previous article, all of the examples are related to univariate distributions (distributions of a single variable), perhaps conditional on a&nbsp; second variable assigned to hue.&nbsp;&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins,x=\u201cbill_length_mm\u201d, &nbsp;y=\u201cbill_depth_mm\")&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/ZSpSewadU0jehXuGz0stbEr-D0nmznor_yuVKHwxZHKkr90JHlHYzZ1AThRrzFsMHnKAlFvCcMVxhB83auC_ozpjFD2H865qQ-caCENAra0gO8f9AOHu7GGCXnCmiUirpPx4mjOY\" alt=\"bivariate distribution\" title=\"\"><\/figure>\n\n\n\n<p>Assigning a hue variable will plot multiple heatmaps or contour sets using different colors. For bivariate histograms, this will only work well if&nbsp; there is minimal overlap between the conditional distributions&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins, x=\u201cbill_length_mm\",&nbsp; &nbsp;y=\"bill_depth_mm\", hue=\u201cspecies\")&nbsp;\n<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<p><strong><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/Gh7ad4yrF7sBThr5-cEUYyYQ-nhkzdcxPJTeMm3ADjCreyp54ooN_UASM8qkdc4VMpLRuJQk6EKbhtvi6jWd5rLfsPzl9T_DYOW9fpHqeVdR1IropKRLsjGC93hZYUl8PsgV0AxT\" style=\"width: undefinedpx;\" alt=\"\" title=\"\"><\/strong><\/p>\n\n\n\n<p>A bivariate histogram bins the data within rectangles that tile the plot and then shows the count of observations within each rectangle with the fill color. Similarly, a bivariate KDE plot smoothes the (x, y)&nbsp; observations with a 2D Gaussian. The default representation then&nbsp; shows the contours of the 2D density&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins, x=\"bill_length_mm\", &nbsp;y=\"bill_depth_mm\", kind=\u201ckde\u201d)&nbsp;\n<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/xgsBOqpmkGsupXh24CumfqTtKNc1FboGp4jti0oBsMbDIMIQBmi3xtG8b64aTgJ6YFXd_akJ8cc3kPKvY4hd7fWoHpJzLfX38delskpN3MQgfvo4zLt7qrFCUZiQSfpacGSqMybP\" alt=\"bivariate distribution\" title=\"\"><\/figure>\n\n\n\n<p>The contour approach of the bivariate KDE plot lends itself better to&nbsp; evaluating overlap, although a plot with too many contours can get&nbsp; busy&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins, x=\"bill_length_mm\", &nbsp;y=\"bill_depth_mm\", hue=\"species\", kind=\u201ckde\u201d)&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/nkVumez7hRkGEKd1wJ_mvz-acT1yNoOnA5xY_rVV8ggMH4EGnL9tZ1ykP_YjorFKzbDE-F0vc5qClFr60V6aAfucVQnPW6vaAVdTBgsh-gq0bKT34_T1Rbd4tEAfScSoBKEvSg9w\" alt=\"bivariate distribution\" title=\"\"><\/figure>\n\n\n\n<p>Just as with univariate plots, the choice of bin size or smoothing bandwidth will determine how well the plot represents the underlying bivariate distribution.\u00a0\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Introduction To Data Science | What Is Data Science | Data Science Online Training For Beginners\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/2j5N2rz1Dmc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>The same parameters apply, but they can be tuned for each variable by&nbsp; passing a pair of values&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins, x=\"bill_length_mm\", &nbsp;y=\"bill_depth_mm\", binwidth=(2, .5))&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/1UZ8xszyB2NK5JSNPOQcQw1v2BXkNLma31h-RqZQeLYPbVsen0Bn0m7gkrR7-3mWiCE8QKi6gvdgggSbdju8effABiL0fyCjDox7MkerSP2IxvU6EYg7bzeGjxoM2XKds3Zxmv2T\" alt=\"bivariate distribution\" title=\"\"><\/figure>\n\n\n\n<p>To aid interpretation of the heatmap, add a colorbar to show the&nbsp; mapping between counts and color intensity&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins, x=\u201cbill_length_mm\", cbar=True &nbsp;y=\"bill_depth_mm\", binwidth=(2, .5))<\/pre>\n\n\n\n<p><strong>Output :<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/4iwzL8v98I6_hyVrgOkq-FDWwwyTPWuLiTmY4DCIZaoU-aDtsoh_BXSDz-vBjtEhH4EN-X1kcafSNj7SMrA025FRMy8e472rWC8LX6ifMGQjW6RwKmJVMpwvT1gFH3ms_SwKEqR9\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>The meaning of the bivariate density contours is less straightforward.&nbsp; Because the density is not directly interpretable, the contours are drawn at iso-proportions of the density, meaning that each curve shows a level set such that some proportion p of the density lies below it.&nbsp;&nbsp;<\/p>\n\n\n\n<p>The p values are evenly spaced, with the lowest level contolled by the&nbsp; thresh parameter and the number controlled by levels&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(penguins, x=\"bill_length_mm\", &nbsp;y=\"bill_depth_mm\", kind=\"kde\", thresh=.2, levels=4)&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/bocC-3rkD2Tgv1I932mIs-5r77KuWluD19nLlZER6BjYev3lHBBrGKeASvhX_NI-fTNic3dDA4jU3FR0-iTXhsfc3NoG5tIlRgr7TcUuA9oifGU4J20cwZcg5zQ7vmjNUjyChvWr\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>The bivariate distribution histogram allows one or both variables to be discrete.&nbsp; Plotting one discrete and one continuous variable offers another way to&nbsp; compare conditional univariate distributions.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(df,x=\u201cspecies\u201d,y=\u201cbody_mass_g\",hue='sex')&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/ZDzoSursfrz4iVulWDivZq0YeFuKiJVTzZs99lomRO_7ROXdm0OzBTXULMSQg9k8SLWWdHPu11dBMI9vKq095tKZ0f9B0Bi4ZRO-pSS7E-HsbBVciQTGTEicOdl32dD_sjUxqkuO\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>In contrast, plotting two discrete variables is an easy to way show the&nbsp; <a href=\"https:\/\/humansofdata.atlan.com\/2016\/01\/cross-tabulation-how-why\/#:~:text=Cross%20tabulation%20is%20a%20method,one%20variable%20grouping%20to%20another.\" rel=\"nofollow noopener\" target=\"_blank\">cross-tabulation<\/a> of the observations&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.displot(df, x=\"species\", y=\u201cisland\u201d)&nbsp; <strong>Output :<\/strong><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/rCRFS3-0vpKHAs8CFQe2z2LnkjTIFkBtXEKDAItguNnpfvXhYHZnfYeyxwjib19R7ax-bJwnlAfQbjjIfyTxZZHoavHgrKK8lCexoVIW6FSmzZTd0B1w0SwarP34HmsHiJ94KIfU\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Visualizing statistical relationships using seaborn&nbsp;&nbsp;<\/strong><\/h2>\n\n\n\n<p>We will discuss three <a href=\"https:\/\/www.h2kinfosys.com\/blog\/introduction-to-seaborn\/\">seaborn functions<\/a> in this tutorial.&nbsp;<\/p>\n\n\n\n<p>\u2022 relplot()&nbsp;&nbsp;<\/p>\n\n\n\n<p>\u2022 scatterplot()&nbsp;&nbsp;<\/p>\n\n\n\n<p>\u2022 lineplot()&nbsp;&nbsp;<\/p>\n\n\n\n<p>As we will see, these functions can be quite illuminating because they use simple and easily-understood representations of data that can nevertheless represent complex dataset structures. They can do so because they plot two-dimensional graphics that can be enhanced by mapping up to three additional variables using the semantics of hue,&nbsp; size, and style.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Relating variables with scatter plots&nbsp;&nbsp;<\/strong><\/h2>\n\n\n\n<p>The scatter plot is a mainstay of statistical visualization. It depicts the joint distribution of two variables using a cloud of points, where each point represents an observation in the dataset. This depiction allows the eye to infer a substantial amount of information about whether there is any meaningful relationship between them.&nbsp;<\/p>\n\n\n\n<p>There are several ways to draw a scatter plot in seaborn. The most basic, which should be used when both variables are numeric, is the scatterplot() function.&nbsp;&nbsp;<\/p>\n\n\n\n<p>In the categorical visualization tutorial, we will see specialized tools for using scatterplots to visualize categorical data. The scatterplot() is the default kind in relplot().&nbsp;<\/p>\n\n\n\n<p>Here we will use the tips dataset from seaborn&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">df=sns.load_dataset(\u2018tips')&nbsp;&nbsp;\ndf.head()&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><\/td><td><strong>total_bill<\/strong><\/td><td><strong>tip<\/strong><\/td><td><strong>sex<\/strong><\/td><td><strong>smoker<\/strong><\/td><td><strong>day<\/strong><\/td><td><strong>time<\/strong><\/td><td><strong>size<\/strong><\/td><\/tr><tr><td>0<\/td><td>16.99<\/td><td>1.01<\/td><td>Female<\/td><td>No<\/td><td>Sun<\/td><td>Dinner<\/td><td>2<\/td><\/tr><tr><td>1<\/td><td>10.34<\/td><td>1.66<\/td><td>Male<\/td><td>No<\/td><td>Sun<\/td><td>Dinner<\/td><td>3<\/td><\/tr><tr><td>2<\/td><td>21.01<\/td><td>3.50<\/td><td>Male<\/td><td>No<\/td><td>Sun<\/td><td>Dinner<\/td><td>3<\/td><\/tr><tr><td>3<\/td><td>23.68<\/td><td>3.31<\/td><td>Male<\/td><td>No<\/td><td>Sun<\/td><td>Dinner<\/td><td>2<\/td><\/tr><tr><td>4<\/td><td>24.59<\/td><td>3.61<\/td><td>Female<\/td><td>No<\/td><td>Sun<\/td><td>Dinner<\/td><td>4<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.relplot(x=\"total_bill\", y=\"tip\", data=df)&nbsp; <strong>Output :&nbsp;<\/strong><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/5YLVA27YRPqWv3v-_ulXSYWfAhuRoqG_uu8egze6QEZ5fQWBNOVKWZWJTRAUingB02VSvrMiHmo07GoWOHbuTjeQBtEAiJ3Y8Ko4R5XNmjaKZtH5XYZFatNc_TNW-MwrOy96b56d\" alt=\"bivariate distribution\" title=\"\"><\/figure>\n\n\n\n<p>While the points are plotted in two dimensions, another dimension can be added to the plot by coloring the points according to a third variable.&nbsp; In seaborn, this is referred to as using a \u201chue semantic\u201d, because the&nbsp; color of the point gains meaning&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.relplot(x=\"total_bill\", y=\u201ctip\", hue=\u201csmoker\",&nbsp; data=df)&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/QY7n6zkklMf8V3heyG_rlOw-tda-FFJZeSfT0m-8XyBaeZGq8lxjWLn46xLfFPL_RuvCG6WUku9Sg0JKcL7bwLSl7si7c1Yf1_yN4Aphp0P5a2g4sLhRP2Voy38HwQJZDQ-OhZKa\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>Unlike with <strong>matplotlib.pyplot.scatter()<\/strong>, the literal value of the variable is not used to pick the area of the point. This range can be&nbsp; customized&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.relplot(x=\"total_bill\", y=\"tip\", size=\"size\",&nbsp; sizes=(15, 200), data=tips)&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/VA73sSnsZalsZABtBq8QsI_f4y5NxK00f7H6kt3igrBLs3Vs9ZC2rDWf71URKxM-F3Scs2fyE1O8KmSfLx-yig2Q2c4E2U34FOdQdSLa0k3cwG3xa4TbYIhQhhBJJ6aGEHhQZCFe\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p><strong>Emphasizing continuity with line plots&nbsp;&nbsp;<\/strong><\/p>\n\n\n\n<p>Scatter plots are highly effective, but there is no universally optimal type of visualization. Instead, the visual representation should be adapted for the specifics of the dataset and to the question you are trying to answer with the plot.&nbsp;<\/p>\n\n\n\n<p>With some datasets, you may want to understand changes in one variable as a function of time or a similarly continuous variable. In this situation, a good choice is to draw a line plot. In seaborn, this can be&nbsp; accomplished by the lineplot() function, either directly or with&nbsp; relplot() by setting kind=\u201cline&#8221;&nbsp;&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">df=pd.DataFrame(dict(time=np.arange(500), &nbsp;value=np.random.randn(500).cumsum()))&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/G1kKiIbMGRhuNNA87v84hliQPbFc2UNsuegmZZxA__-HV0LRcBKZxQyE4r9oNeyuRqSfZXPx2IhCBPy4Bayq-lcl2PiVJm3RdGfp0qSgTqiisyolsPxPUbw7RT2qzvtg3OajXq-3\" alt=\"bivariate distribution\" title=\"\"><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Aggregation and representing uncertainty&nbsp;&nbsp;<\/strong><\/h2>\n\n\n\n<p>More complex datasets will have multiple measurements for the same value of the x variable. The default behavior in seaborn is to aggregate the multiple measurements at each x value by plotting the mean and the 95% confidence interval around the mean. We will use \u201cfmri\u201d&nbsp;&nbsp;<\/p>\n\n\n\n<p>dataset for this&nbsp;<\/p>\n\n\n\n<p>df=sns.load_dataset(\u2018fmri&#8217;)&nbsp;&nbsp;<\/p>\n\n\n\n<p><strong>Output :&nbsp;&nbsp;<\/strong><\/p>\n\n\n\n<p><strong>subject timepoint event region signal<\/strong><strong>&nbsp;<\/strong><\/p>\n\n\n\n<p>0 s13 18 stim parietal -0.017552&nbsp;<\/p>\n\n\n\n<p>1 s5 14 stim parietal -0.080883&nbsp;<\/p>\n\n\n\n<p>2 s12 18 stim parietal -0.081033&nbsp;<\/p>\n\n\n\n<p>3 s11 18 stim parietal -0.046134&nbsp;<\/p>\n\n\n\n<p>4 s10 18 stim parietal -0.037970<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.relplot(x=\"timepoint\", y=\"signal\", kind=\"line\", &nbsp;data=df)&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/gXF83jdwDzTRYU9rzuBrzkopCBzNVyvbmc265uJZYfi_PKLAnwJ2V6VUazwM6YdyKjE4yusR_N7wV0idzMF5feedwsAhmprkLqFkpPC6fptsvkd8qrB3Y6Efs224clp4sIlz9rrp\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>Another good option, especially with larger data, is to represent the&nbsp; spread of the distribution at each time point by plotting the standard&nbsp; deviation instead of a confidence interval&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.relplot(x=\"timepoint\", y=\"signal\", kind=\"line\", &nbsp;ci=\"sd\", data=df);&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/HaZXFMYyvBVfH79N8DjR2An858lfnBXQ2ShKSioegRMFriLN41u7ZRnrVmf4BwHR9ATAYEwiDqkR5n6iZoIPYd8RRQ4hl1BlbMUQsoJ5yw_j5pmOX_G6UjVovcnzsbqrw2BDh1Bp\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>Plotting subsets of data with semantic mappings&nbsp;<\/p>\n\n\n\n<p>The <strong>lineplot() <\/strong>function has the same flexibility as <strong>scatterplot() <\/strong>it can show up to three additional variables by modifying the hue, size,&nbsp; and style of the plot elements.&nbsp;&nbsp;<\/p>\n\n\n\n<p>It does so using the same API as a <strong>scatterplot()<\/strong>, meaning that we don\u2019t need to stop and think about the parameters that control the look of lines vs. points in matplotlib.&nbsp;<\/p>\n\n\n\n<p>Using semantics in <strong>lineplot() <\/strong>will also determine how the data get aggregated. For example, adding a hue semantic with two levels splits the plot into two lines and error bands, coloring each to indicate which subset of the data they correspond to.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sns.relplot(x=\"timepoint\", y=\"signal\", hue=\"event\", &nbsp;kind=\"line\", data=df)&nbsp;&nbsp;<\/pre>\n\n\n\n<p><strong>Output :&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/gbN9Nv9tEsP-ymBf4NXVhSpw_zdC6rKy60yCgAo1wnRavSyO4M_M65UBxuE0n8mRROig-vcNOq-p_ZQQk7_W7EPcCCVhtHUVfyY9OV5s8jseD3_0LiIYnWgde2W_NouOt2Mfmiev\" alt=\"\" title=\"\"><\/figure>\n\n\n\n<p>In the next article, we will learn how to plot categorical variables using&nbsp; Seaborn<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Now we will assign a second variable to y, and the resultant is a&nbsp; bivariate distribution. We will use the same penguins\u2019 dataset here.&nbsp; In the previous article, all of the examples are related to univariate distributions (distributions of a single variable), perhaps conditional on a&nbsp; second variable assigned to hue.&nbsp;&nbsp; sns.displot(penguins,x=\u201cbill_length_mm\u201d, &nbsp;y=\u201cbill_depth_mm&#8221;)&nbsp;&nbsp; Output :&nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5934,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[500],"tags":[],"class_list":["post-5874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science-using-python-tutorials"],"_links":{"self":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/5874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/comments?post=5874"}],"version-history":[{"count":0,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/5874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/media\/5934"}],"wp:attachment":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/media?parent=5874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/categories?post=5874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/tags?post=5874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}