SlideShare a Scribd company logo
1 of 56
1
BÀI THỰC HÀNH TIN HỌC CƠ SỞ
DÀNH CHO KHỐI NGÀNH KINH TẾ
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
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
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
- 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
# 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
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
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
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
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
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
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
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
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
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
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
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
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
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
- 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
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
#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
# 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
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
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
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
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
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
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
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
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
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
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
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
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
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
Bài 4

More Related Content

What's hot

Xác suất thống kê bằng excel
Xác suất thống kê bằng excelXác suất thống kê bằng excel
Xác suất thống kê bằng excelHọc Huỳnh Bá
 
Lý thuyết ước lượng
Lý thuyết ước lượngLý thuyết ước lượng
Lý thuyết ước lượngLam Nguyen
 
Bài giảng môn xác suất thống kê
Bài giảng môn xác suất thống kêBài giảng môn xác suất thống kê
Bài giảng môn xác suất thống kêHọc Huỳnh Bá
 
Xac suat. skkn
Xac suat. skknXac suat. skkn
Xac suat. skknbiballi
 
CỰC TRỊ HÀM NHIỀU BIẾN.pdf
CỰC TRỊ HÀM NHIỀU BIẾN.pdfCỰC TRỊ HÀM NHIỀU BIẾN.pdf
CỰC TRỊ HÀM NHIỀU BIẾN.pdfvanhaimta
 
Thuế acc401_(luyện tập trắc nghiệm)
Thuế acc401_(luyện tập trắc nghiệm)Thuế acc401_(luyện tập trắc nghiệm)
Thuế acc401_(luyện tập trắc nghiệm)home
 
Bài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân TạoBài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân TạoDự Nguyễn Quang
 
các phân phối xác xuất thường gặp
các phân phối xác xuất thường gặpcác phân phối xác xuất thường gặp
các phân phối xác xuất thường gặpKhoa Nguyễn
 
Thu thập và trình bày dữ liệu thống kê
Thu thập và trình bày dữ liệu thống kêThu thập và trình bày dữ liệu thống kê
Thu thập và trình bày dữ liệu thống kêHọc Huỳnh Bá
 
MAT102 LTTT TOÁN CC2
MAT102 LTTT TOÁN CC2MAT102 LTTT TOÁN CC2
MAT102 LTTT TOÁN CC2Yen Dang
 
Chuyên đề xác suất thống kê
Chuyên đề  xác suất   thống kêChuyên đề  xác suất   thống kê
Chuyên đề xác suất thống kêThế Giới Tinh Hoa
 
Đề thi trắc nghiệm Xác suất thống kê có lời giải
Đề thi trắc nghiệm Xác suất thống kê có lời giảiĐề thi trắc nghiệm Xác suất thống kê có lời giải
Đề thi trắc nghiệm Xác suất thống kê có lời giải希夢 坂井
 
Chuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụngChuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụngThế Giới Tinh Hoa
 
Tom tat cong thuc XSTK
Tom tat cong thuc XSTKTom tat cong thuc XSTK
Tom tat cong thuc XSTKGIALANG
 
Bài tập cơ bản-nâng cao mảng
Bài tập cơ bản-nâng cao mảngBài tập cơ bản-nâng cao mảng
Bài tập cơ bản-nâng cao mảngTường Tường
 

What's hot (20)

Xác suất thống kê bằng excel
Xác suất thống kê bằng excelXác suất thống kê bằng excel
Xác suất thống kê bằng excel
 
Lý thuyết ước lượng
Lý thuyết ước lượngLý thuyết ước lượng
Lý thuyết ước lượng
 
Bài giảng môn xác suất thống kê
Bài giảng môn xác suất thống kêBài giảng môn xác suất thống kê
Bài giảng môn xác suất thống kê
 
Xac suat. skkn
Xac suat. skknXac suat. skkn
Xac suat. skkn
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
 
đáP án ktvm
đáP án ktvmđáP án ktvm
đáP án ktvm
 
CỰC TRỊ HÀM NHIỀU BIẾN.pdf
CỰC TRỊ HÀM NHIỀU BIẾN.pdfCỰC TRỊ HÀM NHIỀU BIẾN.pdf
CỰC TRỊ HÀM NHIỀU BIẾN.pdf
 
Thuế acc401_(luyện tập trắc nghiệm)
Thuế acc401_(luyện tập trắc nghiệm)Thuế acc401_(luyện tập trắc nghiệm)
Thuế acc401_(luyện tập trắc nghiệm)
 
Bài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân TạoBài giảng Trí Tuệ Nhân Tạo
Bài giảng Trí Tuệ Nhân Tạo
 
Chính sách ngoại thương Việt Nam trong thực hiện cam kết với WTO
Chính sách ngoại thương Việt Nam trong thực hiện cam kết với WTOChính sách ngoại thương Việt Nam trong thực hiện cam kết với WTO
Chính sách ngoại thương Việt Nam trong thực hiện cam kết với WTO
 
các phân phối xác xuất thường gặp
các phân phối xác xuất thường gặpcác phân phối xác xuất thường gặp
các phân phối xác xuất thường gặp
 
Thu thập và trình bày dữ liệu thống kê
Thu thập và trình bày dữ liệu thống kêThu thập và trình bày dữ liệu thống kê
Thu thập và trình bày dữ liệu thống kê
 
12 bai tap_nguyen_ly_thong_ke
12 bai tap_nguyen_ly_thong_ke12 bai tap_nguyen_ly_thong_ke
12 bai tap_nguyen_ly_thong_ke
 
MAT102 LTTT TOÁN CC2
MAT102 LTTT TOÁN CC2MAT102 LTTT TOÁN CC2
MAT102 LTTT TOÁN CC2
 
Chuyên đề xác suất thống kê
Chuyên đề  xác suất   thống kêChuyên đề  xác suất   thống kê
Chuyên đề xác suất thống kê
 
Ban_pha_gia
Ban_pha_giaBan_pha_gia
Ban_pha_gia
 
Đề thi trắc nghiệm Xác suất thống kê có lời giải
Đề thi trắc nghiệm Xác suất thống kê có lời giảiĐề thi trắc nghiệm Xác suất thống kê có lời giải
Đề thi trắc nghiệm Xác suất thống kê có lời giải
 
Chuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụngChuyên đề nhị thức newton và ứng dụng
Chuyên đề nhị thức newton và ứng dụng
 
Tom tat cong thuc XSTK
Tom tat cong thuc XSTKTom tat cong thuc XSTK
Tom tat cong thuc XSTK
 
Bài tập cơ bản-nâng cao mảng
Bài tập cơ bản-nâng cao mảngBài tập cơ bản-nâng cao mảng
Bài tập cơ bản-nâng cao mảng
 

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

Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoHuy Nguyễn
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoBác Luân
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danVăn Võ Ntn
 
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIITTu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIITNIIT - ICT Hà Nội
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxssuser49db3c1
 
phuong trinh vo ti File10779
phuong trinh vo ti  File10779phuong trinh vo ti  File10779
phuong trinh vo ti File10779Phuong Nguyen
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.commai_non
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascalLoan Nguyen
 
Phan 2 chuong 1-2
Phan 2   chuong 1-2Phan 2   chuong 1-2
Phan 2 chuong 1-2ngoclanh12
 
Lập trình c căn bản
Lập trình c căn bảnLập trình c căn bản
Lập trình c căn bảntienhien110293
 
Giao trinh pascal toan tap
Giao trinh pascal toan tapGiao trinh pascal toan tap
Giao trinh pascal toan tapVõ Tâm Long
 

Similar to Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx (20)

Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
temp.pdf
temp.pdftemp.pdf
temp.pdf
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
 
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIITTu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
 
Chuong 01
Chuong 01Chuong 01
Chuong 01
 
Chuong 01 mo dau
Chuong 01 mo dauChuong 01 mo dau
Chuong 01 mo dau
 
Hdsd eclipse
Hdsd eclipseHdsd eclipse
Hdsd eclipse
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
 
Bai 8
Bai 8Bai 8
Bai 8
 
phuong trinh vo ti File10779
phuong trinh vo ti  File10779phuong trinh vo ti  File10779
phuong trinh vo ti File10779
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.comBài giảng Lập trình cơ bản - truongkinhtethucpham.com
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascal
 
Phan 2 chuong 1-2
Phan 2   chuong 1-2Phan 2   chuong 1-2
Phan 2 chuong 1-2
 
thu ha
thu hathu ha
thu ha
 
Lập trình c căn bản
Lập trình c căn bảnLập trình c căn bản
Lập trình c căn bản
 
Giao trinh pascal toan tap
Giao trinh pascal toan tapGiao trinh pascal toan tap
Giao trinh pascal toan tap
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 
Hsbd taint
Hsbd taintHsbd taint
Hsbd taint
 

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'])