นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

อ่าน: 2287
ความเห็น: 3

ก้าวย่างทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: เรื่องเล่าจาก research club - ๒ [C]

เรื่องเล่าจาก research club ตอนที่ ๒: สร้างปิรามิดประชากร

คราวนี้มาถึงคราวที่เราจะสร้างปิรามิดประชากรจากข้อมูลของเราเองบ้างแล้วล่ะครับ

ก่อนอื่นก็ต้องไปหาจำนวนประชากรของประเทศไทยกันเสียก่อน เพื่อที่จะได้นำมาเป็นตัวอย่างข้อมูลสำหรับสร้างปิรามิดประชากร

ลองค้น ๆ ดูก็พบว่ามีจำนวนประชากรของไทยแยกเป็นรายปีเอาไว้ที่นี่ โดยข้อมูลที่มีอัพเดตถึงปี ๒๕๕๕

 

ข้อมูลที่มีจะเป็นข้อมูลจำนวนคนแยกตามช่วงอายุ รายภาค รายจังหวัด หรือข้อมูลนี้เป็นข้อมูลที่สรุปไว้แล้ว

 

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

 

ข้อมูลที่ได้มาต้องนำมาจัดการอีกเล็กน้อยเพื่อให้ได้ข้อมูลที่สามารถนำมาใช้เป็นข้อมูลตัวอย่างได้ทันที

 

เมื่อจัดการเรียบร้อยแล้วหน้าตาของข้อมูลจะเป็นแบบรูปด้านล่าง

 

 

หลังจากที่ได้ข้อมูลมาแล้วก็เริ่มกระบวนการสร้างปิรามิดประชากรด้วย R กันเลยครับ

 

บันทึกข้อมูลที่ได้ดังข้างต้นเก็บไว้ในแฟ้มข้อมูลรูปแบบ CSV ไว้ในโฟลเดอร์ที่ต้องการ ในที่นี้ผมจะเก็บไว้ในโฟลเดอร์ c:\Rworkplace\share\thaipop และเก็บไว้ในแฟ้มข้อมูลที่ชื่อ pop2555th-02.csv

 

เปิดโปรแกรม R พร้อมนำเข้าแฟ้มข้อมูลตัวอย่างจากไฟล์ข้างต้น

 

นำเข้าแฟ้มข้อมูลรูปแบบ CSV ด้วยฟังก์ชัน read.csv และเก็บไว้ในกรอบข้อมูลชื่อ thaipop55

 

บรรทัดคำสั่ง

> thaipop55 <- read.csv("c:\\Rworkplace\\share\\thaipop\\pop2555th-02.csv")

 

ข้อมูลตัวอย่าง ๖ ระเบียนแรก

> head(thaipop55)
  agegroup    male  female totalpop
1        0  392007  368247   760254
2      1-4 1610036 1513820  3123856
3      5-9 2081269 1960638  4041907
4    10-14 2218978 2096028  4315006
5    15-19 2536336 2404152  4940488
6    20-24 2402281 2324550  4726831

 

การสร้างปิรามิดประชากรในที่นี้ผมจะใช้ฟังก์ชัน pyramid() ของ package epicalc ที่อาจารย์วีระศักดิ์ จงสู่วิวัฒน์วงศ์ พัฒนาขึ้น เนื่องจากเป็นฟังก์ชันที่มีรูปแบบของการใช้งานง่าย และสามารถสร้างปิรามิดประชากรได้ทั้งข้อมูลที่อยู่ในรูปข้อมูลดิบ (raw data) หรือข้อมูลอายุของตัวอย่างแต่ละคน (ยังไม่สรุปตามกลุ่มอายุ) และข้อมูลที่สรุปตามกลุ่มอายุแล้ว

 

ก่อนอื่นต้องเรียกฟังก์ชันต่าง ๆ ที่มีใน package epicalc เข้าสู่หน่วยความจำ ด้วยฟังก์ชัน library()

 

บรรทัดคำสั่ง

> library(epicalc)
Loading required package: foreign
Loading required package: MASS
Loading required package: nnet

Attaching package: ‘epicalc’

The following object(s) are masked from ‘package:Hmisc’:

    fillin, recode

package epicalc มี dependencies package คือ foreign, MASS และ nnet จึงต้องโหลด package ดังกล่าวเข้าสู่หน่วยความจำด้วย และ epicalc มีฟังก์ชัน fillin() และ recode() ที่เป็นชื่อเดียวกับฟังก์ชันของ package Hmisc ดังนั้นเมื่อเรียกชุดคำสั่งของ package epicalc เข้าสู่หน่วยความจำแล้วฟังก์ชัน fillin() และ recode() ของpackage Hmisc จะถูกแทนที่ด้วยฟังก์ชัน fillin() และ recode(0 จาก package epicalc

 

ทั้งนี้เพื่อไม่ให้เกิดความสับสนว่าเมื่อเรียกใช้ฟังก์ชัน fillin() และหรือฟังก์ชัน recode() แล้วฟังก์ชันที่ถูกเรียกมาใช้งานนั้นเป็นฟังก์ชันของ package ใด

 

รูปแบบฟังก์ชัน pyramid(0

pyramid (age, sex, binwidth = 5, inputTable = NULL, printTable = FALSE,
    percent = c("none", "each", "total"), col.gender = NULL,
    bar.label = "auto", decimal = 1, col = NULL, cex.bar.value = 0.8,
    cex.axis = 1, main = "auto", cex.main = 1.2, ...)

 

กรณีที่ข้อมูลที่นำมาสร้างปิรามิดประชากรเป็นข้อมูลดิบ

  • age = ข้อมูลอายุของกลุ่มตัวอย่าง/ ประชากรที่เราต้องการนำมาสร้างปิรามิดประชากร
  • sex = ข้อมูลเพศของกลุ่มตัวอย่าง/ ประชากรที่เราต้องการนำมาสร้างปิรามิดประชากร
  • binwidth = ตัวเลขระบุการแบ่งช่วงอายุ 

 

กรณีข้อมูลที่นำมาสร้างปิรามิดประชากรเป็นข้อมูลสรุปตามช่วงอายุและเพศมาแล้ว

  • inputTable = ตารางข้อมูลสรุปจำนวนประชากรตามช่วงอายุและเพศ

 

ตัวเลือกอื่น ๆ ที่น่าสนใต

  • printTable = ระบุว่าจะให้แสดงตารางสรุปข้อมูลด้วยหรือไม่
  • percent = ให้แสดงข้อมูลเปอร์เซนต์ของแต่ละช่วงอายุหรือไม่ (none =  ไม่แสดงข้อมูลเปอร์เซนต์) ถ้าให้แสดงข้อมูลเปอร์เซนต์จะให้คิดเปอร์เซนต์แย่างไร ระหว่าง แยกรายเพศ (each) หรือไม่แยกเพศชาย หญิง (total)
  • col.gender = ระบุสีที่ต้องการของข้อมูลแต่ละเพศในปิรามิดประชากร
  • bar.label = ให้แสดงข้อมูล (จำนวน, เปอร์เซนต์) ของแต่ละช่วงอายุด้วยหรือไม่

 

ในที่นี้ข้อมูลประชากรของประเทศไทยปี ๒๕๕๕ ที่ได้มานั้นเป็นข้อมูลที่สรุปแยกตามเพศและช่วงอายุมาแล้ว ดังนั้นเราต้องระบุตัวเลือกเป็น inputTable ให้กับฟังก์ชัน pyramid()

 

ข้อมูลตัวอย่างในที่นี้นั้น (กรอบข้อมูล thaipop55) ประกอบด้วยตัวแปร ๔ ตัวแปร คือ agegroup, male, female และ totalpop

 

> str(thaipop55)
'data.frame':   22 obs. of  4 variables:
 $ agegroup: Factor w/ 22 levels "0","1-4","10-14",..: 1 2 12 3 5 6 7 8 9 10 ...
 $ male    : int  392007 1610036 2081269 2218978 2536336 2402281 2463437 2658115 2668792 2672126 ...
 $ female  : int  368247 1513820 1960638 2096028 2404152 2324550 2414334 2636385 2718305 2814383 ...
 $ totalpop: int  760254 3123856 4041907 4315006 4940488 4726831 4877771 5294500 5387097 5486509 ...

 

  • ตัวแปร agegroup เป็นข้อมูลช่วงอายุที่จัดแบ่ง
  • ตัวแปร male คือจำนวนเพศชายตามช่วงอายุที่แบ่ง
  • ตัวแปร female คือจำนวนเพศหญิงตามช่วงอายุ
  • ตัวแปร totalpop คือจำนวนรวมเพศชาย หญิงตามช่วงอายุ

 

ดังนั้นข้อมูลที่เราต้องระบุก็คือข้อมูลของตัวแปร male และข้อมูลตัวแปร female

 

แต่ข้อมูลของตัวแปร male และ female แยกกันเป็นคนละตัวแปรในกรอบข้อมูล thaipop55 และไม่ได้อยู่ในรูปของตาราง (table) หรือเมตริกซ์ (matrix) ดังนั้นเราต้องทำให้ข้อมูลจากตัวแปร male และ female  อยู่ใรูปของตารางหรือเมตริกซ์ โดยใช้ฟังก์ชัน cbind()

 

> cbind(thaipop55$male,thaipop55$female)
         [,1]    [,2]
 [1,]  392007  368247
 [2,] 1610036 1513820
 [3,] 2081269 1960638
 [4,] 2218978 2096028
 [5,] 2536336 2404152
 [6,] 2402281 2324550
 [7,] 2463437 2414334
 [8,] 2658115 2636385
 [9,] 2668792 2718305
[10,] 2672126 2814383
[11,] 2490147 2678467
[12,] 2118199 2310695
[13,] 1695422 1905072
[14,] 1248763 1433777
[15,]  835639  987499
[16,]  654139  819609
[17,]  451618  617676
[18,]  254218  380932
[19,]  106410  173658
[20,]   36892   63072
[21,]   12672   20109
[22,]    7442   10019

 

ตรวจสอบ class ของผลลัพธ์จากฟังก์ชัน cbind()

> class(cbind(thaipop55$male,thaipop55$female))
[1] "matrix"

 

เราระบุข้อมูล inputTable สำหรับฟังก์ชัน pyramid() เป็น

 

> pyramid(inputTable=cbind(thaipop55$male, thaipop55$female))

 

ผลที่ได้เป็นดังรูปครับ

 

 

จะเห็นว่าปิรามิดประชากรที่ได้ยังไม่มีข้อมูลที่ระบุช่วงอายุและข้อมูลประชากรของแต่ละเพศ (ไม่รู้ว่าข้อมูลด้านซ้ายหรือขวาเป็นข้อมูลของเพศใด)

 

เราทำการจัดเก็บข้อมูลที่เกิดจากการรวมข้อมูลเพศชายหญิงด้วยฟังก์ชัน cbind() ไว้ในเมตริกซ์ poptable1

> poptable1 <- cbind(thaipop55$male,thaipop55$female)

กำหนดชื่อแถวให้กับเมตริกซ์ poptable1 โดยใช้ค่าจากตัวแปร agegroup ของกรอบข้อมูล thaipop55 มาเป็นชื่อแต่ละแถวของเมตริกซ์ poptable1

> rownames(poptable1) <- thaipop55$agegroup

กำหนดชื่อสดมภ์ให้กับเมตริกซ์ poptable1 โดยให้ชื่อของสดมแรกและสดมภ์ที่ ๒ มีชื่อเป็น Male และ Female ตามลำดับ

> colnames(poptable1) <- c("Male", "Female")

 

สร้างปิรามิดประชากรอีกครั้งโดยใช้ข้อมูลที่เก็บไว้ในเมตริกซ์ poptable1

> pyramid(inputTable=poptable1)

 

ผลที่ได้ดังรูปครับ

 

จะเห็นว่ามีข้อมูลช่วงอายุแล้ว มีข้อมูลที่ระบุว่าด้านไหนเป็นข้อมูลเพศไหนแล้ว

 

คราวนี้มาตกแต่งสีสันกันสักนิดนะครับ

  • กำหนด col.gender เป็นสี "red" และ "purple"
  • กำหนด percent เป็น "each" หรือให้คิดเปอร์เซนต์แต่ละช่วงอายุแยกกันระหว่างชาย หญิง

 

> pyramid(inputTable=poptable1, col.gender=c("red","purple"), percent="each")

 

ผลที่ได้เป็นดังรูปครับ

 

 

ถ้าต้องการตั้งชื่อ/ เปลี่ยนชื่อของปิรามิดก็ให้กำหนดตัวเลือก main="ชื่อปิรามิดที่ต้องการ" เพิ่มเติม

 

อิอิอิ

 

ไม่ง่ายและไม่ยากใช่ไหมครับ

 

อิอิอิ

 

เราเอง

 

เพลง: Someone Like You
ศิลปิน: Adele

Music video by Adele performing Someone Like You. (C) 2011 XL Recordings Ltd.

AdeleVEVO

 

Nevermind, I’ll find someone like you.
I wish nothing but the best for you too.
Don’t forget me, I beg, I'll remember you said:
“Sometimes it lasts in love but sometimes it hurts instead”
Sometimes it lasts in love but sometimes it hurts instead. Yeah.

 

 

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 02 กรกฎาคม 2557 12:25 แก้ไข: 28 เมษายน 2563 17:29 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 คนธรรมดา, Ico24 ทดแทน, และ Ico24 โอ๋-อโณ.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ผมอยู่ในกลุ่มกลาง ๆ 5.4% แต่น้าเน็กอยู่กลุ่มไหนเนี่ย 8.5 หรือ 7.9 ฮา

๘.๕ ครับ มากที่สุดในกลุ่มผู้ชาย ปี ๒๕๕๕ อัตราส่วนประชากรชาย - หญิงของไทยยังไม่ต่างกันนัก หรือจะเรียกว่าเท่ากันก็ได้ คือ ๑ : ๑

 

ส่วนช่วง ๙๕ - ๙๙ ปีกับ ๑๐๐+ นั้นที่เห็นเป็นศูนย์ (๐) เพราะโดนปัดทศนิยมครับ มีประชากรในช่วงอายุดังกล่าวแต่เมื่อคิดเป็นร้อยละแล้วจะน้อยกว่า ๐.๑ เลยโดนปัดให้กลายเป็น ๐ ไปซะ แต่ถ้าจะให้แสดงค่าจริงด้วยก็ต้องระบุจำนวนตำแหน่งทศนิยมให้มากขึ้นครับ (ถ้าไม่ระบุจะใช้ทศนิยมเพียง ๑ ตำแหน่ง)

ที่น่าสังเกตนิดนึง จะเห็นว่าช่วงอายุ ๑๕ - ๑๙ ปี มีจำนวนเพิ่มขึ้น (แต่ไม่มากนัก) จากเดิมที่มีแนวโน้มลดลงเรื่อย ๆ ก็น่าคิดว่าเมื่อ ๑๗ ปีที่แล้ว (ช่วง ๕ ปี) หรือปี พ.ศ. ๒๕๔๐ เกิดอะไรขึ้นบ้าง ที่ทำให้อัตราการเกิดกลับเพิ่มสูงขึ้นอีก หลังจากที่ลดลงทุกปี แต่หลังจากนั้นก็ลดลง

 

แต่ปี ๒๕๕๕ ปีเดียวมีอัตราการเกิดประมาณ ๑.๒ ถ้าเป็นอย่างนี้ปีอีก ๕ ปี ในปี ๒๕๕๐ ประชากรวัย ๑ - ๔ ปีก็จะมีประมาณ ๔.๒ (รวมชาย หญิง) ก็ยังพอ ๆ กับ ช่วง ๑ - ๔ ปีในปิรามิดประชากรปี ๒๕๕๕

 

อิอิอิ

เราเอง

อ่านโปรแกรมไม่เป็น แต่อยากวิจารณ์..

จากรูปปิรามิด

ช่วงอายุ 20-24 มีประชากรหายไป3-4%

และจะเริ่ม(..)าย มากขึ้นเมื่ออายุ 45 ขึ้นไป

คุณต้องทำการเข้าระบบก่อนแสดงความเห็น