一、个人简介
💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
大数据框架:Hadoop+Spark(Hive需要定制修改) 开发语言:Java+Python(两个版本都支持) 数据库:MySQL 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery
《中国租房信息可视化分析系统》是基于大数据技术构建的租房市场信息分析平台,采用Hadoop+Spark分布式计算框架作为数据处理核心,结合Django后端框架和Vue+ElementUI+Echarts前端技术栈开发。系统通过HDFS存储海量租房数据,利用Spark SQL和Pandas、NumPy等数据分析工具对租房信息进行深度挖掘和统计分析。平台提供用户管理、租房信息管理等基础功能,重点实现租房基础特征分析、位置分析、设施分析、环境分析、市场分析和价格分析等核心分析模块。系统通过Echarts可视化组件构建数据大屏展示界面,将复杂的数据分析结果转化为直观的图表形式,帮助用户快速了解租房市场的整体状况、价格趋势、区域分布等关键信息,为租房决策提供数据支撑和参考依据。
三、视频解说
四、部分功能展示
五、部分代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, count, desc, asc
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
import pandas as pd
import numpy as np
from decimal import Decimal
import json
spark = SparkSession.builder.appName("RentalAnalysisSystem").getOrCreate()
@require_http_methods(["GET"])
def rental_location_analysis(request):
region = request.GET.get('region', '')
district = request.GET.get('district', '')
rental_df = spark.sql("SELECT * FROM rental_info_table")
if region:
rental_df = rental_df.filter(col("region") == region)
if district:
rental_df = rental_df.filter(col("district") == district)
location_stats = rental_df.groupBy("district", "subway_station").agg(
count("*").alias("total_count"),
avg("monthly_rent").alias("avg_rent"),
avg("area").alias("avg_area")
).orderBy(desc("total_count"))
location_data = location_stats.collect()
result_list = []
for row in location_data:
location_info = {
'district': row.district,
'subway_station': row.subway_station,
'property_count': row.total_count,
'average_rent': float(row.avg_rent) if row.avg_rent else 0,
'average_area': float(row.avg_area) if row.avg_area else 0
}
result_list.append(location_info)
district_summary = rental_df.groupBy("district").agg(
count("*").alias("district_total"),
avg("monthly_rent").alias("district_avg_rent")
).collect()
district_data = {row.district: {'total': row.district_total, 'avg_rent': float(row.district_avg_rent)} for row in district_summary}
return JsonResponse({
'status': 'success',
'location_analysis': result_list,
'district_summary': district_data
})
@require_http_methods(["GET"])
def rental_price_analysis(request):
price_range = request.GET.get('price_range', '')
room_type = request.GET.get('room_type', '')
rental_df = spark.sql("SELECT * FROM rental_info_table")
if price_range:
price_min, price_max = map(int, price_range.split('-'))
rental_df = rental_df.filter((col("monthly_rent") >= price_min) & (col("monthly_rent") <= price_max))
if room_type:
rental_df = rental_df.filter(col("room_type") == room_type)
price_distribution = rental_df.groupBy("room_type").agg(
count("*").alias("count"),
avg("monthly_rent").alias("avg_price"),
avg("unit_price").alias("avg_unit_price")
).orderBy("room_type")
price_trend_data = rental_df.groupBy("publish_month").agg(
avg("monthly_rent").alias("monthly_avg_rent"),
count("*").alias("monthly_count")
).orderBy("publish_month")
price_stats = price_distribution.collect()
trend_stats = price_trend_data.collect()
room_price_analysis = []
for row in price_stats:
room_analysis = {
'room_type': row.room_type,
'property_count': row.count,
'average_rent': float(row.avg_price) if row.avg_price else 0,
'average_unit_price': float(row.avg_unit_price) if row.avg_unit_price else 0
}
room_price_analysis.append(room_analysis)
trend_analysis = []
for row in trend_stats:
trend_info = {
'month': row.publish_month,
'average_rent': float(row.monthly_avg_rent) if row.monthly_avg_rent else 0,
'property_count': row.monthly_count
}
trend_analysis.append(trend_info)
overall_stats = rental_df.agg(
avg("monthly_rent").alias("overall_avg"),
count("*").alias("total_properties")
).collect()[0]
return JsonResponse({
'status': 'success',
'room_price_analysis': room_price_analysis,
'price_trend': trend_analysis,
'overall_average': float(overall_stats.overall_avg) if overall_stats.overall_avg else 0,
'total_properties': overall_stats.total_properties
})
@require_http_methods(["GET"])
def rental_facility_analysis(request):
facility_type = request.GET.get('facility_type', '')
rental_df = spark.sql("SELECT * FROM rental_info_table")
facility_columns = ['has_elevator', 'has_parking', 'has_air_conditioning', 'has_heating', 'has_balcony', 'has_kitchen']
facility_stats_list = []
for facility in facility_columns:
facility_stat = rental_df.groupBy(facility).agg(
count("*").alias("count"),
avg("monthly_rent").alias("avg_rent_with_facility")
).collect()
facility_analysis = {}
for row in facility_stat:
has_facility = bool(row[facility])
facility_analysis[has_facility] = {
'count': row.count,
'average_rent': float(row.avg_rent_with_facility) if row.avg_rent_with_facility else 0
}
facility_stats_list.append({
'facility_name': facility.replace('has_', ''),
'statistics': facility_analysis
})
comprehensive_facility_df = rental_df.withColumn(
"facility_score",
sum([col(facility_col).cast("int") for facility_col in facility_columns])
)
facility_score_analysis = comprehensive_facility_df.groupBy("facility_score").agg(
count("*").alias("property_count"),
avg("monthly_rent").alias("avg_rent_by_score")
).orderBy("facility_score")
score_data = facility_score_analysis.collect()
facility_score_stats = []
for row in score_data:
score_info = {
'facility_score': row.facility_score,
'property_count': row.property_count,
'average_rent': float(row.avg_rent_by_score) if row.avg_rent_by_score else 0
}
facility_score_stats.append(score_info)
return JsonResponse({
'status': 'success',
'individual_facility_analysis': facility_stats_list,
'comprehensive_facility_analysis': facility_score_stats
})
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊