เขียน Python ฝึกใช้ Pandas วิเคราะห์ข้อมูล ด้วยการตั้งคำถาม 6 ข้อ กับข้อมูลโควิด-19 ของไทย

Karn Yongsiriwit
3 min readAug 21, 2021

บทความนี้จะแนะนำการใช้ library Pandas ของภาษา Python ในการประมวลผลวิเคราะห์ข้อมูล และแสดงข้อมูลเป็นแผนภูมิต่าง ๆ โดยใช้วิธีการตั้งคำถาม 6 ข้อกับข้อมูลโควิด-19 ของประเทศไทยนะครับ

แปลคลิปครับ

Software Installation

  • Python https://www.python.org/
  • Jupyter Notebook, Pandas และ Matplotlib
    เปิด command prompt/terminal แล้ว run คำสั่ง
pip install jupyterlab pandas matplotlib

Let’s Code

เปิดโปรแกรม Jupyter Notebook ด้วยการเรียกคำสั่ง

jupyter notebook

ไฟล์ข้อมูลที่ใช้ในตัวอย่างนี้ สามารถดาวน์โหลดได้จาก
https://melivecode.com/file/?f=csv/confirmed-cases-since-120864.csv
https://melivecode.com/file/?f=csv/thai_population_63.csv

เริ่มต้นให้โหลดข้อมูลเข้าตัวแปร DataFrame ของ Pandas ซึ่งจะเป็นการจัดเก็บข้อมูลในตัวแปรแบบเป็นตาราง มีแถวและมีคอลัมน์ โดยข้อมูลที่ใช้จะเป็นข้อมูลจำนวนผู้ติดเชื้อโควิด-19 ของประเทศไทยแบบรายวัน (เริ่มจาก 12/8/64 ถึง 21/8/64) จาก https://data.go.th/dataset/covid-19-daily

import pandas as pddf = pd.read_csv('confirmed-cases-since-120864.csv')
df
df = df[['No.', 'announce_date', 'sex', 'age', 'province_of_isolation', 'risk']]df

1. ความเสี่ยงในการเป็นผู้ติดเชื่อโควิดคืออะไรบ้าง?

df['risk'].value_counts()

2. ค่าสถิติของอายุผู้ติดเชื้อโควิด?

df.describe()

3. ช่วงอายุของคนติดเชื้อโควิด?

df['age'].hist()
df['age'].hist(bins=[0, 20, 40, 60, 80, 100, 120])

*เสริมเรื่องของการปรับ style หรือ theme การแสดงผล สามารถเลือก style ได้จาก https://matplotlib.org/stable/gallery/style_sheets/style_sheets_reference.html โดยในตัวอย่างจะเปลี่ยน style เป็น ggplot และปรับ font ให้เป็น tahoma เพื่อรองรับภาษาไทยต่อไป

import matplotlib.pyplot as pltplt.style.use('ggplot')
plt.rcParams['font.family'] = 'tahoma'

4. จังหวัดที่เราอยู่ วันนี้มีผู้ติดเชื้อเท่าไหร่ แยกตามเพศ?

mydf = df[(df['province_of_isolation'] == 'ปทุมธานี') & (df['announce_date'] == '21/8/2021')]mydf.groupby('sex').count()['No.'].plot.bar()

5. อยากทราบแนวโน้มของจำนวนผู้ป่วยในแต่ละวัน?

df.info()

สร้างคอลัมน์ใหม่ชื่อว่า date โดยทำการเปลี่ยนประเภทของคอลัมน์ announce_date ให้เป็น datetime ด้วยคำสั่ง pd.to_datetime

df.insert(0, "date", pd.to_datetime(df['announce_date'], format='%d/%m/%Y'), True)df
df.info()
df.groupby('date').count()['No.'].plot.line(figsize=(10, 5))

6. อัตราผู้ติดเชื้อโควิด?

ในส่วนนี้เราจะลองใช้วิธีการคำนวณอัตราผู้ป่วยต่อประชากร 100,000 คน (จริงๆ ควรจะเป็นการคำนวณจากจำนวณผู้ติดเชื้อทั้งปี แต่อันนี้ทำเป็นตัวอย่างให้ดูนะครับ

โหลดข้อมูลประชากรมา ขอใช้ตัวอย่างจำนวนประชากรปี 2563 จาก http://statbbi.nso.go.th/staticreport/page/sector/th/01.aspx

pop_df = pd.read_csv('thai_population_63.csv')
pop_df = pop_df[['จังหวัด', 'รวม']]
pop_df
province_df = df.groupby('province_of_isolation').count()['No.'].reset_index()province_df

แก้ไข กทม ให้เป็น กรุงเทพมหานคร เพื่อให้สามารถ merge กับ DataFrame ของจำนวนประชากรได้ โดยการสร้างคอลัมน์ใหม่ province

df.insert(2, 'province', df['province_of_isolation'].replace('กทม', 'กรุงเทพมหานคร'), True)province_df = df.groupby('province').count()['No.'].reset_index()province_df
prov_pop_df = pd.merge(province_df, pop_df, left_on='province', right_on='จังหวัด')prov_pop_df
prov_pop_df['rate'] = prov_pop_df['No.'] * 1000000 / prov_pop_df['รวม']prov_pop_df
top10_prov_df = prov_pop_df.sort_values('rate').head(10).set_index('จังหวัด')top10_prov_df
top10_prov_df[['No.', 'rate']].plot.bar(figsize=(10, 5))

จบครับ :D

บทความโดย อ.ดร.กานต์ ยงศิริวิทย์
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต

--

--

Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University