วิเคราะห์ข้อมูล Spatial Data โดยใช้ GeoPandas(Part1)
บทความแรกจะเน้น Basic Geometry Operation ก่อนเพื่อปูพื้นฐาน ด้าน Spatial Analysis ก่อนครับ
การวิเคราะห์ข้อมูลนั้น มีรูปแบบของ Data Type ที่นำมาวิเคราะห์ หลากหลายประเภททั้งที่เป็น Numerical(ตัวเลข),Category(Text),Time(เวลา) แต่ก็ยังมี Data อีกประเภทนึง ซึ่งมีความสำคัญในการวิเคราะห์ข้อมูล คือ ข้อมูลเชิงพื้นที่(Spatial data) โดยเราจะมาดูกันว่าเราสามาถนำข้อมูล Spatial data มาใช้ประโยชน์ในการวิเคราะห์ได้อย่างไร
ข้อมูลเชิงพื้นที่ คือข้อมูลที่ระบุ Latitude Longitude หรือ ระบุ Location ตำบล อำเภอ จังหวัด โดยเราสามารถนำ Data ส่วนนั้นมาแสดงผลเพื่อดูความสัมพันธ์ของข้อมูล โดยในบทความนี้เราจะ เน้นการวิเคราะห์ข้อมูลจาก Latitude และ Longitude
โดยส่วนใหญ่ ชาว Data Science จะคุ้นเคยกับ Library Pandas กันอยู่แล้ว ซึ่งช่วยทำให้การ Prepare Dataframe ทำได้ง่ายขึ้น แต่เมื่อเรามาจะทำการวิเคราะห์ Data เชิงพื้นที่ เราอาจจะต้องนึกถึง Library GeoPandas มาเป็นตัวช่วยที่จะทำให้งานวิเคราะห์ในเชิงพื้นที่ของเราให้ง่ายขึ้นเช่นกัน มาทำความรู้จัก GeoPandas กันดีกว่า
ก่อนที่จะไปดู คำสั่งต่างๆใน GeoPandas เรามามทำความรู้จัก GeoDataframe กันก่อน
ส่วนที่สำคัญสุดของ GeoPandas ก็คือ GeoDataFrame นั่นเอง ซึ่งสามารถเก็บ Geometry Column ได้ ซึ่งเป็นส่วนที่นำไปใช้ในการทำ Spatial Operation ส่งผลทำให้ GeoPandas สามารถทำ Spatial Data Analysis ได้นั่นเอง
GeoDataFrame = DataFrame+Geometry Column(GeoSeries)
โดยใน Geometry สามารถเก็บ Geometry type ได้ทั้ง
- Points / Multi-Points
- Lines / Multi-Lines
- Polygons / Multi-Polygons
วิธีการ อ่านค่า จาก DataFrame แล้วแปลงเป็น Point เพื่อและ Add Geometry เพื่อทำให้เป็น GeoDataFrame
Filter จุดที่อยู่ใน แผนที่ประเทศไทย ให้ได้มากที่สุด
Plot Geometry แบบ Point ดู
วิธีการ Load GeoDataFrame ที่เป็น Shapefile โดยมี Geometry เป็น Polygon อยู่แล้ว มาเพื่อแสดงผล
Plot Geometry แบบ Polygon ดู
วิธีการสร้าง LineString ขึ้นมาจากจุด
โดยเริ่มจากการสร้าง point ขึ้นมาก่อน
หลังจากนั้นสร้าง LineString ขึ้นมาจาก List ของ point
Output จากการ Create Line String
Plot Geometry LineString ที่สร้างขึ้นมาใหม่
เมื่อเราเห็น Geometry Type ครบทั้ง 3 แบบแล้ว เราไปดู Geometry Operation ต่างๆ ดูว่า ทำอะไรได้บ้าง
Centroid.x Centroid.y
ไว้หา ค่า coordinate x และ y ที่เป็น จุดศูนย์กลางของ polygon
แสดงตัวอย่าการหา centroid.x centroid.y ของ Polygon จังหวัดในประเทศไทย
plot ผลของ centroid.x centroid.y ของแต่ละจังหวัด
Buffer
ใช้สำหรับขยายขนาดของ geometry ด้วยระยะที่เท่าๆกัน ตัวอย่างในการใช้งานเหมาะกับการกำหนด Coverage ร้านสะดวกซื้อ ว่าครอบคลุมภายในรัศมี 5 km ก็สามารถใช้ Buffer เป็นตัวขยาย point ให้ครอบคลุมได้ตามรัศมีทำการ
เนื่องจากเราจะใช้การวัดระยะทางเข้ามาเกี่ยวข้องทำให้ ต้องเปลี่ยน CRS ให้เหมาะกับ การใช้กับเรื่องระยะทาง(CRS:3857 )
ขยายขนาด point ให้ เป็น polygon โดยเพิ่ม ขนาดเป็น50 Km
Plot Buffer ที่ขยายขนาดให้มีรัศมีเพิ่มขึ้น 50 Km
Convex Hull
ใช้สำหรับการ ทำการลดความละเอียดของ Polygon ให้มีจุดเชื่อมต่อลดลง หรือใช้ในการทำให้ Polygon smooth ขึ้น
Plot ผลลัพธ์ของ Polygon ที่ทำ Convex Hullแล้ว
LineBoundary
เป็นการเปลี่ยนจาก Polygon มาเป็น LineString ใช้กรณีที่เราสนใจเฉพาะ Boundary ของ Polygon
Geometry ก่อนเปลี่ยนเป็น Boundary
Geometry หลังเปลี่ยนเป็น Boundary
Plot Boundary เราจะเห็น แค่ เส้นของเท่านั้น
unary_union
ใช้สำหรับการ Merge Polygon หลายๆ unit เข้าไว้ด้วยกัน ให้กลายเป็น Polygon ใหญ่อันเดียว
Plot แสดงผลหลังจาก รวม Polygon แต่ละจังหวัดในประเทศไทยเข้าไว้ด้วยกัน
Length
ใช้สำหรับหาเส้นรอบรูปของ Polygon และ linestring
Area
ใช้สำหรับหาพื้นที่ภายใน Polygon
Sjoin
เป็น Geometry Operation ที่สำคัญที่สุด ใช้สำหรับ Join ข้อมูล 2 Geometry เข้าหากัน เหมาะสำหรับการ ทำ Point in to Polygon หรือ Polygon Contain Point
ยกตัวอย่างเช่นมีข้อมูล Point ที่มีทั้งอยู่ภายในและภายนอก Polygon แต่เราจะสนใจข้อมูลที่อยู่ใน Polygon เท่านั้น เราก็จะใช้ Sjoin เพื่อเลือก Point ที่เราสนใจที่อยู่ใน Polygon เท่านั้น
Plot ผลลัพธ์จะได้ เฉพาะจุดที่อยู่ใน Polygon เท่านั้นเนื่องจาก เราใช้ how = inner
รายละเอียด sjoin เพิ่มเติม Merging Data — GeoPandas 0.9.0 documentation
จาก Geometry Operation ที่ได้ยกตัวอย่างการใช้งานมาด้านบน เราสามารถนำไปใช้งาน การวิเคราะห์ Spatial Operation ได้ บ้างแล้ว สำหรับใน Part1 ก็ขอจบไว้เพียงเท่านี้ก่อนครับ
ดูรายละเอียด Code เพิ่มเติมได้จาก Colab ด้านล่าง