copy from narumon repo

parent 27901c05
Pipeline #1091 failed with stages
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary
# listings
*.lol
# makeidx
*.idx
*.ilg
*.ind
*.ist
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices
*.xyc
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# KBibTeX
*~[0-9]*
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
\chapter{บทนำ}
\section{ที่มาและเหตุผล }
เนื่องจากในปัจจุบันการแต่งกายถือเป็นเรื่องที่สำคัญ การใช้ชีวิตประจำวันในแต่ละวันที่ต้องไปทำงานหรือต้องไปเรียนทุกคนต่างต้องมีการแต่งกายเพื่อให้ตัวเองดูดีและมีความน่าเชื่อถือ เพราะการแต่งกายสามารถบ่งบอกได้ถึงบุคลิกภาพของผู้ใส่ได้ และการแต่งกายให้เข้ากับรูปร่างยังถือเป็นเรื่องที่ยาก เนื่องจากรูปร่างของแต่ละบุคคลนั้นมีความแตกต่างกัน ดังนั้นการเลือกใส่เสื่อผ้าที่ใส่แล้วทำให้เราดูดีขึ้น การเลือกใส่เสื้อผ้าที่เหมาะสมกับรูปร่างจะส่งผลให้เราดูมีบุคลิกภาพที่ดีขึ้นได้ เพราะสามารถเพิ่มความมั่นใจในการใช้ชีวิตประจำวันได้ ในการเลือกซื้อเสื้อผ้าในแต่ละครั้งบางท่านอาจใช้เวลาในการเลือกนาน เนื่องจากไม่ทราบว่าควรใส่เสื้อผ้าแบบไหนที่ใส่แล้วจะทำให้ดูดีขึ้น เสื้อผ้าที่ใส่แล้วจะไม่ทำให้ดูอวบหรือผอมเพิ่มมากขึ้น จึงทำให้เสียเวลาไปกับการเลือกซื้อเสื้อผ้าไปนาน ดังนั้นการแต่งกายจึงถือเป็นเรื่องที่มีความสำคัญเป็นอย่างมาก และปัจจุบันระบบขายสินค้าออนไลน์ได้รับความนิยมอย่างมากเช่น shopee, lazada เป็นต้น ทำให้ลูกค้าได้รับความสะดวกในการซื้อขายสินค้า แต่สินค้าประเภทเสื้อผ้าเครื่องแต่งกายนั้นกลับมีทำตลาดผ่านการขายผ่านสังคมเครือข่ายเช่น facebook, instagram โดยผู้ที่มีทำการ live เป็นปัจจัยที่สำคัญในการตัดสินใจเลือกซื้อของลูกค้าเนื่องจากการแนะนำ ให้ความรู้เรื่องการแต่งกายที่เหมาะสม และการแนะนำชุดตัวอย่างให้ลูกค้าได้พิจารณาเลือกตาม อย่างไรก็ดี ลูกค้าที่เลือกชุดแต่งกายอาจจะมีรูปร่าง ลักษณะ บุคลิกที่แตกต่างกันออกไป และอาจจะแตกต่างจากผู้ทำการ live ขายสินค้า ทำให้การสินค้าที่เสนอ ไม่ตรงตามความต้องการของผู้ใช้งาน
\newline
\indent
ในปัจจุบันการใช้อินเตอร์เน็ตเป็นปัจจัยหนึ่งในชีวิตของมนุษย์ไปแล้ว และมีการพัฒนาอย่างต่อเนื่องทั้งด้านฮาร์ดแวร์ (Hardware) และซอฟต์แวร์ (Software) เพื่อตอบสนองความตองการของผู้ใช้งานทั้งในด้านบวกและด้านลบ จึงทำให้ผู้พัฒนามีความคิดที่จะสร้างแอปพลิเคชันที่เป็นประโยชน์ให้แก่ผู้ใช้งาน
\newline
\indent
ดังนั้นผู้พัฒนาจึงได้สร้างเป็นเว็บที่จะมาช่วยให้แนะนำการแต่งกายให้กับสุภาพบุรุษและสุภาพสตรีทุกท่านที่มีปัญหาในเรื่องของการเลือกใส่เสื้อผ้า จะช่วยท่านในเรื่องของการเลือกใส่เสื้อผ้าแบบไหนที่จะเข้ากับรูปร่างและใส่แล้วเหมาะสมกับหุ่นของท่าน ระบบแนะนำการแต่งกายสุภาพบรุษและสุภาพสตรีนี้จะช่วยทำให้การแต่งกายเป็นเรื่องที่ง่ายและสนุกมากยิ่งขึ้น โดยใช้หลักการของ Collaborative Filtering เพื่อแนะนำเสื้อผ้าที่เหมาะสมจากหลายร้านค้าให้กับผู้ใช้งานโดยพิจารณาจากกลุ่มผู้ใช้ที่มีคุณลักษณะและประวัติการซื้อที่ใกล้เคียงกัน ข้อมูลที่จัดเก็บสามารถนำมาวิเคราะห์ข้อมูลการซื้อขายและการจัดกลุ่มลูกค้าเพื่อให้ร้านค้าที่เป็นสมาชิกสามารถนำไปวิเคราะห์เพื่อทำการส่งเสริมการขายของร้านต่อไป จุดเด่นคือสมาชิกสามารถเลือกเสื้อผ้าจากหลายร้านค้าในระบบเพื่อสร้างเป็นชุดที่ชื่นชอบ สามารถนำไปแสดงเป็นข้อความสาธารณะบนสังคมเครือข่าย โดยสมาชิกคนอื่นสามารถติดตามและให้เสนอข้อคิดเห็นได้
\section{วัตถุประสงค์}
\begin{enumerate}[label=\arabic*.]
\item เพื่อพัฒนาเว็บแนะนำการเลือกเสื้อผ้าโดยใช้หลักการเรียนรู้ของเครื่อง
\item เพื่อพัฒนาระบบเว็บเพื่อนำเสนอความรู้และให้คำแนะนำในการแต่งกายให้แก่สุภาพบุรุษและสุภาพสตรี
\end{enumerate}
\section{ขอบเขตของโครงงาน}
\begin{enumerate}[label=1.3.\arabic*]
\item ผู้ใช้งาน
\begin{itemize}
\item สามารถสมัครสมาชิกได้
\item สามารถเข้าสู่เข้าสู่ระบบได้
\item สามารถแก้ไขข้อมูลผู้ใช้งานได้
\item สามารถดูรายการเสื้อผ้าจากร้านค้าได้
\item สามารถดูรายการร้านค้าได้
\item สามารถดูรายการแนะนำเสื้อผ้าได้
\item สามารถบันทึกรายการเสื้อผ้าที่ถูกใจได้
\item สามารถบันทึกรายการร้านค้าที่ถูกใจได้
\item สามารถดูบันทึกรายการเสื้อผ้าที่ถูกใจได้
\item สามารถดูบันทึกรายการร้านค้าที่ถูกใจได้
\item สามารถดูค้นหาเสื้อผ้าได้
\end{itemize}
\newpage
\item ร้านค้า
\begin{itemize}
\item สามารถสมัครสมาชิกได้
\item สามารถเข้าสู่ระบบได้
\item สามารถแก้ไขข้อมูลร้านค้าได้
\item สามารถเพิ่ม ลบ แก้ไข ข้อมูลเสื้อผ้าในร้านค้าได้
\item สามารถดูรายการคนที่ถูกใจเสื้อผ้าได้
\item สามารถดูรายการคนที่ถูกใจร้านค้าได้
\end{itemize}
\item ผู้ดูแลระบบ
\begin{itemize}
\item สามารถเข้าสู่ระบบได้
\item สามารถเพิ่ม ลบ แก้ไข ข้อมูลร้านค้าได้
\item สามารถเพิ่ม ลบ แก้ไข ข้อมูลผู้ใช้งานได้
\end{itemize}
\end{enumerate}
\section{ประโยชน์ที่คาดว่าจะได้รับ}
\begin{enumerate}[label=\arabic*.]
\item มีระบบแนะนำการแต่งกายสำหรับสุภาพบุรุษและสุภาพสตรี
\item มีระบบเว็บแนะนำในเรื่องของการแต่งกายให้เหมาะกับรูปร่าง เพื่อช่วยให้ลูกค้าสามารถเลือกดูสินค้าทุกเวลาที่สะดวก
\item มีระบบสามารถแนะนำสินค้าตามรสนิยมของผู้ใช้ได้
\end{enumerate}
\section{เครื่องมือที่ใช้ในการพัฒนา (Development tools)}
\subsection{ฮาร์ดเเวร์}
\begin{enumerate}[label=\arabic*.]
\item เครื่องคอมพิวเตอร์ส่วนบุคคล (Personal computer)
\begin{itemize}
\item หน่วยประมวลผลกลาง CPU Intel ® CoreTM i3-50005U CPU @ 2.0GHz 3MB L3Cache
\item หน่วยความจำหลัก ขนาด 4 GB
\item หน่วยความจำสำรอง Solid State Drive (SSD) ขนาดความจุ 240 GB
\item หน่วยความจำแสดงผล Intel ® Graphics 5500
\item ระบบปฏิบัติการ: Windows 10 Education 64 bit
\end{itemize}
\end{enumerate}
\subsection{ซอฟต์แวร์ (Software)}
\begin{enumerate}[label=\arabic*.]
\item Visual Studio Code เป็น text editor เครื่องมือสำหรับพัฒนาเว็บแอปพลิเคชัน
\item PythonAnywhere คือ เว็บที่ให้บริการเครื่องมือที่ใช้ในการพัฒนาโปรแกรม (IDE) และ เป็น web hosting service โดยใช้ภาษา Python
\item Django คือ โปรแกรม OpenSource สำหรับพัฒนา web application ซึ่งเขียนในภาษา Python
\item SQLite เป็นโปรแกรมฐานข้อมูลที่มีขนาดเล็ก เก็บฐานข้อมูลเป็นไฟล์โดยไม่จำเป็นต้องมีเซิร์ฟเวอร์
\item Collaborative filtering คือระบบ RS ที่ใช้ข้อมูลการกระทำของเราและผู้ใช้งานท่านอื่น เพื่อใช้แนะนำการกระทำที่เราน่าจะทำหรือน่าสนใจ
\end{enumerate}
\newpage
\subsection{แผนการดำเนินการ}
ในการสร้างระบบแนะนำการแต่งกายสุภาพบุรุษและสุภาพสตรีนี้ ผู้พัฒนาได้แบ่งขั้นตอน การดำเนินงานไว้ด้วยกัน 8 ขั้นตอน ดังตารางที่ 1.1
%\begin{landscape}
%\sffamily
\begin{table}[H]
\noindent
\caption{ขั้นตอนการดำเนินงาน}
\begin{ganttchart}[
canvas/.append style={fill=none, draw=black!5, line width=.75pt},
vgrid={*2{draw=black!7, line width=.75pt}},
title label font=\bfseries\footnotesize,
bar label node/.append style={
align=left,
text width=width("7. Functional Testing On")},
bar/.append style={draw=none, fill=black!63}
]{1}{12}
\gantttitle{2562}{4}
\gantttitle{2563}{8}\\
\gantttitle{พ.ย.}{2}
\gantttitle{ธ.ค.}{2}
\gantttitle{ม.ค.}{2}
\gantttitle{ก.พ.}{2}
\gantttitle{มี.ค.}{2}
\gantttitle{เม.ย.}{2} \\
\ganttbar{1.ศึกษาความเป็นไปได้}{1}{2} \\
\ganttbar{2.เสนอหัวข้อโครงงาน}{2}{3} \\
\ganttbar{3.ศึกษาค้นคว้าข้อมูล}{3}{8} \\
\ganttbar{4.ศึกษาการใช้เครื่องมือ}{3}{7} \\
\ganttbar{5.วิเคราะห์และออกแบบ}{3}{5} \\
\ganttbar{6.เขียนโปรแกรม}{4}{9} \\
\ganttbar{7.ทดสอบและแก้ปัญหา}{6}{9} \\
\ganttbar{8.จัดทำเอกสาร}{7}{11} \\
\end{ganttchart}
\label{tab:ganttchart}
\end{table}
%\end{landscape}
%TODO แก้เทมเพลตเอาชื่อตารางไว้ด้านบน
\chapter{ทฤษฎีที่เกี่ยวข้อง}
ในบทนี้จะกล่าวถึงรายละเอียดเกี่ยวกับทฤษฎีและงานวิจัยที่เกี่ยวของกับการพัฒนาระบบ แนะนำการแต่งกายสุภาพบุรุษและสุภาพสตรี โดยแบ่งเนื้อหาออกเป็น 2 ส่วน ได้แก่ ส่วนที่หนึ่ง เป็นเนื้อหาพื้นฐานเกี่ยวกับทฤษฎีการเขียนโปรแกรมและเทคโนโลยีที่นำมาใช้ในการพัฒนาในหัวข้อที่ 2.1-2.6 ได้แก่ ความรู้พื้นฐานเกี่ยวกับ Visual studio code, PythonAnywhere, Django, SQLite, Collaborative Filtering และภาษา Python และในส่วนที่สองเป็นเนื้อหาเกี่ยวกับเว็บที่เกี่ยวของกับโครงงานนี้ในหัวข้อที่ 2.7
\section{ความรู้เกี่ยวกับ Visual Studio Code}
วิชวล สตูดิโอโค้ด (Visual Studio Code) \cite{VisualStudioCode} เป็นโปรแกรม Code Editor ที่ใช้ในการแก้ไขและปรับแต่งโค้ด จากค่ายไมโครซอฟท์ (Microsoft) มีการพัฒนาออกมาในรูปแบบของ OpenSource จึงสามารถนำมาใช้งานได้แบบฟรีที่ต้องการความเป็นมืออาชีพ ซึ่ง Visual Studio Code นั้น เหมาะสำหรับนักพัฒนาโปรแกรมที่ต้องการใช้งานข้ามแพลตฟอร์ม (platform) รองรับการใช้งานทั้งบน Windows, macOS และ Linux สนับสนุนทั้งภาษา JavaScript, TypeScript และ Node.js สามารถเชื่อมต่อกับ Git ได้ นำมาใช้งานได้ง่ายไม่ซับซ้อนมีเครื่องมือส่วนขยายต่าง ๆ ให้เลือกใช้อย่างมาก การเปิดใช้งานภาษาอื่น ๆ ทั้ง ภาษา C++, C#, Java, Python, PHP หรือ Go
\section{ความรู้พื้นฐาน Java}
PythonAnywhere \cite{PythonAnywhere} เป็นเว็บไซต์ที่ให้บริการ Online IDE และ Web Hosting Service โดยใช้ภาษา Python เป็นหลัก มี Python Web Framework ต่างๆ เช่น Django, Flask, Bottle สามารถสมัครสมาชิกได้ฟรี หรือสามารถจ่ายเงินเป็นรายเดือนเพื่อเพิ่มความสามารถต่างๆ ได้ โดยสมาชิกแบบฟรีสามารถ Deploy Web App ได้ 1 Web App (ไม่สามารถตั้งชื่อโดเมน Web App เองได้ โดยทางเว็ปไซต์จะให้ใช้ ID เป็นชื่อโดเมนของ Web App)
\section{ความรู้เกี่ยวกับ Django}
แจงโก้ (Django) \cite{DjangoFramework} เป็น framework ที่ใช้ในการสร้าง Web Application ในฝั่งของ Back End ที่พัฒนาด้วยภาษา Python โดยในตัว Framework จะมีส่วนประกอบทุกอย่างที่จำเป็นตั้งแต่การเชื่อมต่อฐานข้อมูล ไปจนถึงการ Render ข้อมูลออกมาให้ฝั่ง Front End แสดงผลข้อมูลเหล่านั้นได้ ซึ่ง Framework ในรูปแบบนี้ในภาษาอื่นๆ เช่น Ruby on rails สำหรับภาษา Ruby, Play Framework สำหรับภาษา Java หรือ Scala, Groovy on Grails สำหรับภาษา Groovy, Laravel สำหรับภาษา PHP หรือ Express สำหรับภาษา Javascript ของ Node.js เป็นต้น
\subsection{คุณสมบัติของ Django Framework \cite{Python&Django}}
\begin{enumerate}
\item Object-Relational Mapper คือ การกำหนด Data Model ในภาษา Python เพื่อการทำงานด้านข้อมูล และสนับสนุน Dynamic Database-Access API
\item Automatic Admin Interface คือ ส่วนของการสร้าง Interface อัตโนมัติสำหรับการ Add, Edit, Delete และ Search ด้วย Django Framework
\item Elegant URL design คือ การทำให้ URL มีความสวยงาม สั้น กระชับ และสื่อความหมายของหน้านั้น ๆ ได้อย่างชัดเจน เหมาะสมกับการทำ SEO ในปัจจุบัน
\item Template System คือ Django นั้นมีการออกแบบ Template Language เพื่อการเขียนแยกส่วนระหว่าง Design และ Business Logic
\item Cache System คือ ส่วนของการบันทึก หรือจัดการข้อมูลที่มีการดาวน์โหลดไปแล้ว เพื่อเพิ่มประสิทธิภาพการทำงานของเว็บไซต์ด้านความเร็ว และด้านอื่น ๆ
\item nternationalization คือ Django สนับสนุน Application ที่มีความหลากหลายด้านภาษาในการแสดงผล
\end{enumerate}
\section{ความรู้เกี่ยวกับ SQLite}
เอสคิวแอลไลท์ (SQLite) \cite{SQLite} เป็นห้องสมุดที่น่าทึ่งที่ฝังตัวอยู่ภายในแอปพลิเคชันที่ใช้งาน ในฐานะที่เป็นฐานข้อมูลแบบไฟล์ในตัว SQLite มีชุดเครื่องมือที่ยอดเยี่ยมในการจัดการข้อมูลทุกประเภทโดยมีข้อ จำกัด และความสะดวกน้อยกว่ามากเมื่อเปรียบเทียบกับฐานข้อมูลเชิงสัมพันธ์แบบโฮสต์กระบวนการ (เซิร์ฟเวอร์)
\newline
\indent
เมื่อแอปพลิเคชันใช้ SQLite กาพรวมจะทำงานกับการเรียกใช้งานและการโทรโดยตรงกับไฟล์ที่เก็บข้อมูล (เช่นฐานข้อมูล SQLite) แทนการสื่อสารผ่านอินเทอร์เฟซประเภท (พอร์ตพอร์ตซ็อกเก็ต) สิ่งนี้ทำให้ SQLite รวดเร็วและมีประสิทธิภาพเป็นอย่างยิ่งและยังมีเทคโนโลยีพื้นฐาน
\newline
\indent
ประเภทข้อมูลที่สนับสนุนของ SQLite
\begin{itemize}
\item โมฆะ:
\end{itemize}
ค่า NULL
\begin{itemize}
\item จำนวนเต็ม:
\end{itemize}
เลขจำนวนเต็มที่ลงนามซึ่งเก็บใน 1, 2, 3, 4, 6 หรือ 8 ไบต์ขึ้นอยู่กับขนาดของค่า
\begin{itemize}
\item จริง:
\end{itemize}
ค่าจุดลอยตัวเก็บไว้เป็นหมายเลขทศนิยม IEEE 8 ไบต์
\begin{itemize}
\item ข้อความ:
\end{itemize}
สตริงข้อความที่จัดเก็บโดยใช้การเข้ารหัสฐานข้อมูล (UTF-8, UTF-16BE หรือ UTF-16LE)
\begin{itemize}
\item หยด:
\end{itemize}
หยดของข้อมูลที่จัดเก็บเหมือนกับข้อมูลที่ป้อนเข้า
\newline
หมายเหตุ: หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับประเภทข้อมูลของ SQLite และความสัมพันธ์ประเภท SQLite ให้ตรวจสอบเอกสารอย่างเป็นทางการเกี่ยวกับเรื่องนี้
\newline
\indent
ข้อดีของ SQLite
\begin{itemize}
\item ไฟล์ที่ใช้:
\end{itemize}
ฐานข้อมูลทั้งหมดประกอบด้วยไฟล์เดียวบนดิสก์ซึ่งทำให้พกพาได้อย่างมาก
\begin{itemize}
\item มาตรฐานการตระหนักถึง:
\end{itemize}
แม้ว่ามันอาจดูเหมือนการใช้งานฐานข้อมูล“ แบบง่าย” แต่ SQLite ก็ใช้ SQL มันมีคุณสมบัติบางอย่างที่ถูกละเว้น (เข้าร่วมขวาหรือเพื่อแต่ละงบ) แต่บางส่วนเพิ่มเติมจะถูกอบเข้า
\begin{itemize}
\item เหมาะสำหรับการพัฒนาและการทดสอบ:
\end{itemize}
ในระหว่างขั้นตอนการพัฒนาแอปพลิเคชั่นส่วนใหญ่สำหรับคนส่วนใหญ่มีแนวโน้มที่จะต้องการโซลูชันที่สามารถปรับขนาดสำหรับการทำงานพร้อมกัน SQLite ซึ่งมีฐานคุณลักษณะที่หลากหลายสามารถให้มากกว่าสิ่งที่จำเป็นสำหรับการพัฒนาด้วยความเรียบง่ายในการทำงานกับไฟล์เดียวและไลบรารีบนฐาน C ที่เชื่อมโยง
\newline
\indent
ข้อเสียของ SQLite
\begin{itemize}
\item ไม่มีการจัดการผู้ใช้:
\end{itemize}
ฐานข้อมูลขั้นสูงมาพร้อมกับการสนับสนุนสำหรับผู้ใช้เช่นการเชื่อมต่อที่มีการจัดการที่มีสิทธิ์ตั้งค่าการเข้าถึงฐานข้อมูลและตาราง เมื่อพิจารณาถึงวัตถุประสงค์และลักษณะของ SQLite (ไม่มีระดับที่สูงขึ้นของการทำงานพร้อมกันของไคลเอนต์หลายรายการ) คุณลักษณะนี้ไม่มีอยู่
\begin{itemize}
\item ขาดความเป็นไปได้ที่จะจัดด้วยสำหรับประสิทธิภาพเพิ่มเติม
\end{itemize}
อีกครั้งโดยการออกแบบ SQLite เป็นไปไม่ได้ที่จะได้รับประสิทธิภาพที่เพิ่มขึ้นอย่างมาก ไลบรารี่นั้นง่ายต่อการปรับแต่งและใช้งานง่าย เนื่องจากมันไม่ซับซ้อนจึงเป็นไปไม่ได้ในทางเทคนิคที่จะทำให้มันมีประสิทธิภาพมากกว่ามันแล้วน่าประหลาดใจคือ
\newline
\indent
เมื่อต้องการใช้ SQLite
\begin{itemize}
\item แอปพลิเคชันแบบฝัง:
\end{itemize}
แอปพลิเคชันทั้งหมดที่ต้องการความสะดวกในการพกพาซึ่งไม่จำเป็นต้องมีการขยายเช่น แอพพลิเคชั่นในท้องถิ่นแอปพลิเคชันมือถือหรือเกม
\begin{itemize}
\item การแทนที่การเข้าถึงดิสก์:
\end{itemize}
ในหลายกรณีแอปพลิเคชันที่จำเป็นต้องอ่าน / เขียนไฟล์ไปยังดิสก์โดยตรงจะได้ประโยชน์จากการสลับไปใช้ SQLite สำหรับการทำงานเพิ่มเติมและความเรียบง่ายที่มาจากการใช้ภาษาที่มีโครงสร้างของแบบสอบถาม (SQL)
\begin{itemize}
\item การทดสอบ:
\end{itemize}
มันเกินความเป็นจริงสำหรับแอปพลิเคชันขนาดใหญ่เพื่อใช้กระบวนการเพิ่มเติมสำหรับการทดสอบตรรกะทางธุรกิจ (เช่นวัตถุประสงค์หลักของแอปพลิเคชัน: ฟังก์ชันการทำงาน)
\newline
\indent
เมื่อไม่ต้องการใช้ SQLite
\begin{itemize}
\item แอปพลิเคชันผู้ใช้หลายคน:
\end{itemize}
หากคุณกำลังทำงานกับแอปพลิเคชันที่ลูกค้าหลายรายต้องการเข้าถึงและใช้ฐานข้อมูลเดียวกัน RDBM ที่มีคุณสมบัติครบถ้วน (เช่น MySQL) น่าจะเลือก SQLite ได้ดีกว่า
\begin{itemize}
\item แอปพลิเคชันที่ต้องการปริมาณการเขียนสูง:
\end{itemize}
หนึ่งในข้อ จำกัด ของ SQLite คือการดำเนินการเขียน DBMS นี้อนุญาตให้ใช้งานการเขียน * เพียงครั้งเดียวในเวลาที่กำหนดดังนั้นจึงอนุญาตให้มีปริมาณงานที่ จำกัด
\section{ความรู้เกี่ยวกับภาษา Python}
ภาษาโปรแกรม Python \cite{Python} คือภาษาโปรแกรมคอมพิวเตอร์ระดับสูง โดยถูกออกแบบมาให้เป็นภาษาสคริปต์ที่อ่านง่าย โดยตัดความซับซ้อนของโครงสร้างและไวยกรณ์ของภาษาออกไป ในส่วนของการแปลงชุดคำสั่งที่เราเขียนให้เป็นภาษาเครื่อง Python มีการทำงานแบบ Interpreter คือเป็นการแปลชุดคำสั่งทีละบรรทัด เพื่อป้อนเข้าสู่หน่วยประมวลผลให้คอมพิวเตอร์ทำงานตามที่เราต้องการ นอกจากนั้นภาษาโปรแกรม Python ยังสามารถนำไปใช้ในการเขียนโปรแกรมได้หลากหลายประเภท โดยไม่ได้จำกัดอยู่ที่งานเฉพาะทางใดทางหนึ่ง (General-purpose language) จึงทำให้มีการนำไปใช้กันแพร่หลายในหลายองค์กรใหญ่ระดับโลก เช่น Google, YouTube, Instagram, Dropbox และ NASA เป็นต้น
\newline
\indent
ประวัติของภาษาโปรแกรม Python ได้เริ่มต้นขึ้นในเดือนธันวาคมปี 1989 โดยนาย Guido van Rossum โปรแกรมเมอร์ชาวดัตช์ ในตอนนั้นทำงานอยู่ที่สถาบันวิจัยแห่งชาติ Centrum Wiskunde & Informatica (CWI) ซึ่งเป็นสถาบันวิจัยทางด้านคณิตศาสตร์และวิทยาการคอมพิวเตอร์ในเมืองอัมสเตอร์ดัม ประเทศเนเธอร์แลนด์ ในเวลานั้น Guido ต้องพัฒนาโปรแกรมสำหรับผู้ดูแลระบบ เพื่อใช้ในโครงการ Amoeba ซึ่งเป็นโครงการเกี่ยวกับระบบปฏิบัติการแบบกระจาย (Distributed operating system) อย่างไรก็ตามเขารู้สึกว่าภาษาโปรแกรม ABC, C และ Bourne shell มีข้อจำกัดมากมาย ทั้งเรื่องใช้เวลาในการพัฒนานานมากและไม่สามารถตอบโจทย์หลายประการ ดังนั้น Guido จึงได้ตัดสินใจเริ่มพัฒนาภาษาโปรแกรมระดับสูงขึ้นมาใหม่เพื่อใช้งานเองเป็นงานอดิเรก โดยนำเอาสิ่งที่ชอบในภาษา ABC มาพัฒนาลงไปในภาษาโปรแกรม Python รวมถึงได้พัฒนาส่วนอื่น ๆ เพิ่มเติมเข้าไป และในเวลาต่อมาจึงได้เผยแพร่ Python 1.0 เวอร์ชันแรกในปี 1994 หากเทียบกับภาษา Java ที่ได้ทำการเผยแพร่เวอร์ชันแรกในปี 1996 จะเห็นได้ว่าภาษา Python มีอายุมากกว่าภาษา Java ถึง 2 ปีที่มาของชื่อภาษาโปรแกรม Python นั้นไม่ได้มีที่มาเกี่ยวข้องกับงูเหมือนกับชื่อของมันแต่อย่างใด แต่ในช่วงที่ตัดสินใจเลือกชื่อนั้น ชื่อแรกที่เข้ามาในความคิดของ Guido ก็คือ มอนตี้ ไพธอน: ละครสัตว์เหินหาว (Monty Python’s Flying Circus) ซึ่งเป็นชื่อรายการโทรทัศน์ทางช่อง BBC แนวตลกชื่อดังจากฝั่งอังกฤษที่เขาชื่นชอบมาก ๆ โดยเขาให้เหตุผลว่า “Python” เป็นชื่อที่สั้น จำได้ง่าย ฉีกแนวนิดๆ และดูลึกลับ ในตอนนั้นโดยทั่วไปมักจะนิยมเอาชื่อของบุคคลที่มีชื่อเสียงมาใช้เป็นชื่อภาษาโปรแกรมคอมพิวเตอร์ เช่น Ada, Pascal และ Eiffel ถึงแม้ว่าทีมนักแสดงในรายการจะไม่ได้มีชื่อเสียงทางด้านวิทยาศาสตร์และเทคโนโลยี แต่ก็เป็นที่ชื่นชอบในกลุ่มชาว Geek อย่างมาก รวมถึงกลุ่มคนที่ทำงานใน CWI ก็มักจะนิยมเอาชื่อรายการทีวีโชว์มาตั้งชื่อในงานของตัวเองอีกด้วย นี่คือเหตุผลที่มาที่ไปของชื่อภาษา Python นอกจากนั้น Guido ยังใช้ชื่อของนักแสดงตลกชาวอังกฤษชื่อดังและเป็นหนึ่งในสมาชิกผู้ก่อตั้งทีม Monty Python ที่ชื่อ Eric Idle มาใช้เป็นชื่อ IDE หรือเครื่องมือที่ใช้ในการพัฒนาโปรแกรมว่า “IDLE” อีกด้วย
\section{ความรู้เกี่ยวกับ Collaborative filtering}
\subsection{ ระบบแนะนำ (Recommender System)}
ระบบผู้แนะนำ (Recommender System) หมายถึง การเสนอแนวทางเลือกให้แก่บุคคลใดบุคคลหนึ่ง ยกตัวอย่างสิ่งที่สามารถแนะนำ เช่น เสื้อผ้า ร้านอาหาร เพลง หนัง เป็นต้น ซึ่งในที่นี้จะเป็นระบบการแนะนำเสื้อผ้าให้แก่ผู้ใช้งาน โดยจะใช้หลักการของ Collaborative Filtering จะเลือกแนะนำสิ่งที่ผู้ใช้คนอื่นๆ ในระบบที่มีลักษณะความชอบคล้ายคลึงกับผู้ใช้ปัจจุบันมาก และผู้ใช้เหล่านี้ได้ให้คะแนนความชอบต่อไอเทม (item) นั้นไว้ค่อนข้างสูง ในขณะที่ผู้ใช้ปัจจุบันยังไม่เคยใช้ไอเทมนั้นมาก่อน
\newline
ระบบผู้แนะนำสามารถแบ่งออกได้เป็น 5 ประเภทตามลำดับความซับซ้อนของเทคนิคที่ใช้ได้แก่ \cite{recommenders}
\begin{enumerate}[label=\arabic*.]
\item ไอเท็มยอดนิยม - กลยุทธ์ที่ง่ายที่สุด (Most Popular Items - The Simplest Strategy)
\newline
วิธีที่ง่ายที่สุดคือให้ลูกค้าสิ่งที่ได้รับความนิยมมากที่สุดไม่ว่าจะเป็นภาพยนตร์หนังสือหรือบทความเกี่ยวกับเสื้อผ้า โดยไม่ต้องทำอะไรมากกว่าดูในบันทึกการขายของคุณคุณสามารถทำได้ ไม่ต้องใช้วิทยาศาสตร์ข้อมูล ข้อมูลไม่ได้เป็นแบบส่วนบุคคล แต่อาจมีประโยชน์หากคุณรู้น้อยมากเกี่ยวกับผู้เข้าชม ต้องมีคุณสมบัติเนื้อหาพื้นฐานเพื่อสร้างหมวดหมู่ย่อยที่สามารถจับคู่การเรียกดูปัจจุบันของผู้เข้าชม ตัวอย่างเช่นหากคุณเสนอสินค้าที่หลากหลายเช่นทุกอย่างตั้งแต่เครื่องมือไปจนถึงเสื้อผ้าหรือภาพยนตร์หนังสือหรือข่าวที่ดึงดูดความสนใจ จะต้องพยายามจับคู่รายการอย่างน้อยในหมวดหมู่เดียวกัน แม้จะมีข้อจำกัดเหล่านี้ Home Depot ใช้ผู้ขายที่ดีที่สุดอย่างสม่ำเสมอและ GAP ใช้ผลิตภัณฑ์ล่าสุด และมาถึงเร็วนี้เป็นประจำเพื่อเพิ่มรายได้ เป็นไปได้มากที่จะพิจารณาผู้แนะนำที่นิยมมากที่สุดว่าเป็นวิธีเสริม
\item การวิเคราะห์ความสัมพันธ์หรือการวิเคราะห์ตลาด (Association or Market Basket Analysis)
\newline
\indent
การวิเคราะห์ความสัมพันธ์และการวิเคราะห์ตลาดมองเฉพาะเนื้อหา การวิเคราะห์ทางสถิติประเภทนี้ขึ้นอยู่กับการคำนวณที่ง่ายที่สุดเท่านั้นในการค้นหารายการที่ใช้ร่วมกันบ่อยครั้ง การวิเคราะห์ความสัมพันธ์และการวิเคราะห์ตลาดมีความเหมือนกันทางคณิตศาสตร์ เมื่อลูกค้ามักจะได้รับรายการหรือบริการหนึ่งครั้ง (เช่นบริการธนาคาร) เรียกสมาคมนี้ว่า เมื่อลูกค้าอาจซื้อหลายอย่างพร้อมกันเรียก Market Basket ดังนั้นการวิเคราะห์ความสัมพันธ์จะดำเนินการในระดับลูกค้า (สิ่งที่อยู่ในบัญชีของลูกค้า) ในขณะที่การวิเคราะห์ตลาดจะดำเนินการในระดับการทำธุรกรรม (สิ่งที่อยู่ในรายการชองลูกค้า) มี 3 ขั้นตอนหลัก:
\begin{enumerate}[label=\arabic*]
\item ประเมินความสัมพันธ์ระหว่างแต่ละผลิตภัณฑ์ของสินค้าและผลิตภัณฑ์อื่นที่ได้เสนอโดยใช้อัลกอริทึมของคณิตศาสตร์
\item ระบุการจับคู่ที่มีความสัมพันธ์ที่ดี (โดยทั่วไปจะเป็นคะแนนความสัมพันธ์ 2 หรือสูงกว่า) ตัวอย่างเช่นลูกค้าที่มีบัตรเครดิตอาจพบว่ามีแนวโน้มที่จะมีสินเชื่อรถยนต์มากกว่าสองเท่าหรือสามเท่ากว่าลูกค้าสินเชื่อรถยนต์ที่สุ่มเลือก
\item สร้างข้อเสนอส่วนบุคคลสำหรับลูกค้าที่มีผลิตภัณฑ์หนึ่งของคู่ที่เชื่อมโยงอย่างยิ่ง แต่ไม่ใช่อีกข้อ
\end{enumerate}
\newline
ข้อดีสำหรับเทคนิคนี้
\begin{itemize}
\item ง่ายและรวดเร็วมาก
\item จะทำงานกับฐานลูกค้าขนาดเล็กและกระจัดกระจาย ตัวอย่างเช่นหากเป็นผู้ให้บริการขนาดเล็กเช่นธนาคารระดับภูมิภาคที่มีลูกค้าน้อยกว่า 5,000 รายและอาจมีเพียง 30 ผลิตภัณฑ์หรือผู้ให้บริการอีคอมเมิร์ซบูติกขนาดเล็กในทำนองเดียวกัน
\item ความรู้เกี่ยวกับลูกค้า นอกเหนือจากผลิตภัณฑ์หรือบริการที่มีอยู่ในปัจจุบันไม่จำเป็นต้องมี การเตรียมข้อมูล เนื่องจากการเพิ่มความรู้เกี่ยวกับลูกค้าอาจใช้เวลานานและมีค่าใช้จ่ายสูงและไม่จำเป็นที่นี่การวิเคราะห์ความสัมพันธ์ของกลุ่มลูกค้าและตลาดจึงเป็นวิธีที่คุ้มค่าที่สุดสำหรับการสร้างข้อเสนอส่วนบุคคล
\end{itemize}
\indent
การวิเคราะห์ลุ่มลูกค้าและการวิเคราะห์ตลาดเป็นหัวใจสำคัญของคำแนะนำอีคอมเมิร์ซภายใต้หัวข้อ“ ลูกค้าที่ซื้อสิ่งนี้และถือว่าเป็นรายการเหล่านี้” หรือ“ รายการที่ซื้อด้วยกัน” ซึ่งเป็นวัตถุดิบหลักของ Amazon เนื่องจากต้องการข้อมูลลูกค้าน้อยมากจึงไม่ได้ผลเช่นกันเพราะการเลือกนั้นกว้างมากเช่นภาพยนตร์หนังสือหรือเพลงและมีคนรู้น้อยเกี่ยวกับสิ่งที่ลูกค้าชอบ อย่างไรก็ตามสามารถกรองโดยใช้กิจกรรมการเรียกดูปัจจุบันของผู้เข้าชม
\item การกรองเนื้อหา (Content Filtering :CF)
\newline
\indent
การกรองตามเนื้อหาเป็นสิ่งดีเมื่อ 10 ปีที่แล้ว ยังคงพบในการใช้งานที่หลากหลายและมีแอปพลิเคชันที่ใช้ได้ เนื่องจากชื่อแสดงถึง CF จะมองหาความคล้ายคลึงกันระหว่างรายการที่ลูกค้าบริโภคหรือเรียกดูในอดีตเพื่อนำเสนอทางเลือกในอนาคต CFs เป็นตัวแยกประเภทเฉพาะของผู้ใช้ที่เรียนรู้ที่จะจัดประเภททางเลือกในเชิงบวกหรือเชิงลบโดยยึดตามความชอบของผู้ใช้ (โปรไฟล์ผู้ใช้)
\newline
อัลกอริทึม:
\newline
ระบบจะสร้างโปรไฟล์ตามเนื้อหาของผู้ใช้โดยใช้แอตทริบิวต์ที่ไม่ต่อเนื่อง ประวัติความเป็นมาของการบริโภคหรือการเรียกดูของผู้ใช้ถูกใช้เพื่อสร้างเวกเตอร์ถ่วงน้ำหนักของคุณสมบัติของรายการ น้ำหนักจะเรียนรู้หรือกำหนดให้แตกต่างกันไปตามความสำคัญของคุณลักษณะสำหรับผู้ใช้เฉพาะ น้ำหนักนั้นถูกใช้เพื่อเปรียบเทียบกับน้ำหนักเวกเตอร์ของรายการต่าง ๆ ที่อาจแนะนำ เทคนิคการคำนวณอาจแตกต่างจากค่าเฉลี่ยถ่วงน้ำหนักอย่างง่ายไปจนถึงตัวจําแนกเบส์การวิเคราะห์กลุ่มต้นไม้ตัดสินใจหรือวิธีการที่ซับซ้อนมากขึ้นรวมถึงตาข่ายประสาทเทียม คุณจะต้องตรวจสอบวิธีแก้ปัญหาแบบแพคเกจเพื่อประเมินวิธีการคำนวณและประสิทธิผล
\newline
คุณสมบัติของรายการ:
\newline
ข้อกำหนดที่ชัดเจนคือสามารถอธิบายเนื้อหาจำนวนมากเพื่อใช้ในการจำแนกประเภท สิ่งเหล่านี้สามารถเป็นบูลีนได้ (ภาพยนตร์เป็นภาพเคลื่อนไหวผู้แต่งหนังสือเล่มนี้คือ Clive Cussler วัสดุของเสื้อเชิ้ตเป็นผ้าฝ้าย พวกเขายังสามารถต่อเนื่องเช่นการจัดอันดับภาพยนตร์ที่ได้รับจากแหล่งการจัดอันดับ “การจัดอันดับเฉลี่ย” ของลูกค้ารายอื่นที่บริโภครายการหรือร้อยละหรือจำนวนนาทีในภาพยนตร์ที่พิจารณาว่าเป็น “การกระทำ”
ความสามารถในการรับและรักษาแอตทริบิวต์ของเนื้อหาเป็นทั้งเกณฑ์หลักและข้อจำกัดที่สำคัญของ CF คุณลักษณะบางอย่างอาจหาได้ง่าย แต่คุณสมบัติอื่นอาจไม่ใช่ (เช่นคุณลักษณะที่อัปเดตอย่างต่อเนื่องของอุปกรณ์อิเล็กทรอนิกส์ใหม่หรือคุณลักษณะของภาพยนตร์) ในสภาพแวดล้อมเช่นภาพยนตร์เพลงและข่าวสินค้าคงคลังอาจมีการเปลี่ยนแปลงอย่างรวดเร็วและมีขนาดใหญ่จนการรับและบำรุงรักษาคุณลักษณะนั้นยากหรือมีค่าใช้จ่ายสูงเกินไป
ในบางสภาพแวดล้อมที่มีปริมาณการซื้อขายสูงอาจมีข้อมูลภายนอกอยู่ ตัวอย่างเช่น Pandora Radio ที่ใช้ CF สามารถใช้คุณลักษณะ 400 รายการทั้งเพลงและศิลปินที่จัดทำโดยโครงการจีโนมดนตรีเพื่อค้นหาความคล้ายคลึงกัน มะเขือเทศเน่าเว็บไซต์แนะนำภาพยนตร์เป็นอีกตัวอย่างหนึ่งของการนำ CF มาใช้
\newline
เพิ่มประสิทธิภาพ:
\newline
หากตัวจําแนกมีอะไรที่จะทำงานกับอื่น นอกเหนือจากการซื้อแบบไบนารีหรือไม่ซื้อคำแนะนำผลลัพธ์จะขาดความแม่นยำ วิธีแก้ทั่วไปที่มีค่าในบางสภาพแวดล้อม แต่ไม่รวมอยู่ในสภาพอื่น
\begin{itemize}
\item โพสต์คะแนนการแนะนำ: ผู้ใช้จะได้รับตัวเลือกในการใช้ปุ่มชอบหรือไม่ชอบสำหรับคำแนะนำที่นำเสนอแม้ว่าพวกเขาจะไม่ได้ซื้อหรือเลือก
\item โพสต์ซื้อคะแนน: ผู้ใช้ให้คะแนน (ปกติ 1 ถึง 5) เกี่ยวกับความพึงพอใจของพวกเขากับรายการ
\item โปรไฟล์อาสาสมัครการบริโภคล่วงหน้า: สำหรับแอปพลิเคชันจำนวนมากที่ขอให้ผู้ใช้ล่วงหน้าเพื่อให้ข้อมูลโปรไฟล์บางอย่างเกี่ยวกับการกำหนดลักษณะช่วยในทางเลือกการกรองล่วงหน้าอย่างมาก
\item การทำโปรไฟล์ผู้ใช้: โปรไฟล์ ผู้ใช้สามารถปรับปรุงด้วยการแบ่งส่วนหรือข้อมูลประชากร
\end{itemize}