{"id":46621,"date":"2021-01-19T00:00:00","date_gmt":"2021-01-19T08:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/"},"modified":"2025-11-13T12:55:04","modified_gmt":"2025-11-13T20:55:04","slug":"tracking-air-quality-in-los-angeles-with-griddb-tableau","status":"publish","type":"post","link":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/","title":{"rendered":"Tracking Air Quality in Los Angeles with GridDB &#038; Tableau"},"content":{"rendered":"<p>Take a look at this half-tongue-in-cheek, half-heartbreaking website: <a href=\"http:\/\/www.iscaliforniaonfire.com\/\">http:\/\/www.iscaliforniaonfire.com\/<\/a>. Though I suspect it started out as a joke, the web page helps to illustrate \u00e2\u20ac\u201d by sheer power of existence \u00e2\u20ac\u201d the constant, existential threat faced by the Golden State; the state-wide wildfires can wreak havoc in countless ways, but today we want to focus on air quality. Specifically we want to look at whether carbon monoxide (CO) and\/or Nitrogen dioxide (NO2) emissions rise when California is on fire, and by how much. <\/p>\n<p>The full source code for this project can be found at the bottom of this page: <a href=\"#source-code\"> FULL SOURCE CODE <\/a><\/p>\n<h2> Dataset <\/h2>\n<p>To begin, let&#8217;s take a look at the dataset retrieved from the <a href=\"https:\/\/aqs.epa.gov\/aqsweb\/documents\/data_api.html\">EPA&#8217;s air quality system API<\/a>. I was specifically hoping to look at the data during the record-breaking fires in my home state that stretched from Aug &#8211; Sept 2020. Unfortunately, that data has not yet been processed and shared, so we will make due with a dataset for the year of 2019. I also realized half way through this blog that simply looking at the Carbon Monoxide data was not enough; I ended deciding to grab all NO2 data for 2019 as well.<\/p>\n<p>Once I registered my email address and received my API key, I made the following query using their services: <\/p>\n<p>https:\/\/aqs.epa.gov\/data\/api\/sampleData\/byCounty?email=yourEmailAddress&#038;key=yourAPIKey&#038;param=42101&#038;bdate=20190101&#038;edate=202190131&#038;state=06&#038;county=037<\/p>\n<p>The above request is submitting a query for my specific location, a specific range of time, and a specific data parameter (CO). Because the data returned by these API calls are rather hefty, the time range is limited to about six weeks of data or so (~25 MB JSON file). This unfortunately meant that I couldn&#8217;t simply ingest all relevant data into GridDB in one go; I needed to work in chunks to get all data inserted properly.<\/p>\n<h2> Inserting Data Into GridDB <\/h2>\n<p>Of course, we assume you already have GridDB installed and running. If you do not, please follow along with our Quick Start guide: <a href=\"https:\/\/docs.griddb.net\/gettingstarted\/introduction\/\">https:\/\/docs.griddb.net\/gettingstarted\/introduction\/<\/a>. For simplicity&#8217;s sake, we will be using Python for this blog. The JSON returned by their API looked like this: <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">{\n      \"state_code\": \"06\",\n      \"county_code\": \"037\",\n      \"site_number\": \"1602\",\n      \"parameter_code\": \"42101\",\n      \"poc\": 1,\n      \"latitude\": 34.01029,\n      \"longitude\": -118.0685,\n      \"datum\": \"NAD83\",\n      \"parameter\": \"Carbon monoxide\",\n      \"date_local\": \"2020-06-21\",\n      \"time_local\": \"00:00\",\n      \"date_gmt\": \"2020-06-21\",\n      \"time_gmt\": \"08:00\",\n      \"sample_measurement\": 0.2,\n      \"units_of_measure\": \"Parts per million\",\n      \"units_of_measure_code\": \"007\",\n      \"sample_duration\": \"1 HOUR\",\n      \"sample_duration_code\": \"1\",\n      \"sample_frequency\": \"HOURLY\",\n      \"detection_limit\": 0.5,\n      \"uncertainty\": null,\n      \"qualifier\": null,\n      \"method_type\": \"FRM\",\n      \"method\": \"INSTRUMENTAL - NONDISPERSIVE INFRARED PHOTOMETRY\",\n      \"method_code\": \"158\",\n      \"state\": \"California\",\n      \"county\": \"Los Angeles\",\n      \"date_of_last_change\": \"2020-09-22\",\n      \"cbsa_code\": \"31080\"\n}<\/code><\/pre>\n<\/div>\n<p>Most of this data is superfluous for our specific purposes; I simply made a Time Series Container which takes the sample measurement and the time. <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">conInfo = griddb.ContainerInfo(\"LosAngelesCO\",\n                        [[\"timestamp\", griddb.Type.TIMESTAMP],\n                        [\"CO\", griddb.Type.DOUBLE]],\n                        griddb.ContainerType.TIME_SERIES, True)<\/code><\/pre>\n<\/div>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">conInfo = griddb.ContainerInfo(\"LosAngelesNO2\",\n                        [[\"timestamp\", griddb.Type.TIMESTAMP],\n                        [\"NOtwo\", griddb.Type.DOUBLE]],\n                        griddb.ContainerType.TIME_SERIES, True)<\/code><\/pre>\n<\/div>\n<p>Inserting these specific data points into our DB is very simple with Python. First, I used a the JSON library to fulfill an HTTP request and grab the relevant info: <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def getJSON(bdate, edate):\n\n    url = \"https:\/\/aqs.epa.gov\/data\/api\/sampleData\/byCounty?email=EMAILADDRESS&key=APIKEY&param=42602&bdate=\"+bdate+\"&edate=\"+edate+\"&state=06&county=037\"\n\n    payload={}\n    headers = {}\n\n    response = requests.request(\"GET\", url, headers=headers, data=payload)\n\n    return (response.text)\n<\/code><\/pre>\n<\/div>\n<p>From there, it was a matter of actually inserting into my database. And please note, I manually and painstakingly went in and changed the beginning and end dates to insert all relevant data from 2019, month by month. I could have figured out a for-loop to range over each month without any going into any overlap, but it was late and I was tired and this tedious labor seemed easier at the time. Do not judge me.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def writeContainer():\n\n    factory = griddb.StoreFactory.get_instance()\n    gridstore = factory.get_store(host='239.0.0.1', port=31999, cluster_name='defaultCluster', username='admin', password='admin')\n\n    #Create Collection\n    conInfo = griddb.ContainerInfo(\"LosAngelesNO2\",\n                        [[\"timestamp\", griddb.Type.TIMESTAMP],\n                        [\"notwo\", griddb.Type.DOUBLE]],\n                        griddb.ContainerType.TIME_SERIES, True)\n\n    rows = []\n    data = getJSON('20191201', '20191231')\n    data = json.loads(data)\n    for p in data['Data']:\n        date_time_str = p['date_local'] + ' '+  p['time_local']\n        date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M')\n        row = [None, None]\n        row[0] = date_time_obj.timestamp()\n        row[1] = p['sample_measurement']\n        rows.append(row)\n\n    con = gridstore.put_container(conInfo);\n    con.set_auto_commit(False)\n    con.multi_put(rows)\n    length = str(len(rows))\n    con.commit()\n    print(\"Wrote \"+ length + \" records\")\n\n<\/code><\/pre>\n<\/div>\n<p>Okay, great, so now we&#8217;ve got hourly data of both CO and NO2 in Los Angeles County. Now here comes the fun part: visualizing with Tableau!<\/p>\n<h2> Tableau <\/h2>\n<h3> Installation and Basic Usage <\/h3>\n<p>To install Tableau along with the GridDB Connector, please take a look at our previous blog here: <a href=\"https:\/\/griddb.net\/en\/blog\/getting-started-with-the-griddb-jdbc-tableau-connector-plugin\/\">Getting Started with the GridDB JDBC Tableau Connector Plugin<\/a>. In that blog you will learn the absolute basics of getting your precious data loaded into Tableau.<\/p>\n<h3> Visualizing Data <\/h3>\n<h4> Monthly CO <\/h4>\n<p>The first data set I looked into via Tableau was the Los Angeles Carbon Monoxide levels on a monthly level. Fire season is typically August and beyond so I expected to see a huge uptick during this time span. So I entered those two metrics (Avg CO and Time) into the top portion of the view page: <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/carbon-monthly-info.png\" alt=\"\" width=\"289\" height=\"81\" class=\"aligncenter size-full wp-image-27112\" \/><\/p>\n<p>And this is what the chart that was produced looked like: <\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co-monthly.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co-monthly.png\" alt=\"\" width=\"1280\" height=\"720\" class=\"aligncenter size-full wp-image-27113\" srcset=\"\/wp-content\/uploads\/2020\/12\/averg-co-monthly.png 1280w, \/wp-content\/uploads\/2020\/12\/averg-co-monthly-300x169.png 300w, \/wp-content\/uploads\/2020\/12\/averg-co-monthly-768x432.png 768w, \/wp-content\/uploads\/2020\/12\/averg-co-monthly-1024x576.png 1024w, \/wp-content\/uploads\/2020\/12\/averg-co-monthly-150x85.png 150w, \/wp-content\/uploads\/2020\/12\/averg-co-monthly-600x338.png 600w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>While the data does indeed show that co emissions go up above average during these months, I was a bit surprised it wasn&#8217;t <em>that<\/em> much higher. I would also like to point out that I included here what is called a linear trend line (the big line intersecting horizontally). It helps show the general direction of the data as the year progresses.<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/trend-line.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/trend-line.png\" alt=\"\" width=\"200\" height=\"468\" class=\"aligncenter size-full wp-image-27119\" srcset=\"\/wp-content\/uploads\/2020\/12\/trend-line.png 200w, \/wp-content\/uploads\/2020\/12\/trend-line-128x300.png 128w\" sizes=\"(max-width: 200px) 100vw, 200px\" \/><\/a><\/p>\n<h4> Monthly NO2 <\/h4>\n<p>While gathering the data for this blog initially, I had learned that while wildfires do indeed emit carbon monoxide, the really damaging gas was NO2 (Nitrogen Dioxide). So let&#8217;s take a look at that graph: <\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-nno2-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-nno2-2.png\" alt=\"\" width=\"1280\" height=\"720\" class=\"aligncenter size-full wp-image-27110\" srcset=\"\/wp-content\/uploads\/2020\/12\/averg-nno2-2.png 1280w, \/wp-content\/uploads\/2020\/12\/averg-nno2-2-300x169.png 300w, \/wp-content\/uploads\/2020\/12\/averg-nno2-2-768x432.png 768w, \/wp-content\/uploads\/2020\/12\/averg-nno2-2-1024x576.png 1024w, \/wp-content\/uploads\/2020\/12\/averg-nno2-2-150x85.png 150w, \/wp-content\/uploads\/2020\/12\/averg-nno2-2-600x338.png 600w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>Wow! Talk about a dramatic increase! While I did expect a large difference between the spring months and &#8220;fire season&#8221;,  it is still staggering &#8212; and quite frankly a bit scary &#8212; to see the data so nakedly laid out.  <\/p>\n<p>Another quick tidbit I&#8217;d like to add here: this chart also contains an &#8220;average&#8221; line throughout the chart. I think it helps to show how much higher the latter months go over the norm. You can find that setting in a similar spot to the trend line: <\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/avg-line.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/avg-line.png\" alt=\"\" width=\"203\" height=\"462\" class=\"aligncenter size-full wp-image-27122\" srcset=\"\/wp-content\/uploads\/2020\/12\/avg-line.png 203w, \/wp-content\/uploads\/2020\/12\/avg-line-132x300.png 132w\" sizes=\"(max-width: 203px) 100vw, 203px\" \/><\/a><\/p>\n<h4> Misc Carbon Monoxide Data <\/h4>\n<p>After taking a look at the hourly Average CO and NO2 data per distilled into a monthly basis, I decided maybe looking at the hourly data could be fun as well. Specifically, I knew that vehicles are a big omitter of CO emissions, so let&#8217;s take a look at that.<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\" alt=\"\" width=\"1280\" height=\"720\" class=\"aligncenter size-full wp-image-27111\" srcset=\"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png 1280w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourly-300x169.png 300w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourly-768x432.png 768w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourly-1024x576.png 1024w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourly-150x85.png 150w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourly-600x338.png 600w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>And here&#8217;s that same dataset, but visualized in a different way: <\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd.png\" alt=\"\" width=\"1280\" height=\"720\" class=\"aligncenter size-full wp-image-27116\" srcset=\"\/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd.png 1280w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd-300x169.png 300w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd-768x432.png 768w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd-1024x576.png 1024w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd-150x85.png 150w, \/wp-content\/uploads\/2020\/12\/averg-co2-hourlu-vhartd-600x338.png 600w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>What this dataset is showing us that, if you take ALL data points from the entire year of 2019, on average, hour 14 and hour 15 (2pm and 3pm) have the highest\/worst emissions of carbon. This totally matches our preconceived notions of what what we consider normal &#8220;traffic hours&#8221;, but it does skew a tad earlier than I had expected. Though that could be explained by remembering that the dataset includes weekends and those data could skew the normal &#8220;traffic bump&#8221; a bit.<\/p>\n<p>When the GridDB connector is able to add JOINs, I think it would be very interesting to compare a carbon emissions from April-July 2020 vs 2019. I&#8217;d imagine the difference is a bit mind-melting.<\/p>\n<h2> Conclusion <\/h2>\n<p>Well, that concludes our look at the Nitrogen Dioxide and Carbon Monoxide data that is so generously gathered and offered for analysis by the EPA. If you would have liked to see some other data analyzed, please do not hesitate to contact us and let us know.<\/p>\n<h2 id=\"source-code\"> Source Code <\/h2>\n<p><a href=\"https:\/\/github.com\/griddbnet\/Blogs\"> GitHub <\/a><\/p>\n<p><a href=\"https:\/\/griddb.net\/en\/download\/27202\/\"> <span class=\"download-button\"> SOURCE CODE &#038; Sample JSON<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the web page helps to illustrate \u00e2\u20ac\u201d by sheer power of existence \u00e2\u20ac\u201d the constant, existential threat faced by the Golden State; the state-wide wildfires can wreak havoc in countless ways, but today we want to focus [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":27111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-46621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tracking Air Quality in Los Angeles with GridDB &amp; Tableau | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tracking Air Quality in Los Angeles with GridDB &amp; Tableau | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-19T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-13T20:55:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Israel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Israel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\"},\"author\":{\"name\":\"Israel\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\"},\"headline\":\"Tracking Air Quality in Los Angeles with GridDB &#038; Tableau\",\"datePublished\":\"2021-01-19T08:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\"},\"wordCount\":1079,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\",\"url\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\",\"name\":\"Tracking Air Quality in Los Angeles with GridDB & Tableau | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\",\"datePublished\":\"2021-01-19T08:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:04+00:00\",\"description\":\"Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\",\"contentUrl\":\"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png\",\"width\":1280,\"height\":720},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb.net\/en\/#website\",\"url\":\"https:\/\/griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\",\"name\":\"Israel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"caption\":\"Israel\"},\"url\":\"https:\/\/griddb.net\/en\/author\/israel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tracking Air Quality in Los Angeles with GridDB & Tableau | GridDB: Open Source Time Series Database for IoT","description":"Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/","og_locale":"en_US","og_type":"article","og_title":"Tracking Air Quality in Los Angeles with GridDB & Tableau | GridDB: Open Source Time Series Database for IoT","og_description":"Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the","og_url":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2021-01-19T08:00:00+00:00","article_modified_time":"2025-11-13T20:55:04+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png","type":"image\/png"}],"author":"Israel","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"Israel","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/"},"author":{"name":"Israel","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740"},"headline":"Tracking Air Quality in Los Angeles with GridDB &#038; Tableau","datePublished":"2021-01-19T08:00:00+00:00","dateModified":"2025-11-13T20:55:04+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/"},"wordCount":1079,"commentCount":0,"publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/","url":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/","name":"Tracking Air Quality in Los Angeles with GridDB & Tableau | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png","datePublished":"2021-01-19T08:00:00+00:00","dateModified":"2025-11-13T20:55:04+00:00","description":"Take a look at this half-tongue-in-cheek, half-heartbreaking website: http:\/\/www.iscaliforniaonfire.com\/. Though I suspect it started out as a joke, the","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/blog\/tracking-air-quality-in-los-angeles-with-griddb-tableau\/#primaryimage","url":"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png","contentUrl":"\/wp-content\/uploads\/2020\/12\/averg-co2-hourly.png","width":1280,"height":720},{"@type":"WebSite","@id":"https:\/\/griddb.net\/en\/#website","url":"https:\/\/griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740","name":"Israel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","caption":"Israel"},"url":"https:\/\/griddb.net\/en\/author\/israel\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/comments?post=46621"}],"version-history":[{"count":1,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46621\/revisions"}],"predecessor-version":[{"id":51297,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46621\/revisions\/51297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media\/27111"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media?parent=46621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/categories?post=46621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/tags?post=46621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}