105-基于Flask的珍爱网相亲数据可视化分析系统
💕 基于Flask的珍爱网相亲数据可视化分析系统
一个集数据可视化、AI智能分析、用户管理于一体的现代化相亲数据分析平台
📋 目录
- 项目概述
- 系统架构
- 核心功能
- 技术实现
- 数据可视化
- AI智能分析
- 用户管理
- 部署指南
- 项目亮点
- 总结与展望
🎯 项目概述
项目背景
在当今数字化时代,相亲市场的数据分析变得越来越重要。本项目基于珍爱网的真实相亲数据,构建了一个功能完整的数据可视化分析系统,旨在为用户提供全面的相亲市场洞察和智能分析服务。
项目目标
- 📊 数据可视化: 多维度展示相亲数据特征
- 🤖 AI智能分析: 提供智能化的数据分析和建议
- 👥 用户管理: 完整的用户注册、登录、权限管理
- 🔍 数据探索: 支持高级搜索和数据筛选
- 📈 趋势分析: 实时数据统计和趋势分析
核心特性
- 🎨 现代化UI设计: 响应式布局,支持移动端访问
- 📊 丰富的数据可视化: 柱状图、饼图、词云、地图等
- 🤖 AI智能对话: 集成智谱AI ChatGLM模型
- 🔍 高级搜索功能: 多条件筛选和数据查询
- 📱 个性化推荐: 基于用户偏好的智能推荐
- 🔒 安全可靠: 完善的用户认证和数据保护
🏗️ 系统架构
技术栈
后端技术栈:
├── Python 3.8+
├── Flask 2.3+ (轻量级Web框架)
├── SQLAlchemy (ORM数据库操作)
├── SQLite (轻量级数据库)
├── 智谱AI ChatGLM (AI智能分析引擎)
├── jieba (中文分词处理)
├── pandas (数据分析处理)
├── numpy (数值计算)
└── matplotlib (数据可视化)
前端技术栈:
├── HTML5 + CSS3
├── JavaScript (ES6+)
├── Bootstrap 5.3 (响应式UI框架)
├── Chart.js 4.0 (数据可视化图表)
├── ECharts (高级图表库)
├── Font Awesome (图标库)
└── AOS (滚动动画库)
项目结构
code/
├── app/ # Flask应用核心
│ ├── __init__.py # 应用初始化配置
│ ├── ai_analyzer.py # AI智能分析模块
│ ├── extensions.py # Flask扩展配置
│ ├── models.py # 数据模型定义
│ └── routes/ # 路由模块
│ ├── admin.py # 管理员路由
│ ├── api.py # API接口
│ ├── auth.py # 认证路由
│ ├── main.py # 主页面路由
│ └── user.py # 用户路由
├── data/ # 数据文件和处理脚本
│ ├── dating_data.csv # 珍爱网相亲数据
│ ├── spider.py # 数据爬虫脚本
│ ├── city_extractor.py # 城市数据提取
│ └── process_wordcloud.py # 词云数据处理
├── static/ # 静态资源文件
│ ├── css/ # 样式文件
│ ├── js/ # JavaScript文件
│ └── image/ # 图片资源
├── templates/ # HTML模板
├── config.py # 配置文件
├── run.py # 启动文件
└── requirements.txt # 依赖包列表
项目演示
项目源码,码界筑梦坊,各大平台同名,欢迎咨询,文章底部含联系方式卡片哔哩哔哩个人主页
🚀 核心功能
1. 数据可视化功能
城市分布分析
@api.route('/stats/city')
def city_stats():"""城市分布统计"""try:# 获取城市数据city_data = db.session.query(DatingData.city,func.count(DatingData.id).label('count')).filter(DatingData.city.isnot(None),DatingData.city != '').group_by(DatingData.city).order_by(func.count(DatingData.id).desc()).limit(20).all()cities = [item.city for item in city_data]counts = [item.count for item in city_data]return jsonify({'cities': cities,'counts': counts})except Exception as e:return jsonify({'error': str(e)}), 500
功能特点:
- 📍 展示各城市相亲数据量分布
- 🏆 Top 20城市排名展示
- 📈 动态柱状图交互
- 🔍 支持数据筛选和排序
人口统计学分析
年龄分布:
@api.route('/stats/age_distribution')
def age_distribution_stats():"""年龄分布统计"""try:# 年龄区间统计age_ranges = [(18, 25), (26, 30), (31, 35), (36, 40), (41, 45), (46, 50), (51, 60)]age_stats = []for start, end in age_ranges:count = DatingData.query.filter(DatingData.age >= start,DatingData.age <= end).count()age_stats.append({'range': f'{start}-{end}岁','count': count})return jsonify(age_stats)except Exception as e:return jsonify({'error': str(e)}), 500
性别比例:
@api.route('/stats/gender')
def gender_stats():"""性别比例统计"""try:male_count = DatingData.query.filter_by(gender='男').count()female_count = DatingData.query.filter_by(gender='女').count()return jsonify({'male': male_count,'female': female_count,'total': male_count + female_count})except Exception as e:return jsonify({'error': str(e)}), 500
2. AI智能分析功能
智能对话系统
class AIAnalyzer:"""AI分析器,支持多种AI模型"""def __init__(self):self.logger = logging.getLogger(__name__)self.chatglm_api_key = os.getenv('CHATGLM_API_KEY', '')def chat_with_chatglm(self, text: str) -> str:"""调用智谱AI ChatGLM接口"""try:if not self.chatglm_api_key:return "抱歉,AI服务暂时不可用。"url = "https://open.bigmodel.cn/api/paas/v4/chat/completions"headers = {"Content-Type": "application/json","Authorization": f"Bearer {self.chatglm_api_key}"}payload = {"model": "glm-4","messages": [{"role": "user", "content": text}]}response = requests.post(url, headers=headers, json=payload, timeout=30)if response.status_code == 200:result = response.json()return result['choices'][0]['message']['content']else:return "抱歉,AI服务暂时不可用。"except Exception as e:self.logger.error(f"ChatGLM对话失败: {e}")return "抱歉,AI服务暂时不可用。"
功能特点:
- 💬 集成智谱AI ChatGLM模型
- 🗣️ 支持自然语言查询
- 💡 提供个性化建议和分析
- 📝 对话历史记录保存
数据分析功能
- 📈 数据趋势分析
- 👤 用户画像生成
- 💕 匹配度评估
- 📊 市场洞察报告
3. 用户管理功能
用户认证系统
class User(UserMixin, db.Model):"""用户模型"""id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)password_hash = db.Column(db.String(128))created_at = db.Column(db.DateTime, default=datetime.utcnow)is_active = db.Column(db.Boolean, default=True)def set_password(self, password):self.password_hash = generate_password_hash(password)def check_password(self, password):return check_password_hash(self.password_hash, password)
用户注册/登录
@auth.route('/register', methods=['GET', 'POST'])
def register():"""用户注册"""if request.method == 'POST':username = request.form.get('username')email = request.form.get('email')password = request.form.get('password')# 验证用户信息if User.query.filter_by(username=username).first():flash('用户名已存在')return redirect(url_for('auth.register'))if User.query.filter_by(email=email).first():flash('邮箱已被注册')return redirect(url_for('auth.register'))# 创建新用户user = User(username=username, email=email)user.set_password(password)db.session.add(user)db.session.commit()flash('注册成功!请登录')return redirect(url_for('auth.login'))return render_template('auth/register.html')
📊 数据可视化
1. 图表展示
Chart.js 柱状图
// 城市分布图表
function renderCityChart(data) {const ctx = document.getElementById('cityChart').getContext('2d');new Chart(ctx, {type: 'bar',data: {labels: data.cities,datasets: [{label: '用户数量',data: data.counts,backgroundColor: 'rgba(255, 107, 157, 0.8)',borderColor: 'rgba(255, 107, 157, 1)',borderWidth: 2}]},options: {responsive: true,plugins: {legend: {position: 'top',},title: {display: true,text: '城市分布统计'}},scales: {y: {beginAtZero: true}}}});
}
ECharts 词云图
// 自我介绍词云
function renderWordCloud(data) {const chart = echarts.init(document.getElementById('wordcloud'));const option = {series: [{type: 'wordCloud',shape: 'circle',left: 'center',top: 'center',width: '70%',height: '80%',right: null,bottom: null,sizeRange: [12, 60],rotationRange: [-90, 90],rotationStep: 45,gridSize: 8,drawOutOfBound: false,textStyle: {fontFamily: 'sans-serif',fontWeight: 'bold',color: function () {return 'rgb(' + [Math.round(Math.random() * 160),Math.round(Math.random() * 160),Math.round(Math.random() * 160)].join(',') + ')';}},emphasis: {focus: 'self',textStyle: {shadowBlur: 10,shadowColor: '#333'}},data: data}]};chart.setOption(option);
}
2. 数据统计
实时数据统计
@api.route('/stats/overview')
def stats_overview():"""数据概览统计"""try:total_users = DatingData.query.count()male_count = DatingData.query.filter_by(gender='男').count()female_count = DatingData.query.filter_by(gender='女').count()# 平均年龄avg_age = db.session.query(func.avg(DatingData.age)).scalar()# 平均身高avg_height = db.session.query(func.avg(DatingData.height)).scalar()return jsonify({'total_users': total_users,'male_count': male_count,'female_count': female_count,'male_ratio': round(male_count / total_users * 100, 1),'female_ratio': round(female_count / total_users * 100, 1),'avg_age': round(avg_age, 1),'avg_height': round(avg_height, 1)})except Exception as e:return jsonify({'error': str(e)}), 500
🤖 AI智能分析
1. 智能对话界面
前端实现
<!-- AI聊天页面 -->
<div class="chat-container"><!-- 欢迎消息 --><div class="message-bubble message-ai"><div class="d-flex align-items-center mb-2"><i class="fas fa-robot me-2" style="color: #ff6b9d;"></i><strong>AI助手</strong></div><p class="mb-0">你好!我是你的AI情感助手 💕 我可以帮你分析相亲数据、提供情感建议,或者回答任何关于爱情的问题。</p></div><!-- 快速问题按钮 --><div class="mt-4"><p class="text-muted mb-3"><i class="fas fa-lightbulb me-2"></i>快速问题:</p><div class="d-flex flex-wrap gap-2"><button class="btn btn-outline-primary btn-sm" onclick="askQuestion('如何提高相亲成功率?')"><i class="fas fa-star me-1"></i>提高相亲成功率</button><button class="btn btn-outline-primary btn-sm" onclick="askQuestion('数据分析显示什么?')"><i class="fas fa-chart-bar me-1"></i>数据分析</button></div></div><!-- 消息容器 --><div id="messages-container"></div>
</div>
JavaScript交互
// 发送消息
function sendMessage() {const messageInput = document.getElementById('message-input');const message = messageInput.value.trim();if (message) {appendMessage(message, 'user');messageInput.value = '';showWaitingMessage(true);fetch('/api/ai/chat', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ message: message,model: 'chatglm'})}).then(response => response.json()).then(data => {hideWaitingMessage();if (data.response) {appendMessage(data.response, 'ai');} else {appendMessage(data.error || '抱歉,我现在无法回答这个问题。', 'ai');}}).catch(error => {hideWaitingMessage();appendMessage('网络错误,请检查连接后重试。', 'ai');});}
}
2. 数据分析功能
性格分析
def analyze_personality_text(text):"""分析文本中的性格特点"""if not text:return {}# 性格特征关键词字典personality_keywords = {'外向开朗': ['开朗', '外向', '活泼', '热情', '爱笑', '幽默'],'内向稳重': ['稳重', '内向', '安静', '沉稳', '成熟', '理性'],'积极乐观': ['乐观', '积极', '阳光', '正能量', '向上'],'温柔体贴': ['温柔', '体贴', '善解人意', '细心', '关心'],'独立自信': ['独立', '自信', '自强', '自主', '有主见']}# 统计各性格特征的出现次数trait_scores = {}text_lower = text.lower()for trait, keywords in personality_keywords.items():score = 0for keyword in keywords:if keyword in text_lower:score += 1if score > 0:trait_scores[trait] = scorereturn trait_scores
👥 用户管理
1. 用户功能
用户注册/登录
- 🔐 安全的用户认证系统
- 📝 用户信息验证
- 🔒 密码加密存储
- 📧 邮箱验证(可选)
个人资料管理
- 👤 个人信息编辑
- 🔐 密码修改
- 📸 头像上传
- ⚙️ 偏好设置
2. 管理员功能
用户管理
@admin.route('/users')
@login_required
@admin_required
def manage_users():"""用户管理"""page = request.args.get('page', 1, type=int)users = User.query.paginate(page=page, per_page=20, error_out=False)return render_template('admin/users.html', users=users)
数据管理
- 📊 数据统计查看
- 🔄 数据更新管理
- 📈 系统监控
- 🛠️ 系统设置
🚀 部署指南
1. 环境准备
# 克隆项目
git clone <repository-url>
cd code# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows# 安装依赖
pip install -r requirements.txt
2. 数据库配置
# config.py
class Config:SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev'SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \'sqlite:///' + os.path.join(basedir, 'app.db')SQLALCHEMY_TRACK_MODIFICATIONS = False
3. AI模型配置
# 设置环境变量
export CHATGLM_API_KEY=your_chatglm_api_key_here
export SECRET_KEY=your_secret_key_here
4. 启动应用
# 初始化数据库
flask db upgrade# 启动应用
python run.py
🌟 项目亮点
1. 技术先进性
- 多模型AI集成: 支持Ollama、OpenAI、ChatGLM等多种AI模型
- 现代化UI设计: 采用玻璃拟态设计,用户体验优秀
- 响应式布局: 完美适配各种设备屏幕
- 实时数据更新: 动态数据展示和趋势分析
2. 功能完整性
- 数据可视化: 丰富的图表展示和交互功能
- AI智能分析: 智能对话和数据分析功能
- 用户管理: 完整的用户认证和权限管理
- 搜索功能: 高级搜索和数据筛选
3. 扩展性强
- 模块化设计: 清晰的代码结构和模块划分
- 插件化架构: 易于添加新功能和扩展
- API接口: 完善的RESTful API设计
- 配置灵活: 支持多种部署环境
4. 用户体验
- 直观的界面: 简洁明了的数据展示
- 流畅的交互: 响应迅速的页面操作
- 个性化服务: 基于用户偏好的智能推荐
- 移动端适配: 完美的移动端体验
📈 数据展示
1. 数据概览
- 总用户数: 10,000+
- 数据维度: 年龄、性别、身高、学历、薪资、城市等
- 数据来源: 珍爱网真实相亲数据
- 更新频率: 实时更新
2. 可视化效果
- 城市分布: 柱状图展示各城市用户分布
- 年龄分布: 饼图展示年龄区间分布
- 性别比例: 环形图展示男女比例
- 词云分析: 基于自我介绍的词云展示
3. AI分析能力
- 智能对话: 自然语言查询和回答
- 数据分析: 趋势分析和洞察报告
- 个性化建议: 基于数据的个性化推荐
- 情感分析: 文本情感倾向分析
🎯 总结与展望
项目成果
- 技术实现: 成功构建了完整的相亲数据可视化分析系统
- 功能完善: 涵盖了数据展示、AI分析、用户管理等核心功能
- 用户体验: 提供了现代化、直观的用户界面
- 扩展性: 具备良好的扩展性和维护性
技术收获
- Flask开发: 深入理解Flask框架的应用开发
- 数据可视化: 掌握了多种图表库的使用方法
- AI集成: 学会了多种AI模型的集成技术
- 前端开发: 提升了现代化前端开发技能
未来规划
- 功能扩展: 添加更多AI功能和数据分析能力
- 性能优化: 进一步提升系统性能和响应速度
- 用户体验: 持续改进用户界面和交互体验
- 数据安全: 加强数据保护和隐私安全
技术栈总结
- 后端: Flask + SQLAlchemy + AI模型集成
- 前端: HTML5 + CSS3 + JavaScript + Bootstrap
- 数据可视化: Chart.js + ECharts
- AI: 智谱AI ChatGLM + OpenAI + Ollama
- 数据库: SQLite/MySQL
- 部署: 支持Docker容器化部署
这个项目展示了如何将现代Web技术与AI技术相结合,为用户提供智能化的数据分析服务。通过模块化设计和良好的代码组织,项目具有良好的可维护性和扩展性,为相亲数据分析领域提供了一个完整的解决方案。
本文详细介绍了珍爱网相亲数据可视化分析系统的设计与实现,希望对读者有所帮助。如有疑问,欢迎交流讨论!
📚 参考资料
- Flask官方文档
- Chart.js官方文档
- ECharts官方文档
- 智谱AI官方文档
- Bootstrap 5文档
🔗 相关链接
- 项目GitHub仓库
- 在线演示地址
- 技术文档
- 后端: Flask + SQLAlchemy + AI模型集成
- 前端: HTML5 + CSS3 + JavaScript + Bootstrap
- 数据可视化: Chart.js + ECharts
- AI: 智谱AI ChatGLM + OpenAI + Ollama
- 数据库: SQLite/MySQL
- 部署: 支持Docker容器化部署
这个项目展示了如何将现代Web技术与AI技术相结合,为用户提供智能化的数据分析服务。通过模块化设计和良好的代码组织,项目具有良好的可维护性和扩展性,为相亲数据分析领域提供了一个完整的解决方案。
本文详细介绍了珍爱网相亲数据可视化分析系统的设计与实现,希望对读者有所帮助。如有疑问,欢迎交流讨论!
📚 参考资料
- Flask官方文档
- Chart.js官方文档
- ECharts官方文档
- 智谱AI官方文档
- Bootstrap 5文档
🔗 相关链接
- 项目GitHub仓库
- 在线演示地址
- 技术文档
- 问题反馈