Trong khi sử dụng laptop, ít nhiều cũng gặp phải tình trạng mic laptop bị hú phát ra từ loa làm mình rất khó chịu. Vậy cách chỉnh mic không bị hú laptop là gì? Hãy theo dõi bài viết dưới đây để tìm ra nguyên nhân cũng như giải pháp khắc phục đơn giản mà bạn cũng có thể tự làm được. Show
1. Tại sao mic laptop bị húMicro đưa âm ra loa bị hú do nhiều nguyên nhân khác nhau, nhưng đa số bạn đều có thể khắc phục dễ dàng: - Đầu tiên phải kể đến micro để quá gần loa. Điều này dẫn đến micro thu âm thanh lớn từ loa và khuyếch đại thành một vòng lặp với cấp số nhân lớn dẫn đến hiện tượng feedback ( hú) gây khó chịu cho bạn và gây hỏng loa nhanh. - Hiện tượng cộng hưởng tần số của âm thanh trong không gian - Lỗ thoát hơn của micro bị bít kín cũng dẫn đến hiện tượng hú. Lỗ thoát hơi được thiết kế phía sau màng nhún của micro. - Thao tác cầm micro không đúng. - Lỗi Driver. - Điều chỉnh micro boost t ở mức quá cao. 2. Nguyên nhân và cách chỉnh mic không bị hú laptopSau đây là 5 nguyên nhân khiến mic bị hú laptop và cách khắc phục. Mời bạn tham khảo chi tiết. 2.1. Hiện tượng cộng hưởng tần số của âm thanh trong không gian- Nguyên nhân mic laptop bị hú còn có sự ảnh hưởng bởi nguyên tố - gọi là tần số cộng hưởng liên quan đến không gian trong phòng. - Mọi đồ vật, diện tích căn phòng, kiểu thiết kế trong phòng cũng đều có khả năng dội lại âm thanh khi loa phát ra, làm cho micro thu nhiều tạp âm dẫn đến xuất hiện tiếng hú. - Giải pháp: + Bạn di chuyển hướng micro tránh gần và đối diện trực tiếp với loa. + Ngoài ra, bạn cần chú ý đến cách sắp xếp vị trí loa trong căn phòng. + Nếu do không gian căn phòng, thì bạn cần mua mút cách âm cách nhiệt (mút trứng tiêu âm) để dán trên tường, hay góc tường. 2.2. Nguyên nhân và cách chỉnh mic không bị hú laptop do lỗi Driver- Nguyên nhân tiếp theo khiến mic laptop bị hú có thể là do bạn cài nhầm Drivers - Giải pháp: Để khắc phục bạn cần update lại driver âm thanh cho Laptop: Bước 1: Đầu tiên bạn nhấn chuột phải vào My Computer sau đó chọn Manager. Bước 2: Khi cửa sổ Computer Manager xuất hiện bạn click chuột chọn Device Manager – chọn Sound video and game controllers. Bước 3: Tiếp tục nhấp chuột phải vào High Definition Audio Device chọn Update diver software. Bước 4: Khi cửa sổ mới hiện ra bạn chọn vào Browse My Computer for Driver software và chọn tiếp Let me pick from list of device. Bước 5: Cuối cùng bạn tiếp tục làm theo yêu cầu cho đến khi bạn đã update driver mới. 2.3. Thao tác cầm micro không đúngMột nguyên nhân và cách chỉnh mic không bị hú laptop không thể thiết chính là thao tác cầm micro không đúng. - Vị trí tay nắm vào micro: + Đây là một yếu tố vô cùng quan trọng khi bạn sử dụng micro. + Có 2 lỗi thường mắc nhiều khi cầm micro đó là cầm vào mũ của micro và cầm vào đôi micro. + Cách khắc phục hiện tượng này đó là bạn cầm vào giữa thân của micro. + Góc cầm micro và khoảng cách cầm micro + Hướng góc cầm micro tiêu chuẩn là khoảng từ 45 đến 50 độ so với thân người bạn. + Góc cầm micro chuẩn giúp bạn thu được âm thanh tốt nhất. + Khoảng cách cầm tiêu chuẩn để micro thu âm tốt nhất đó là cách môi khoảng từ 2 đến 2,5 cm. + Bạn nên hạn chế các khoảng cách quá xa hoặc quá sát với mũ của micro. 2.4. Điều chỉnh micro boos- Để khắc phục hiện tượng này, bạn cần điều chỉnh micro boos về mức tối thiểu Bước 1: Bạn mở Control Panel >> Chọn mục Hardware and Sound. Bước 2: Click chuột phải vào biểu tượng Sound >> chọn properties. Bước 3: Vào mục Level chỉnh microphone boost về mức tối thiểu có thể là -20dB. 2.5. Cách khắc phục mic bị hú laptop do micro gần loa- Không để micro gần với loa khi hoạt động. - Micro gần loa gây ra sự hú lên vô cùng lớn điều này làm ảnh hưởng đến màng loa và màng nhĩ rất lớn. - Chính vì thế bạn nên để micro cách xa loa từ 1 mét trở lên. Ở khoảng cách này bạn sẽ không lo hiện tượng hú xảy ra nữa Đâ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 csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.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 csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.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 csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.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 dfdf.iloc[:5, :5] 0. 2.1.1. Khởi tạo thông qua dictionaryVề định dạng dictionary chúng ta đã được học ở . 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 = { }
df = pd.DataFrame(dict_columns)
display(df)contents infos numbers 0 Author Pham Dinh Khanh 1993 1 Book ML algorithms to Practice 2021 2 Target Vi mot cong dong AI vung manh hon 1 3 No_Donation Community 2 Hàm display của Lựa chọn 5 dòng đầu và 5 cột đầu của dfdf.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 dfdf.iloc[:5, :5] 2 lần lượt có tác dụng:
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òngTheo 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 dfdf.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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
dfcontents infos numbers 0 Author Pham Dinh Khanh 1993 1 Book ML algorithms to Practice 2021 2 Target Vi mot cong dong AI vung manh hon 1 3 No_Donation Community 2 Để lưu trữ một dataframe dưới dạng một file %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient7 chúng ta dùng hàm Lựa chọn 5 dòng đầu và 5 cột đầu của dfdf.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ừ fileChú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:4df.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:4df.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:4df.iloc[5:10, 2:4] 2. Bộ dữ liệu này gồm các trường:
import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() crim zn indus chas nox rm age dis rad tax ptratio b lstat medv 0 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 1 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 2 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 3 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 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 Trong hàm Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4df.iloc[5:10, 2:4] 5 chúng ta sẽ khai báo các thông số chính bao gồm :
Hàm Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4df.iloc[5:10, 2:4] 7 mặc định sẽ hiển thị ra 5 quan sát đầu tiên của dataframe. Chúng ta muốn hiển thị 5 quan sát cuối cùng thì dùng hàm Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4df.iloc[5:10, 2:4] 8 và 5 quan sát ngẫu nhiên thì dùng hàm Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4df.iloc[5:10, 2:4] 9. Hàm import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df01 của mỗi trường trong dataframe. <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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), # 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 datatypedf.dtypes crim float64 zn float64 indus float64 chas int64 nox float64 tax int64
ptratio float64
b float64
lstat float64
medv float64
Length: 14, dtype: objectNế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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df03 Thống kê mô tả dữ liệudf.describe() crim zn indus chas nox rm age dis rad tax ptratio b lstat medv count 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 mean 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 std 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 min 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 25% 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 50% 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 75% 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 max 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), # 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 csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient2.2. Thao tác với dataframe2.2.1. Truy cập dataframeChú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), # 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 . Note: import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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 dfdf.iloc[:5, :5] crim zn indus chas nox 0 0.00632 18.0 2.31 0 0.538 1 0.02731 0.0 7.07 0 0.469 2 0.02729 0.0 7.07 0 0.469 3 0.03237 0.0 2.18 0 0.458 4 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:4df.iloc[5:10, 2:4] indus chas 5 2.18 0 6 7.87 0 7 7.87 0 8 7.87 0 9 7.87 0 import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df0 zn chas 501 0.0 0 502 0.0 0 503 0.0 0 504 0.0 0 505 0.0 0 Ngoài ra ta cũng có thể truy cập các dòng theo row index của dataframe thông qua câu lệnh import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df07. import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df1 crim zn indus chas nox rm age dis rad tax ptratio b lstat medv 10 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 11 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 12 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 13 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 14 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 15 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 Truy cập theo column names: Đâ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. Ví dụ bên dưới chúng ta cần lấy ra các trường import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df08 từ bảng import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df09. Ta sẽ làm như sau: import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df2 crim tax rad 0 0.00632 296 1 1 0.02731 242 2 2 0.02729 242 2 3 0.03237 222 3 4 0.06905 222 3 Kết hợp cả hai cách: 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df3 crim tax rad 10 0.22489 311 5 11 0.11747 311 5 12 0.09378 311 5 13 0.62976 307 4 14 0.63796 307 4 2.2.2. Lọc dataframeChúng ta có thể lọc dataframe thông qua các điều kiện đối với các trường. Điều kiện của trường được thể hiện như một biểu thức logic và bao trong dấu import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df10. Giả sử chúng ta muốn lọc ra các thị trấn mà có số phòng ở trung bình trên căn hộ là trên 4 thì truyền vào dấu import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df10 điều kiện import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df12. crim zn indus chas nox rm age dis rad tax ptratio b lstat medv 0 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 1 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 2 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 3 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 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 Nếu chúng ta muốn kết hợp nhiều điều kiện thì dùng biểu thức logic import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df13 hoặc import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df14. Ví dụ: Muốn lọc thêm điều kiện thuế suất trên 250 ngoài điều kiện số phòng thì ta làm như sau: import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df4 crim zn indus chas nox rm age dis rad tax ptratio b lstat medv 0 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 6 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 7 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 8 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 9 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), # 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), # 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), # 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df5 crim zn indus nox rm age dis ptratio b lstat medv 0 0.00632 18.0 2.31 0.538 6.575 65.2 4.0900 15.3 396.90 4.98 24.0 1 0.02731 0.0 7.07 0.469 6.421 78.9 4.9671 17.8 396.90 9.14 21.6 2 0.02729 0.0 7.07 0.469 7.185 61.1 4.9671 17.8 392.83 4.03 34.7 3 0.03237 0.0 2.18 0.458 6.998 45.8 6.0622 18.7 394.63 2.94 33.4 4 0.06905 0.0 2.18 0.458 7.147 54.2 6.0622 18.7 396.90 5.33 36.2 Lọc các cột theo pattern của tên cột 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), # 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. import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df6 name age_1 age_2 age_3 0 a 1 3 2 1 b 2 5 5 2 c 3 7 2 3 d 4 9 5 4 e 5 10 6 Lựa chọn các cột bắt đầu là import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df19 thông qua hàm filter. import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df7 age_1 age_2 age_3 0 1 3 2 1 2 5 5 2 3 7 2 3 4 9 5 4 5 10 6 Trong pandas thì import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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), # 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), # 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df19 đứng đầu. 2.2.3. Sort dữ liệuTrong 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. Để sort dữ liệu chúng ta sử dụng hàm import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df24. Lựa chọn là import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df25 giúp sort theo thứ tự tăng dần, trường hợp import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df26 sẽ giảm dần. Giả sử bên dưới chúng ta cùng sort giá trị của căn nhà theo chiều giảm dần. import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df8 crim zn indus chas nox rm age dis rad tax ptratio b lstat medv 283 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 225 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 369 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 370 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 371 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 chúng ta cũng có thể sort theo một nhóm các trường. Ví dụ để sort đồng thời giá trị của căn nhà và giá trị thuế suất thì ta truyền vào list các trường cần sort là import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df27. import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df9 crim zn indus chas nox rm age dis rad tax ptratio b lstat medv 368 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 369 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 370 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 371 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 372 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 2.2.4. Các hàm đối với một trường2.2.4.1. Min, max, mean, meadian, sumTrên một trường dữ liệu của dataframe đã tích hợp sẵn các hàm tính toán như import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df28 để tính các giá trị đặc trưng cho từng trường. import pandas as pd df = pd.read_csv("https://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("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 1 2.2.4.2. Hàm cutHàm cut giúp ta phân chia giá trị của một trường liên tục vào những khoảng theo ngưỡng cắt. Kết quả trả ra là nhãn của từng khoảng mà chúng ta khai báo. import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 2 crim zn indus chas nox rm age dis rad tax ptratio b lstat medv tax_labels 54 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 high 111 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 high 112 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 high 113 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 high 114 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 high 2.2.4.3. Hàm qcutTrong trường hợp chúng ta không muốn chia các bin dựa vào ngưỡng mà chỉ muốn khai báo số lượng bins và để cho hàm số tự quyết định ngưỡng để chia đều các quan sát vào các bins thì sử dụng hàm import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df29 (qcut là viết tắt của quantile cut). Bên dưới ta sẽ chia thành 3 bins (số bins sẽ được khai báo trong import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df
import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df31 import pandas as pd df = pd.read_csv("https://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("https://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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df32 2.2.4.4. ApplyApply 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), # 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), # 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("https://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("https://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), # 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("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 7 tax medv 0 592.0 48.0 1 484.0 43.2 2 484.0 69.4 3 444.0 66.8 4 444.0 72.4 2.2.4.5. MapMap 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), # 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("https://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("https://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 pandasChú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), # 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), # 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 <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 0 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. <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 1 <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 2 Ở đâ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), # 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: <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 3 <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 2 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. <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 5 <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 6 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. <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 7 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. <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 8 <class 'pandas.core.frame.DataFrame'> RangeIndex: 506 entries, 0 to 505 Data columns (total 14 columns): Column Non-Null Count Dtype0 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 2 2.3. Reshape dataframe trên pandas2.3.1. MeltHà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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df40 là những measurements. Check for datatypedf.dtypes 0 Ho Ten ChieuCao CanNang Tuoi Diem 0 Pham Cong 170 60 25 8.5 1 Nguyen Dong 175 65 27 9.0 Ta nhận thấy import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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. Ho Ten variable value 0 Pham Cong ChieuCao 170.0 1 Nguyen Dong ChieuCao 175.0 2 Pham Cong CanNang 60.0 3 Nguyen Dong CanNang 65.0 4 Pham Cong Tuoi 25.0 5 Nguyen Dong Tuoi 27.0 6 Pham Cong Diem 8.5 7 Nguyen Dong Diem 9.0 Ta nhận thấy bảng đã trở nên gọn gàng hơn khi các cột được đưa vào trường import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df42 và giá trị của chúng được đưa vào import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df43. Cách biến đổi import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df44 sẽ phù hợp với các bảng đã phân chia sẵn dimension, measurement rõ ràng và số lượng measurements của bảng là lớn. 2.3.2. Biến đổi DummyCách biến đổi dummy là một cách rất hiệu quả để biến đổi một biến category thành một one-hot véc tơ. Cụ thể cũng với bảng import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df45 ở trên, ta nhận thấy biến import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df46 gồm hai giá trị là import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df47 và import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df48. Chúng ta có thể tạo thành một one-hot vector sao cho nếu giá trị đầu tiên là 1 thì tương ứng với họ import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df47 và giá trị thứ hai là 1 thì họ import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df48 (chưa xét tới trường hợp tồn tại họ khác import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df47 và import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df48). Thường thì bạn sẽ nghĩ đến sử dụng hàm LabelBinarizer của sklearn nhưng pandas cung cấp cho bạn một hàm đơn giản hơn để thực hiện việc này. Đó là import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df53 ChieuCao CanNang Tuoi Diem Ho_Nguyen Ho_Pham Ten_Cong Ten_Dong 0 170 60 25 8.5 0 1 1 0 1 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df
import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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), # 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), # 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), # 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 pandasKhi 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), # 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), # 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df59 khá đơn giản: Check for datatypedf.dtypes 1 Chúng ta cần xác định các chiều dimension trong import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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), # 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 datatypedf.dtypes 2 Check for datatypedf.dtypes 3 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), # 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), # 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), # 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df67. Check for datatypedf.dtypes 4 Check for datatypedf.dtypes 3 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df68 Check for datatypedf.dtypes 6 tax rm tax_labels low 220.59420 6.52564 normal 310.29536 6.42074 high 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 datatypedf.dtypes 7 Check for datatypedf.dtypes 8 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df63 một list các dimension. Check for datatypedf.dtypes 9 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), # 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), # 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), # 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. PivotablePivot 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), # 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 tax_labels low normal high chas 0 1 0 1 0 1 rad 1 241 198 4968 0 422 0 2 1800 0 4456 0 0 0 3 6424 446 1208 0 1273 0 4 2155 0 20434 2147 12222 0 5 2853 216 22175 828 9269 2821 6 0 0 5807 0 3888 0 7 888 0 4287 0 0 0 8 0 0 5695 1535 0 0 24 0 0 0 0 82584 5328 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df39 và import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df75 (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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df76 gồm các giá trị import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df77. 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:
Làm sao để qui định mỗi measurement một công thức? Giả sử chúng ta cần tính thêm trung bình số phòng trên căn hộ. Tức là thêm trung bình của trường import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df82 trong khi vẫn cần tính tổng của trường import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df38. Khi đó cần khai báo import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df81 dưới dạng một dictionary có key là tên của measurement và value là công thức của measurement. crim float64 zn float64 indus float64 chas int64 nox float64 tax int64
ptratio float64
b float64
lstat float64
medv float64
Length: 14, dtype: object2 rm tax tax_labels low normal high low normal high chas 0 1 0 1 0 1 0 1 0 1 0 1 rad 1 6.23000 7.9230 6.49553 NaN 6.54000 NaN 241 198 4968 0 422 0 2 6.08611 NaN 6.98827 NaN NaN NaN 1800 0 4456 0 0 0 3 6.44259 6.8055 6.38275 NaN 6.66600 NaN 6424 446 1208 0 1273 0 4 6.79033 NaN 6.10201 6.17875 5.96652 NaN 2155 0 20434 2147 12222 0 5 6.46277 7.6450 6.50922 6.07067 5.98217 6.44614 2853 216 22175 828 9269 2821 6 NaN NaN 6.11888 NaN 6.07800 NaN 0 0 5807 0 3888 0 7 7.03025 NaN 6.53008 NaN NaN NaN 888 0 4287 0 0 0 8 NaN NaN 7.02463 6.67020 NaN NaN 0 0 5695 1535 0 0 24 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), # 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), # 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), # 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ảngNhữ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), # 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), # 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 joinChúng ta có 4 kiểu join chính là import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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à:
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 ID Name Age Province 0 001 Pham Van Nghia 25 Nam Dinh 1 002 Tong Thuy Linh 26 Thanh Hoa 2 003 Le Van Dai 25 TP Ho Chi Minh 3 004 Tran Quang Nghia 23 Da Nang 4 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 ID Math Physic Chemistry Province 0 001 6.75 8.0 7.0 Nam Dinh 1 002 9.00 9.0 9.5 Thanh Hoa 2 003 8.00 9.0 7.5 TP Ho Chi Minh 3 006 7.00 8.5 9.0 Quang Nam 4 007 10.00 9.0 10.0 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), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df91 đó là: crim float64 zn float64 indus float64 chas int64 nox float64 tax int64
ptratio float64
b float64
lstat float64
medv float64
Length: 14, dtype: object5 Trong đó một số trường quan trọng:
Tiếp theo áp dụng câu lệnh trên để merge bảng sinh viên với điểm theo key là ID sinh viên. inner join: 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 ID Name Age Province_Sv Math Physic Chemistry Province_Score 0 001 Pham Van Nghia 25 Nam Dinh 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh left join: 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 ID Name Age Province_Sv Math Physic Chemistry Province_Score 0 001 Pham Van Nghia 25 Nam Dinh 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh 3 004 Tran Quang Nghia 23 Da Nang NaN NaN NaN NaN 4 005 Doan Thu Ha 22 Can Tho NaN NaN NaN NaN right join: 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 ID Name Age Province_Sv Math Physic Chemistry Province_Score 0 001 Pham Van Nghia 25.0 Nam Dinh 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26.0 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25.0 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh 3 006 NaN NaN NaN 7.00 8.5 9.0 Quang Nam 4 007 NaN NaN NaN 10.00 9.0 10.0 Nghe An outer join: 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 ID Name Age Province_Sv Math Physic Chemistry Province_Score 0 001 Pham Van Nghia 25.0 Nam Dinh 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26.0 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25.0 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh 3 004 Tran Quang Nghia 23.0 Da Nang NaN NaN NaN NaN 4 005 Doan Thu Ha 22.0 Can Tho NaN NaN NaN NaN 5 006 NaN NaN NaN 7.00 8.5 9.0 Quang Nam 6 007 NaN NaN NaN 10.00 9.0 10.0 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. Thống kê mô tả dữ liệudf.describe() 0 ID_Sv Name Age Province_Sv ID_Score Math Physic Chemistry Province_Score 0 001 Pham Van Nghia 25 Nam Dinh 001 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26 Thanh Hoa 002 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25 TP Ho Chi Minh 003 8.00 9.0 7.5 TP Ho Chi Minh 3 004 Tran Quang Nghia 23 Da Nang 006 7.00 8.5 9.0 Quang Nam 4 005 Doan Thu Ha 22 Can Tho 007 10.00 9.0 10.0 Nghe An Mặc định bảng sẽ join theo index của dòng, các đối số lsuffix import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df94rsuffix`lần lượt được sử dụng để qui định hậu tố (suffix) cho bảng bên trái và bảng bên phải nếu xuất hiện trường trùng tên. Nếu muốn thực hiện hàm import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df95 theo một trường nào đó, chúng ta phải thiết lập index cho bảng là trường cần join rồi sau đó mới thực hiện join. Ví dụ bạn cần join theo ID: Thống kê mô tả dữ liệudf.describe() 1 Name Age Province_Sv Math Physic Chemistry Province_Score ID 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 Thống kê mô tả dữ liệudf.describe() 2 2.5.4. Câu lệnh pd.concat()Câu lệnh import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df96 được sử dụng để nối hai bảng theo dòng hoặc theo cột. Đây là câu lệnh được sử dụng khá phổ biến để tạo bảng tổng hợp từ các bảng dữ liệu nhỏ. Một ví dụ khá cụ thể đó là trong package vnquant dữ liệu mỗi mã chứng khoán sẽ bị phân trang. Nếu download lần lượt trừng trang thì sẽ lâu, do đó để tăng tốc thì chúng ta sẽ download song song nhiều trang một lúc và sử dụng lệnh import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df96 để nối dữ liệu thành một bảng chính. Cú pháp chung của lệnh import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df96 sẽ như sau: Thống kê mô tả dữ liệudf.describe() 3 Trong đó:
Nếu muốn nối theo dòng thì làm thế nào? Để nối hai bảng theo dòng thì ta sẽ để import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df21, đây là giá trị mặc định của đối số này trong import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df96. Nếu chúng ta muốn nối hai bảng theo dòng và chỉ lấy trường thông tin mà cả hai bảng đều có thì cần thiết lập import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 03. Thống kê mô tả dữ liệudf.describe() 4 ID Province 0 001 Nam Dinh 1 002 Thanh Hoa 2 003 TP Ho Chi Minh 3 004 Da Nang 4 005 Can Tho 0 001 Nam Dinh 1 002 Thanh Hoa 2 003 TP Ho Chi Minh 3 006 Quang Nam 4 007 Nghe An Ta cũng có thể nối hai bảng theo dòng và lấy tất cả các trường thông tin ở cả hai bảng thì sẽ thiết lập import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 04. Đây là giá trị mặc định của đối số này. Giá trị import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 05 tự động được fill đối với những thông tin không có. Thống kê mô tả dữ liệudf.describe() 5 ID Name Age Province Math Physic Chemistry 0 001 Pham Van Nghia 25.0 Nam Dinh NaN NaN NaN 1 002 Tong Thuy Linh 26.0 Thanh Hoa NaN NaN NaN 2 003 Le Van Dai 25.0 TP Ho Chi Minh NaN NaN NaN 3 004 Tran Quang Nghia 23.0 Da Nang NaN NaN NaN 4 005 Doan Thu Ha 22.0 Can Tho NaN NaN NaN 0 001 NaN NaN Nam Dinh 6.75 8.0 7.0 1 002 NaN NaN Thanh Hoa 9.00 9.0 9.5 2 003 NaN NaN TP Ho Chi Minh 8.00 9.0 7.5 3 006 NaN NaN Quang Nam 7.00 8.5 9.0 4 007 NaN NaN Nghe An 10.00 9.0 10.0 Làm sao để nối theo cột Để nối theo cột thì khai báo import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # Khởi tạo DataFrame
df = pd.DataFrame(data = records, columns = ['contents', 'infos', 'numbers'])
df20. Thống kê mô tả dữ liệudf.describe() 6 ID Name Age Province ID Math Physic Chemistry Province 0 001 Pham Van Nghia 25 Nam Dinh 001 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26 Thanh Hoa 002 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25 TP Ho Chi Minh 003 8.00 9.0 7.5 TP Ho Chi Minh 3 004 Tran Quang Nghia 23 Da Nang 006 7.00 8.5 9.0 Quang Nam 4 005 Doan Thu Ha 22 Can Tho 007 10.00 9.0 10.0 Nghe An Khi đó các dòng sẽ được liên kết theo row index ở mỗi bảng. Nếu chúng ta muốn các dòng được liên kết theo một trường nào đó như ‘ID’ thì cần import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 07 là trường đó trước khi nối. Thống kê mô tả dữ liệudf.describe() 7 Name Age Province Math Physic Chemistry Province ID 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 Quang Nam 007 NaN NaN NaN 10.00 9.0 10.0 Nghe An Nếu ta chỉ muốn các dòng mà ID xuất hiện ở cả hai bảng thì thêm import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 03. Thống kê mô tả dữ liệudf.describe() 8 ID Name Age Province ID Math Physic Chemistry Province 0 001 Pham Van Nghia 25 Nam Dinh 001 6.75 8.0 7.0 Nam Dinh 1 002 Tong Thuy Linh 26 Thanh Hoa 002 9.00 9.0 9.5 Thanh Hoa 2 003 Le Van Dai 25 TP Ho Chi Minh 003 8.00 9.0 7.5 TP Ho Chi Minh 3 004 Tran Quang Nghia 23 Da Nang 006 7.00 8.5 9.0 Quang Nam 4 005 Doan Thu Ha 22 Can Tho 007 10.00 9.0 10.0 Nghe An 2.5.5. append()Ngoài câu lệnh import pandas as pd records = [('Author', 'Pham Dinh Khanh', 1993), # 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("https://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. Thống kê mô tả dữ liệudf.describe() 9 ID Name Age Province Math Physic Chemistry 0 001 Pham Van Nghia 25.0 Nam Dinh NaN NaN NaN 1 002 Tong Thuy Linh 26.0 Thanh Hoa NaN NaN NaN 2 003 Le Van Dai 25.0 TP Ho Chi Minh NaN NaN NaN 3 004 Tran Quang Nghia 23.0 Da Nang NaN NaN NaN 4 005 Doan Thu Ha 22.0 Can Tho NaN NaN NaN 0 001 NaN NaN Nam Dinh 6.75 8.0 7.0 1 002 NaN NaN Thanh Hoa 9.00 9.0 9.5 2 003 NaN NaN TP Ho Chi Minh 8.00 9.0 7.5 3 006 NaN NaN Quang Nam 7.00 8.5 9.0 4 007 NaN NaN Nghe An 10.00 9.0 10.0 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. 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. %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient0 Nganh Interest 0 d -0.00278 1 v -0.00396 2 p 0.00982 3 e 0.00042 4 e -0.00710 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ư:
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. 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("https://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("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 12. 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. %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient1 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 csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient2 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. %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient3 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. %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient4 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: %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient5 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("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None) df.head() 13 chúng ta sẽ sử dụng import pandas as pd df = pd.read_csv("https://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: %%script echo skipping Lưu dữ liệu sang file csvdf.to_csv('BostonHousing.csv', index = False) Lưu file exceldf.to_excel('BostonHousing.xls', index = False) Lưu dữ file jsondf.to_json('BostonHousing.json') do not include index = False, index only use for table orient6 2.7. Tổng kếtQua 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:
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. |