📉
Tutorials
  • Computer History
  • Function
    • Finance
      • Calculate
    • Manage Data
    • Date&Time
    • Strings and Character
  • Snippets
    • Web Application
      • Hugo
      • JavaScript
        • Stopwatch using JavaScript?
    • Note
    • Start Project
      • GitHub
      • GitLab
    • Python Programming
      • Strings and Character Data
      • List
      • Dictionaries
    • Data Science
      • Setting Option
      • Get Data
  • Link Center
    • Next Articles
    • Google
    • Excel VBA
    • Python
      • Notebook
    • WebApp
      • Vue.js
    • Finance
    • Project
      • Kids
        • Scratch
      • Finance
        • Plotly.js
        • Portfolio
      • Mini Lab
        • Systems Administration
        • Auto Adjust Image
      • Sending Emails
      • ECS
        • Knowledge Base
        • ระบบผู้เชี่ยวชาญ (Expert System)
        • Check product
        • Compare two SQL databases
      • e-Library
        • Knowledge base
        • การจัดหมวดหมู่ห้องสมุด
        • Temp
      • AppSheet
        • บัญชีรายรับรายจ่าย
      • Weather App
      • COVID-19
  • Tutorials
    • Data Science
      • Data Science IPython notebooks
    • UX & UI
      • 7 กฎการออกแบบ UI
    • Web Scraping
      • Scrape Wikipedia Articles
      • Quick Start
    • GUI
      • pysimple
        • Create a GUI
      • Tkinter
        • Python Tkinter Tutorial
      • PyQt
        • PyQt Tutorial
    • MachineLearning
      • การพัฒนา Chat Bot
      • AI ผู้ช่วยใหม่ในการทำ Customer Segmentation
      • Customer Segmentation
      • ตัดคำภาษาไทย ด้วย PyThaiNLP API
    • Excel & VBA
      • INDEX กับ MATCH
      • รวมสูตร Excel ปี 2020
      • How to Write Code in a Spreadsheet
    • Visualization
      • Bokeh
        • Part I: Getting Started
        • Data visualization
        • Plotting a Line Graph
        • Panel Document
        • Interactive Data Visualization
    • VueJS
      • VueJS - Quick Guide
    • Django
      • Customize the Django Admin
      • พัฒนาเว็บด้วย Django
    • Git
      • วิธีสร้าง SSH Key
      • Git คืออะไร
      • เริ่มต้นใช้งาน Git
      • การใช้งาน Git และ Github
      • รวม 10 คำสั่ง Git
      • GIT Push and Pull
    • Finance
      • Stock Analysis using Pandas (Series)
      • Building Investment AI for fintech
      • Resampling Time Series
      • Python for Finance (Series)
      • Stock Data Analysis (Second Edition)
      • Get Stock Data Using Python
      • Stock Price Trend Analysis
      • Calculate Stock Returns
      • Quantitative Trading
      • Backtrader for Backtesting
      • Binance Python API
      • Pine Script (TradingView)
      • Stocks Analysis with Pandas and Scikit-Learn
      • Yahoo Finance API
      • Sentiment Analysis
      • yfinance Library
      • Stock Data Analysis
      • YAHOO_FIN
      • Algorithmic Trading
    • JavaScript
      • Split a number
      • Callback Function
      • The Best JavaScript Examples
      • File and FileReader
      • JavaScript Tutorial
      • Build Reusable HTML Components
      • Developing JavaScript components
      • JavaScript - Quick Guide
      • JavaScript Style Guide()
      • Beginner's Handbook
      • Date Now
    • Frontend
      • HTML
        • File Path
      • Static Site Generators.
        • Creating a New Theme
    • Flask
      • Flask - Quick Guide
      • Flask Dashboards
        • Black Dashboard
        • Light Blue
        • Flask Dashboard Argon
      • Create Flask App
        • Creating First Application
        • Rendering Pages Using Jinja
      • Jinja Templates
        • Primer on Jinja Templating
        • Jinja Template Document
      • Learning Flask
        • Ep.1 Your first Flask app
        • Ep.2 Flask application structure
        • Ep.3 Serving HTML files
        • Ep.4 Serving static files
        • Ep.5 Jinja template inheritance
        • Ep.6 Jinja template design
        • Ep.7 Working with forms in Flask
        • Ep.8 Generating dynamic URLs in Flask
        • Ep.9 Working with JSON data
        • Ep.23 Deploying Flask to a VM
        • Ep.24 Flask and Docker
        • Ep. 25: uWSGI Introduction
        • Ep. 26 Flask before and after request
        • Ep. 27 uWSGI Decorators
        • Ep. 28 uWSGI Decorators
        • Ep. 29 Flask MethodView
        • Ep. 30 Application factory pattern
      • The Flask Mega-Tutorial
        • Chapter 2: Templates
      • Building Flask Apps
      • Practical Flask tutorial series
      • Compiling SCSS to CSS
      • Flask application structure
    • Database
      • READING FROM DATABASES
      • SQLite
        • Data Management
        • Fast subsets of large datasets
      • Pickle Module
        • How to Persist Objects
      • Python SQL Libraries
        • Create Python apps using SQL Server
    • Python
      • Python vs JavaScript
      • Python Pillow – Adjust Image
      • Python Library for Google Search
      • Python 3 - Quick Guide
      • Regular Expressions
        • Python Regular Expressions
        • Regular Expression (RegEx)
        • Validate ZIP Codes
        • Regular Expression Tutorial
      • Python Turtle
      • Python Beginner's Handbook
      • From Beginner to Pro
      • Standard Library
      • Datetime Tutorial
        • Manipulate Times, Dates, and Time Spans
      • Work With a PDF
      • geeksforgeeks.org
        • Python Tutorial
      • Class
      • Modules
        • Modules List
        • pickle Module
      • Working With Files
        • Open, Read, Append, and Other File Handling
        • File Manipulation
        • Reading & Writing to text files
      • Virtual Environments
        • Virtual Environments made easy
        • Virtual Environmen
        • A Primer
        • for Beginners
      • Functions
        • Function Guide
        • Inner Functions
      • Learning Python
        • Pt. 4 Python Strings
        • Pt. 3 Python Variables
      • Zip Function
      • Iterators
      • Try and Except
        • Exceptions: Introduction
        • Exceptions Handling
        • try and excep
        • Errors and Exceptions
        • Errors & Exceptions
      • Control Flow
      • Lambda Functions
        • Lambda Expression คืออะไร
        • map() Function
      • Date and Time
        • Python datetime()
        • Get Current Date and Time
        • datetime in Python
      • Awesome Python
      • Dictionary
        • Dictionary Comprehension
        • ALL ABOUT DICTIONARIES
        • DefaultDict Type for Handling Missing Keys
        • The Definitive Guide
        • Why Functions Modify Lists and Dictionaries
      • Python Structures
      • Variable & Data Types
      • List
        • Lists Explained
        • List Comprehensions
          • Python List Comprehension
          • List Comprehensions in 5-minutes
          • List Comprehension
        • Python List
      • String
        • Strings and Character Data
        • Splitting, Concatenating, and Joining Strings
      • String Formatting
        • Improved String Formatting Syntax
        • String Formatting Best Practices
        • Remove Space
        • Add Spaces
      • Important basic syntax
      • List all the packages
      • comment
    • Pandas
      • Tutorial (GeeksforGeeks)
      • 10 minutes to pandas
      • Options and settings
      • เริ่มต้น Set Up Kaggle.com
      • Pandas - Quick Guide
      • Cookbook
      • NumPy
        • NumPy Package for Scientific
      • IO tools (text, CSV, …)
      • pandas.concat
      • Excel & Google Sheets
        • A Guide to Excel
        • Quickstart to the Google Sheets
        • Python Excel Tutorial: The Definitive Guide
      • Working With Text Data
        • Quickstart
      • API Reference
      • Groupby
      • DateTime Methods
      • DataFrame
      • sort_values()
      • Pundit: Accessing Data in DataFrames
      • datatable
        • DataFrame: to_json()
        • pydatatable
      • Read and Write Files
      • Data Analysis with Pandas
      • Pandas and Python: Top 10
      • 10 minutes to pandas
      • Getting Started with Pandas in Python
    • Markdown
      • Create Responsive HTML Emails
      • Using Markup Languages with Hugo
    • AngularJS
      • Learn AngularJS
    • CSS
      • The CSS Handbook
      • Box Shadow
      • Image Center
      • The CSS Handbook
      • The CSS Handbook
      • Loading Animation
      • CSS Grid Layout
      • Background Image Size
      • Flexbox
  • Series
    • จาวาสคริปต์เบื้องต้น
      • 1: รู้จักกับจาวาสคริปต์
  • Articles
    • Visualization
      • Dash
        • Introducing Dash
    • Finance
      • PyPortfolioOpt
      • Best Libraries for Finance
      • Detection of price support
      • Portfolio Optimization
      • Python Packages For Finance
    • Django
      • เริ่มต้น Django RestFramework
    • General
      • Heroku คืออะไร
      • How to Crack Passwords
    • Notebook
      • IPython Documentation
      • Importing Notebooks
      • Google Colab for Data Analytics
      • Creating Interactive Dashboards
      • The Definitive Guide
      • A gallery of interesting Jupyter Notebooks
      • Advanced Jupyter Notebooks
      • Converting HTML to Notebook
    • Pandas
      • Pandas_UI
      • Pandas Style API
      • Difference Between two Dataframes
      • 19 Essential Snippets in Pandas
      • Time Series Analysis
      • Selecting Columns in a DataFrame
      • Cleaning Up Currency Data
      • Combine Multiple Excel Worksheets
      • Stylin’ with Pandas
      • Pythonic Data Cleaning
      • Make Excel Faster
      • Reading Excel (xlsx) Files
      • How to use iloc and loc for Indexing
      • The Easiest Data Cleaning Method
    • Python
      • pip install package
      • Automating your daily tasks
      • Convert Speech to Text
      • Tutorial, Project Ideas, and Tips
      • Image Handling and Processing
        • Image Processing Part I
        • Image Processing Part II
        • Image tutorial
        • Image Processing with Numpy
        • Converts PIL Image to Numpy Array
      • Convert Dictionary To JSON
      • JSON Dump
      • Speech-to-Text Model
      • Convert Text to Speech
      • Tips & Tricks
        • Fundamentals for Data Science
        • Best Python Code Examples
        • Top 50 Tips & Tricks
        • 11 Beginner Tips
        • 10 Tips & Tricks
      • Password hashing
      • psutil
      • Lambda Expressions
    • Web Scraping
      • Web Scraping using Python
      • Build a Web Scraper
      • Web Scraping for beginner
      • Beautiful Soup
      • Scrape Websites
      • Python Web Scraping
        • Web Scraping Part 1
        • Web Scraping Part 2
        • Web Scraping Part 3
        • Web Scraping Part 4
      • Web Scraper
    • Frontend
      • Book Online with GitBook
      • Progressive Web App คืออะไร
      • self-host a Hugo web app
  • Examples
    • Django
      • Build a Portfolio App
      • SchoolManagement
    • Flask
      • Flask Stock Visualizer
      • Flask by Example
      • Building Flask Apps
      • Flask 101
    • OpenCV
      • Build a Celebrity Look-Alike
      • Face Detection-OpenCV
    • Python
      • Make Game FLASH CARD
      • Sending emails using Google
      • ตรวจหาภาพซ้ำด้วย Perceptual hashing
        • Sending Emails in Python
      • Deck of Cards
      • Extract Wikipedia Data
      • Convert Python File to EXE
      • Business Machine Learning
      • python-business-analytics
      • Simple Blackjack Game
      • Python Turtle Clock
      • Countdown
      • 3D Animation : Moon Phases
      • Defragmentation Algorithm
      • PDF File
        • จัดการข้อความ และรูป จากไฟล์ PDF ด้วย PDFBox
      • Reading and Generating QR codes
      • Generating Password
        • generate one-time password (OTP)
        • Random Password Generator
        • Generating Strong Password
      • PyQt: Building Calculator
      • List Files in a Directory
      • [Project] qID – โปรแกรมแต่งรูปง่ายๆ เพื่อการอัพลงเว็บ
      • Python and Google Docs to Build Books
      • Tools for Record Linking
      • Create Responsive HTML Email
      • psutil()
      • Transfer Learning for Deep Learning
      • ดึงข้อมูลคุณภาพอากาศประเทศไทย
        • Image Classification
    • Web Scraper
      • Scrape Wikipedia Articles
        • Untitled
      • How Scrape Websites with Python 3
    • Finance
      • Algorithmic Trading for Beginners
      • Parse TradingView Stock
      • Creating a stock price database with MariaDB and python
      • Source Code
        • stocks-list
      • Visualizing with D3
      • Real Time Stock in Excel using Python
      • Create Stock Quote Module
      • The Magic Formula Lost Its Sparkle?
      • Stock Market Analysis
      • Stock Portfolio Analyses Part 1
      • Stock Portfolio Analyses Part 2
      • Build A Dashboard In Python
      • Stock Market Predictions with LSTM
      • Trading example
      • Algorithmic Trading Strategies
      • DOWNLOAD FUNDAMENTALS DATA
      • Algorithmic Trading
      • numfin
      • Financial Machine Learning
      • Algorithm To Predict Stock Direction
      • Interactive Brokers API Code
      • The (Artificially) Intelligent Investor
      • Create Auto-Updating Excel of Stock Market
      • Stock Market Predictions
      • Automate Your Stock Portfolio
      • create an analytics dashboard
      • Bitcoin Price Notifications
      • Portfolio Management
    • WebApp
      • CSS
        • The Best CSS Examples
      • JavaScript
        • Memory Game
      • School Clock
      • Frontend Tutorials & Example
      • Side Menu Bar with sub-menu
      • Create Simple CPU Monitor App
      • Vue.js building a converter app
      • jQuery
        • The Best jQuery Examples
      • Image Slideshow
      • Handle Timezones
      • Text to Speech with Javascript
      • Building Blog for Your Portfolio
      • Responsive Website Layout
      • Maths Homework Generator
  • Books
    • Finance
      • Python for Finance (O'Reilly)
    • Website
      • Hugo
        • Go Bootcamp
        • Hugo in Action.
          • About this MEAP
          • Welcome
          • 1. The JAM stack with Hugo
          • 2. Live in 30 minutes
          • 3. Using Markup for content
          • 4. Content Management with Hugo
          • 5. Custom Pages and Customized Content
          • 6. Structuring web pages
          • A Appendix A.
          • B Appendix B.
          • C Appendix C.
    • Python
      • ภาษาไพธอนเบื้องต้น
      • Python Cheatsheet
        • Python Cheatsheet
      • Beginning Python
      • IPython Cookbook
      • The Quick Python Book
        • Case study
        • Part 1. Starting out
          • 1. About Python
          • 2. Getting started
          • 3. The Quick Python overview
        • Part 2. The essentials
          • 14. Exceptions
          • 13. Reading and writing files
          • 12. Using the filesystem
          • 11. Python programs
          • 10. Modules and scoping rules
          • 9. Functions
          • 8. Control flow
          • 4. The absolute basics
          • 5. Lists, tuples, and sets
          • 6. Strings
          • 7. Dictionaries
        • Part 3. Advanced language features
          • 19. Using Python libraries
          • 18. Packages
          • 17. Data types as objects
          • 16. Regular expressions
          • 15. Classes and OOP
        • Part 4. Working with data
          • Appendix B. Exercise answers
          • Appendix A. Python’s documentation
          • 24. Exploring data
          • 23. Saving data
          • 20. Basic file wrangling
          • 21. Processing data files
          • 22. Data over the network
      • The Hitchhiker’s Guide to Python
      • A Whirlwind Tour of Python
        • 9. Defining Functions
      • Automate the Boring Stuff
        • 4. Lists
        • 5. Dictionaries
        • 12. Web Scraping
        • 13. Excel
        • 14. Google Sheets
        • 15. PDF and Word
        • 16. CSV and JSON
    • IPython
    • Pandas
      • จัดการข้อมูลด้วย pandas เบื้องต้น
      • Pandas Tutorial
  • Link Center
    • Temp
  • เทควันโด
    • รวมเทคนิค
    • Help and Documentation
  • Image
    • Logistics
Powered by GitBook
On this page

Was this helpful?

  1. Examples
  2. Python

ดึงข้อมูลคุณภาพอากาศประเทศไทย

PreviousTransfer Learning for Deep LearningNextImage Classification

Last updated 5 years ago

Was this helpful?

ลองมือดึงข้อมูลคุณภาพอากาศปัจจุบันในประเทศไทยด้วยโค้ด Python

โค้ดทั้งหมดในบทความนี้ใช้ Apache Software License 2.0

ปัจจุบัน มี 3 เว็บที่แสดงข้อมูลคุณภาพอากาศปัจจุบันในประเทศไทยที่ใช้ข้อมูลจากสถานีวัดอากาศที่ไม่ใช้ข้อมูลจากดาวเทียมดังนี้

  • AIR4THAI - เป็นข้อมูลจากกองจัดการคุณภาพอากาศและเสียง กรมควบคุมมลพิษ ที่ให้บริการบนเว็บ

  • Bangkok Air Quality - เป็นข้อมูลจากกองจัดการคุณภาพอากาศและเสียงกรุงเทพมหานคร ที่ให้บริการคุณภาพอากาศตามจุดต่าง ๆ ของกรุงเทพมหานคร บนเว็บ

  • ศูนย์เฝ้าระวังคุณภาพอากาศ วช. - เป็นข้อมูลที่ทางสำนักงานการวิจัยแห่งชาติ (วช.) รวบรวมมาจัดทำเป็นเว็บให้บริการตรวจสอบคุณภาพอากาศทั่วโลก โดยให้บริการบนเว็บ

ทั้งสามเว็บปรับปรุงข้อมูลทุก ๆ 1 ชั่วโมง โดยมีเพียง AIR4THAI เท่านั้นที่มี API ทั้ง JSON และ XML ให้ดึงไปใช้งานได้ ผมจึงเขียนโปรแกรมเพื่อดึงข้อมูลจากทั้งหมด 3 แหล่ง โดยจะใช้วิธีการดักข้อมูลแบบง่าย ๆ ก่อนอื่น เราออกแบบว่าข้อมูลที่เราจะจัดเก็บเป็นแบบไหน โดยกำหนด

data = []

โดยเก็บข้อมูลแต่ละ index เป็น index ละสถานีตรวจคุณภาพอากาศ เป็น dict ที่มีรายละเอียดข้อมูลดังนี้

{
            'Lat' : '',
            'Lng' : '',
            'aqi' : '',
            'pm2.5' : '',
            'pm10' : '',
            'CO' : '',
            'NO2' : '',
            'O3' : '',
            'SO2' : '',
            'title' : '',
            'time' : '',
            'source' : ''
  }

เรามาเขียน Python ดึงข้อมูลคุณภาพอากาศในประเทศไทยจาก AIR4THAI โดยใช้ requests โดยแรกให้เราดึงข้อมูลมาแล้วแปลงให้เป็น json ตามโค้ดข้างล่าง แล้วแปลงให้เป็น dict

import requests, json
url3 = "http://air4thai.pcd.go.th/services/getNewAQI_JSON.php"
r3 = requests.get(url3)
temp_data = dict(r3.json())

ต่อมา เราจะต้องจัดเก็บข้อมูลให้อยู่ในรูป dict ใน list ที่เรากำหนด แต่ก่อนที่เราจะเอาข้อมูลไปใส่ ต้องตรวจสอบวันเดือนปีของข้อมูลก่อน เนื่องจากมีบางเซ็นเซอร์ไม่ได้อัพเดตข้อมูลส่วนนี้ เราจึงสร้างฟังก์ชันตรวจสอบวันเดือนปีก่อน แบบง่าย ๆ

from datetime import datetime
import pytz
tz = pytz.timezone('Asia/Bangkok')

d = datetime.now(tz).strftime('%Y-%m-%d')
def check_datenow(t):
  return if d in t

มาลูปจัดเก็บลง data

for i in temp_data['stations']:
  d_temp = {}
  d_temp['Lat'] = i['lat']
  d_temp['Lng'] = i['long']
  l_temp=i['LastUpdate']
  d_temp['aqi'] = l_temp['AQI']['aqi']
  if 'PM25'  in list(l_temp.keys()):
    pm25=l_temp['PM25']['value']
    if pm25 != 'n/a' and pm25!='' and pm25!='-' and pm25!='N/A':
      d_temp['pm2.5'] = pm25
    else:
      d_temp['pm2.5'] = ''
      #continue
  else:
    d_temp['pm2.5'] = ''
    #continue
  if 'PM10'  in list(l_temp.keys()):
    pm10=l_temp['PM10']['value']
    if pm10 != 'n/a' and pm10!='' and pm10!='-' and pm10!='N/A':
      d_temp['pm10'] = pm10
  if 'CO'  in list(l_temp.keys()):
    CO=l_temp['CO']['value']
    if CO != 'n/a' and CO!='' and CO!='-' and CO!='N/A':
      d_temp['CO'] = CO
  if 'NO2'  in list(l_temp.keys()):
    NO2=l_temp['NO2']['value']
    if NO2 != 'n/a' and NO2!='' and NO2!='-' and NO2!='N/A':
      d_temp['NO2'] = NO2
  if 'O3'  in list(l_temp.keys()):
    O3=l_temp['O3']['value']
    if O3 != 'n/a' and O3!='' and O3!='-' and O3!='N/A':
      d_temp['O3'] = O3
  if 'SO2'  in list(l_temp.keys()):
    SO2=l_temp['SO2']['value']
    if SO2!= 'n/a' and SO2!='' and SO2!='-' and SO2!='N/A':
      d_temp['SO2'] = SO2
  d_temp['title'] = i['areaTH']
  d_temp['time'] = l_temp['date']+" "+l_temp['time']
  d_temp['source'] = "air4thai"
  if check_datenow(d_temp['time']):
    data.append(d_temp)

ต่อมา เรามาจัดการดึงข้อมูลคุณภาพอากาศในเขตกรุงเทพมหาครโดยดึงผ่าน Bangkok Air Quality กัน

d2 = datetime.now(tz).strftime('%d-%m-%Y')
def check_datenow2(t):
  return if d2 in t
  
# getdata
import xmltodict
data_bangkok=dict(json.loads(json.dumps(xmltodict.parse(r2.text),ensure_ascii=False)))
for i in data_bangkok['markers']['marker']:
  d_temp = {}
  d_temp['Lat'] = i['@lat']
  d_temp['Lng'] = i['@lng']
  d_temp['aqi'] = ''
  if '@pm25' in list(i.keys()):
    if i['@pm25'] != 'n/a' and i['@pm25']!='' and i['@pm25']!='-':
      d_temp['pm2.5'] = i['@pm25']
    else:
      d_temp['pm2.5'] = ''#continue
  else:
    d_temp['pm2.5'] =''#continue
  if '@pm10' in list(i.keys()):
    d_temp['pm10'] = i['@pm10']
  d_temp['title'] = i['@district_th'].strip() + " กรุงเทพฯ"
  d_temp['CO'] = ''
  d_temp['NO2'] = ''
  d_temp['O3'] = ''
  d_temp['SO2'] = ''
  d_temp['time'] = i['@date_time']
  d_temp['source'] = "bangkokairquality"
  if check_datenow2(d_temp['time']):
    d_temp['time'] = d_temp['time'].replace(d2,d) # เปลี่ยนวันเดือนปี ให้เหมือนกัน
    data.append(d_temp)
var locationXX = ...  # ไปเรื่อย ๆ แล้วค่อยดักหลัง
google.maps.event.addListener(
# เป็นต้นไป

url = "http://pm2_5.nrct.go.th/map"
r = requests.get(url)
html = r.text.strip()

do2 = html.split(" var location")[1:]
do3 = []
for i in do2:
  do3.append(i.split("google.maps.event.addListener(")[0])

for i in do3:
  d_temp = {}
  temp1= i.split("new google.maps.LatLng(")
  LatLng = temp1[1].split(");")[0]
  d_temp['Lat'] = LatLng.split(",")[0]
  d_temp['Lng'] = LatLng.split(",")[1]
  temp1 = temp1[1]
  if "var aqi = '" in temp1:
    d_temp['aqi'] = temp1.split("var aqi = '")[1].split("'")[0]
  #if "var aqival = '" in temp1:
  #  d_temp['aqival'] = temp1.split("var aqival = '")[1].split("'")[0]
  if 'var pm = "' in temp1:
    d_temp['pm2.5'] = temp1.split('var pm = "')[1].split('"')[0]
  #if 'var pmint = "' in temp1:
  #  d_temp['pmint'] = temp1.split('var pmint = "')[1].split('"')[0]
  d_temp['pm10'] = ''
  d_temp['CO'] = ''
  d_temp['NO2'] = ''
  d_temp['O3'] = ''
  d_temp['SO2'] = ''
  d_temp['title'] = temp1.split("data: '")[1].split("'")[0].strip()
  if "Air4Thai" in d_temp['title']:
    continue
  d_temp['time'] = temp1.split("time: '")[1].split("'")[0]
  d_temp['source'] = "nrct"
  if check_datenow(d_temp['time']):
    data.append(d_temp)

เรียบร้อย เพียงเท่านี้เราก็ได้ข้อมูลข้อมูลคุณภาพอากาศในประเทศไทยด้วย Python ไว้ใช้ประมวลผลต่อไปแล้ว

เรามาลองโชว์ข้อมูล PM2.5 บนแผนที่ตามจุดสถานีตรวจคุณภาพอากาศกัน โดยใช้ folium

import folium # ติดตั้งได้ด้วย pip install folium
map_osm = folium.Map(location=[15.0000, 100.0000], zoom_start=5) # [ละติจูด,ลองติดจูด] และการซูมลำดับ 5
tooltip = 'Click me!'

for i in data:
  if i['Lat']=='' and i['Lng']=='':
    continue
  #print([(i['Lat'].strip()), (i['Lng'].strip())])
  folium.Marker([float(i['Lat'].strip()), float(i['Lng'].strip())], popup=i['pm2.5']+" µg/m³", tooltip=tooltip).add_to(map_osm)

map_osm.save('thailandmap.html') # บันทึกเป็นไฟล์ html

ลองมาเปิดไฟล์ thailandmap.html

ดึงข้อมูลคุณภาพอากาศปัจจุบันในประเทศไทยด้วย PyThaiAIR

ก่อนที่เราจะไปไกลกันกว่านี้ เชื่อว่าผู้อ่านคงอยากดึงข้อมูลด้วยโมดูลง่าย ๆ ไม่ต้องเขียนโค้ดดึงเอง ผมจึงได้ทำโมดูลใหม่ที่ชื่อ PyThaiAIR ขึ้นมา เพื่อดึงข้อมูลคุณภาพอากาศในประเทศไทยปัจจุบัน สามารถติดตั้งได้ด้วยคำสั่ง

pip install pythaiair

การใช้งาน ให้เรียกใช้

from pythaiair import Air
air = Air()

โดยมีคำสั่งดังนี้

  • Air().get_data() - รับข้อมูลคุณภาพอากาศจากสถานีตรวจอากาศออกมาเป็น list โดยข้อมูลเป็น dict ตามโค้ดข้างบน

  • Air().get_data_provinces() - รับข้อมูลคุณภาพอากาศจากสถานีตรวจอากาศออกมาเป็น dict แยกตามชื่อจังหวัดในประเทศไทย

  • Air().update_data() - ใช้ปรับปรุงข้อมูลให้ดึงข้อมูลมาใหม่ แนะนำให้ทำทุก 1 ชั่วโมง

สร้างกราฟแท่งแสดงค่า PM2.5 ที่สูงที่สุด 5 อันดับแรกของกรุงเทพมหานคร

พอเราติดตั้งเสร็จแล้ว ต่อไปเรามาลองสร้างกราฟแท่งแสดงค่า PM2.5 ที่สูงที่สุด 5 อันดับแรกของกรุงเทพมหานครกัน

from pythaiair import Air
air = Air()
กรุงเทพpm25_x = [i['title'] for i in air.get_data_provinces()['กรุงเทพฯ']]
กรุงเทพpm25_y = [i['pm2.5'] for i in air.get_data_provinces()['กรุงเทพฯ']]
กรุงเทพpm25 = sorted(list(zip(กรุงเทพpm25_x, กรุงเทพpm25_y)), key=lambda x: x[1],reverse=True) # เรียงจากมากที่สุดไปน้อยที่สุด
pm25_x = [i[0] for i in กรุงเทพpm25]
pm25_y = [i[1] for i in กรุงเทพpm25]

from nvd3 import discreteBarChart # ติดตั้งด้วยคำสั่ง pip install python-nvd3
chart = discreteBarChart(name='discreteBarChart', height=400, width=1280)

xdata = pm25_x[:5]
ydata = pm25_y[:5]

chart.add_serie(y=ydata, x=xdata)
chart.buildhtml()
with open('bkk.html','w') as f:
 f.write('chart.htmlcontent')

ผลลัพธ์ เมื่อเปิดไฟล์ bkk.html

โดยข้อมูลตาม key ที่เราสร้างเก็บทั้ง PM2.5 , PM 10, AQI, CO, NO2, O3, SO2 และที่ตั้งของสถานีตรวจคุณภาพอากาศ เวลา รวมถึงแหล่งที่มา โดยข้อมูลส่วนไหนขาดจะเป็น '' เริ่มแรกที่ AIR4THAI กันก่อน ของ AIR4THAI มี API แบบ JSON ให้เราสามารถดึงไปใช้งานได้

Bangkok Air Quality มีข้อดีตรงที่มี XML ที่สามารถดึงมาใช้งานได้ โดยดึงจาก เป็น XML หลาย ๆ คน คงใช้ไลบารี XML ของ Python ในการจัดการ XML แต่ผมจะใช้วิธีที่ง่ายกว่านั้น โดยใช้ xmltodict สามารถติดตั้ง xmltodict ได้ด้วยคำสั่ง xmltodict ก่อนดึงข้อมูล เนื่องจาก Bangkok Air Quality ใช้รูปแบบวันเดือนปีที่ไม่เหมือนกับ AIR4THAI จึงต้องสร้างฟังก์ชันใหม่ขึ้นมา

สุดท้าย เรามาดึงข้อมูลคุณภาพอากาศจากศูนย์เฝ้าระวังคุณภาพอากาศ วช. ด้วย Python กัน เนื่องจากข้อมูลเป็นแบบหน้าเว็บ ไม่ได้ใช้ JSON หรือ XML เราจึงเขียนตัวสกัดเอาข้อมูลจาก HTML Code กัน หลาย ๆ คนคงคิดว่าคงจะใช้ regex ใช่ไหม? คำตอบของบทความนี้ คือ ไม่! เราจะเขียนแบบง่าย ๆ ที่สุดคือ ใช้ split ไปจนได้ข้อมูลตามที่ต้องการมาได้ครบถ้วน ข้อมูลใน เราสามารถดักเป็นรูปแบบได้ โดยตามรูปแบบ

แผนที่โดย OpenStreetMap

สามารถลองเล่น Colab บทความนี้ได้ที่ และเข้าไปร่วมพัฒนา PyThaiAIR ได้ที่

Reference :

air4thai.pcd.go.th
bangkokairquality.com
pm2_5.nrct.go.th
Link
https://bangkokairquality.com/bma/marker.php
pm2_5.nrct.go.th/map
https://colab.research.google.com/drive/10C-MPTQTQYljKCuoyf2O73CYI7C29b7Y
https://github.com/wannaphong/pythaiair
python3.wannaphong.com