Âm mưu phân tán với trăn dòng trung bình
Một phần quan trọng của việc làm việc với dữ liệu là có thể trực quan hóa nó. Python có một số mô-đun của bên thứ ba mà bạn có thể sử dụng để trực quan hóa dữ liệu. Một trong những mô-đun phổ biến nhất là Matplotlib và mô-đun con pyplot của nó, thường được gọi bằng bí danh 7. Matplotlib cung cấp một công cụ rất linh hoạt có tên là 8 cho phép bạn tạo các biểu đồ phân tán cơ bản và phức tạp hơn Show
Dưới đây, bạn sẽ xem qua một số ví dụ sẽ chỉ cho bạn cách sử dụng chức năng này một cách hiệu quả Trong hướng dẫn này, bạn sẽ học cách
Để tận dụng tối đa hướng dẫn này, bạn nên làm quen với các kiến thức cơ bản về lập trình Python và kiến thức cơ bản về NumPy và đối tượng 0 của nó. Bạn không cần phải quen thuộc với Matplotlib để làm theo hướng dẫn này, nhưng nếu bạn muốn tìm hiểu thêm về mô-đun, hãy xem Python Plotting With Matplotlib (Hướng dẫn)Tiền thưởng miễn phí. Nhấp vào đây để có quyền truy cập vào Hướng dẫn tài nguyên NumPy miễn phí chỉ cho bạn các hướng dẫn, video và sách tốt nhất để cải thiện kỹ năng NumPy của bạn Tạo các ô phân tánBiểu đồ phân tán là biểu diễn trực quan về cách hai biến liên quan với nhau. Bạn có thể sử dụng biểu đồ phân tán để khám phá mối quan hệ giữa hai biến, chẳng hạn bằng cách tìm bất kỳ mối tương quan nào giữa chúng Trong phần hướng dẫn này, bạn sẽ làm quen với việc tạo các biểu đồ phân tán cơ bản bằng Matplotlib. Trong các phần sau, bạn sẽ tìm hiểu cách tùy chỉnh thêm các biểu đồ của mình để biểu thị dữ liệu phức tạp hơn bằng cách sử dụng nhiều hơn hai chiều Loại bỏ các quảng cáoBắt đầu với import matplotlib.pyplot as plt price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40] sales_per_day = [34, 62, 49, 22, 13, 19] plt.scatter(price, sales_per_day) plt.show() 8Trước khi bạn có thể bắt đầu làm việc với 8, bạn cần cài đặt Matplotlib. Bạn có thể làm như vậy bằng cách sử dụng trình quản lý gói tiêu chuẩn của Python, ________ 33, bằng cách chạy lệnh sau trong bảng điều khiển
Bây giờ bạn đã cài đặt Matplotlib, hãy xem xét trường hợp sử dụng sau. Một quán cà phê bán sáu loại nước cam đóng chai khác nhau. Người chủ muốn hiểu mối quan hệ giữa giá đồ uống và số lượng mỗi loại anh ta bán, vì vậy anh ta theo dõi số lượng mỗi loại đồ uống anh ta bán mỗi ngày. Bạn có thể hình dung mối quan hệ này như sau
Trong tập lệnh Python này, bạn nhập mô-đun con 4 từ Matplotlib bằng bí danh 7. Bí danh này thường được sử dụng theo quy ước để rút ngắn tên mô-đun và mô-đun con. Sau đó, bạn tạo danh sách có giá và doanh số bán hàng trung bình mỗi ngày cho mỗi loại trong số sáu loại đồ uống màu cam đã bánCuối cùng, bạn tạo biểu đồ phân tán bằng cách sử dụng 8 với hai biến mà bạn muốn so sánh làm đối số đầu vào. Khi bạn đang sử dụng tập lệnh Python, bạn cũng cần hiển thị rõ ràng hình bằng cách sử dụng 7Khi bạn đang sử dụng một môi trường tương tác, chẳng hạn như bảng điều khiển hoặc Máy tính xách tay Jupyter, bạn không cần gọi 7. Trong hướng dẫn này, tất cả các ví dụ sẽ ở dạng tập lệnh và sẽ bao gồm lệnh gọi tới 7Đây là đầu ra từ mã này Cốt truyện này cho thấy rằng, nói chung, đồ uống càng đắt tiền thì càng ít mặt hàng được bán. Tuy nhiên, đồ uống có giá 4 đô la. 02 là một ngoại lệ, điều này có thể cho thấy đây là một sản phẩm đặc biệt phổ biến. Khi sử dụng biểu đồ phân tán theo cách này, việc kiểm tra chặt chẽ có thể giúp bạn khám phá mối quan hệ giữa các biến. Sau đó, bạn có thể tiến hành phân tích sâu hơn, cho dù đó là sử dụng hồi quy tuyến tính hay các kỹ thuật khác So sánh import matplotlib.pyplot as plt price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40] sales_per_day = [34, 62, 49, 22, 13, 19] plt.scatter(price, sales_per_day) plt.show() 8 và import matplotlib.pyplot as plt price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40] sales_per_day = [34, 62, 49, 22, 13, 19] plt.scatter(price, sales_per_day) plt.show() 61Bạn cũng có thể tạo biểu đồ phân tán được hiển thị ở trên bằng cách sử dụng một chức năng khác trong 62. Matplotlib's 61 là một chức năng vẽ biểu đồ có mục đích chung sẽ cho phép bạn tạo nhiều biểu đồ đường hoặc điểm đánh dấu khác nhauBạn có thể đạt được biểu đồ phân tán giống như biểu đồ bạn đã nhận được trong phần trên với lệnh gọi sau tới 61, sử dụng cùng một dữ liệu
Trong trường hợp này, bạn phải bao gồm điểm đánh dấu 65 làm đối số thứ ba, nếu không thì 61 sẽ vẽ biểu đồ đường. Cốt truyện bạn đã tạo bằng mã này giống hệt với cốt truyện bạn đã tạo trước đó với 8Trong một số trường hợp, đối với biểu đồ phân tán cơ bản mà bạn đang vẽ trong ví dụ này, sử dụng 61 có thể phù hợp hơn. Bạn có thể so sánh hiệu quả của hai chức năng bằng cách sử dụng mô-đun 69 6Hiệu suất sẽ khác nhau trên các máy tính khác nhau, nhưng khi bạn chạy mã này, bạn sẽ thấy rằng 61 hiệu quả hơn đáng kể so với 8. Khi chạy ví dụ trên trên hệ thống của tôi, 61 nhanh hơn bảy lầnNếu bạn có thể tạo các biểu đồ phân tán bằng cách sử dụng 61 và nó cũng nhanh hơn nhiều, tại sao bạn nên sử dụng 8? . Hầu hết các tùy chỉnh và cách sử dụng nâng cao mà bạn sẽ tìm hiểu trong hướng dẫn này chỉ có thể thực hiện được khi sử dụng 8. Đây là một quy tắc ngón tay cái mà bạn có thể sử dụng
Trong phần tiếp theo, bạn sẽ bắt đầu khám phá những cách sử dụng nâng cao hơn của 8Loại bỏ các quảng cáoTùy chỉnh các điểm đánh dấu trong các ô phân tánBạn có thể hình dung nhiều hơn hai biến trên biểu đồ phân tán hai chiều bằng cách tùy chỉnh các điểm đánh dấu. Có bốn tính năng chính của các điểm đánh dấu được sử dụng trong biểu đồ phân tán mà bạn có thể tùy chỉnh với 8
Trong phần này của hướng dẫn, bạn sẽ học cách sửa đổi tất cả các thuộc tính này Thay đổi kích thướcHãy trở lại chủ quán cà phê mà bạn đã gặp trước đó trong hướng dẫn này. Các loại đồ uống màu cam khác nhau mà anh ấy bán đến từ các nhà cung cấp khác nhau và có tỷ suất lợi nhuận khác nhau. Bạn có thể hiển thị thông tin bổ sung này trong biểu đồ phân tán bằng cách điều chỉnh kích thước của điểm đánh dấu. Tỷ suất lợi nhuận được đưa ra dưới dạng phần trăm trong ví dụ này 7Bạn có thể nhận thấy một vài thay đổi so với ví dụ đầu tiên. Thay vì danh sách, bạn hiện đang sử dụng mảng NumPy. Bạn có thể sử dụng bất kỳ cấu trúc dữ liệu dạng mảng nào cho dữ liệu và mảng NumPy thường được sử dụng trong các loại ứng dụng này vì chúng cho phép các hoạt động của phần tử được thực hiện hiệu quả. Mô-đun NumPy là phần phụ thuộc của Matplotlib, đó là lý do tại sao bạn không cần cài đặt thủ công Bạn cũng đã sử dụng các tham số được đặt tên làm đối số đầu vào trong lệnh gọi hàm. Các tham số 80 và 81 là bắt buộc nhưng tất cả các tham số khác là tùy chọnTham số 82 biểu thị kích thước của điểm đánh dấu. Trong ví dụ này, bạn sử dụng tỷ suất lợi nhuận làm biến để xác định kích thước của điểm đánh dấu và nhân nó với 83 để hiển thị sự khác biệt về kích thước rõ ràng hơnBạn có thể xem biểu đồ phân tán được tạo bởi mã này bên dưới Kích thước của điểm đánh dấu cho biết tỷ suất lợi nhuận cho mỗi sản phẩm. Hai loại nước cam bán chạy nhất cũng là loại có tỷ suất lợi nhuận cao nhất. Đây là tin vui cho chủ quán cà phê Thay đổi màu sắcNhiều khách hàng của quán cà phê thích đọc nhãn cẩn thận, đặc biệt là để biết hàm lượng đường của đồ uống họ mua. Chủ quán cà phê muốn nhấn mạnh lựa chọn thực phẩm tốt cho sức khỏe trong chiến dịch tiếp thị tiếp theo của mình, vì vậy anh ấy phân loại đồ uống dựa trên hàm lượng đường và sử dụng hệ thống đèn giao thông để chỉ ra hàm lượng đường thấp, trung bình hoặc cao cho đồ uống Bạn có thể thêm màu vào các điểm đánh dấu trong biểu đồ phân tán để hiển thị hàm lượng đường của mỗi loại đồ uống 8Bạn định nghĩa các biến 84, 85 và 86 là các bộ, mỗi bộ chứa ba giá trị đại diện cho các thành phần màu đỏ, lục và lam, theo thứ tự đó. Đây là các giá trị màu RGB. Các bộ dữ liệu cho 84, 85 và 86 tương ứng là màu xanh lục, vàng và đỏSau đó, bạn đã xác định biến 90 để phân loại từng loại đồ uống. Bạn sử dụng tham số tùy chọn 91 trong lệnh gọi hàm để xác định màu của từng điểm đánh dấu. Đây là biểu đồ phân tán được tạo bởi mã nàyChủ quán cà phê đã quyết định loại bỏ thức uống đắt nhất khỏi thực đơn vì loại này bán không chạy và có hàm lượng đường cao. Liệu anh ta cũng có nên ngừng dự trữ những loại đồ uống rẻ nhất để nâng cao uy tín về sức khỏe của doanh nghiệp, mặc dù nó bán chạy và có tỷ suất lợi nhuận tốt? Loại bỏ các quảng cáoThay đổi hình dạngChủ quán cà phê nhận thấy bài tập này rất hữu ích và anh ấy muốn điều tra một sản phẩm khác. Ngoài đồ uống cam, giờ đây bạn cũng sẽ vẽ dữ liệu tương tự cho nhiều loại thanh ngũ cốc có sẵn trong quán cà phê 9Trong mã này, bạn cấu trúc lại các tên biến để tính đến việc bạn hiện có dữ liệu cho hai sản phẩm khác nhau. Sau đó, bạn vẽ cả hai biểu đồ phân tán trong một hình duy nhất. Điều này mang lại đầu ra sau Thật không may, bạn không còn có thể tìm ra điểm dữ liệu nào thuộc về đồ uống màu cam và điểm nào thuộc về thanh ngũ cốc. Bạn có thể thay đổi hình dạng của điểm đánh dấu cho một trong các ô phân tán 2Bạn giữ hình dạng điểm đánh dấu mặc định cho dữ liệu đồ uống màu cam. Điểm đánh dấu mặc định là 65, đại diện cho một dấu chấm. Đối với dữ liệu thanh ngũ cốc, bạn đặt hình dạng điểm đánh dấu thành 93, đại diện cho điểm đánh dấu hình thoi. Bạn có thể tìm thấy danh sách tất cả các điểm đánh dấu mà bạn có thể sử dụng trong trang tài liệu về điểm đánh dấu. Đây là hai biểu đồ phân tán được đặt chồng lên nhau trên cùng một hìnhGiờ đây, bạn có thể phân biệt điểm dữ liệu của đồ uống màu cam với điểm dữ liệu của thanh ngũ cốc. Nhưng có một vấn đề với cốt truyện cuối cùng mà bạn đã tạo mà bạn sẽ khám phá trong phần tiếp theo Thay đổi độ trong suốtMột trong những điểm dữ liệu cho đồ uống cam đã biến mất. Nên có sáu đồ uống màu cam, nhưng chỉ có thể nhìn thấy năm dấu tròn trong hình. Một trong những điểm dữ liệu thanh ngũ cốc đang ẩn điểm dữ liệu đồ uống màu cam Bạn có thể khắc phục sự cố trực quan hóa này bằng cách làm cho các điểm dữ liệu trong suốt một phần bằng cách sử dụng giá trị alpha 5Bạn đã đặt giá trị 94 của cả hai bộ đánh dấu thành 95, có nghĩa là chúng nửa trong suốt. Bây giờ bạn có thể thấy tất cả các điểm dữ liệu trong biểu đồ này, bao gồm cả những điểm trùng khớpBạn cũng đã thêm tiêu đề và các nhãn khác vào biểu đồ để hoàn thành hình với nhiều thông tin hơn về những gì đang được hiển thị Tùy chỉnh Colormap và StyleTrong các ô phân tán mà bạn đã tạo cho đến nay, bạn đã sử dụng ba màu để thể hiện hàm lượng đường thấp, trung bình hoặc cao cho đồ uống và thanh ngũ cốc. Bây giờ, bạn sẽ thay đổi điều này để màu đại diện trực tiếp cho hàm lượng đường thực tế của các mặt hàng Trước tiên, bạn cần cấu trúc lại các biến 96 và 97 để chúng biểu thị giá trị hàm lượng đường thay vì chỉ các giá trị màu RGB 0Đây hiện là danh sách chứa tỷ lệ phần trăm lượng đường khuyến nghị hàng ngày trong mỗi mục. Phần còn lại của mã vẫn giữ nguyên, nhưng bây giờ bạn có thể chọn bản đồ màu để sử dụng. Điều này ánh xạ các giá trị thành màu sắc 0Màu của các điểm đánh dấu hiện dựa trên tỷ lệ liên tục và bạn cũng đã hiển thị thanh màu đóng vai trò là chú giải cho màu của các điểm đánh dấu. Đây là biểu đồ phân tán kết quả Tất cả các lô bạn đã vẽ cho đến nay đã được hiển thị theo kiểu Matplotlib gốc. Bạn có thể thay đổi kiểu này bằng cách sử dụng một trong các tùy chọn. Bạn có thể hiển thị các kiểu có sẵn bằng lệnh sau >>> 1Bây giờ bạn có thể thay đổi kiểu cốt truyện khi sử dụng Matplotlib bằng cách sử dụng lệnh gọi hàm sau trước khi gọi 8 2Điều này thay đổi phong cách thành phong cách của Seaborn, một gói trực quan hóa bên thứ ba khác. Bạn có thể thấy phong cách khác nhau bằng cách vẽ biểu đồ phân tán cuối cùng mà bạn đã hiển thị ở trên bằng cách sử dụng phong cách Seaborn Bạn có thể đọc thêm về cách tùy chỉnh các ô trong Matplotlib và cũng có các hướng dẫn khác trên các trang tài liệu Matplotlib Sử dụng 8 để tạo biểu đồ phân tán cho phép bạn hiển thị nhiều hơn hai biến. Dưới đây là các biến được biểu diễn trong ví dụ nàyBiến Được biểu thị bằng Giá Trục X Số lượng trung bình đã bán Trục Y Biên lợi nhuận Kích thước nhãn hiệu Loại sản phẩm Hình dạng nhãn hiệu Nội dung đường Màu nhãn hiệu Khả năng biểu diễn nhiều hơn hai biến làm cho 8 trở thành một công cụ rất mạnh mẽ và linh hoạtLoại bỏ các quảng cáoKhám phá thêm import matplotlib.pyplot as plt price = [2.50, 1.23, 4.02, 3.25, 5.00, 4.40] sales_per_day = [34, 62, 49, 22, 13, 19] plt.scatter(price, sales_per_day) plt.show() 21() 8 thậm chí còn linh hoạt hơn trong việc tùy chỉnh các biểu đồ phân tán. Trong phần này, bạn sẽ khám phá cách ẩn dữ liệu bằng cách sử dụng mảng NumPy và biểu đồ phân tán thông qua một ví dụ. Trong ví dụ này, bạn sẽ tạo các điểm dữ liệu ngẫu nhiên rồi tách chúng thành hai vùng riêng biệt trong cùng một biểu đồ phân tánMột hành khách thích thu thập dữ liệu đã đối chiếu thời gian đến của xe buýt tại trạm xe buýt địa phương của cô ấy trong khoảng thời gian sáu tháng. Thời gian đến theo lịch trình là vào lúc 15 phút và 45 phút qua một giờ, nhưng cô nhận thấy rằng thời gian đến thực sự tuân theo phân phối chuẩn vào khoảng thời gian này Biểu đồ này cho thấy khả năng tương đối của một chiếc xe buýt đến mỗi phút trong vòng một giờ. Phân phối xác suất này có thể được biểu diễn bằng NumPy và 23 3Bạn đã tạo hai bản phân phối bình thường tập trung vào 24 và 25 phút trước giờ và tính tổng chúng. Bạn đặt thời gian đến có khả năng nhất thành giá trị 26 bằng cách chia cho giá trị tối đaBây giờ bạn có thể mô phỏng thời gian đến của xe buýt bằng cách sử dụng bản phân phối này. Để làm điều này, bạn có thể tạo thời gian ngẫu nhiên và xác suất tương đối ngẫu nhiên bằng cách sử dụng mô-đun 27 tích hợp. Trong đoạn mã dưới đây, bạn cũng sẽ sử dụng khả năng hiểu danh sách 4Bạn đã mô phỏng các lượt xe buýt đến của 28, bạn có thể hình dung điều này bằng biểu đồ phân tán sauBiểu đồ của bạn sẽ trông khác vì dữ liệu bạn đang tạo là ngẫu nhiên. Tuy nhiên, không phải tất cả những điểm này đều có khả năng sát với thực tế mà người đi làm đã quan sát được từ dữ liệu mà cô ấy đã thu thập và phân tích. Bạn có thể vẽ biểu đồ phân phối mà cô ấy thu được từ dữ liệu với các lượt xe buýt mô phỏng 5Điều này mang lại đầu ra sau Để giữ cho mô phỏng thực tế, bạn cần đảm bảo rằng các lượt xe buýt ngẫu nhiên khớp với dữ liệu và phân phối thu được từ những dữ liệu đó. Bạn có thể lọc các điểm được tạo ngẫu nhiên bằng cách chỉ giữ lại những điểm nằm trong phân phối xác suất. Bạn có thể đạt được điều này bằng cách tạo mặt nạ cho biểu đồ phân tán 6Các biến 29 và 50 là các mảng NumPy chứa các giá trị Boolean dựa trên việc các khả năng được tạo ngẫu nhiên nằm trên hay dưới phân phối 81. Sau đó, bạn vẽ hai biểu đồ phân tán riêng biệt, một biểu đồ có các điểm nằm trong phân phối và một biểu đồ khác cho các điểm nằm ngoài phân phối. Các điểm dữ liệu nằm trên phân phối không đại diện cho dữ liệu thựcBạn đã phân đoạn các điểm dữ liệu từ biểu đồ phân tán ban đầu dựa trên việc chúng có nằm trong phân phối hay không và sử dụng màu và điểm đánh dấu khác để xác định hai bộ dữ liệu Loại bỏ các quảng cáoXem lại các thông số đầu vào chínhBạn đã tìm hiểu về các tham số đầu vào chính để tạo biểu đồ phân tán ở các phần trên. Dưới đây là tóm tắt ngắn gọn về các điểm chính cần nhớ về các tham số đầu vào chính Mô tả tham số 80 và 81Các tham số này đại diện cho hai biến chính và có thể là bất kỳ kiểu dữ liệu dạng mảng nào, chẳng hạn như danh sách hoặc mảng NumPy. Đây là những thông số bắt buộc. 82Tham số này xác định kích thước của điểm đánh dấu. Nó có thể là số float nếu tất cả các điểm đánh dấu có cùng kích thước hoặc cấu trúc dữ liệu dạng mảng nếu các điểm đánh dấu có kích thước khác nhau. 91Thông số này đại diện cho màu sắc của các điểm đánh dấu. Nó thường là một mảng màu, chẳng hạn như các giá trị RGB hoặc một chuỗi các giá trị sẽ được ánh xạ lên một bản đồ màu bằng cách sử dụng tham số 56. 57Thông số này được sử dụng để tùy chỉnh hình dạng của điểm đánh dấu. 56Nếu một chuỗi các giá trị được sử dụng cho tham số 91, thì tham số này có thể được sử dụng để chọn ánh xạ giữa các giá trị và màu sắc, thường bằng cách sử dụng một trong các bản đồ màu tiêu chuẩn hoặc bản đồ màu tùy chỉnh. 94Tham số này là một số float có thể lấy bất kỳ giá trị nào trong khoảng từ 01 đến 26 và biểu thị độ trong suốt của điểm đánh dấu, trong đó 26 biểu thị điểm đánh dấu mờ đụcĐây không phải là các tham số đầu vào duy nhất có sẵn với 8. Bạn có thể truy cập danh sách đầy đủ các tham số đầu vào từ tài liệuSự kết luậnBây giờ bạn đã biết cách tạo và tùy chỉnh biểu đồ phân tán bằng cách sử dụng 8, bạn đã sẵn sàng bắt đầu thực hành với bộ dữ liệu và ví dụ của riêng mình. Chức năng linh hoạt này cung cấp cho bạn khả năng khám phá dữ liệu của mình và trình bày những phát hiện của bạn một cách rõ ràngTrong hướng dẫn này, bạn đã học cách
Bạn có thể tận dụng tối đa khả năng trực quan hóa bằng cách sử dụng 8 bằng cách tìm hiểu thêm về tất cả các tính năng trong Matplotlib và xử lý dữ liệu bằng NumPyĐánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Sử dụng plt. scatter() để trực quan hóa dữ liệu bằng Python 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Stephen Gruppetta Stephen từng làm việc với tư cách là nhà vật lý nghiên cứu, phát triển các hệ thống hình ảnh để phát hiện bệnh về mắt. Bây giờ anh ấy dạy viết mã bằng Python cho trẻ em và người lớn. Và anh ấy gần như đã hoàn thành cuốn sách mã hóa Python đầu tiên của mình cho người mới bắt đầu » Thông tin thêm về StephenMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Bartosz David Joanna Gia-cốp Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi |