Phân phối dữ liệu
Trước đó trong hướng dẫn này, chúng tôi đã làm việc với một lượng dữ liệu rất nhỏ trong các ví dụ của chúng tôi, chỉ để hiểu các khái niệm khác nhau.
Trong thế giới thực, các bộ dữ liệu lớn hơn nhiều, nhưng có thể khó thu thập dữ liệu trong thế giới thực, ít nhất là ở giai đoạn đầu của một dự án.
Làm thế nào chúng ta có thể có được bộ dữ liệu lớn?
Để tạo các bộ dữ liệu lớn để thử nghiệm, chúng tôi sử dụng mô -đun Python Numpy, đi kèm với một số phương pháp để tạo các bộ dữ liệu ngẫu nhiên, ở mọi kích thước.
Thí dụ
Tạo một mảng chứa 250 phao ngẫu nhiên trong khoảng từ 0 đến 5:
Nhập khẩu Numpy
x = numpy.random.uniform (0,0, 5.0, 250)
in (x)
Hãy tự mình thử »
Biểu đồ
Để trực quan hóa tập dữ liệu, chúng ta có thể vẽ một biểu đồ với dữ liệu chúng ta đã thu thập được.
Chúng tôi sẽ sử dụng mô -đun Python matplotlib để vẽ biểu đồ.
Tìm hiểu về mô -đun matplotlib trong hướng dẫn matplotlib của chúng tôi.
Thí dụ
Tạo một mảng chứa 250 phao ngẫu nhiên trong khoảng từ 0 đến 5:
Nhập khẩu Numpy
import matplotlib.pyplot as plt
x = numpy.random.uniform (0,0, 5.0, 250)
in (x)
plt.show()
Result:
Hãy tự mình thử »
Biểu đồ
Để trực quan hóa tập dữ liệu, chúng ta có thể vẽ một biểu đồ với dữ liệu chúng ta đã thu thập được.
Chúng tôi sẽ sử dụng mô -đun Python matplotlib để vẽ biểu đồ.
Tìm hiểu về mô -đun matplotlib trong hướng dẫn matplotlib của chúng tôi.
Etc.
Vẽ biểu đồ:
- Nhập Numpyimport matplotlib.pyplot như PLT
- plt.hist (x, 5) plt.show ()
- Chạy ví dụ »
- Biểu đồ giải thích
- Chúng tôi sử dụng mảng từ ví dụ trên để vẽ biểu đồ với 5 thanh.
Thanh đầu tiên biểu thị số lượng giá trị trong mảng nằm trong khoảng từ 0 đến 1. The array values are random numbers and will not show the exact same result on your computer.
Thanh thứ hai đại diện cho bao nhiêu giá trị từ 1 đến 2.
Mà mang lại cho chúng ta kết quả này:
Thí dụ
Tạo một mảng chứa 250 phao ngẫu nhiên trong khoảng từ 0 đến 5:
Nhập khẩu Numpy
import matplotlib.pyplot as plt
x = numpy.random.uniform (0,0, 5.0, 250)
in (x)
plt.show()
Hãy tự mình thử »
Bắt đầu từ đây? Bài học này là một phần của hướng dẫn đầy đủ trong việc sử dụng Python để phân tích dữ liệu. Kiểm tra sự khởi đầu.
Mục tiêu của bài học này
Trong bài học này, bạn sẽ học cách:
- Phân phối phân phối bộ dữ liệu
- Mô tả hình dạng của dữ liệu với số liệu thống kê cơ bản
- Tạo biểu đồ
- So sánh phân phối với biểu đồ
- Làm ô hộp
Phân phối trong Python là gì?
Phân phối bình thường Python là một hàm phân phối các biến ngẫu nhiên trong một biểu đồ được định hình như một chuông đối xứng. Nó làm như vậy bằng cách sắp xếp phân phối xác suất cho mỗi giá trị.
Phân phối dữ liệu là gì? Throughout this tutorial, you can use Mode for free to practice writing and running Python code.
Phân phối dữ liệu là một hàm chỉ định tất cả các giá trị có thể có cho một biến và cũng định lượng tần số tương đối (xác suất chúng thường xảy ra). Phân phối được coi là bất kỳ dân số nào có sự phân tán dữ liệu.
- Phân phối trong khai thác dữ liệu là gì?
- Khai thác dữ liệu phân tán đề cập đến việc khai thác các bộ dữ liệu phân tán. Các bộ dữ liệu được lưu trữ trong cơ sở dữ liệu cục bộ, được lưu trữ bởi các máy tính địa phương, được kết nối thông qua công việc mạng máy tính.Clone. This will take you to the SQL Query Editor, with a query and results pre-populated.
- Sơ đồ phân phối là gì?Python Notebook under Notebook in the left navigation panel. This will open a new notebook, with the results of the query loaded in as a dataframe.
- Các sơ đồ phân phối đánh giá trực quan việc phân phối dữ liệu mẫu bằng cách so sánh phân phối thực nghiệm của dữ liệu với các giá trị lý thuyết dự kiến từ một phân phối được chỉ định.
Bắt đầu từ đây? Bài học này là một phần của hướng dẫn đầy đủ trong việc sử dụng Python để phân tích dữ liệu. Kiểm tra sự khởi đầu.
Mục tiêu của bài học này
Trong bài học này, bạn sẽ học cách:
Sử dụng dữ liệu chuyến bay, bạn sẽ học cách so sánh tốt hơn các xu hướng giữa các hãng hàng không, điều chỉnh phân tích của bạn dựa trên số lượng chuyến bay của hãng hàng không bay. Cuối cùng, bạn sẽ biết những hãng hàng không và sân bay nào ít nhiều đáng tin cậy và thậm chí có thể đến Lễ Tạ ơn đúng giờ trong năm nay!
Sau khi làm theo các bước trên, hãy vào sổ ghi chép của bạn và nhập Numpy và Pandas, sau đó gán DataFrame của bạn cho biến delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 7 để dễ dàng theo dõi:
Đầu vào
import pandas as pd import numpy as np
Đầu vào
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan)
Đầu vào
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival
Đầu ra
2015-01-02 | Aa | 1 | JFK | Lỏng lẻo | -19.0 | 0.0 | 2475.0 | Nan | Nan | Nan | Nan | Nan | 381.0 |
2015-01-03 | Aa | 1 | JFK | Lỏng lẻo | -39.0 | 0.0 | 2475.0 | Nan | Nan | Nan | Nan | Nan | 358.0 |
2015-01-03 | Aa | 1 | JFK | Lỏng lẻo | -12.0 | 0.0 | 2475.0 | Nan | Nan | Nan | Nan | Nan | 385.0 |
2015-01-03 | Aa | 1 | JFK | Lỏng lẻo | -8.0 | 0.0 | 2475.0 | Nan | Nan | Nan | Nan | Nan | 389.0 |
2015-01-03 | Aa | 1 | JFK | Lỏng lẻo | 25.0 | 0.0 | 2475.0 | 0.0 | 0.0 | 0.0 | 25.0 | 0.0 | 424.0 |
Nan
2015-01-03
2015-01-04
2015-01-05
2015-01-06
Đầu vào
Phân phối
Bay có thể là một nỗ lực lâu dài và bực bội ở Hoa Kỳ, đặc biệt là vào các ngày lễ và mùa bão khi các chuyến bay bị trì hoãn hàng giờ, đôi khi nhiều ngày. Là người tiêu dùng, chúng ta thường nhận thức được những xu hướng đó, nhưng những xu hướng chậm trễ hàng ngày? Những hãng hàng không nào đang làm tốt hơn trong việc đưa bạn đến đó đúng giờ và sân bay nào là tồi tệ nhất để bay ra?
Đầu vào
delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier
Đầu ra
WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64
Một trong những cách tốt nhất để trả lời các câu hỏi như thế này là xem xét các phân phối của các biến có liên quan. Bạn có thể nghĩ về việc phân phối bộ dữ liệu hoặc biến dưới dạng danh sách các giá trị có thể và một số chỉ định về tần suất mỗi giá trị xảy ra. Để được bồi dưỡng nhanh về phân phối, hãy xem bài học này.
Trước khi bạn nhìn vào các phân phối sự chậm trễ trên các hãng hàng không, hãy bắt đầu bằng cách khám phá những hãng hàng không nào có sự chậm trễ nhất.: A great analyst will always be skeptical and curious. When you reach a point in your analysis where you might have an answer, go a little further. Consider what might be affecting your results and what might support a counterargument. The best analysis will be presented as a very refined version of the broader investigation. Always be curious!
Đầu tiên, xây dựng chuỗi cho biết liệu các chuyến bay có bị trì hoãn hay không, giống như bạn đã làm trong bài học trước:
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson
Bây giờ đếm số lượng chuyến bay bị trì hoãn cho mỗi hãng hàng không. Vì bạn chỉ sau một giá trị cho mỗi hãng hàng không, bạn không phải sử dụng delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 8, delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 9 và WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 0 như trong bài học trước. Thay vào đó, chỉ cần lọc bộ dữ liệu, việc đếm các hàng cho mỗi hàng mang bằng WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 1:
Có thể là một ý tưởng tốt để xem xét tỷ lệ các chuyến bay của mỗi hãng hàng không bị trì hoãn, thay vì chỉ tổng số của mỗi hãng hàng không bị trì hoãn.
Đầu vào
data.groupby(['unique_carrier','delayed']).size().unstack()
Đầu ra
8912 | 9841 |
3527 | 2104 |
4832 | 4401 |
17719 | 9803 |
10596 | 11371 |
1103 | 1848 |
1351 | 1354 |
4692 | 8060 |
1550 | 2133 |
9977 | 10804 |
7885 | 8624 |
7850 | 6353 |
1254 | 781 |
21789 | 21150 |
Oo
Đầu vào
delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5]
Đầu ra
Aa | 8912 | 9841 |
JFK | 3527 | 2104 |
Lỏng lẻo | 4832 | 4401 |
Nan | 17719 | 9803 |
2015-01-03 | 10596 | 11371 |
2015-01-04
2015-01-05
Đầu vào
delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5]
Đầu ra
Aa | 8912 | 9841 | 18753 |
JFK | 3527 | 2104 | 5631 |
Lỏng lẻo | 4832 | 4401 | 9233 |
Nan | 17719 | 9803 | 27522 |
2015-01-03 | 10596 | 11371 | 21967 |
2015-01-04
2015-01-05
Đầu vào
delayed_by_carrier['proportion_delayed'] = delayed_by_carrier[True] / delayed_by_carrier['flights_count'] delayed_by_carrier[:4]
Đầu ra
Aa | 8912 | 9841 | 18753 | 0.524769 |
JFK | 3527 | 2104 | 5631 | 0.373646 |
Lỏng lẻo | 4832 | 4401 | 9233 | 0.476660 |
Nan | 17719 | 9803 | 27522 | 0.356188 |
2015-01-03
2015-01-04
Đầu vào
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 0
2015-01-05
1. Nhóm theo nhà cung cấp và bị trì hoãn | 4692 | 8060 | 12752 | 0.632058 |
Các chuyến bay nhóm bởi WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 2 và WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 3, nhận số lượng với delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 9 (như bạn đã làm trong bài học trước, sử dụng WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 0 để trả về DataFrame: | 1103 | 1848 | 2951 | 0.626228 |
chậm trễ | 1550 | 2133 | 3683 | 0.579147 |
Aa | 8912 | 9841 | 18753 | 0.524769 |
Sai | 7885 | 8624 | 16509 | 0.522382 |
ĐÚNG VẬY | 9977 | 10804 | 20781 | 0.519898 |
2015-01-03 | 10596 | 11371 | 21967 | 0.517640 |
2015-01-04 | 1351 | 1354 | 2705 | 0.500555 |
Wn | 21789 | 21150 | 42939 | 0.492559 |
B6 | 4832 | 4401 | 9233 | 0.476660 |
CHÚNG TA | 7850 | 6353 | 14203 | 0.447300 |
VX | 1254 | 781 | 2035 | 0.383784 |
BẰNG | 3527 | 2104 | 5631 | 0.373646 |
DL | 17719 | 9803 | 27522 | 0.356188 |
Điều này vẽ ra một bức tranh rất khác - Tây Nam nằm giữa gói khi nói đến tỷ lệ phần trăm của các chuyến bay bị trì hoãn.
Nhưng những gì về thời gian hành khách bị trì hoãn trên mỗi hãng hàng không? Điều hợp lý là tỷ lệ chậm trễ chuyến bay có thể thấp hơn đối với một số hãng hàng không, nhưng chiều dài của sự chậm trễ đó có thể dài hơn nhiều. Hành khách quan tâm nhiều hơn về độ trễ chuyến bay dài hơn so với những người ngắn hơn và họ có thể chọn một hãng hàng không khác với một kỷ lục về độ trễ dài. Đối với hành khách, những hãng hàng không có vẻ đáng tin cậy hơn? Hoặc trong các thuật ngữ đo lường hơn, trung bình có bao nhiêu phút các chuyến bay, đối với mỗi hãng hàng không?How many minutes are flights delayed on average, for each airline?
Bần tiện
Giá trị trung bình, hoặc trung bình, cho bạn một ý tưởng chung về việc các chuyến bay bị trì hoãn bao nhiêu phút cho mỗi hãng hàng không. .Pivot_Table () tính toán giá trị trung bình của các giá trị tổng hợp theo mặc định. Bạn có thể xoay trên cột WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 2 để xem thời gian trễ trung bình được tổng hợp bởi hãng hàng không:mean, or the average, gives you a general idea of how many minutes flights were delayed for each airline. .pivot_table() calculates the mean of the aggregated values by default. You can pivot on the column WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 2 to see the mean delay time aggregated by airline:
Đầu vào
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 1
Đầu ra
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 2
Lưu ý rằng vì WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 8 đã tính WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 9 theo mặc định, nên những điều trên có hiệu quả giống như khi bạn vượt qua rõ ràng đối số như thế này (và nó tạo ra kết quả chính xác tương tự):
Đầu vào
Đầu ra
Đầu ra
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 2
Lưu ý rằng vì WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 8 đã tính WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 9 theo mặc định, nên những điều trên có hiệu quả giống như khi bạn vượt qua rõ ràng đối số như thế này (và nó tạo ra kết quả chính xác tương tự):
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 3
Thống kê cơ bản với data.groupby(['unique_carrier','delayed']).size().unstack() 0
Đầu vào
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 5
Đầu ra
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 6
Lưu ý rằng vì WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 8 đã tính WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 9 theo mặc định, nên những điều trên có hiệu quả giống như khi bạn vượt qua rõ ràng đối số như thế này (và nó tạo ra kết quả chính xác tương tự):
- data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 3
- Thống kê cơ bản với data.groupby(['unique_carrier','delayed']).size().unstack() 0
- data.groupby(['unique_carrier','delayed']).size().unstack() 0 là một chức năng tiện dụng khi bạn làm việc với các cột số. Bạn có thể sử dụng data.groupby(['unique_carrier','delayed']).size().unstack() 0 để xem một số số liệu thống kê cơ bản về cột, chẳng hạn như giá trị trung bình, tối thiểu, tối đa và độ lệch chuẩn. Điều này có thể cung cấp cho bạn một cái nhìn tổng quan nhanh chóng về hình dạng của dữ liệu.
Trước khi sử dụng data.groupby(['unique_carrier','delayed']).size().unstack() 3, chọn sê -ri data.groupby(['unique_carrier','delayed']).size().unstack() 4 cho tất cả các chuyến bay Tây Nam:
Đầu ra
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 7
Lưu ý rằng vì WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 8 đã tính WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 9 theo mặc định, nên những điều trên có hiệu quả giống như khi bạn vượt qua rõ ràng đối số như thế này (và nó tạo ra kết quả chính xác tương tự):
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 3
- Thống kê cơ bản với data.groupby(['unique_carrier','delayed']).size().unstack() 0
- data.groupby(['unique_carrier','delayed']).size().unstack() 0 là một chức năng tiện dụng khi bạn làm việc với các cột số. Bạn có thể sử dụng data.groupby(['unique_carrier','delayed']).size().unstack() 0 để xem một số số liệu thống kê cơ bản về cột, chẳng hạn như giá trị trung bình, tối thiểu, tối đa và độ lệch chuẩn. Điều này có thể cung cấp cho bạn một cái nhìn tổng quan nhanh chóng về hình dạng của dữ liệu.
- Trước khi sử dụng data.groupby(['unique_carrier','delayed']).size().unstack() 3, chọn sê -ri data.groupby(['unique_carrier','delayed']).size().unstack() 4 cho tất cả các chuyến bay Tây Nam:
- Trong trường hợp khó hiểu, đây là những gì vừa xảy ra, đã đánh giá từ trong ra ngoài, sau đó từ trái sang phải:
- data.groupby(['unique_carrier','delayed']).size().unstack() 5 tạo ra một chỉ số boolean trả về data.groupby(['unique_carrier','delayed']).size().unstack() 6 cho các hàng đại diện cho các chuyến bay Tây Nam
- Gói đó trong data.groupby(['unique_carrier','delayed']).size().unstack() 7 áp dụng chỉ số Boolean cho DataFrame delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 7.
- data.groupby(['unique_carrier','delayed']).size().unstack() 9 giảm các cột thành cột ['ARR_DELAY'] (và chỉ mục).
- Bây giờ bạn có thể chạy data.groupby(['unique_carrier','delayed']).size().unstack() 0 trên đối tượng mới này mà bạn đã tạo để có được số liệu thống kê cơ bản:
Đây là một tính năng thực sự khiến Python khác biệt với SQL hoặc Excel. Sẽ mất rất nhiều công việc để có được thông tin này trong một trong những công cụ đó, nhưng ở đây cũng dễ dàng như thêm phương thức data.groupby(['unique_carrier','delayed']).size().unstack() 0.
Dưới đây là sự cố nhanh chóng của những điều trên vì nó liên quan đến bộ dữ liệu cụ thể này:
delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 2: Có 42.020 hàng trong bộ dữ liệu, được lọc chỉ hiển thị Tây Nam (WN).
WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 9: Độ trễ trung bình.
delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 4: Độ lệch chuẩn. Thêm về điều này dưới đây.
delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 5: Độ trễ ngắn nhất trong tập dữ liệu. Trong trường hợp này, chuyến bay rất sớm.histogram. Histograms allow you to bucket the values into bins, or fixed value ranges, and count how many values fall in that bin.
delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 6: Phần trăm thứ 25. 25% độ trễ thấp hơn delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 7.
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 8delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 8: Tỷ lệ phần trăm thứ 50 hoặc delayed_by_carrier = data.groupby(['unique_carrier','delayed']).size().unstack().reset_index() delayed_by_carrier[:5] 9. 50% độ trễ thấp hơn delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 0.
delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 1: Tỷ lệ phần trăm thứ 75. 75% độ trễ thấp hơn delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 2.
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 9delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 3: Độ trễ lâu nhất trong bộ dữ liệu: delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 4.
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 0Thực hành vấn đề
Đầu vào
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 1
Đầu ra
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 2
Lưu ý rằng vì WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 8 đã tính WN 21150 EV 11371 OO 10804 AA 9841 DL 9803 UA 8624 MQ 8060 US 6353 B6 4401 NK 2133 AS 2104 F9 1848 HA 1354 VX 781 Name: unique_carrier, dtype: int64 9 theo mặc định, nên những điều trên có hiệu quả giống như khi bạn vượt qua rõ ràng đối số như thế này (và nó tạo ra kết quả chính xác tương tự):histograms are not bar charts. In a bar chart, the height of the bar represents a numerical value (such as number of delayed flights), but each bar itself represents a category—something that cannot be counted, averaged, or summed (like airline).
data = datasets[0] # assign SQL query results to the data variable data = data.fillna(np.nan) 3
Một cách để nhanh chóng cho biết sự khác biệt là biểu đồ không có khoảng trống giữa các thanh. Bởi vì chúng đại diện cho các giá trị trên một phổ liên tục, một khoảng trống giữa các thanh sẽ có một ý nghĩa cụ thể: nó sẽ chỉ ra một thùng trống. Biểu đồ thanh có thể có khoảng trống giữa các thanh. Bởi vì chúng hiển thị các danh mục, thứ tự và khoảng cách không quan trọng.
Kiểm tra bài đăng trên blog này bằng cách chảy dữ liệu để biết giải thích tuyệt vời về biểu đồ.
Numpy delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 6
Giả sử bạn quan tâm đến việc phân tích độ dài độ trễ và bạn muốn đặt những độ dài này vào các thùng đại diện cho mỗi khoảng thời gian 10 phút. Bạn có thể sử dụng phương thức Numpy delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 6 để tạo danh sách các số xác định các thùng đó. Các thùng của khoảng thời gian mười phút sẽ từ sớm từ 50 phút (-50) đến 200 phút (200). Thùng đầu tiên sẽ tổ chức số lượng các chuyến bay đến sớm từ 50 đến 40 phút, sau đó 40 đến 30 phút, v.v.
Đầu vào
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 3
Đầu ra
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 4
Hãy vẽ sơ đồ phân phối độ trễ chuyến bay Tây Nam dưới dạng biểu đồ bằng cách sử dụng biến bin_values được tạo ở trên:
Đầu vào
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 5
Đầu ra
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 6
Hãy vẽ sơ đồ phân phối độ trễ chuyến bay Tây Nam dưới dạng biểu đồ bằng cách sử dụng biến bin_values được tạo ở trên:
Tuyệt quá! Bạn có thể thấy rằng phần lớn các chuyến bay Tây Nam không trễ quá 30 phút. Mặc dù hãng hàng không có nhiều chuyến bay, nhưng phần lớn trong số họ không đủ muộn để khiến bạn hối hận khi đi nghỉ.
Thực hành vấn đề
Lô đất của Virgin America trì hoãn trong khoảng thời gian dài năm phút từ -50 phút đến 200 phút.
Tuyệt quá! Bạn có thể thấy rằng phần lớn các chuyến bay Tây Nam không trễ quá 30 phút. Mặc dù hãng hàng không có nhiều chuyến bay, nhưng phần lớn trong số họ không đủ muộn để khiến bạn hối hận khi đi nghỉ.
Thực hành vấn đềWhich flights were delayed between 20-25 minutes? Was there a given reason? What hypotheses might you make about why there are more flights in that bin as opposed to the 15-20 minute bucket? Select the flights using boolean indexing, then count the origin airports for those flights.
Lô đất của Virgin America trì hoãn trong khoảng thời gian dài năm phút từ -50 phút đến 200 phút.
Xem giải pháp
Hãy đào sâu vào các chuyến bay Virgin America bị trì hoãn bất ngờ. Những chuyến bay nào bị trì hoãn trong khoảng 20-25 phút? Có một lý do nhất định? Bạn có thể đưa ra những giả thuyết nào về lý do tại sao có nhiều chuyến bay trong thùng đó trái ngược với xô 15-20 phút? Chọn các chuyến bay bằng cách sử dụng lập chỉ mục Boolean, sau đó đếm các sân bay gốc cho các chuyến bay đó.
So sánh phân phối với biểu đồ
Đầu vào
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 7
Đầu ra
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 8
Hãy vẽ sơ đồ phân phối độ trễ chuyến bay Tây Nam dưới dạng biểu đồ bằng cách sử dụng biến bin_values được tạo ở trên:
Đầu vào
data.head() # our flight data, including delay minute counts by type, and total delay upon arrival 9
Đầu ra
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 0
Hãy vẽ sơ đồ phân phối độ trễ chuyến bay Tây Nam dưới dạng biểu đồ bằng cách sử dụng biến bin_values được tạo ở trên:
Tuyệt quá! Bạn có thể thấy rằng phần lớn các chuyến bay Tây Nam không trễ quá 30 phút. Mặc dù hãng hàng không có nhiều chuyến bay, nhưng phần lớn trong số họ không đủ muộn để khiến bạn hối hận khi đi nghỉ.
Thực hành vấn đềstandard deviation, which describes how flight delays are dispersed. In comparing the histograms, you can see that US Airways' delays are most concentrated between -20 to 20 minutes, while Envoy Air's flight delays are more distributed from 0 to 200 minutes. You can say that Envoy Air's delays are more dispersed than US Airways' delays, meaning that for a given flight on either airline, you would be less certain about the length of the delay for the Envoy flight.
Lô đất của Virgin America trì hoãn trong khoảng thời gian dài năm phút từ -50 phút đến 200 phút.normal distribution, or a common expected shape of distribution among various types of data. The value for standard deviation defines a range above and below the mean for which a certain percentage of the data lie. You can see in this visualization that, for a normal distribution:
- Xem giải pháphigher.
- Hãy đào sâu vào các chuyến bay Virgin America bị trì hoãn bất ngờ. Những chuyến bay nào bị trì hoãn trong khoảng 20-25 phút? Có một lý do nhất định? Bạn có thể đưa ra những giả thuyết nào về lý do tại sao có nhiều chuyến bay trong thùng đó trái ngược với xô 15-20 phút? Chọn các chuyến bay bằng cách sử dụng lập chỉ mục Boolean, sau đó đếm các sân bay gốc cho các chuyến bay đó.lower.
So sánh phân phối với biểu đồ
So sánh phân phối của hai hãng hàng không với số lượng tổng số chuyến bay, US Airways và Envoy Air:
Đầu vào
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 1
Đầu ra
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 2
Hãy vẽ sơ đồ phân phối độ trễ chuyến bay Tây Nam dưới dạng biểu đồ bằng cách sử dụng biến bin_values được tạo ở trên:
Tuyệt quá! Bạn có thể thấy rằng phần lớn các chuyến bay Tây Nam không trễ quá 30 phút. Mặc dù hãng hàng không có nhiều chuyến bay, nhưng phần lớn trong số họ không đủ muộn để khiến bạn hối hận khi đi nghỉ.
Thực hành vấn đềdispersion than Envoy Air.
Lô đất của Virgin America trì hoãn trong khoảng thời gian dài năm phút từ -50 phút đến 200 phút.
Xem giải pháp
Để làm cho mọi thứ dễ dàng hơn, bạn có thể nhìn vào 20 sân bay khối lượng cao nhất theo nguồn gốc:
Đầu vào
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 3
Đầu ra
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 4
Đầu vào
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 5
Đầu ra
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 6
Lọc danh sách các giá trị với delayed_by_carrier['flights_count'] = (delayed_by_carrier[False] + delayed_by_carrier[True]) delayed_by_carrier[:5] 9
Để tạo một chỉ mục boolean nơi bạn đang tìm kiếm các giá trị phù hợp với bất cứ thứ gì trong danh sách, bạn phải sử dụng .isin () với danh sách các trận đấu mong muốn.
Bạn có thể tạo một bộ lọc chỉ số Boolean cho các hồ sơ có nguồn gốc ('nguồn gốc') trong 20 sân bay khối lượng cao nhất.
Đầu vào
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 7
Đầu ra
bị hủy bỏ | khoảng cách | 1 | chậm trễ | 2015-01-02 | -19.0 | 0.0 | 2475.0 | Aa | Aa | Aa | Aa | Aa | 381.0 | JFK |
Lỏng lẻo | khoảng cách | 1 | chậm trễ | 2015-01-02 | -39.0 | 0.0 | 2475.0 | Aa | Aa | Aa | Aa | Aa | 358.0 | JFK |
Lỏng lẻo | khoảng cách | 1 | chậm trễ | 2015-01-02 | -12.0 | 0.0 | 2475.0 | Aa | Aa | Aa | Aa | Aa | 385.0 | JFK |
Lỏng lẻo | khoảng cách | 1 | chậm trễ | 2015-01-02 | -8.0 | 0.0 | 2475.0 | Aa | Aa | Aa | Aa | Aa | 389.0 | JFK |
Lỏng lẻo | khoảng cách | 1 | chậm trễ | 2015-01-02 | 25.0 | 0.0 | 2475.0 | 0.0 | 0.0 | 0.0 | 25.0 | 0.0 | 424.0 | Aa |
JFK
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 8Lỏng lẻo
Nan
Sai
Đầu vào
data['delayed'] = data['arr_delay'].apply(lambda x: x > 0) #from previous lesson 9
Đầu ra
3.327536 | 3.590580 | 0.509317 | 20.526899 | 36.049598 | -6.842809 | 8.316993 | -0.543307 | 12.156187 | 3.688742 | 13.709512 | 16.500000 | -2.947712 | 5.834734 | 1.193333 | 4.590062 | 16.547325 | 12.254717 | 8.371429 | 4.534161 |
15.428112 | 30.471616 | 13.768340 | 51.186292 | 37.604138 | 22.738007 | 37.370229 | 15.666667 | 39.844037 | 31.882979 | 18.550685 | 26.117338 | 15.606426 | 17.511364 | 20.027586 | 37.995702 | 19.783843 | 13.771812 | 11.773364 | 13.465190 |
21.423343 | 26.867857 | 23.325077 | 52.495238 | 38.360104 | 35.771626 | 53.617978 | 25.293651 | 20.464286 | 55.445578 | 19.564767 | 28.159016 | 32.450704 | 39.847025 | 19.461279 | 83.225619 | 20.180085 | 10.291262 | 19.251092 | 15.503125 |
3.095000 | 11.208609 | 6.051672 | 29.899200 | 28.705263 | 24.696594 | 22.674051 | 13.711864 | 8.450505 | 19.554422 | 17.229381 | 15.788618 | 34.984177 | 14.929204 | 23.874564 | 63.916667 | 13.665217 | 5.418060 | 13.225806 | 2.003356 |
6.361725 | 43.310580 | 13.294964 | 15.344029 | 11.534626 | 35.078616 | 43.104530 | 23.425926 | 3.622642 | 43.359073 | 13.330579 | 7.234004 | 61.165049 | 29.996785 | 9.435088 | 42.356183 | 12.156658 | 4.372180 | 8.582716 | 0.581481 |
0.944276 | 10.651316 | 4.869565 | 33.301095 | 10.428762 | 13.403727 | 22.030508 | 11.254464 | 10.490476 | 15.536680 | 7.498652 | 5.442446 | 46.063973 | 8.977918 | -1.666667 | 38.479361 | 7.348028 | 9.467925 | 5.289216 | 2.977941 |
3.033099 | 6.807692 | 10.484568 | 14.569873 | 11.217450 | 20.593060 | 15.419463 | 2.558442 | 1.571121 | 2.749091 | 8.597911 | 6.171329 | 3.575221 | 9.152648 | 47.264605 | 96.695578 | 8.000000 | 8.738351 | 5.141487 | 12.619718 |
1.833499 | 21.045603 | 5.742331 | 21.551237 | 8.591810 | 34.665653 | 22.632107 | 1.808696 | 7.611354 | 43.294964 | 4.487245 | 8.144112 | 42.325581 | 8.758410 | 6.834459 | 46.355837 | 2.160550 | 7.464029 | 9.425178 | 3.878893 |
-5.473046 | 3.763547 | -1.658915 | 2.822014 | 5.501582 | 2.584906 | 0.422680 | -5.172269 | 0.937888 | 1.259259 | 2.564706 | 2.709746 | -11.311475 | 0.273273 | 8.542857 | 16.635209 | 2.213483 | -2.761506 | 0.621622 | 2.718894 |
-2.118085 | -2.569767 | 5.789286 | 16.045977 | 19.767313 | 5.808725 | -1.670543 | -3.008734 | 17.064904 | -2.964158 | 40.793103 | 24.195531 | -7.576923 | -2.242991 | 2.264493 | 22.578704 | 11.557143 | 6.381132 | 27.650633 | 5.946043 |
42.375375 | 8.254777 | 14.975524 | 22.791444 | 19.114820 | 24.692771 | 8.219780 | 8.960699 | 22.710526 | 4.297101 | 12.710526 | 10.982175 | 16.641509 | 21.563863 | 1.274510 | 31.676056 | 5.371230 | 7.318519 | 27.918719 | 7.051546 |
2.812957 | -9.384106 | 0.086505 | 9.789279 | 7.248656 | -2.710692 | -2.901024 | -7.118721 | 1.415274 | -13.214559 | -2.937853 | -1.553506 | -0.883234 | -1.462295 | -5.660959 | 23.323259 | 2.083990 | 3.267176 | 11.153652 | 0.528090 |
-1.400000 | -3.091216 | -1.681250 | -0.638838 | 2.690160 | -1.903727 | -5.456446 | 3.360360 | -0.530120 | -14.911877 | -3.695418 | -2.958559 | 0.002994 | 1.885350 | -7.691030 | 2.735369 | -1.161593 | -1.134831 | 1.324455 | -5.717949 |
Bây giờ bạn có một khung dữ liệu của các chuyến bay có nguồn gốc từ các sân bay khối lượng lớn, bạn có thể hỏi: Sự chậm trễ chuyến bay dài nhất bắt nguồn từ đâu vào tháng 1 năm 2015?
Đầu vào
delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 0
Đầu ra
13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 | 13.000000 |
7.049522 | 11.609776 | 7.350537 | 22.283364 | 18.216483 | 16.044343 | 17.213870 | 6.938287 | 11.216083 | 14.613638 | 11.723369 | 11.302481 | 17.699715 | 11.925022 | 9.627240 | 39.274123 | 9.223535 | 6.526833 | 11.517644 | 5.083884 |
12.798122 | 15.004838 | 7.499172 | 16.171575 | 12.854437 | 15.286101 | 18.718574 | 10.452380 | 11.488504 | 22.619487 | 11.574100 | 10.193057 | 23.428830 | 12.647029 | 14.971524 | 28.195169 | 7.051518 | 4.795902 | 8.742399 | 5.910367 |
-5.473046 | -9.384106 | -1.681250 | -0.638838 | 2.690160 | -6.842809 | -5.456446 | -7.118721 | -0.530120 | -14.911877 | -3.695418 | -2.958559 | -11.311475 | -2.242991 | -7.691030 | 2.735369 | -1.161593 | -2.761506 | 0.621622 | -5.717949 |
0.944276 | 3.590580 | 0.509317 | 14.569873 | 8.591810 | 2.584906 | 0.422680 | -0.543307 | 1.571121 | 1.259259 | 4.487245 | 5.442446 | -0.883234 | 1.885350 | 1.193333 | 22.578704 | 2.213483 | 4.372180 | 5.289216 | 2.003356 |
3.033099 | 8.254777 | 5.789286 | 20.526899 | 11.534626 | 20.593060 | 15.419463 | 3.360360 | 8.450505 | 4.297101 | 12.710526 | 8.144112 | 15.606426 | 8.977918 | 6.834459 | 37.995702 | 8.000000 | 7.318519 | 9.425178 | 3.878893 |
6.361725 | 21.045603 | 13.294964 | 29.899200 | 28.705263 | 24.696594 | 22.674051 | 13.711864 | 17.064904 | 31.882979 | 17.229381 | 16.500000 | 34.984177 | 17.511364 | 19.461279 | 46.355837 | 13.665217 | 9.467925 | 13.225806 | 7.051546 |
42.375375 | 43.310580 | 23.325077 | 52.495238 | 38.360104 | 35.771626 | 53.617978 | 25.293651 | 39.844037 | 55.445578 | 40.793103 | 28.159016 | 61.165049 | 39.847025 | 47.264605 | 96.695578 | 20.180085 | 13.771812 | 27.918719 | 15.503125 |
Thật khó để so sánh các sân bay chỉ bằng cách nhìn vào một bảng số lớn. Điều này sẽ dễ dàng hơn nếu bạn nhóm các hồ sơ cho mỗi sân bay và phủ chúng, như bạn đã làm với Envoy Air và US Airways:
Đầu vào
delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 1
Đầu ra
delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 2
Chà, điều đó cũng khó đọc. Phương pháp phân phối lớp phủ có giới hạn, ít nhất là khi bạn muốn so sánh nhiều bản phân phối cùng một lúc. May mắn thay, có một cách hình dung một chiều để hình dung hình dạng của các bản phân phối được gọi là một ô hộp.box plot.
Các ô hộp bao gồm các biện pháp phân tán quan trọng tương tự mà bạn nhận được khi chạy data.groupby(['unique_carrier','delayed']).size().unstack() 0, cho phép nó được hiển thị theo một chiều và dễ dàng so sánh với các bản phân phối khác. Các thành phần của các ô hộp là:
Hãy thử sử dụng các ô hộp để so sánh phân phối độ trễ hàng ngày tại mỗi sân bay:
Đầu vào
delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 3
Đầu ra
delayed_flights = data[data['delayed'] == True] #filter to only rows where delayer == True delayed_flights['unique_carrier'].value_counts() #count the number of rows for each carrier 4
Chà, điều đó cũng khó đọc. Phương pháp phân phối lớp phủ có giới hạn, ít nhất là khi bạn muốn so sánh nhiều bản phân phối cùng một lúc. May mắn thay, có một cách hình dung một chiều để hình dung hình dạng của các bản phân phối được gọi là một ô hộp.
Các ô hộp bao gồm các biện pháp phân tán quan trọng tương tự mà bạn nhận được khi chạy data.groupby(['unique_carrier','delayed']).size().unstack() 0, cho phép nó được hiển thị theo một chiều và dễ dàng so sánh với các bản phân phối khác. Các thành phần của các ô hộp là:Which airports are the worst to fly out of?, you can now say that you will (almost certainly) be delayed if you are flying out of Chicago in January, based on 2015 data. If you can help it, avoid connecting flights in Chicago.
- Thiết kế bảng điều khiển thông tin, Stephen vài
Hãy thử sử dụng các ô hộp để so sánh phân phối độ trễ hàng ngày tại mỗi sân bay:
Như bạn có thể thấy, việc so sánh nhiều bản phân phối với các ô hộp đơn giản hơn về mặt trực quan. Các sân bay như JFK có sự phân tán đáng kể sự chậm trễ, trong khi LGA được phân phối đều xung quanh sự chậm trễ trung bình thường xuyên nhất. Tuy nhiên, Ord gần gấp đôi thời gian, so với mọi sân bay khối lượng lớn khác. Mong đợi sự chậm trễ của tuyết ở Chicago vào tháng 1!
Dẫn đầu phân tích này, chúng tôi đặt ra một vài câu hỏi chính. Để trả lời cuối cùng, sân bay nào là tồi tệ nhất để bay ra ?, Bây giờ bạn có thể nói rằng bạn sẽ (gần như chắc chắn) bị trì hoãn nếu bạn bay ra khỏi Chicago vào tháng 1, dựa trên dữ liệu năm 2015. Nếu bạn có thể giúp nó, tránh kết nối các chuyến bay ở Chicago.
Thực hành vấn đề
Hình dung độ trễ đến trung bình theo ngày và nhà cung cấp bằng cách sử dụng các ô hộp.
- Xem giải pháp
- Tom tăt bai học
- Như bạn đã thấy trong bài học này, việc đặt dữ liệu ngược lại cho phép bạn hiểu rõ hơn về nó. Mặc dù nó rõ ràng rằng tất cả các hãng hàng không và sân bay đều bị chậm trễ, bạn có thể sử dụng số liệu thống kê để nhanh chóng rút ra những xu hướng và sự xuất hiện bất thường trên dữ liệu. Độ lệch của dữ liệu so với một xu hướng thường được tiết lộ rõ ràng trong trực quan hóa, cho phép bạn xác định trực quan các sự kiện bất thường và đào sâu hơn.
- Trong bài học này, bạn đã học được cách:
- Phân phối phân phối bộ dữ liệu