Skip to main content

[Intermediate Python] - Matplotlib: Basic plots with matplotlib


Trong bài này, bạn sẽ được học cách hình dung dữ liệu thực tế, cách lưu trữ dữ liệu trong các cấu trúc dữ liệu mới; khi đã thành thạo các cấu trúc điều khiển, bạn cần điều chỉnh các đoạn scripts và các thuật toán, chúng ta sẽ  kết thúc chương này với một bài tập nhỏ và chúng ta sẽ phải kết hợp mọi thứ đã  học để giải quyết bài toán. 

LÝ THUYẾT
Phần đầu tiên của chương là về cách hình dung dữ liệu (data visualization), nó rất quan trọng trong việc phân tích dữ liệu. Đầu tiên, bạn sẽ sử dụng nó để khám phá tập dữ liệu (dataset) để hiểu dữ liệu của bạn một cách rõ nhất, từ đó bạn mới có một cái nhìn sâu sắc về nó, và chia sẻ cái mà bạn đã nhận thức được từ dữ liệu với người khác  

Ví dụ: ta nhìn vào biểu đồ xinh đẹp bên trên, nó được tạo bởi giáo sư người Thụy Sĩ Hans Rosling, giáo sư nói về sự phát triển dân số toàn cầu được xem hàng triệu lần và sắp xếp chúng tạo nên 1 biểu đồ, giáo sư đã để dữ liệu nói lên lịch sử của chính nó. Ở đây, chúng ta thấy một biểu đồ với nhiều vòng tròn, mỗi 1 vòng tròn thể hiện một quốc gia, đường kính của vòng tròn tương ứng với dân số của quốc gia đó, nhìn biểu đồ, ta dễ dàng thấy 2 vòng tròn lớn nhất đó là Trung Quốc và Ấn Độ. Có 2 trục, trục ngang thể hiện GDP bình quân đầu người tính trên USD, trục dọc thể hiện tuổi thọ, rõ ràng, ta thấy người dân sống thọ hơn ở các nước có GDP bình quân đầu người cao hơn. Vậy, có một sự khác biệt lớn giữa tuổi thọ giữa các nước có cùng mức thu nhập. Tôi nói với bạn những thứ trên để làm gì? Bởi vì, cuối chương này, chúng ta cũng sẽ tự xây dựng một biểu đồ tuyệt đẹp như vậy :) 

Có rất nhiều package mô hình hóa dữ liệu trong Python, nhưng nổi trội hơn cả chính là Matplotlib. Chúng ta sẽ cần đến package con của Matplotlib là pyplot, package này được import vào như một biến tên là plt 
In [1]: import matplotlib.pyplot as plt
Trong ví dụ đầu tiên, chúng ra sẽ cố gắng đạt được một số hiểu biết sâu sắc về sự tiến hóa của dân số thế giới. Ta có một danh sách các năm trong biến year và danh sách dân số tương ứng (đơn vị tính là tỉ người), và danh sách pop
In [2]: year = [1950, 1970, 1990, 2010]
In [3]: pop = [2.519, 3.692, 5.263, 6.972]
Năm 1970 có 3.7 tỉ người sống trên hành tinh này. Để mô hình hóa dữ liệu này như là một biểu đồ đường thẳng, chúng ta gọi hàm plot() và truyền vào 2 tham số là year và pop: tham số thứ nhất tương ứng với trục ngang, còn tham số thứ 2 tương ứng với trục dọc
In [4]: plt.plot(year, pop)
Bạn có thể nghĩ là biểu đồ sẽ hiển thị lên ngay bây giờ, nhưng không Python khá là lười biếng, nó đợi đến khi ta gọi hàm show() thì lúc đó biểu đồ mới hiển thị.
In [5]: plt.show()
Bởi vì bạn có thể muốn thêm 1 vài thành phần vào biểu đồ trước khi hiển thị nó, chẳng hạn như tựa, nhãn,... Chúng ta sẽ bàn đến vấn đề này sau, giờ chỉ nên nhớ rằng: hàm plot() nói với Python rằng trình bày cái gì và trình bày như thế nào, hàm show() hiển thị biểu đồ. Khi nhìn vào biểu đồ, chúng ta thấy rằng các năm được đánh số trên trục ngang, còn dân số được đánh số trên trục đứng, có 4 điểm dữ liệu và Python đã vẽ một đường thẳng để nối chúng lại.

Năm 1950, dân số thế giới ở khoảng 2.5 tỉ người, nhưng năm 2010 vào khoảng 7 tỉ người, ta thấy dân số thế giới tăng gấp 3 lần trong vòng 60 năm, nó thật sự đáng sợ. Chuyện gì sẽ xảy ra nếu cứ tiếp tục tăng trưởng như vậy?? Chúng ta sẽ tìm được câu trả lời trong phần bài tập.
Tôi đã trình bày xong phần giới thiệu cơ bản về một kiểu khác của biểu đồ: đó là biểu đồ phân tán (scatter plot). Để tạo ra biểu đồ này, chúng ta thay hàm plot() thành hàm scatter, kết quả của biểu đồ scatter là những điểm dữ liệu độc lập và Python không nối các điểm này với nhau bằng đường thẳng như trước đó nữa.
In [4]: plt.scatter(year, pop)
Trong một vài ứng dụng, biểu đồ phân tán thường là lựa chọn tốt hơn so với biểu đồ đường thẳng, do đó nên nhớ đến hàm scatter() nhé!


BÀI TẬP
Bài 1: Line plot (1)
   Với matplotlib, bạn có thể tạo một nhóm các biểu đồ khác nhau trong Python, biểu đồ cơ bản nhất là biểu đồ đường thẳng (line plot). Công thức được cho ở đây
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()
Trong phần lý thuyết ta thấy sự tăng dân số nhanh đến mức nào trong những năm qua. Liệu chúng có tiếp tục tăng như thế nữa không? Ngân hàng thể giới ước lượng dân số thể giới cho những năm 1950 đến 2100. Các năm được cho vào 1 biến danh sách year, và tương ứng với biến danh sách pop chỉ số dân. Bạn thực hiện các lệnh theo yêu cầu sau:
  • Hiển thị phần tử cuối cùng ở biến year và pop để thấy được dự đoán dân số năm 2100. Sử dụng hàm print()
  • Trước khi bắt đầu. bạn nên import matplotlib.pyplot thành plt. pyplot là một packet con của matplotlib nên phải theo sau dấu chấm (.)
  • Sử dụng plt.plot() để xây dựng biểu đồ đường thẳng, year tương ứng với trục ngang, pop tương ứng với trục đứng. Đừng quên sử dụng hàm show() để hiện ra biểu đồ nhé!
Bài 2: Line plot (2)
   Với một biểu đồ tương đối giống với cái mà ta đã vẽ trong bài tập 1, nó được trình bày trong hình dưới. Nhìn vào biểu đồ và cho biết năm nào mà dân số thế giới xấp xỉ 10 tỉ người?
A - 2040
B - 2060
C - 2085
D - 2095

Bài 3: Line plot (3)
   Bây giờ ta sẽ xây dựng một biểu đồ thẳng đầu tiên, hãy bắt đầu với dữ liệu của giáo sư Hans Rosling được thu thập năm 2007. Có 2 danh sách có sẵn cho chúng ta:
  • life_exp: nó chứa tuổi thọ của mỗi quốc gia
  • gdp_cap: chứa GDP bình quân đầu người tính bằng USD
GDP là chữ viết tắt của Gross Domestic Product nó thể hiện quy mô nền kinh tế của một quốc gia, nếu ta chia cho số dân thì ta sẽ có được GDP bình quân đầu người. Bây giờ hãy thực hiện các yêu cầu sau:
  • In ra giá trị cuối cùng của 2 danh sách gdp_cap và life_exp >> đó là dữ liệu của Zimbabwe.
  • Xây dựng một biểu đồ thẳng với gdp_cap là trục ngang, life_exp là cột đứng. 
  • Đừng quên hoàn thành bằng câu lệnh plt.show() để hiển thị biểu đồ ra màn hình.

Bài 4: Scatter Plot (1)
   Khi ta có thời gian để xem các giá trị trên trục ngang thì biểu đồ đường thẳng phù hợp, nhưng trong một số trường hợp, khi ta cố gắng đánh giá sự tương quan giữa 2 biến thì biểu đồ phân tán (scatter plot) sẽ hữu dụng hơn. Dưới đây là ví dụ làm sao để tạo 1 biểu đồ scatter
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
Hãy tiếp tục với dữ liệu có sẵn là gdp_cap và life_exp ở trong phần bài trước và thực hiện các yêu cầu sau:
  • Thay đổi dòng lệnh có sẵn để được 1 biểu đồ scatter
  • plt.plot(gdp_cap, life_exp)
  • Thêm vào dòng plt.xscale('log') để thấy được sự quan giữa GDP bình quân đầu người trên quy mô logic.
  • Hoàn thành bằng câu lệnh plt.show() để hiển thị biểu đồ ra màn hình
Bài 5: Scatter Plot (2)
    Trong bài tập trước, bạn thấy rằng GDP thường tương ứng với tuổi thọ cao, nói cách khác, nó có sự tương quan với nhau. Bạn có nghĩ rằng có mối liên hệ giữa dân số và tuổi thọ trong một đất nước? biến danh sách life_exp ở bài tập trước đã có sẵn, biến pop cũng có sẵn, nó liệt kê dân số ở các nước năm 2007 (đơn vị tính là triệu người). bây giờ bạn thực hiện các yêu cầu sau:
  • Bắt đầu với scratch bằng cách import thư viện matplotlib.pyplot as plt
  • Tạo  một biểu đồ scatter, pop tương ứng với cột ngang, life_exp tương ứng cột dọc
  • Cuối cùng hiển thị biểu đồ bằng hàm show()

BÀI GIẢI
Bài 1: Line plot (1)
# Print the last item from year and pop
print(year[-1])
print(pop[-1])

# Import matplotlib.pyplot as plt
import matplotlib.pyplot as plt

# Make a line plot: year on the x-axis, pop on the y-axis
plt.plot(year, pop)

# Display the plot with plt.show()
plt.show()

Bài 2: Line plot (2)
   Đáp án: B

Bài 3: Line plot (3)
# Print the last item of gdp_cap and life_exp
print(gdp_cap[-1])
print(life_exp[-1])

# Make a line plot, gdp_cap on the x-axis, life_exp on the y-axis

plt.plot(gdp_cap,life_exp)

# Display the plot

plt.show()

Bài 4: Scatter (1)
# Change the line plot below to a scatter plot
plt.scatter(gdp_cap, life_exp)

# Put the x-axis on a logarithmic scale

plt.xscale('log')

# Show plot

plt.show()

Bài 5: Scatter (2)
# Import package
import matplotlib.pyplot as plt

# Build Scatter plot

plt.scatter(pop, life_exp)

# Show plot

plt.show()

Popular posts from this blog

[Intro Python] - Python Basic: Hello Python

Không giống như những khóa hướng dẫn khác về Python, khóa này tập trung vào việc sử dụng Python trong khoa học dữ liệu. Đến cuối khóa, bạn sẽ biết về cách thức lưu trữ và vận dụng dữ liệu một cách hiệu quả, biết cách triển khai các công cụ dữ liệu trong việc phân tích. Mỗi bài học sẽ có phần lý thuyết và có các bài thực hành. Chúng ta sẽ vừa học vừa thực hành trên nguồn là trang web datacamp.com, trang web sẽ cung cấp cho ta một môi trường tương tác trực tiếp là IPythonShell và một vùng để viết code là Script.py, bạn có thể thử nghiệm và tìm ra những lỗi code để chỉnh sửa. Python được tạo ra bởi Guido Van Rossum, nó được bắt đầu như là một dự án sở thích, sau đó nhanh chóng trở thành ngôn ngữ lập trình có mục đích chung (general purpose programming language), ngày nay, chúng ta có thể sử dụng Python để xây dựng và thực hành bất cứ phần mềm nào. Python là một phần mềm nguồn mở, sử dụng miễn phí và dễ dàng tạo các package trong Python, bạn dễ dàng chia sẻ mã nguồn (source code) vớ...

[DFP] - 11: A Walkthrough of the DFP User Interface

Bài này sẽ cho ta cái nhìn toàn diện về giao diện người dùng DFP, ở bài trước ta đã thảo luận các hoạt động cụ thể với DFP chẳng hạn như thêm tags, bây giờ chúng ta sẽ tìm hiểu về giao diện người dùng. Mục đích của bài viết này giúp ta làm quen với giao diện trực quan của DFP, tận dụng những tính năng phong phú của nó để tối ưu hóa không gian quảng cáo trên trang web. Trước tiên login vào trang DFP, bảng điều khiển (dashboard) có một tập các thuộc tính được gọi là thẻ (cards), thẻ là những công cụ và phím tắt mà ta có thể tùy chỉnh cách thể hiện khi mở trang dashboard. Thẻ có nhiều loại như trong hình sau:  Ta có thể thêm thẻ, chỉnh sửa vị trí của các thẻ để phù hợp nhất có thể, bây giờ hãy nhìn lướt qua thanh điều hướng, có 5 thẻ đó là Home, Delivery, Inventory, Reports, Admin, ta sẽ mô tả ngắn gọn mỗi thẻ * Delivery: nơi ta sẽ tìm thấy được sự đặt hàng của tất cả các nhà quảng cáo và ad network, bạn có thể đi sâu vào để tìm chi tiết đơn hàng và chi tiết đơn hàng ti...

[DFP] - 2: How to create an Adsense order in DFP

Phương tiện cơ bản để theo dõi inventory trong DFP là thông qua ad units. Ta sẽ học cách tạo đơn hàng Google Adsense tương ứng với các ads units thông qua giao diện DFP, thảo luận một vài cách để tổ chức inventory cũng như thảo luận các tùy chọn thuộc tính có sẵn khi tạo một đơn hàng Adsense. Một vài định nghĩa quan trọng: * Order: đề cập đến một trường trong DFP, nơi mà ad network, nhà quảng cáo và nhà quản lý quản lý được gán nhãn. Nói một cách khác nếu một công ty muốn mua 1 vị trí quảng cáo trên site của bạn, bước đầu tiên bạn cần phải thiết lập, tạo ra đơn hàng (order) cho họ, trên thực tế Adsense sẽ định nghĩa đơn hàng vì tất cả các line item sẽ chỉ liên quan đến Adsense. * Line Item: là bảng phân tích về cài đặt và nhắm mục tiêu quảng cáo của đơn vị quảng cáo, ví dụ chúng ta muốn thay đổi để nhắm mục tiêu và chi tiêu quảng cáo, nó tùy thuộc vào các yếu tố như địa lý, tuổi, kích thước ad unit. Các khả năng nhắm mục tiêu sẽ vô hạn và mỗi bộ được điều khiển thông qua l...