Python数据分析小案例——汕头房价与离市中心距离的关系

——————————————情况介绍———————————
大家好,我是来自汕头的一名广油的大一新生,为充实自己的暑假生活高考完暑假自学python并做出了关于汕头房价与离市中心距离关系的数据小分析项目。由于能力与经验欠缺,所以本文可能出现一些不足和值得优化的地方还请各位大佬多多指点。

———————————————正文开始——————————
1.使用工具:pycharm
2.项目目的:探究汕头房价与市中心位置的关系并对在汕头买房卖房提供参考价值
3.数据获取与准备:从58同城获取汕头房子名称和房价
①导包
requests库爬虫用xpath表达式聚焦爬虫获取房子名称和房价,numpy和pandas处理数据形成表格

import requests
import numpy as np
from lxml import etree
import pandas as pd

②获得每一页请求网址
https://st.58.com/xinfang/?PGTID=0d100000-002a-75f1-7f15-fc019087d01e&ClickID=4第一页网址
https://st.58.com/xinfang/loupan/all/p2/?PGTID=0d0091a8-0030-f5b6-e0a0-634010ec85f4&ClickID=1第二页网址https://st.58.com/xinfang/loupan/all/p3/?PGTID=0d0091a8-0030-fe8a-83be-78d50f560220&ClickID=1第三页网址
除去无关参数后依次观察可得出每一页网址的表达式并逐一请求所有网址得到源码数据,并实例化etree对象批量获取包含房价,房子名称,建筑面积的标签

all_house_names=[]
all_house_names_simple=[]
all_house_money=[]
all_house_money_simple=[]
all_house_size=[]
all_house_size_simple=[]

for i in range(6):
    url="https://st.58.com/xinfang/loupan/all/"+"p"+str(i+1)+"/"
    #获得网页响应数据并获得源代码
    response=requests.get(url=url,headers=headers)
    page_text=response.text
    response.encoding="utf-8"
    tree=etree.HTML(page_text)
    li_list=tree.xpath('//div[@class="key-list imglazyload"]/div')

在这里插入图片描述
③初步得到数据
取出li_list各自获取房价,房子名称和建筑面积等房子信息
在xpath表达式得到标签中建筑面积并不是全为数字型需要数据除去中文(建筑面积:)调用strip方法

    for li in li_list:
        house_name=li.xpath('./div[@class="infos"]/a[1]/span/text()')
        all_house_names.append(house_name)

    for li2 in li_list:
        house_money = li2.xpath('./a[2]/p[2]/span/text()|./a[2]/p[1]/span/text()')
        all_house_money.append(house_money)
    for li3 in li_list:
        house_size = li3.xpath("./div[@class='infos']/a[3]/span[@class='building-area']/text()")
        house_size = "".join(house_size)#换成数值形式
        house_size = house_size.strip("建筑面积:")#删除文字
        all_house_size.append(house_size)

④整理数据并生成表格保存为汕头房价2.csv

#对网页获取的数据进行清洗处理
all_house_names_simple.extend(x[0] for x in all_house_names)#生成列表中无嵌套的列表
print(all_house_names_simple)
arr1=np.array(all_house_names_simple)
all_house_names_simple=pd.Series(arr1,index=None)
print("房子名字\n{}".format(all_house_names_simple))
all_house_money_simple.extend(int(x[0]) for x in all_house_money)#*******生成列表中无嵌套的列表
arr2 = np.array(all_house_money_simple)
print("房价为{}".format(arr2))

print(all_house_size)
a=pd.DataFrame({"房子名称":arr1,"房子每平方米价格":arr2,"建筑面积":all_house_size})

print(a)
#导入数据进入表格
a.to_csv('汕头房价2.csv',index=False)

3.数据清洗:
重建一个python文件用pandas除去缺失数据的整行数据后存储为汕头房价3
对汕头房价3.csv内数据用excel表格打开

import pandas as pd
path='汕头房价2.csv'
df=open(path,encoding="gbk")
df_data = pd.read_csv(df)
print(df_data)
df_data.dropna(axis="index",how="any",inplace=True)
print(df_data)
df_data.to_csv("汕头房价3.csv",index=None)

在这里插入图片描述
对数据清洗后通过搜狗地图手动获取房子离苏宁广场的距离
在这里插入图片描述
将获取的距离市中心距离数据输入excel表格,填入fangjia.csv中。
在这里插入图片描述

4.数据可视化:
①再建立一个python文件导包
②表示自变量与因变量的关系,选定散点图绘制
③分别用matplotllib和seaborn绘制散点图

# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import pandas as pd
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:\windows\Fonts\MSYH.TTC")
path=r"C:\Users\86158\Desktop\汕头房价3\fanjia.csv"
df=open(path,encoding="gbk")
iris=pd.read_csv(df)

plt.scatter(x=iris.redium,y=iris.money,color="orange")
plt.xlabel("距离市中心位置",fontproperties=my_font)
plt.ylabel("每平方米房价",fontproperties=my_font)
plt.title("房价与市中心远近的关系",fontproperties=my_font)
plt.show()
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager
import warnings
warnings.filterwarnings("ignore")
my_font=font_manager.FontProperties(fname="C:\windows\Fonts\MSYH.TTC")
path=r"C:\Users\86158\Desktop\汕头房价3\fanjia.csv"
df=open(path,encoding="gbk")
iris=pd.read_csv(df)
sns.lmplot(x="redium",
           y="money",
           data=iris,
           legend_out=False,
           truncate=True,
           lowess=True,
           )#局部多项式回归
plt.xlabel("距离市中心位置",FontProperties=my_font)
plt.ylabel("每平方米房价",FontProperties=my_font)
plt.title("距离市中心位置与房价关系",FontProperties=my_font)
plt.savefig("./房价信息1.png")
plt.show()

④图像效果

excel绘图
在这里插入图片描述
用matplotlib绘图
在这里插入图片描述
用seaborn绘图
⑤seaborn提供参数比较多更适合绘图选定第三个用seaborn绘制散点图
5.建模
seaborn的lowess参数可建立局部多项式回归模型
6.得出商业价值的结论:①排除邻海海景房关系距离市中心25km与距离市中心60km房价水平差不多
②距离市中心15km的房子性价比比距离市中心25km性价比更高
③距离市中心10公里的房子较多
得出结论:在排除其他因素的影响下,距离市中心15公里的房价性价比较高
7.不足之处:①影响房价存在很多因素没有考虑
②获取搜狗地图距离市中心距离数据没法用爬虫批量获取数据
③数据量不足仅仅三百多条,结论不够权威
④对高数认知较浅,模型选取不够精确

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值