Dùng biểu đồ histogram, phân tán và đường trong phân tích tài chính
Tóm tắt
Bài học nhập môn này giải thích cách các biểu đồ phổ biến giúp nhà nghiên cứu kiểm tra dữ liệu tài chính và nhận biết cấu trúc hoặc vấn đề dữ liệu có thể có. Dùng giá hằng ngày của hai cổ phiếu US làm ví dụ, bài học minh họa biểu đồ histogram cho phân phối thực nghiệm, histogram tích lũy cho tần suất tích lũy, biểu đồ phân tán cho mối quan hệ giữa các quan sát theo cặp và biểu đồ đường cho giá trị theo thời gian. Bài học cũng cho thấy vì sao lợi suất thường hữu ích hơn mức giá khi vẽ phân phối: giá không dừng và có thể dao động trong một phạm vi rộng.
Các ví dụ phân biệt khám phá bằng hình ảnh với kiểm định chính thức. Biểu đồ có thể giúp hình thành giả thuyết, nhưng những quy luật nhìn thấy được có thể phản ánh thiên kiến xác nhận; phân phối lợi suất lịch sử cũng không đảm bảo hành vi tương tự trong tương lai. Biểu đồ đường nối các quan sát được lấy mẫu và có thể che khuất biến động giữa chúng; biểu đồ phân tán loại bỏ ngày gắn với các giá trị theo cặp. Bài học không đưa ra chiến lược hay kiểm định thống kê để xác thực mối quan hệ, nên các nhận định về mô hình cần phân tích cẩn thận hơn việc chỉ quan sát bằng mắt.
Ý chính
- Dùng histogram để kiểm tra phân phối tần suất của các quan sát và histogram tích lũy để xem tần suất tích lũy.
- Khi vẽ phân phối của chuỗi tài chính, lợi suất thường hữu ích hơn mức giá không dừng.
- Biểu đồ phân tán thể hiện các giá trị theo cặp nhưng không cho biết ngày của từng quan sát.
- Biểu đồ đường giúp theo dõi diễn biến theo thời gian nhưng có thể che giấu thay đổi giữa các điểm lấy mẫu.
- Dùng biểu đồ để khám phá và xây dựng giả thuyết, không phải bằng chứng rằng một quy luật hay mô hình sẽ tồn tại lâu dài.
Thẻ
Toàn văn
# Graphical Representations of Data
<a href="https://www.quantrocket.com"><img alt="QuantRocket logo" src="https://www.quantrocket.com/assets/img/notebook-header-logo.png"></a>
© Copyright Quantopian Inc.<br>
© Modifications Copyright QuantRocket LLC<br>
Licensed under the [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/legalcode).<br>
<a href="https://www.quantrocket.com/disclaimer/">Disclaimer</a>
***
[Quant Finance Lectures (adapted Quantopian Lectures)](Introduction.ipynb) › Lecture 5 - Plotting Data
***
# Graphical Representations of Data
By Evgenia "Jenny" Nitishinskaya, Maxwell Margenot, and Delaney Granizo-Mackenzie
<a href="https://youtu.be/nKq_wz3Qk8w?si=gtDPpJ3fxhfEyY4d&t=91" target="_blank">Quantopian video for this lecture ↗</a>
Representing data graphically can be incredibly useful for learning how the data behaves and seeing potential structure or flaws. Care should be taken, as humans are incredibly good at seeing only evidence that confirms our beliefs, and visual data lends itself well to that. Plots are good to use when formulating a hypothesis, but should not be used to test a hypothesis.
We will go over some common plots here.
```python
# Import our libraries
# This is for numerical processing
import numpy as np
# This is the library most commonly used for plotting in Python.
# Notice how we import it 'as' plt, this enables us to type plt
# rather than the full string every time.
import matplotlib.pyplot as plt
```
## Getting Some Data
If we're going to plot data we need some data to plot. We'll get the pricing data of Apple (AAPL) and Microsoft (MSFT) to use in our examples. First, we will look up the sids for AAPL and MSFT:
```python
from quantrocket.master import get_securities
securities = get_securities(symbols=["MSFT", "AAPL"], fields=["Sid", "Symbol"], vendors='usstock')
securities
```
### Data Structure
Knowing the structure of your data is very important. Normally you'll have to do a ton of work molding your data into the form you need for testing. QuantRocket has done a lot of cleaning on the data, but you still need to put it into the right shapes and formats for your purposes.
In this case the data will be returned as a pandas dataframe object. The rows are timestamps, and the columns are the sids for AAPL and MSFT.
```python
from quantrocket import get_prices
start = '2014-01-01'
end = '2015-01-01'
data = get_prices("usstock-free-1min", data_frequency="daily", sids=securities.index.tolist(), fields='Close', start_date=start, end_date=end)
data = data.loc["Close"]
data.head()
```
For convenience, let's rename the columns to be symbols instead of sids.
```python
sids_to_symbols = securities.Symbol.to_dict()
data = data.rename(columns=sids_to_symbols)
data.head()
```
Indexing into the 2D dataframe will give us a 1D series object. The index for the series is timestamps, the value upon index is a price. Similar to an array except instead of integer indices it's times.
```python
data['MSFT'].head()
```
## Histogram
A histogram is a visualization of how frequent different values of data are. By displaying a frequency distribution using bars, it lets us quickly see where most of the observations are clustered. The height of each bar represents the number of observations that lie in each interval. You can think of a histogram as an empirical and discrete Probability Density Function (PDF).
```python
# Plot a histogram using 20 bins
plt.hist(data['MSFT'], bins=20)
plt.xlabel('Price')
plt.ylabel('Number of Days Observed')
plt.title('Frequency Distribution of MSFT Prices, 2014');
```
### Returns Histogram
In finance rarely will we look at the distribution of prices. The reason for this is that prices are non-stationary and move around a lot. (For more info on non-stationarity please see Lecture 43: *Integration, Cointegration, and Stationarity*.) Instead we will use daily returns. Let's try that now.
```python
# Remove the first element because percent change from nothing to something is NaN
R = data['MSFT'].pct_change()[1:]
# Plot a histogram using 20 bins
plt.hist(R, bins=20)
plt.xlabel('Return')
plt.ylabel('Number of Days Observed')
plt.title('Frequency Distribution of MSFT Returns, 2014');
```
The graph above shows, for example, that the daily returns of MSFT were above 0.03 on fewer than 5 days in 2014. Note that we are completely discarding the dates corresponding to these returns.
IMPORTANT: Note also that this does not imply that future returns will have the same distribution.
### Cumulative Histogram (Discrete Estimated CDF)
An alternative way to display the data would be using a cumulative distribution function, in which the height of a bar represents the number of observations that lie in that bin or in one of the previous ones. This graph is always nondecreasing since you cannot have a negative number of observations. The choice of graph depends on the information you are interested in.
```python
# Remove the first element because percent change from nothing to something is NaN
R = data['MSFT'].pct_change()[1:]
# Plot a histogram using 20 bins
plt.hist(R, bins=20, cumulative=True)
plt.xlabel('Return')
plt.ylabel('Number of Days Observed')
plt.title('Cumulative Distribution of MSFT Returns, 2014');
```
## Scatter plot
A scatter plot is useful for visualizing the relationship between two data sets. We use two data sets which have some sort of correspondence, such as the date on which the measurement was taken. Each point represents two corresponding values from the two data sets. However, we don't plot the date that the measurements were taken on.
```python
plt.scatter(data['MSFT'], data['AAPL'])
plt.xlabel('MSFT')
plt.ylabel('AAPL')
plt.title('Daily Prices in 2014');
```
```python
R_msft = data['MSFT'].pct_change()[1:]
R_aapl = data['AAPL'].pct_change()[1:]
plt.scatter(R_msft, R_aapl)
plt.xlabel('MSFT')
plt.ylabel('AAPL')
plt.title('Daily Returns in 2014');
```
## Line graph
A line graph can be used when we want to track the development of the y value as the x value changes. For instance, when we are plotting the price of a stock, showing it as a line graph instead of just plotting the data points makes it easier to follow the price over time. This necessarily involves "connecting the dots" between the data points, which can mask out changes that happened between the time we took measurements.
```python
plt.plot(data['MSFT'])
plt.plot(data['AAPL'])
plt.ylabel('Price')
plt.legend(['MSFT', 'AAPL']);
```
```python
# Remove the first element because percent change from nothing to something is NaN
R = data['MSFT'].pct_change()[1:]
plt.plot(R)
plt.ylabel('Return')
plt.title('MSFT Returns');
```
## Never Assume Conditions Hold
Again, whenever using plots to visualize data, do not assume you can test a hypothesis by looking at a graph. Also do not assume that because a distribution or trend used to be true, it is still true. In general much more sophisticated and careful validation is required to test whether models hold. Plots are mainly useful when initially deciding how your models should work.
---
**Next Lecture:** [Means](Lecture06-Means.ipynb)
[Back to Introduction](Introduction.ipynb)
---
*This presentation is for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation for any security; nor does it constitute an offer to provide investment advisory or other services by QuantRocket LLC ("QuantRocket"). Nothing contained herein constitutes investment advice or offers any opinion with respect to the suitability of any security, and any views expressed herein should not be taken as advice to buy, sell, or hold any security or as an endorsement of any security or company. In preparing the information contained herein, the authors have not taken into account the investment needs, objectives, and financial circumstances of any particular investor. Any views expressed and data illustrated herein were prepared based upon information believed to be reliable at the time of publication. QuantRocket makes no guarantees as to their accuracy or completeness. All information is subject to change and may quickly become unreliable for various reasons, including changes in market conditions or economic circumstances.*






Hiển thị toàn văn kèm ghi nguồn theo giấy phép của tài liệu gốc. Giấy phép: CC BY 4.0
Bản tóm tắt này do tác nhân nghiên cứu của Stratmill biên soạn từ tài liệu gốc; đây không phải bản sao của tài liệu.