2. Sử dụng Python trong phân tích dữ liệu
2.3. Ví dụ: Xây dựng biểu đồ phân tích chứng khoán
Để tìm hiểu về thị trường chứng khoán, trước hết ta phải biết cách đọc một biểu đồ chứng khoán. Ở đây em sẽ sử dụng biểu đồ hình nến. Đây là một loại biểu đồ mô tả chuyển động giá của một chứng khoán trong quá khứ. Biểu đồ này biểu diễn giá đóng cửa, mở cửa, giá cao nhất và thấp nhất theo ngày của một chứng khoán
Hình 7: Một biểu đồ dạng hình nến
25
Trong biểu đồ nến, những thanh nến là sự kết hợp giữa thân nến và bóng nến. Khối lớn ở giữa (thân nến) thể hiện biên độ giữa giá mở cửa và giá đóng cửa. Nếu khối có màu xanh nghĩa là giá mở cửa thấp hơn giá đóng cửa, ngược lại nếu khối có màu đỏ nghĩa là giá mở cửa cao hơn giá đóng cửa. Bóng nến trên thể hiện giá cao nhất và bóng nến dưới thể hiện giá thấp nhất của phiên giao dịch. Loại biểu đồ này có ưu điểm là rất dễ đọc và hình dung.
Sau đây em sẽ sử dụng Python để xây dựng một biểu đồ hình nến dựa trên dữ liệu chứng khoán thực tế. Dữ liệu được sử dụng là công ty Alphabet (mã chứng khoán: GOOG) trong khoảng thời gian từ ngày 01/01/2021 đến ngày 01/06/2021. Dữ liệu được lấy nguồn từ Yahoo, phần lập trình sử dụng Jupyter Lab. Các bước được tiến hành như sau:
• Nhập thư viện pandas_datareader, datetime, bokeh.plotting
from pandas_datareader import data
import datetime
from bokeh.plotting import figure, show, output_file
• Đặt ngày bắt đầu và ngày kết thúc việc lấy dữ liệu
start_date = datetime.datetime(2021,1,1) end_date = datetime.datetime(2021,6,1)
• Lập bảng df với mã chứng khoán là GOOG, nguồn dữ liệu là Yahoo
df = data.DataReader(name="GOOG", data_source="yahoo", start=start_date, end=end_date)
26
• Tạo hàm tính biên độ giá mở cửa và đóng cửa
def inc_dec(c, o):
if c > o: value="Increase"
elif c < o: value="Decrease"
else: value="Equal"
return value
• Xây hệ trục tọa độ cho biểu đồ bằng hàm figure
p = figure(x_axis_type='datetime', width=1000, height=300) p.title.text = " Biểu đồ hình nến"
27 • Dựng bóng nến
p.segment(df.index, df.High, df.index, df.Low, color="Black")
• Dựng thân nến: trục x là ngày, trục y là giá trị trung bình của giá mở cửa và đóng cửa (Middle), chiều cao nến là biên độ giá (Height)
df["Middle"] = (df.Open+df.Close)/2 df["Height"] = abs(df.Close-df.Open)
• Đặt màu cho nến
df["Status"]=[inc_dec(c,o) for c, o in zip(df.Close,df.Open)] #tăng
p.rect(df.index[df.Status=="Increase"],df.Middle[df.Status=="Incre ase"],hours_12, df.Height[df.Status=="Increase"],fill_color="#3FFF 0A", line_color="black")
#giảm
p.rect(df.index[df.Status=="Decrease"],df.Middle[df.Status=="Decre ase"],hours_12, df.Height[df.Status=="Decrease"],fill_color="#FF33 33", line_color="black")
28 Toàn bộ đoạn code:
from pandas_datareader import data
import datetime
from bokeh.plotting import figure, show, output_file
start_date = datetime.datetime(2021,1,1)
end_date = datetime.datetime(2021,6,1)
df = data.DataReader(name="GOOG", data_source="yahoo", start=
start_date, end=end_date) def inc_dec(c, o): if c > o: value="Increase" elif c < o: value="Decrease" else: value="Equal" return value
df["Status"]=[inc_dec(c,o) for c, o in zip(df.Close,df.Open)] df["Middle"] = (df.Open+df.Close)/2
df["Height"] = abs(df.Close-df.Open)
p = figure(x_axis_type='datetime', width=1000, height=300)
29
hours_12=12*60*60*1000
p.segment(df.index, df.High, df.index, df.Low, color="Black")
#tăng
p.rect(df.index[df.Status=="Increase"],df.Middle[df.Status=="
Increase"],hours_12, df.Height[df.Status=="Increase"],fill_co lor="#3FFF0A", line_color="black")
#giảm
p.rect(df.index[df.Status=="Decrease"],df.Middle[df.Status=="
Decrease"],hours_12, df.Height[df.Status=="Decrease"],fill_co lor="#FF3333", line_color="black")
output_file("chart.html") show(p)
30
KẾT LUẬN
Qua thời gian thực hiện nghiên cứu, tìm hiểu về chủ đề “Python trong Phân tích dữ liệu”, nhìn chung em đã hiểu hơn về ngành phân tích dữ liệu nói chung, về ngôn ngữ Python và ứng dụng của nó trong phân tích dữ liệu nói riêng. Đây là một lĩnh vực không mới, song tiềm năng khai thác của nó vẫn còn rất nhiều.
Phân tích dữ liệu đang ngày càng đóng vai trò quan trọng trong thời đại này, và Python là một công cụ đắc lực cho việc đó. Ngôn ngữ này vẫn đang tiếp tục phát triển, cung cấp thêm các giải pháp nhanh hơn, hiệu quả hơn cho người sử dụng, hứa hẹn sẽ ngày càng được ứng dụng rộng rãi hơn trong nhiều lĩnh vực khác nhau.
31
TÀI LIỆU THAM KHẢO
1. Alvaro Fuentes, Become a Python Data Analyst, Packt Publishing, US, 2018.
2. Vitaly Friedman, “Data Visualization and Infographics”, Smashing Magazine, January 14, 2008.
3. Yves Hilpisch, Python for Finance: Analyze Big Financial Data, O'Reilly Media, US, 2015.
4. Jeff Leek, The Elements of Data Analytic Style, Lulu, US, 2015.