1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo lưu trữ và xử lý dữ liệu lớn đề tài xây dựng data pipeline xử lý dữ liệu từ thị trường chứng khoán

20 4 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây dựng data pipeline xử lý dữ liệu từ thị trường chứng khoán
Tác giả Trần Đức Hải, Nguyễn Mạnh Duy, Nguyễn Phương Nam, Nguyễn Trọng Hùng
Người hướng dẫn TS. Trần Việt Trung
Trường học Trường Đại học Bách Khoa Hà Nội, Viện Công nghệ Thông tin và Truyền thông
Chuyên ngành Công nghệ thông tin
Thể loại Báo cáo
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 20
Dung lượng 6,67 MB

Nội dung

Rấtnhiều kỷ lục đã được ghi nhận trong năm qua, trong đó nhiều mã cổ phiếu có những lúc mangđến niềm vui lớn, nhưng cũng có lúc là nỗi buồn xót xa đối với nhiều nhà đầu tư trên sàn.Không

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

**********

BÁO CÁO LƯU TRỮ VÀ XỬ LÝ DỮ LIỆU LỚN

ĐỀ TÀI: Xây dựng data pipeline xử lý dữ liệu từ thị

trường chứng khoán

Nhóm 28

Giảng viên hướng dẫn: TS Trần Việt Trung

Trang 2

MỤC LỤC

2.2 2 Luồng xử lý dữ liệu chính của hệ thống 4

c Xử lý dữ liệu tại pyspark_application 10

d Cung cấp API cung cấp thông tin các bài báo thu thập được 13

Đóng góp thành viên

STT H và tênọ MSSV Công vi c th c hi nệ ự ệ

1 Trầần Đ c H iứ ả 20194270 Nghiên c u và cài ứ

đ t môi trặ ường docker, x lý d li uử ữ ệ

2 Nguyêễn Phương

Nam

20194336 Crawl d li u các ữ ệ

bài báo, têần x lý ử

d li u báoữ ệ

3 Nguyêễn M nh Duyạ 20194262 Crawl d li u t api ữ ệ ừ

ssi, têần x lý d ử ữ

li u ssiệ

4 Nguyêễn Tr ng Hùngọ 20194290 Xầy d ng server ự

cung cầấp api các bài báo

Trang 3

Chương 1: Giới thiệu đề tài

Trong năm 2022, thị trường chứng khoán Việt Nam (TTCK) cũng ghi nhận những kỷ lục về

số lượng nhà đầu tư mới tham gia, có tháng lên tới gần nửa triệu tài khoản được mở mới, khối ngoại mua ròng kỷ lục hay thanh khoản một số cổ phiếu lên tới cả trăm triệu đơn vị/phiên Thị trường cũng ghi nhận những biến động khó lường và đầy cảm xúc của nhiều cổ phiếu Trong tháng 11 và 12, TTCK cũng ghi nhận những phiên hồi phục mạnh nhất thế giới Rất nhiều kỷ lục đã được ghi nhận trong năm qua, trong đó nhiều mã cổ phiếu có những lúc mang đến niềm vui lớn, nhưng cũng có lúc là nỗi buồn xót xa đối với nhiều nhà đầu tư trên sàn Không ít mã cổ phiếu lên đỉnh cao mọi thời đại, tăng gấp 5-7, thậm chí vài chục lần, trong một khoảng thời gian ngắn nhưng rồi rớt rất nhanh, khiến các nhà đầu tư hoang mang lo sợ

Chính vì vậy một công cụ trợ giúp nhà đầu tư thấy được toàn cảnh thị trường một cách chi tiết và toàn diện trở thành một nhu cầu quan trọng đối với mỗi nhà đầu tư

Nhìn thấy nhu cầu cao như vậy nhóm chúng em quyết định xây dựng áp dụng các công nghệ lưu trữ và xử lý dữ liệu lớn cho dữ liệu chứng khoán tại thị trường Việt Nam nhằm cung cấp cho nhà đầu tư các thông tin hữu ích khi tham gia thị trường, giúp nhà đầu tư có thể đưa ra các quyết định ít rủi ro nhất

Các công nghệ mà nhóm sử dụng trong hệ thống phân tích thông tin tuyển dụng này bao gồm Hadoop File System, Spark, Kafka, Mongodb, ExpressJS, ElasticSearch và Kibana

Trang 4

Chương 2: Tổng quan hệ thống

2.1 Data Pipeline

Hệ thống đảm bảo 2 luồng dữ liệu nguồn được xử lý riêng biệt

- Đầu tiên là dữ liệu chứng khoán thô được lấy từ public api của ssi được ghi vào hadoop và gửi đường dẫn file lên kafka sau đó spark lắng nghe kafka và đọc dữ liệu thô ra xử lý rồi lưu 1 bản trở lại hadoop và lưu 1 bản lên elasticsearch để phục vụ hiển thị dữ liệu

- Thứ 2 là luồng xử lý dữ liệu các bài báo ban đầu dữ liệu được lấy từ link rss của các nguồn báo khác nhau và gửi lên kafka, spark sẽ lắng nghe kafka và xử lý dữ liệu được gửi đến Sau đó spark lưu 1 bản vào hadoop, 1 bản vào mongodb và 1 bản vào kibana

2.2 Các thành phần của hệ thống

a Article crawler

Một chương trình chạy trên môi trường NodeJS sử dụng thư viện Axios và CherioJS

để tìm nạp các bài báo từ link RSS của VNExpress và trích xuất nội dung bài báo bằng cách lấy nội dung của các thẻ p từ mã HTML rồi gửi danh sách các bài báo lên Kafka topic ‘article’

b Stock_iboard_crawler

Một chương trình chạy trên python:3.7 định kỳ (1 phút) sẽ gọi api của SSI iboard để lấy thông tin hiện tại của các mã chứng khoán Sau đó ghi dữ liệu này lên hadoop và gửi đường dẫn hadoop cùng đường dẫn file config, dấu thời gian lên Kafka topic

‘crawl_data’

c Kafka, Zookeeper.

Hàng đợi công việc Kafka có 2 topic ‘crawl_data’ cho dữ liệu từ ssi và ‘article’ cho dữ liệu các bài báo

d Hadoop

Hệ thống lưu trữ file phân tán hadoop được sử dụng để lưu trữ dữ liệu thô từ ssi

‘/project20221/raw’ các file config cho dữ liệu ssi ‘/project20221/config’, dữ liệu ssi

đã qua xử lý ‘/project20221/clean’ cùng với thông tin các bài báo

‘/project20221/articles.parquet’ ở định dạng các file parquet

e Pyspark_application

Ứng dụng spark được viết trên môi trường python:3.7 lắng nghe và nhận công việc từ

Trang 5

Kafka rồi thực hiện các thao tác xử lý, lưu trữ dữ liệu

f Mongodb

Cơ sở dữ liệu có 1 bảng articles để lưu trữ thông tin các bài báo sử dụng Mongodb Atlas

g NodeJS server: Article_server

Server chạy trên môi trường NodeJS kết nối với Mongodb và cung cấp 1 API trả về danh sách các bài báo được lưu trữ

h Elasticsearch Kibana

Công cụ lưu trữ và trực quan hóa dữ liệu

Trang 6

2.2 2 Luồng xử lý dữ liệu chính của hệ thống

Luồng xử lý dữ liệu ssi

Trang 7

Luồng xử lý dữ liệu các bài báo kinh tế

Trang 8

Chương 3 Triển khai

3.1 Triển khai

3.1.1 Cài đặt

Hệ thống được cài đặt bằng docker, docker compose Thông số cụ thể của các container có trong bảng dưới:

Cluster Container Port Image

Hadoop namenode 9870

bde2020/hadoop- namenode:2.0.0-hadoop3.2.1-java8

datanode 9864

bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8 Spark spark-master 8080

bde2020/spark-master:3.3.0-hadoop3.3 spark-worker 8081

bde2020/spark-worker:3.3.0-hadoop3.3 Elasticsearch elasticsearch 9200 docker.elastic.co/elasticsearch/ela

sticsearch:7.15.1 kibana 5601 docker.elastic.co/kibana/kibana:7

15.1 Kafka zookeeper 2181 wurstmeister/zookeeper

kafka 9092 wurstmeister/kafka

App pyspark_application myracoon/racoon_pyspark:mong

o stock_iboard_crawler myracoon/racoon_pyspark:mong

o articles_crawler myracoon/racoon_node:latest articles_server 3000 myracoon/racoon_node:latest

3.1.2 Thực hiện

a Crawl dữ liệu từ vnexpress

Nhóm lặp 10 phút 1 lần sử dụng RSS được cung cấp bởi vnexpress:

‘https://vnexpress.net/rss/kinh-doanh.rss’ để có được danh sách các bài báo bằng thư viện axios ở định dạng xml và dùng xml2json để đưa về json sử dụng

Sau đó với mỗi bài link sẽ sử dụng axios để lấy html rồi sử dụng Cheerio.js để lấy nội dung các thẻ p trong mã html của bài báo

Trang 9

Cuối cùng gửi tất cả lên Kafka topic ‘article’

/article_crawler/index.js

b Crawl dữ liệu từ SSI Iboard

Đối với dữ liệu từ bảng giá SSI nhóm sử dụng python với thư viện request để gọi api

Trang 10

/stock_iboard_crawler/serives/api.py Đối với dữ liệu từ bảng giá SSI nhóm sử dụng python với thư viện request để gọi api, thông tin để gọi api như đương dẫn, body, … được lưu trong các file json tại

‘/stock_iboard_crawler/config’ mà sẽ được stock_iboard_crawler ghi lên hadoop mỗi lần khởi động lại ví dụ:

/stock_iboard_crawler/config/ssi_stock_data_HNX.json

Dữ liệu sau khi lấy về sẽ được ghi 1 bản vào hadoop và gửi đường dẫn hadoop này lên Kafka cùng với đường dẫn file config và dấu thời gian

Trang 11

c Xử lý dữ liệu tại pyspark_application

Đầu tiên khi khởi động pyspark_application sẽ tạo một ứng dụng spark, kết nối đến và lắng nghe kafka, tạo 1 kết nối đến mongodb

Tạo client spark Nhóm thực hiện tạo client spark với 4 core tối đa vì trong môi trường docker nhóm chỉ có thể chạy 1 spark worker với 8 core mà cần 4 core nữa cho ssi_iboard_crawler Sau đó nếu chưa có thông tin các mã chứng khoán thì chương trình sẽ sử dụng thư viện request để tìm nạp tất cả thông tin các mã chứng khoán và ghi ra

‘/data/stock.json’

Trang 12

- Dữ liệu báo từ topic ‘article’

Sau khi có đầy đủ dữ liệu chương trình sẽ lắng nghe và xử lý dữ liệu từ kafka Đối với

dữ liệu từ topic ‘article’ là danh sách các bài báo thì chương trình sẽ thực hiện tiền xử

lý để loại bỏ các bài báo trùng lặp bằng cách tính cột id = ‘nguồn báo’ + ‘id của bài báo’ và xác định trùng lặp bằng cách kiểm tra id này đã tồn tại trong dataframe chứa các bài báo đã được ghi vào hadoop trong quá khứ chưa, cùng với việc chuẩn hóa lại thời gian xuất bản

/pyspark_application/services/article.py Sau đó sẽ sử dụng spark map để tìm ra các tag của bài báo (các mã chứng khoán được nhắc đến trong nội dung bài báo) bằng cách sử dụng regex để chỉ lấy ra chữ, số, dấu cách từ nội dung bài báo -> tách thành từng từ -> so khớp với từng mã chứng khoán -> trả về cột tag là chuỗi các mã chứng khoán cách nhau bởi dấu cách

/pyspark_application/services/article.py Sau đó ghi thông tin này vào hadoop và mongodb

Trang 13

Tiếp theo tách từng bài báo theo từng lần mã cổ phiếu xuất hiện, xóa đi các hàng có tag rỗng và ghi vào elasticsearch

/pyspark_application/services/article.py

- Dữ liệu từ topic ‘crawl_data’

Dữ liệu từ SSI có 2 vấn đề một là dữ liệu sẽ có thể bị thiếu đi các cột dữ liệu do chưa đến giờ hoặc SSI chưa cập nhật thì api sẽ không trả về, và các cột có trả về thì cũng

có thể thiếu, bằng ký tự rỗng hoặc bằng null Vì vậy cần phải tiền xử lý

Đối với các vấn đề trên nhóm sử dụng hàm fill_data

/pyspark_application/services/ssi_stock_data.py Cùng với withColumn, dataframe.na.fill để tạo các mới nếu chưa tồn tại, cast lại các cột có giá trị thuộc kiểu string về đúng kiểu có thể tính toán là double, long, … điền giá trị mặc định vào các chỗ trống

Sau khi kết thúc quá trình tiền xử lý, nhóm sử dụng spark map để lặp qua từng hàng một và thêm vào các cột thông tin của doanh nghiệp tương ứng với mã cổ phiếu và sàn giao dịch

Sau đó vì dữ liệu doanh nghiệp được lấy từ api chưa hề qua xử lý vậy nên sẽ tồn tại các giá trị null và các trường như vốn điều lệ, số lượng nhân viên đều ở dạng string

Để xử lý điều đó nhóm thực hiện 2 đoạn code sau để đưa về kiểu giá trị đúng và điền giá trị mặc định vào các chỗ trống

Trang 14

/pyspark_application/services/ssi_stock_data.py Sau khi xử lý lưu 1 bản dữ liệu vào Hadoop và 1 bản vào elasticsearch

/pyspark_application/services/ssi_stock_data.py

d Cung cấp API cung cấp thông tin các bài báo thu thập được

Dữ liệu các bài báo sau khi được ghi vào database mongodb sẽ có thể đọc thông qua một api cung cấp bởi 1 server nodejs Api cung cấp ở cổng 3000 container

article_server hoặc được map với cổng 3000 ở máy local

Trang 15

Ví dụ sử dụng api ở cổng 3000

e Biểu diễn dữ liệu trên kibana

Dữ liệu SSI

Với dữ liệu từ SSI board nhóm sử dụng để visualize các thông số cơ bản của thị trường ví dụ như các mã có khối lượng giao dịch lớn nhất, các mã cổ phiếu có mức tăng, giảm lớn nhất trên sàn, độ rộng thị trường, phân bố khối lượng cổ phiếu giao dịch theo giá

Trang 16

Ngoài các biểu đồ về toàn bộ thị trường với dữ liệu trên nhóm còn có thể xây dựng công cụ để theo dõi sự thay đổi của 1 cổ phiếu bất kỳ

Theo dõi mã cổ phiếu AAA trên sàn hose ngày 31 / 1

Theo dõi mã cổ phiếu AAA trên sàn hose sáng ngày 9 / 2

Với Kibana nhóm còn thử nghiệm so sánh mức độ thay đổi của một cổ phiếu về giá

và tỷ trọng giao dịch so với các cổ phiếu khác cùng ngành để giúp người dùng dễ

Trang 17

dàng nhận định rủi ro, đưa ra các quyết định sáng suốt hơn trong việc lựa chọn đầu tư.

So sánh thay đổi về giá của AAA so với các cổ phiếu cùng ngành 1353 - Hóa chất

So sánh tỷ trọng khối lượng của AAA so với các cổ phiếu cùng sub sector 1353 - Hóa

chất

Dữ liệu các bài báo

Ngoài sử dụng cho api cung cấp thông tin các bài báo dữ liệu từ các bài báo còn được phần tích để tìm ra các mã doanh nghiệp được nhắc đến trong bài báo để tìm được độ phổ biến của một mã cổ phiếu trên phương tiện truyền thông

Trang 18

Độ phổ biến trên các phương tiện truyền thông

Trang 19

Chương 4: Kết luận và định hướng

Sau quá trình làm bài tập lớn, nhóm đã tìm hiểu vả triển khai được cơ bản về các công nghệ Kafka, Spark, Hadoop, Elasticsearch cùng Kibana từ đó đã xây dựng được một công cụ thực

sự có tác dụng giúp cho nhà đầu tư muốn có cái nhìn bao quát, toàn diện về thị trường chứng khoán

Định hướng tương lai có thể ứng dụng các công nghệ mới như học máy, các thuật toán phân tích văn bản và đa dạng hóa các nguồn tin như các bình luận trên nền tảng mạng xã hội cũng như mở rộng thêm các nguồn báo để có thể có được cái nhìn rõ nhất về suy nghĩ của thị trường

Đến đây thì project cũng đã hoàn thiện Nhóm 28 chúng em xin cảm ơn thầy đã hướng dẫn trong suốt quá trình làm project này Chúng em xin chân thành cảm ơn!

Trang 20

TÀI LIỆU THAM KHẢO

[1] TS Trần Việt Trung, Slide lưu trữ và xử lý dữ liệu lớn

[2] Kafka documentation , https://kafka.apache.org/documentation/

[3] Pyspark documentation, https://spark.apache.org/docs/latest/api/python/

[5] MongoDB documentation, MongoDB Documentation

[7] Spark, Apache Spark Installation on Windows - Spark

[9] PySpark Document, Apache Spark Installation on Windows - Spark

[10] PySpark UDF, PySpark UDF (User Defined Function) - Spark

[12] Mongoose Document, Mongoose v6.4.6: Documents (mongoosejs.com)

[13] ExpressJS, Express "Hello World" example (expressjs.com)

Ngày đăng: 29/05/2024, 18:11

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w