金融大数据分析-练习五
一、要求
今有2017-2018年每个季度的每股指标数据,共22720条数据记录,数据全部来源于国泰安CSMAR数据库,部分数据记录及表结构如表右所示:
其中Stkcd-股票代码、Accper-截止日期、F090301B-归属于母公司每股收益、F090601B-每股营业收入、F091001A-每股净资产、F091301A-每股资本公积、F091501A-每股未分配利润、F091801B-每股经营活动产生的现金流量净额。问题如下:
1.对每个股票代码,计算每个季度每股收益同比增长率,并找出连续4个季度每股收益同比增长率大于20%的股票代码。
2.取2018年度的数据,对以上6个指标作主成分分析,要求提取信息占比在95%以上,并写出每个主成分的表达式和说明其主成分的意义。
3.基于第2步提取的主成分进行K-均值聚类分析,并获取其聚类中心。
二、代码(仅供参考)
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
# 读取Excel文件中的数据
df = pd.read_excel('E:/金融大数据分析/data.xlsx')
# 数据预处理
# 将表示缺失值的字符串"NULL"替换为NaN
df.replace('NULL', np.nan, inplace=True)
# 删除含有任何NaN值的行
df = df.dropna()
# 删除所有列值全为0的行
df = df[(df != 0).all(1)]
# 1.对每个股票代码,计算每个季度每股收益同比增长率
# 根据股票代码('Stkcd')进行分组 pct_change(4)来计算每股收益的四季度同比增长率,* 100是为了转换成百分比形式
df['cagr'] = df.groupby('Stkcd')['F090301B'].pct_change(4) * 100
# 筛选出连续4个季度每股收益同比增长率大于20%的股票代码
# 筛选出每股收益同比增长率大于20%的数据行,然后根据股票代码进行分组,并通过filter方法筛选出连续4个季度每股收益同比增长率大于20%的股票代码。最后使用unique()方法获取唯一的股票代码。
stkcd_20 = df[df['cagr'] > 20].groupby('Stkcd').filter(lambda x: len(x) >= 4)['Stkcd'].unique()
# 输出连续4个季度每股收益同比增长率大于20%的股票代码
print("连续4个季度每股收益同比增长率大于20%的股票代码:\n", stkcd_20)
# 2.取2018年度的数据
# 使用字符串的startswith方法筛选出Accper列以'2018'开头的行
data_2018 = df[df['Accper'].str.startswith('2018')]
# 提取6个指标数据
features = data_2018[['F090301B', 'F090601B', 'F091001A', 'F091301A', 'F091501A', 'F091801B']]
# 数据标准化
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)
# 进行主成分分析PCA
# 要求提取信息占比在95%以上
pca = PCA(n_components=0.95)
principal_components = pca.fit_transform(features_scaled)
# 输出每个主成分的表达式
print("主成分表达式:\n", pca.components_)
# 输出每个主成分的意义
print("主成分意义:\n", pca.explained_variance_ratio_)
# 3.基于主成分进行K-均值聚类分析
# 设置聚类类别数为3
kmeans = KMeans(n_clusters=3)
kmeans.fit(principal_components)
# 获取聚类中心
# 取到每个簇的中心点坐标,即聚类中心
cluster_centers = kmeans.cluster_centers_
print("聚类中心:\n", cluster_centers)


1891

被折叠的 条评论
为什么被折叠?



