3 ตุลาคม 2558

Published 10/03/2558 by with 0 comment

สร้างกราฟจากข้อมูล CSV ของ Open Data จากภาครัฐ

สวัสดีผู้อ่านทุกท่านครับ พบกันอีกครั้งกับการเขียนโปรแกรมภาษาไพทอนเพื่อประมวลผลข้อมูล Open Data จากภาครัฐ บทความนี้ผมจะพาผู้อ่านไปสร้างกราฟจากข้อมูล CSV ของ Open Data จากภาครัฐกันครับ
บทความนี้ใช้ IPython Notebook ในการเขียนโปรแกรม

ข้อมูลที่ผมจะนำมาใช้ในบทความนี้
สรุปข้อมูลด้านเศรษฐกิจ (โหลดข้อมูลได้จาก http://data.go.th/DatasetDetail.aspx?id=c14f05d7-bb79-4bf0-95cb-35483b6421ac)
เป็นข้อมูลในการประเมินความพร้อมในการให้ความช่วยแหลือด้านการเงิน การสถานประกอบการโรงฆ่าสัตว์ รวมไปถึงการควบคุมสุขอนามัยในโรงฆ่าสัตว์

ผมต้องการกราฟรูปแท่งเพื่อแสดงข้อมูลจำนวนโรงฆ่าสัตว์ของเอกชน (แห่ง) โดยแยกตามจังหวัด

ทำโหลดไฟล์ "สรุปข้อมูลด้านเศรษฐกิจCSV" ได้ไฟล์ชื่อ 02.csv (โหลดข้อมูลได้จาก http://data.go.th/DatasetDetail.aspx?id=c14f05d7-bb79-4bf0-95cb-35483b6421ac)

บทความนี้ใช้ความรู้จากบทความ

ผมทำการสร้าง Notebook สำหรับใช้ประมวลผลข้อมูลขึ้นมาใน IPython Notebook แล้วมาลงมือเขียนโค้ดกันเลยครับ
อย่างแรก ทำการ import โมดูลที่จำเป็นเข้ามา

[python]import csv
from IPython.core.display import HTML
from nvd3 import multiBarChart[/python]

ต่อมากำหนดข้อมูลการตั้งค่ากราฟแท่งของโมดูล nvd3

[python]chart = multiBarChart(width=1024, height=600, x_axis_format=None) # กว่าง * ยาว = 1024 พิกเซล * 600 พิกเซล[/python]

เสร็จ ผมต้องดึงไฟล์ 02.csv เข้ามา แล้วดึงข้อมูลเข้ามาเก็บไว้ในตัวแปร data

[python]data = [] # กำหนดให้เก็บข้อมูลเป็นข้อมูลชนิด List
with open('02.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
data.append(row) # เพิ่มข้อมูลเข้าไปยัง data
[/python]

หากผู้อ่านได้เปิดไฟล์ 02.csv ดูจะพบกว่า จะมีข้อมูลอธิบายส่วนหัว
และข้อมูลสรุปรวมที่ส่วนล่างของไฟล์ 02.csv
ต้องลบข้อมูลทั้งสองนี้ก่อนนำไปใช้งาน ผมจึงทำการลบข้อมูลส่วนนี้ออก

[python]
del data[0] # ลบส่วนหัวออก
del data[76] # ลบส่วนล่างออก[/python]

สร้างตัวแปรไว้เก็บข้อมูล

  • ชื่อจังหวัด เป็นแถวยาว อยู่แกน x เป็นตัวแปรชื่อ xdata

  • ข้อมูลจำนวนโรงฆ่าสัตว์ของเอกชน (แห่ง) อยู่แกน y เป็นตัวแปรชื่อ ydata



[python]
xdata = []
ydata = []
[/python]

สร้างตัวแปรเก็บค่าจำนวนครั้งการลูป และทำการลูปดึงข้อมูลเพื่อเพิ่มข้อมูลที่กำหนดออกมาจากตัวแปร data

[python]
i = 0
while i < len(data):
xdata.append(data[i][0]) # ชื่อจังหวัด
ydata.append(int(data[i][5])) # ข้อมูลจำนวนโรงฆ่าสัตว์ของเอกชน (แห่ง)
i+=1 # เพื่อค่าอีก 1
[/python]

รู้หรือไม่ ?
การลูปด้วย for ในภาษาไพทอนมีประสิทธิภาพดีกว่าการลูปแบบอื่น ๆ
# แก้ไขครั้งที่ 1 วันที่ 5/10/2015 แก้จาก while เป็น for ขอขอบคุณคุณ why มา ณ ที่นี้ครับ
ที่มา https://stackoverflow.com/questions/1377429/what-is-faster-in-python-while-or-for-xrange

เสร็จ จากนั้นนำข้อมูลมาแสดงผลใน IPython Notebook

[python]
chart.add_serie(name="จำนวนโรงฆ่าสัตว์ของเอกชน(แห่ง)", y=ydata, x=xdata)
chart.buildhtml()
HTML(chart.htmlcontent) # แสดงผลข้อมูล[/python]

ผลลัพธ์

สร้างกราฟจากข้อมูล CSV ของ Open Data จากภาครัฐ

โค้ดฉบับเต็ม

โหลดไฟล์ IPython Notebook ได้ที่ http://1drv.ms/1M625PT

ลองนำความรู้ที่ได้ไปประยุกต์ใช้งานกันดูครับ

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)