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

บทความนี้จะแนะนำการใช้ 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

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

--

--

Lecturer at Digital Innovation Technology, Rangsit University

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Karn Yongsiriwit

Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University