Home / Data Visualization (Plotly.express)

Data Visualization (Plotly.express)

You are not logged in.

If you are a current student, please Log In for full access to this page.

Table of Contents

  • โดยปกติแล้วเราอาจจะไม่คุ้นชินกับการอ่านข้อมูลขนาดใหญ่ๆ ด้วยตัวเอง
  • การใช้ภาพหรือกราฟในการสรุปข้อมูลสามารถทำให้เราเห็นภาพรวมของข้อมูลได้ง่ายขึ้น
  • การทำ data visualization จึงมีความสำคัญในการนำข้อมูลมาทำให้อยู่ในรูปแบบที่อธิบายต่อได้ง่ายขึ้น
  • ทั้งนี้โปรแกรมในการทำ data visualization มีอยู่มากมายไม่ว่าจะเป็น Microsoft Excel, Google Sheets, หรืออื่นๆ
  • แต่ในแลปนี้จะมาแนะนำวิธีการใช้ library plotly.express ในการทำ data visualization

1) พื้นฐานการสร้าง Data Visualization

top

เราจะเริ่มด้วยการใช้ข้อมูล gapminder ที่มีอยู่ใน library plotly.express

หาก labpy ขึ้น error ว่าไม่เจอ plotly ให้รันคำสั่ง !pip install plotly หากลงแล้วกราฟยังไม่ขึ้นให้ refresh (f5) browser

import plotly.express as px
df = px.data.gapminder()
df.head()
country continent year lifeExp pop gdpPercap iso_alpha iso_num
0 Afghanistan Asia 1952 28.801 8425333 779.445314 AFG 4
1 Afghanistan Asia 1957 30.332 9240934 820.853030 AFG 4
2 Afghanistan Asia 1962 31.997 10267083 853.100710 AFG 4
3 Afghanistan Asia 1967 34.020 11537966 836.197138 AFG 4
4 Afghanistan Asia 1972 36.088 13079460 739.981106 AFG 4

ประเทศ Afghanistan มีประชากรเท่าไรในปี 1967

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1704 entries, 0 to 1703
Data columns (total 8 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   country    1704 non-null   object 
 1   continent  1704 non-null   object 
 2   year       1704 non-null   int64  
 3   lifeExp    1704 non-null   float64
 4   pop        1704 non-null   int64  
 5   gdpPercap  1704 non-null   float64
 6   iso_alpha  1704 non-null   object 
 7   iso_num    1704 non-null   int64  
dtypes: float64(2), int64(3), object(3)
memory usage: 106.6+ KB

ข้อมูลจะมีคอลัมภ์ดังนี้

  • lifeExp: อายุขัย
  • pop: จำนวนประชากร
  • gdpPercap: gdp ต่อหัว สำหรับแต่ละประเทศ (country) และปีที่เก็บข้อมูล (year)

country เป็นข้อมูลประเภทใด

gdpPercap เป็นข้อมูลประเภทใด

1.1) การใช้งาน plotly.express

px.strip(df, x="gdpPercap")

ค่า gdpPercap ที่มากที่สุดมีค่าเป็นเท่าไร (ตอบเป็นจำนวนเต็ม)

ค่า gdpPercap ที่น้อยที่สุดมีค่าเป็นเท่าไร (ตอบเป็นจำนวนเต็ม)

คำสั่งของ plotly.express มีการทำงานดังนี้

  • px เป็นการเรียก library plotly.express (จากที่เรา import plotly.express as px)
  • .strip(df, x="gdpPercap)

และเราสามารถเปลี่ยนจากแกน x เป็น y ได้เช่น

px.strip(df, y="gdpPercap")

Checkoff 1:

อ. จะให้นักเรียนสร้าง data visualization แบบ strip โดยอ.เป็นคนกำหนดค่าบนแกน X และ Y

2) Customization

top

โค้ดดังต่อไปนี้จะเป็นการดัดแปลงกราฟเพิ่มเติม ให้นักเรียนลองศึกษาความแตกต่างของโค้ดและตัวอย่างกราฟที่เปลี่ยนแปลงไป

โดยจะสร้าง df2002 เพิ่มเติมเพื่อใช้สร้าง data visualization ที่มีข้อมูลเฉพาะปี 2002

df2002 = df[df["year"]==2002]
df2002.head()
country continent year lifeExp pop gdpPercap iso_alpha iso_num
10 Afghanistan Asia 2002 42.129 25268405 726.734055 AFG 4
22 Albania Europe 2002 75.651 3508512 4604.211737 ALB 8
34 Algeria Africa 2002 70.994 31287142 5288.040382 DZA 12
46 Angola Africa 2002 41.003 10866106 2773.287312 AGO 24
58 Argentina Americas 2002 74.340 38331121 8797.640716 ARG 32

2.1) ปรับประเภทของ visualization

px.strip(df2002, x="gdpPercap")
px.scatter(df2002, x="gdpPercap")

scatter แตกต่างกับ strip โดย scatter ไม่สามารถพลอตเพียงแกนเดียวได้

px.bar(df2002, x="gdpPercap")

2.2) เพิ่ม channel ของ visualization

px.scatter(df2002, x="gdpPercap", color="pop")

ในปี 2002 นั้นค่าประชากรที่มากที่สุดมีค่าเป็นเท่าไร

px.scatter(df2002, x="gdpPercap", y="lifeExp", color="pop")
px.line(df, x="year", y="lifeExp", color="country")

ในปี 1982 ประเทศ Tunisia มีค่า lifeExp เป็นเท่าไร (ตอบเป็นจำนวนเต็ม)

2.3) เลือกข้อมูลเพิ่มเติมก่อนสร้าง visualization

px.line(df[df["country"] == "China"], x="year", y="lifeExp", color="country")
px.line(df[df["country"].isin(["China", "India", "United States"])], x="year", y="lifeExp", color="country")

isin คือ "is in" (อยู่ใน) ซึ่งเป็นการเทียบว่าค่าในคอลัมน์นั้นอยู่ในค่าที่กำหนดใน list หรือไม่ โดยจะคืนค่าออกมาเป็น true/false สำหรับแต่ละแถว

px.histogram(df, x="lifeExp")

ในข้อมูลมีแถวที่มีค่า lifeExp อยู่ในช่วง 58-59.999 อยู่จำนวนเท่าไร

top

Checkoff 2:

ให้นักเรียนพลอตรูปดังต่อไปนี้ด้วยตนเอง แล้วอ.จะสุ่มถามวิธีการทำ

HINT: บางรูปจะใช้ข้อมูลจาก df2002

3) แหล่งเรียนรู้เพิ่มเติม

top