การใช้งานจริง¶
ตัวอย่างการใช้งานภาษาปิยะธอนในสถานการณ์จริง
การวิเคราะห์ข้อมูล¶
วิเคราะห์ข้อมูลจากไฟล์ CSV¶
นำเข้า pandas เป็น พด
นำเข้า matplotlib.pyplot เป็น พล
นิยาม วิเคราะห์ยอดขาย(ไฟล์):
# อ่านข้อมูล
ข้อมูล = พด.read_csv(ไฟล์)
# คำนวณสถิติ
ยอดรวม = ข้อมูล['ยอดขาย'].sum()
ค่าเฉลี่ย = ข้อมูล['ยอดขาย'].mean()
สูงสุด = ข้อมูล['ยอดขาย'].max()
# สร้างกราฟ
ข้อมูล.plot(x='วันที่', y='ยอดขาย')
พล.title('ยอดขายรายวัน')
พล.show()
คืนค่า {
'ยอดรวม': ยอดรวม,
'ค่าเฉลี่ยต่อวัน': ค่าเฉลี่ย,
'ยอดขายสูงสุด': สูงสุด
}
แปลงและทำความสะอาดข้อมูล¶
นิยาม ทำความสะอาดข้อมูล(ดีเอฟ):
# แทนที่ค่าว่าง
ดีเอฟ = ดีเอฟ.fillna({
'ราคา': 0,
'ชื่อ': 'ไม่ระบุ'
})
# ลบแถวซ้ำ
ดีเอฟ = ดีเอฟ.drop_duplicates()
# แปลงประเภทข้อมูล
ดีเอฟ['วันที่'] = พด.to_datetime(ดีเอฟ['วันที่'])
ดีเอฟ['ราคา'] = ดีเอฟ['ราคา'].astype(float)
คืนค่า ดีเอฟ
เว็บแอปพลิเคชัน¶
เว็บเซิร์ฟเวอร์อย่างง่าย¶
จาก flask นำเข้า Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/คำนวณ', methods=['POST'])
นิยาม คำนวณ():
ข้อมูล = request.get_json()
ลอง:
ผลลัพธ์ = ประมวลผล(ข้อมูล)
คืนค่า jsonify({'ผลลัพธ์': ผลลัพธ์}), 200
ยกเว้น Exception เป็น e:
คืนค่า jsonify({'ข้อผิดพลาด': str(e)}), 400
นิยาม ประมวลผล(ข้อมูล):
# โค้ดสำหรับประมวลผลข้อมูล
ผ่าน
ถ้า __ชื่อ__ == '__main__':
app.run(debug=จริง)
บอทไลน์อย่างง่าย¶
จาก linebot นำเข้า LineBotApi, WebhookHandler
จาก linebot.models นำเข้า MessageEvent, TextMessage, TextSendMessage
bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@handler.add(MessageEvent, message=TextMessage)
นิยาม จัดการข้อความ(event):
ข้อความ = event.message.text
คำตอบ = ประมวลผลข้อความ(ข้อความ)
bot_api.reply_message(
event.reply_token,
TextSendMessage(text=คำตอบ)
)
นิยาม ประมวลผลข้อความ(ข้อความ):
# โค้ดสำหรับประมวลผลข้อความ
ผ่าน
เครื่องมือ CLI¶
เครื่องมือจัดการไฟล์¶
จาก typer นำเข้า Typer
จาก pathlib นำเข้า Path
app = Typer()
@app.command()
นิยาม เรียงไฟล์(โฟลเดอร์: str = '.', นามสกุล: str = None):
"""เรียงไฟล์ในโฟลเดอร์ตามนามสกุล"""
พาธ = Path(โฟลเดอร์)
สำหรับ ไฟล์ ใน พาธ.iterdir():
ถ้า ไฟล์.is_file():
ถ้า นามสกุล คือ ไม่มีค่า หรือ ไฟล์.suffix == f'.{นามสกุล}':
โฟลเดอร์_ใหม่ = พาธ / ไฟล์.suffix[1:]
โฟลเดอร์_ใหม่.mkdir(exist_ok=จริง)
ไฟล์.rename(โฟลเดอร์_ใหม่ / ไฟล์.name)
ถ้า __ชื่อ__ == '__main__':
app()
เครื่องมือสร้างรายงาน¶
จาก jinja2 นำเข้า Template
จาก datetime นำเข้า datetime
นิยาม สร้างรายงาน(ข้อมูล, เทมเพลต):
"""สร้างรายงาน HTML จากข้อมูลและเทมเพลต"""
ด้วย เปิด(เทมเพลต, 'r', encoding='utf-8') เป็น ไฟล์:
template = Template(ไฟล์.read())
เนื้อหา = template.render(
ข้อมูล=ข้อมูล,
วันที่=datetime.now().strftime('%Y-%m-%d')
)
ด้วย เปิด('รายงาน.html', 'w', encoding='utf-8') เป็น ไฟล์:
ไฟล์.write(เนื้อหา)
# ตัวอย่างการใช้งาน
ข้อมูล = {
'หัวข้อ': 'รายงานประจำเดือน',
'รายการ': [
{'ชื่อ': 'สินค้า A', 'จำนวน': 100},
{'ชื่อ': 'สินค้า B', 'จำนวน': 150}
]
}
สร้างรายงาน(ข้อมูล, 'เทมเพลต.html')
การทดสอบและ CI/CD¶
การทดสอบอัตโนมัติ¶
จาก unittest นำเข้า TestCase
จาก myapp นำเข้า คำนวณราคา
ชั้น ทดสอบการคำนวณ(TestCase):
นิยาม test_คำนวณปกติ(ตัว):
ผลลัพธ์ = คำนวณราคา(100, 7)
ตัว.assertEqual(ผลลัพธ์, 107)
นิยาม test_คำนวณลดราคา(ตัว):
ผลลัพธ์ = คำนวณราคา(100, 7, ส่วนลด=10)
ตัว.assertEqual(ผลลัพธ์, 96.3)
นิยาม test_ข้อผิดพลาด(ตัว):
ด้วย ตัว.assertRaises(ValueError):
คำนวณราคา(-100, 7)
การใช้งาน¶
วิเคราะห์ข้อมูลขาย
ข้อมูล = วิเคราะห์ยอดขาย('ยอดขาย.csv')
พิมพ์(f"ยอดขายรวม: {ข้อมูล['ยอดรวม']:,.2f} บาท")
รันเว็บเซิร์ฟเวอร์
piyathon app.pi
ใช้เครื่องมือเรียงไฟล์
piyathon sort_files.pi --โฟลเดอร์="เอกสาร" --นามสกุล="pdf"