Chào các thành viên Mì AI, chúng ta cùng quay lại series đi tiếp về DA-DS nhé. Trong bài trước [tại đây] chúng ta đã tìm hiểu, cài đặt Python và viết một ứng dụng nhỏ để đọc tệp CSV rồi. Trong bài này chúng ta sẽ cùng thảo luận một số thao tác cơ bản với dữ liệu bằng thư viện Pandas nhé
Mình cũng xin nhắc lại là Mì Ai cũng xin tiếp cận DA theo một cách hoàn toàn là Mì ăn liền cho hợp phong cách. Các khái niệm sẽ đều được đơn giản hóa để các bạn mới bắt đầu cũng có thể tham khảo và sử dụng được. Mong các cao thủ đi qua xin bỏ qua
Phần 1 – Khái niệm về Pandas, Series và DataFrame
Về thư viện PandasNhư đã nói trong buổi trước, mọi người nhắc đến DA là có 2 thư viện được sử dụng nhiều là. gấu trúc và numpy. Để các bạn dễ hiểu thì cứ nhớ là
- gấu trúc. hỗ trợ thư viện trợ giúp đắc lực trong thao tác dữ liệu. Thư viện này được sử dụng rộng rãi trong nghiên cứu nghiên cứu phát triển các ứng dụng về khoa học dữ liệu
- cục mịch. là một thư viện cốt lõi phục vụ cho khoa học máy tính của Python, hỗ trợ tính toán các mảng nhiều chiều, có kích thước lớn so với các hàm đã được tối ưu áp dụng lên các mảng nhiều chiều đó
Để làm việc với 2 thằng này cho tiện thì cứ mở project mới là các bạn cài đặt nó luôn bằng lệnh
Về khái niệm Series và Dataframe
pip install pandas numpy
Nếu hiểu một cách đơn giản thì Series là các cột trong Excel còn Dataframe chính là một tập hợp các cột và chính là Trang tính trong Excels đó. Còn nếu bạn đã làm quen với CSDL thì Series là cột còn Dataframe chính là bảng. Nghe bắt đầu quen thuộc rồi đúng không?
Tuy nhiên, có một chút đặc biệt cần lưu ý như sau
- Mỗi df luôn có một cột ngoài cùng bên trái gọi là cột chỉ mục [chỉ mục] như trong bảng excel thì các bạn nhìn bên trái nó cũng có một cái cột tăng dần
- Index is a data stringđứng đầu của Dataframe. Ta có thể đặt một cột bất kỳ làm chỉ mục cho df. Còn nếu không đặt thì hệ thống sẽ sinh ra một cột số tăng dần [0, 1, 2, …,n] làm chỉ mục cho một khung dữ liệu
Dataframe sẽ hay được biểu diễn bằng biến có tên “df” cho dễ gợi nhớ nhé [còn thực tế bạn thích đặt tên gì cho nó cũng được như vậy. vàng, bạc, kim cương hay mì ăn liền…]
Rồi, hiểu mì ăn liền là vậy còn nếu các bạn muốn đọc chuyên sâu hơn thì mình có sẵn link full HD không che nhé. at here
Phần 2 – Giới thiệu một số lệnh thao tác chính trên Dataframe với thư viện Pandas
Ở đây mình cũng nói luôn là thư viện Pandas khá lớn với vô số lệnh và riêng việc liệt kê ra thôi cũng đã hết mấy trang A4 kaka. Do đó trong bài viết này mình chỉ giới thiệu một số lệnh chính để các bạn hình dung cách làm việc với thư viện Pandas như thế nào thôi, các bạn muốn tìm hiểu thêm thì có thể đọc tại link chính thức của Pandas luôn cho máu
Dataframe can be create by many way other nhau
Đầu tiên ta có thể tạo df từ một mảng dữ liệu nhập ngay trên phần mềm [cách này thông thường mình cũng không sử dụng vì có xu hướng làm việc với các tệp dữ liệu lớn]. Cách tạo ra df bằng cách tạo các mảng dữ liệu cho các cột, từ đó gắn cột vào df. Ví dụ mã nguồn như sau
Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Kết quả của df1 và df2 sẽ có dạng như sau
col1 col2 0 1 3 1 2 4
Cách thứ hai bạn có thể tải dữ liệu từ tệp excel, csv vào trong khung dữ liệu. Thông thường mình hay sử dụng tệp csv để giảm dung lượng dữ liệu bắt đầu. Trong bài trước mình đã hướng dẫn cụ thể về công việc này thông qua việc sử dụng lệnh đọc tệp dữ liệu như sau
Code language: JavaScript [javascript]
df = pd.read_csv[path + '\S2_DataFile.csv']
Ngoài ra Python còn hỗ trợ kết nối đến CSDL để lấy thông tin, thuộc loại CSDL để có thể tìm các mã tương ứng nhé.
Chúng ta đã hoàn thành phần tạo df, bây giờ mình sẽ đi tiếp các lệnh khác của gấu trúc trên df. Để các bạn dễ hiểu mình sẽ nhóm vào các nhóm đúng theo tư tưởng của SQL nhé kaka
Các câu lệnh SELECTTrong phần này, bạn sẽ sử dụng các lệnh để xuất dữ liệu trong df [hoặc gán cho bất kỳ biến nào mà một phần dữ liệu khác được trích xuất ra của df]
Ra lệnh trong df ra màn hình
Code language: PHP [php]
# In toàn bộ df ra màn hình print[df] # In 10 dòng dầu tiên để kiểm tra dữ liệu print[df.head[]] # In 5 dòng dầu tiên để kiểm tra dữ liệu print[df.head[5]] # In 10 dòng cuối cùng của dữ liệu print[df.tail[]]
Đoạn chương trình trên bạn chú ý 2 lệnh là đầu và đuôi. Đúng với tên của nó, dùng để ra các bản ghi đầu tiên và cuối cùng [đuôi] của df
View data of a column
Để xem dữ liệu một cột ta sử dụng df [‘’]. Ví dụ:
Code language: PHP [php]
# Lấy dữ liệu cột có tên col1 và in ra màn hình print[df['col1']] # Lấy 4 dòng đầu tiên của cột col2 và in ra màn hình print[df['col2'].head[4]] # Lấy dữ liệu 2 cột col1 và col2 đồng thời print[df['col1','col2']]
View data of a line
Để xem dữ liệu của một dòng, ta sẽ xem theo chỉ mục của df. Ví dụ ta có một df như sau
Bây giờ giả sử muốn lấy các dòng bằng lệnh như sau
Code language: PHP [php]
# Lấy dòng có index = 5 print[df.iloc[5]] # Lấy các dòng có index từ 6 đến 10 print[df.iloc[6:11]] # Chú ý là 11 nhé
If the column index not a number which is other data type, ta used df command. lộc. Giả sử ta có một df như sau
Check tra data a column
Đôi khi chúng ta muốn tìm hiểu dữ liệu của một cột là gì?
Code language: CSS [css]
#ví dụ mã code để xem thông tin của cột GDP trong dataframe #tên là df: print[df['GDP'].describe[]] # Lấy thông tin mô tả của cả df print[df.describe[]]
Dữ liệu trả về sẽ có dạng một bảng bao gồm các thông tin và ý nghĩa của các thông tin mà mình có thể giải thích ở bảng bên dưới
Nếu muốn tìm hiểu kỹ hơn về các bảng giá trị thống kê, các bạn có thể vào liên kết này nhé
Lọc dữ liệu trong dataframe
Các bạn cứ cấu hình sử dụng phần bộ lọc dữ liệu này như là câu SELECT kèm theo WHERE ấy
Giả sử ta có một khung dữ liệu như sau
# Lấy các nhân sử ở vùng East print[df[df['region']=='East']] # Lấy các nhân viên có sales trên 50000 print[df[df['sales']> 50000]]
Code language: PHP [php]
Sắp xếp dữ liệu
To sort data ta used sort_values[] command as after
Code language: PHP [php]
# Xếp dữ liệu tăng dần theo cột col1 df.sort_values[by=['col1']] # Xếp dữ liệu tăng dần theo cột col1 và col2 df.sort_values[by=['col1','col2']] # Xếp dữ liệu theo thứ tự giảm dần theo cột col1 df.sort_values[by='col1', ascending=False] # Tham số ascending=False
Cập nhật giá trị cột
Gọi là cập nhật nhưng thực chất là chúng ta thay đổi giá trị của các cột theo yêu cầu của bài toán yêu cầu thôi. Chúng ta có thể thực hiện các thao tác sau
0Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Change the index of df
Với món này chúng ta có thể thực hiện các thao tác
1Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Xử lý thiếu dữ liệu
Trong quá trình làm việc với dữ liệu hàng ngày chúng ta sẽ gặp rất nhiều dữ liệu bị thiếu [trống, NaN…] và chúng ta phải xử lý nó trước khi có thể tiếp tục làm việc với dữ liệu
Có 2 cách chính để xử lý cái thiếu dữ liệu này là. cắt luôn [Drop] hoặc thay thế [Replace]
The use ta has df as after
Bây giờ chúng ta có thể thực hiện xóa dữ liệu bị thiếu bằng lệnh dropna as after
2Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Hoặc cũng có thể thay thế các giá trị NaN như sau
3DELETE câu lệnhCode language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
To delete line or column in pandas ta all used chung a command is drop as after
4INSERT câu lệnh
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Code language: PHP [php]
Add new data line
Add new data lines to Dataframe ta used command append for dataframe. Ví dụ
5Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Add a new data column
Việc thêm một cột dữ liệu mới trong dataframe khá đơn giản, các bạn hầu như không cần làm gì mà thực hiện theo kiểu “cứ thế mà gán”. Ví dụ mình có 1 df như sau
Bây giờ giả sử muốn thêm cột,ta sẽ thực hiện như sau
6Các câu lệnh truy xuất dữ liệu phức tạp hơnCode language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Data Group
To the data group ta used command groupby. Giả sử ta có dataframe after
Bây giờ ta có thể nhóm theo nhóm như sau
7Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
bảng tổng hợp
Cái này mình cũng không biết chuyển sang tiếng Việt như nào cho hợp lý. Đại khái là nó tạo ra 1 góc nhìn khác từ một bảng dữ liệu
Ví dụ ta có dataframe
Giả sử ta muốn lấy lại thông tin theo tên người làm chỉ mục, ta sử dụng lệnh
8Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
9Code language: PHP [php]
# Tạo một dictionary d = {'col1': [1, 2], 'col2': [3, 4]} # Tạo một dataframe df1 từ dictionary đó df1 = pd.DataFrame[data=d] # Tạo trực tiếp df2 từ lệnh df2 = pd.DataFrame[np.array[[[1, 2], [3, 4]]], columns=['col1', 'col2']]
Rồi, trên đây là các thao tác chính với dataframe, mình liệt kê chỉ với mục đích các bạn có cái nhìn tổng quát về những gì ta có thể làm với dữ liệu. Để tìm hiểu chi tiết các bạn có thể tham khảo tài liệu của pandas và cũng nên hỏi chị Gúc gờ mọi lúc mọi nơi khi cần thiết nhé. Học lập trình chứ không phải học thuộc lòng ngôn ngữ nên các bạn cũng không cần thiết phải cố mà nhớ cho mệt
Trong các bài tiếp theo chúng ta sẽ học cách vẽ các loại đồ thị với pandas và matplotlib nhé. Hẹn gặp lại các bạn