Hiện nay khi nhắc đến data analysis, data science bạn sẽ nghĩ ngay đến Python, R, SQL, … Mình sẽ hướng dẫn các bạn cách tự học Python cho người mới bắt đầu trong bài viết này.
Mục lục
Python là gì
Python đã vượt Java để trở thành ngôn ngữ lập trình được sử dụng nhiều nhất thế giới. Điều này xảy ra vì sự bùng nổ của ngành phân tích, xử lí số liệu.
Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với mục tiêu làm cho ngôn ngữ lập trình gần với ngôn ngữ tự nhiên hơn. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là ngôn ngữ lập trình dễ học. Được dùng rộng rãi trong phát triển trí tuệ nhân tạo hoặc AI.
Ngôn ngữ bậc cao là gì
Để có thể chạy được một lệnh trên máy tính, bạn phải nói ở một ngôn ngữ mà máy tính hiểu. Thông thường máy tính sẽ hiểu được các đoạn mã nhị phân : 0111001000100… . Tuy nhiên … phải tốn hàng nghìn dòng lệnh nhị phân mới có thể đạt được một tác vụ đơn giản trong máy, cho nên người ta đã sáng chế ra ngôn ngữ lập trình.
Nhưng ngôn ngữ lập trình càng gần mã nhị phân càng… khó hiểu. Vì nó cũng chỉ là sự trừu tượng từ mã nhị phân. Để làm ngôn ngữ lập trình ngày càng dễ hiểu hơn, người ta tiếp tục xây trên những ngôn ngữ bậc thấp này. Kết quả cuối cùng là chúng ta có ngôn ngữ bậc cao (Python JS … ) dễ đọc dễ hiểu hơn.
Vậy để học lập Python cần gì ?
Thông thường người ta chỉ nghĩ đến việc “học python” mà không nghĩ đến việc học những cái “bia kèm lạc” của python. Khi học Python bạn còn cần phải “học” nhiều thứ khác hơn chỉ là Python, vì nếu chỉ cần học python bạn có thể đọc… hướng dẫn sử dụng (documentation) của Python.
Nhưng với góc nhìn là người chưa có kiến thức gì về lập trình, bạn sẽ nhận ra ngay là biết python thôi là chưa đủ ? Vì… bạn không biết python sẽ giúp ích cho bạn trong việc phân tích dữ liệu như thế nào.
Để thực sự học Python một cách “ứng dụng” cho phân tích dữ liệu bạn cần nắm được các điều sau:
- Ngôn ngữ Python (Đọc viết , quy tắt câu cú,…)
- Tư duy và kiến thức lập trình (Căn bản)
- Ứng dụng Python vào phân tích dữ liệu
Python cho người mới bắt đầu
Biến và các kiểu cấu trúc dữ liệu cơ sở.
Định danh (Identifier)
Việc đặt tên được gọi là định danh (Identifier)
Identifier bắt đầu bằng các ký tự A-Z, a-2 hoặc _, tiếp đó là các ký tự chữ, ký tự số 0-
9.
Identifier có phân biệt chữ hoa chữ thường.
Ví dụ: X, x, Spam, spam, spAm, total_of_eggs, Total_Of_Eggs.
Không sử dụng các kí tự dấu câu như @, #, $, %…
Một số quy tắc cho việc định danh:
Không sử dụng các kí tự dấu câu như @, #, $, %…
Tên class bắt đầu bằng chữ hoa. Tất cả các identifier bắt đầu bằng chữ thường.
Tên function viết thường, các từ nối với nhau bằng dấu _
Không sử dụng các từ khóa (keyword) trong python khi đặt tên bất cứ identifier nào
Số không thể bắt đầu bằng tên biến.
Biến – Variable
Khái niệm biến
- Là một đơn vị lưu trữ tạm thời trên bộ nhớ của máy tính, lưu trữ các giá trị có thể được dùng để tính toán xử lý.
- Biến có thể lưu trữ liệu ở dạng chữ, số…
- Gán các kiểu dữ liệu khác nhau cho biến, ta tạo ra các kiểu số nguyên, số thập phân, chuỗi…
- Cần phải khai báo biến khi sử dụng
- Syntax: variable_name = <value>
- Cùng một lúc ta có thể đặt nhiều biến và gán nhiều giá trị:
Cùng một lúc ta có thể đặt nhiều biến và gán nhiều giá trị.
Cú pháp: biến_1, biến_2, biến_3,… = <giá_trị_1>, <giá_trị_2>, <giá_trị_3>,…
Ví dụ:
Các kiểu dữ liệu cơ bản
- Number – Kiểu số
- Boolean – Kiểu True/False (Thường sử dụng trong cấu trúc điều kiện)
- String – Kiểu chuỗi
Các kiểu dữ liệu danh sách
- List, Tuple, Dictionary
Number – kiểu số
- int
Ví dụ: Hệ cơ số 10 (9,-25), hệ cơ số 8 (0o80, -0o490), hệ cơ số 16 (0x50, -0XCAFE26). Trong đó: Tiền tố và kí tự trong hệ thập lục phân không phân biệt chữ hoa và chữ thường.
- long (không tồn tại ở python 3)
Ví dụ: 51924361L, -0x19323L, -0o52318172735L
Thêm hậu tố L để biểu diễn số nguyên kiểu long
- float
Ví dụ: 1.2, -12.9, 21.3+e18, -32.54e100
- complex (số phức)
Ví dụ: 3 + 4j, 3.14j, 3e + 26j, 9.322e-36j
- Trong đó:
Complex number là một cặp có thứ tự là các số thực (real floating-point) ký hiệu x+yj,
với x là real và y imag.
Boolean
- Kiểu luận lý
- Chỉ có 2 giá trị: True/False
Ví dụ:
String – Chuỗi
- Là một chuỗi các ký tự được đặt trong nháy kép “ ” hoặc nháy đơn ’ ’
- Khai báo và khởi tạo chuỗi:
tên_chuỗi = <giá_trị>
- Ví dụ:
Các phương thức
- Tạo chuỗi con: sử dụng [index], [from:to], [from:]
Với index (chỉ mục) bắt đầu từ 0. Chiều dài chuỗi thì -1 (do bắt đầu từ 0)
Ví dụ:
- Nối chuỗi: sử dụng toán tử +
- Lặp chuỗi: sử dụng toán tử *
<9>
- Chiều dài chuỗi: sử dụng len()
Định dạng chuỗi
<11>
< : left-align text in the field
^ : center text in the field
> : right-align text in the field
s – strings
d – decimal integers (base-10)
f – floating point display
c – character
b – binary
o – octal
x – hexadecimal with lowercase letters after 9
X – hexadecimal with uppercase letters after 9
e – exponent notation
Tham khảo string.format(): https://www.geeksforgeeks.org/python-format-function/
Module
Module (mô-đun) là một file chứa những câu lệnh Python và các định nghĩa. Hay đơn giản hơn module là một file python bình thường, thậm chí đó là file python trống nó vẫn là một module. Một file chứa code Python, ví dụ <meo_module.py> được gọi là module và tên của module sẽ là <meo_module> .
Module của Python có thể không nhất thiết phải là file Python mà có thể là những file được viết bởi những ngôn ngữ lập trình khác như C, C++,… Ví dụ như (Java – Jython). Những module như vậy được gọi là extension module, và thường được sử dụng cho việc lưu các external library. Module được sử dụng khi muốn chia chương trình lớn thành những file nhỏ hơn để, tái sử dụng code, dễ quản lý và tổ chức.
Lưu ý khi đặt tên module, ngoài việc phải tuân thủ các quy tắc đặt tên file. Ta còn phải chú ý, khi goi
Ví dụ:
Import module
Có thể nhập các định nghĩa từ module này vào module khác (file này vào trong file khác) hoặc vào trình thông dịch trong Python. Chúng ta sử dụng từ khóa import
để thực hiện việc này. Đây là câu lệnh cơ bản nhất khi làm việc với các module Python.
Ví dụ:
Đầu tiên ta có một module (file python) như thế này.
Và một module (file python) <meo_module_2.py>. Chạy module này.
Import giúp chúng ta gọi một module khác. Ví dụ trên là gọi một module chung một thư mục. Để gọi cụ thể một function (hàm) trong module đó ta dùng toán tử “.”. Với cú pháp:
<Tên_module>.<Tên_function>(Parameter_list)
Ta có thể import nhiều module một lúc trên một dòng lệnh
<18>
Tuy nhiên, điều này không được khuyến khích vì không rõ ràng ta có thể import trên nhiều dòng lệnh.
<19>
Sửa tên module
Chúng ta đã đổi tên module <meo_module> là <meo>, điều này có thể giúp tiết kiệm thời gian trong một số trường hợp. Chú ý, việc đổi tên này chỉ áp dụng trong phạm vi lệnh, chứ không thực sự đổi tên module trong Lib. Khi đã đổi tên, phải gõ đúng tên module, <meo_module> lúc này không được công nhận trong phạm vi lệnh nữa, mà bạn phải dùng meo mới đúng.
<20>
Lệnh from…import trong Python
Có thể nhập một function cụ thể từ module mà không cần nhập toàn bộ module. Khi dung theo cách này, chúng ta không cần dung toán tử “.”.Ví dụ:
<21>
Nhập nhiều function từ một module. Chúng ta dung “,”. Ví dụ:
Ở hai trường hợp trên, ta chỉ import một hoặc hai thứ trong module math thôi. Thế nếu ta muốn import hết tất cả thì sao?
Giả sử module a có một tỷ function thì việc sử dụng dấu phẩy (,) gần như là bất khả thi. Vậy thì ta sử dụng import *.
Chúng ta nhập tất cả các định nghĩa từ module math nên tất cả tên đều có thể nhìn thấy trong phạm vi này, ngoại trừ những tên bắt đầu bằng dấu gạch dưới _. Nhập mọi thứ với dấu hoa thị * không phải là một thói quen lập trình tốt. Vì nó có thể dẫn đến những định nghĩa bị trùng lặp cho cùng một định danh và khiến cho việc đọc code trở nên khó khăn hơn. Đó là lý do visual trả về khuyến cáo không hợp chuẩn dù kết quả là đúng. Lưu ý: Ở Python 2.X, câu lệnh from module import * có thể sử dụng ở trong một function, tuy nhiên điều này không được xảy ra ở Python 3.X.
Về kết quả lệnh import <module> và from <module> import * giống nhau ở một điểm là import tất cả mọi thứ trong module. Nhưng khác nhau về cách thực hiện.
Khi dùng import <module>. Về bản chất, là ta cho chạy module đó trong file yêu cầu import và tạo một module object lưu dưới một biến với tên là biến đó. Module object này có các attribute và method lần lượt là các biến và hàm. Vì lý do đó nên khi gọi một function bằng cách này ta phải dùng cú pháp: <Tên_module>.<Tên_function>(Parameter_list)
Khi dùng from math import * giúp chúng ta không cần phải sử dụng thông qua module object. Vì lý do đó nên khi gọi một function bằng cách này ta có thể gọi trực tiếp function đó. Mà không cần dùng cú pháp: <Tên_module>.
Một trường hợp hi hữu là ta có thể đặt tên module trùng với module của python. Khi đó python sẽ ưu tiên module của chúng ta. Nhưng vấn đề xảy ra khi ta muốn gọi chính xác module (của python) đó mà nó lại gọi module của chúng ta. Danh sách module python. Ví dụ:
Khi ta import module của python.
Khi ta import một module do ta tạo có tên và function trùng với module của python bên trên.
Để hiểu được trường hợp này ta phải hiểu rõ về đường dẫn tìm kiếm module Python.
Khi nhập module, Python sẽ tìm một vài nơi theo thứ tự:
Thư mục hiện tại.
PYTHONPATH (một biến môi trường với danh sách thư mục).
Thư mục mặc định có vị trí phụ thuộc vào chọn lựa trong quá trình cài đặt.
Ở đây module base64 được tạo ra và để trùng thư mục với file gọi module nên được ưu tiên. Còn module base64 của python thì nằm ở PYTHONPATH. Nên không được gọi.
File trong Python
Trong Python, file có 2 loại:
Text File
- Được cấu trúc như một dãy các dòng, mỗi dòng bao gồm một dãy các kí tự và một dòng tối thiểu là một kí tự dù cho dòng đó là dòng trống.
Binary File
- Các file này chỉ có thể được xử lí bởi một ứng dụng biết và có thể hiểu được cấu trúc của file này. Phạm vi của bài viết này là tìm hiểu về text file
Ở đây ta dùng hàm open để mở file. Chúng ta chú ý đến 2 tham số chính: file và mode.
open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Đầu tiên muốn thao tác file ta phải mở file. Dĩ nhiên, muốn mở thì ta phải có file đó sẵn. Có hai cách mở file
- Mở file cùng thư mục với file hiện tại
- Mở file ở thư mục khác
Khi làm việc với các tệp ở chế độ văn bản, nên chỉ định loại mã hóa. Ví dụ:
Khi không dùng:
Các mode mở file.
MODE | MÔ TẢ |
‘r’ | Chế độ chỉ được phép đọc. |
‘r+’ | Chế độ được phép đọc và ghi |
‘rb’ | Mở file chế độ đọc cho định dạng nhị phân. Con trỏ tại phần bắt đầu của file |
‘rb+’ ‘r+b’ | Mở file để đọc và ghi trong định dạng nhị phân. Con trỏ tại phần bắt đầu của file |
‘w’ | Mở file để ghi. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ |
‘w+’ | Mở file để đọc và ghi. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ |
‘wb’ | Mở file để ghi cho dạng nhị phân. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ |
‘wb+’ ‘w+b’ | Mở file để đọc và ghi cho dạng nhị phân. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ |
‘a’ | Mở file chế độ ghi tiếp. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó. |
‘a+’ | Mở file chế độ đọc và ghi tiếp. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó. |
‘ab’, | Mở file chế độ ghi tiếp ở dạng nhị phân. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó. |
‘ab+’ ‘a+b | Mở file chế độ đọc và ghi tiếp ở dạng nhị phân. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó. |
‘x’ | Mở file chế độ ghi. Tạo file độc quyền mới (exclusive creation) và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi |
‘x+’ | Mở file chế độ đọc và ghi. Tạo file độc quyền mới (exclusive creation) và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi |
‘xb’ | Mở file chế độ ghi dạng nhị phân. Tạo file độc quyền mới và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi |
‘xb+’ ‘x+b’ | Mở file chế độ đọc và ghi dạng nhị phân. Tạo file độc quyền mới và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi |
‘b’ | Mở file ở chế độ nhị phân |
‘t’ | Mở file ở chế độ văn bản (mặc định |
Đóng File trong Python
Sau khi thực hiện xong các thao tác với file thì bạn cần đóng nó lại.
Đóng file để đảm bảo quy chế đóng mở và giải phóng bộ nhớ cho chương trình nên điều này là cần thiết. Khi một file được mở, hệ điều hành sẽ khóa file đó lại, không cho các chương trình khác có thể xử lí trên file đó nữa nhằm đảm bảo tính nhất quán của dữ liệu.
Việc đóng file được xây dựng trong Python bằng hàm close().
Dẫu vậy, nếu chương trình kết thúc. Tất cả các file đang mở cũng sẽ được đóng lại. Tuy nhiên, sử dụng phương thức close() để đóng một file vẫn tốt hơn.
Đọc File trong Python
Tương tự ghi file, để đọc một file ta cần mở file bằng cú pháp để đọc.
Dùng phương thức read
Sử dụng phương thức read(size) để lấy về dữ liệu có kích thước bằng size. Nếu để trống tham số trống hoặc số âm thì nó sẽ đọc hết file đồng thời đưa con trỏ file tới cuối file hoặc nếu file quá lớn thì nó sẽ đọc đến khi giới hạn của bộ nhớ cho phép.
Cú pháp: <File>.read(size)
Với size = -1
Dùng readline(). Phương thức này cho phép đọc từng dòng trong file:
Cú pháp:
<File>.readline()
Ghi File trong Python
Phương thức write
Cú pháp:
<File>.write(text)
Dùng mode ‘a’ để tránh mất nội dung ban đầu. Nếu muốn ghi đè thì dùng mode w hoặc tham khảo bảng mode bên trên.
Một số phương thức làm việc với File trong Python
PHƯƠNG THỨC | MÔ TẢ |
close() | Đóng một file đang mở. Nó không thực thi được nếu tập tin đã bị đóng. |
fileno() | Trả về một số nguyên mô tả file (file descriptor). |
flush() | Xóa sạch bộ nhớ đệm của luồng file. |
isatty() | Trả về TRUE nếu file được kết nối với một thiết bị đầu cuối. |
read(n) | Đọc n kí tự trong file. |
readable() | Trả về TRUE nếu file có thể đọc được. |
readline(n=-1) | Đọc và trả về một dòng từ file. Đọc nhiều nhất n byte/ký tự nếu được chỉ định. |
readlines(n=-1) | Đọc và trả về một danh sách các dòng từ file. Đọc nhiều nhất n byte/ký tự nếu được chỉ định. |
seek(offset,from=SEEK_SET) | Thay đổi vị trí hiện tại bên trong file. |
seekable() | Trả về TRUE nếu luồng hỗ trợ truy cập ngẫu nhiên. |
tell() | Trả về vị trí hiện tại bên trong file. |
truncate(size=None) | Cắt gọn kích cỡ file thành kích cỡ tham số size. |
writable() | Trả về TRUE nếu file có thể ghi được. |
write(s) | Ghi s kí tự vào trong file và trả về. |
writelines(lines) | Ghi một danh sách các dòng và file. |
Kiểm soát con trỏ file
Con trỏ file rất quan trọng, nó dẫn đường cho việc đọc file, viết file.
Phương thức seek
Cú pháp:
<File>.seek(offset)
Công dụng: Phương thức này giúp ta di chuyển con trỏ từ vị trí đầu file qua offset kí tự. Parameter offset phải là một số tự nhiên. Nhờ phương thức này, ta có thể ghi nội dung từ bất cứ đâu trong file. Và từ đó ta có thể đọc lại file sau khi ta đưa con trỏ file xuống cuối file.
Các nguồn tự học Python
Ngôn ngữ Python
W3 Schools
Nói đến việc học ngôn ngữ thì không thể không nhắc đến w3schools, giao diện đơn giản, cách trình bày trực quan dễ hiểu không rườm rà văn tự.
w3schools sẽ giúp bạn học python theo cách… không thể thẳng hơn. Cấu trúc của một bài học w3school bao gồm:
- Mô tả câu lệnh
- Ví dụ câu lệnh
- Try it yourself (Tự bạn chạy thử lệnh)
Trực quan dễ hiểu nhưng hiệu quả, nhìn thấy câu lệnh và cách nó hoạt động như thế nào. Chỉ với một cách thức đơn giản như vậy thôi nhưng w3schools đã trở thành nguồn tư liệu tham khảo cho hàng triệu người.
Python Documentation
Thường người ta hay bỏ qua… khi mua một món đồ nào đó, với Python cũng vậy. Việc đọc tài liệu hướng dẫn sử dụng của Python là cực kì hữu ích. Thậm chí nếu đã là người có kinh nghiệm lập trình, chỉ cần đọc tài liệu hướng dẫn thôi bạn đã có thể học được Python rồi
Tư duy lập trình
Khanacademy
Khanacademy là trang dạy học miễn phí online, phi lợi nhuận với lượng khoá học cực kì đa dạng, trải dài nhiều chủ đề và đều có chất lượng cao (Thậm chí còn tốt hơn một số khoá trả tiền).
Để có thể học được trên Khanacademy, bạn chỉ cần đăng kí một account, sau đó đăng nhập vào và chọn khoá học.
Youtube của Freecodecamp
Lại là freecodecamp, nhưng lần này chúng ta lại có một nguồn tư liệu khác, chính là kênh youtube của freecodecamp.
Điều đặc biệt của kênh youtube freecodecamp là các chủ đề thường chỉ gói gọn trong chỉ một video. Bạn có thể học một chủ đề với tốc độ cực kì nhanh trên freecodecamp. Khoá học về computer programming trên freecodecamp chỉ vỏn vẹn … 1 tiếng 59 phút.
Bên cạnh đó, học viện Phân tích dữ Liệu INDA tặng miễn phí Khoá học Python trị giá 2599k cho các bạn đăng ký bất kỳ khoá học nào về Phân tích Dữ liệu tại học viện.
Đăng ký ngay để nhận tư vấn chi tiết