top of page

Discover and Visualize the Data to Gain Insights with Python

จุดมุ่งหมายของงาน Quant คือพยายามทำความเข้าใจรูปแบบพฤติกรรมหรืแนวโน้มโน้มของข้อมูลเพื่อตัดสินใจในการลงทุนหรือแม้กระทั้งทำความเข้าใจข้อมูลก่อนนำข้อมูลไปสร้างแบบจำลอง หลายครั้งที่การทำความเข้าใจในส่วนนี้อาจต้องการการสร้างภาพเพื่อให้เราสามารถเข้าใจและสื่อสารการทีมของเราได้ การทำ data Visualize จึงมีความสำคัญมากๆ ในกระบวนการทำงานของ Quant ในบทความนี้เราจะมาดูกันว่าเราสามารถทำ Vizulization ด้วย Python กันอย่างไร

มาเริ่มกันเลย

เราเริ่มต้นด้วยกันดึงข้อมูลมาก่อนจาก yfinance เราจะดึง S&P Dow jone และ Vix index

import yfinance as yf

# Indices tickers
idx_tickers = ['^GSPC', '^DJI', '^VIX']

# Get data 
idx_data = yf.download(idx_tickers, start="2000-01-01", end="2022-12-31")

เราจะแปลงข้อมูลเล็กน้อยโดยใช้ผลตอบแทน 20 วัน

df_pct_20 = idx_data["Adj Close"].pct_change(20).dropna()
df_pct_20["^VIX"] = idx_data["Adj Close"]["^VIX"]
df_pct_20 

หลังจากนั้นเราจะเริ่มเข้าสู่การทำ Data Viz เริ่มแรกเราจะมาดูการกระจายของข้อมูลกันก่อน

df_pct_20.hist(bins=50, sharex=False, sharey=False, xlabelsize=1, ylabelsize=1, figsize=(12,12))
pyplot.show()

เราจะเห็นได้ว่าทั้ง DJI และ S&P มีการกระจายตัวของผลตอบแทนรายเดือนแบบปกติ ส่วน Vix มีการกระจายตัวแบบเบ้าขวา

df_pct_20.plot(kind='density', subplots=True, layout=(4,4), sharex=True, legend=True, fontsize=1, figsize=(15,15))
pyplot.show()

หรือเราจะสร้าง violinplot ก็ได้


# Grouped violinplot
sns.violinplot(x="^DJI", y="^VIX" , data=df_pct_20, palette="Pastel1")
plt.show()

ที่นี้เราจะมาดูความสัมพันธ์ของตัวแปรกันบ้างเริ่มแรกเราจะดูความสัมพันธ์ของ S&P และ Dow jone กันก่อน

df_pct_20.plot(kind="scatter", x="^DJI", y="^GSPC", alpha=0.3)

หรือเราสามารถดูความสัมพันธ์ทุกตัวแปรก็ได้

pyplot.figure(figsize=(15,15))
scatter_matrix(df_pct_20,figsize=(12,12))
pyplot.show()



หรือจะสร้างเป็น Correlation Matrix

correlation = df_pct_20.corr()
pyplot.figure(figsize=(15,15))
pyplot.title('Correlation Matrix')
sns.heatmap(correlation, vmax=1, square=True,annot=True,cmap='cubehelix')

กลับมาที่ความสัทพันธ์เราต้องการเข้าใจความสัมพันธ์มากขึ้นของ 3 ตัวแปรหากเราให้ สร้างกราฟ Scapter plot ระหว่าง S&P และ Down jond โดยให้ขนาดเท่ากับ Vix

# use the scatterplot function to build the bubble map
sns.scatterplot(data=df_pct_20, x="^GSPC", y="^DJI", size="^VIX", legend=False, sizes=(0.2, 200))

# show the graph
plt.show()


จากกราฟเราน่าจะเห็นความสัมพันธ์บ้างอย่างของของตัวแปรทั้งสาม โดยเราจะสังเกตุได้ว่าขนาดของจุดจะใหญ่กว่าปกติทั้ง 2 ด้านและมีขนาดเล็กเมื่ออยู่ตรงกลางเราลองเปลี่ยนขนาดเป็นสี

df_pct_20.plot(kind="scatter", x="^DJI", y="^GSPC", alpha=0.4,
             s=df_pct_20["^VIX"] , label="^VIX", figsize=(10,7),
             c="^VIX", cmap=plt.get_cmap("jet"), colorbar=True,
             sharex=False)
plt.legend()

ก็จะเห็นความสัมพันธ์ที่ชัดเจนขึ้น

from statsmodels.tsa.seasonal import seasonal_decompose

result = seasonal_decompose(df_pct_20["^DJI"], model='additive', period=1)
result.plot()
pyplot.show()


ส่งท้าย

แม้ว่าการทำความเข้าใจข้อมูลจะดูเหมือนเป็นเรื่องง่าย แต่ในงาน Quant เรายังต้องพิจารณาเรื่องของแนวโน้ม ที่ใช้วิเคราะห์ ทั้งการแบ่งเป็น แนวโน้มของตลาด การนำเอาช่วงเวลาผิดปกติออก หรือ ในบ้างครั้งการดูด้วยรูปอาจจะไม่เข้าใจหรือเปรียบเทียบกันยาก กดติดตามไว้นะครับเราจะมาอธิบายเพิ่มเติมแน่นอน


https://colab.research.google.com/drive/1UOiwAym-_Gvzj7qQ7BGjE6mCB8cQdppb?usp=sharing


ดู 9 ครั้ง0 ความคิดเห็น

โพสต์ล่าสุด

ดูทั้งหมด

Portfolio Insurance

Comments


bottom of page