有一份2017-2018的每个季度的每股指标数据,其中Stkcd为股票代码,Accper为截止日期,F090301B为归属于母公司每股收益 F090601B为每股营业收入,F091001A为每股净资产,F091301A为每股资本公积,F091501为每股未分配利润,F091801B为每股经营活动产生的现金流量净额。问题如下: (1)对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收溢同比增长率大于20%的股票代码。 (2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。 (3)取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。 (4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心。
时间: 2023-07-16 18:16:24 浏览: 2565
指标代码哦
由于数据量较大,建议使用Python进行数据处理和分析。以下是对每个问题的解答:
1. 对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收益同比增长率大于20%的股票代码。
```python
import pandas as pd
# 读取数据
data = pd.read_excel('data.xlsx')
# 计算每个季度每股收益同比增长率
data['eps_growth_rate'] = data.groupby('Stkcd')['F090301B'].pct_change(periods=4)
# 找出连续4个季度每股收益同比增长率大于20%的股票代码
result = data.groupby('Stkcd').apply(lambda x: any(x['eps_growth_rate'].rolling(window=4).apply(lambda y: all(y > 0.2)))))
result = result[result == True].reset_index()['Stkcd'].unique()
```
2. 找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。
```python
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_excel('data.xlsx')
# 筛选2017年、2018年数据
data = data[data['Accper'].isin(['20171231', '20181231'])]
# 按每股资本公积排序,取前10名
top_capital_reserve = data.sort_values(by='F091301A', ascending=False).groupby('Stkcd').head(1)['Stkcd'].tolist()[:10]
# 按每股未分配利润排序,取前10名
top_undistributed_profit = data.sort_values(by='F091501', ascending=False).groupby('Stkcd').head(1)['Stkcd'].tolist()[:10]
# 可视化展现
fig, axs = plt.subplots(2, 1, figsize=(10, 10))
data[data['Stkcd'].isin(top_capital_reserve)].pivot(index='Accper', columns='Stkcd', values='F091301A').plot(ax=axs[0], kind='bar')
data[data['Stkcd'].isin(top_undistributed_profit)].pivot(index='Accper', columns='Stkcd', values='F091501').plot(ax=axs[1], kind='bar')
```
3. 取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。
```python
from sklearn.decomposition import PCA
# 读取数据
data = pd.read_excel('data.xlsx')
# 筛选2018年数据
data = data[data['Accper'] == '20181231']
# 提取6个指标数据
features = ['F090301B', 'F090601B', 'F091001A', 'F091301A', 'F091501', 'F091801B']
X = data[features]
# 主成分分析
pca = PCA(n_components=6)
pca.fit(X)
# 提取信息占比在95%以上的主成分
n_components = 0
total_variance = 0
for i in range(6):
total_variance += pca.explained_variance_ratio_[i]
if total_variance >= 0.95:
n_components = i + 1
break
# 输出每个主成分的表达式和意义
for i in range(n_components):
component = pca.components_[i]
expression = ' + '.join([f'{round(component[j], 2)}*{features[j]}' for j in range(6)])
print(f'主成分{i + 1}表达式:{expression}')
print(f'主成分{i + 1}意义:{component}')
```
4. 基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心。
```python
from sklearn.cluster import KMeans
# 使用前2个主成分进行聚类
X = pca.transform(X)[:, :2]
# K-均值聚类
kmeans = KMeans(n_clusters=4, random_state=0).fit(X)
# 获取聚类中心
centers = pca.inverse_transform(kmeans.cluster_centers_)
# 输出每个聚类的股票代码和对应的聚类中心
for i in range(4):
cluster = data.iloc[kmeans.labels_ == i]['Stkcd'].tolist()
center = pd.DataFrame(centers[i], index=features).T
print(f'聚类{i + 1}股票代码:{cluster}')
print(f'聚类{i + 1}聚类中心:\n{center}')
```
阅读全文