คลิกเพื่อดูโค้ดไพธอน
# ตัวอย่างการกำหนดตัวแปรทางเศรษฐศาสตร์
country = "Thailand" # String
gdp_growth = 3.5 # Float
population = 70000000 # Integer
is_developed = False # Boolean (ค่าทางตรรกศาสตร์ จริงหรือเท็จ)Python for Economics, Computational Economics, Applied Econometrics, Python สำหรับเศรษฐศาสตร์, เศรษฐศาสตร์คำนวณ, เศรษฐมิติเชิงประยุกต์
ในบทก่อนหน้า เราได้เห็นว่า นักเศรษฐศาสตร์ยุคใหม่ทำงานผ่านกระบวนการที่เชื่อมโยงกัน ตั้งแต่การจัดการข้อมูล การวิเคราะห์ ไปจนถึงการสร้างรายงานแบบ reproducible
ในกระบวนการนี้ Python มีบทบาทสำคัญในขั้นตอน:
การจัดการข้อมูล (Data Preparation)
การวิเคราะห์ (Analysis)
การสร้างแบบจำลอง (Modeling)
บทนี้จึงไม่ได้มุ่งเน้นการสอน Python ในฐานะ “ภาษาโปรแกรม” เพียงอย่างเดียว แต่เน้นให้เห็นว่า Python สามารถใช้เป็นเครื่องมือในการคิดและวิเคราะห์ทางเศรษฐศาสตร์ได้อย่างไร
ดังนั้น ในบทนี้เราจะมาทำความรู้จักกับ “ไวยากรณ์” (Syntax) และ “โครงสร้างข้อมูล” ของ Python เปรียบเสมือนการเรียนรู้คำศัพท์และไวยากรณ์ก่อนที่เราจะแต่งประโยคทางเศรษฐศาสตร์ที่ซับซ้อนขึ้น
ในทางเศรษฐศาสตร์ เราต้องจัดการกับตัวเลขและข้อความหลายประเภท Python แบ่งประเภทหลักๆ ที่เราต้องใช้ดังนี้:
Integer (int): จำนวนเต็ม เช่น จำนวนแรงงาน (\(L\)), ปริมาณสินค้า (\(Q\))
Float (float): ทศนิยม เช่น อัตราดอกเบี้ย (\(r\)), ราคาสินค้า (\(P\)), ค่า Elasticity
String (str): ข้อความ เช่น ชื่อประเทศ, ชื่อตัวแปร, หรือรหัสหลักทรัพย์
# ตัวอย่างการกำหนดตัวแปรทางเศรษฐศาสตร์
country = "Thailand" # String
gdp_growth = 3.5 # Float
population = 70000000 # Integer
is_developed = False # Boolean (ค่าทางตรรกศาสตร์ จริงหรือเท็จ)# รายการอัตราเงินเฟ้อย้อนหลัง 5 เดือน
inflation_rates = [2.1, 2.5, 3.0, 2.8, 2.2]
# การเข้าถึงข้อมูล (Indexing เริ่มจาก 0)
print(f"เดือนแรก: {inflation_rates[0]}") เดือนแรก: 2.1
# ดึงค่าเงินเฟ้อเดือนแรก (Index 0)
first_month = inflation_rates[0] # 2.1
# ดึงค่าเงินเฟ้อเดือนล่าสุด (Index -1)
latest_month = inflation_rates[-1] # 2.2
# ดึงข้อมูล 3 เดือนตรงกลาง (Slicing)
middle_period = inflation_rates[1:4] # [2.5, 3.0, 2.8]3.0 เป็น 3.1:# แก้ไขค่าตำแหน่งที่ 3
inflation_rates[2] = 3.1
print(inflation_rates)
# ผลลัพธ์: [2.1, 2.5, 3.1, 2.8, 2.2][2.1, 2.5, 3.1, 2.8, 2.2]
2.4) ให้เพิ่มต่อท้ายเข้าไป:inflation_rates.append(2.4)
print(inflation_rates)
# ผลลัพธ์: [2.1, 2.5, 3.1, 2.8, 2.2, 2.4][2.1, 2.5, 3.1, 2.8, 2.2, 2.4]
len(inflation_rates) # ดูว่ามีข้อมูลกี่เดือน6
max(inflation_rates) # หาอัตราเงินเฟ้อที่สูงที่สุด3.1
sum(inflation_rates) / len(inflation_rates) # หาค่าเฉลี่ยเงินเฟ้อ2.5166666666666666
Key: Value ซึ่งเหมาะมากสำหรับการเก็บ “ข้อมูลพื้นฐานของแต่ละประเทศ” หรือ “พารามิเตอร์ของโมเดล”# เก็บพารามิเตอร์ของฟังก์ชันการผลิต (Cobb-Douglas)
params = {
"alpha": 0.3,
"beta": 0.7,
"tech_level": 1.5
}
print(f"ค่าความยืดหยุ่นของทุน (Alpha): {params['alpha']}")ค่าความยืดหยุ่นของทุน (Alpha): 0.3
[] เพื่อดึง Value ออกมา:# ดึงค่าเทคโนโลยี (tech_level) มาคำนวณ
current_tech = params["tech_level"]
print(f"ระดับเทคโนโลยีปัจจุบัน: {current_tech}")ระดับเทคโนโลยีปัจจุบัน: 1.5
# ปรับระดับเทคโนโลยีเพิ่มเป็น 2.0
params["tech_level"] = 2.0
print(params)
# ผลลัพธ์: {'alpha': 0.3, 'beta': 0.7, 'tech_level': 2.0}{'alpha': 0.3, 'beta': 0.7, 'tech_level': 2.0}
labor_growth เข้าไปในโมเดล:# เพิ่ม Key ใหม่เข้าไปได้เลย
params["labor_growth"] = 0.05
print(params){'alpha': 0.3, 'beta': 0.7, 'tech_level': 2.0, 'labor_growth': 0.05}
print("--- รายชื่อพารามิเตอร์ในโมเดล ---")
for key, value in params.items():
print(f"ตัวแปร {key}: {value}")--- รายชื่อพารามิเตอร์ในโมเดล ---
ตัวแปร alpha: 0.3
ตัวแปร beta: 0.7
ตัวแปร tech_level: 2.0
ตัวแปร labor_growth: 0.05
เมื่อเรามีข้อมูลหลายค่า เช่น GDP ของหลายประเทศ เราไม่จำเป็นต้องเขียนโค้ดซ้ำหลายครั้ง แต่สามารถใช้ loop เพื่อทำงานซ้ำได้ เช่น
gdp_list = [1000, 2000, 1500]
for gdp in gdp_list:
print(gdp * 1.05)1050.0
2100.0
1575.0
ตัวอย่าง: การรวมรายได้ทั้งหมด
incomes = [20000, 30000, 25000]
total_income = 0
for i in incomes:
total_income += i
print(total_income)75000
ในตัวอย่างก่อนหน้า เราได้เห็นการใช้ for loop เบื้องต้นแล้ว ในส่วนนี้เราจะศึกษาการใช้งาน for loop อย่างเป็นระบบมากขึ้น
for loop ใช้สำหรับการทำงานซ้ำกับข้อมูลที่มีหลายค่า (เช่น list) โดยไม่ต้องเขียนโค้ดซ้ำหลายครั้ง
โครงสร้างพื้นฐานของ for loop คือ:
for variable in sequence:
# codeโดยที่:
sequence คือชุดข้อมูล เช่น list
variable คือค่าที่ถูกนำออกมาทีละตัวจาก sequence
ตัวอย่าง:
gdp_list = [1000, 2000, 1500]
for gdp in gdp_list:
print(gdp)1000
2000
1500
ในแต่ละรอบของ loop ตัวแปร gdp จะรับค่าทีละตัวจาก gdp_list
ในบางกรณี เราไม่ได้ต้องการวนซ้ำตามค่าที่อยู่ใน list แต่ต้องการวนซ้ำตาม “จำนวนรอบ” เช่น ตามช่วงเวลา (time periods) ใน Python เราสามารถใช้ range() เพื่อสร้างลำดับของตัวเลขได้
โครงสร้าง:
for i in range(n):
# codeโดย range(n) จะสร้างตัวเลขตั้งแต่ 0 ถึง n-1
ตัวอย่าง:
for i in range(5):
print(i)0
1
2
3
4
นอกจาก for loop ซึ่งใช้เมื่อเราทราบจำนวนรอบล่วงหน้าแล้ว ในบางกรณีทางเศรษฐศาสตร์ เราไม่ทราบว่ากระบวนการจะสิ้นสุดเมื่อใด แต่ทราบเพียงว่า “จะหยุดเมื่อเงื่อนไขบางอย่างเป็นจริง” ในกรณีนี้ เราใช้ while loop
โครงสร้างพื้นฐาน:
while condition:
# codeโดยโปรแกรมจะทำงานซ้ำ “ตราบใดที่เงื่อนไขยังเป็นจริง”
1 กระบวนการสะสมทุน (capital accumulation)
capital = 100
while capital < 200:
capital = capital * 1.05
print(capital)105.0
110.25
115.7625
121.55062500000001
127.62815625000002
134.00956406250003
140.71004226562505
147.74554437890632
155.13282159785163
162.8894626777442
171.03393581163144
179.58563260221302
188.56491423232367
197.99315994393987
207.89281794113688
ตัวอย่างนี้แสดงการเพิ่มขึ้นของทุน 5% ในแต่ละรอบ จนกระทั่งทุนมีค่ามากกว่าหรือเท่ากับ 200
การตีความเชิงเศรษฐศาสตร์
while loop เหมาะสำหรับแบบจำลองที่มีลักษณะเป็น “พลวัต” (dynamic process) เช่น:
การเติบโตของทุน (capital accumulation)
กระบวนการปรับตัวเข้าสู่ดุลยภาพ (convergence)
การจำลองระบบที่ดำเนินไปจนถึงเงื่อนไขหนึ่ง
ตัวอย่างเชิงแนวคิด:
เศรษฐกิจจะปรับตัวไปเรื่อย ๆ จนกว่าจะถึงระดับที่กำหนด
การเข้าสู่ระดับเป้าหมาย
income = 100
while income < 500:
income = income + 50
print(income)500
ในการวิเคราะห์ทางเศรษฐศาสตร์ เรามักต้องตัดสินใจตามเงื่อนไข เช่น การกำหนดอัตราภาษีตามรายได้ หรือการตรวจสอบภาวะเศรษฐกิจ ใน Python เราใช้ if-else สำหรับการตัดสินใจ:
income = 50000
if income > 30000:
tax_rate = 0.2
else:
tax_rate = 0.1ตัวอย่างในบริบทเศรษฐศาสตร์:
gdp_growth = -1.2
if gdp_growth < 0:
print("Recession")
else:
print("Expansion")Recession
แนวคิดสำคัญคือ:
โปรแกรมสามารถ “เลือกทำ” สิ่งต่าง ๆ ตามเงื่อนไข
ซึ่งเหมือนกับกฏการตัดสินใจในแบบจำลองเศรษฐศาสตร์
ในบางกรณี เราอาจมีมากกว่าสองเงื่อนไข เช่น การกำหนดอัตราภาษีแบบขั้นบันได (progressive tax)
income = 50000
if income < 20000:
tax_rate = 0.1
elif income < 50000:
tax_rate = 0.15
else:
tax_rate = 0.2elif ช่วยให้เราสามารถตรวจสอบเงื่อนไขหลายกรณีได้อย่างเป็นลำดับ
เราสามารถรวมหลายเงื่อนไขเข้าด้วยกันได้ โดยใช้:
and (และ)
or (หรือ)
not (ไม่ใช่)
เราสามารถเขียน if ซ้อนกันได้ เพื่อจัดการกับเงื่อนไขที่ซับซ้อนมากขึ้น
income = 50000
if income > 30000:
if income > 70000:
tax_rate = 0.25
else:
tax_rate = 0.2
else:
tax_rate = 0.1ในทางปฏิบัติ เรามักใช้ if ร่วมกับ loop เพื่อ “คัดกรอง” หรือ “จัดประเภท” ข้อมูล
การประยุกต์: การรวมค่าตามเงื่อนไข
เราสามารถใช้ if ใน loop เพื่อรวมเฉพาะค่าที่ตรงเงื่อนไข เช่น การรวมรายได้ของกลุ่มรายได้สูง:
incomes = [20000, 40000, 15000, 60000]
total_high_income = 0
for income in incomes:
if income > 30000:
total_high_income += income
print(total_high_income)100000
ในทางเศรษฐศาสตร์ แบบจำลอง (model) มักถูกเขียนในรูปของสมการ เช่น ฟังก์ชันอรรถประโยชน์ หรือฟังก์ชันการผลิต ใน Python เราสามารถแปลงแบบจำลองเหล่านี้ให้เป็นฟังก์ชันได้โดยตรง
ดังนั้น ฟังก์ชันใน Python ไม่ได้เป็นเพียงเครื่องมือทางโปรแกรม แต่สามารถใช้แทน “แบบจำลองทางเศรษฐศาสตร์” ได้
def calculate_utility(x, y, alpha=0.5):
"""
คำนวณค่าอรรถประโยชน์แบบ Cobb-Douglas
U(x, y) = x^alpha * y^(1-alpha)
"""
utility = (x**alpha) * (y**(1-alpha))
return utility
# การเรียกใช้งาน (ลองเปลี่ยนพารามิเตอร์ alpha เพื่อดูพฤติกรรมผู้บริโภค)
u_val = calculate_utility(x=10, y=20, alpha=0.4)
print(f"ค่าอรรถประโยชน์ที่คำนวณได้: {u_val:.2f}")ค่าอรรถประโยชน์ที่คำนวณได้: 15.16
# รายการราคาสินค้าในตะกร้า
prices = [100, 250, 400, 150]
def apply_tax(price_list, tax_rate=0.07):
"""ฟังก์ชันคำนวณราคาสุทธิรวมภาษีสำหรับรายการสินค้าทั้งหมด"""
final_prices = [p * (1 + tax_rate) for p in price_list]
return final_prices
total_prices = apply_tax(prices)
print(f"ราคาสุทธิหลังรวมภาษี: {total_prices}")ราคาสุทธิหลังรวมภาษี: [107.0, 267.5, 428.0, 160.5]
# พารามิเตอร์ของระบบเศรษฐกิจ
economy_settings = {
"consumption_rate": 0.8,
"investment": 500,
"government_spending": 300,
"net_export": -50
}
def simple_gdp_model(data):
"""GDP = C + I + G + NX (โดยที่ C คืออัตราการบริโภค * รายได้สมมติ)"""
# สมมติรายได้พื้นฐาน (Y) ที่ 2000
c = data["consumption_rate"] * 2000
gdp = c + data["investment"] + data["government_spending"] + data["net_export"]
return gdp
print(f"ค่า GDP จากแบบจำลอง: {simple_gdp_model(economy_settings)}")ค่า GDP จากแบบจำลอง: 2350.0
ตัวอย่าง การรับค่าพารามิเตอร์ทางเศรษฐศาสตร์ ลองสร้างฟังก์ชันสำหรับคำนวณ มูลค่าอนาคต (Future Value: FV) ซึ่งนักศึกษาต้องใช้บ่อยในวิชาคณิตศาสตร์การเงิน:
def calculate_fv(pv, r, n):
"""
คำนวณมูลค่าอนาคต (Future Value)
pv: มูลค่าปัจจุบัน (Present Value)
r: อัตราดอกเบี้ยต่อปี (เช่น 0.05)
n: จำนวนปี (Years)
"""
fv = pv * (1 + r)**n
return fv
# การใช้งาน: ฝากเงิน 10,000 บาท ดอกเบี้ย 3% เป็นเวลา 5 ปี
result = calculate_fv(pv=10000, r=0.03, n=5)
print(f"เงินรวมเมื่อสิ้นสุดปีที่ 5 คือ: {result:,.2f} บาท")เงินรวมเมื่อสิ้นสุดปีที่ 5 คือ: 11,592.74 บาท
ตัวอย่าง ฟังก์ชันอุปสงค์ (Demand Function) ในการวิเคราะห์เศรษฐศาสตร์จุลภาค เราสามารถเขียนฟังก์ชันเพื่อคำนวณปริมาณเสนอซื้อ (\(Q_d\)) เมื่อกำหนดราคา (\(P\)) และรายได้ (\(I\)) ได้ดังนี้:
def demand_quantity(price, income, price_elasticity=-0.5, income_elasticity=1.2):
# สมมติแบบจำลองอย่างง่าย (Log-linear form concept)
# Q = A * P^e * I^n
base_quantity = 100
quantity = base_quantity * (price ** price_elasticity) * (income ** income_elasticity)
return quantity
# ทดลองคำนวณเมื่อราคาสินค้าเพิ่มขึ้น
q_now = demand_quantity(price=100, income=50000)
q_new = demand_quantity(price=120, income=50000)
print(f"ปริมาณซื้อเดิม: {q_now:.2f}")
print(f"ปริมาณซื้อใหม่เมื่อราคาแพงขึ้น: {q_new:.2f}")ปริมาณซื้อเดิม: 4352752.82
ปริมาณซื้อใหม่เมื่อราคาแพงขึ้น: 3973501.51
ในการเขียนโปรแกรม เรามักจะพบข้อผิดพลาด (error) ซึ่งเป็นเรื่องปกติ เช่น
จะไม่ทำการแสดงผลลัพธ์ของ code ให้ผู้อ่านทดลองปฏิบัติด้วยตัวเอง
gdp_list = [1000, 2000]
print(gdp_list[5]) # ไม่มี index นี้gdp_dict = {"Thailand": 500}
print(gdp_dict["USA"]) # ไม่มี key นี้print("GDP: " + 1000) # string + int ทำไม่ได้แนวทางแก้ไข:
อ่าน error message
ดูว่าปัญหาเกิดที่บรรทัดไหน
ตรวจสอบประเภทข้อมูลและ index
การเข้าใจ error เป็นทักษะสำคัญในการเรียนเขียนโปรแกรม