一、个人简介
💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
大数据框架:Hadoop+Spark(Hive需要定制修改) 开发语言:Java+Python(两个版本都支持) 数据库:MySQL 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery
三、视频解说
四、部分功能展示
五、部分代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import pandas as pd
import numpy as np
import json
from datetime import datetime, timedelta
spark = SparkSession.builder.appName("StockAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def market_performance_analysis(request):
stock_data = spark.sql("SELECT stock_code, stock_name, open_price, close_price, high_price, low_price, volume, trade_date FROM stock_daily_data WHERE trade_date >= date_sub(current_date(), 30)")
stock_pandas = stock_data.toPandas()
stock_pandas['price_change'] = stock_pandas['close_price'] - stock_pandas['open_price']
stock_pandas['price_change_rate'] = (stock_pandas['price_change'] / stock_pandas['open_price']) * 100
stock_pandas['volatility'] = ((stock_pandas['high_price'] - stock_pandas['low_price']) / stock_pandas['open_price']) * 100
market_summary = stock_pandas.groupby('trade_date').agg({
'price_change_rate': ['mean', 'std'],
'volume': 'sum',
'volatility': 'mean'
}).reset_index()
market_summary.columns = ['trade_date', 'avg_change_rate', 'change_rate_std', 'total_volume', 'avg_volatility']
market_summary['market_sentiment'] = np.where(market_summary['avg_change_rate'] > 0, 'positive', 'negative')
market_summary['risk_level'] = pd.cut(market_summary['avg_volatility'], bins=[0, 2, 5, 10, float('inf')], labels=['low', 'medium', 'high', 'extreme'])
top_gainers = stock_pandas.nlargest(10, 'price_change_rate')[['stock_code', 'stock_name', 'price_change_rate']]
top_losers = stock_pandas.nsmallest(10, 'price_change_rate')[['stock_code', 'stock_name', 'price_change_rate']]
correlation_matrix = stock_pandas.pivot_table(values='price_change_rate', index='trade_date', columns='stock_code').corr()
avg_correlation = correlation_matrix.mean().mean()
market_trend = 'bullish' if market_summary['avg_change_rate'].tail(7).mean() > 0 else 'bearish'
result_data = {
'market_summary': market_summary.to_dict('records'),
'top_gainers': top_gainers.to_dict('records'),
'top_losers': top_losers.to_dict('records'),
'market_correlation': avg_correlation,
'market_trend': market_trend
}
return JsonResponse(result_data)
def industry_performance_analysis(request):
industry_data = spark.sql("SELECT i.industry_name, s.stock_code, s.close_price, s.open_price, s.volume, s.market_value, s.trade_date FROM stock_daily_data s JOIN stock_info si ON s.stock_code = si.stock_code JOIN industry_info i ON si.industry_code = i.industry_code WHERE s.trade_date >= date_sub(current_date(), 90)")
industry_pandas = industry_data.toPandas()
industry_pandas['price_change_rate'] = ((industry_pandas['close_price'] - industry_pandas['open_price']) / industry_pandas['open_price']) * 100
industry_pandas['market_cap_weight'] = industry_pandas['market_value'] / industry_pandas.groupby(['industry_name', 'trade_date'])['market_value'].transform('sum')
industry_pandas['weighted_return'] = industry_pandas['price_change_rate'] * industry_pandas['market_cap_weight']
industry_performance = industry_pandas.groupby(['industry_name', 'trade_date']).agg({
'weighted_return': 'sum',
'volume': 'sum',
'market_value': 'sum'
}).reset_index()
industry_performance.columns = ['industry_name', 'trade_date', 'industry_return', 'total_volume', 'total_market_cap']
monthly_performance = industry_performance.groupby('industry_name').agg({
'industry_return': ['mean', 'std'],
'total_volume': 'mean',
'total_market_cap': 'mean'
}).reset_index()
monthly_performance.columns = ['industry_name', 'avg_return', 'return_volatility', 'avg_volume', 'avg_market_cap']
monthly_performance['sharpe_ratio'] = monthly_performance['avg_return'] / monthly_performance['return_volatility']
monthly_performance['performance_rank'] = monthly_performance['avg_return'].rank(ascending=False)
sector_rotation = industry_performance.pivot_table(values='industry_return', index='trade_date', columns='industry_name').fillna(0)
momentum_scores = {}
for industry in sector_rotation.columns:
recent_returns = sector_rotation[industry].tail(20)
momentum_scores[industry] = recent_returns.mean() + (recent_returns.tail(5).mean() - recent_returns.head(5).mean())
momentum_df = pd.DataFrame(list(momentum_scores.items()), columns=['industry_name', 'momentum_score'])
result_data = {
'industry_performance': monthly_performance.to_dict('records'),
'momentum_analysis': momentum_df.to_dict('records'),
'sector_trends': sector_rotation.tail(30).to_dict('index')
}
return JsonResponse(result_data)
def valuation_level_analysis(request):
valuation_data = spark.sql("SELECT s.stock_code, s.stock_name, s.close_price, s.market_value, f.pe_ratio, f.pb_ratio, f.ps_ratio, f.roe, f.roa, f.debt_ratio, f.revenue_growth, f.profit_growth, s.trade_date FROM stock_daily_data s JOIN financial_indicators f ON s.stock_code = f.stock_code AND s.trade_date = f.report_date WHERE s.trade_date >= date_sub(current_date(), 30)")
val_pandas = valuation_data.toPandas()
val_pandas = val_pandas.dropna()
val_pandas['pe_percentile'] = val_pandas['pe_ratio'].rank(pct=True)
val_pandas['pb_percentile'] = val_pandas['pb_ratio'].rank(pct=True)
val_pandas['ps_percentile'] = val_pandas['ps_ratio'].rank(pct=True)
val_pandas['valuation_score'] = (val_pandas['pe_percentile'] + val_pandas['pb_percentile'] + val_pandas['ps_percentile']) / 3
val_pandas['value_category'] = pd.cut(val_pandas['valuation_score'], bins=[0, 0.3, 0.7, 1.0], labels=['undervalued', 'fairly_valued', 'overvalued'])
val_pandas['quality_score'] = (val_pandas['roe'].rank(pct=True) + val_pandas['roa'].rank(pct=True) + (1 - val_pandas['debt_ratio'].rank(pct=True))) / 3
val_pandas['growth_score'] = (val_pandas['revenue_growth'].rank(pct=True) + val_pandas['profit_growth'].rank(pct=True)) / 2
val_pandas['comprehensive_score'] = (val_pandas['quality_score'] * 0.4 + val_pandas['growth_score'] * 0.3 + (1 - val_pandas['valuation_score']) * 0.3)
market_valuation = val_pandas.groupby('trade_date').agg({
'pe_ratio': ['mean', 'median'],
'pb_ratio': ['mean', 'median'],
'valuation_score': 'mean'
}).reset_index()
undervalued_stocks = val_pandas[val_pandas['value_category'] == 'undervalued'].nlargest(20, 'comprehensive_score')
growth_stocks = val_pandas[val_pandas['growth_score'] > 0.8].nlargest(15, 'growth_score')
value_distribution = val_pandas['value_category'].value_counts().to_dict()
sector_valuation = val_pandas.groupby('stock_code').agg({
'valuation_score': 'mean',
'quality_score': 'mean',
'comprehensive_score': 'mean'
}).reset_index()
result_data = {
'market_valuation_trends': market_valuation.to_dict('records'),
'undervalued_opportunities': undervalued_stocks[['stock_code', 'stock_name', 'comprehensive_score', 'pe_ratio', 'pb_ratio']].to_dict('records'),
'growth_opportunities': growth_stocks[['stock_code', 'stock_name', 'growth_score', 'revenue_growth', 'profit_growth']].to_dict('records'),
'valuation_distribution': value_distribution,
'overall_market_score': val_pandas['valuation_score'].mean()
}
return JsonResponse(result_data)
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊