{"id":8121,"date":"2019-01-13T23:24:38","date_gmt":"2019-01-13T23:24:38","guid":{"rendered":"https:\/\/www.appservgrid.com\/paw92\/?p=8121"},"modified":"2019-01-24T02:29:46","modified_gmt":"2019-01-24T02:29:46","slug":"python-seaborn-tutorial-linux-hint","status":"publish","type":"post","link":"https:\/\/www.appservgrid.com\/paw92\/index.php\/2019\/01\/13\/python-seaborn-tutorial-linux-hint\/","title":{"rendered":"Python Seaborn Tutorial \u2013 Linux Hint"},"content":{"rendered":"<p>In this lesson on Python\u00a0<a href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a>\u00a0library, we will look at various aspects of this data visualisation library which we can use with Python to generate beautiful and intuitive graphs which can visualise data in a form which business wants from a platform. To make this lesson complete, we will cover the following sections:<\/p>\n<ul>\n<li>What is Python Seaborn?<\/li>\n<li>Types of Plots we can construct with Seaborn<\/li>\n<li>Working with Multiple plots<\/li>\n<li>Some alternatives for Python Seaborn<\/li>\n<\/ul>\n<p>This looks like a lot to cover. Let us get started now.<\/p>\n<h3><strong>What is Python Seaborn library?<\/strong><\/h3>\n<p>Seaborn library is a Python package which allows us to make infographics based on statistical data. As it is made on top of matplotlib, so, it is inherently compatible with it. Additionally, it supports NumPy and Pandas data structure so that plotting can be done directly from those collections.<\/p>\n<div class=\"eYm3dEqP\"><\/div>\n<p>Visualising complex data is one of the most important thing Seaborn takes care of. If we were to compare Matplotlib to Seaborn, Seaborn is able to make those things easy which are hard to achieve with Matplotlib. However, it is important to note that\u00a0<strong>Seaborn is not an alternative to Matplotlib but a complement of it<\/strong>. Throughout this lesson, we will make use of Matplotlib functions in the code snippets as well. You will select to work with Seaborn in the following use-cases:<\/p>\n<ul>\n<li>You have statistical time series data to be plotted with representation of uncertainty around the estimates<\/li>\n<li>To visually establish the difference between two subsets of data<\/li>\n<li>To visualise the univariate and bivariate distributions<\/li>\n<li>Adding much more visual affection to the matplotlib plots with many built-in themes<\/li>\n<li>To fit and visualise machine learning models through linear regression with independent and dependent variables<\/li>\n<\/ul>\n<p>Just a note before starting is that we use a virtual environment for this lesson which we made with the following command:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">python -m virtualenv seaborn<br \/>\nsource seaborn\/bin\/activate<\/div>\n<\/div>\n<p>Once the virtual environment is active, we can install Seaborn library within the virtual env so that examples we create next can be executed:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">pip install seaborn<\/div>\n<\/div>\n<p>You can use Anaconda as well to run these examples which is easier. If you want to install it on your machine, look at the lesson which describes \u201c<a href=\"https:\/\/linuxhint.com\/install_anaconda_python_ubuntu_1804\/\">How to Install Anaconda Python on Ubuntu 18.04 LTS<\/a>\u201d and share your feedback. Now, let us move forward to various types of plots which can be constructed with Python Seaborn.<\/p>\n<p>To keep this lesson hands-on, We will use\u00a0<a href=\"https:\/\/www.kaggle.com\/abcsds\/pokemon\/version\/2\">Pokemon dataset<\/a>\u00a0which can be downloaded from\u00a0<a href=\"https:\/\/www.kaggle.com\/\">Kaggle<\/a>. To import this dataset into our program, we will be using the Pandas library. Here are all the imports we perform in our program:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\"><span class=\"kw1\">import<\/span>\u00a0pandas\u00a0<span class=\"kw1\">as<\/span>\u00a0pd<br \/>\n<span class=\"kw1\">from<\/span>\u00a0matplotlib\u00a0<span class=\"kw1\">import<\/span>\u00a0pyplot\u00a0<span class=\"kw1\">as<\/span>\u00a0plt<br \/>\n<span class=\"kw1\">import<\/span>\u00a0seaborn\u00a0<span class=\"kw1\">as<\/span>\u00a0sns<\/div>\n<\/div>\n<p>Now, we can import the dataset into our program and show some of the sample data with Pandas as:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">df\u00a0<span class=\"sy0\">=<\/span>\u00a0pd.<span class=\"me1\">read_csv<\/span><span class=\"br0\">(<\/span><span class=\"st0\">&#8216;Pokemon.csv&#8217;<\/span><span class=\"sy0\">,<\/span>\u00a0index_col<span class=\"sy0\">=<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span><br \/>\ndf.<span class=\"me1\">head<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/div>\n<\/div>\n<p>Note that to run the above code snippet, the CSV dataset should be present in the same directory as the program itself. Once we run the above code snippet, we will see the following output (in Anaconda Jupyter\u2019s notebook):<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35361\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/1-26.png\" sizes=\"auto, (max-width: 1140px) 100vw, 1140px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/1-26.png 1140w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/1-26-300x95.png 300w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/1-26-768x243.png 768w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/1-26-1024x324.png 1024w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/1-26-810x256.png 810w\" alt=\"\" width=\"1140\" height=\"360\" \/><\/p>\n<h3><strong>Plotting Linear Regression curve<\/strong><\/h3>\n<p>One of the best thing about Seaborn is the intelligent plotting functions it provides which not only visualises the dataset we provide to it but also construct regression models around it. For example, it is possible to construct a linear regression plot with a single line of code. Here is how to do this:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">sns.<span class=\"me1\">lmplot<\/span><span class=\"br0\">(<\/span>x<span class=\"sy0\">=<\/span><span class=\"st0\">&#8216;Attack&#8217;<\/span><span class=\"sy0\">,<\/span>\u00a0y<span class=\"sy0\">=<\/span><span class=\"st0\">&#8216;Defense&#8217;<\/span><span class=\"sy0\">,<\/span>\u00a0data<span class=\"sy0\">=<\/span>df<span class=\"br0\">)<\/span><\/div>\n<\/div>\n<p>Once we run the above code snippet, we will see the following output:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35362\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/2-25.png\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/2-25.png 352w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/2-25-150x150.png 150w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/2-25-300x300.png 300w\" alt=\"\" width=\"352\" height=\"352\" \/><\/p>\n<p>We noticed few important things in the above code snippet:<\/p>\n<ul>\n<li>There is dedicated plotting function available in Seaborn<\/li>\n<li>We used Seaborn\u2019s fitting and plotting function which provided us with a linear regression line which it modelled itself<\/li>\n<\/ul>\n<p>Don\u2019t be afraid if you thought we cannot have a plot without that regression line. We can ! Let\u2019s try a new code snippet now, similar to the last one:<span id=\"ezoic-pub-ad-placeholder-122\" class=\"ezoic-adpicker-ad\"><\/span><\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">sns.<span class=\"me1\">lmplot<\/span><span class=\"br0\">(<\/span>x<span class=\"sy0\">=<\/span><span class=\"st0\">&#8216;Attack&#8217;<\/span><span class=\"sy0\">,<\/span>\u00a0y<span class=\"sy0\">=<\/span><span class=\"st0\">&#8216;Defense&#8217;<\/span><span class=\"sy0\">,<\/span>\u00a0data<span class=\"sy0\">=<\/span>df<span class=\"sy0\">,<\/span>\u00a0fit_reg<span class=\"sy0\">=<\/span><span class=\"kw2\">False<\/span><span class=\"br0\">)<\/span><\/div>\n<\/div>\n<p>This time, we will not see the regression line in our plot:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35363\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/3-25.png\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/3-25.png 352w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/3-25-150x150.png 150w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/3-25-300x300.png 300w\" alt=\"\" width=\"352\" height=\"352\" \/><\/p>\n<p>Now this is much more clear (if we do not need the linear regression line). But this isn\u2019t just over yet. Seaborn allows us to make different this plot and that is what we will be doing.<\/p>\n<h3><strong>Constructing Box Plots<\/strong><\/h3>\n<p>One of the greatest feature in Seaborn is how it readily accepts Pandas Dataframes structure to plot data. We can simply pass a Dataframe to the Seaborn library so that it can construct a boxplot out of it:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">sns.<span class=\"me1\">boxplot<\/span><span class=\"br0\">(<\/span>data<span class=\"sy0\">=<\/span>df<span class=\"br0\">)<\/span><\/div>\n<div><\/div>\n<\/div>\n<p>Once we run the above code snippet, we will see the following output:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35364\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/4-25.png\" sizes=\"auto, (max-width: 382px) 100vw, 382px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/4-25.png 382w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/4-25-300x198.png 300w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/4-25-380x252.png 380w\" alt=\"\" width=\"382\" height=\"252\" \/><br \/>\nWe can remove the first reading of total as that looks a little awkward when we are actually plotting individual columns here:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">stats_df\u00a0<span class=\"sy0\">=<\/span>\u00a0df.<span class=\"me1\">drop<\/span><span class=\"br0\">(<\/span><span class=\"br0\">[<\/span><span class=\"st0\">&#8216;Total&#8217;<\/span><span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>\u00a0axis<span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span><br \/>\n<span class=\"co1\"># New boxplot using stats_df<\/span><br \/>\nsns.<span class=\"me1\">boxplot<\/span><span class=\"br0\">(<\/span>data<span class=\"sy0\">=<\/span>stats_df<span class=\"br0\">)<\/span><\/div>\n<div><\/div>\n<\/div>\n<p>Once we run the above code snippet, we will see the following output:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35365\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/5-25.png\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/5-25.png 380w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/5-25-300x199.png 300w\" alt=\"\" width=\"380\" height=\"252\" \/><\/p>\n<h3><strong>Swarm Plot with Seaborn<\/strong><\/h3>\n<p>We can construct an intuitive design Swarm plot with Seaborn. We will again be using the dataframe from Pandas which we loaded earlier but this time, we will be calling Matplotlib\u2019s show function to show the plot we made. Here is the code snippet:<span id=\"ezoic-pub-ad-placeholder-137\" class=\"ezoic-adpicker-ad\"><\/span><span id=\"div-gpt-ad-linuxhint_com-large-leaderboard-2-0\" class=\"ezoic-ad ezfound\" data-google-query-id=\"CO7O__6uheACFRA-fwod8MQJGg\"><\/span><\/p>\n<div id=\"google_ads_iframe_\/1254144\/linuxhint_com-large-leaderboard-2_0__container__\"><iframe loading=\"lazy\" id=\"google_ads_iframe_\/1254144\/linuxhint_com-large-leaderboard-2_0\" title=\"3rd party ad content\" src=\"https:\/\/tpc.googlesyndication.com\/safeframe\/1-0-31\/html\/container.html\" name=\"\" width=\"728\" height=\"90\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" sandbox=\"allow-forms allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation\" data-is-safeframe=\"true\" data-google-container-id=\"1n\" data-load-complete=\"true\" data-mce-fragment=\"1\"><\/iframe><\/div>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">sns.<span class=\"me1\">set_context<\/span><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;paper&#8221;<\/span><span class=\"br0\">)<\/span><br \/>\nsns.<span class=\"me1\">swarmplot<\/span><span class=\"br0\">(<\/span>x<span class=\"sy0\">=<\/span><span class=\"st0\">&#8220;Attack&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0y<span class=\"sy0\">=<\/span><span class=\"st0\">&#8220;Defense&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0data<span class=\"sy0\">=<\/span>df<span class=\"br0\">)<\/span><br \/>\nplt.<span class=\"me1\">show<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/div>\n<div><\/div>\n<\/div>\n<p>Once we run the above code snippet, we will see the following output:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35366\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/6-23.png\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/6-23.png 395w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/6-23-300x203.png 300w\" alt=\"\" width=\"395\" height=\"267\" \/><br \/>\nBy using a Seaborn context, we allow Seaborn to add a personal touch and fluid design for the plot. It is possible to customise this plot even further with custom font size used for labels in the plot to make the reading easier. To do this, we will be passing more parameters to the set_context function which performs just like what they sound. For example, to modify the font size of the labels, we will make use of font.size parameter. Here is the code snippet to do the modification:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">sns.<span class=\"me1\">set_context<\/span><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;paper&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0font_scale<span class=\"sy0\">=<\/span><span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span>\u00a0rc<span class=\"sy0\">=<\/span><span class=\"br0\">{<\/span><span class=\"st0\">&#8220;font.size&#8221;<\/span>:<span class=\"nu0\">8<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&#8220;axes.labelsize&#8221;<\/span>:<span class=\"nu0\">5<\/span><span class=\"br0\">}<\/span><span class=\"br0\">)<\/span><br \/>\nsns.<span class=\"me1\">swarmplot<\/span><span class=\"br0\">(<\/span>x<span class=\"sy0\">=<\/span><span class=\"st0\">&#8220;Attack&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0y<span class=\"sy0\">=<\/span><span class=\"st0\">&#8220;Defense&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0data<span class=\"sy0\">=<\/span>df<span class=\"br0\">)<\/span><br \/>\nplt.<span class=\"me1\">show<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/div>\n<div><\/div>\n<\/div>\n<p>Once we run the above code snippet, we will see the following output:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35367\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/7-24.png\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/7-24.png 440w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/7-24-300x190.png 300w\" alt=\"\" width=\"440\" height=\"279\" \/><br \/>\nThe font size for the label was changed based on the parameters we provided and value associated to the font.size parameter. One thing Seaborn is expert at is to make the plot very intuitive for practical usage and this means that Seaborn is not just a practice Python package but actually something we can use in our production deployments.<\/p>\n<h3><strong>Adding a Title to plots<\/strong><\/h3>\n<p>It is easy to add titles to our plots. We just need to follow a simple procedure of using the Axes-level functions where we will call the\u00a0<em>set_title()<\/em>\u00a0function like we show in the code snippet here:<\/p>\n<div class=\"codecolorer-container python default\">\n<div class=\"python codecolorer\">sns.<span class=\"me1\">set_context<\/span><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;paper&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0font_scale<span class=\"sy0\">=<\/span><span class=\"nu0\">3<\/span><span class=\"sy0\">,<\/span>\u00a0rc<span class=\"sy0\">=<\/span><span class=\"br0\">{<\/span><span class=\"st0\">&#8220;font.size&#8221;<\/span>:<span class=\"nu0\">8<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">&#8220;axes.labelsize&#8221;<\/span>:<span class=\"nu0\">5<\/span><span class=\"br0\">}<\/span><span class=\"br0\">)<\/span><br \/>\nmy_plot\u00a0<span class=\"sy0\">=<\/span>\u00a0sns.<span class=\"me1\">swarmplot<\/span><span class=\"br0\">(<\/span>x<span class=\"sy0\">=<\/span><span class=\"st0\">&#8220;Attack&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0y<span class=\"sy0\">=<\/span><span class=\"st0\">&#8220;Defense&#8221;<\/span><span class=\"sy0\">,<\/span>\u00a0data<span class=\"sy0\">=<\/span>df<span class=\"br0\">)<\/span><br \/>\nmy_plot.<span class=\"me1\">set_title<\/span><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;LH Swarm Plot&#8221;<\/span><span class=\"br0\">)<\/span><br \/>\nplt.<span class=\"me1\">show<\/span><span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/div>\n<\/div>\n<p>Once we run the above code snippet, we will see the following output:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-35368\" src=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/8-21.png\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" srcset=\"https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/8-21.png 440w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/8-21-300x207.png 300w, https:\/\/linuxhint.com\/wp-content\/uploads\/2019\/01\/8-21-145x100.png 145w\" alt=\"\" width=\"440\" height=\"303\" \/><\/p>\n<p>This way, we can add much more information to our plots.<\/p>\n<h3><strong>Seaborn vs Matplotlib<\/strong><\/h3>\n<p>As we looked at the examples in this lesson, we can identify that Matplotlib and Seaborn cannot be directly compared but they can be seen as complementing each other. One of the features which takes Seaborn 1 step ahead is the way Seaborn can visualise data statistically.<\/p>\n<p>To make best of Seaborn parameters, we highly recommend to look at the\u00a0<a href=\"https:\/\/seaborn.pydata.org\/api.html\">Seaborn documentation<\/a>\u00a0and find out what parameters to use to make your plot as close to business needs as possible.<\/p>\n<h4><strong>Conclusion<\/strong><\/h4>\n<p>In this lesson, we looked at various aspects of this data visualisation library which we can use with Python to generate beautiful and intuitive graphs which can visualise data in a form which business wants from a platform. The Seaborm is one of the most important visualisation library when it comes to data engineering and presenting data in most visual forms, definitely a skill we need to have under our belt as it allows us to build linear regression models.<\/p>\n<p><a href=\"https:\/\/linuxhint.com\/python_seaborn_tutorial\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this lesson on Python\u00a0Seaborn\u00a0library, we will look at various aspects of this data visualisation library which we can use with Python to generate beautiful and intuitive graphs which can visualise data in a form which business wants from a platform. To make this lesson complete, we will cover the following sections: What is Python &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.appservgrid.com\/paw92\/index.php\/2019\/01\/13\/python-seaborn-tutorial-linux-hint\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Python Seaborn Tutorial \u2013 Linux Hint&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8121","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/8121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/comments?post=8121"}],"version-history":[{"count":2,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/8121\/revisions"}],"predecessor-version":[{"id":8610,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/8121\/revisions\/8610"}],"wp:attachment":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/media?parent=8121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/categories?post=8121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/tags?post=8121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}