💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
@TOC
基于大数据的帕金森病数据可视化分析系统介绍
帕金森病数据可视化分析系统是一套基于Hadoop+Spark大数据架构的综合性数据分析平台,专门针对帕金森病患者的多维度数据进行深度挖掘和可视化展示。该系统采用分布式计算框架处理海量医疗数据,通过Spark SQL对帕金森病相关数据集进行高效查询和统计分析,结合Pandas和NumPy进行科学计算处理。系统前端基于Vue+ElementUI构建现代化用户界面,集成Echarts图表库实现数据的多维度可视化呈现,包括语音声学特征分析、多维特征关联性探索以及非线性动力学分析等专业功能模块。后端采用Python Django框架提供RESTful API接口,支持用户管理、数据管理、统计分析等核心业务功能,数据存储采用MySQL数据库确保数据的一致性和可靠性。整个系统架构充分发挥了大数据技术在医疗数据处理方面的优势,为帕金森病的数据分析研究提供了完整的技术解决方案。
基于大数据的帕金森病数据可视化分析系统演示视频
基于大数据的帕金森病数据可视化分析系统演示图片
基于大数据的帕金森病数据可视化分析系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
import mysql.connector
spark = SparkSession.builder.appName("ParkinsonDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
@csrf_exempt
def parkinson_data_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
patient_id = data.get('patient_id')
analysis_type = data.get('analysis_type')
connection = mysql.connector.connect(host='localhost', database='parkinson_db', user='root', password='password')
cursor = connection.cursor(dictionary=True)
if analysis_type == 'voice_analysis':
query = "SELECT voice_frequency, voice_amplitude, voice_jitter, voice_shimmer, voice_hnr FROM parkinson_voice_data WHERE patient_id = %s"
cursor.execute(query, (patient_id,))
voice_data = cursor.fetchall()
if voice_data:
df_voice = pd.DataFrame(voice_data)
spark_df = spark.createDataFrame(df_voice)
spark_df.createOrReplaceTempView("voice_analysis")
frequency_stats = spark.sql("SELECT AVG(voice_frequency) as avg_freq, MAX(voice_frequency) as max_freq, MIN(voice_frequency) as min_freq, STDDEV(voice_frequency) as std_freq FROM voice_analysis").collect()[0]
amplitude_correlation = spark.sql("SELECT CORR(voice_frequency, voice_amplitude) as freq_amp_corr FROM voice_analysis").collect()[0]['freq_amp_corr']
jitter_analysis = spark.sql("SELECT AVG(voice_jitter) as avg_jitter, PERCENTILE_APPROX(voice_jitter, 0.5) as median_jitter FROM voice_analysis").collect()[0]
shimmer_variance = spark.sql("SELECT VARIANCE(voice_shimmer) as shimmer_var FROM voice_analysis").collect()[0]['shimmer_var']
hnr_distribution = spark.sql("SELECT voice_hnr, COUNT(*) as frequency FROM voice_analysis GROUP BY voice_hnr ORDER BY voice_hnr").collect()
voice_quality_score = (frequency_stats['avg_freq'] / 150.0) * 0.3 + (1 / (jitter_analysis['avg_jitter'] + 0.001)) * 0.4 + (amplitude_correlation if amplitude_correlation else 0.5) * 0.3
abnormal_patterns = []
if frequency_stats['std_freq'] > 15:
abnormal_patterns.append("频率变化异常")
if jitter_analysis['avg_jitter'] > 0.02:
abnormal_patterns.append("语音抖动明显")
if shimmer_variance > 0.1:
abnormal_patterns.append("幅度不稳定")
result_data = {
'frequency_analysis': {
'average': round(frequency_stats['avg_freq'], 2),
'max': round(frequency_stats['max_freq'], 2),
'min': round(frequency_stats['min_freq'], 2),
'standard_deviation': round(frequency_stats['std_freq'], 2)
},
'correlation_analysis': {
'frequency_amplitude_correlation': round(amplitude_correlation if amplitude_correlation else 0, 3)
},
'jitter_analysis': {
'average_jitter': round(jitter_analysis['avg_jitter'], 4),
'median_jitter': round(jitter_analysis['median_jitter'], 4)
},
'quality_assessment': {
'voice_quality_score': round(voice_quality_score, 2),
'abnormal_patterns': abnormal_patterns,
'overall_status': '正常' if voice_quality_score > 0.7 else '异常' if voice_quality_score < 0.4 else '警戒'
}
}
cursor.close()
connection.close()
return JsonResponse({'success': True, 'analysis_result': result_data})
return JsonResponse({'success': False, 'error': 'Invalid request method'})
@csrf_exempt
def multi_dimensional_correlation_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
dataset_id = data.get('dataset_id')
correlation_features = data.get('features', ['age', 'voice_frequency', 'motor_score', 'tremor_amplitude'])
connection = mysql.connector.connect(host='localhost', database='parkinson_db', user='root', password='password')
cursor = connection.cursor(dictionary=True)
feature_columns = ', '.join(correlation_features)
query = f"SELECT patient_id, {feature_columns}, disease_stage FROM parkinson_patient_data WHERE dataset_id = %s"
cursor.execute(query, (dataset_id,))
correlation_data = cursor.fetchall()
if correlation_data:
df_correlation = pd.DataFrame(correlation_data)
numeric_columns = [col for col in correlation_features if df_correlation[col].dtype in ['int64', 'float64']]
correlation_matrix = df_correlation[numeric_columns].corr()
spark_df = spark.createDataFrame(df_correlation)
spark_df.createOrReplaceTempView("correlation_analysis")
stage_correlation = {}
for stage in ['early', 'moderate', 'advanced']:
stage_data = spark.sql(f"SELECT * FROM correlation_analysis WHERE disease_stage = '{stage}'")
if stage_data.count() > 0:
stage_pandas = stage_data.toPandas()
stage_corr = stage_pandas[numeric_columns].corr()
stage_correlation[stage] = stage_corr.to_dict()
feature_importance = {}
for feature in numeric_columns:
feature_stats = spark.sql(f"SELECT AVG({feature}) as avg_val, STDDEV({feature}) as std_val, COUNT(*) as count_val FROM correlation_analysis WHERE {feature} IS NOT NULL").collect()[0]
coefficient_of_variation = feature_stats['std_val'] / feature_stats['avg_val'] if feature_stats['avg_val'] != 0 else 0
correlation_sum = sum(abs(correlation_matrix[feature][other_feature]) for other_feature in numeric_columns if other_feature != feature)
importance_score = correlation_sum * coefficient_of_variation
feature_importance[feature] = {
'importance_score': round(importance_score, 4),
'avg_value': round(feature_stats['avg_val'], 2),
'std_deviation': round(feature_stats['std_val'], 2),
'sample_count': feature_stats['count_val']
}
strong_correlations = []
for i, feature1 in enumerate(numeric_columns):
for j, feature2 in enumerate(numeric_columns[i+1:], i+1):
corr_value = correlation_matrix.iloc[i, j]
if abs(corr_value) > 0.5:
strong_correlations.append({
'feature_pair': f"{feature1} - {feature2}",
'correlation_coefficient': round(corr_value, 3),
'correlation_strength': 'strong positive' if corr_value > 0.7 else 'strong negative' if corr_value < -0.7 else 'moderate'
})
cluster_analysis = spark.sql("SELECT disease_stage, COUNT(*) as patient_count, AVG(age) as avg_age FROM correlation_analysis GROUP BY disease_stage ORDER BY patient_count DESC").collect()
cluster_results = []
for cluster in cluster_analysis:
cluster_results.append({
'stage': cluster['disease_stage'],
'patient_count': cluster['patient_count'],
'average_age': round(cluster['avg_age'], 1)
})
result_data = {
'correlation_matrix': correlation_matrix.round(3).to_dict(),
'stage_correlations': stage_correlation,
'feature_importance_ranking': dict(sorted(feature_importance.items(), key=lambda x: x[1]['importance_score'], reverse=True)),
'strong_correlations': strong_correlations,
'cluster_analysis': cluster_results,
'analysis_summary': {
'total_features': len(numeric_columns),
'total_patients': len(correlation_data),
'significant_correlations': len(strong_correlations)
}
}
cursor.close()
connection.close()
return JsonResponse({'success': True, 'correlation_analysis': result_data})
return JsonResponse({'success': False, 'error': 'Invalid request method'})
@csrf_exempt
def nonlinear_dynamics_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
patient_id = data.get('patient_id')
time_series_type = data.get('time_series_type', 'tremor_signal')
window_size = data.get('window_size', 100)
connection = mysql.connector.connect(host='localhost', database='parkinson_db', user='root', password='password')
cursor = connection.cursor(dictionary=True)
if time_series_type == 'tremor_signal':
query = "SELECT timestamp, tremor_x, tremor_y, tremor_z FROM parkinson_tremor_data WHERE patient_id = %s ORDER BY timestamp"
cursor.execute(query, (patient_id,))
tremor_data = cursor.fetchall()
if tremor_data:
df_tremor = pd.DataFrame(tremor_data)
df_tremor['tremor_magnitude'] = np.sqrt(df_tremor['tremor_x']**2 + df_tremor['tremor_y']**2 + df_tremor['tremor_z']**2)
spark_df = spark.createDataFrame(df_tremor)
spark_df.createOrReplaceTempView("tremor_dynamics")
windowed_analysis = spark.sql(f"""
SELECT
ROW_NUMBER() OVER (ORDER BY timestamp) as window_id,
AVG(tremor_magnitude) OVER (ROWS BETWEEN {window_size-1} PRECEDING AND CURRENT ROW) as moving_avg,
STDDEV(tremor_magnitude) OVER (ROWS BETWEEN {window_size-1} PRECEDING AND CURRENT ROW) as moving_std,
MAX(tremor_magnitude) OVER (ROWS BETWEEN {window_size-1} PRECEDING AND CURRENT ROW) as moving_max,
MIN(tremor_magnitude) OVER (ROWS BETWEEN {window_size-1} PRECEDING AND CURRENT ROW) as moving_min,
tremor_magnitude,
timestamp
FROM tremor_dynamics
""").collect()
lyapunov_estimates = []
entropy_values = []
fractal_dimensions = []
for i in range(len(windowed_analysis) - window_size):
window_data = [row.tremor_magnitude for row in windowed_analysis[i:i+window_size]]
time_delayed_embedding = []
for j in range(len(window_data) - 3):
time_delayed_embedding.append([window_data[j], window_data[j+1], window_data[j+2]])
if len(time_delayed_embedding) > 10:
distances = []
for k in range(len(time_delayed_embedding) - 1):
dist = np.sqrt(sum((time_delayed_embedding[k][dim] - time_delayed_embedding[k+1][dim])**2 for dim in range(3)))
if dist > 0:
distances.append(dist)
if distances:
lyapunov_approx = np.mean([np.log(abs(d)) for d in distances if d > 0])
lyapunov_estimates.append(lyapunov_approx)
histogram, _ = np.histogram(window_data, bins=10)
probabilities = histogram / sum(histogram)
entropy = -sum(p * np.log2(p + 1e-10) for p in probabilities if p > 0)
entropy_values.append(entropy)
if len(window_data) > 20:
log_scales = np.log([2, 4, 8, 16])
log_counts = []
for scale in [2, 4, 8, 16]:
boxes = len(window_data) // scale
log_counts.append(np.log(max(1, boxes)))
if len(log_scales) > 1 and np.std(log_scales) > 0:
fractal_slope = np.polyfit(log_scales, log_counts, 1)[0]
fractal_dimensions.append(abs(fractal_slope))
chaos_indicators = {
'lyapunov_exponent': np.mean(lyapunov_estimates) if lyapunov_estimates else 0,
'sample_entropy': np.mean(entropy_values) if entropy_values else 0,
'fractal_dimension': np.mean(fractal_dimensions) if fractal_dimensions else 1.0
}
phase_space_reconstruction = []
tremor_values = [row.tremor_magnitude for row in windowed_analysis[-200:]]
for i in range(len(tremor_values) - 2):
phase_space_reconstruction.append({
'x': tremor_values[i],
'y': tremor_values[i+1],
'z': tremor_values[i+2]
})
periodicity_analysis = spark.sql("""
SELECT
COUNT(*) as total_points,
AVG(tremor_magnitude) as mean_amplitude,
PERCENTILE_APPROX(tremor_magnitude, 0.95) as amplitude_95th,
PERCENTILE_APPROX(tremor_magnitude, 0.05) as amplitude_5th
FROM tremor_dynamics
""").collect()[0]
amplitude_range = periodicity_analysis['amplitude_95th'] - periodicity_analysis['amplitude_5th']
regularity_score = 1.0 / (1.0 + chaos_indicators['sample_entropy'])
complexity_score = chaos_indicators['fractal_dimension'] * chaos_indicators['sample_entropy']
system_classification = 'chaotic' if chaos_indicators['lyapunov_exponent'] > 0 else 'periodic' if regularity_score > 0.7 else 'quasi-periodic'
result_data = {
'chaos_analysis': chaos_indicators,
'phase_space_points': phase_space_reconstruction[-50:],
'periodicity_metrics': {
'mean_amplitude': round(periodicity_analysis['mean_amplitude'], 3),
'amplitude_range': round(amplitude_range, 3),
'regularity_score': round(regularity_score, 3),
'complexity_score': round(complexity_score, 3)
},
'system_classification': {
'type': system_classification,
'confidence': round(abs(chaos_indicators['lyapunov_exponent']) * 100, 1),
'dominant_frequency': round(1.0 / (chaos_indicators['sample_entropy'] + 0.1), 2)
},
'temporal_patterns': {
'total_data_points': periodicity_analysis['total_points'],
'analysis_window_size': window_size,
'embedding_dimension': 3
}
}
cursor.close()
connection.close()
return JsonResponse({'success': True, 'nonlinear_analysis': result_data})
return JsonResponse({'success': False, 'error': 'Invalid request method'})
基于大数据的帕金森病数据可视化分析系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目