获取任意三只股票2024年的价格数据,计算每个股票每天的涨跌幅(涨跌幅 = 当天的收盘价/前一天的收盘价 - 1);计算涨跌幅的标准差、均值、偏度和峰度,检验涨跌幅序列是否符合正态分布;利用groupby与apply函数,将三只股票的收盘价分别进行标准化处理
时间: 2024-10-01 08:06:49 浏览: 43
要获取任意三只股票2024年的价格数据,并进行上述操作,你需要按照以下步骤进行:
1. **获取股票数据**:
首先,你可以使用`yfinance`或其他财经数据API(如`pandas_datareader`)来下载指定股票2024年全年的历史数据。例如,假设你想获取AAPL(苹果)、MSFT(微软)和GOOGL(谷歌)的股票数据:
```python
import yfinance as yf
import pandas as pd
tickers = ['AAPL', 'MSFT', 'GOOGL']
start_date = '2024-01-01'
end_date = '2024-12-31'
stock_prices = {ticker: yf.download(ticker, start=start_date, end=end_date)['Close'] for ticker in tickers}
```
2. **计算涨跌幅**:
对于每只股票,创建一个新的列计算每天的涨跌幅:
```python
daily_changes = {}
for ticker, prices in stock_prices.items():
daily_changes[ticker] = prices.pct_change().dropna()
```
3. **统计涨跌幅**:
- **标准差(StdDev)**:表示涨跌幅数据集的离散程度。
- **均值(Mean)**:平均涨跌幅。
- **偏度(Skewness)**:衡量分布的不对称程度。
- **峰度(Kurtosis)**:衡量分布的尖锐程度或肥尾程度。
```python
stats = {}
for ticker, changes in daily_changes.items():
stats[ticker] = {
'Standard Deviation': changes.std(),
'Mean': changes.mean(),
'Skewness': changes.skew(),
'Kurtosis': changes.kurtosis()
}
```
4. **正态性检验**:
可以使用`scipy.stats.normaltest()`函数检查涨跌幅数据是否符合正态分布,返回的是Z分数和P值,P值小于显著性水平(如0.05)则拒绝原假设,认为数据不符合正态分布。
5. **标准化处理**:
使用`pandas.DataFrame.groupby`和`apply`将收盘价标准化,使得每只股票每天的价格都在0到1之间:
```python
def standardize(prices):
return (prices - prices.min()) / (prices.max() - prices.min())
standardized_prices = pd.concat(stock_prices.values(), keys=stock_prices.keys()).groupby(level=0).apply(standardize)
```
现在,`stats`字典包含了涨跌幅的统计信息,`standardized_prices`包含了标准化后的收盘价。
阅读全文