其中Stkcd为股票代码,Accper为截止日期,F090301B为归属于母公司每股收益,F090601B为每股营业收入,F091001A为每股净资产,F091301A为每股资本公积,F091501A为每股未分配利润,F091801B为每股经营活动产生的现金流量净额。问题如下: (1)对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收益同比增长率大于20%的股票代码。 (2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。 (3)取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。 (4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心。
时间: 2024-04-27 17:24:46 浏览: 206
好的,针对您的问题,我先给出一些思路和解释:
(1)计算每股收益同比增长率,可以通过计算相邻两个季度的每股收益的增长率来实现。比如第二个季度的每股收益同比增长率可以用以下公式计算:
$GrowthRate = \frac{EPS_{Q2}-EPS_{Q1}}{EPS_{Q1}} \times 100\%$
其中$EPS$表示每股收益,$Q1$表示第一个季度,$Q2$表示第二个季度。如果要找出连续4个季度每股收益同比增长率大于20%的股票代码,可以对每个股票的每个季度的增长率进行判断,如果有连续的4个增长率都大于20%,则认为该股票符合条件。
(2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,可以对每个股票的每股资本公积和每股未分配利润进行排序,然后取出前10个即可。柱状图和子图的方法可以用Python的Matplotlib库实现。
(3)取2018年的数据,对以上6个指标做主成分分析,可以使用Python的sklearn库实现。主成分分析是一种常用的数据降维方法,可以将多个相关的指标变成少数几个无关的主成分,以便更好地分析数据。提取信息占比在95%以上,可以通过观察每个主成分对原始数据方差的解释程度来确定。每个主成分的表达式和意义,可以通过查看主成分分析结果中的因子载荷矩阵来确定。
(4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心,可以使用Python的sklearn库实现。K-均值聚类是一种常用的无监督学习方法,可以将数据集中的样本分成K个簇。聚类中心是每个簇的中心点,可以通过均值来计算。
相关问题
其中Stkcd为股票代码,Accper为截止日期,F090301B为归属于母公司每股收益,F090601B为每股营业收入,F091001A为每股净资产,F091301A为每股资本公积,F091501A为每股未分配利润,F091801B为每股经营活动产生的现金流量净额。问题如下: (1)对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收益同比增长率大于20%的股票代码。 (2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。 (3)取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。 (4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心
以下是针对您的问题的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)
```
有一份2017-2018的每个季度的每股指标数据,其中Stkcd为股票代码,Accper为截止日期,F090301B为归属于母公司每股收益 F090601B为每股营业收入,F091001A为每股净资产,F091301A为每股资本公积,F091501为每股未分配利润,F091801B为每股经营活动产生的现金流量净额。问题如下: (1)对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收溢同比增长率大于20%的股票代码。 (2)找出2017年、2018年每股资本公积和每股未分配利润最大的10只股票代码,并通过柱状图、子图的方法可视化展现出来。 (3)取2018年的数据,对以上6个指标做主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式,说明其主成分的意义。 (4)基于第3步提取的主成分进行K-均值聚类分析,并获取聚类中心。
由于数据量较大,建议使用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}')
```
阅读全文