当前位置:   article > 正文

利用Spark进行房地产分析 #Hadoop Spark Mysql_基于hadoop房产大数据的可视化分析

基于hadoop房产大数据的可视化分析

文章目录


前言

   本文对如何开发基于sparkHadoop的大数据分析平台进行了广泛和深入的研究,其范围包括python爬虫、Java、spark离线数据分析、Hadoop。

Spark的四大优点

  1. :与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上;而基于磁盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效地处理数据流。
  2. 容易使用:Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同应用。而且Spark支持交互式的Python和Scala的Shell,这意味着可以非常方便的在这些Shell中使用Spark集群来验证解决问题的方法,而不是像以前一样,需要打包、上传集群、验证等。这对于原型开发非常重要。
  3. 通用性:Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。
    这些不同类型的处理都可以在同一应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台处理问题,减少开发和维护的人力成本和部署平台的物理成本。当然还有,作为统一的解决方案,Spark并没有以牺牲性能为代价。相反,在性能方面Spark具有巨大优势。

背景

房地产数据是非常有价值的数据资源,可以帮助政府监管房地产市场、协助开发商决策、指导银行贷款和投资决策等。而 Spark 作为大数据处理框架,可以处理大规模的房地产数据,进行数据分析、预测和挖掘,为房地产业提供更多的洞察和启示。

数据介绍

数据是58同城网站爬虫爬取的数据并在python中数据清洗 导入到mysql数据库,数据如下


指标介绍

1.城区和街道进行数量统计,分析房产分布和热门地区。

主要步骤介绍

  1. 地址信息分离: 通过split函数将原始地址字段分离为不同的部分,例如城市、社区和详细地址,并将这些信息分别存储在新的列中,如“partition”、“Community”和“DetailedAddress”。

  2. 统计城区数量: 使用distinctcount函数统计不同城区的数量,得到城区的唯一计数。

  3. 计算热门城区和街道: 通过对城区和详细地址进行分组统计,计算每个城区和街道的房产数量。热门城区是按房产数量降序排列的所有城区列表,而热门街道是按房产数量降序排列并选择前五的街道列表。

  4. 数据写回: 提供了可选的代码片段,指示如何将分离后的结果写回到数据库,使用了write.format和相应的数据库连接选项。

  1. import org.apache.spark.sql.SparkSession
  2. import org.apache.spark.sql.functions._
  3. object AddressData {
  4. def main(args: Array[String]): Unit = {
  5. val spark = SparkSession.builder
  6. .appName("AddressDataSeparation")
  7. .master("local[*]")
  8. .getOrCreate()
  9. // 从数据库读取数据
  10. val jdbcDF = spark.read.format("jdbc")
  11. .option("url", "jdbc:mysql://xxxxxxxxxx:3306/house?useUnicode=true&characterEncoding=utf8&useSSL=false")
  12. .option("dbtable", "housedata2")
  13. .option("user", "root")
  14. .option("password", "")
  15. .load()
  16. // 分离地址信息
  17. val separatedDF = jdbcDF.withColumn("partition", split(col("Address"), "-").getItem(0))
  18. .withColumn("Community", split(col("Address"), "-").getItem(1))
  19. .withColumn("DetailedAddress", split(col("Address"), "-").getItem(2))
  20. // 统计城区数量
  21. val distinctCityCount = separatedDF.select("partition").distinct().count()
  22. // 计算热门城区
  23. val popularCities = separatedDF.groupBy("partition").count().orderBy(desc("count"))
  24. // 计算热门街道
  25. val popularStreets = separatedDF.groupBy("DetailedAddress").count().orderBy(desc("count")).limit(5)
  26. println("城区数量:",distinctCityCount)
  27. //热门城区
  28. popularCities.show()
  29. //热门街道
  30. popularStreets.show()
  31. //显示分离结果
  32. separatedDF.show()
  33. //可以选择将分离后的结果写回数据库
  34. separatedDF.write.format("jdbc")
  35. .option("url", "jdbc:mysql://your_mysql_host:port/your_database")
  36. .option("dbtable", "new_table")
  37. .option("user", "your_username")
  38. .option("password", "your_password")
  39. .save()
  40. spark.stop()
  41. }
  42. }

2.分析房产数据表中不同建造年份的房产数量情况

主要步骤介绍

  1. 提取年份信息: 通过对建造时间字段进行处理,使用 substring 函数提取了年份信息,并创建了一个名为 "Year" 的新列。

  2. 按年份分组计数: 对提取出的年份信息进行分组,并使用 groupBycount 方法计算每个年份出现的次数,即统计了每个年份对应的房产数量。

  1. import org.apache.spark.sql.SparkSession
  2. import org.apache.spark.sql.functions._
  3. object ConstructionYear {
  4. def main(args: Array[String]): Unit = {
  5. val spark = SparkSession.builder
  6. .appName("ConstructionYearStatistics")
  7. .master("local[*]")
  8. .getOrCreate()
  9. // MySQL连接信息
  10. val mysqlHost = "xxxxxxxxxxxx"
  11. val mysqlPort = 3306
  12. val database = "house"
  13. val tableName = "housedata2"
  14. val username = "root"
  15. val password = ""
  16. // 读取MySQL数据库的建造时间信息
  17. val jdbcUrl = s"jdbc:mysql://$mysqlHost:$mysqlPort/$database?useUnicode=true&characterEncoding=utf8&useSSL=false"
  18. val connectionProperties = new java.util.Properties()
  19. connectionProperties.put("user", username)
  20. connectionProperties.put("password", password)
  21. val df = spark.read.jdbc(jdbcUrl, tableName, connectionProperties)
  22. // 提取年份信息并分组计数
  23. val yearCounts = df.withColumn("Year", substring(col("Constructiontime"), 1, 4))
  24. .groupBy("Year")
  25. .count()
  26. // 打印结果
  27. yearCounts.show()
  28. spark.stop()
  29. }
  30. }

3.分析不同地区、楼层和户型的房产平均单价和总价的计算,高价房产的识别(价格超过 100 万),以及不同户型房产数量占总量的比例。

主要步骤介绍

  1. 按地区、楼层或户型分组计算平均单价和总价:

    • 使用 groupBy 对地区、楼层和户型进行分组。
    • 使用 agg 函数计算每个组的平均单价和总价。
  2. 识别高价房产:

    • 过滤出价格高于 100 万的房产数据。
  3. 计算不同户型的房产数量占总量的比例:

    • 通过 groupBy 对不同户型进行分组。
    • 使用 count 统计每种户型的数量。
    • 使用 withColumn 计算每种户型数量在总房产数量中的比例。
  1. import org.apache.spark.sql.{SparkSession, functions => F}
  2. import org.apache.spark.sql.functions._
  3. object RealEstateAnalysis {
  4. def main(args: Array[String]): Unit = {
  5. val spark = SparkSession.builder
  6. .appName("Real Estate Analysis")
  7. .master("local[*]")
  8. .getOrCreate()
  9. import spark.implicits._
  10. // 从数据库读取数据
  11. val jdbcDF = spark.read.format("jdbc")
  12. .option("url", "jdbc:mysql://xxxxxxxxx:3306/house?useUnicode=true&characterEncoding=utf8&useSSL=false")
  13. .option("dbtable", "housedata2")
  14. .option("user", "root")
  15. .option("password", "")
  16. .load()
  17. // 分离地址信息
  18. val separatedDF = jdbcDF.withColumn("City", split(col("Address"), "-").getItem(0))
  19. .withColumn("Community", split(col("Address"), "-").getItem(1))
  20. .withColumn("DetailedAddress", split(col("Address"), "-").getItem(2))
  21. // 1.按地区、楼层或户型分组计算平均单价和总价
  22. val averagePriceAnalysis = separatedDF
  23. .groupBy($"City", $"Floor", $"Housetype")
  24. .agg(
  25. F.avg($"Price").as("Average Price"),
  26. F.sum($"Price").as("Total Price")
  27. )
  28. // 2. 识别高价房产(这里假设阈值是100万)
  29. val highValueProperties = jdbcDF.filter($"Price" > 100)
  30. // 3. 计算不同户型的房产数量占总量的比例
  31. val housetypeComposition = jdbcDF
  32. .groupBy($"Housetype")
  33. .count()
  34. .withColumn("Percentage", $"count" / F.sum("count").over())
  35. // // 显示结果
  36. averagePriceAnalysis.show()
  37. highValueProperties.show()
  38. housetypeComposition.show()
  39. // 停止Spark会话
  40. spark.stop()
  41. }
  42. }

 


总结

这些代码可以展示了如何使用Spark进行房地产数据分析。从分离地址信息到计算平均价格和高价房数量,再到不同户型的房产比例,这些指标为理解房产市场提供了重要见解。通过数据分析,可以更深入了解房产市场的地区趋势、价格分布和市场结构。这些工具和指标为房地产决策者提供了更全面的数据支持,帮助他们做出更明智的决策。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/648630
推荐阅读
相关标签
  

闽ICP备14008679号