1.3 Core Data Categories
ข้อมูลทุกชิ้นในโลกตกอยู่ใน 4 ตระกูล ไม่ว่าจะเปิดใน Sheets, เขียนใน C, วิเคราะห์ใน Python หรือ query ใน SQL — ถ้าจำ 4 ตระกูลนี้ได้ คุณจะอ่านข้อมูลทุกรูปแบบได้
4 ตระกูลหลัก
Section titled “4 ตระกูลหลัก”1. Text (ข้อความ)
Section titled “1. Text (ข้อความ)”ทุกอย่างที่เป็นตัวอักษร — ชื่อ, ที่อยู่, รหัสนักเรียน, email
กฎสำคัญ: ถ้าค่านั้น “ไม่มีวันนำไปบวกลบ” → มันคือ text แม้จะหน้าตาเป็นตัวเลข (เช่น เลขบัตรประชาชน, รหัสไปรษณีย์)
2. Number (ตัวเลข)
Section titled “2. Number (ตัวเลข)”ค่าที่ใช้คำนวณได้ — ราคา, จำนวน, คะแนน, อุณหภูมิ
แบ่งย่อยเป็น:
- Integer — จำนวนเต็ม (1, 42, -7)
- Float / Double — ทศนิยม (3.14, 199.99) — อาจมี rounding error
- Decimal — ทศนิยมแม่นยำ (สำหรับเงิน)
3. Date/Time (วันที่ / เวลา)
Section titled “3. Date/Time (วันที่ / เวลา)”ค่าที่บอกตำแหน่งบนแกนเวลา — วันเกิด, timestamp ลงทะเบียน, เวลานัดหมาย
ภายใน: คอมพิวเตอร์เก็บเป็นตัวเลข (serial number หรือ Unix timestamp) แล้ว “แต่งตัว” ให้เป็นวันที่
4. Boolean (จริง/เท็จ)
Section titled “4. Boolean (จริง/เท็จ)”ค่าที่มีได้แค่ 2 สถานะ — TRUE/FALSE, ใช่/ไม่ใช่, 1/0
ใช้กับ: สถานะใช้งาน, อนุมัติแล้วหรือยัง, สมัครสมาชิกหรือเปล่า
สร้างตารางนี้:
| A | B (ค่า) | C (ตระกูล) | D (ตรวจสอบ) |
|---|---|---|---|
| 1 | Ploy | Text | =ISTEXT(B1) → TRUE |
| 2 | 199.50 | Number | =ISNUMBER(B2) → TRUE |
| 3 | 2026-04-24 | Date | =ISNUMBER(B3) → TRUE (!) |
| 4 | TRUE | Boolean | =ISLOGICAL(B4) → TRUE |
เซอร์ไพรส์: วันที่ใน Sheets ถูกจัดเป็น “Number” ภายใน (serial number) — =ISNUMBER() ให้ TRUE
ตรวจสอบเพิ่มเติม:
=TYPE(B1) → 2 (Text)=TYPE(B2) → 1 (Number)=TYPE(B3) → 1 (Number — วันที่ก็เป็นตัวเลข!)=TYPE(B4) → 4 (Boolean)ค่าที่ TYPE() คืน: 1 = Number, 2 = Text, 4 = Boolean, 16 = Error, 64 = Array
#include <stdio.h>#include <stdbool.h>#include <string.h>
int main() { // Text char name[] = "Ploy"; printf("Text: %s (size: %zu bytes)\n", name, sizeof(name)); // sizeof = 5 (4 chars + null terminator)
// Number — Integer int count = 42; printf("Integer: %d (size: %zu bytes)\n", count, sizeof(count));
// Number — Float/Double double price = 199.50; printf("Double: %.2f (size: %zu bytes)\n", price, sizeof(price));
// Date/Time — C ไม่มี date type! ต้องเก็บเป็น struct หรือ int int days = 20567; // วันนับจาก epoch printf("Date: %d days since epoch (no native date type)\n", days);
// Boolean bool active = true; printf("Boolean: %d (size: %zu bytes)\n", active, sizeof(active)); // true = 1, false = 0
return 0;}สังเกต:
- C ไม่มี date type ในตัว — ต้องเก็บเป็น
int(timestamp) หรือchar[](text) boolใน C จริงๆ เก็บเป็น integer (0 หรือ 1)sizeof()บอกจำนวน bytes ที่ใช้เก็บ — แต่ละ type ใช้ไม่เท่ากัน
import pandas as pd
# สร้าง DataFrame ที่ครบทั้ง 4 ตระกูลdata = { 'name': ['Ploy'], # Text 'price': [199.50], # Number (float) 'count': [42], # Number (int) 'enrolled_on': ['2026-04-24'], # ยังเป็น text! 'active': [True], # Boolean}df = pd.DataFrame(data)
print(df.dtypes)# name object ← text (pandas เรียกว่า object)# price float64 ← ทศนิยม# count int64 ← จำนวนเต็ม# enrolled_on object ← text (ยังไม่ใช่ datetime!)# active bool ← boolean
# แปลง text → datetimedf['enrolled_on'] = pd.to_datetime(df['enrolled_on'])print(df.dtypes)# enrolled_on datetime64[ns] ← ตอนนี้เป็น datetime แล้ว
# ตรวจสอบ type ของแต่ละค่าprint(type('Ploy')) # <class 'str'>print(type(199.50)) # <class 'float'>print(type(42)) # <class 'int'>print(type(True)) # <class 'bool'>print(type(pd.Timestamp.now())) # <class 'pandas._libs.tslibs.timestamps.Timestamp'>สังเกต: Python เรียก text ว่า str, pandas เรียกว่า object — ชื่อต่างกันแต่คือสิ่งเดียวกัน
CREATE TABLE demo_types ( name VARCHAR(50), -- Text price DECIMAL(10,2), -- Number (แม่นยำ) count INTEGER, -- Number (จำนวนเต็ม) enrolled_on DATE, -- Date active BOOLEAN -- Boolean);
INSERT INTO demo_typesVALUES ('Ploy', 199.50, 42, '2026-04-24', TRUE);
-- ตรวจสอบ type ของแต่ละ columnSELECT column_name, data_typeFROM information_schema.columnsWHERE table_name = 'demo_types';ผลลัพธ์:
column_name | data_type------------|------------------name | character varyingprice | numericcount | integerenrolled_on | dateactive | booleanSQL มี type ชัดเจนที่สุด — ทุก column ต้องประกาศ type ตั้งแต่สร้างตาราง ถ้าใส่ค่าผิด type จะ error ทันที:
INSERT INTO demo_types (count) VALUES ('hello');-- ERROR: invalid input syntax for type integer: "hello"สรุปเปรียบเทียบ
Section titled “สรุปเปรียบเทียบ”| ตระกูล | Google Sheets | C | Python | SQL |
|---|---|---|---|---|
| Text | Text (auto) | char[], char* | str / object | VARCHAR, CHAR, TEXT |
| Number (int) | Number | int, long | int / int64 | INTEGER, BIGINT |
| Number (decimal) | Number | float, double | float / float64 | DECIMAL, NUMERIC, FLOAT |
| Date/Time | Number + format | ไม่มี (ใช้ int / library) | datetime / Timestamp | DATE, TIMESTAMP |
| Boolean | Boolean | bool (= int) | bool | BOOLEAN |