✨作者主页 :IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
文章目录
一、前言
本系统名为《基于大数据的印度上市公司财务指标数据可视化分析》,主要面向计算机专业毕业设计场景,围绕印度上市公司的财务指标数据展开采集、清洗、统计与可视化展示。系统采用Hadoop与Spark作为大数据处理核心,利用HDFS完成数据存储,通过Spark SQL与Pandas、NumPy对印度上市公司财务数据进行清洗、聚合与指标计算,后端提供Python+Django与Java+Spring Boot两个版本,前端使用Vue、ElementUI、Echarts、HTML、CSS、JavaScript与jQuery进行页面构建与图表渲染,数据库采用MySQL保存业务数据与分析结果。功能上包含系统首页、大屏可视化、印度财务数据、营收盈利全景、资产负债结构、算法洞察挖掘、个人信息与修改密码等模块,能够把印度上市公司财务数据中的营收、盈利、资产负债等指标以图表和大屏形式直观呈现,并通过算法洞察挖掘模块对财务指标之间的关联和变化趋势做进一步分析。整体来说,这个系统把大数据处理技术与财务指标可视化分析结合起来,既能展示印度上市公司财务数据的整体情况,也能为毕设答辩提供一个相对完整、可运行、可讲解的项目案例。
二、开发环境
大数据框架:Hadoop+Spark(本次没用Hive,支持定制)
开发语言:Python+Java(两个版本都支持)
后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持)
前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery
详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy
数据库:MySQL
三、系统界面展示
- 印度上市公司财务指标数据可视化分析系统界面展示:









四、部分代码设计
- 项目实战-代码参考:
python
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, avg, desc, when, round as spark_round
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.http import require_GET
from .models import IndiaFinanceIndicator, FinanceInsightResult
spark = SparkSession.builder.appName("IndiaFinanceVisualAnalysis").master("local[*]").config("spark.sql.shuffle.partitions", "4").enableHiveSupport().getOrCreate()
@require_GET
def get_big_screen_data(request):
finance_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/india_finance").option("dbtable", "india_finance_indicator").option("user", "root").option("password", "123456").load()
finance_df.createOrReplaceTempView("india_finance_indicator")
total_company_df = spark.sql("SELECT COUNT(DISTINCT company_code) AS total_company, COUNT(DISTINCT industry_name) AS total_industry, SUM(revenue) AS total_revenue, SUM(net_profit) AS total_profit FROM india_finance_indicator WHERE data_year >= 2020")
total_company_row = total_company_df.collect()[0]
total_company = int(total_company_row["total_company"]) if total_company_row["total_company"] else 0
total_industry = int(total_company_row["total_industry"]) if total_company_row["total_industry"] else 0
total_revenue = float(total_company_row["total_revenue"]) if total_company_row["total_revenue"] else 0.0
total_profit = float(total_company_row["total_profit"]) if total_company_row["total_profit"] else 0.0
year_trend_df = spark.sql("SELECT data_year, ROUND(SUM(revenue), 2) AS year_revenue, ROUND(SUM(net_profit), 2) AS year_profit FROM india_finance_indicator WHERE data_year >= 2018 GROUP BY data_year ORDER BY data_year")
year_trend_list = year_trend_df.toPandas().to_dict(orient="records")
industry_df = spark.sql("SELECT industry_name, ROUND(SUM(revenue), 2) AS industry_revenue, ROUND(AVG(net_profit_rate), 4) AS avg_profit_rate FROM india_finance_indicator WHERE data_year >= 2020 GROUP BY industry_name ORDER BY industry_revenue DESC LIMIT 10")
industry_list = industry_df.toPandas().to_dict(orient="records")
result = {"total_company": total_company, "total_industry": total_industry, "total_revenue": round(total_revenue, 2), "total_profit": round(total_profit, 2), "year_trend": year_trend_list, "industry_rank": industry_list}
return JsonResponse({"code": 200, "msg": "大屏数据获取成功", "data": result})
@require_GET
def get_revenue_profit_panorama(request):
finance_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/india_finance").option("dbtable", "india_finance_indicator").option("user", "root").option("password", "123456").load()
finance_df.createOrReplaceTempView("india_finance_indicator")
company_revenue_df = spark.sql("SELECT company_code, company_name, industry_name, ROUND(SUM(revenue), 2) AS total_revenue, ROUND(SUM(net_profit), 2) AS total_profit, ROUND(AVG(net_profit_rate), 4) AS avg_profit_rate FROM india_finance_indicator WHERE data_year >= 2020 GROUP BY company_code, company_name, industry_name ORDER BY total_revenue DESC LIMIT 20")
company_revenue_list = company_revenue_df.toPandas().to_dict(orient="records")
profit_level_df = finance_df.withColumn("profit_level", when(col("net_profit_rate") >= 0.2, "高盈利").when((col("net_profit_rate") >= 0.08) & (col("net_profit_rate") < 0.2), "中等盈利").when((col("net_profit_rate") >= 0) & (col("net_profit_rate") < 0.08), "低盈利").otherwise("亏损"))
profit_level_df.createOrReplaceTempView("profit_level_table")
profit_level_count_df = spark.sql("SELECT profit_level, COUNT(*) AS level_count, ROUND(AVG(net_profit_rate), 4) AS avg_rate FROM profit_level_table GROUP BY profit_level ORDER BY level_count DESC")
profit_level_list = profit_level_count_df.toPandas().to_dict(orient="records")
revenue_profit_scatter_df = spark.sql("SELECT company_name, revenue, net_profit, net_profit_rate, data_year FROM india_finance_indicator WHERE data_year >= 2020 AND revenue IS NOT NULL AND net_profit IS NOT NULL ORDER BY revenue DESC LIMIT 100")
scatter_list = revenue_profit_scatter_df.toPandas().to_dict(orient="records")
result = {"company_revenue_rank": company_revenue_list, "profit_level_distribution": profit_level_list, "revenue_profit_scatter": scatter_list}
return JsonResponse({"code": 200, "msg": "营收盈利全景数据获取成功", "data": result})
@require_GET
def get_algorithm_insight(request):
finance_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/india_finance").option("dbtable", "india_finance_indicator").option("user", "root").option("password", "123456").load()
finance_df.createOrReplaceTempView("india_finance_indicator")
corr_source_df = spark.sql("SELECT revenue, net_profit, total_assets, total_liability, net_profit_rate, debt_asset_rate FROM india_finance_indicator WHERE data_year >= 2020 AND revenue IS NOT NULL AND net_profit IS NOT NULL AND total_assets IS NOT NULL AND total_liability IS NOT NULL")
corr_pdf = corr_source_df.toPandas()
corr_matrix = corr_pdf.corr(method="pearson").round(4)
corr_result = {"columns": corr_matrix.columns.tolist(), "matrix": corr_matrix.values.tolist()}
trend_df = spark.sql("SELECT data_year, ROUND(AVG(net_profit_rate), 4) AS avg_profit_rate, ROUND(AVG(debt_asset_rate), 4) AS avg_debt_rate, ROUND(AVG(revenue_growth_rate), 4) AS avg_growth_rate FROM india_finance_indicator WHERE data_year >= 2018 GROUP BY data_year ORDER BY data_year")
trend_list = trend_df.toPandas().to_dict(orient="records")
risk_df = finance_df.withColumn("risk_level", when((col("debt_asset_rate") > 0.7) & (col("net_profit_rate") < 0.05), "高风险").when((col("debt_asset_rate") > 0.5) & (col("net_profit_rate") < 0.1), "中风险").otherwise("低风险"))
risk_df.createOrReplaceTempView("risk_table")
risk_count_df = spark.sql("SELECT risk_level, COUNT(*) AS risk_count, ROUND(AVG(debt_asset_rate), 4) AS avg_debt, ROUND(AVG(net_profit_rate), 4) AS avg_profit FROM risk_table GROUP BY risk_level ORDER BY risk_count DESC")
risk_list = risk_count_df.toPandas().to_dict(orient="records")
insight_result = FinanceInsightResult.objects.create(corr_data=str(corr_result), trend_data=str(trend_list), risk_data=str(risk_list))
insight_result.save()
result = {"correlation_analysis": corr_result, "trend_analysis": trend_list, "risk_distribution": risk_list}
return JsonResponse({"code": 200, "msg": "算法洞察挖掘数据获取成功", "data": result})
五、论文参考
- 计算机毕业设计选题推荐-印度上市公司财务指标数据可视化分析系统-论文参考:

六、系统视频
- 印度上市公司财务指标数据可视化分析系统-项目视频:
项目演示视频
结语
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇