Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

Đâ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 orient
7 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 orient
8. 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 orient
7 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.

Show

Đướ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)

contentsinfosnumbers
0Author Pham Dinh Khanh 1993
1Book ML algorithms to Practice 2021
2Target Vi mot cong dong AI vung manh hon 1
3No_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

contentsinfosnumbers
0Author Pham Dinh Khanh 1993
1Book ML algorithms to Practice 2021
2Target Vi mot cong dong AI vung manh hon 1
3No_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.

dis: Khoảng cách trung bình có trọng số tới 5 trung tâm việc làm lớn nhất ở Boston.rad: Chỉ số về khả năng tiếp cận đường cao tốc.tax: Giá trị thuế suất tính trên đơn vị
# Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4
df.iloc[5:10, 2:4]
3.
ptratio: Tỷ lệ học sinh-giáo viên trên mỗi thị trấn.black: Tỷ lệ số người da đen trong thị trấn được tính theo công thức: \(1000(\text{Bk} - 0.63)^2\) ở đây \(\text{Bk}\) là tỷ lệ người da đen trong thị trấn.lstat: Tỷ lệ phần trăm dân số thu nhập thấp.medv: median giá trị của nhà có người sở hữu tính trên đơn vị
# Lựa chọn 5 dòng từ 5:10 và 2 cột từ 2:4
df.iloc[5:10, 2:4]
4.
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()
crimzninduschasnoxrm
00.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
10.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
20.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
30.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 33.4
40.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'])
df
00 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'])
df
01 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'])
df
02 để 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'])
df
03

# Thống kê mô tả dữ liệu
df.describe()

crimzninduschasnoxrmagedisradtaxptratioblstatmedv
count506.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
mean3.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
std8.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
min0.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
max88.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'])
df
04 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'])
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.

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'])
df
06 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]

crimzninduschasnox
00.00632 18.0 2.31 0 0.538
10.02731 0.0 7.07 0 0.469
20.02729 0.0 7.07 0 0.469
30.03237 0.0 2.18 0 0.458
40.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]

induschas
52.18 0
67.87 0
77.87 0
87.87 0
97.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'])
df
0

znchas
5010.0 0
5020.0 0
5030.0 0
5040.0 0
5050.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'])
df
1

crimzninduschasnoxrmagedisradtaxptratioblstatmedv
100.22489 12.5 7.87 0 0.524 6.377 94.3 6.3467 5 311 15.2 392.52 20.45 15.0
110.11747 12.5 7.87 0 0.524 6.009 82.9 6.2267 5 311 15.2 396.90 13.27 18.9
120.09378 12.5 7.87 0 0.524 5.889 39.0 5.4509 5 311 15.2 390.50 15.71 21.7
130.62976 0.0 8.14 0 0.538 5.949 61.8 4.7075 4 307 21.0 396.90 8.26 20.4
140.63796 0.0 8.14 0 0.538 6.096 84.5 4.4619 4 307 21.0 380.02 10.26 18.2
150.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'])
df
2

crimtaxrad
00.00632 296 1
10.02731 242 2
20.02729 242 2
30.03237 222 3
40.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'])
df
3

crimtaxrad
100.22489 311 5
110.11747 311 5
120.09378 311 5
130.62976 307 4
140.63796 307 4

tax

ptratio

crimzninduschasnoxrmagedisradtaxptratioblstatmedv
00.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
10.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
20.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
30.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 33.4
40.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'])
df
4

crimzninduschasnoxrmagedisradtaxptratioblstatmedv
00.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
60.08829 12.5 7.87 0 0.524 6.012 66.6 5.5605 5 311 15.2 395.60 12.43 22.9
70.14455 12.5 7.87 0 0.524 6.172 96.1 5.9505 5 311 15.2 396.90 19.15 27.1
80.21124 12.5 7.87 0 0.524 5.631 100.0 6.0821 5 311 15.2 386.63 29.93 16.5
90.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'])
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.

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
5

crimznindusnoxrmagedisptratioblstatmedv
00.00632 18.0 2.31 0.538 6.575 65.2 4.0900 15.3 396.90 4.98 24.0
10.02731 0.0 7.07 0.469 6.421 78.9 4.9671 17.8 396.90 9.14 21.6
20.02729 0.0 7.07 0.469 7.185 61.1 4.9671 17.8 392.83 4.03 34.7
30.03237 0.0 2.18 0.458 6.998 45.8 6.0622 18.7 394.63 2.94 33.4
40.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'])
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.

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
6

Lọc các cột theo pattern của tên cộtage_1age_2age_3
0Khi 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.
1 3 2
1name2 5 5
2a 3 7 2
3b 4 9 5
4c 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'])
df
7

age_1age_2age_3
01 3 2
12 5 5
23 7 2
34 9 5
45 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'])
df
20 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'])
df
21 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'])
df
22 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'])
df
19 đứ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'])
df
8

crimzninduschasnoxrmagedisradtaxptratioblstatmedv
2830.01501 90.0 1.21 1 0.401 7.923 24.8 5.8850 1 198 13.6 395.52 3.16 50.0
2250.52693 0.0 6.20 0 0.504 8.725 83.0 2.8944 8 307 17.4 382.00 4.63 50.0
3695.66998 0.0 18.10 1 0.631 6.683 96.8 1.3567 24 666 20.2 375.33 3.73 50.0
3706.53876 0.0 18.10 1 0.631 7.016 97.5 1.2024 24 666 20.2 392.05 2.96 50.0
3719.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'])
df
9

crimzninduschasnoxrmagedisradtaxptratioblstatmedv
3684.89822 0.0 18.1 0 0.631 4.970 100.0 1.3325 24 666 20.2 375.52 3.26 50.0
3695.66998 0.0 18.1 1 0.631 6.683 96.8 1.3567 24 666 20.2 375.33 3.73 50.0
3706.53876 0.0 18.1 1 0.631 7.016 97.5 1.2024 24 666 20.2 392.05 2.96 50.0
3719.23230 0.0 18.1 0 0.631 6.216 100.0 1.1691 24 666 20.2 366.15 9.53 50.0
3728.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("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

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("https://raw.githubusercontent.com/phamdinhkhanh/datasets/master/BostonHousing.csv", sep=",", header = 0, index_col = None)
df.head()
2

crimzninduschasnoxrmagedisradtaxptratioblstatmedvtax_labels
540.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?
1110.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?
1120.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?
1130.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?
1140.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("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), 
           ('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
32luỹ 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'])
df
32

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'])
df
33. 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'])
df
34.

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), 
           ('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
20 để 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

taxmedv
0592.0 48.0
1484.0 43.2
2484.0 69.4
3444.0 66.8
4444.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'])
df
36 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 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'])
df
37. 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'])
df
38.

1. biểu đồ line

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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 KB
0

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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 KB
1


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
2

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

Ở đâ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'])
df
39 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 KB
3


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
2

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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 KB
5


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
6

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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 KB
7

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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 KB
8


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
2

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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'])
df
40 là những measurements.

# Check for datatype
df.dtypes
0

HoTenChieuCaoCanNangTuoiDiem
0Pham Cong 170 60 25 8.5
1Nguyen 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'])
df
41 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.

HoTenChieuCaoCanNang
0Pham Cong Nguyen 170.0
1Nguyen Dong Nguyen 175.0
2Pham Cong Nguyen 60.0
3Nguyen Dong Nguyen 65.0
4Pham Cong Nguyen 25.0
5Nguyen Dong Nguyen 27.0
6Pham Cong Nguyen 8.5
7Nguyen 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'])
df
41 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

ChieuCaoCanNangTuoiDiemHo_NguyenHo_PhamTen_CongTen_Dong
0170 60 25 8.5 0 1 1 0
1175 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'])
df
54) 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'])
df
55,
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
56 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'])
df
46. 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'])
df
54) 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'])
df
55,
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
56 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'])
df
46. 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'])
df
53 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'])
df
59 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
60.

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'])
df
59 khá đơn giản:

# Check for datatype
df.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), 
           ('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
62. 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'])
df
63 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.dtypes
2

# Check for datatype
df.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), 
           ('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
64 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'])
df
63 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'])
df
66 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'])
df
67.

# Check for datatype
df.dtypes
4

# Check for datatype
df.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), 
           ('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
68

# Check for datatype
df.dtypes
6

taxrm
tax_labels
low220.59420 6.52564
normal310.29536 6.42074
high589.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.dtypes
7

# Check for datatype
df.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), 
           ('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
63 một list các dimension.

# Check for datatype
df.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: object
0

Ư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'])
df
63 đó 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'])
df
63 đó 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'])
df
72 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'])
df
73 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: object
1

tax_labelslownormalhigh
Chúng ta cũng có thể tự định nghĩa các hàm được tuỳ biến theo ý muốn:010101
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'])
df
63 một list các dimension.
1241 198 4968 0 422 0
21800 0 4456 0 0 0
36424 446 1208 0 1273 0
42155 0 20434 2147 12222 0
52853 216 22175 828 9269 2821
60 0 5807 0 3888 0
7888 0 4287 0 0 0
80 0 5695 1535 0 0
240 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'])
df
63 đó 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'])
df
63 đó 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'])
df
72 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'])
df
73 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: object
2

rmtax
tax_labelslownormalhighlownormalhigh
chas01010101010 1
rad
16.23000 7.9230 6.49553 NaN 6.54000 NaN 241 198 4968 0 422 0
26.08611 NaN 6.98827 NaN NaN NaN 1800 0 4456 0 0 0
36.44259 6.8055 6.38275 NaN 6.66600 NaN 6424 446 1208 0 1273 0
46.79033 NaN 6.10201 6.17875 5.96652 NaN 2155 0 20434 2147 12222 0
56.46277 7.6450 6.50922 6.07067 5.98217 6.44614 2853 216 22175 828 9269 2821
6NaN NaN 6.11888 NaN 6.07800 NaN 0 0 5807 0 3888 0
77.03025 NaN 6.53008 NaN NaN NaN 888 0 4287 0 0 0
8NaN NaN 7.02463 6.67020 NaN NaN 0 0 5695 1535 0 0
24NaN 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'])
df
82,
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
38 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'])
df
87 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'])
df
88 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
89 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'])
df
90 được thể hiện qua biểu đồ venn bên dưới:

Hướng dẫn python file to dataframe - tập tin python vào khung dữ liệu

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: object
3

IDNameAgeProvince
0001 Pham Van Nghia 25 Nam Dinh
1002 Tong Thuy Linh 26 Thanh Hoa
2003 Le Van Dai 25 TP Ho Chi Minh
3004 Tran Quang Nghia 23 Da Nang
4005 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: object
4

IDNameAgeProvinceProvince
0001 6.75 8.0 7.0 Nam Dinh
1002 9.00 9.0 9.5 Thanh Hoa
2003 8.00 9.0 7.5 TP Ho Chi Minh
3006 7.00 8.5 9.0 Tran Quang Nghia
4007 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: object
5

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: object
6

IDNameAgeProvince_SvNameAgeProvinceProvince_Score
0001 Pham Van Nghia 25 Nam Dinh 6.75 8.0 7.0 Nam Dinh
1002 Tong Thuy Linh 26 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa
2003 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: object
7

IDNameAgeProvince_SvNameAgeProvinceProvince_Score
0001 Pham Van Nghia 25 Nam Dinh 6.75 8.0 7.0 Nam Dinh
1002 Tong Thuy Linh 26 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa
2003 Le Van Dai 25 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh
3004 Tran Quang Nghia 23 Da Nang NaN NaN NaN NaN
4005 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: object
8

IDNameAgeProvince_SvNameAgeProvinceProvince_Score
0001 Pham Van Nghia 25.0 Nam Dinh 6.75 8.0 7.0 Nam Dinh
1002 Tong Thuy Linh 26.0 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa
2003 Le Van Dai 25.0 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh
3006 NaN NaN NaN 7.00 8.5 9.0 Tran Quang Nghia
4007 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: object
9

IDNameAgeProvince_SvNameAgeProvinceProvince_Score
0001 Pham Van Nghia 25.0 Nam Dinh 6.75 8.0 7.0 Nam Dinh
1002 Tong Thuy Linh 26.0 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa
2003 Le Van Dai 25.0 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh
3004 Tran Quang Nghia 23.0 Da Nang NaN NaN NaN NaN
4005 Doan Thu Ha 22.0 Can Tho NaN NaN NaN NaN
5006 NaN NaN NaN 7.00 8.5 9.0 Doan Thu Ha
6007 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

ID_SvNghe An 2.5.3. df.join()¶Province_SvID_ScoreDataFrame 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.NameAgeProvince_Score
0001 Pham Van Nghia 25 Nam Dinh 001 6.75 8.0 7.0 Nam Dinh
1002 Tong Thuy Linh 26 Thanh Hoa 002 9.00 9.0 9.5 Thanh Hoa
2003 Le Van Dai 25 TP Ho Chi Minh 003 8.00 9.0 7.5 TP Ho Chi Minh
3004 Tran Quang Nghia 23 Da Nang 006 7.00 8.5 9.0 Doan Thu Ha
4005 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

Nghe An 2.5.3. df.join()¶Province_SvDataFrame 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.NameAgeProvince_Score
Math
001Pham Van Nghia 25 Nam Dinh 6.75 8.0 7.0 Nam Dinh
002Tong Thuy Linh 26 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa
003Le Van Dai 25 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh
004Tran Quang Nghia 23 Da Nang NaN NaN NaN NaN
005Doan 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

MathPhysic
0001 Nam Dinh
1002 Thanh Hoa
2003 TP Ho Chi Minh
3004 Da Nang
4005 Can Tho
0001 Nam Dinh
1002 Thanh Hoa
2003 TP Ho Chi Minh
3006 Doan Thu Ha
4007 Doan Thu Ha

Can Tho

# Thống kê mô tả dữ liệu
df.describe()
5

MathNghe An 2.5.3. df.join()¶PhysicDataFrame 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.NameAge
0001 Pham Van Nghia 25.0 Nam Dinh NaN NaN NaN
1002 Tong Thuy Linh 26.0 Thanh Hoa NaN NaN NaN
2003 Le Van Dai 25.0 TP Ho Chi Minh NaN NaN NaN
3004 Tran Quang Nghia 23.0 Da Nang NaN NaN NaN
4005 Doan Thu Ha 22.0 Can Tho NaN NaN NaN
0001 NaN NaN Nam Dinh 6.75 8.0 7.0
1002 NaN NaN Thanh Hoa 9.00 9.0 9.5
2003 NaN NaN TP Ho Chi Minh 8.00 9.0 7.5
3006 NaN NaN Doan Thu Ha 7.00 8.5 9.0
4007 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

MathNghe An 2.5.3. df.join()¶PhysicMathDataFrame 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.NameAgePhysic
0001 Pham Van Nghia 25 Nam Dinh 001 6.75 8.0 7.0 Nam Dinh
1002 Tong Thuy Linh 26 Thanh Hoa 002 9.00 9.0 9.5 Thanh Hoa
2003 Le Van Dai 25 TP Ho Chi Minh 003 8.00 9.0 7.5 TP Ho Chi Minh
3004 Tran Quang Nghia 23 Da Nang 006 7.00 8.5 9.0 Doan Thu Ha
4005 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

Nghe An 2.5.3. df.join()¶PhysicDataFrame 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.NameAgePhysic
Math
001Pham Van Nghia 25.0 Nam Dinh 6.75 8.0 7.0 Nam Dinh
002Tong Thuy Linh 26.0 Thanh Hoa 9.00 9.0 9.5 Thanh Hoa
003Le Van Dai 25.0 TP Ho Chi Minh 8.00 9.0 7.5 TP Ho Chi Minh
004Tran Quang Nghia 23.0 Da Nang NaN NaN NaN NaN
005Doan Thu Ha 22.0 Can Tho NaN NaN NaN NaN
006NaN NaN NaN 7.00 8.5 9.0 Doan Thu Ha
007NaN NaN NaN 10.00 9.0 10.0 Doan Thu Ha

Can Tho

# Thống kê mô tả dữ liệu
df.describe()
8

IDNameAgeProvinceIDMathPhysicChemistryProvince
0001 Math25 Physic001 6.75 8.0 7.0 Physic
1002 Chemistry26 Pham Van Nghia 002 9.00 9.0 9.5 Pham Van Nghia
2003 Nam Dinh 25 Tong Thuy Linh 003 8.00 9.0 7.5 Tong Thuy Linh
3004 Thanh Hoa 23 Le Van Dai 006 7.00 8.5 9.0 TP Ho Chi Minh
4005 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

IDNameAgeProvinceMathPhysicChemistry
0001 Math25.0 PhysicChemistryChemistryChemistry
1002 Chemistry26.0 Pham Van Nghia ChemistryChemistryChemistry
2003 Nam Dinh 25.0 Tong Thuy Linh ChemistryChemistryChemistry
3004 Thanh Hoa 23.0 Le Van Dai ChemistryChemistryChemistry
4005 Tran Quang Nghia 22.0 Da Nang ChemistryChemistryChemistry
0001 ChemistryChemistryPhysic6.75 8.0 7.0
1002 ChemistryChemistryPham Van Nghia 9.00 9.0 9.5
2003 ChemistryChemistryTong Thuy Linh 8.00 9.0 7.5
3006 ChemistryChemistryTP Ho Chi Minh 7.00 8.5 9.0
4007 ChemistryChemistryQuang 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 orient
0

Nghe An 2.5.5. append()¶
0Ngoà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'])
df
96 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.
-0.00278
1NaN -0.00396
2Câ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
3Ví 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
4Ví 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 orient
1

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 orient
2

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 orient
3

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 orient
4

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.

%%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
5

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 orient
6

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("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:

  • 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.

  1. Các lệnh join, merge, concatenate bảng.

  2. Kết nối với dữ liệu SQL.

  3. 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.

  4. Tiếp theo là bài tập thực hành cho bài viết này.

  5. 2.8. Bài tập¶