Matrix (เมทริกซ์) คืออาร์เรย์ 2D (2-dimensional) ที่ใช้เก็บและทำงานกับข้อมูลแบบสเปรดชีต (spreadsheet-like data)
พวกมันใช้ได้สำหรับ:
- การแทนกระดานในเกมบนโต๊ะ (หมากรุก, ดัมมี่, ฯลฯ)
- สถิติและการวิเคราะห์ข้อมูล
- การสร้างกราฟและพล็อต (plots & graphs)
เพราะโครงสร้างข้อมูลนี้ทรงพลัง จึงช่วยได้มากที่จะเรียนรู้วิธีใช้
วิธีสร้าง Matrix ใน Ruby
คุณสามารถสร้าง matrix ด้วยอาร์เรย์ได้
เช่นนี้:
matrix = [ [1,2,3], [4,5,6], [7,8,9] ]
สิ่งนี้สร้างเมทริกซ์ 3×3 และเป็นตัวเลือกที่ดีที่สุด หากคุณต้องการเก็บข้อมูล 2 มิติเป็นกระดานหรือชุดตำแหน่ง
แต่ถ้าคุณต้องการรวมเมทริกซ์ผ่านการบวก ลบ และคูณ...
คุณสามารถใช้คลาส Matrix ได้
วิธีใช้:
require 'matrix' a = Matrix[[1,2,3], [4,5,6], [7,8,9]] b = Matrix[[1,2,3], [4,5,6], [7,8,9]]
ตอนนี้คุณบวกได้:
a + b # Matrix[[2, 4, 6], [8, 10, 12], [14, 16, 18]]
คุณสามารถเข้าถึงค่าแต่ละค่าได้แบบนี้:
a[0, 1]
สิ่งนี้ ต่างจากเวอร์ชันอาร์เรย์ ซึ่งจะใช้ไวยากรณ์นี้:
matrix[0][1]
ทั้งอาร์เรย์และเมทริกซ์สามารถ transpose ได้ หมายถึงแถวจะกลายเป็นคอลัมน์ และคอลัมน์กลายเป็นแถว
ตัวอย่าง:
matrix.transpose # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
จำไว้ด้วย:
ออบเจ็กต์ Matrix เป็น immutable (ไม่เปลี่ยนแปลงได้) ดังนั้นคุณไม่สามารถเปลี่ยนค่าได้โดยไม่สร้างเมทริกซ์ใหม่ คลาส Matrix นี้ส่วนใหญ่สำหรับการดำเนินการทางคณิตศาสตร์ หากคุณต้องการการวิเคราะห์ข้อมูลและสถิติ คุณจะต้องการอะไรที่ทรงพลังกว่า
อย่างเช่น...
Gem Daru
Daru เป็น gem ที่ช่วยให้คุณทำงานกับเมทริกซ์ ได้สถิติจากพวกมัน และพิมพ์เป็นตารางที่จัดรูปแบบสวยงาม Daru ยังรวมกับ gems plotting ใน Ruby ด้วย ดังนั้นคุณสามารถสร้างพล็อตและกราฟจากข้อมูลของคุณได้
ตัวอย่าง:
require 'daru'
df = Daru::DataFrame.new(
{ "A" => [1,2,3], "B" => [4,5,6], "C" => [7,8,9] },
index: ["A", "B", "C"]
)
นี่พิมพ์ตารางต่อไปนี้:
A B C A 1 4 7 B 2 5 8 C 3 6 9
คุณสามารถเข้าถึงคอลัมน์เฉพาะได้แบบนี้:
df['A']
หรือโดยดัชนีตัวเลข:
df[0]
และคุณสามารถได้สถิติแบบนี้:
df['B'].describe # statistics # count 3 # mean 5.0 # std 1.0 # min 4 # max 6
ส่วนที่ดีที่สุด?
คุณสามารถโหลดข้อมูลโดยตรงจากไฟล์ CSV, ActiveRecord และแม้แต่ไฟล์ Excel
ตัวอย่าง:
df = Daru::DataFrame.from_csv('healthy_food.csv')
และคุณสามารถกรองข้อมูลด้วยนิพจน์ where ได้
ตัวอย่าง...
ถ้าเรามีคอลัมน์ "carbs" เราสามารถหาแถวทั้งหมดในเมทริกซ์ที่มีค่าน้อยกว่า 25
เช่นนี้:
df.where(df['carbs'].lt(25))
คุณยังสามารถ sort, group_by และ aggregate data frames ของคุณได้
ตัวอย่าง:
df = Daru::DataFrame.new(
{ str: %w(a b c d a), num: [52,12,7,17,1] }
)
df.group_by(:str).aggregate(num: :sum)
# num
# a 53
# b 12
# c 7
# d 17
การพล็อต (Plotting) ด้วย Daru
Daru อนุญาตให้คุณสร้างการแสดงภาพข้อมูล และส่งออกเป็นไฟล์ HTML
ตัวอย่าง:
df = Daru::DataFrame.new(
{'Cat Names' => %w(Kitty Leo Felix), 'Weight' => [2,3,5]}
)
df.plot(type: :bar, x: 'Cat Names', y: 'Weight') do |plot, _|
plot.x_label 'Cat Name'
plot.y_label 'Weight'
plot.yrange [0, 5]
end
.export_html
สิ่งนี้สร้างแผนภูมิ:

คุณจะพบแผนภูมินี้เป็นไฟล์ HTML ในโฟลเดอร์เดียวกับโค้ดของคุณ
หากคุณต้องการใช้ Daru ในแอป Rails คุณจะต้องเพิ่ม gem daru-view เข้าไป หรือใช้ gem อื่น เช่น chartkick
สรุป
คุณได้เรียนรู้เกี่ยวกับเมทริกซ์ใน Ruby เพื่อทำงานกับข้อมูล 2 มิติ!
อย่าลืมแชร์บทความนี้เพื่อให้คนอื่นหาเจอ
ขอบคุณที่อ่านครับ