Lời mở đầu Trước khi đi vào mục tiêu nghiên cứu của đồ án “phân tích dữ liệu cô phiếu bằng Python”, phải hiểu Ngôn ngữ lập trình Python và ứng dụng của Python trong phân tích dữ liệu.. P
Trang 1
NGAN HANG NHA NUGC VIETNAM BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP HÒ CHÍ MINH
Nguyễn Van Thi - 050609211357 Thới Đỗ Ngọc Trâm - 050609212279
Tran Thi Yén Thanh - 050609211307
Trang 2LOH 1G GAUL eee eeeeceeeseeeeseesecsesecsesucseesescneencaeeneeseaeenecucsesucsesaeceseeaeensaesaeenceceessessesesseeateceateneensaneaees
1 Muc ti6U MQhi6n CH ooo
2 DOi tog NQHISN COU oo eee cee cceecececesesceseeveveevecscessecusevavsevavsusesassssevevsevavsueetasessevarsevavnereases
ky (0/819) 101 .a1 - ÔỎÔỎ
B CHƯƠNG 2: MÔ TẢ MÔ HÌNH TRỰC QUAN HOÁ DỮ LIỆU . -7-252-55+2-c-e 1
1.1 PANGAS 1.1.1 Dir in iydddiddidftfdddtẩ^ẢẢ 1
1.1.3 Đọc file csv vào dataframe
1.1.4 Thao tác cấu trúc dữ liệu cơ bản
2.1.2 Lưu dữ liệu từ 5 ngân hàng TCB, ACB, VCB, CTG, MBB 6
2.1.3 Tính ti suất lợi nhuận
Trang 32.2.1 PAirPlOte oo — A1ẢAẢ1 10 V22) -)y|v)1)(s0( 0v 5): ⁄EE:ii dd 10
Lê Thị Mai Thảo
Thu thập dữ liệu từ các ngân hang Viết báo cáo, tổng hợp work Kết quả thực hiện Làm PowerPoint
Nguyễn Văn Thi
o_ Thu thập dữ liệu từ các ngân hàng Kết quả thực hiện
Mục tiêu nghiên cứu
Cơ sở lý thuyết về python cho dé an Clean data
Kết luận
Trang 4Lời mở đầu Trước khi đi vào mục tiêu nghiên cứu của đồ án “phân tích dữ liệu cô phiếu bằng Python”, phải hiểu Ngôn ngữ lập trình Python và ứng dụng của Python trong phân tích dữ liệu
Ngôn ngữ lớp trình Python là một ngôn ngữ lập trình thông dịch và đa nên tảng, với cú pháp đơn giản và dễ dọc Nó được thành lập năm 1991 bởi Guido van Rossum Python là ngôn ngữ lập trình ngôn
ngữ có tính linh hoạt cao, nó có thê được sử dụng đề phát triển các loại phần mềm như ứng dụng web, ứng dụng máy tính, trò chơi, phân mém kỹ thuật số.Ngoài ra, Python con dutoc biét đến như là một trong những ngôn ngữ phô biến nhất hiện nay và có nhiều thư viện và công cụ hỗ trợ các lĩnh vực như khoa học
đữ liệu, máy học, trí tuệ nhân tạo,
Đây là một trong những công cụ phô biến và hiệu quả nhất cho việc phân tích cô phiếu dữ liệu Có nhiều thư viện và công cụ hỗ trợ trong Python đề xử lý cô phiếu đữ liệu, bao gồm các thư viện Pandas,
NumPy, Matplotlib, Seaborn, Scikit-learn
Mớót số ứng dựng của Python trong cổ phiếu phân tích dữ liệu
Thu thập dữ liệu: Sử dụng để trích xuất dữ liệu tr các trang web cô phiếu hoặc từ các nguồn dữ liệu
khác, và lưu trữ nó trong các cơ sở đữ liệu nhu MySQL, SQLite hoac MongoDB
Xử lý và phân tích dữ liệu: Sử dụng để xử lý và phân tích dữ liệu, từ việc thực hiện các tính toán đơn
giản đề tính toán giá trị trung bình động cho đến việc phát tín hiệu giao dịch có sẵn can be used to đưa ra các quyết định đầu tư
Đồ họa dữ liệu: Cung cấp các công cụ đồ họa mạnh mẽ có thê được sử dụng dé hiên thị cô phiếu dữ
liệu dưới dạng biểu đồ, bản đồ nhiệt
Máy học và trí tuệ nhân tạo: Python cung cấp cho các thư viện và công cụ để xây dựng mô hình máy học và trí tuệ nhân tạo để phân tích dữ liệu cô phiếu, giúp đưa ra dự đoán và quyết định đầu tư thông
minh
Thông qua đồ án này nhóm chúng em sẽ phân tích, tìm hiểu mối tương quan giữa các cô phiếu để
đưa người đọc thay được tâm qua trọng và lợi Ích của “Phân tích dữ liệu cé phiéu bang Python” Python
hiện đang được sử dụng rộng rãi trong phân tích dữ liệu cô phiếu và là một lựa chọn tốt cho bát kỷ ai
của Ngôn ngữ lập trình Python, nhóm chúng em đã dựa trên cơ sở lí thuyết đó áp dụng thực hiện đồ án:
“Phân tích đữ liệu cô phiếu trực quan hóa dữ liệu cổ phiếu bằng Python” Với mục đích sẽ giúp chúng ta
sé tim hiểu được mối tương quan giữa các cô phiếu Qua đồ án sẽ giúp các bạn có thêm kiến thức về cô
phiếu cũng như có nên đưa ra quyết định đâu tư hay không đề tránh giảm rủi ro Và đó là mục tiêu mà
nhóm em muốn hướng tới
Trang 5A CHƯƠNG I: GIỚI THIỆU DE TÀI
1 - Mục tiêu nghiên cứu
Vì số liệu của các ngân hàng cô phiếu nhiều, rộng, chi nhìn qua các con số như vậy khiến các nhà đầu tư chí thấy được sự biến động nhất thời thậm chí còn cảm thấy rối cho các nhà đầu tư mới Dùng trực quan hoá dữ liệu giúp nhà dau tư thay rõ được thông tin biến động chuyên sâu và hồ trợ trong việc ra quyết định Từ đó trực quan hóa dữ liệu các cô phiều ngân hàng có thê giúp các nhà dau tu va nha quản lý tài sản hiểu rõ hơn về biến động của các cỗ phiếu ngân hàng, đồng thời đưa ra những phân tích và quyết định đâu tư chính xác hơn Cụ thể, trực quan hóa dữ liệu có thê giúp:
Xem tông quan về khối lượng, giá cả, biến động của các cô phiếu cùng lúc
>>Giúp nhà đầu tư và nhà quản lý tài sản quản lý các cô phiếu một cách dễ dàng hơn
Theo dõi sự biến động của các chỉ số tài chính ngân hàng và so sánh chúng với thị trường chung
>>Giúp nhà đầu tư và nhà quản lý tài sản đánh giá hiệu suất của các ngân hàng so với thị trường
Phát hiện xu hướng mới và nhìn thấy các cơ hội đầu tư mới Việc trực quan hóa dữ liệu giúp xác
định các mô hình và xu hướng trong các số liệu tài chính
>>Giúp nhà dau tu và nhà quan ly tai san tìm kiếm những cơ hội đầu tư mới
Tăng cường tinh minh bach trong quá trình đầu tư và giảm rủi ro trong việc đưa ra quyết định đầu tư Tóm lại, trực quan hóa dữ liệu có thê giúp nhà đầu tư và nhà quản lý tài sản hiểu rõ hơn về biến động của các cô phiếu ngân hàng và đưa ra những phân tích và quyết định đầu tư chính xác hơn
2 _ Đối tượng nghiên cứu
Đối tượng bao gồm các ngân hàng Ngân hàng TMCP Á Châu (ACB), Ngân hàng TMCP Kỹ thương
Việt Nam (TCB), Ngân hàng TMCP Ngoại thương Việt Nam (VCB), Ngân hàng TMCP Công Thương
Việt Nam (CTG), Ngân hàng TMCP Quân đội (MBB)
3 Phạm vi nghiên cứu
Về không gian: Nghiên cứu hoạt động sàn giao dịch cô phiếu của các ngân hàng
Vẻ thời gian: Dự liệu của các ngân hàng từ năm 2020 đến năm 2023
B _ CHƯƠNG 2: MÔ TẢ MÔ HÌNH TRỰC QUAN HOÁ DỮ LIỆU
A _ Cơ sở lý thuyết
1.1 Pandas
1.1.1 Định nghĩa
Pandas (viét tat Panel Data) 1a thư viện mã nguồn mở phục vụ cho việc phân tích và xử lý dữ liệu
trong Python, được phát triển bởi MeKinney năm 2008 Thư viện này được thiết kế đê làm việc dễ dàng
và trực quan với dữ liệu có cầu trúc (dạng bảng, đa chiéu, ) và dữ liệu chuỗi thời gian
Trang 61.1.2 Cai dat va import
1.1.3 Doc file csv vao dataframe
Sử dụng hàm read_cvs va được tra vé 1 dataframe Mac dinh, ham này sẽ phân biệt các trường của file cvs theo dấu phây cách đọc hết sức đơn giản như sau:
df = pd.read_ csv(/content/gdrive/MyDrive/bric.csv',index_ col=0)
country population area capital
BR Brazil 299 8515767 Brasilia
SA South Africa 55 1221037 Pretoria
Tuy nhiên, bạn cũng sẽ phải lưu ý một vài tham số của hàm read_evs như:
encoding: chi định encoding của file đọc vào Mặc định là utf-8
sep: thay đôi dấu ngăn cách giữa các cột Mặc định là dấu phây (°,°)
header: chi định file đọc vào có header(tiêu đề của các cột) hay không Mặc định là infer
index_col: chỉ định chí số cột nào là cột chỉ só(só thứ tự) Mặc định là None
nrows: chỉ định số bản ghi sẽ đọc vào Mặc định là None — đọc toàn bộ
a) Series
Series([data, index, dtype, name, copy, ])
Là mảng một chiêu giống như mảng Numpy, hay như một cột của một bảng, nhưng nó bao gồm thêm một bảng đánh label Series có thê được khởi tạo thông qua NumPy, kiéu Dict hoặc các dữ liệu vô hướng bình thường Series có nhiều thuộc tính như index, array, values, dfype, v.v
Trang 7DataFrame((data, index, columns, dtype, copy])
Dataframe la cau tric dir ligu gan nhãn hai chiêu với các cột và hàng như bảng tinh (spreadsheet)
hoac bang (table) Giống như Series, DataFrame có thê chứa bắt kỳ loại dữ liệu nào Một điều quan trọng cần làm nỗi bật là tất cả các cột trong khung dữ liệu là series Pandas Vì vậy, một DataFrame là sự kết hợp của nhiều Series đóng vai trò như các cột! DataFrame được sử dụng rộng rãi và là một trong những
câu trúc dữ liệu quan trọng nhất
Ví dụ:
import pandas as pd
"one": pd.Series({1,23,45], index = [1,2,3)), 1 1.6 1996
"two": pd.Series((1000,2400,1132,3434], index = [1,2,3,4]} 2 23.0 2409
df = pd.DataF rame(data) 3 45.0 1132
c) Các thao tác chọn, thêm, xóa cột
import pandas as pd
s = {'mot': pd.Series((1., 2., 3., 5.], index=['a’, 'b’, 'c’, ‘e']),
‘hai': pd.Series([1., 2., 3., 4.], index=[a', b', 'c, 'd]), :
‘ba’: pd.Series([9., -1.3, 3.5, 41.1], index=['a’, 'b', 'c’, ‘d'])} c 39
Thư viện Numpy chứa các cấu trúc dữ liệu ma trận và máng đa chiêu Numpy có thê được sử dụng
đệ thực hiện nhiều phép toán khác nhau trên mảng Nó bỏ sung các cấu trúc dữ liệu mạnh mẽ vào Python
dé dam bao tính hiệu quả với các máng và ma trận
Trang 8121 Cài đặt
Cách 1: Cài đặt khi tạo môi trường ảo théng qua cau lénh conda create -n hanh python=3.7 numpy Cách 2: Cài đặt sau khi tạo xong môi trường ảo thông qua †1 trong 2 câu lệnh sau:
lconda install numpy
lpip install numpy
1.2.2 Import
import numpy as np
1.2.3 Khởi tạo mảng
a) Khởi tạo mảng 1 chiều
#kKhởi tạo máng một chiều với kiểu dữ liệu các phân tử là Integer
arr = np.array([1,3,4,5,6], dtype = int)
#Khởi tạo máng một chiều với kiểu dữ liệu mặc định
arr = np.array([1,3,4,5,6])
print(arr)
Output: [1 3 4 5 6]
b) Khéi tao mang 2 chiéu
arr1 = np.array([(4,5,6), (1,2,3)], dtype = int) Output: [[4 5 6]
d) Khởi tao với các hàm có san
* np.arange(1,7,2): Tạo máng với các phân tử từ 1 - 6 với bước nhảy là 2
e np.eye(4, dtype=int): Tao ma tran don vi véi kich thudc la 4x4
° np.random.random((2,3)): Tạo ma trận các phân tử ngẫu nhiên với kích thước 2x3
Trang 91.2.3.1 Các thao tac có trong mảng
» _dfype: Kiêu dữ liệu của phân tử trong mảng
¢ shape: Kich thước của mang
* size: Sé phan ti trong mang
* ndim: Sé chiéu cia mang
Ví dụ:
print("Kiêu dữ liệu của phân tử trong máng:", arr2.dtype)
print("Kich thước của màng:”, arr2.shape)
print("Số phân tử trong mảng:", arr2.size)
print("Số chiều của mang:", arr2.ndim)
1.2.3.2.Truy cập phần tứ có trong mang
Các phân tử trong mang được đánh số từ 0 trở đi
arr[i]: Truy cập tới phân tử thứ ¡ của mảng 1 chiêu
arr1[i,j]: Truy cập tới phân tử hàng ¡, cột j của máng 2 chiều
arr2[n,i,j]' Truy cập tới phân tử chiêu n, hàng ¡, cột j của máng 3 chiêu
arr[a:b]: Truy cập tới các phân tử từ a đến b-1 trong máng 1 chiều
arr1[:,:i Truy cập tới phân tử từ cột 0 đến cột i-1, của tất cả các hàng trong mảng 2 chiêu
nén minh dé kiéu int cho dé nhin, cac phan ti phan tach nhau boi dau ","
print("File dữ liệu điểm lớp 2A:\n", diem_2a)
Trang 101.2.3.4 Các hàm thống kê
» _ arr.max() hoặc np.max(arr): Lấy giá trị lớn nhất của mảng arr
* arr.min() hoặc np.min(arr): Lấy giá trị nhỏ nhất của mang arr
* arr.sum() hoac np.sum(arr): Tổng tắt cá các phân tử trong mảng arr
* arr.mean() hoac np.mean(arr): Trung bình cộng của tất cá các phân tử trong mảng arr
* np.median(arr): Trả về giá trị trung vị của mảng arr
1.3 Seaborn
Seaborn là thư viện mở rộng được viết trên nên Matphotlib, từ đó kế thừa các chức năng biểu diễn
dữ liệu từ Matplotlib Vì vậy, những gì Seaborn làm được thì Matplotlib cũng làm được tuy nhiên không
có chiêu ngược lại (Seaborn hiệu đơn giản là I đứa cón được Mafplotlib tạo ra)
1.3.1 Cài đặt
a) Cài đặt khi tạo môi trường ảo:
conda create -n hanh python = 3.7 matplotlib seaborn
b) Cài đặt sau khi tạo xong môi trường ao:
conda install matplotlib hoặc pip install matplotlib
conda install seaborn hoac pip install seaborn
Trang 11Bins duoc tinh bang cach lay max va min rồi của dữ liệu rồi chia đều thành số bins mình muốn Số
bins càng lớn, chia khoảng càng nhỏ thì chính xác
các chiêu dữ liệu theo từng cặp với nhau
sns.pairplot(iris, hue='species', height=1.5)
Trang 121 !pip install vnstock
2 from vnstock import
Các thư viện khác khi nào sử dung chung ta sé import thém
2.1.1 Load dit liéu tir VNStock
Liệt kê danh sách các mã cô phiếu trên thị trường:
1 listing_companies()
ticker company_name company_short_name
1 XDC Upcomlndex Công ty TNHH MTV Xây dựng Công trình Tân Cảng Xây dựng Công trình Tân Cảng
2 HSV Upcomindex Công ty Cổ phản Tập doan HSV Vigt Nam Gang Thép Hà Nội
3 CST Upcomindex Công ty Cổ phần Than Cao Sơn - TKV Than Cao Sơn - TKV
4 BVL Upcomlndex Công ty Cổ phần BV Land BV Land
1620 XMP Upeomlndex Công ty Gỗ phản Thủy điện Xuân Minh Thủy điện Xuân Minh
1621 YBC Upcomlndex Công ty Cổ phần Xi măng vả Khoảng sản Yên Bá
1622 YBM VNINDEX Công ty Cổ
Trang 13| 1 df_teb.tail() #l4y thông tin 5 dòng cuối của TCB
Open High Low Close Volume TradingDate
ñ_ Open: là giá mở cửa
ñ_ High: là giá cao nhất trong phiên giao dịch
ñ_ Low: giá thấp nhất trong phiên
O Close: giá đóng cửa (hay giá kết phiên)
ñ_ Volume: khối lượng giao dịch (tông số cô phiếu giao dịch trong phiên)
¡ TradingDate: ngày giao dịch
2.1.2 Lưu dữ liệu từ 5 ngân hàng TCB, ACB, VCB, CTG, MBB
Thực hiện load dữ liệu cổ phiếu từ 5 ngân hàng, thời gian lấy dữ liệu từ 01/01/2020 đến ngày
19/03/2023 Ta thực hiện như sau:
1 #Chọn thời gian lấy đữ liệu
2 start_date_selected="2020-01-01"
3 end_date_selected='2023-03-19'
4 #Lây dữ liệu từ 5 ngân hàng và lưu vào dataframe
5 TCB = stock_historical_data(symbol='TCB', start_date=start_date_selected, end_date=e nd_date_selected)
6 ACB = stock_historical_data(symbol='ACB’, start_date=start_date_selected, end_date=e nd_date_selected)
7 VCB = stock_historical_data(symbol='VCB', start_date=start_date_selected, end_date=e nd_date_selected)
8 CTG= stock_historical_data(symbol='CTG’, start_date=start_date_selected, end_date=e nd_date_selected)
9 MBB = stock_historical_data(symbol='MBB’, start_date=start_date_selected, end_date= end_date_selected)