文章目录

  • 链家深圳二手房房价数据分析
    • 1. 链家数据爬取源码
    • 2. 雷达图的绘制
      • 2.1 源码
      • 2.2 雷达图效果图
    • 3. 饼状图的绘制
      • 3.1 源代码
      • 3.2 饼状图效果图
    • 4. 多维散点图
      • 4.1 源码
      • 4.2 多维散点图效果图
    • 5. 玫瑰图
      • 5.1 源码
      • 5.2 玫瑰图效果图
    • 6.折线图
      • 6.1源码
      • 6.2 折线图效果图

链家深圳二手房房价数据分析

1. 链家数据爬取源码

import csv
import pandas as pd
import requests
from lxml import etreeheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 ''Safari/537.36','Host': 'sz.lianjia.com','Referer': 'https://sz.lianjia.com/ershoufang/'
}def getUrl():area_list = ['yantianqu', 'luohuqu', 'futianqu', 'nanshanqu', 'baoanqu', 'longgangqu', 'longhuaqu', 'guangmingqu','pingshanqu', 'dapengxinqu']area_name = ['盐田区', '罗湖区', '福田区', '南山区', '宝安区', '龙岗区', '龙华区', '光明区', '坪山区', '大鹏新区']max1, min1 = 0, 0 max2, min2 = 0, 0ytq, lhq, ftq, nsq, baq, lgq, lhq, gmq, psq, dpxq = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0# first_url = 'https://sz.lianjia.com/ershoufang/pg1/'for j in area_name:for i in range(1, 101):url = 'https://sz.lianjia.com/ershoufang/%s/pg%s/' % (area_list[area_name.index(j)], str(i))getResponse(url, j)print('%s 第%d页数据获取完成!' % (j, i))if j == '盐田区':ytq += 1elif j == '罗湖区':lhq += 1elif j == '福田区':ftq += 1elif j == '南山区':nsq += 1elif j == '宝安区':baq += 1elif j == '龙岗区':lgq += 1elif j == '龙华区':lhq += 1elif j == '光明区':gmq += 1elif j == '坪山区':psq += 1elif j == '大鹏新区':dpxq += 1print(f'{ytq}, {lhq}, {ftq}, {nsq}, {baq}, {lgq}, {lhq}, {gmq}, {psq}, {dpxq}')# if getResponse(url, area_name) == -1:#     print(f'{j}数据获取完毕!')#     break# 获取数据
def getResponse(url, area_name):res = requests.get(url, headers=headers)if res.status_code != 200:returnelse:res = res.textroot = etree.HTML(res)length = len(root.xpath('//*[@id="content"]/div[1]/ul/li'))house_list = []for i in range(length):# 获取房屋的标题、位置、简介、总价、单价、跟踪信息等house_info = {"houseArea": area_name,"houseTitle": root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[1]/a/text()')[i],"housePos": root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[2]/div/a[1]/text()')[i] + '- ' + \root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[2]/div/a[2]/text()')[i],"houseInfo": root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[3]/div/text()')[i],"totalPrice": root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[6]/div[1]/span/text()')[i],"unitPrice": root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[6]/div[2]/span/text()')[i],"followInfo": root.xpath('//*[@id="content"]/div[1]/ul/li/div[1]/div[4]/text()')[i]}house_list.append(house_info)write_to_file(house_list)# return house_list# 写入文件
def write_to_file(content):# ‘a’追加模式,‘utf_8_sig’格式到处csv不乱码with open('深圳二手房.csv', 'a', encoding='utf_8_sig', newline='') as f:fieldnames = ['houseTitle', 'houseArea', 'housePos', 'houseInfo', 'totalPrice', 'unitPrice', 'followInfo']# 利用csv包的DictWriter函数将字典格式数据存储到csv文件中for i in content:w = csv.DictWriter(f, fieldnames=fieldnames)w.writerow(i)# 读取文件
def readfile():df = pd.read_csv("./深圳二手房.csv", encoding="utf-8")print(df.columns)print(df['totalPrice'])if __name__ == '__main__':getUrl()# readfile()

2. 雷达图的绘制

2.1 源码

import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Radar
import csvdef ReadMaxAndAverage():df = pd.read_csv('深圳二手房.csv', encoding='utf-8')# 给文件添加列名df.columns = ['houseTitle', 'houseArea', 'housePos', 'houseInfo', 'totalPrice', 'unitPrice', 'followInfo']df['totalPrice'] = df['totalPrice'].str.replace('万', '').astype("float")df['unitPrice'] = df['unitPrice'].str.replace('单价', '').str.replace('元/平米', '').astype("float")# 总价最大值tempmax = df.groupby(['houseArea'])['totalPrice'].max().reset_index()tempmax = [(row["houseArea"], round(row["totalPrice"], 1)) for _, row in tempmax.iterrows()]# 总价平均值tempaverage = df.groupby(['houseArea'])['totalPrice'].mean().reset_index()tempaverage = [(row["houseArea"], round(row["totalPrice"], 1)) for _, row in tempaverage.iterrows()]# 单间平均值tempunit = df.groupby(['houseArea'])['unitPrice'].mean().reset_index()tempunit = [(row["houseArea"], round(row["unitPrice"], 1)) for _, row in tempunit.iterrows()]# 单价最大值tempunitmax = df.groupby(['houseArea'])['unitPrice'].max().reset_index()tempunitmax = [(row["houseArea"], round(row["unitPrice"], 1)) for _, row in tempunitmax.iterrows()]# print(tempmax)# print(tempaverage)# print(tempunit)# print(tempunitmax)return tempmax, tempaverage, tempunit, tempunitmaxdef readData():area = ['盐田区', '罗湖区', '福田区', '南山区', '宝安区', '龙岗区', '龙华区', '光明区', '坪山区', '大鹏新区']# 读取数据存放的容器count1, count2, count3, count4, count5, count6, count7, count8, count9, count10 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0with open("深圳二手房.csv", "r", encoding="utf-8")as file:csvreader = csv.reader(file)for item in csvreader:# 排除不在星级选项的数据if item[1] in area:if item[1] == "盐田区":count1 += 1elif item[1] == "罗湖区":count2 += 1elif item[1] == "福田区":count3 += 1elif item[1] == "南山区":count4 += 1elif item[1] == "宝安区":count5 += 1elif item[1] == "龙岗区":count6 += 1elif item[1] == "龙华区":count7 += 1elif item[1] == "光明区":count8 += 1elif item[1] == "坪山区":count9 += 1elif item[1] == "大鹏新区":count10 += 1# print(count1, count2, count3, count4, count5, count6, count7, count8, count9, count10)  # 1723 3000return count1, count2, count3, count4, count5, count6, count7, count8, count9, count10def Radar_Base() -> Radar:count1, count2, count3, count4, count5, count6, count7, count8, count9, count10 = readData()temp, tempaverage, tempunit, tempunitmax = ReadMaxAndAverage()# ['盐田区', '罗湖区', '福田区', '南山区', '宝安区', '龙岗区', '龙华区', '光明区', '坪山区', '大鹏新区']v1 = [[tempaverage[0][1], temp[0][1], count1, tempunit[5][1], tempunitmax[5][1]]]v2 = [[tempaverage[1][1], temp[1][1], count2, tempunit[7][1], tempunitmax[7][1]]]v3 = [[tempaverage[2][1], temp[2][1], count3, tempunit[6][1], tempunitmax[6][1]]]v4 = [[tempaverage[3][1], temp[3][1], count4, tempunit[1][1], tempunitmax[1][1]]]v5 = [[tempaverage[4][1], temp[4][1], count5, tempunit[4][1], tempunitmax[4][1]]]v6 = [[tempaverage[5][1], temp[5][1], count6, tempunit[9][1], tempunitmax[9][1]]]v7 = [[tempaverage[6][1], temp[6][1], count7, tempunit[8][1], tempunitmax[8][1]]]v8 = [[tempaverage[7][1], temp[7][1], count8, tempunit[0][1], tempunitmax[0][1]]]v9 = [[tempaverage[8][1], temp[8][1], count9, tempunit[2][1], tempunitmax[2][1]]]v10 = [[tempaverage[9][1], temp[9][1], count10, tempunit[3][1], tempunitmax[3][1]]]# 链式写法c = (Radar()# 配置雷达图的边的类项.add_schema(schema=[opts.RadarIndicatorItem(name="平均房价", max_=2000),opts.RadarIndicatorItem(name="最高房价", max_=12000),opts.RadarIndicatorItem(name="区二手房数量", max_=6000),opts.RadarIndicatorItem(name="平均单价", max_=120000),opts.RadarIndicatorItem(name="最高单价", max_=210000),]).add("盐田区", v1, color="pink", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="pink"),).add("罗湖区", v2, color="blue", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="blue")).add("福田区", v3, color="Cyan", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="Cyan")).add("南山区", v4, color="Auqamarin", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="Auqamarin")).add("宝安区", v5, color="Green", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="Green")).add("龙岗区", v6, color="red", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="red")).add("龙华区", v7, color="yellow", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="yellow")).add("光明区", v8, color="orange", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="orange")).add("坪山区", v9, color="Tomato", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="Tomato")).add("大鹏新区", v10, color="Salmon", areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color="Salmon"))# 系列配置.set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="深圳二手房对比"), legend_opts=opts.LegendOpts(pos_left="80%")))return cRadar_Base().render("深圳二手房雷达图.html")

2.2 雷达图效果图

3. 饼状图的绘制

3.1 源代码

from pyecharts import options as opts
from pyecharts.charts import Piedef Pie_Base():# 商品售卖比列 火车v1 = ['盐田区', '罗湖区', '福田区', '南山区', '宝安区', '龙岗区', '龙华区', '光明区', '坪山区', '大鹏新区']# 深圳各区二手房数量 1265 5406 5598 5488 4206 11055 4089 486 958 343  总38894# 各区二手房占比深圳二手房比例v2 = [3.3, 14, 14.4, 14, 10.8, 28, 11, 1, 2.5, 1]c = (Pie().add("", [list(z) for z in zip(v1, v2)])# 玫瑰图 --- 列表循环处理.set_global_opts(title_opts=opts.TitleOpts(title="深圳市二手房各区占比"), legend_opts=opts.LegendOpts(pos_left="80%")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}%")))return cPie_Base().render("饼状图.html")

3.2 饼状图效果图

4. 多维散点图

4.1 源码

from pyecharts.charts import Scatter
from pyecharts import options as opts
import pandas as pd
from pyecharts.commons.utils import JsCodedef readFile():df = pd.read_csv('深圳二手房.csv', encoding='utf-8')# 给文件添加列名df.columns = ['houseTitle', 'houseArea', 'housePos', 'houseInfo', 'totalPrice', 'unitPrice', 'followInfo']df['totalPrice'] = df['totalPrice'].str.replace('万', '').astype("float")temp = df.groupby(['houseArea'])['totalPrice'].mean().reset_index()temp = [(row["houseArea"], round(row["totalPrice"], 1)) for _, row in temp.iterrows()]print(temp)return tempdef Scatter_Base():temp = readFile()df = pd.DataFrame({"平均房价": [x[1] for x in temp],"小区": [x[0] for x in temp]})# 数据排序df.sort_values("平均房价", inplace=True, ascending=True)c = (Scatter().add_xaxis(df.平均房价.values.tolist())# 传入两个数据链进行组合  通过这个组合返回js回调函数.add_yaxis("平均房价", df[["平均房价", "小区"]].values.tolist(),label_opts=opts.LabelOpts(formatter=JsCode(# 自定义的js代码 返回一个自定义的标签选项"function(params){return params.value[2];}"))).set_global_opts(title_opts=opts.TitleOpts(title="深圳二手房平均房价多维散点图"),xaxis_opts=opts.AxisOpts(type_="value",  # 设置数值类型 连续型min_=300.0),))return cScatter_Base().render("01 - 深圳二手房平均房价多维散点图.html")

4.2 多维散点图效果图

5. 玫瑰图

5.1 源码

from pyecharts.charts import Pie
from pyecharts import options as optsdef Pie_RoseType():# 按照对应的年度和季度的数值 通过玫瑰图进行显示c = (Pie().add("",[list(z) for z in zip(["201{}年/{}季度".format(y, z)for y in range(3)for z in range(1, 5)],[4.88, 5.88, 6.88, 7.88, 5.88, 7.88, 9.88, 8.88, 9.88, 5.88, 4.88, 6.88])],# 内径和外径的设置radius=["0%", "75%"],rosetype="radius",label_opts=opts.LabelOpts(is_show=True),).set_global_opts(title_opts=opts.TitleOpts(title="年季度玫瑰图显示"), legend_opts=opts.LegendOpts(pos_left="80%")))return cPie_RoseType().render("02 - 玫瑰图.html")

5.2 玫瑰图效果图

6.折线图

6.1源码

from pyecharts import options as opts
from pyecharts.charts import Line
import pandas as pddef readFile():df = pd.read_csv('深圳二手房.csv', encoding='utf-8')# 给文件添加列名df.columns = ['houseTitle', 'houseArea', 'housePos', 'houseInfo', 'totalPrice', 'unitPrice', 'followInfo']df['totalPrice'] = df['totalPrice'].str.replace('万', '').astype("float")temp = df.groupby(['houseArea'])['totalPrice'].mean().reset_index()temp = [(row["houseArea"], round(row["totalPrice"], 1)) for _, row in temp.iterrows()]print(temp)return tempdef LineOne():temp = readFile()line = Line()line.add_xaxis([x[0] for x in temp])line.add_yaxis("平均房价",[x[1] for x in temp]# 设置y轴数据列项)line.set_global_opts(# x轴的列项名 倾斜 40°显示xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45),),yaxis_opts=opts.AxisOpts(name="平均房价(单位/万)"),  # y轴的设置名称title_opts=opts.TitleOpts(title="深圳二手房平均房价折线图"))line.render("03 - 深圳二手房平均房价折线图.html")LineOne()

6.2 折线图效果图

链家深圳二手房房价数据分析相关推荐

  1. 2020链家杭州二手房数据分析(截止到2020年09月07日)

    2020链家杭州二手房数据分析(截止到2020年09月07日) 1 项目背景 通过python爬去链家杭州二手房的数据,网址为:https://hz.lianjia.com/ershoufang/.可 ...

  2. 数据分析:pandas分析链家网二手房信息

    分析链家网南京市二手房信息 链家网二手房数据的采集方法参见之前的博客:数据采集(四):用XPath爬取链家网房价数据 总共有3000条二手房信息记录. import pandas as pd impo ...

  3. python爬取分析深圳二手房房价

    刚入门学习Python爬虫,因为后边将会去深圳发展,所以练习了一个用python爬取深圳房价进行可视分析的项目,希望有所帮助. 好!进入正题! 我选择爬取的是链家网的深圳二手房网页,截图如下: 查看链 ...

  4. 爬虫+可视化——链家杭州二手房房源信息

    ------------本篇文章旨在练习数据的爬取及可视化 简介 本项目分两个部分: 1.爬虫:共爬取到链家杭州二手房信息30806条 2.可视化:主要用pyecharts 一.获取数据 提取杭州各个 ...

  5. python二手房使用教程_python实战:基于链家网二手房数据解析任务

    实战:基于链家网二手房数据解析任务 页面:https://bd.ke.com/ershoufang/ 获取如下信息: 标题 位置 房屋信息 关注人数 / 发布时间 房屋总价 房屋单价 备注信息 1.导 ...

  6. python爬虫requests源码链家_python的爬虫项目(链家买二手房)

    不知不觉,已经工作6年有余,恍恍惚惚,有机会满足房子需求. 在收集房子信息过程中,做些记录. 贝壳的功能很强大,但很难满足小区.距离.教育.面积等多个方面的匹配,使用起来成本仍然较高. 针对以上情况, ...

  7. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  8. 用Python爬取2020链家杭州二手房数据

    起源于数据挖掘课程设计的需求,参考着17年这位老兄写的代码:https://blog.csdn.net/sinat_36772813/article/details/73497956?utm_medi ...

  9. 链家网北京市租房数据分析(二)——基于python的数据可视化

    本次分析的数据为爬取链家网租房首页的3000余条整租房源数据.数据量较小,分析结果难免存在偏差,本分析报告仅作为实战项目展示.本报告中所描述的平均租金指单套房源租金的中位数. 数据源可至百度网盘提取, ...

  10. 使用Java及jsoup爬取链家北京二手房房价数据

    由于是初次使用Java写爬虫,所以代码有些繁琐,请大家见谅,并能给与指正 首先分析链家北京二手房页面,使用360浏览器的审查元素功能,查看源代码,获取查询标签 如图一级查询所示,此图标签所获取的是链家 ...

最新文章

  1. .sh文件是什么语言_shell命令在C语言程序中的调用
  2. Matlab篇(三)MATLAB中conj的用法
  3. Caffe官方教程翻译(2):Web demo
  4. python如何遍历文件夹中的所有图片_python实现遍历文件夹图片并重命名
  5. 精读《setState 做了什么》
  6. Qt工作笔记-打开指定文件夹
  7. 输出10000以内的第M到第N个素数(Eclipse gcc下)
  8. codeforces 735C Tennis Championship(贪心+递推)
  9. python的property用法_Python的@property使用方法详解
  10. html星空代码在线,怎么操作html星空特效代码
  11. javascript测试题和参考答案----试题源自牛客网
  12. 快速卸载软件和残余,很Nice的一款卸载工具—Your Unin-staller!
  13. WPS自动生成图片目录
  14. delphi下使用indy进件socket通信的简单实例介绍
  15. 智慧园区数据可视化大屏的优势分析
  16. 国内固定电话和传真的正则表达式
  17. 音视频开发系列(24)使用FFmpeg添加、删除、替换和提取视频中的音频
  18. 树莓派4B 8G安装日志(1)——基础环境安装
  19. java39阶台阶_第四届蓝桥杯javaC组_第39级台阶
  20. 在OpenCV里实现游戏外挂的位置识别

热门文章

  1. Java利用libreOffice(jodconverter)将office(ppt,Excel,word,text)文档转换成pdf
  2. 开源框架Banner实现图片轮播
  3. Python文件操作-替换srt文件行文本
  4. PHP:firebase/php-jwt生成jwt和验证
  5. 手机卫星定位系统_中国北斗:已启用全球定位服务,我们如何使用手机北斗卫星导航?...
  6. 微信小程序-自定义三级联动
  7. 新手传奇gm架设要学会的几个修改技巧
  8. Win10使用系统自带命令diskpart格式化U盘
  9. 华为奋力前行,以灵活多变的方式突围,成效显著
  10. 利用LSTM对股价进行预测并可视化