表弟准备买房,让我帮他分析分析哪个小区最合适,我直接用python下载了本地所有房源信息做成了可视化图

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

‘售价’,

‘套内面积’,

‘建筑类型’,

‘建筑结构’,

‘建筑面积’,

‘户型结构’,

‘房屋年限’,

‘房屋户型’,

‘房屋朝向’,

‘房屋用途’,

‘房本备件’,

‘房源核验码’,

‘所在楼层’,

‘抵押信息’,

‘挂牌时间’,

‘标题’,

‘梯户比例’,

‘装修情况’,

‘详情页’,

‘配备电梯’,

])

csv_writer.writeheader() # 写入表头

for page in range(1, 11):

print(f’=正在爬取第{page}页数据内容=')

1. 发送请求

url = f’https://cs.****.com/ershoufang/pg{page}/’ # 确定请求的url地址

模拟浏览器发送请求 需要对于python代码进行伪装

headers:请求头 字典数据类型 键值对形式

header作用: 伪装

加那些参数: cookie User-Agent(UA) referer host

参数意思是什么

cookie: 用户信息, 常用于检测是否登陆账号

User-Agent: 浏览器基本身份标识(用户代理)

referer: 防盗链 告诉服务器我们发送请求的url地址是从哪里跳转过来 (动态网页)

host: 域名

headers = {

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36’

}

response = requests.get(url=url, headers=headers)

2. 获取数据, 获取网页源代码 response.text

print(response.text) # 返回数据字符串数据类型

3. 解析数据 解析方式: css xpath re

css选择器: 根据标签属性内容提取数据

selector = parsel.Selector(response.text) # 返回对象

attr 属性选择器 getall() 获取所有 返回数据列表 人家语法就是这样 a::attr(href) 取a标签里面href属性

href = selector.css(‘.sellListContent li .title a::attr(href)’).getall()

print(href)

列表 数据容器(一个箱子) ‘https://cs.****.com/ershoufang/104107916240.html’ 元素(箱子里面东西)

for 循环 遍历就是从这个箱子里面一个一个拿东西出来

for link in href:

4. 发送请求, 对于房源详情页url地址发送请求

5.获取数据, 获取网页源代码response.text

response_1 = requests.get(url=link, headers=headers)

6. 解析数据提取我们想要数据

print(response_1.text)

selector_1 = parsel.Selector(response_1.text) # 返回对象

get() 取一个

title = selector_1.css(‘.title .main::text’).get() # 标题

price = selector_1.css(‘.price .total::text’).get() # 售价

price_1 = selector_1.css(‘.unitPriceValue::text’).get() # 单价

attr_list = selector_1.css(‘.base .content li .label::text’).getall()

attr_list_1 = selector_1.css(‘.transaction .content li .label::text’).getall()

content_list = selector_1.css(‘.base .content li::text’).getall()

content_list_1 = selector_1.css(‘.transaction .content li span::text’).getall()

两个列表 如何创建成一个字典 attr_list 做键 content_list 做值

print(attr_list)

print(content_list)

保存csv文件表格

需要创建一个字典

dit = {

“详情页”: link,

“标题”: title,

“售价”: price,

“单价”: price_1,

“区域”: price_1,

}

dit_1 = dict(zip(attr_list, content_list))

dit_2 = dict(zip(attr_list_1, content_list_1))

dit.update(dit_1)

dit.update(dit_2)

print(title, price, price_1)

csv_writer.writerow(dit) # 写入数据

pprint.pprint(dit) # 格式化输出模块

效果展示

部分的数据

在这里插入图片描述

📢数据分析

================================================================

导入模块

import pandas as pd

from pyecharts.charts import Map

from pyecharts.charts import Bar

from pyecharts.charts import Line

from pyecharts.charts import Grid

from pyecharts.charts import Pie

from pyecharts.charts import Scatter

from pyecharts import options as opts

读取数据

df = pd.read_csv(‘data.csv’, encoding = ‘utf-8’)

df.head()

df.describe()

df.isnull().sum()

df[‘电梯’].unique()

df[‘电梯’].fillna(‘未知’, inplace=True)

df.isnull().sum()

df[‘电梯’].unique()

df[‘朝向’].unique()

df[‘朝向’] = df[‘朝向’].str.replace(‘南西’,‘西南’)

df[‘朝向’].unique()

g = df.groupby(‘市区’)

df_region = g.count()[‘小区’]

region = df_region.index.tolist()

count = df_region.values.tolist()

df_region

各城区二手房数量北京市地图

new = [x + ‘区’ for x in region]

m = (

Map()

.add(‘’, [list(z) for z in zip(new, count)], ‘北京’)

.set_global_opts(

title_opts=opts.TitleOpts(title=‘北京市二手房各区分布’),

visualmap_opts=opts.VisualMapOpts(max_=3000),

)

)

m.render_notebook()

df_price = g.mean()[‘价格(万元)’]

df_price

df_price.values.tolist()

price = [round(x,2) for x in df_price.values.tolist()]

bar = (

Bar()

.add_xaxis(region)

.add_yaxis(‘数量’, count,

label_opts=opts.LabelOpts(is_show=True))

.extend_axis(

yaxis=opts.AxisOpts(

name=“价格(万元)”,

type_=“value”,

min_=200,

max_=900,

interval=100,

axislabel_opts=opts.LabelOpts(formatter=“{value}”),

)

)

.set_global_opts(

title_opts=opts.TitleOpts(title=‘各城区二手房数量-平均价格柱状图’),

tooltip_opts=opts.TooltipOpts(

is_show=True, trigger=“axis”, axis_pointer_type=“cross”

),

xaxis_opts=opts.AxisOpts(

type_=“category”,

axispointer_opts=opts.AxisPointerOpts(is_show=True, type_=“shadow”),

),

yaxis_opts=opts.AxisOpts(name=‘数量’,

axistick_opts=opts.AxisTickOpts(is_show=True),

splitline_opts=opts.SplitLineOpts(is_show=False),)

)

)

line2 = (

Line()

.add_xaxis(xaxis_data=region)

.add_yaxis(

series_name=“价格”,

yaxis_index=1,

y_axis=price,

label_opts=opts.LabelOpts(is_show=True),

z=10

)

)

bar.overlap(line2)

grid = Grid()

grid.add(bar, opts.GridOpts(pos_left=“5%”, pos_right=“20%”), is_control_axis_index=True)

grid.render_notebook()

top_price = df.sort_values(by=“价格(万元)”,ascending=False)[:15]

top_price

area0 = top_price[‘小区’].values.tolist()

count = top_price[‘价格(万元)’].values.tolist()

bar = (

Bar()

.add_xaxis(area0)

.add_yaxis(‘数量’, count,category_gap = ‘50%’)

.set_global_opts(

yaxis_opts=opts.AxisOpts(name=‘价格(万元)’),

xaxis_opts=opts.AxisOpts(name=‘数量’),

)

)

bar.render_notebook()

s = (

Scatter()

.add_xaxis(df[‘面积(㎡)’].values.tolist())

.add_yaxis(‘’,df[‘价格(万元)’].values.tolist())

.set_global_opts(xaxis_opts=opts.AxisOpts(type_=‘value’))

)

s.render_notebook()

g = df.groupby(‘朝向’)

g.count()[‘小区’]

df_direction = g.count()[‘小区’]

df_direction

directions = df_direction.index.tolist()

count = df_direction.values.tolist()

c1 = (

Pie(init_opts=opts.InitOpts(

width=‘800px’, height=‘600px’,

)

)

.add(

‘’,

[list(z) for z in zip(directions, count)],

radius=[‘20%’, ‘60%’],

center=[‘40%’, ‘50%’],

rosetype=“radius”,

label_opts=opts.LabelOpts(is_show=True),

)

.set_global_opts(title_opts=opts.TitleOpts(title=‘房屋朝向占比’,pos_left=‘33%’,pos_top=“5%”),

legend_opts=opts.LegendOpts(type_=“scroll”, pos_left=“80%”,pos_top=“25%”,orient=“vertical”)

)

.set_series_opts(label_opts=opts.LabelOpts(formatter=‘{b}:{c} ({d}%)’),position=“outside”)

)

c1.render_notebook()

g1 = df.groupby(‘装修情况’)

g1.count()[‘小区’]

g2 = df.groupby(‘电梯’)

g2.count()[‘小区’]

df_fitment = g1.count()[‘小区’]

df_direction = g2.count()[‘小区’]

df_fitment

fitment = df_fitment.index.tolist()

count1 = df_fitment.values.tolist()

directions = df_direction.index.tolist()

count2 = df_direction.values.tolist()

bar = (

Bar()

.add_xaxis(fitment)

.add_yaxis(‘’, count1, category_gap = ‘50%’)

.reversal_axis()

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值