Đây là cách thường ít được áp dụng vì khi làm việc chúng ta thường đọc dữ liệu từ những file dữ liệu có sẵn được lưu dưới dạng
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient7 hoặc
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient8. Nhưng đôi khi chúng ta cũng cần khởi tạo dataframe từ đầu chẳng hạn như bạn muốn lưu kết quả log file của chương trình vào một dataframe và save dưới dạng
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient7 sau đó. Việc lưu trữ dưới dạng dataframe sẽ giúp cho bạn dễ dàng thực hiện các phép lọc, thống kê và visualize trực tiếp từ dataframe một cách dễ dàng hơn.
Đưới đây mình sẽ giới thiệu hai cách khởi tạo dataframe chính trực tiếp từ câu lệnh
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]0.
2.1.1. Khởi tạo thông qua dictionary¶
Về định dạng dictionary chúng ta đã được học ở chương phụ lục - dictionary. Nội dung của dictionary sẽ gồm key là tên cột và value là list giá trị của cột tương ứng.
import pandas as pd from IPython.display import display pd.set_option['max_colwidth', 40] pd.set_option['precision', 5] pd.set_option['max_rows', 10] pd.set_option['max_columns', 30] dict_columns = { 'contents':['Author', 'Book', 'Target', 'No_Donation'], 'infos':['Pham Dinh Khanh', 'ML algorithms to Practice', 'Vi mot cong dong AI vung manh hon', 'Community'], 'numbers':[1993, 2021, 1, 2] } df = pd.DataFrame[dict_columns] display[df]
Author | Pham Dinh Khanh | 1993 |
Book | ML algorithms to Practice | 2021 |
Target | Vi mot cong dong AI vung manh hon | 1 |
No_Donation | Community | 2 |
Hàm display của
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]1 giúp cho DataFrame hiển thị được trên code khi run dưới dạng script file. các options của
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]2 lần lượt có tác dụng:
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
3: Qui định chiều rộng tối đa của một cột.# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
4: Độ chính xác của các sau dấu phảy của các cột định dạng float.# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
5,# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
6: Lần lượt là độ số lượng cột và số lượng dòng tối đa được hiển thị.
Tiếp theo chúng ta sẽ khởi tạo thông qua list các dòng.
2.1.2. Khởi tạo thông qua list các dòng¶
Theo cách này chúng ta sẽ truyền vào data là một list gồm các tupple mà mỗi tupple là một dòng dữ liệu. đối số
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]7 sẽ qui định tên cột theo đúng thứ tự được qui định ở mỗi dòng.
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df
Author | Pham Dinh Khanh | 1993 |
Book | ML algorithms to Practice | 2021 |
Target | Vi mot cong dong AI vung manh hon | 1 |
No_Donation | Community | 2 |
Hàm display của
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]1 giúp cho DataFrame hiển thị được trên code khi run dưới dạng script file. các options của
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]2 lần lượt có tác dụng:
# Lựa chọn 5 dòng đầu và 5 cột đầu của df
df.iloc[:5, :5]
3: Qui định chiều rộng tối đa của một cột.
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]4: Độ chính xác của các sau dấu phảy của các cột định dạng float.
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
5,# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
6: Lần lượt là độ số lượng cột và số lượng dòng tối đa được hiển thị.Tiếp theo chúng ta sẽ khởi tạo thông qua list các dòng.
2.1.2. Khởi tạo thông qua list các dòng¶
Theo cách này chúng ta sẽ truyền vào data là một list gồm các tupple mà mỗi tupple là một dòng dữ liệu. đối số
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
7 sẽ qui định tên cột theo đúng thứ tự được qui định ở mỗi dòng.import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df
Để lưu trữ một dataframe dưới dạng một file
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient
7 chúng ta dùng hàm# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
9 tham số truyền vào là đường link save file. Chẳng hạn bên dưới ta lưu dataframe vào một file “data.csv” cùng thư mục với file notebook.2.1.3. Đọc dữ liệu từ file¶
Chúng ta cũng có thể khởi tạo bảng bằng cách đọc file
# Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4 df.iloc[5:10, 2:4]
0 thông qua hàm# Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4 df.iloc[5:10, 2:4]
1. Hàm này không chỉ đọc được những file có trên máy tính của bạn mà còn có thể download những file có trên mạng. Bên dưới chúng ta thực hành đọc dữ liệu về giá nhà ở tại Boston từ bộ dữ liệu# Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4 df.iloc[5:10, 2:4]
2. Bộ dữ liệu này gồm các trường:crim: Tỷ lệ phạm tội phạm bình quân đầu người theo thị trấn.
-
zn: Tỷ lệ đất ở được quy hoạch cho các lô trên 25.000 foot square.
indus: Tỷ lệ diện tích thuộc lĩnh vực kinh doanh phi bán lẻ trên mỗi thị trấn.
chas: Biến giả, = 1 nếu được bao bởi sông Charles River, = 0 nếu ngược lại.\[1000[\text{Bk} - 0.63]^2\] ở đây \[\text{Bk}\] là tỷ lệ người da đen trong thị trấn.
nox: Nồng độ khí Ni-tơ oxit.
rm: Trung bình số phòng trên một căn hộ.
age: Tỷ lệ căn hộ được xây dựng trước năm 1940.
0.00632 | 18.0 | 2.31 | 0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1 | 296 | 15.3 | 396.90 | 4.98 | 24.0 |
0.02731 | 0.0 | 7.07 | 0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2 | 242 | 17.8 | 396.90 | 9.14 | 21.6 |
0.02729 | 0.0 | 7.07 | 0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2 | 242 | 17.8 | 392.83 | 4.03 | 34.7 |
0.03237 | 0.0 | 2.18 | 0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3 | 222 | 18.7 | 394.63 | 2.94 | 33.4 |
0.06905 | 0.0 | 2.18 | 0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3 | 222 | 18.7 | 396.90 | 5.33 | 36.2 |
age
dis
rad
tax
ptratio
Hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df00 sẽ cho ta biết định dạng và số lượng quan sát
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df01 của mỗi trường trong dataframe.
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB
Hoặc chúng ta có thể dùng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df02 để kiểm tra định dạng dữ liệu các trường của một bảng.
# Check for datatype df.dtypes
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object
Nếu muốn kiểm tra chi tiết hơn những thống kê mô tả của dataframe như trung bình, phương sai, min, max, median của một trường dữ liệu chúng ta dùng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df03
# Thống kê mô tả dữ liệu df.describe[]
506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 | 506.00000 |
3.61352 | 11.36364 | 11.13678 | 0.06917 | 0.55470 | 6.28463 | 68.57490 | 3.79504 | 9.54941 | 408.23715 | 18.45553 | 356.67403 | 12.65306 | 22.53281 |
8.60155 | 23.32245 | 6.86035 | 0.25399 | 0.11588 | 0.70262 | 28.14886 | 2.10571 | 8.70726 | 168.53712 | 2.16495 | 91.29486 | 7.14106 | 9.19710 |
0.00632 | 0.00000 | 0.46000 | 0.00000 | 0.38500 | 3.56100 | 2.90000 | 1.12960 | 1.00000 | 187.00000 | 12.60000 | 0.32000 | 1.73000 | 5.00000 |
0.08204 | 0.00000 | 5.19000 | 0.00000 | 0.44900 | 5.88550 | 45.02500 | 2.10018 | 4.00000 | 279.00000 | 17.40000 | 375.37750 | 6.95000 | 17.02500 |
0.25651 | 0.00000 | 9.69000 | 0.00000 | 0.53800 | 6.20850 | 77.50000 | 3.20745 | 5.00000 | 330.00000 | 19.05000 | 391.44000 | 11.36000 | 21.20000 |
3.67708 | 12.50000 | 18.10000 | 0.00000 | 0.62400 | 6.62350 | 94.07500 | 5.18843 | 24.00000 | 666.00000 | 20.20000 | 396.22500 | 16.95500 | 25.00000 |
88.97620 | 100.00000 | 27.74000 | 1.00000 | 0.87100 | 8.78000 | 100.00000 | 12.12650 | 24.00000 | 711.00000 | 22.00000 | 396.90000 | 37.97000 | 50.00000 |
2.1.4. Export to CSV, EXCEL, TXT, JSON¶
Đây là câu lệnh được sử dụng khá phổ biến để lưu trữ các file dữ liệu từ dataframe sang những định dạng khác nhau. Những định dạng này sẽ cho phép chúng ta load lại dữ liệu bằng các hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df04 sau đó.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient
2.2. Thao tác với dataframe¶
2.2.1. Truy cập dataframe¶
Chúng ta có thể truy cập dataframe theo hai cách.
Truy cập theo slice index: Theo cách này chúng ta chỉ cần truyền vào index của dòng và cột và sử dụng hàm import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
05 để trích xuất ra các dòng và cột tương ứng. Cách lấy slice cho rows và columns hoàn toàn tương tự như truy cập slice index trong list. Theo cách này chúng ta chỉ cần truyền vào index của dòng và cột và sử dụng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df05 để trích xuất ra các dòng và cột tương ứng. Cách lấy slice cho rows và columns hoàn toàn tương tự như truy cập slice index trong list.
Note:
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df06 là viết tắt của indice location, tức là truy cập quan indice.
# Lựa chọn 5 dòng đầu và 5 cột đầu của df df.iloc[:5, :5]
0.00632 | 18.0 | 2.31 | 0 | 0.538 |
0.02731 | 0.0 | 7.07 | 0 | 0.469 |
0.02729 | 0.0 | 7.07 | 0 | 0.469 |
0.03237 | 0.0 | 2.18 | 0 | 0.458 |
0.06905 | 0.0 | 2.18 | 0 | 0.458 |
# Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4 df.iloc[5:10, 2:4]
2.18 | 0 |
7.87 | 0 |
7.87 | 0 |
7.87 | 0 |
7.87 | 0 |
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df0
0.0 | 0 |
0.0 | 0 |
0.0 | 0 |
0.0 | 0 |
0.0 | 0 |
nox
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df1
0.22489 | 12.5 | 7.87 | 0 | 0.524 | 6.377 | 94.3 | 6.3467 | 5 | 311 | 15.2 | 392.52 | 20.45 | 15.0 |
0.11747 | 12.5 | 7.87 | 0 | 0.524 | 6.009 | 82.9 | 6.2267 | 5 | 311 | 15.2 | 396.90 | 13.27 | 18.9 |
0.09378 | 12.5 | 7.87 | 0 | 0.524 | 5.889 | 39.0 | 5.4509 | 5 | 311 | 15.2 | 390.50 | 15.71 | 21.7 |
0.62976 | 0.0 | 8.14 | 0 | 0.538 | 5.949 | 61.8 | 4.7075 | 4 | 307 | 21.0 | 396.90 | 8.26 | 20.4 |
0.63796 | 0.0 | 8.14 | 0 | 0.538 | 6.096 | 84.5 | 4.4619 | 4 | 307 | 21.0 | 380.02 | 10.26 | 18.2 |
0.62739 | 0.0 | 8.14 | 0 | 0.538 | 5.834 | 56.5 | 4.4986 | 4 | 307 | 21.0 | 395.62 | 8.47 | 19.9 |
count Đây là cách được sử dụng phổ biến vì nó tường minh hơn. Theo cách này chúng ta sẽ truy cập các trường của dataframe bằng cách khai báo list column_names của chúng.
mean
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df2
0.00632 | 296 | 1 |
0.02731 | 242 | 2 |
0.02729 | 242 | 2 |
0.03237 | 222 | 3 |
0.06905 | 222 | 3 |
tax: Chúng ta có thể truy cập dataframe bằng cách kết hợp cả hai cách theo hướng sử dụng column names đối với cột và slice index đối với dòng:
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df3
0.22489 | 311 | 5 |
0.11747 | 311 | 5 |
0.09378 | 311 | 5 |
0.62976 | 307 | 4 |
0.63796 | 307 | 4 |
tax
ptratio
0.00632 | 18.0 | 2.31 | 0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1 | 296 | 15.3 | 396.90 | 4.98 | 24.0 |
0.02731 | 0.0 | 7.07 | 0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2 | 242 | 17.8 | 396.90 | 9.14 | 21.6 |
0.02729 | 0.0 | 7.07 | 0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2 | 242 | 17.8 | 392.83 | 4.03 | 34.7 |
0.03237 | 0.0 | 2.18 | 0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3 | 222 | 18.7 | 394.63 | 2.94 | 33.4 |
0.06905 | 0.0 | 2.18 | 0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3 | 222 | 18.7 | 396.90 | 5.33 | 36.2 |
count
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df4
0.00632 | 18.0 | 2.31 | 0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1 | 296 | 15.3 | 396.90 | 4.98 | 24.0 |
0.08829 | 12.5 | 7.87 | 0 | 0.524 | 6.012 | 66.6 | 5.5605 | 5 | 311 | 15.2 | 395.60 | 12.43 | 22.9 |
0.14455 | 12.5 | 7.87 | 0 | 0.524 | 6.172 | 96.1 | 5.9505 | 5 | 311 | 15.2 | 396.90 | 19.15 | 27.1 |
0.21124 | 12.5 | 7.87 | 0 | 0.524 | 5.631 | 100.0 | 6.0821 | 5 | 311 | 15.2 | 386.63 | 29.93 | 16.5 |
0.17004 | 12.5 | 7.87 | 0 | 0.524 | 6.004 | 85.9 | 6.5921 | 5 | 311 | 15.2 | 386.71 | 17.10 | 18.9 |
Muốn lọc các cột theo định dạng dữ liệu thì như thế nào?
Ta dùng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df15 để lọc các cột theo định dạng dữ liệu. Những định dạng chính bao gồm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df16. Ví dụ: Bên dưới chúng ta lọc các trường có định dạng dữ liệu là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df17.
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df5
0.00632 | 18.0 | 2.31 | 0.538 | 6.575 | 65.2 | 4.0900 | 15.3 | 396.90 | 4.98 | 24.0 |
0.02731 | 0.0 | 7.07 | 0.469 | 6.421 | 78.9 | 4.9671 | 17.8 | 396.90 | 9.14 | 21.6 |
0.02729 | 0.0 | 7.07 | 0.469 | 7.185 | 61.1 | 4.9671 | 17.8 | 392.83 | 4.03 | 34.7 |
0.03237 | 0.0 | 2.18 | 0.458 | 6.998 | 45.8 | 6.0622 | 18.7 | 394.63 | 2.94 | 33.4 |
0.06905 | 0.0 | 2.18 | 0.458 | 7.147 | 54.2 | 6.0622 | 18.7 | 396.90 | 5.33 | 36.2 |
Muốn lọc các cột theo định dạng dữ liệu thì như thế nào?
Ta dùng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df15 để lọc các cột theo định dạng dữ liệu. Những định dạng chính bao gồm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df16. Ví dụ: Bên dưới chúng ta lọc các trường có định dạng dữ liệu là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df17.
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df6
Khi làm việc với dữ liệu lớn sẽ có những tình huống mà bạn bắt gặp các cột thuộc về cùng một nhóm và chúng có chung một pattern. Chẳng hạn như về age sẽ có import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df18,… Làm thế nào để bạn lọc ra được những biến này từ dữ liệu? Chúng ta sẽ dùng hàm filter. Đây là hàm cực kỳ tiện ích khi lọc cột từ những bộ dữ liệu lớn mà bạn sẽ thường xuyên sử dụng sau này. | 1 | 3 | 2 |
name | 2 | 5 | 5 |
a | 3 | 7 | 2 |
b | 4 | 9 | 5 |
c | 5 | 10 | 6 |
d
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df7
1 | 3 | 2 |
2 | 5 | 5 |
3 | 7 | 2 |
4 | 9 | 5 |
5 | 10 | 6 |
e
Lựa chọn các cột bắt đầu là import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
19 thông qua hàm filter.
Trong pandas thì
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df20 là làm việc với cột và
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df21 là làm việc với dòng. Giá trị của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df22 có nghĩa là lọc các cột có chuỗi ký tự là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df19 đứng đầu.
2.2.3. Sort dữ liệu¶
Trong nhiều trường hợp bạn sẽ cần sort dữ liệu theo chiều từ thấp lên cao hoặc từ cao xuống thấp để biết đâu là những quan sát nhỏ nhất và lớn nhất cũng như việc tạo ra một đồ thị có trend rõ ràng và thể hiện quan hệ tuyến tính giữa các biến theo trend.
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df8
0.01501 | 90.0 | 1.21 | 1 | 0.401 | 7.923 | 24.8 | 5.8850 | 1 | 198 | 13.6 | 395.52 | 3.16 | 50.0 |
0.52693 | 0.0 | 6.20 | 0 | 0.504 | 8.725 | 83.0 | 2.8944 | 8 | 307 | 17.4 | 382.00 | 4.63 | 50.0 |
5.66998 | 0.0 | 18.10 | 1 | 0.631 | 6.683 | 96.8 | 1.3567 | 24 | 666 | 20.2 | 375.33 | 3.73 | 50.0 |
6.53876 | 0.0 | 18.10 | 1 | 0.631 | 7.016 | 97.5 | 1.2024 | 24 | 666 | 20.2 | 392.05 | 2.96 | 50.0 |
9.23230 | 0.0 | 18.10 | 0 | 0.631 | 6.216 | 100.0 | 1.1691 | 24 | 666 | 20.2 | 366.15 | 9.53 | 50.0 |
Muốn lọc các cột theo định dạng dữ liệu thì như thế nào?
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df9
4.89822 | 0.0 | 18.1 | 0 | 0.631 | 4.970 | 100.0 | 1.3325 | 24 | 666 | 20.2 | 375.52 | 3.26 | 50.0 |
5.66998 | 0.0 | 18.1 | 1 | 0.631 | 6.683 | 96.8 | 1.3567 | 24 | 666 | 20.2 | 375.33 | 3.73 | 50.0 |
6.53876 | 0.0 | 18.1 | 1 | 0.631 | 7.016 | 97.5 | 1.2024 | 24 | 666 | 20.2 | 392.05 | 2.96 | 50.0 |
9.23230 | 0.0 | 18.1 | 0 | 0.631 | 6.216 | 100.0 | 1.1691 | 24 | 666 | 20.2 | 366.15 | 9.53 | 50.0 |
8.26725 | 0.0 | 18.1 | 1 | 0.668 | 5.875 | 89.6 | 1.1296 | 24 | 666 | 20.2 | 347.88 | 8.88 | 50.0 |
Muốn lọc các cột theo định dạng dữ liệu thì như thế nào?
Ta dùng hàm import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
15 để lọc các cột theo định dạng dữ liệu. Những định dạng chính bao gồm import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
16. Ví dụ: Bên dưới chúng ta lọc các trường có định dạng dữ liệu là import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
17.
Lọc các cột theo pattern của tên cột
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]0
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]1
Khi làm việc với dữ liệu lớn sẽ có những tình huống mà bạn bắt gặp các cột thuộc về cùng một nhóm và chúng có chung một pattern. Chẳng hạn như về age sẽ có import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
18,… Làm thế nào để bạn lọc ra được những biến này từ dữ liệu? Chúng ta sẽ dùng hàm filter. Đây là hàm cực kỳ tiện ích khi lọc cột từ những bộ dữ liệu lớn mà bạn sẽ thường xuyên sử dụng sau này.
name
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]2
0.01360 | 75.0 | 4.00 | 0 | 0.410 | 5.888 | 47.6 | 7.3197 | 3 | 469 | 21.1 | 396.90 | 14.80 | 18.9 | Muốn lọc các cột theo định dạng dữ liệu thì như thế nào? |
0.10084 | 0.0 | 10.01 | 0 | 0.547 | 6.715 | 81.6 | 2.6775 | 6 | 432 | 17.8 | 395.59 | 10.16 | 22.8 | Muốn lọc các cột theo định dạng dữ liệu thì như thế nào? |
0.12329 | 0.0 | 10.01 | 0 | 0.547 | 5.913 | 92.9 | 2.3534 | 6 | 432 | 17.8 | 394.95 | 16.21 | 18.8 | Muốn lọc các cột theo định dạng dữ liệu thì như thế nào? |
0.22212 | 0.0 | 10.01 | 0 | 0.547 | 6.092 | 95.4 | 2.5480 | 6 | 432 | 17.8 | 396.90 | 17.09 | 18.7 | Muốn lọc các cột theo định dạng dữ liệu thì như thế nào? |
0.14231 | 0.0 | 10.01 | 0 | 0.547 | 6.254 | 84.2 | 2.2565 | 6 | 432 | 17.8 | 388.74 | 10.45 | 18.5 | Muốn lọc các cột theo định dạng dữ liệu thì như thế nào? |
Ta dùng hàm import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
15 để lọc các cột theo định dạng dữ liệu. Những định dạng chính bao gồm import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
16. Ví dụ: Bên dưới chúng ta lọc các trường có định dạng dữ liệu là import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
17.
Lọc các cột theo pattern của tên cột
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]3
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]4
Trường hợp muốn xác định tỷ lệ phần trăm luỹ kế của các ngưỡng phân chia ta có thể khai báo q là list gồm các ngưỡng luỹ kế. Ví dụ bên dưới ta muốn chia làm ba khoảng giá trị, mỗi khoảng chiếm 33% thì ta khai báo ngưỡng luỹ kế
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df32luỹ kế của các ngưỡng phân chia ta có thể khai báo q là list gồm các ngưỡng luỹ kế. Ví dụ bên dưới ta muốn chia làm ba khoảng giá trị, mỗi khoảng chiếm 33% thì ta khai báo ngưỡng luỹ kế
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df32
2.2.4.4. Apply¶
Apply sẽ giúp ta biến đổi giá trị của một trường theo một hàm số xác định trước. Hàm số biến đổi được áp dụng trong apply sẽ là một hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df33. Hàm lambda là một khái niệm rất quan trọng trong python, hàm số này có cú pháp dạng
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df34.
Phân tích kỹ hơn thì chúng ta thấy nó không có return. Điều này là phù hợp với ý nghĩa của hàm lambda vì nó không yêu cầu gía trị trả về ngay. Thực tế nó giống như một lời hứa sẽ thực hiện hàm đó tại thời điểm áp dụng một cách ngầm định bên trong một hàm khác [ở đây là hàm apply].
Ví dụ bên dưới ta muốn nhân đôi giá trị của tax thì có thể sử dụng hàm apply với lambda như sau:
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]5
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]6
Ta cũng có thể áp dụng cho nhiều trường một lúc. Khi đó cần khai báo
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df20 để biết rằng ta đang áp dụng trên từng cột, nếu axis=0 thì sẽ áp dụng trên từng dòng.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]7
592.0 | 48.0 |
484.0 | 43.2 |
484.0 | 69.4 |
444.0 | 66.8 |
444.0 | 72.4 |
2.2.4.5. Map¶
Map là hàm giúp biến đổi giá trị của một biến sang giá trị mới dựa trên dictionary mà chúng ta áp dụng. Giá trị cũ sẽ là key và giá trị mới sẽ là value.
Bên dưới ta sẽ map các giá trị của trường
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df36 sang các giá trị tiếng Việt.
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]8
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]9
2.2.5. Biểu đồ matplotlib trên pandas¶
Chúng ta có thể nói rằng pandas rất mạnh vì nó đã wrap dường như toàn bộ các đồ thị cơ bản của matplotlib vào bên trong các hàm thành phần của pandas column. Do đó việc visualize trở nên vô cùng ngắn gọn, thậm chí là chỉ trên một dòng.
Bên dưới chúng ta sẽ cùng lướt qua nhanh các đồ thị cơ bản khi visualize trên
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df37. Biến được áp dụng đồng nhất cho các đồ thị là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df38.
1. biểu đồ line
2. Biểu đồ line kết hợp với point
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB0
3. Biểu đồ barchart
Biều đồ này được dùng phù hợp khi chúng ta muốn so sánh chênh lệch giữa các nhóm về mặt giá trị tuyệt đối.
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB1
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB2
Ở đây ta sẽ phải dùng thêm hàm groupby để tạo thành bảng thống kê tổng thuế theo
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df39 rồi mới vẽ biểu đồ. Khi quen thuộc bạn có thể viết gọn hai câu lệnh lại thành một line như sau:
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB3
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB2
4. Biểu đồ pie
Đây là biểu đồ dùng để thể hiện giá trị phần trăm. Phù hợp khi so sánh giá trị tương đối giữa các nhóm.
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB5
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB6
5. Biểu đồ boxplot
Biểu đồ boxplot sẽ được sử dụng để quan sát phân phối của biến đối với các giá trị min, max và các ngưỡng phân vị 25%, 50%, 75%. Căn cứ vào boxplot ta có thể biết được khoảng biến thiên của biến rộng hay hẹp, biến phân phối lệch trái hay phải.
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB7
6. Biểu đồ area
Biểu đồ area cho ta biết diện tích nằm dưới đường biểu diễn và trên trục hoành.
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB8
RangeIndex: 506 entries, 0 to 505 Data columns [total 14 columns]: # Column Non-Null Count Dtype --- ------ -------------- ----- 0 crim 506 non-null float64 1 zn 506 non-null float64 2 indus 506 non-null float64 3 chas 506 non-null int64 4 nox 506 non-null float64 5 rm 506 non-null float64 6 age 506 non-null float64 7 dis 506 non-null float64 8 rad 506 non-null int64 9 tax 506 non-null int64 10 ptratio 506 non-null float64 11 b 506 non-null float64 12 lstat 506 non-null float64 13 medv 506 non-null float64 dtypes: float64[11], int64[3] memory usage: 55.5 KB2
2.3. Reshape dataframe trên pandas¶
2.3.1. Melt¶
Hàm melt là hàm được lấy ý tưởng từ ngôn ngữ R. Hàm này sẽ làm cho bảng của chúng ta trở nên bớt cồng kềnh hơn bằng cách rút gọn nhiều measurements thành hai cột variable và value trong đó cột variable qui định loại measurement và value là giá trị của measurement. Bảng của bạn sẽ có ít cột hơn đáng kể nên trông giống như các cột measurement đang bị tan chảy vậy. Do đó nó có tên gọi là melt.
Bạn sẽ dễ hình dung hơn những gì mình nói thông qua ví dụ bên dưới. Giả sử bảng của mình gồm Ho, Ten là các dimensions và
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df40 là những measurements.
# Check for datatype df.dtypes0
Pham | Cong | 170 | 60 | 25 | 8.5 |
Nguyen | Dong | 175 | 65 | 27 | 9.0 |
Ta nhận thấy
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df41 là những dimension, bây giờ ta sẽ giữ nguyên những trường này và làm tan chảy các cột.
Pham | Cong | Nguyen | 170.0 |
Nguyen | Dong | Nguyen | 175.0 |
Pham | Cong | Nguyen | 60.0 |
Nguyen | Dong | Nguyen | 65.0 |
Pham | Cong | Nguyen | 25.0 |
Nguyen | Dong | Nguyen | 27.0 |
Pham | Cong | Nguyen | 8.5 |
Nguyen | Dong | Nguyen | 9.0 |
Dong
Ta nhận thấy
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df41 là những dimension, bây giờ ta sẽ giữ nguyên những trường này và làm tan chảy các cột.
variable
value
170 | 60 | 25 | 8.5 | 0 | 1 | 1 | 0 |
175 | 65 | 27 | 9.0 | 1 | 0 | 0 | 1 |
Ta thấy hàm này sẽ tìm toàn bộ các biến là category [có định dạng trường là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df54] và tự động trải phẳng chúng. Khi đó các cột mới được tạo thành chính là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df55,
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df56 là những nhãn thuộc biến
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df46. Giá trị của những trường này bằng 0 hoặc 1.toàn bộ các biến là category [có định dạng trường là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df54] và tự động trải phẳng chúng. Khi đó các cột mới được tạo thành chính là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df55,
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df56 là những nhãn thuộc biến
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df46. Giá trị của những trường này bằng 0 hoặc 1.
Mặc dù có cú pháp cực kì đơn giản nhưng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df53 lại cực kì hữu ích đối với data scientist khi xây dựng mô hình mà bạn cần ghi nhớ.
2.4. Thống kê theo nhóm trên pandas¶
Khi làm việc với dữ liệu bảng chúng ta thường xuyên phải thống kê dữ liệu theo các nhóm để bắt dữ liệu tạo ra những thông tin insight hữu ích cho phân tích và ra quyết định. Ngoài ra những feature tốt, có sức mạnh phân loại và dự báo cao có thể được tạo thành từ việc thống kê dữ liệu theo nhóm. Quá trình thống kê và phân tích dữ liệu mặc dù tốn kém về mặt thời gian nhưng lại rất quan trọng đối với mô hình. Vì vậy chúng ta cần thực hiện chúng kỹ lưỡng và cần kết hợp giữa kỹ năng thống kê và kinh nghiệm thực tiễn.
Ở mục 5 này chúng ta sẽ làm quen với hai câu lệnh kinh điển trong pandas được sử dụng nhiều trong thống kê theo nhóm trên pandas đó là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df59 và
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df60.
2.4.1. df.groupby[]¶
groupby là câu lệnh cho phép bạn áp dụng những hàm số trên measurements dựa trên việc phân nhóm dữ liệu theo các dimensions.
Nếu bạn chưa hiểu về khái niệm measurement và dimension thì mình có thể giải thích đơn giản là: measurement là những biến có thể cộng trừ nhân chia và đo đếm được còn dimension là những biến dùng để phân nhóm dữ liệu. Ví dụ chiều cao là một measurement có thể đo theo dimension là giới tính gồm các nhóm nam/nữ.
Cú pháp của hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df59 khá đơn giản:
# Check for datatype df.dtypes1
Chúng ta cần xác định các chiều dimension trong
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df62. Phía sau
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 là một list các measurements mà ta cần áp dụng hàm lên trên những trường này.
# Check for datatype df.dtypes2
# Check for datatype df.dtypes3
Theo cách trên thì ta chỉ áp dụng được với những hàm tính toán như
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df64 có sẵn trong dataframe. Nếu muốn sử dụng
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 cho mọi biến đổi hàm chúng ta có thể dùng hàm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df66 trong
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df67.
# Check for datatype df.dtypes4
# Check for datatype df.dtypes3
Nếu muốn áp dụng tính toán cho nhiều measurements một lúc thì truyền vào một list các measurements. Chẳng hạn bên dưới ta truyền vào một list gồm
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df68
# Check for datatype df.dtypes6
220.59420 | 6.52564 |
310.29536 | 6.42074 |
589.03500 | 6.04020 |
Chúng ta cũng có thể tự định nghĩa các hàm được tuỳ biến theo ý muốn:
# Check for datatype df.dtypes7
# Check for datatype df.dtypes8
Hoặc group theo nhiều chiều dữ liệu. Khi đó phải truyền vào
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 một list các dimension.
# Check for datatype df.dtypes9
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object0
Ưu điểm của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 đó là nhanh gọn, dễ hiểu. Nhưng nhược điểm của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 đó là chúng ta chỉ có thể áp dụng cùng một biến đổi hàm số cho mọi measurements. Ở
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df72 bạn có thể tuỳ biến sâu hơn từng hàm đối với từng measurement nhưng cú pháp sẽ phức tạp hơn một chút.
2.4.2. Pivotable¶
Pivot table là một công thức có ứng dụng rất quan trọng trong pandas. Nó giúp cho chúng ta thực hiện các thống kê trên các biến measurement theo các chiều dimension.
Bạn sẽ hình dung ra cách áp dụng của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df73 thông qua ví dụ bên dưới.
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object1
241 | 198 | 4968 | 0 | 422 | 0 |
1800 | 0 | 4456 | 0 | 0 | 0 |
6424 | 446 | 1208 | 0 | 1273 | 0 |
2155 | 0 | 20434 | 2147 | 12222 | 0 |
2853 | 216 | 22175 | 828 | 9269 | 2821 |
0 | 0 | 5807 | 0 | 3888 | 0 |
888 | 0 | 4287 | 0 | 0 | 0 |
0 | 0 | 5695 | 1535 | 0 | 0 |
0 | 0 | 0 | 0 | 82584 | 5328 |
Ưu điểm của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 đó là nhanh gọn, dễ hiểu. Nhưng nhược điểm của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df63 đó là chúng ta chỉ có thể áp dụng cùng một biến đổi hàm số cho mọi measurements. Ở
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df72 bạn có thể tuỳ biến sâu hơn từng hàm đối với từng measurement nhưng cú pháp sẽ phức tạp hơn một chút.
2.4.2. Pivotable¶
Pivot table là một công thức có ứng dụng rất quan trọng trong pandas. Nó giúp cho chúng ta thực hiện các thống kê trên các biến measurement theo các chiều dimension.
Bạn sẽ hình dung ra cách áp dụng của
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df73 thông qua ví dụ bên dưới.
chas
rad
Bạn hình dung ra nội dung của bảng thống kê trên chứ?
Bảng thống kê trên sẽ tính tổng số thuế thu được phân theo các cột là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df
39 vàimport pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df
75 [tax_labels gồm low, normal và high và chas gồm 0-không bao bởi sông, 1-bao bởi sông].
Các dòng lại được phân nhóm theo chỉ số mức độ tiếp cận đường cao tốc import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
76 gồm các giá trị import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
77.
Như vậy ta có thể hình dung được trong công thức của pivot_table, các đối số của nó có ý nghĩa như sau:
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object2
6.23000 | 7.9230 | 6.49553 | NaN | 6.54000 | NaN | 241 | 198 | 4968 | 0 | 422 | 0 |
6.08611 | NaN | 6.98827 | NaN | NaN | NaN | 1800 | 0 | 4456 | 0 | 0 | 0 |
6.44259 | 6.8055 | 6.38275 | NaN | 6.66600 | NaN | 6424 | 446 | 1208 | 0 | 1273 | 0 |
6.79033 | NaN | 6.10201 | 6.17875 | 5.96652 | NaN | 2155 | 0 | 20434 | 2147 | 12222 | 0 |
6.46277 | 7.6450 | 6.50922 | 6.07067 | 5.98217 | 6.44614 | 2853 | 216 | 22175 | 828 | 9269 | 2821 |
NaN | NaN | 6.11888 | NaN | 6.07800 | NaN | 0 | 0 | 5807 | 0 | 3888 | 0 |
7.03025 | NaN | 6.53008 | NaN | NaN | NaN | 888 | 0 | 4287 | 0 | 0 | 0 |
NaN | NaN | 7.02463 | 6.67020 | NaN | NaN | 0 | 0 | 5695 | 1535 | 0 | 0 |
NaN | NaN | NaN | NaN | 5.98414 | 6.61137 | 0 | 0 | 0 | 0 | 82584 | 5328 |
Bảng của chúng ta đã tăng gấp đôi số cột. Dòng đầu tiên của bảng là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df82,
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df38 là những thông tin ứng với từng measurement.
Bạn thấy đó,
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df87 hoàn toàn đơn giản và rất hiệu quả phải không nào?
2.5. Join, Merge và Concatenate bảng¶
Những doanh nghiệp lớn thường tổ chức cơ sở dữ liệu dưới dạng những bảng dữ liệu có quan hệ. Những bảng này được liên kết với nhau bởi key dưới những quan hệ dữ liệu như one-to-one, many-to-one hoặc one-to-many. Những kiến trúc phổ biến trong data warehouse như
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df88 và
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df89 sẽ giúp cho chúng ta nhanh chóng join các bảng lại với nhau để tạo ra những bảng raw data tổng hợp phục vụ cho các nhu cầu phân tích, thống kê và xây dựng mô hình.
Ngoài ngôn ngữ SQL là công cụ chính để làm việc với những hệ cơ sở dữ liệu có quan hệ, Data scientist cũng cần nắm vững những kỹ năng liên kết join, merge và concatenate bảng trên pandas mà thông qua chương này mình sẽ giới thiệu tới các bạn.
2.5.1. Các kiểu join¶
Chúng ta có 4 kiểu join chính là
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df90 được thể hiện qua biểu đồ venn bên dưới:
Chúng ta có hai bảng bên trái và bên phải với những phần thông tin chung [giao nhau giữa hai vòng tròn] và riêng. Phần diện tích màu xanh lá cây là Kết quả của phép join. Chúng ta có thể hình dung kết quả của phép join đó là:
left join: Lấy bảng bên trái làm gốc và đưa thêm thông tin bảng bên phải nếu nó xuất hiện ở bảng bên trái.
right join: Tương tự như left join nhưng bảng bên phải sẽ làm gốc.
inner join: Lấy những thông tin mà xuất hiện đồng thời ở cả hai bảng.đồng thời ở cả hai bảng.
full join: Lấy những thông tin xuất hiện ở một trong hai bảng.một trong hai bảng.
Bên dưới chúng ta cùng thực hành join.
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object3
001 | Pham Van Nghia | 25 | Nam Dinh |
002 | Tong Thuy Linh | 26 | Thanh Hoa |
003 | Le Van Dai | 25 | TP Ho Chi Minh |
004 | Tran Quang Nghia | 23 | Da Nang |
005 | Doan Thu Ha | 22 | Can Tho |
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object4
001 | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
006 | 7.00 | 8.5 | 9.0 | Tran Quang Nghia |
007 | 10.00 | 9.0 | 10.0 | Da Nang |
Doan Thu Ha
Can Tho
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object5
Math
Physic
Chemistry
Quang Nam
Nghe An
2.5.2. Câu lệnh pd.merge[]¶
Cú pháp chung của câu lện
import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df
91 đó là:Trong đó một số trường quan trọng:
left: bảng bên trái
right: bảng bên phải
how: Phương pháp join gồm import pandas as pd
records = [['Author', 'Pham Dinh Khanh', 1993],
['Book', 'ML algorithms to Practice', 2021],
['Target', 'Vi mot cong dong AI vung manh hon', 1],
['No_Donation', 'Community', 2]]
# Khởi tạo DataFrame
df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']]
df
92 Theo cách này chỉ ID xuất hiện ở đồng thời hai bảng mới được lựa chọn.
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object6
001 | Pham Van Nghia | 25 | Nam Dinh | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | Tong Thuy Linh | 26 | Thanh Hoa | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | Le Van Dai | 25 | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
Tran Quang Nghia Những ID xuất hiện ở bảng bên trái sẽ được lựa chọn.
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object7
001 | Pham Van Nghia | 25 | Nam Dinh | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | Tong Thuy Linh | 26 | Thanh Hoa | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | Le Van Dai | 25 | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
004 | Tran Quang Nghia | 23 | Da Nang | NaN | NaN | NaN | NaN |
005 | Doan Thu Ha | 22 | Can Tho | NaN | NaN | NaN | NaN |
Math Những ID xuất hiện ở bảng bên phải sẽ được lựa chọn.
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object8
001 | Pham Van Nghia | 25.0 | Nam Dinh | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | Tong Thuy Linh | 26.0 | Thanh Hoa | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | Le Van Dai | 25.0 | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
006 | NaN | NaN | NaN | 7.00 | 8.5 | 9.0 | Tran Quang Nghia |
007 | NaN | NaN | NaN | 10.00 | 9.0 | 10.0 | Da Nang |
Doan Thu Ha Tất cả ID xuất hiện ở bảng bên trái hoặc bảng bên phải sẽ được lựa chọn.
crim float64 zn float64 indus float64 chas int64 nox float64 ... tax int64 ptratio float64 b float64 lstat float64 medv float64 Length: 14, dtype: object9
001 | Pham Van Nghia | 25.0 | Nam Dinh | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | Tong Thuy Linh | 26.0 | Thanh Hoa | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | Le Van Dai | 25.0 | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
004 | Tran Quang Nghia | 23.0 | Da Nang | NaN | NaN | NaN | NaN |
005 | Doan Thu Ha | 22.0 | Can Tho | NaN | NaN | NaN | NaN |
006 | NaN | NaN | NaN | 7.00 | 8.5 | 9.0 | Doan Thu Ha |
007 | NaN | NaN | NaN | 10.00 | 9.0 | 10.0 | Doan Thu Ha |
Can Tho
Quang Nam
# Thống kê mô tả dữ liệu df.describe[]0
001 | Pham Van Nghia | 25 | Nam Dinh | 001 | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | Tong Thuy Linh | 26 | Thanh Hoa | 002 | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | Le Van Dai | 25 | TP Ho Chi Minh | 003 | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
004 | Tran Quang Nghia | 23 | Da Nang | 006 | 7.00 | 8.5 | 9.0 | Doan Thu Ha |
005 | Doan Thu Ha | 22 | Can Tho | 007 | 10.00 | 9.0 | 10.0 | Doan Thu Ha |
Can Tho
Quang Nam
# Thống kê mô tả dữ liệu df.describe[]1
Pham Van Nghia | 25 | Nam Dinh | 6.75 | 8.0 | 7.0 | Nam Dinh |
Tong Thuy Linh | 26 | Thanh Hoa | 9.00 | 9.0 | 9.5 | Thanh Hoa |
Le Van Dai | 25 | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
Tran Quang Nghia | 23 | Da Nang | NaN | NaN | NaN | NaN |
Doan Thu Ha | 22 | Can Tho | NaN | NaN | NaN | NaN |
# Thống kê mô tả dữ liệu df.describe[]2
Doan Thu Ha
Can Tho
Quang Nam
# Thống kê mô tả dữ liệu df.describe[]3
Nghe An
2.5.3. df.join[]¶
DataFrame có một hàm là hàm join[] có chức năng tương đương với merge, dùng để liên kết bảng theo các keys.
Name
Age
Math
Physic
# Thống kê mô tả dữ liệu df.describe[]4
001 | Nam Dinh |
002 | Thanh Hoa |
003 | TP Ho Chi Minh |
004 | Da Nang |
005 | Can Tho |
001 | Nam Dinh |
002 | Thanh Hoa |
003 | TP Ho Chi Minh |
006 | Doan Thu Ha |
007 | Doan Thu Ha |
Can Tho
# Thống kê mô tả dữ liệu df.describe[]5
001 | Pham Van Nghia | 25.0 | Nam Dinh | NaN | NaN | NaN |
002 | Tong Thuy Linh | 26.0 | Thanh Hoa | NaN | NaN | NaN |
003 | Le Van Dai | 25.0 | TP Ho Chi Minh | NaN | NaN | NaN |
004 | Tran Quang Nghia | 23.0 | Da Nang | NaN | NaN | NaN |
005 | Doan Thu Ha | 22.0 | Can Tho | NaN | NaN | NaN |
001 | NaN | NaN | Nam Dinh | 6.75 | 8.0 | 7.0 |
002 | NaN | NaN | Thanh Hoa | 9.00 | 9.0 | 9.5 |
003 | NaN | NaN | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 |
006 | NaN | NaN | Doan Thu Ha | 7.00 | 8.5 | 9.0 |
007 | NaN | NaN | Doan Thu Ha | 10.00 | 9.0 | 10.0 |
Can Tho
Quang Nam
# Thống kê mô tả dữ liệu df.describe[]6
001 | Pham Van Nghia | 25 | Nam Dinh | 001 | 6.75 | 8.0 | 7.0 | Nam Dinh |
002 | Tong Thuy Linh | 26 | Thanh Hoa | 002 | 9.00 | 9.0 | 9.5 | Thanh Hoa |
003 | Le Van Dai | 25 | TP Ho Chi Minh | 003 | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
004 | Tran Quang Nghia | 23 | Da Nang | 006 | 7.00 | 8.5 | 9.0 | Doan Thu Ha |
005 | Doan Thu Ha | 22 | Can Tho | 007 | 10.00 | 9.0 | 10.0 | Doan Thu Ha |
Can Tho
# Thống kê mô tả dữ liệu df.describe[]7
Pham Van Nghia | 25.0 | Nam Dinh | 6.75 | 8.0 | 7.0 | Nam Dinh |
Tong Thuy Linh | 26.0 | Thanh Hoa | 9.00 | 9.0 | 9.5 | Thanh Hoa |
Le Van Dai | 25.0 | TP Ho Chi Minh | 8.00 | 9.0 | 7.5 | TP Ho Chi Minh |
Tran Quang Nghia | 23.0 | Da Nang | NaN | NaN | NaN | NaN |
Doan Thu Ha | 22.0 | Can Tho | NaN | NaN | NaN | NaN |
NaN | NaN | NaN | 7.00 | 8.5 | 9.0 | Doan Thu Ha |
NaN | NaN | NaN | 10.00 | 9.0 | 10.0 | Doan Thu Ha |
Can Tho
# Thống kê mô tả dữ liệu df.describe[]8
001 | Math | 25 | Physic | 001 | 6.75 | 8.0 | 7.0 | Physic |
002 | Chemistry | 26 | Pham Van Nghia | 002 | 9.00 | 9.0 | 9.5 | Pham Van Nghia |
003 | Nam Dinh | 25 | Tong Thuy Linh | 003 | 8.00 | 9.0 | 7.5 | Tong Thuy Linh |
004 | Thanh Hoa | 23 | Le Van Dai | 006 | 7.00 | 8.5 | 9.0 | TP Ho Chi Minh |
005 | Tran Quang Nghia | 22 | Da Nang | 007 | 10.00 | 9.0 | 10.0 | Quang Nam |
Doan Thu Ha
Can Tho Theo dòng.
# Thống kê mô tả dữ liệu df.describe[]9
001 | Math | 25.0 | Physic | Chemistry | Chemistry | Chemistry |
002 | Chemistry | 26.0 | Pham Van Nghia | Chemistry | Chemistry | Chemistry |
003 | Nam Dinh | 25.0 | Tong Thuy Linh | Chemistry | Chemistry | Chemistry |
004 | Thanh Hoa | 23.0 | Le Van Dai | Chemistry | Chemistry | Chemistry |
005 | Tran Quang Nghia | 22.0 | Da Nang | Chemistry | Chemistry | Chemistry |
001 | Chemistry | Chemistry | Physic | 6.75 | 8.0 | 7.0 |
002 | Chemistry | Chemistry | Pham Van Nghia | 9.00 | 9.0 | 9.5 |
003 | Chemistry | Chemistry | Tong Thuy Linh | 8.00 | 9.0 | 7.5 |
006 | Chemistry | Chemistry | TP Ho Chi Minh | 7.00 | 8.5 | 9.0 |
007 | Chemistry | Chemistry | Quang Nam | 10.00 | 9.0 | 10.0 |
Doan Thu Ha
Can Tho
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient0
Ngoài câu lệnh import pandas as pd records = [['Author', 'Pham Dinh Khanh', 1993], ['Book', 'ML algorithms to Practice', 2021], ['Target', 'Vi mot cong dong AI vung manh hon', 1], ['No_Donation', 'Community', 2]] # Khởi tạo DataFrame df = pd.DataFrame[data = records, columns = ['contents', 'infos', 'numbers']] df96 thì bản thân một dataframe cũng có hàm import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]10 được sử dụng để nối bảng Theo dòng. | -0.00278 |
NaN | -0.00396 |
Câu lệnh này sẽ thường được sử dụng trong tình huống bạn muốn tạo bảng tổng hợp từ nhiều bảng con có cùng cấu trúc. | 0.00982 |
Ví dụ: Bạn muốn tạo ra một bảng về lợi tức chứng khoán của toàn bộ các ngành từ số liệu chứng khoán của từng ngành. | 0.00042 |
Ví dụ: Bạn muốn tạo ra một bảng về lợi tức chứng khoán của toàn bộ các ngành từ số liệu chứng khoán của từng ngành. | -0.00710 |
Nganh
Interest
d
v
p
e
2.6. Kết nối SQL¶
Đối với những data scientist làm việc trong những doanh nghiệp quản lý dữ liệu trên data warehouse như Ngân Hàng, công ty Chứng Khoán, Bảo Hiểm thì thường xuyên phải kết nối SQL để truy vấn dữ liệu. Python có rất nhiều các packages cung cấp instance connection tới SQL cũng như biến đổi data trên cú pháp của SQL. Mình sẽ không thể giới thiệu hết toàn bộ những packages này mà sẽ giới thiệu tới các bạn hai packages phổ biến nhất đó là:
sqlalchemy
Đây là một pakage cho phép chúng ta kết nối và truy vấn trên những dữ liệu SQL một cách trực tiếp theo mô hình server-client side. Chúng ta sẽ phải khai báo một số thông tin quan trọng để khởi tạo kết nối như:: Ở phần ví dụ thực hành liên quan tới SQL thì mỗi máy sẽ có một cấu hình khác nhau. Để thực hành được code bên dưới trước tiên máy tính của bạn cần cài SQL Server và có sẵn những database trong server.
Tên server là gì?
Tên database trong server cần truy vấn.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient1
port: Cổng kết nối, thường mặc định của MSSQL là 1443.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient2
username: Tên user.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient3
password: Mật khẩu truy cập.
Chú ý: Ở phần ví dụ thực hành liên quan tới SQL thì mỗi máy sẽ có một cấu hình khác nhau. Để thực hành được code bên dưới trước tiên máy tính của bạn cần cài SQL Server và có sẵn những database trong server.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient4
Bạn sẽ cần khai báo đúng các trường cấu hình truy cập trong
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]11 và tên bảng tại
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]12.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient5
Nếu bạn thực hành bị lỗi các ví dụ tại mục 3 này, hãy tạm thời bỏ qua chúng.
Sau khi sử dụng connection thì chúng ta nhớ đóng lại connection để giải phóng memory và port.
%%script echo skipping # Lưu dữ liệu sang file csv df.to_csv['BostonHousing.csv', index = False] # Lưu file excel df.to_excel['BostonHousing.xls', index = False] # Lưu dữ file json df.to_json['BostonHousing.json'] #do not include index = False, index only use for table orient6
Chúng ta cũng có thể thực thi các lệnh của SQL thông qua engine SQL mà chúng ta đã khởi tạo. Kết quả sẽ được truy vấn và tính toán trực tiếp từ server trả về như câu lệnh ta yêu cầu.
pyodbc
Đây là package được thiết kế riêng để truy vấn trên những hệ cơ sở dữ liệu sử dụng kết nối ODBC của Microsoft.
Sau khi khởi tạo kết nối thì ta cũng có thể sử dụng các câu lệnh của SQL như thông thường để truy vấn và tính toán thông tin như bên dưới:
Cursor cho SQL
Cursor là một con trỏ dẫn tới một vùng nhớ mà lưu trữ dữ liệu. Sử dụng cursor sẽ giúp ta tiết kiệm bộ nhớ vì chúng ta không phải phân bổ bộ nhớ cho dữ liệu ngay mà chỉ sử dụng địa chỉ để trỏ tới dữ liệu. Cursor được sử dụng phổ biến trong SQL đặc biệt là trong các vòng for. Trong
import pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]
13 chúng ta sẽ sử dụngimport pandas as pd df = pd.read_csv["//raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None] df.head[]
14 trong vòng for để duyệt qua các dòng như bên dưới:2.7. Tổng kết¶
Qua bài hướng dẫn này bạn đã được làm quen với những chức năng của pandas trong phân tích, xử lý và biến đổi dữ liệu. Tổng kết lại chúng ta đã đi qua các mục:
Cách đọc, lưu và khởi tạo dataframe
Thao tác dữ liệu trên dataframe: truy cập bảng, sort, filter và các hàm cơ bản trên dataframe.
Thay đổi shape của bảng qua melt và dummy.
Thống kê theo groupby và pivot_table.
Các lệnh join, merge, concatenate bảng.
Kết nối với dữ liệu SQL.
Những kiến thức trên không cover hết toàn bộ về pandas nhưng là những kiến thức hay dùng nên bạn đọc cần nắm vững.
Tiếp theo là bài tập thực hành cho bài viết này.
2.8. Bài tập¶