其中Stkcd为股票代码,Accper为截止日期,F090301B为归属于母公司每股收益,F090601B为每股营业收入,F091001A为每股净资产,F091301A为每股资本公积,F091501A为每股未分配利润,F091801B为每股经营活动产生的现金流量净额。问题如下: (1)对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收益同比增长率大于20%的股票代码。 (2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。 (3)取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。 (4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心
时间: 2024-03-02 17:50:47 浏览: 373
以下是针对您的问题的Python代码实现:
(1)对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收益同比增长率大于20%的股票代码。
```python
import pandas as pd
# 读取数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 计算每个季度每股收益同比增长率
df['EPS_Growth_Rate'] = df.groupby('Stkcd')['F090301B'].pct_change(periods=4) * 100
# 找出符合条件的股票代码
result = df[df.groupby('Stkcd')['EPS_Growth_Rate'].apply(lambda x: x.rolling(4, min_periods=4).mean().ge(20)).values]
result = result['Stkcd'].unique().tolist()
print(result)
```
(2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 筛选出2017年、2018年的数据
df = df[df['Accper'].dt.year.isin([2017, 2018])]
# 找出每股资本公积和每股未分配利润最大的10只股票代码
result = df.groupby('Stkcd')['F091301A', 'F091501A'].sum()
result = result.nlargest(10, ['F091301A', 'F091501A'])
# 可视化展示
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
result['F091301A'].plot(kind='bar', ax=axes[0])
result['F091501A'].plot(kind='bar', ax=axes[1])
axes[0].set_title('Top 10 Stocks by Capital Reserve')
axes[1].set_title('Top 10 Stocks by Retained Earnings')
plt.show()
```
(3)取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。
```python
import pandas as pd
from sklearn.decomposition import PCA
# 读取数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 筛选出2018年的数据
df = df[df['Accper'].dt.year == 2018]
# 提取需要进行主成分分析的指标
cols = ['F090301B', 'F090601B', 'F091001A', 'F091301A', 'F091501A', 'F091801B']
data = df[cols]
# 主成分分析
pca = PCA(n_components=0.95)
pca.fit(data)
# 输出每个主成分的表达式和意义
for i in range(pca.n_components_):
print(f'PC{i+1} = {pca.components_[i][0]:.2f}*F090301B + {pca.components_[i][1]:.2f}*F090601B + '
f'{pca.components_[i][2]:.2f}*F091001A + {pca.components_[i][3]:.2f}*F091301A + '
f'{pca.components_[i][4]:.2f}*F091501A + {pca.components_[i][5]:.2f}*F091801B')
print(f'The meaning of PC{i+1} is {pca.explained_variance_ratio_[i]*100:.2f}% of the total variance.')
```
(4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心。
```python
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
# 读取数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 筛选出2018年的数据
df = df[df['Accper'].dt.year == 2018]
# 提取需要进行主成分分析的指标
cols = ['F090301B', 'F090601B', 'F091001A', 'F091301A', 'F091501A', 'F091801B']
data = df[cols]
# 主成分分析
pca = PCA(n_components=0.95)
pca.fit(data)
data_pca = pca.transform(data)
# K-均值聚类分析
kmeans = KMeans(n_clusters=3, random_state=0).fit(data_pca)
# 获取聚类中心
centers = pca.inverse_transform(kmeans.cluster_centers_)
centers = pd.DataFrame(centers, columns=cols)
print(centers)
```
阅读全文