Anúncio

Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx

18 de Feb de 2023
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Anúncio
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
Próximos SlideShares
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Carregando em ... 3
1 de 56
Anúncio

Mais conteúdo relacionado

Anúncio

Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx

  1. 1 BÀI THỰC HÀNH TIN HỌC CƠ SỞ DÀNH CHO KHỐI NGÀNH KINH TẾ
  2. 2 BÀI 1: PYTHON VÀ MÔI TRƯỜNG LÀM VIỆC 1.1. Làm quen môi trường làm việc Bài 1. Môi trường làm việc Anaconda 1. Tạo Notebook Mở Jupyter Notebook Giao diện của Jupyter notebook để quản lý tất cả file notebook của mình tại đây Tạo mới một Notebook bằng cách chọn New -> Python 3; Trong giao diện trang chủ, để tạo một tài liệu Notebook mới click vào New và chọn loại tài liệu như Python, Text file, Folder... Chọn mục Python 3. Giao diện của trang Jupyter chạy ở môi trường máy tính như sau:
  3. 3 Trong giao diện này có các thành phần như sau: Phần 1: Tiêu đề tài liệu, mặc định chưa nhập tiêu đề là Untitled. Khi nhấp chuột vào phần này, một cửa sổ sẽ hiện ra để bạn nhập tên file. Phần 2: Thanh menu bao gồm các menu như: File: các menu thao tác với file như tạo mới, lưu trữ, save as... Edit: các menu thao tác với nội dung file như copy, paste văn bản, cell, tìm kiếm và thay thế một nội dung trong file, chèn hình ảnh... View: menu điều chỉnh giao diện, hiển thị hoặc ẩn các thành phần giao diện trong Jupyter Notebook. Insert, Cell: các hành động liên quan đến Cell là thành phần cơ bản của một tài liệu. Kernel: các thao tác với kernel hiện hành như thay đổi nếu muốn sử dụng ngôn ngữ khác, restart, shutdown Một số các menu khác. Phần 3: Thanh menu nhanh (shortcut menu) bao gồm các thao tác nhanh mà bạn thường làm với một tài liệu, có một số nút trên đó chúng ta hay dùng nhất như: Save file Copy, paste Thay đổi thứ tự các cell trong tài liệu Chạy code trong tài liệu Lựa chọn loại văn bản trong cell:
  4. 4 Code: Cell này chứa mã Python và có thể thực hiện được. Markdown: Cell này chứa văn bản diễn giải. Phần 4: Nội dung tài liệu chứa các cell có nội dung là code hoặc markdown, đây là vùng chúng ta sẽ làm việc chính. Thực hiện một ví dụ đầu tiên, Hello world để xem Jupyter Notebook này hoạt động thế nào? Vào Cell đầu tiên và đưa vào dòng code Python như sau: print("Hello world!") Tiếp đó bạn bấm vào nút Run trong menu nhanh hoặc tổ hợp phím tắt Ctrl + Enter, kết quả sẽ xuất hiện tiếp theo ở ngay dưới cell đó. Trong ví dụ trên chúng ta có 3 cell: - Cell đầu tiên là dạng Markdown, chúng ta có thể đưa vào nội dung là văn bản, file hình ảnh, bảng biểu, danh sách... - Cell thứ hai nội dung là code Python print("Hello world!") và khi bạn bấm và Run hoặc tổ hợp phím Ctrl + Enter thì kết quả của dòng code hiển thị ngay ở bên dưới.
  5. 5 - Sau khi thực hiện một cell thì Jupyter Notebook tự động chèn thêm một cell mới chưa có nội dung gì ở ngay dưới. Thêm nội dung vào Jupyter Notebook Như trong ví dụ Hello world ở trên chúng ta đã thêm vào một nội dung để diễn giải thêm cho đoạn code print("Hello world"). Nội dung này có thể là một đoạn văn bản bao gồm các tiêu đề, đoạn văn bản, hình ảnh, danh sách... Để thêm nội dung văn bản vào Jupyter chúng ta phải lựa chọn dạng của cell là Markdown. Jupyter Notebook cho phép sử dụng Markdown là một ngôn ngữ đánh dấu, nó là tập hợp các ký hiệu tương ứng với một số thẻ trong ngôn ngữ HTML.Tiêu đề trong ngôn ngữ Markdown tương ứng với các thẻ H1, H2 ... H6 trong HTML, trong markdown sử dụng ký tự #, H1 tương ứng với #, H2 tương ứng với ##, ... Sau khi đánh xong văn bản trong Cell, bấm nút Run hoặc tổ hợp phím tắt Ctrl + Enter, văn bản sau định dạng mới hiện ra.
  6. 6 Chúng ta có thể định dạng văn bản với ngôn ngữ Markdown, danh sách các định dạng này như sau: Sử dụng dấu * để bắt đầu và kết thúc một đoạn bạn muốn in nghiêng. Sử dụng dấu ** để bắt đầu và kết thúc một đoạn bạn muốn bôi đậm, tương ứng với thẻ b trong HTML. Sử dụng _ để bắt đầu và kết thúc một đoạn bạn muốn gạch chân, tương ứng với thẻ u trong HTML. Kết quả bạn sẽ thấy khi chạy là văn bản đã được định dạng như mong muốn với thẻ HTML. 4.3.3 Danh sách Trong văn bản chúng ta có thể thêm vào các danh sách giống như thẻ ol, ul trong HTML. Với danh sách có thứ tự ol trong Markdown chúng ta chỉ cần đánh số đằng trước danh sách. Còn với danh sách không thứ tự chúng ta chỉ cần để đằng trước dấu * hoặc dấu + hoặc dấu -.
  7. 7 Kết quả nhận được khi bạn thực thi cell này. 4.3.4 Syntax Highlight Trong các tài liệu, đôi khi chúng ta muốn đưa những đoạn code vào để diễn giải. Markdown cho phép đưa code vào một cách đơn giản bằng cách cho bắt đầu và kết thúc với ký tự ```. Kết quả khi thực hiện cell
  8. 8 4.3.5 Các thành phần khác trong Markdown Ngoài các thành phần trên, chúng ta cũng hay dùng các thành phần văn bản khác như ảnh, đường dẫn... tương ứng với các thẻ img, a trong HTML. Kết quả của đoạn văn bản trên như sau: Export và Import Jupyter Notebook Khi bạn làm việc với Jupyter Notebook bạn có thể hoàn thành và muốn chia sẻ những gì mình làm với mọi người, bạn có thể export tài liệu này ra rất nhiều các dạng khác nhau như: HTML LaTeX PDF Notebook (.ipynb) Markdown
  9. 9 Trong các dạng trên, chúng ta sẽ hay chia sẻ với nhau dạng file Notebook .ipynb, các file này có thể import lại vào Jupyter Notebook và thực hiện. Để export ra file sử dụng menu File -> Download as -> Notebook(.ipynb). Khi bạn có một file Notebook (.ipynb) bạn muốn import vào hệ thống, bạn sử dụng nút Upload ở trang chủ Jupyter Notebook và trỏ đến file cần import. Khi đó file Jupyter Notebook sẽ xuất hiện trong danh sách trang chủ và chỉ cần nhấp vào là một tab mới xuất hiện với nội dung tài liệu này. Một cell rỗng sẽ được tạo sau khi bạn thực thi code. Hãy gõ tiếp một đoạn code Python để thử nghiệm:
  10. 10 BÀI 2: LÀM QUEN VỚI NGÔ NGỮ LẬP TRÌNH PYTHON Bài 01:Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 2000 và 3200 (tính cả 2000 và 3200). Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy. Gợi ý: Sử dụng range(#begin, #end) Code mẫu: j=[] for i in range(2000, 3201): if (i%7==0) and (i%5!=0): j.append(str(i)) print (','.join(j)) Bài 02: Viết một chương trình có thể tính giai thừa của một số cho trước. Ví dụ, số cho trước là 8 thì kết quả đầu ra phải là 40320. Gợi ý: Trong trường hợp dữ liệu đầu vào được cung cấp, bạn hãy chọn cách để người dùng nhập số vào. Code mẫu: x=int(input("Nhập số cần tính giai thừa:")) def fact(x): if x == 0: return 1 return x * fact(x - 1) print (fact(x)) Bài 03: Với số nguyên n nhất định, hãy viết chương trình để tạo ra một dictionary chứa (i, i*i) như là số nguyên từ 1 đến n (bao gồm cả 1 và n) sau đó in ra dictionary này. Ví dụ: Giả sử số n là 8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}. Gợi ý: Viết lệnh yêu cầu nhập số nguyên n. Code mẫu: n=int(input("Nhập vào một số:")) d=dict() for i in range(1,n+1): d[i]=i*i print (d) Bài 04: Câu hỏi: Viết chương trình chấp nhận một chuỗi số, phân tách bằng dấu phẩy từ giao diện điều khiển, tạo ra một danh sách và một tuple chứa mọi số. Ví dụ: Đầu vào được cung cấp là 34,67,55,33,12,98 thì đầu ra là: ['34', '67', '55', '33', '12', '98'] ('34', '67', '55', '33', '12', '98') Gợi ý: Viết lệnh yêu cầu nhập vào các giá trị sau đó dùng quy tắc chuyển đổi kiểu dữ liệu để hoàn tất. Code mẫu: values=input("Nhập vào các giá trị:") l=values.split(",") t=tuple(l) print (l) print (t) Bài 05: Câu hỏi: Viết một method tính giá trị bình phương của một số. Gợi ý: Sử dụng toán tử **. Code mẫu:
  11. 11 x=int(input("Nhập một số:")) #nhập số cần tính bình phương từ giao diện def square(num): #định nghĩa bình phương của một số return num ** 2 print (square(2)) #in bình phương của 2 print (square(3)) #in bình phương của 3 print (square(x)) #in bình phương của x Bài 06: Câu hỏi: Viết một chương trình để in tài liệu về một số hàm Python được tích hợp sẵn như abs(), int(), input() và thêm tài liệu cho hàm bạn tự định nghĩa. Gợi ý: Sử dụng __doc__ Code mẫu: print (abs.__doc__) print (int.__doc__) print (input.__doc__) def square(num): '''Trả lại giá trị bình phương của số được nhập vào. Số nhập vào phải là số nguyên. ''' return num ** 2 print (square.__doc__) Bài 07: Câu hỏi: Định nghĩa một lớp gồm có tham số lớp và có cùng tham số instance Gợi ý: Khi định nghĩa tham số instance, cần thêm nó vào __init__ Bạn có thể khởi tạo một đối tượng với tham số bắt đầu hoặc thiết lập giá trị sau đó. Code mẫu: class Person: # Định nghĩa lớp "name" name = "Person" def __init__(self, name = None): # self.name là biến instance self.name = name jeffrey = Person("Jeffrey") print ("%s name is %s" % (Person.name, jeffrey.name)) nico = Person() nico.name = "Nico" print ("%s name is %s" % (Person.name, nico.name)) Bài 08: Câu hỏi: Viết một chương trình có 2 chữ số, X, Y nhận giá trị từ đầu vào và tạo ra một mảng 2 chiều. Giá trị phần tử trong hàng thứ i và cột thứ j của mảng phải là i*j. Lưu ý: i=0,1,...,X-1; j=0,1,...,Y-1. Ví dụ: Giá trị X, Y nhập vào là 3,5 thì đầu ra là: [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]] Gợi ý: Viết lệnh để nhận giá trị X, Y từ giao diện điều khiển do người dùng nhập vào. Code mẫu: input_str = input("Nhập X, Y: ") dimensions=[int(x) for x in input_str.split(',')] rowNum=dimensions[0] colNum=dimensions[1] multilist = [[0 for col in range(colNum)] for row in range(rowNum)]
  12. 12 for row in range(rowNum): for col in range(colNum): multilist[row][col]= row*col print (multilist) Bài 09: Câu hỏi: Viết một chương trình chấp nhận chuỗi từ do người dùng nhập vào, phân tách nhau bởi dấu phẩy và in những từ đó thành chuỗi theo thứ tự bảng chữ cái, phân tách nhau bằng dấu phẩy. Giả sử đầu vào được nhập là: without,hello,bag,world, thì đầu ra sẽ là: bag,hello,without,world. Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: items=[x for x in input("Nhập một chuỗi: ").split(',')] items.sort() print (','.join(items)) Bài 10: Câu hỏi: Viết một chương trình chấp nhận đầu vào là chuỗi các số nhị phân 4 chữ số, phân tách bởi dấu phẩy, kiểm tra xem chúng có chia hết cho 5 không. Sau đó in các số chia hết cho 5 thành dãy phân tách bởi dấu phẩy. Ví dụ đầu vào là: 0100,0011,1010,1001 Đầu ra sẽ là: 1010 Gợi ý:Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: value = [] items=[x for x in input("Nhập các số nhị phân: ").split(',')] for p in items: intp = int(p, 2) if not intp%5: value.append(p) print (','.join(value)) Bài 11: Câu hỏi: Viết một chương trình tìm tất cả các số trong đoạn 1000 và 3000 (tính cả 2 số này) sao cho tất cả các chữ số trong số đó là số chẵn. In các số tìm được thành chuỗi cách nhau bởi dấu phẩy, trên một dòng. Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: values = [] for i in range(1000, 3001): s = str(i) if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0): values.append(s) print (",".join(values)) Bài 12: Câu hỏi: Viết một chương trình tính giá trị của a+aa+aaa+aaaa với a là số được nhập vào bởi người dùng. Giả sử a được nhập vào là 1 thì đầu ra sẽ là: 1234
  13. 13 Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: a = input("Nhập số a: ") n1 = int( "%s" % a ) n2 = int( "%s%s" % (a,a) ) n3 = int( "%s%s%s" % (a,a,a) ) n4 = int( "%s%s%s%s" % (a,a,a,a) ) print ("Tổng cần tính là: ",n1+n2+n3+n4) Bài 13: Câu hỏi: Sử dụng một danh sách để lọc các số lẻ từ danh sách được người dùng nhập vào. Giả sử đầu vào là: 1,2,3,4,5,6,7,8,9 thì đầu ra phải là: 1,3,5,7,9 Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: values = input("Nhập dãy số của bạn, cách nhau bởi dấu phẩy: ") numbers = [x for x in values.split(",") if int(x)%2!=0] print (",".join(numbers)) Bài 14: Câu hỏi: Viết chương trình tính số tiền thực của một tài khoản ngân hàng dựa trên nhật ký giao dịch được nhập vào từ giao diện điều khiển. Định dạng nhật ký được hiển thị như sau: D 100 W 200 (D là tiền gửi, W là tiền rút ra). Giả sử đầu vào được cung cấp là: D 300 D 300 W 200 D 100 Thì đầu ra sẽ là: 500 Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: import sys netAmount = 0 while True: s = input("Nhập nhật ký giao dịch: ") if not s: break values = s.split(" ") operation = values[0] amount = int(values[1]) if operation=="D": netAmount+=amount elif operation=="W": netAmount-=amount else: pass print (netAmount)
  14. 14 Bài 15: Câu hỏi: Một website yêu cầu người dùng nhập tên người dùng và mật khẩu để đăng ký. Viết chương trình để kiểm tra tính hợp lệ của mật khẩu mà người dùng nhập vào. Các tiêu chí kiểm tra mật khẩu bao gồm: 1. Ít nhất 1 chữ cái nằm trong [a-z] 2. Ít nhất 1 số nằm trong [0-9] 3. Ít nhất 1 kí tự nằm trong [A-Z] 4. Ít nhất 1 ký tự nằm trong [$ # @] 5. Độ dài mật khẩu tối thiểu: 6 6. Độ dài mật khẩu tối đa: 12 Chương trình phải chấp nhận một chuỗi mật khẩu phân tách nhau bởi dấu phẩy và kiểm tra xem chúng có đáp ứng những tiêu chí trên hay không. Mật khẩu hợp lệ sẽ được in, mỗi mật khẩu cách nhau bởi dấu phẩy. Ví dụ mật khẩu nhập vào chương trình là: ABd1234@1,a F1#,2w3E*,2We3345 Thì đầu ra sẽ là: ABd1234@1 Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Code mẫu: import re value = [] items=[x for x in input("Nhập mật khẩu: ").split(',')] for p in items: if len(p)<6 or len(p)>12: continue else: pass if not re.search("[a-z]",p): continue elif not re.search("[0-9]",p): continue elif not re.search("[A-Z]",p): continue elif not re.search("[$#@]",p): continue elif re.search("s",p): continue else: pass value.append(p) print (",".join(value))
  15. 15 BÀI 3: LÀM QUEN VỚI NGÔ NGỮ LẬP TRÌNH PYTHON Bài 1: Câu hỏi: Viết chương trình sắp xếp tuple (name, age, score) theo thứ tự tăng dần, name là string, age và height là number. Tuple được nhập vào bởi người dùng. Tiêu chí sắp xếp là: Sắp xếp theo name sau đó sắp xếp theo age, sau đó sắp xếp theo score. Ưu tiên là tên > tuổi > điểm. Nếu đầu vào là: Tom,19,80 John,20,90 Jony,17,91 Jony,17,93 Json,21,85 Thì đầu ra sẽ là: [('John', '20', '90'), ('Jony', '17', '91'), ('Jony', '17', '93'), ('Json', '21', '85'), ('Tom', '19', '80')] Gợi ý: Trong trường hợp dữ liệu đầu vào được nhập vào chương trình nó nên được giả định là dữ liệu được người dùng nhập vào từ giao diện điều khiển. Sử dụng itemgetter để chấp nhận nhiều key sắp xếp. Code mẫu: from operator import itemgetter, attrgetter l = [] while True: s = input() if not s: break l.append(tuple(s.split(","))) print (sorted(l, key=itemgetter(0,1,2))) Bài 2: Câu hỏi: Viết chương trình tính tần suất các từ từ input. Output được xuất ra sau khi đã sắp xếp theo bảng chữ cái. Giả sử input là: New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3. Thì output phải là: 2:2 3.:1 3?:1 New:1 Python:5 Read:1 and:1 between:1 choosing:1 or:2 to:1 Gợi ý: Trong trường hợp dữ liệu đầu vào được cung cấp cho câu hỏi, nó phải được giả định là một input được nhập từ giao diện điều khiển. Code mẫu: freq = {} # frequency of words in text line = input() for word in line.split():
  16. 16 freq[word] = freq.get(word,0)+1 words = sorted(freq.keys()) for w in words: print ("%s:%d" % (w,freq[w])) Bài 3: Câu hỏi: Định nghĩa một hàm có thể chuyển số nguyên thành chuỗi và in nó ra giao diện điều khiển Gợi ý:Sử dụng str() để chuyển đổi một số thành chuỗi. Code mẫu: def printValue(n): print (str(n)) printValue(3) Bài 4: Câu hỏi: Định nghĩa hàm có thể nhận hai số nguyên trong dạng chuỗi và tính tổng của chúng, sau đó in tổng ra giao diện điều khiển. Gợi ý: Sử dụng int() để chuyển đổi một chuỗi thành số nguyên. Code mẫu: def printValue(s1,s2): print (int(s1)+int(s2)) printValue("3","4") #Kết quả là 7 Bài 5: Câu hỏi: Định nghĩa một hàm có thể in dictionary chứa các key là số từ 1 đến 20 (bao gồm cả 1 và 20) và các giá trị bình phương của chúng. Gợi ý: Sử dụng dict[key]=value để nhập mục vào dictionary. Sử dụng toán từ ** để lấy bình phương của một số. Sử dujnng range() cho các vòng lặp. Code mẫu: def printDict(): d=dict() for i in range(1,21): d[i]=i**2 print (d) printDict() Kết quả khi chạy code trên là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100, 11: 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361, 20: 400} Bài 6: Câu hỏi: Định nghĩa một hàm có thể tạo list chứa các giá trị bình phương của các số từ 1 đến 20 (bao gồm cả 1 và 20) và in 5 mục đầu tiên trong list. Gợi ý: Sử dụng toán tử ** để lấy giá trị bình phương. Sử dụng range() cho vòng lặp. Sử dụng list.append() để thêm giá trị vào list. Sử dụng [n1:n2] để cắt list Code mẫu: def printList(): li=list() for i in range(1,21): li.append(i**2) print (li[:5]) printList()
  17. 17 Bài 7: Câu hỏi: Viết một chương trình để tạo tuple khác, chứa các giá trị là số chẵn trong tuple (1,2,3,4,5,6,7,8,9,10) cho trước. Gợi ý: Sử dụng for để lặp tuple. Sử dụng tuple() để tạo tuple từ list. Code mẫu: tp=(1,2,3,4,5,6,7,8,9,10) li=list() for i in tp: if tp[-i]%2==0: li.append(tp[i]) tp2=tuple(li) print (tp2) Kết quả: (2, 4, 6, 8, 10) Bài 8: Yêu cầu: Viết chương trình Python có thể lọc các số chẵn trong danh sách sử dụng hàm filter. Danh sách là [1,2,3,4,5,6,7,8,9,10]. Gợi ý: Sử dụng filter() để lọc các yếu tố trong một list. Sử dụng lambda để định nghĩa hàm chưa biết. Code mẫu: li = [1,2,3,4,5,6,7,8,9,10] evenNumbers = list(filter (lambda x: x% 2 == 0, li)) print (evenNumbers) Kết quả: [2, 4, 6, 8, 10] Bài 9: Yêu cầu: Viết chương trình Python dùng map() và filter() để tạo list chứa giá trị bình phương của các số chẵn trong [1,2,3,4,5,6,7,8,9,10]. Gợi ý: Dùng map() để tạo list; Dùng filter() để lọc thành phần trong list; Dùng lambda để định nghĩa hàm chưa biết. Code mẫu: li = [1,2,3,4,5,6,7,8,9,10] squareOfEvenNumbers = list (map (lambda x: x ** 2, filter (lambda x: x% 2 == 0, li))) print (squareOfEvenNumbers) Kết quả: [4, 16, 36, 64, 100] Bài 10: Yêu cầu: Đưa ra một RuntimeError exception. Gợi ý: Sử dụng raise() để đưa ra exception. Code mẫu: Code đơn giản: raise RuntimeError('something wrong') Code phức tạp: class RuntimeError(Exception): def __init__(self, mismatch): Exception.__init__(self, mismatch) try: print ("And now, the Vocational Guidance Counsellor Sketch.") raise RuntimeError("Does not have proper hat") print ("This print statement will not be reached.")
  18. 18 except RuntimeError as problem: print ("Vocation problem: {0}".format(problem)) Bài 11: Yêu cầu: Viết một chương trình tính 1/2 + 2/3 + 3/4 + ... + n/(n + 1) với một n là số được nhập vào (n> 0). Ví dụ, nếu n là số sau đây được nhập vào: 5 Thì đầu ra phải là: 3.55 Gợi ý: Sử dụng float() để chuyển số nguyên sang số thập phân. Code mẫu: n=int(input("Nhập số n >0: ")) sum=0.0 for i in range(1,n+1): sum += float(float(i)/(i+1)) print (sum) Bài 12: Yêu cầu: Viết chương trình sử dụng generator để in số chẵn trong khoảng từ 0 đến n, cách nhau bởi dấu phẩy, n là số được nhập vào. Ví dụ nếu n=10 được nhập vào thì đầu ra của chương trình là: 0,2,4,6,8,10 Gợi ý: Sử dụng yield để tạo ra giá trị kết tiếp trong generator. Code mẫu: def EvenGenerator(n): i=0 while i<=n: if i%2==0: yield i i+=1 n=int(input("Nhập n: ")) values = [] for i in EvenGenerator(n): values.append(str(i)) print ("Các số chẵn trong khoảng 0 và n là: ",",".join(values)) Bài 13: Yêu cầu: Tạo một số thập phân ngẫu nhiên, có giá trị nằm trong khoảng từ 10 đến 100 bằng cách sử dụng module math của Python. Gợi ý: Sử dụng random.random() để tạo float ngẫu nhiên trong [0,1]. Code mẫu: import random print (random.random()*100) Bài 14: Yêu cầu: Viết chương trình đếm và in số ký tự của chuỗi do người dùng nhập vào. Gợi ý: Sử dụng dict để lưu trữ các cặp key/value. Sử dụng dict.get() để tra cứu key với giá trị mặc định. Code mẫu: dic = {} chuoi=input("Nhập chuỗi cần đếm ký tự: ") for c in chuoi:
  19. 19 dic[c] = dic.get(c,0)+1 print ('n'.join(['%s,%s' % (k, v) for k, v in dic.items()])) Kết quả: Nhập chuỗi cần đếm ký tự: quantrimang.com q,1 u,1 a,2 n,2 t,1 r,1 i,1 m,2 g,1 .,1 c,1 o,1 Bài 15: Yêu cầu:Viết chương trình để giải 1 câu đố một trang trại thỏ và gà có 35 đầu, 94 chân, hỏi số thỏ và gà là bao nhiêu? Gợi ý: Sử dụng vòng lặp for để lặp qua tất cả các giả thuyết có thể. Code mẫu: def giai(dau,chan): klg='Không có dáp án phù hợp!' for i in range(dau+1): j=dau-i if 2*i+4*j==chan: return i,j return klg,klg dau=35 chan=94 dap_an=giai(dau,chan) print (dap_an) Kết quả: (23, 12)
  20. 20 BÀI 4: LÀM VIỆC CÁC LOẠI FILE DỮ LIỆU Bài 1: Cho bảng dữ liệu về giá vàng trong tháng như sau: Ngày Giá vàng bán ra Giá vàng mua vào 1/3 46 45 2/3 47 46 3/3 46 45.5 4/3 45 44.5 5/3 46 45 6/3 46 45.5 7/3 45 44.5 Hãy viết chương trình lưu trữ dữ liệu dưới dạng file CSV. Bài 2: Với dữ liệu trong file CSV đã tạo trong bài 1, viết chương trình đọc và hiển thị dữ liệu từ file CSV này và thêm các tiêu đề đầu vào dữ liệu kết quả như hình sau: Bài 3: Cho bảng dữ liệu về lỗi vi phạm của sinh viên như sau: Tên sinh viên Vắng lý thuyết Vắng thực hành Không nộp bài Trung 3 2 0 Cảnh 5 1 3 Bảo 1 0 0 Quốc 0 0 2 Tùng 2 1 1 Hãy viết chương trình lưu trữ dữ liệu dưới dạng file CSV. Bài 4: Với dữ liệu trong file CSV đã tạo trong bài 3, viết chương trình đọc và hiển thị dữ liệu từ file CSV này và thêm các tiêu đề đầu vào dữ liệu kết quả như hình sau:
  21. 21 Bài 5: Cho bảng dữ liệu về giá vàng trong tháng 3 như sau: Ngày Giá vàng bán ra Giá vàng mua vào 1/3 46 45 2/3 47 46 3/3 46 45.5 4/3 45 44.5 5/3 46 45 6/3 46 45.5 7/3 45 44.5 Hãy viết chương trình lưu trữ dữ liệu dưới dạng file Excel.
  22. 22 CODE MẪU Bài 1 import pandas as pd ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaban = [46,47,46,45,46,46,45] giamua = [45,46,45.5,44.5,45,45.5,44.5] dulieu = zip(ngay, giaban, giamua) df = pd.DataFrame(data = dulieu) df.to_csv('Banggiavang3.csv', index=False, header=False) Bài 2 import pandas as pd Location = "Banggiavang3.csv" # Đọc file csv df = pd.read_csv(Location) # Thêm tiêu đề đầu vào dữ liệu df.columns = ['Ngày','Giá vàng bán ra', 'Giá vàng mua vào'] df.head() Bài 3 import pandas as pd ten = ['Trung', 'Cảnh', 'Bảo', 'Quốc', 'Tùng'] vangLT = [3, 5, 1, 0, 2] vangTH = [2, 1, 0, 0, 1] khongNB = [0, 3, 0, 2, 1] dulieu = zip(ten, vangLT, vangTH, khongNB) df = pd.DataFrame(data = dulieu) df.to_csv('Bangvipham.csv', index=False, header = False) Bài 4 import pandas as pd Location = "Bangvipham.csv" # Đọc file csv df = pd.read_csv(Location)
  23. 23 # Thêm tiêu đề đầu vào dữ liệu df.columns = ['Tên','Vắng lý thuyết', 'Vắng thực hành', 'Không nộp bài'] df.head() Bài 5: import pandas as pd ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaban = [46,47,46,45,46,46,45] giamua = [45,46,45.5,44.5,45,45.5,44.5] dulieu = zip(ngay, giaban, giamua) cot = ['Ngày', 'Giá vàng bán ra', 'Giá vàng mua vào'] df = pd.DataFrame(data = dulieu,columns=cot) writer = pd.ExcelWriter('Banggiavang3.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1') writer.save()
  24. 24 BÀI 5: LÀM VIỆC CÁC LOẠI FILE DỮ LIỆU Bài 1: Với dữ liệu trong file Excel đã tạo trong bài 4.5, viết chương trình đọc và hiển thị dữ liệu từ file Excel này như kết quả hình sau: Bài 2: Cho 2 bảng dữ liệu về giá vàng trong tháng như sau: Bảng giá vàng tháng 3 Ngày Giá vàng bán ra Giá vàng mua vào 1/3 46 45 2/3 47 46 3/3 46 45.5 4/3 45 44.5 5/3 46 45 6/3 46 45.5 7/3 45 44.5 Bảng giá vàng tháng 4 Ngày Giá vàng bán ra Giá vàng mua vào 4/4 48 47 5/4 47 46.5 6/4 46.5 45.5 7/4 46 45 8/4 46.5 46 9/4 47 46 10/4 47.5 46.5 Hãy viết chương trình lưu trữ dữ liệu của 2 bảng trên vào lần lượt sheet1 và sheet2 của dạng file Excel. Bài 3: Với dữ liệu trong từ 2 file Excel đã tạo trong bài 1 và bài 2, viết chương trình khai thác dữ liệu từ 2 file Excel này với dữ liệu kết quả như hình sau:
  25. 25 Bài 4: Cho bảng dữ liệu về lỗi vi phạm của sinh viên như sau: Tên sinh viên Vắng lý thuyết Vắng thực hành Không nộp bài Trung 3 2 0 Cảnh 5 1 3 Bảo 1 0 0 Quốc 0 0 2 Tùng 2 1 1 Hãy viết chương trình lưu trữ dữ liệu dưới dạng file SQL. Bài 5: Với dữ liệu trong file SQL đã tạo trong bài 1, viết chương trình đọc và hiển thị dữ liệu của những sinh viên có số buổi vắng lý thuyết (vangLT) lớn hơn hoặc bằng 2 từ file SQL này như kết quả hình sau:
  26. 26 CODE MẪU Bài 1: import pandas as pd Location = "Banggiavang3.xlsx" df = pd.read_excel(Location) df.head() Bài 2: import pandas as pd ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaban = [46,47,46,45,46,46,45] giamua = [45,46,45.5,44.5,45,45.5,44.5] dulieu = zip(ngay, giaban, giamua) cot = ['Ngày', 'Giá vàng bán ra', 'Giá vàng mua vào'] df = pd.DataFrame(data = dulieu,columns=cot) ngay1 = ['4/4','5/4','6/4','7/4','8/4','9/4','10/4'] giaban1 = [48,47,46.5,46,46.5,47,47.5] giamua1 = [47,46.5,45.5,45,46,46.5,46.5] dulieu1 = zip(ngay1, giaban1, giamua1) cot1 = ['Ngày', 'Giá vàng bán ra', 'Giá vàng mua vào'] df1 = pd.DataFrame(data = dulieu1,columns=cot1) writer = pd.ExcelWriter('Banggiavang4.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1') df1.to_excel(writer, sheet_name='Sheet2') writer.save() Bài 3: import pandas as pd all_data = pd.DataFrame() df = pd.read_excel("Banggiavang3.xlsx") all_data = all_data.append(df,ignore_index=True) df = pd.read_excel("Banggiavang4.xlsx") all_data = all_data.append(df,ignore_index=True) all_data.describe()
  27. 27 Bài 4: import pandas as pd import os import sqlite3 as lite ten = ['Trung', 'Cảnh', 'Bảo', 'Quốc', 'Tùng'] vangLT = [3, 5, 1, 0, 2] vangTH = [2, 1, 0, 0, 1] khongNB = [0, 3, 0, 2, 1] dulieu = zip(ten, vangLT, vangTH, khongNB) df = pd.DataFrame(data = dulieu, columns=['Ten','vangLT', 'vangTH', 'khongNB']) #Tạo tập tin cơ sở dữ liệu Bangvipham.db db_filename = r'Bangvipham.db' #Kết nối đến tập tin cơ sở dữ liệu Bangvipham.db con = lite.connect(db_filename) #Lưu trữ dữ liệu vào bảng Ketoan_K43A trong tập tin cơ sở dữ liệu Bangvipham.db df.to_sql( 'Ketoan_K43A', con, schema=None, if_exists='replace', index=True, index_label=None, chunksize=None, dtype=None, method=None, ) con.close() Bài 5: import pandas as pd from sqlalchemy import create_engine # Connect to sqlite db db_file = r'Bangvipham.db' engine = create_engine(r"sqlite:///{}".format(db_file)) sql = 'SELECT * from Ketoan_K43A where vangLT >= 2' sales_data_df = pd.read_sql(sql, engine) sales_data_df
  28. 28
  29. 29 BÀI 6: THAO TÁC CƠ BẢN TRÊN DỮ LIỆU Bài 1: Cho tập tin dataYear.csv với dữ liệu về tuổi thọ của mỗi người như sau: Hãy viết chương trình xử lý ngoại lệ trên trường dữ liệu tuổi trong khoảng giá trị trung bình của độ lệch chuẩn với dung sai là 1.2 (những giá trị nằm ngoài vùng này sẽ bị loại bỏ). Hiển thị dữ liệu đã được xử lý ngoại lệ với kết quả như hình sau:
  30. 30 Bài 2: Với dữ liệu trong file CSV đã cho trong bài 1, hãy viết chương trình tìm và xóa những phần tử khác biệt với những phần tử nằm trong 20% đến 80% của trường tuổi với độ lệch chuẩn và dung sai là 0.9. Xuất file dữ liệu CSV đã được xử lý ngoại lệ với kết quả như hình sau: Bài 3: Viết chương trình tạo tập tin dữ liệu CSV như hình sau:
  31. 31 Viết chương trình xóa các ký tự trắng thừa của trường Họ tên, loại bỏ các ký tự “-” và “.” của trường số ĐT. Bài 4: Với dữ liệu trong file CSV đã tạo trong bài 3, viết chương trình chuẩn hóa lại trường dữ liệu Ngày sinh thành định dạng dd/mm/yy, hiển thị dữ liệu kết quả như hình sau: Bài 5: Với tập tin dữ liệu CSV đã được chuẩn hóa như trên bài 3 và bài 4, viết chương trình chia trường Giới tính có 2 giá trị thành 2 trường: “Nam” và “Nữ”, nhận giá trị 0 hoặc 1. Chuyển đổi dữ liệu giá trị cho trường Giới tính: giá trị “Nam” là: 1 và “Nữ” là: 0. Xóa các bản ghi trùng lặp, chỉ giữ lại 1 bản ghi. Lưu và hiển thị dữ liệu kết quả như hình sau:
  32. 32 CODE MẪU Bài 1 import pandas as pd Location = "dataYear.csv" df = pd.read_csv(Location) df.columns=['ten', 'tuoi'] #Tính trung bình của trường tuoi tuoi_TB = df['tuoi'].mean() #Tính độ lệch chuẩn dolechchuan = df['tuoi'].std() #Tính giá trị biên trên và giá trị biên dưới theo độ lệch chuẩn 1.2 gtbien_tren = tuoi_TB + dolechchuan * 1.2 gtbien_duoi = tuoi_TB - dolechchuan * 1.2 copydf = df #Xóa các dòng dữ liệu nằm ngoài giá trị biên copydf = copydf.drop(copydf[copydf['tuoi']> gtbien_tren].index) copydf = copydf.drop(copydf[copydf['tuoi']< gtbien_duoi].index) #Hiển thị dữ liệu đã được xử lý ngoại lệ copydf Bài 2 #Tính giá trị biên trên và giá trị biên dưới theo độ lệch chuẩn 0.9 q1 = df['tuoi'].quantile(.20) q3 = df['tuoi'].quantile(.80) iqr = q3-q1 gtbien_tren = q3 + iqr * 0.9 gtbien_duoi = q1 - iqr * 0.9 #Xóa các dòng dữ liệu nằm ngoài giá trị biên copydf = df copydf = copydf.drop(copydf[copydf['tuoi']> gtbien_tren].index) copydf = copydf.drop(copydf[copydf['tuoi']< gtbien_duoi].index) Bài 3 # Xây dựng hàm xóa ký tự trắng thừa def remove_whitespace(st): try: st = ' '.join(st.split()) except: pass return st # Gọi hàm xóa ký tự trắng thừa của trường hoten
  33. 33 df.hoten = df.hoten.apply(remove_whitespace) # Xây dựng hàm loại bỏ ký tự def standardize_num(num): try: num = num.replace("-","") num = num.replace(".","") num = "".join(num.split()) if len(num)<10 and num != 'Missing': num="000000000" + num num=right(num,10) except: pass return num # Gọi hàm loại bỏ ký tự của trường sodt từ bảng dữ liệu df.sodt = df.sodt.apply(standardize_num) Bài 4 # Xây dựng hàm chuẩn hóa dữ liệu Ngày sinh def standardize_date(the_date): formatted_date = "" the_date = str(the_date) if not the_date or the_date.lower() == "missing" or the_date == "nan": formatted_date = "MISSING" if the_date.lower().find('x') != -1: formatted_date = "Incomplete" if the_date[0:2] == "00": formatted_date = the_date.replace("00", "19") try: formatted_date = str(datetime.strptime(the_date,'%m/%d/%y').strftime('%d/%m/%y')) except: pass try: formatted_date = str(datetime.strptime(the_date, '%m/%d/%Y').strftime('%d/%m/%y')) except: pass try: formatted_date = str(datetime.strptime(the_date, '%d-%m- %Y').strftime('%d/%m/%y')) except: pass try: if int(the_date[0:4]) < 1900:
  34. 34 formatted_date = "Incomplete" try: formatted_date = str(datetime.strptime(the_date, '%Y-%m- %d').strftime('%d/%m/%y')) except: pass try: formatted_date = str(datetime.strptime(the_date, '%Y/%m/%d').strftime('%d/%m/%y')) except: pass except: pass return formatted_date Bài 5 # Chia cột Giới tính thành 2 cột df_gt = pd.get_dummies(df['gioitinh']) # Thêm trường vào file dữ liệu df_new = df.join(df_gt) #df_new = pd.concat([df, df_gender], axis=1) # Xây dựng hàm chuyển đổi giá trị def score_to_numeric(x): if x=='Nam': return 1 if x=='Nữ': return 0 # Gọi hàm chuyển đổi giá trị cho trường Giới tính df_new.gioitinh = df_new.gioitinh.apply(score_to_numeric) #Xóa bỏ các bản ghi trùng nhau, giữ lại 1 bản ghi df_new.duplicated() df_trung = df_new.drop_duplicates() #Tạo tập tin dữ liệu data01.csv df_trung.to_csv('data01.csv',index=False,header=True)
  35. 35 BÀI 7: THAO TÁC CƠ BẢN TRÊN DỮ LIỆU Bài 1: Với tập tin dữ liệu lưu trữ trong bài 5 ở trên, viết chương trình thực hiện các yêu cầu sau: - Xóa cột Nam và cột Nữ. - Thêm cột Hưu trí với dãy giá trị cho trước là: [1,0,0,1,0,1]. - Thêm cột hệ số lương với giá trị cho trước là: [6.4,3.99,2.97,5.4,4.2,8.2] - Thêm cột lương cơ bản với giá trị bằng Hệ số lượng*1350000 - Đổi tất cả tên tiêu đề sang chữ thường. - Sửa đổi giá trị của trường Trình độ thạc sỹ, nếu giá trị lớn hơn bằng 1 thì kết quả là 1. - Lưu trữ dưới dạng tập tin CSV và hiển thị dữ liệu như hình sau: Bài 2: Với tập tin dữ liệu CSV lưu trữ trong bài trên, viết chương trình thực hiện các yêu cầu sau: - Lọc 3 trường dữ liệu: hoten, ngaysinh, gioitinh. - Lọc 3 dòng đầu tiên của tập tin dữ liệu. - Hiển thị những bản ghi thỏa điều kiện có trường hoten xuất hiện chữ “Thị”. - Lọc những bản ghi có giới tính 1. - Lọc những bản ghi có giới tính là 0 và hưu trí là 1 - Lọc dữ liệu những bản ghi có giới tính là 0 hoặc trình độ tiến sỹ là 1 - Lấy 3 dòng dữ liệu một cách ngẫu nhiên Bài 3:Với tập tin dữ liệu CSV lưu trữ như trong hình dưới đây:
  36. 36 Viết chương trình thực hiện các yêu cầu sau: - Đếm số nhân viên có giới tính là Nữ (giá trị 0), số nhân viên có giới tính là Nam (giá trị 1). - Đếm số nhân viên Nữ và có trình độ Thạc sỹ - Đếm số nhân viên có giới tính là Nữ hoặc nhân viên có trình độ Tiến sỹ - Tính trung bình trường dữ liệu Lương cơ bản của những người có trình độ là cử nhân. - Xác định mức lương cơ bản cao nhất của nhân viên có trình độ cử nhân. - Xác định mức lương cơ bản thấp nhất của nhân viên nữ có trình độ cử nhân. Bài: Với tập tin dữ liệu CSV như trong bài 1 ở trên, - Viết chương trình thực hiện hiển thị và sắp xếp dữ liệu tăng dần theo cột Lương cơ bản, như hình dưới: - Viết chương trình thực hiện hiển thị và sắp xếp dữ liệu tăng dần theo cột Giới tính, giảm dần theo cột Lương cơ bản, như hình dưới:
  37. 37 Bài 5: Với tập tin dữ liệu CSV lưu trữ như trong hình dưới đây: Viết chương trình thực hiện các yêu cầu sau: - Tạo bảng thống kê tính trung bình của trường Lương cơ bản theo gộp nhóm trường Giới tính, như hình sau: - Tạo bảng thống kê lương cao nhất của trường Lương cơ bản theo gộp nhóm trường trình độ cử nhân và Giới tính, như hình sau: Bài 6: Với tập tin dữ liệu CSV như trong bài 1 ở hình trên, viết chương trình thực hiện các yêu cầu sau: - Tạo bảng thống kê lương thấp nhất của trường Lương cơ bản theo gộp nhóm trường trình độ cử nhân và Giới tính, như hình sau:
  38. 38 - Tạo bảng thống kê số nhân viên nam, nữ có bằng Cử nhân, như hình sau:
  39. 39 CODE MẪU Bài 1 #Xóa trường Nam và Nữ df = df.drop('Nam', axis=1) df = df.drop('Nữ', axis=1) #Thêm cột Hưu trí với giá trị với dãy giá trị cho trước d = ([1,0,0,1,0,1]) s = pd.Series(d, index= df.index) df['Huutri'] = s #Thêm cột hệ số lương với giá trị cho trước d = ([6.4,3.99,2.97,5.4,4.2,8.2]) s = pd.Series(d, index= df.index) df['hsl'] = s #Thêm cột lương cơ bản với giá trị bằng Hệ số lương*1350000 l = df['hsl']*1350000 s = pd.Series(l, index= df.index) df['luongcb'] = s #Đổi tên cột sang chữ thường, ký tự đầu là ký tự hoa df.columns = map(str.lower, df.columns) # Xây dựng hàm chuyển đổi giá trị def score_to_num(x): if x==0: return 0 if x>=1: return 1 Bài 2 #Lọc cột df[['hoten','ngaysinh','gioitinh']].head() #Lọc dòng df[:3] #Để hiển thị những bản ghi thỏa điều kiện df.loc[df['hoten'].str.contains('Thị')==True] #Lọc dữ liệu những bản ghi có giới tính 1 #df[df['gioitinh'] == 1] #Lọc dữ liệu những bản ghi có giới tính là 0 và hưu trí là 1 #df[(df['gioitinh'] == 0) & (df['huutri'] == 1)]
  40. 40 #Lọc dữ liệu những bản ghi có giới tính là 0 hoặc trình độ tiến sỹ là 1 #df[(df['gioitinh'] == 0) | (df['td_ts'] == 1)] #lấy 3 dòng dữ liệu một cách ngẫu nhiên #df.take(np.random.permutation(len(df))[:3]) Bài 3 # Đếm số nhân viên có giới tính là Nữ (giá trị 0), số nhân viên có giới tính là Nam (giá trị 1). dem_nu = df.loc[df['gioitinh']==0].count() dem_nam = df.loc[df['gioitinh']==1].count() # Đếm số nhân viên Nữ và có trình độ Thạc sỹ dem_ths = df.loc[(df['gioitinh'] ==0) & (df['td_ths'] == 1)].count() # Đếm số nhân viên có giới tính là Nữ hoặc nhân viên có trình độ Tiến sỹ dem_ts = df.loc[(df['gioitinh'] ==0) | (df['td_ts'] == 1)].count() # Tính trung bình trường dữ liệu Lương cơ bản của những người có trình độ là cử nhân. luong_tb = df.loc[df['td_cn'] == 1]['luongcb'].mean() # Xác định mức lương cơ bản cao nhất của nhân viên có trình độ cử nhân. luong_max = df.loc[df['td_cn'] == 1]['luongcb'].max() # Xác định mức lương cơ bản thấp nhất của nhân viên nữ có trình độ cử nhân. luong_min = df.loc[(df['gioitinh'] ==0) & (df['td_cn'] == 1)]['luongcb'].min() Bài 4 # Sắp xếp dữ liệu tăng dần theo cột Lương cơ bản. df = df.sort_values(by='luongcb', ascending=True) # Sắp xếp dữ liệu tăng dần theo cột Giới tính và giảm dần theo cột Lương cơ bản. df = df.sort_values(by=['gioitinh','luongcb'], ascending=[True, False]) Bài 5 # Tạo bảng thống kê tính trung bình của trường Lương cơ bản theo gộp nhóm trường Giới tính, như hình sau: pd.pivot_table(df,values=['luongcb'],index=['gioitinh'],aggfunc='mea n')
  41. 41 # Tạo bảng thống kê lương cao nhất của trường Lương cơ bản theo gộp nhóm trường trình độ cử nhân và Giới tính, như hình sau: pd.pivot_table(df,values=['luongcb'],index=['td_cn','gioitinh'],aggf unc='max') Bài 6 # Tạo bảng thống kê lương thấp nhất của trường Lương cơ bản theo gộp nhóm trường trình độ cử nhân và Giới tính: pd.pivot_table(df,index=['td_cn'],aggfunc='min', columns=['gioitinh'],values=['luongcb']) # Tạo bảng thống kê số nhân viên nam, nữ có bằng Cử nhân: df1 = df.loc[df['td_cn'] == 1] pd.pivot_table(df1,values=['td_cn'],index=['gioitinh'],aggfunc='coun t')
  42. 42 BÀI 8: TRỰC QUAN HÓA DỮ LIỆU Bài 1:Cho bảng dữ liệu về giá vàng trong tháng như sau: Ngày Giá vàng bán ra Giá vàng mua vào 1/3 46 45 2/3 47 46 3/3 46 45.5 4/3 45 44.5 5/3 46 45 6/3 46 45.5 7/3 45 44.5 Hãy vẽ biểu đồ đường (line plot) để thể hiện sự biến thiên của giá vàng bán ra, với trục tung là giá vàng, trục hoành là ngày. Bài 2: Với dữ liệu giá vàng cho ở bài 1, hãy vẽ biểu đồ đường (line plot) để thể hiện sự biến thiên của giá vàng bán ra và mua vào trên cùng một biểu đồ với các yêu cầu sau:  Nhãn trục tung là: Giá vàng  Nhãn trục hoành là: Ngày  Tên biểu đồ là: Biểu đồ biến động giá vàng tháng 3/2020
  43. 43 Bài 3: Tương tự như bài 2, nhưng với yêu cầu bổ sung sau:  Đường thể hiện giá vàng bán ra: được vẽ với màu xanh, độ dày 2.  Đường thể hiện giá vàng mua vào: được vẽ với màu đỏ, độ dày 5. Bài 4: Cho dữ liệu giá vàng như bài Line Plot, thể hiện giá vàng bán ra ở dạng biểu đồ thanh (bar plot) Điều chỉnh trục tung hiển thị khung giá vàng từ 40 đến 50.
  44. 44 Bài 5: Vẽ biểu đồ biến động giá vàng bán ra, với các yêu cầu sau:  Thanh có màu xanh lá cây.  Nhãn trục tung là: Giá vàng bán ra  Nhãn trục hoành là: Ngày  Tên biểu đồ là: Biểu đồ biến động giá vàng tháng 3/2020  Gán nhãn chú thích cho ngày có giá vàng bán ra cao nhất (max = 47)  Hiển thị lưới (grid)
  45. 45 CODE MẪU Bài 1 import pandas as pd ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaVangBan = [46,47,46,45,46,46,45] duLieu = zip(ngay,giaVangBan) cot=['Ngày', 'Giá vàng bán ra'] df = pd.DataFrame(data = duLieu, columns = cot) %matplotlib inline df = df.set_index(df['Ngày']) df.plot() Bài 2 import matplotlib.pyplot as plt ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaVangBan = [46,47,46,45,46,46,45] giaVangMua = [45,46,45.5,44.5,45,45.5,44.5] # vẽ các điểm giá vàng bán ra plt.plot(ngay, giaVangBan, label = "Bán ra") # vẽ các điểm giá vàng mua vào plt.plot(ngay, giaVangMua, label = "Mua vào") # Đặt nhãn cho trục hoành, trục tung plt.xlabel('Ngày') plt.ylabel('Giá vàng') # Đặt tiêu đề cho biểu đồ plt.title('Biểu đồ biến động giá vàng tháng 3/2020') # Hiển thị chú thích plt.legend() # Hiển thị biểu đồ plt.show() Bài 3 Bổ sung tham số color và linewidth như sau: plt.plot(ngay, giaVangBan, color = "green", linewidth = 2, label = "Bán ra") plt.plot(ngay, giaVangMua, color = "red", linewidth = 5, label = "Mua vào")
  46. 46 Bài 4 import pandas as pd ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaVangBan = [46,47,46,45,46,46,45] duLieu = zip(ngay,giaVangBan) cot=['Ngày', 'Giá vàng bán ra'] df = pd.DataFrame(data = duLieu, columns = cot) %matplotlib inline df = df.set_index(df['Ngày']) axis1 = df.plot(kind = 'bar') axis1.set_ylim(40,50) Bài 5 import pandas as pd import matplotlib.pyplot as plt ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaVangBan = [46,47,46,45,46,46,45] plt.bar(ngay, giaVangBan, color='green') plt.xlabel("Ngày") plt.ylabel("Giá vàng bán ra") plt.title("Biểu đồ biến động giá vàng tháng 3/2020") plt.ylim(40, 50) plt.text(1, 47.5, 'max = 47', horizontalalignment='center') plt.grid(True) plt.show()
  47. 47 BÀI 9: TRỰC QUAN HÓA DỮ LIỆU Bài 1: Cho bảng dữ liệu về giá vàng trong tháng như sau: Ngày Giá vàng bán ra Giá vàng mua vào 1/3 46 45 2/3 47 46 3/3 46 45.5 4/3 45 44.5 5/3 46 45 6/3 46 45.5 7/3 45 44.5 Vẽ biểu đồ biến động giá vàng bán ra với các thanh hiển thị theo chiều ngang (như hình bên dưới): Bài 2: Sử dụng biểu đồ hộp (box plot), thể hiện điểm số theo độ tuổi trong bộ dữ liệu datasets/gradedata.csv.
  48. 48 Bài 3: Sử dụng dữ liệu datasets/gradedata.csv, vẽ biểu đồ histogram về mức điểm. Bài 4: Sử dụng dữ liệu datasets/gradedata.csv, vẽ biểu đồ histogram về mức điểm theo giới tính.
  49. 49 Bài 5: Sử dụng dữ liệu datasets/axisdata.csv, vẽ biểu đồ histogram về số lượng xe bán được (trường Car Sold)
  50. 50 CODE MẪU Bài 1 import pandas as pd import matplotlib.pyplot as plt ngay = ['1/3','2/3','3/3','4/3','5/3','6/3','7/3'] giaVangBan = [46,47,46,45,46,46,45] plt.barh(ngay, giaVangBan, color='green') plt.xlabel("Giá vàng bán ra") plt.ylabel("Ngày") plt.title("Biểu đồ biến động giá vàng tháng 3/2020") plt.xlim(40, 50) plt.text(47.5, 1, 'max = 47', verticalalignment='center') plt.grid(True) plt.show() Bài 2 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline Location = "datasets/gradedata.csv" df = pd.read_csv(Location) df.head() df.boxplot(by='age', column='grade') Bài 3 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline Location = "datasets/gradedata.csv" df = pd.read_csv(Location) df.head() df.hist(column="grade") Bài 4 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline Location = "datasets/gradedata.csv" df = pd.read_csv(Location) df.head() df.hist(column="grade", by="gender")
  51. 51 Bài 5 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline Location = "datasets/axisdata.csv" df = pd.read_csv(Location) df.head() df.hist(column="Cars Sold")
  52. 52
  53. 53 BÀI 10: TRỰC QUAN HÓA DỮ LIỆU Bài 1: Sử dụng dữ liệu datasets/axisdata.csv, vẽ biểu đồ histogram về số lượng xe bán được (trường Car Sold), phân nhóm theo giới tính (trường Gender) Bài 2: Cho bảng dữ liệu về lỗi vi phạm của sinh viên như sau: Tên sinh viên Vắng lý thuyết Vắng thực hành Không nộp bài Trung 3 2 0 Cảnh 5 1 3 Bảo 1 0 0 Quốc 0 0 2 Tùng 2 1 1 Hãy vẽ biểu đồ hình tròn (pie chart) thể hiện % lỗi vi phạm của từng sinh viên. Biết rằng, Tổng lỗi = Số buổi vắng lý thuyết + số buổi vắng thực hành + số lần không nộp bài. Thể hiện nổi bật cho sinh viên có lỗi nhiều nhất và xoay biểu đồ sao cho sinh viên có lỗi nhiều nhất nằm ở bên phải.
  54. 54 Bài 3: Sử dụng dữ liệu datasets/gradedata.csv, tạo biểu đồ phân tán (scatter plot) về thời gian (hours) và điểm (grade) của các sinh viên. Dựa trên biểu đồ, nhận xét về mối quan hệ giữa điểm và thời gian học. Bài 4: Sử dụng dữ liệu datasets/gradedata.csv, tạo biểu đồ phân tán (scatter plot) về tuổi (age) và điểm (grade) của các sinh viên. Dựa trên biểu đồ, nhận xét về mối quan hệ giữa điểm và tuổi.
  55. 55 CODE MẪU Bài 1 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline Location = "datasets/axisdata.csv" df = pd.read_csv(Location) df.head() df.hist(column="Cars Sold", by="Gender") Bài 2 import pandas as pd import matplotlib.pyplot as plt %matplotlib inline ten = ['Trung','Cảnh','Bảo','Quốc','Tùng'] vangLT = [3,5,1,0,2] vangTH = [2,1,0,0,1] khongNB = [0,3,0,2,1] duLieu = zip(ten,vangLT,vangTH,khongNB) cot=['Tên sinh viên', 'Vắng lý thuyết', 'Vắng thực hành','Không nộp bài'] df = pd.DataFrame(data = duLieu, columns=cot) df['Tổng lỗi'] = df['Vắng lý thuyết'] + df['Vắng thực hành'] + df['Không nộp bài'] df plt.pie(df['Tổng lỗi'], labels=df['Tên sinh viên'], explode=(0,0.15,0,0,0), startangle=200, autopct='%1.1f%%',) plt.axis('equal') plt.show() Bài 3 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline Location = "datasets/gradedata.csv" df = pd.read_csv(Location) df.head() plt.scatter(df['hours'], df['grade'])
  56. 56 Bài 4
Anúncio