"该资源是一个Python代码文件,用于处理股票数据。它首先创建一个空的DataFrame(StockPrices)来存储股票价格,然后定义一个列表(market_value_list)用于存储每只股票的平均市值。接下来,代码创建了一个包含股票代码的列表(ticker_list),并遍历这个列表,从名为'test.xlsx'的Excel文件中读取每只股票的数据,特别是每日收盘价,并将其添加到StockPrices DataFrame中。同时,计算每只股票的平均最高价并将其存入market_value_list。代码还设置了日期作为DataFrame的索引,并显示了处理后的数据的前五行。接着,计算了每日收益率并删除了缺失值,再次显示了处理结果。最后,代码使用matplotlib绘制了一个散点图,展示了不同股票的预期回报与风险的关系。" 这段Python代码主要涉及以下知识点: 1. Pandas库:`pd.DataFrame()`用于创建一个空的DataFrame对象,`read_excel()`函数从Excel文件中读取数据。DataFrame是Pandas库中的核心数据结构,用于处理二维表格数据。 2. 循环和列表:使用`for`循环遍历ticker_list,对每只股票执行相同的操作,如读取数据、计算平均市值等。`ticker_list`用于存储股票代码。 3. Numpy库:虽然在示例代码中未直接引入,但`np.pi`和`np.array`(隐含在`area`变量的计算中)是Numpy库的一部分,用于进行数学计算。 4. 数据操作:`pct_change()`函数计算股票收益率,即每日收盘价相对于前一天的百分比变化。`dropna()`函数用于删除包含缺失值的行。 5. 指数列:`StockPrices.index.name='date'`设置日期作为DataFrame的索引列,方便按日期进行数据操作。 6. 数据可视化:使用`matplotlib.pyplot`库绘制散点图,`scatter()`函数绘制每个股票的预期回报(均值)与风险(标准差)。`xlabel()`和`ylabel()`设置坐标轴标签,`annotate()`用于在图上标注每只股票的信息。 7. 文件操作:`test.xlsx`是包含股票数据的Excel文件,代码通过`sheet_name`参数指定工作表名,`parse_dates`和`index_col`参数用于解析日期并设置为索引。 这段代码的目的是分析股票的收益和风险,通过计算收益率和处理数据,可以进一步进行投资组合优化、风险评估等金融分析任务。
StockPrices = pd.DataFrame()
market_value_list=[] #存储每支股票的平均市值
# 创建股票代码的列表
ticker_list = ['abc001', 'abc002', 'abc003', 'abc004', 'abc005','abc006','abc007','abc008','abc009','abc010']
# 使用循环,挨个获取每只股票的数据,并存储每日收盘价
for ticker in ticker_list:
stock_data = read_excel('test.xlsx',sheet_name=ticker,parse_dates=['date'], index_col='date')
StockPrices[ticker] = stock_data['close'] #获取每支股票的收盘价
#将每支股票的市值均值存入列表中
market_value_list.append((stock_data['high']+stock_data['high']).mean())
StockPrices.index.name = 'date' # 日期为索引列
# 输出数据的前5行
print(StockPrices.head())
# 计算每日收益率,并丢弃缺失值
StockReturns = StockPrices.pct_change().dropna()
# 打印前5行数据
print(StockReturns.head())
plt.figure(figsize = (10,8))
area = np.pi*20
plt.scatter(StockReturns.mean(), StockReturns.std(),alpha = 0.5,s =area)
plt.xlabel('Expected returns')
plt.ylabel('Risk')
# Label the scatter plots
for label, x, y in zip(StockReturns.columns, StockReturns.mean(), StockReturns.std()):
plt.annotate(
label,
textcoords = 'offset points', ha = 'right', va = 'bottom',
arrowprops = dict(arrowstyle = '-', connectionstyle = 'arc3,rad=-0.3'))
box_df = pd.concat([StockReturns],axis=1)
box_df.columns = StockReturns.columns
box_df.plot(kind='box',figsize=(8,6),colormap='jet')
import math
def plot_distribution(StockReturns, cols=5, width=20, height=15, hspace=0.2, wspace=0.5):
plt.style.use('seaborn-whitegrid')
fig = plt.figure(figsize=(width,height))
fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=wspace, hspace=hspace)
rows = math.ceil(float(StockReturns.shape[1]) / cols)
for i, column in enumerate(StockReturns.columns):
ax = fig.add_subplot(rows, cols, i + 1)
ax.set_title(column)
if StockReturns.dtypes[column] == np.object:
g = plt.plot(y=column, data=StockReturns)
substrings = [s.get_text()[:18] for s in g.get_yticklabels()]
g.set(yticklabels=substrings)
else:
#直方图,频数
g = plt.plot(StockReturns[column])
plot_distribution(StockReturns, cols=2, width=20, height=50, hspace=0.45, wspace=0.5)
Stockmean = StockReturns.mean().dropna()
print("日平均收益:")
print(Stockmean)
剩余6页未读,继续阅读
- 粉丝: 27
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 掌握数学建模:层次分析法详细案例解析
- JSP项目实战:广告分类系统v2.0完整教程
- 如何在没有蓝牙的PC上启用并使用手机蓝牙
- SpringBoot与微信小程序打造游戏助手完整教程
- 高效管理短期借款的Excel明细表模板
- 兄弟1608/1618/1619系列复印机维修手册
- 深度学习模型Sora开源,革新随机噪声处理
- 控制率算法实现案例集:LQR、H无穷与神经网络.zip
- Java开发的HTML浏览器源码发布
- Android闹钟程序源码分析与实践指南
- H3C S12500R升级指南:兼容性、空间及版本过渡注意事项
- Android仿微信导航页开门效果实现教程
- 深度研究文本相似度:BERT、SentenceBERT、SimCSE模型分析
- Java开发的zip压缩包查看程序源码解析
- H3C S12500S系列升级指南及注意事项
- 全球海陆掩膜数据解析与应用