【大数据基础】厦门租房信息分析展示

https://dblab.xmu.edu.cn/blog/2307/

实验部分

在这里插入图片描述

爬虫程序

首先在工程文件夹下创建名叫rentspider的Python文件。

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import csv# num表示记录序号
Url_head = "http://fangzi.xmfish.com/web/search_hire.html?h=&hf=&ca=5920"
Url_tail = "&r=&s=&a=&rm=&f=&d=&tp=&l=0&tg=&hw=&o=&ot=0&tst=0&page="
Num = 0
Filename = "rent.csv"# 把每一页的记录写入文件中
def write_csv(msg_list):out = open(Filename, 'a', newline='')csv_write = csv.writer(out,dialect='excel')for msg in msg_list:csv_write.writerow(msg)out.close()# 访问每一页
def acc_page_msg(page_url):web_data = requests.get(page_url).content.decode('utf8')soup = BeautifulSoup(web_data, 'html.parser')address_list = []area_list = []num_address = 0num_area = 0msg_list = []# 得到了地址列表,以及区域列表for tag in soup.find_all(attrs="list-addr"):for em in tag:count = 0for a in em:count += 1if count == 1 and a.string != "[":address_list.append(a.string)elif count == 2:area_list.append(a.string)num_area += 1elif count == 4:if a.string is not None:address_list[num_address] = address_list[num_address] + "-" + a.stringelse:address_list[num_address] = address_list[num_address] + "-Null"num_address += 1# 得到了价格列表price_list = []for tag in soup.find_all(attrs="list-price"):price_list.append(tag.b.string)# 组合成为一个新的tuple——list并加上序号for i in range(len(price_list)):txt = (address_list[i], area_list[i], price_list[i])msg_list.append(txt)# 写入csvwrite_csv(msg_list)# 爬所有的页面
def get_pages_urls():urls = []# 思明可访问页数134for i in range(134):urls.append(Url_head + "1" + Url_tail + str(i+1))# 湖里可访问页数134for i in range(134):urls.append(Url_head + "2" + Url_tail + str(i+1))# 集美可访问页数27for i in range(27):urls.append(Url_head + "3" + Url_tail + str(i+1))# 同安可访问页数41for i in range(41):urls.append(Url_head + "4" + Url_tail + str(i+1))# 翔安可访问页数76for i in range(76):urls.append(Url_head + "5" + Url_tail + str(i+1))# 海沧可访问页数6for i in range(6):urls.append(Url_head + "6" + Url_tail + str(i+1))return urlsdef run():print("开始爬虫")out = open(Filename, 'a', newline='')csv_write = csv.writer(out, dialect='excel')title = ("address", "area", "price")csv_write.writerow(title)out.close()url_list = get_pages_urls()for url in url_list:try:acc_page_msg(url)except:print("格式出错", url)print("结束爬虫")

分析程序

建立一个名为rent_analyse的Python文件:

# -*- coding: utf-8 -*-
from pyspark.sql import SparkSession
from pyspark.sql.types import IntegerTypedef spark_analyse(filename):print("开始spark分析")# 程序主入口spark = SparkSession.builder.master("local").appName("rent_analyse").getOrCreate()df = spark.read.csv(filename, header=True)# max_list存储各个区的最大值,0海沧,1为湖里,2为集美,3为思明,4为翔安,5为同安;同理的mean_list, 以及min_list,approxQuantile中位数max_list = [0 for i in range(6)]mean_list = [1.2 for i in range(6)]min_list = [0 for i in range(6)]mid_list = [0 for i in range(6)]# 类型转换,十分重要,保证了price列作为int用来比较,否则会用str比较, 同时排除掉一些奇怪的价格,比如写字楼的出租超级贵# 或者有人故意标签1元,其实要面议, 还有排除价格标记为面议的df = df.filter(df.price != '面议').withColumn("price", df.price.cast(IntegerType()))df = df.filter(df.price >= 50).filter(df.price <= 40000)mean_list[0] = df.filter(df.area == "海沧").agg({"price": "mean"}).first()['avg(price)']mean_list[1] = df.filter(df.area == "湖里").agg({"price": "mean"}).first()['avg(price)']mean_list[2] = df.filter(df.area == "集美").agg({"price": "mean"}).first()['avg(price)']mean_list[3] = df.filter(df.area == "思明").agg({"price": "mean"}).first()['avg(price)']mean_list[4] = df.filter(df.area == "翔安").agg({"price": "mean"}).first()['avg(price)']mean_list[5] = df.filter(df.area == "同安").agg({"price": "mean"}).first()['avg(price)']min_list[0] = df.filter(df.area == "海沧").agg({"price": "min"}).first()['min(price)']min_list[1] = df.filter(df.area == "湖里").agg({"price": "min"}).first()['min(price)']min_list[2] = df.filter(df.area == "集美").agg({"price": "min"}).first()['min(price)']min_list[3] = df.filter(df.area == "思明").agg({"price": "min"}).first()['min(price)']min_list[4] = df.filter(df.area == "翔安").agg({"price": "min"}).first()['min(price)']min_list[5] = df.filter(df.area == "同安").agg({"price": "min"}).first()['min(price)']max_list[0] = df.filter(df.area == "海沧").agg({"price": "max"}).first()['max(price)']max_list[1] = df.filter(df.area == "湖里").agg({"price": "max"}).first()['max(price)']max_list[2] = df.filter(df.area == "集美").agg({"price": "max"}).first()['max(price)']max_list[3] = df.filter(df.area == "思明").agg({"price": "max"}).first()['max(price)']max_list[4] = df.filter(df.area == "翔安").agg({"price": "max"}).first()['max(price)']max_list[5] = df.filter(df.area == "同安").agg({"price": "max"}).first()['max(price)']# 返回值是一个list,所以在最后加一个[0]mid_list[0] = df.filter(df.area == "海沧").approxQuantile("price", [0.5], 0.01)[0]mid_list[1] = df.filter(df.area == "湖里").approxQuantile("price", [0.5], 0.01)[0]mid_list[2] = df.filter(df.area == "集美").approxQuantile("price", [0.5], 0.01)[0]mid_list[3] = df.filter(df.area == "思明").approxQuantile("price", [0.5], 0.01)[0]mid_list[4] = df.filter(df.area == "翔安").approxQuantile("price", [0.5], 0.01)[0]mid_list[5] = df.filter(df.area == "同安").approxQuantile("price", [0.5], 0.01)[0]all_list = []all_list.append(min_list)all_list.append(max_list)all_list.append(mean_list)all_list.append(mid_list)print("结束spark分析")return all_list

绘图程序

建立一个名为 draw的python文件

# -*- coding: utf-8 -*-
from pyecharts import Bardef draw_bar(all_list):print("开始绘图")attr = ["海沧", "湖里", "集美", "思明", "翔安", "同安"]v0 = all_list[0]v1 = all_list[1]v2 = all_list[2]v3 = all_list[3]bar = Bar("厦门市租房租金概况")bar.add("最小值", attr, v0, is_stack=True)bar.add("最大值", attr, v1, is_stack=True)bar.add("平均值", attr, v2, is_stack=True)bar.add("中位数", attr, v3, is_stack=True)bar.render()print("结束绘图")

启动程序

建立一个名为run的python文件

# -*- coding: utf-8 -*-
import draw
import rent_analyse
import rentspiderif __name__ == '__main__':print("开始总程序")Filename = "rent.csv"rentspider.run()all_list = rent_analyse.spark_analyse(Filename)draw.draw_bar(all_list)print("结束总程序")

在这里插入图片描述

实验结果

最小值:
在这里插入图片描述
最大值:
在这里插入图片描述
平均值:
在这里插入图片描述
中位数:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38010.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析基础 寻找出挂牌价最高的四套房,并输出相应的房源信息。

假设字典 house 存放了某小区在售二手房的房源信息&#xff08;见表 1&#xff09;&#xff0c; 试编写程序&#xff0c;实现以下功能&#xff1a; &#xff08;1&#xff09;请编写程序寻找出挂牌价最高的四套房和挂牌价最低的四套房&#xff0c;并输出相应的房源信息。 &am…

解决.net中使用gmail.com邮箱进行Smtp发送信件时失败的问题

我经常使用免费的gmail.com邮箱&#xff0c;因为它容量较大&#xff0c;但我们在使用.net编程实现邮件发送时&#xff0c;常会出现我们意想不到的错误。最常见的就是&#xff1a; &#xff08;1&#xff09;The operation has timed out. &#xff08;2&#xff09;出现类似提…

outlook登陆邮件接收服务器(POP3)失败问题

用outlook管理qq邮件时&#xff0c;可能会遇到无法登陆问题&#xff1a; 可能的错误之一是&#xff1a;在配置账号密码时&#xff0c;不是输入邮箱的登陆密码&#xff0c; 而是要输入qq邮箱中 提供的授权码&#xff1a; 这样问题即可解决&#xff01;

Contact form 7表单无法发送邮件的解决办法

在使用Bluehost主机做网站时&#xff0c;我们常常会遇到Contact form 7表单无法发送邮件的情况&#xff0c;收不到邮件&#xff0c;客户发的询盘就收不到&#xff0c;这就是很大的问题了。由于这个主机是自带邮箱系统的&#xff0c;因此我们用第三方的邮件系统就会出现被Blueho…

邮件服务器imap有推送吗,为什么我的邮件服务器支持imap协议还收不到邮件内容...

满意答案 qk2523 2017.04.05 采纳率&#xff1a;48% 等级&#xff1a;7 已帮助&#xff1a;163人 支持imap协议和能不能收到邮件没有什么关系。 1、使用Web方式可以正常接收邮件&#xff0c;但使用Outlook等客户端无法接收邮件。 a)邮件系统所在的服务器安装了其他杀毒软件&…

关于common-email 发送邮件失败问题!!!

1.首先说明一下场景&#xff1a; 邮件服务器为&#xff1a;腾讯的企业邮箱服务器&#xff0c; 有文档说明&#xff1a;http://service.exmail.qq.com/cgi-bin/help?id28&no1000585&subtype1&#xff0c; POP3/SMTP协议 接收邮件服务器&#xff1a;pop.exmail.qq.com …

邮件发送与接收,支持163邮箱、outlook邮箱、exchange邮箱

邮件发送与接收&#xff0c;支持163邮箱、outlook邮箱、exchange邮箱 收件箱支持条件搜索收件与发件均支持上传附件 依赖的jar包 邮件收发公共服务层实现 package com.example.demo.service.impl;import com.example.demo.model.EmailMessageBO; import com.example.demo.mo…

手把手教你设置foxmail客户端支持收发outlook.com邮箱里的邮件

话不多说&#xff0c;入正题啦1&#xff0c;下载安装foxmail客户端&#xff0c;也有免安装版的&#xff0c;这里不作介绍。地址&#xff1a;http://fox.foxmail.com.cn/2&#xff0c;打开foxmail软件&#xff0c;点击“工具”— 帐号管理 3&#xff0c;点击左下角的“新建”按钮…

举个栗子~Tableau 技巧(244):用和弦图(Chord diagram)呈现数据关系

关于和弦图 和弦图&#xff08;Chord diagram&#xff09;常用来表示数据之间的相互关系。数据点沿着圆圈分布&#xff0c;通过点和点之间相互连接的弧线来呈现相互之间的关系。和弦图从视觉上来说比较美观&#xff0c;数据呈现又很直观&#xff0c;所以深受数据粉喜爱。 之前…

HuggingGPT 火了:一个 ChatGPT 控制所有 AI 模型,自动帮人完成 AI 任务,网友:留口饭吃吧..._QbitAl 的博客 - CSDN 博客

转载自&#xff1a;https://blog.csdn.net/QbitAI/article/details/129942855 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 最强组合&#xff1a;HuggingFaceChatGPT —— HuggingGPT&#xff0c;它来了&#xff01; 只要给定一个 AI 任务&#xff0c;例如 “下面这张图片里…

“寻找贾维斯”简史

可能人人都希望自己有个“贾维斯”。 虽然已经退出漫威电影很多年&#xff0c;但是我们还是能够记起那个钢铁侠战衣里无所不能的AI助手。独特的幽默、优雅的语调&#xff0c;以及非常靠谱的人设&#xff0c;让无数科幻迷对这个看不见听得到的角色产生了无尽好感。 对贾维斯的…

jarvis贾维斯语音_保罗·贾维斯(Paul Jarvis)可以教给我们的建立业务的知识

jarvis贾维斯语音 想要在八到九个月内赚足够的钱&#xff0c;让您在一年中的剩余时间里做任何想做的事吗&#xff1f; (Want to make enough money in eight or nine months to last you for the rest of the year doing whatever the heck you want?) So do we. That’s why …

JARVIS(贾维斯)来了,科技改变生活

微软开源地址 https://github.com/microsoft/JARVIS 后续可能性&#xff1a; 每个人都有一个自己的AI助理提高生活便捷性学习知识的速度更快云助理 && 家用私人部署助理

谷歌拼音 输入法设置

谷歌拼音输入法 2.7&#xff0c;默认的是半角字符&#xff0c;中文标点 为了防止 以后 在输入代码的时候&#xff0c;出错&#xff0c;中文和 英文 都用 英文标点吧。

基于ubuntu20.4安装谷歌拼音中文输入法

1.首先命令行安装汉语语言包 sudo apt-get install language-pack-zh-hans 执行该命令后&#xff0c;系统就会自动安装所需要的汉语语言包 图1 安装汉语语言包 2.然后命令行安装谷歌拼音输入法 sudo apt-get install fcitx-googlepinyin 执行该命令后&#xff0c;系统就会自…

google输入法PK搜狗输入法

往往一个人用某个软件用的时间久了,久而久之就会形成一种习惯,不再探索或关注其他的类似的软件。造成的后果就是你只知道一款软件就这些功能,其余的知之甚少,就如同今天,看到别人输入法的皮肤特别漂亮,于是就想搜狗有这么漂亮的皮肤。问过后才知道人家用的是个google的拼…

Ubuntu20.04 安装谷歌拼音(googlepinyin)输入法

1.更新一下 sudo apt update 2.安装Fcitx sudo apt install fcitx如果有报错&#xff0c;执行下面命令 sudo apt install fcitx --fix-missing 3.命令行输入&#xff1a; im-config 弹出页面 &#xff0c;选择ok&#xff0c;然后选择yes按钮&#xff0c;最后选择fcitx。…

谷歌拼音输入法PinyinIME源码修改----随着Setting中中英文的切换对应改变软键盘中英文输入且字符变换

项目中使用的是Google的输入法&#xff1a;谷歌拼音输入法&#xff0c;即PinyinIME。 客户提出需求&#xff1a;需要在Setting中切换中英文的时候&#xff0c;输入法对应成中英文输入&#xff0c;并且字符也对应成中英文&#xff0c;即Setting中设置为中文的时候&#xff0c;输…

安装google输入法后,左shift键不能切换中英文

解决方法 打开fcitx配置页 如图应有两个选项&#xff0c;即google拼音和 键盘英语&#xff0c;如不足&#xff0c;则选择左下角添加。 此后虽然可切换中英文&#xff0c;但是打开一个新页面后只按shift键却不能正常切换中英&#xff0c;必须要ctrl加空格后才能切换&#xff0c…

写在发现谷歌拼音输入法网站消失的今天

今天偶然发现谷歌拼音输入法PC版的网页消失了&#xff0c;我想以后可能都不会有了&#xff0c;除非谷歌重返大陆。 PC端的谷歌拼音输入法从2013年就已经停止更新&#xff0c;但这并不妨碍我继续使用它&#xff0c;之前它的官网一直都在&#xff0c;也提供下载。 之所以喜欢这…