Bài giảng Lập trình cho khoa học dữ liệu - Bài 7: Thư viện numpy cung cấp cho người học những kiến thức như: Một số gói trong python cho KHDL; Giới thiệu về numpy; Khởi tạo mảng và chỉ số; Các phép toán trên mảng; Một số thao tác cơ bản. Mời các bạn cùng tham khảo!
LOGO LẬPTRÌNH CHO KHOA HỌC DỮ LIỆU Bài Thư viện numpy Nội dung Mộtsốgóitrongpython choKHDL Giới thiệu numpy Khởi tạo mảng số Các phép toán mảng Mộtsốthaotáccơbản Một số gói python cho KHDL ▪ Ngơn ngữ python có hệ thống gói phong phú, hỗ trợ nhiều lĩnh vực khác nhau, từ xây dựng ứng dụng, xử lý web, xử lý text, xử lý ảnh,… ▪ Sửdụng pip để tải gói từ internet ▪ Một số gói dành cho lập trình thơngthường: ▪ os: xử lý file tương tác với hệ điều hành ▪ networkx igraph: làm việc với liệu đồ thị,có thể làm việc với liệu lớn (đồ thị hàng triệu đỉnh) ▪ regular expressions: tìmkiếm mẫu liệu text ▪ BeautifulSoup: trích xuất liệu từ fileHTML từ website Một số gói python cho KHDL ▪ NumPy (Numerical Python): gói chuyên xử lý liệu số (nhiều chiều); gói chứa hàm đại số tuyến tính bản, biến đổi fourier, sinh số ngẫu nhiên nâng cao,… ▪ SciPy (Scientific Python): dựa Numpy, cung cấp công cụ mạnh cho khoa học kỹ nghệ, chẳng hạn biến đổi fourier rời rạc, đại số tuyến tính, tối ưu hóa ma trận thưa ▪ Matplotlib: chuyên sử dụng để vẽ biểu đồ, hỗtrợ nhiều loại biểu đồ khácnhau Một số gói python cho KHDL ▪ Pandas: chuyên sử dụng cho quản lý tương tác với liệu có cấu trúc, sử dụng rộng rãi việc thu thập tiền xử lý dữliệu ▪ Scikit Learn: chuyên học máy, dựa NumPy, SciPy matplotlib; thư viện có sẵn nhiều cơng cụ hiệu cho học máy thiết lập mô hìnhthống kê chẳng hạn thuật tốn phân lớp, hồi quy, phân cụm giảm chiều liệu ▪ Statsmodels: cho phép người sử dụng khám phá liệu, ước lượng mơ hình thống kê kiểm định Một số gói python cho KHDL ▪ Seaborn: dự matplotlib, cung cấp công cụ diễn thị (visualization) liệu thốngkê đẹp hiệu quả, mục tiêu gói sử dụng việc diễn thị trọng tâm khám phá hiểu dữliệu ▪ Bokeh: để tạo ô tương tác, biểu đồtổng quan web, hiệu tương tác với liệu lớn trực tuyến ▪ Blaze: gói dựa Numpy Pandas hướng đến liệu phân tán truyền phát, làcông cụ mạnh mẽ tạo diễn thị liệucực lớn Một số gói python cho KHDL ▪ Scrapy: chuyên thu thập thông tin web, phù hợp với việc lấy liệu theo mẫu ▪ SymPy: tính tốn chun ngành dùng cho số học, đại số, toán rời rạc vật lý lượngtử ▪ Theano: gói chun dùng tính tốn hiệu mảng nhiều chiều, sử dụng rộng rãi học máy ▪ TensorFlow: gói chuyên dùng cho học máy Google, đặc biệt mạng thần kinh nhântạo ▪ Keras: thư viện cấp cao chuyên học máy, sử dụng Theano, TensorFlow CNTKlàm phụ trợ Giới thiệu Numpy ▪ NumPy thư viện bổ sung python, khơng có sẵn, ta phải cài đặt: pi p i n s t a l l numpy ▪ Một số hệ thống python có sẵn numpy bỏ qua bước ▪ Cách đơn giản để kiểm tra xem hệ thống cài numpy hay khơng thử import gói xem có bị báo lỗi hay không: import numpy as np Giới thiệu Numpy Đặc điểm Numpy ▪ Đối tượng NumPy mảng đa chiều đồng (homogeneous multidimention array) Kiểu liệu phần tử trongmảng phải giống Mảng chiều nhiềuchiều Các chiều (axis) đánh thứ tự từ trởđi Số chiều gọi hạng(rank) Có đến 24 kiểu số khácnhau Kiểu ndarray lớp xử lý liệu mảng nhiều chiều ▪ Rất nhiều hàm phương thức xử lý ma trận ▪ ▪ ▪ ▪ ▪ ▪ Giới thiệu Numpy Tạo truy cập mảng import numpy as np a = np.array([1, 2, ] ) print(type(a)) print(a.shape) p r i n t ( a [ ] , a [ ] , a[2]) a[0] = # tạo mảng1 chiều # i n "" # in "(3,)" # i n "1 3" print(a) # i n " [ , 2, 3]" b = np.array([[1, 2, ] , [ , 5, ] ] ) # tạo mảng2 chiều print(b.shape) # i n " ( , 3)" print(b[0, ] , b[0, ] , b[1, ] ) # i n "1 4" print(np.diag([1, 3, ] ) ) # i n gì? 10 Các phép tốn mảng Numpy với phép toán mảng import numpy as np x = np.array([[1, ] , [ , ] ] , dtype=np.float64) y = np.array([[5, ] , [ , ] ] , dtype=np.float64) print(x + y) print(x - y) print(x * y) print(x / y) pr i nt ( np sqr t ( x) ) print(2**x) # print(np.add(x, y ) ) , xử l ý khác l i s t # print(np.subtract(x, y)) # print(np.multiply(x, y)) # print(np.divide(x, y)) # khai t ấ t phần tử # tính mũcác phần tử x # ý : phép nhân/chia thực theo cặp phần tử x y 14 Các phép toán mảng Nhân ma trận (dot) nghịch đảo import numpy as np x = np.array([[1, ] , [ , ] ] ) y = np.array([[5, ] , [ , ] ] ) v = np.array([9, 10]) w= np.array([11, 12]) print(v.dot(w)) print(x.dot(v)) print(x.dot(y)) print(np.linalg.inv(x)) 15 # tương tự print(np.dot(v, w)) # tương tự print(np.dot(x, v)) # tương tự print(np.dot(x, y)) # tính i n nghịch đảo x Các phép toán mảng Ma trận chuyển vị import numpy as np x = np.array([[1, ] , [ , ] ] ) print(x) # i n " [ [ 2] # [3 ] ] " print(x.T) # i n " [ [ 3] # [2 ] ] " # ý : mảng1 chiều khơng có chuyển v ị y = np.array([1, 2, 3]) print(y) # i n " [ ] " print(y.T) # i n " [ 3]" z = np.array([[1, 2, ] ] ) print(z.T) # đoán xemi n gì? 16 Một số thao tác thơng dụng Đọc liệu từ file from i o import StringIO import numpy as np c = StringIO("0 1\n2 3") x = np.loadtxt(c) # array([[ , 1.], # ] ] ) [ 2., d = StringIO("M 21 72\nF 35 58") y = np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'), 'formats': ( ' S ' , ' i ' , ' f ' ) } ) print(y) 17 # [ ( ' M ' , 21, 72.0), ( ' F ' , 35, 58.0)] Một số thao tác thông dụng Đọc liệu từ file import numpy as np x = np.array([[1, 2, ] , [ , 5, ] , [ , 8, ] , [10, 11, 12]]) v = np.array([1, 0, ] ) y =x +v print(y) 18 # i n " [ [ 2 4] # [ 5 7] # [ 8 10] # [11 11 13]]" Một số thao tác thơng dụng Tính tổng theo trục import numpy as np x = np.array([[1, ] , [ , ] ] ) print(np.sum(x)) # tính tổng tồn x , i n "10" # print(np.sum(x, axis=0)) tính tổng cột, i n " [ ] " # print(np.sum(x, axis=1)) tính tổng hàng, i n " [ ] " 19 Một số thao tác thơng dụng Trích xuất liệu theo dãy import numpy as np a = np.array([[1,2], [ , ] , [ , ] ] ) # Prints " [ 5]" p r i n t ( a [ [ , 1, ] , [ , 1, ] ] ) # Prints " [ ] " print(np.array([a[0, ] , a[1, ] , a[2, ] ] ) ) # Prints " [ 2]" print(a[[0, ] , [ , ] ] ) # Prints " [ 2]" print(np.array([a[0, ] , a[0, ] ] ) ) 20 Một số thao tác thông dụng Lọc phần tử theo số import numpy as np a = np.array([[1, 2, ] , [ , 5, ] , [ , 8, ] , [10, 11, 12]]) b = np.array([0, 2, 0, ] ) # b l mảngcác số print(a[np.arange(4), b ] ) # i n " [ 11]" # cộng t ấ t phần tử lọc thêm 10 a[np.arange(4), b] += 10 print(a) 21 # i n # # # "array([[11, [ 4, [17, [10, 2, 5, 8, 21, 3], 16], 9], 12]]) Một số thao tác thông dụng Lọc liệu theo điều kiện import numpy as np a = np.array([[1, ] , [ , ] , [ , ] ] ) bool_idx = (a > 2) print(bool_idx) # i n "[[False False] # [ True True] # [ True Tr ue] ] " # lọc l i ệ u a, t r ả dãy print(a[bool_idx]) # Prints " [ 6]" # v i ế t trực tiếp điều kiện (ngắn gọn hơn) print(a[a > ] ) # Prints " [ ] " 22 Một số thao tác thông dụng Điều chỉnh cỡ ma trận >>> x = np.array([[1, ] , [ , ] , [ , ] ] ) >>> x.shape ( , 2) >>> x = np.array([[1, ] , [ , ] , [ , ] ] ) >>> x = x.reshape(2, 3) / / chỉnh thành 2x3 >>> x array([[1, 3, ] , [ , 4, ] ] ) >>> x = np.array([[1, ] , [ , ] , [ , ] ] ) >>> x = x.reshape(2, -1) / / tự tính chiều l i >>> x array([[1, 3, ] , 23 [ , 4, ] ] ) Một số thao tác thông dụng Elementwise operation >>> x = np.array([1, 2, ] ) >>> np.log(x) / / lấy log số e phần tử array([ 0, 0.69314718, 1.09861229]) >>> np.abs(x) / / lấy t r ị tuyệt đối phần tử array([1, 2, 3]) >>> np.maximum(x, 2) / / so sánh phần tử với lấy max array([2, 2, 3]) >>> np.minimum(x, 2) / / so sánh phần tử với lấy array([1, 2, 2]) >>> x**2 array([1, 4, ] ) 24 / / lũy thừa phần tử Một số thao tác thơng dụng Tính norm cấp vector # norm cấp vector l chiều dài vector # 𝑥 = 𝑥 = 𝑥2 + 𝑥2 + ⋯+𝑥2 x = np.array([[0, ] , [ , ] , [ , ] ] ) # tính norm dòng, kết quả: array([[3], [ ] , [ ] ] ) np.linalg.norm(x, axis = 1, keepdims = True) x = np.array([[0, ] , [ , ] , [ , ] ] ) # tính norm cột, kết quả: array([[5, 10]]) np.linalg.norm(x, axis = 0, keepdims = True) 25 Một số thao tác thông dụng Sinh mảng ngẫu nhiên np.random.random(3, 2) # mảng3x2 ngẫu nhiên [0,1) np.random.randn() # số sinh theo phân phối chuẩn # np.random.randn(3) mảng3 số theo phân phối chuẩn # np.random.randn(3, 4) mảng 3x4 theo phân phối chuẩn ❖ # mảng 2x4 gồm số nguyên [3,15) ❖ np.random.randint(3, 15, ( , 4)) ❖ # sinh dãy l hoán v ị ngẫu nhiên dãy ( , 1, 2, …, 19) np.random.permutation(20) 26 Một số thao tác thông dụng Các hàm thống kê import numpy as np a = np.random.randn(3, 4) # tính trung bình matrận a print(np.mean(a)) # tính trung v ị cột print(np.median(a[:,0])) # tính độ lệch chuẩn dịng print(a.std(axis=0)) # tính phương sai cột print(a.var(axis=1)) 27 LOGO ... chuyên dùng cho học máy Google, đặc biệt mạng thần kinh nhântạo ▪ Keras: thư viện cấp cao chuyên học máy, sử dụng Theano, TensorFlow CNTKlàm phụ trợ Giới thiệu Numpy ▪ NumPy thư viện bổ sung... python cho KHDL ▪ Pandas: chuyên sử dụng cho quản lý tương tác với liệu có cấu trúc, sử dụng rộng rãi việc thu thập tiền xử lý d? ?liệu ▪ Scikit Learn: chuyên học máy, dựa NumPy, SciPy matplotlib; thư. .. matplotlib; thư viện có sẵn nhiều cơng cụ hiệu cho học máy thiết lập mơ hìnhthống kê chẳng hạn thuật toán phân lớp, hồi quy, phân cụm giảm chiều liệu ▪ Statsmodels: cho phép người sử dụng khám phá liệu,