数据采集+数据可视化练习(2022-1-6)

2023-11-11

任务书3

赛题说明

  • 竞赛内容分布
  • 竞赛时长

任务一:Spark 组件部署管理(Standalone 模式)

15%

任务二:数据采集

20%

任务三:数据清洗与分析

30%

任务四:数据可视化

20%

任务五:综合分析

10%

团队分工明确合理、操作规范、文明竞赛

5%

竞赛时长为4个小时。

  • 竞赛注意事项

1.竞赛所需的硬件、软件和辅助工具由组委会统一布置,选手不得私自携带任何软件、移动存储、辅助工具、移动通信等进入赛场;

2.请根据大赛所提供的比赛环境,检查所列的软件及工具组件清单是否齐全,计算机设备是否能正常使用;

3.比赛完成后,比赛设备、软件和赛题请保留在座位上,禁止将比赛所用的所有物品(包括试卷和草纸)带离赛场;

4.裁判以各参赛队提交的竞赛结果文档为主要评分依据。所有提交的文档必须按照赛题所规定的命名规则命名,不得以任何形式体现参赛院校、赛位号等信息;

5.本次比赛采用统一网络环境比赛,请不要随意更改客户端的网络地址信息,对于更改客户端信息造成的问题,由参赛选手自行承担比赛损失;

6.请不要恶意破坏竞赛环境,对于恶意破坏竞赛环境的参赛者,组委会根据其行为予以处罚直至取消比赛资格;

7.比赛中出现各种问题及时向监考裁判举手示意,不要影响其他参赛队比赛。

  • 竞赛结果文件的提交

按照题目要求,提交符合模板的WORD文件以及对应的PDF文件(利用Office Word另存为pdf文件方式生成pdf文件)和代码文件。

请按照下面步骤完成本次技术展示任务,并提交技术报告。

模块一:环境搭建

任务一:Hadoop 组件部署管理(集群模式)

说明:

本环节需要使用 root 用户完成相关配置,具体部署要求如下:

1、 在 master节点(/opt/package) 解 压 java、hadoop 安装包 ,将解压后的安装文件移动到各个节点“/usr/local/”路径下并更名为jdk ,将全部命令复制并粘贴;

2、 设置 java、hadoop 环境变量,并使环境变量对所有用户生效,将变量配置内容复制粘贴;

3、完善其他配置,并启动hadoop集群,将所有配置内容以及命令复制粘贴

任务二:Spark 组件部署管理(Standalone 模式)

说明:

本环节需要使用 root 用户完成相关配置,具体部署要求如下:

1、 在 master节点解压 scala 安装包 ,将解压后的安装文件移动到“/usr/local/”路径下并更名为 scala,将全部命令复制并粘贴;

2、 设置 scala 环境变量,并使环境变量只对 root 用户生效,将变量配置内容复制粘贴;

3、 在 master 节 点 解 压 Spark 安装包 ,将解压后的安装文件移动 到“usr/local/”路径下,更名为 spark,并配置slaves文件,将命令与修改内容复制粘贴;

4、 修改 spark-env.sh.template 为 spark-env.sh 并在其中配置 Spark 的 master 节点主机名、端口、worker 结点的核数、内存,将修改的配置内容复制粘贴;

5、 完善其他配置并启动 Spark(Standalone 模式)集群,启动 Spark Shell 连接 集群,将连接结果截图(截图需包含连接命令)粘贴。

任务三:Sqoop的安装与部署

  1. 在master节点解压sqoop安装包,将解压后的安装文件移动到“/usr/local/”路径下并更名为 sqoop,将全部命令复制并粘贴;
  2. 完善sqoop的配置文件,将所有命令以及配置内容复制粘贴
  3. 设置sqoop的环境变量,将mysql驱动解压并移动到相应位置,并连接MySQL数据库(密码为Passwd1!)显示所有数据库

任务四:Hive的安装与部署

  1. 在master节点解压Hive安装包,将解压后的安装文件移动到“/usr/local/”路径并更名为hive,将全部命令复制并粘贴;
  2. 完善hive配置文件(配置数据库),将hive-sitem.xml文件的内容截图并粘贴
  3. 启动hive,新建一个数据库(stu)和数据表(student, 字段为id int, name char),在$HIVE_HOME下创建一个数据文件(.dat)写入下列数据,并导入hive数据库中,最后检查写入是否成功。

student.dat

1 Kevin

2 Kyrie

3 Harden

任务五:Flume的安装与部署

  1. 在master节点解压Flume安装包,将解压后的安装文件移动到“/usr/local/”路径并更名为flume,将全部命令复制粘贴
  2. 完善其他配置,启动flume,将过程命令和结果复制粘贴

模块二:数据采集与数据预处理(20分)

请使用网页分析、网络爬虫等相关技术,完成网页分析、数据爬取、数据存储等任务。(请注意:任务二爬取的数据将会用于任务三和任务四中)

具体要求如下:

  1. 从https://newhouse.fang.com/house/s/网站中爬取北京房源信息,每个信息包括:城市、区、楼盘名称、价格(元/平)、地址、评论数、楼盘评级、项目户型、交通配套、教育配套、生活配套。保存为csv格式。将代码复制粘贴,  

items.py

Spider

​
import scrapy
from ..items import FangtianxiaItem


class HouseSpiderSpider(scrapy.Spider):
    name = 'house_spider'
    allowed_domains = ['newhouse.fang.com']
    start_urls = [f'https://newhouse.fang.com/house/s/b9{page}/'for page in range(1, 11)]
  # 城市、区、楼盘名称、价格(元/平)、地址、评论数、评级、户型、交通配套、教育配套、生活配套
    # city,place,name,price,address,comment,grade,type,traffic,edu,live
    # name,place,price,comment_num,open,score,house,transport,edu,live
    def parse(self, response):
        li = response.css('#newhouse_loupan_list').xpath('./ul/li')
        for l in li:
            item = FangtianxiaItem()
            href = l.xpath('.//div[@class="nlcd_name"]/a/@href').extract_first()
            # item['city'] = response.xpath('.//ul[@class="tf f12"]/li[2]/a/text()').extract_first().split("楼盘")[0]
            item['place'] = l.xpath('.//div[@class="address"]/a/span/text()').extract_first().strip().split(']')[0][1:]
            item['address'] = l.xpath('.//div[@class="address"]/a/text()[2]').extract_first().strip()
            item['name'] = l.xpath('.//div[@class="nlcd_name"]/a/text()').extract_first().strip()
            em = l.xpath('.//div[@class="nhouse_price"]/em/text()').extract_first('')       #单位 (万元/套起,元/㎡起)
            if '套' in em:
                item['price'] = ''
            else:
                item['price'] = l.xpath('.//div[@class="nhouse_price"]/span/text()').extract_first()
            item['comment_num'] = l.xpath('.//span[@class="value_num"]/text()').extract_first().split("条")[0][1:]
            print(href)
            yield scrapy.Request(response.urljoin(href), callback=self.new_parse, meta={'item': item})
    def new_parse(self, response):
        item = response.meta['item']
        item['score'] = response.xpath('.//div[@class="num_bg"]/h3/text()').extract_first()
        item['house'] = response.css('.report_num_item h4::text').extract()[0]
        item['transport'] = response.css('.report_num_item h4::text').extract()[1]
        item['edu'] = response.css('.report_num_item h4::text').extract()[2]
        item['live'] = response.css('.report_num_item h4::text').extract()[3]
        yield item

​

pipelines.py

class FangtianxiaPipeline:
    def process_item(self, item, spider):
        if '无' in item['house']:
            item['house'] = ''
        return item

  1. 展示csv表格的前十五行

 

  1. 对数据进行预处理,丢弃缺失值,将字段的属性统一,将代码复制粘贴
import pandas as pd
df = pd.read_csv('./house.csv')
df = df.drop(["open"], axis=1)
df = df.drop(["address"], axis=1)
df = df.dropna()
df.to_csv('./beijing.csv')
  1. 展示表格的前十五行

 

模块三:数据清洗与分析(30分)

  1. 对爬取数据进行清洗保留城市、区、楼盘名称、价格(元/平)、评论数、楼盘评级
  2. 分析得出上海房价信息中,楼盘评级大于9分的楼盘名称以及区、,截图并提交;
  3. 分析得出上海房价信息中,各个区的楼盘个数以及均价,截图并提交;
  4. 合并北京上海房价数据信息,展示前十五行,复制并粘贴代码;
  5. 分析得出北京上海房价信息中,楼盘评级大于9分的楼盘名称、城市以及区,截图并提交
  6. 分析得出北京上海房价信息中,各个区的楼盘个数以及均价,截图并提交
  7. 分析得出北京上海房价信息中,上海北京楼盘均价最高的前十名,截图并提交
  8. 分析得出北京上海房价信息中,上海北京楼盘评论数的前十名,截图并提交
  9. 分析得出北京上海房价信息中,上海北京的楼盘均价,截图并提交
  10. 分析得出北京上海房价信息中,上海北京的评论总和,截图并提交
  11. 将按区进行划分,上海北京各个区的房价信息, 根据评论总和(分析得到)降序、楼盘均价(分析得到)、楼盘个数(分析得到);将得到的前十五的数据信息写入MySQL数据库,表名为jinghu

模块四:数据可视化(20分)

为更好地帮助分析人员理解数据,需要从数据库中提取数据、对数据进行统计分析、并对数据分析结果用进行可视化呈现,具体包括以下四个子任务:

Python的flask及获取数据库数据代码:

from flask import Flask, render_template
import pymysql


app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')


@app.route("/<filename>")
def filename(filename):
    return render_template(filename,place=place,count=count,price=price,comment_num=comment_num,data=data,jh_place=jh_place,jh_price=jh_price,jh_score=jh_score,jh_count=jh_count)


def get_sql():
  db=pymysql.connect(host='192.168.31.104',user='root',password='Passwd1!',port=3306,db='spark')
    cursor = db.cursor()
    sql = 'select * from shanghai'
    cursor.execute(sql)
    datas = cursor.fetchall()
    data = []
    for i in datas:
        dic={}
        dic['name'] = i[0]
        dic['value'] = i[4]
        data.append(dic)
    return datas,data

def jh_sql():
   db=pymysql.connect(host='192.168.31.104',user='root',password='Passwd1!',port=3306,db='spark')
    cursor = db.cursor()
    sql = 'select * from jinghu'
    cursor.execute(sql)
    jh_data = cursor.fetchall()
    return jh_data    

def get_data(datas):
    place = [i[0]for i in datas]
    price = [round(i[1]/10000,2)for i in datas]
    comment_num = [round(i[2],2)for i in datas]
    score = [i[3]for i in datas]
    count = [i[4]for i in datas]
    return place,count,price,comment_num

def get_jh(jh_data):   
    jh_place = [i[0]for i in jh_data]
    jh_price = [round(i[1]/10000,2)for i in jh_data]
    jh_score = [round(i[3],2)for i in jh_data]
    jh_count = [i[4]for i in jh_data]   
    return jh_place,jh_price,jh_score,jh_count

if __name__=='__main__':
    datas,data = get_sql()
    jh_data = jh_sql()
    jh_place,jh_price,jh_score,jh_count = get_jh(jh_data)
    print(jh_place)
    place,count,price,comment_num = get_data(datas)
    app.run(debug=True)

  1. 选用适当的图形表达描述MySQL数据库中shanghai表中各个区之间的楼盘个数对比关系。(5分)

要求:图形表达准确,外观整洁大方,能完整的表达数据的含义。

代码:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>楼盘个数对比</title>

</head>

<script src="echarts.min.js"></script>

<body>

<div id="main"style="width:800px;height:600px"></div>

<script type="text/javascript">
    var myChart = echarts.init(document.getElementById("main"));
    var option = {

    title:{
        text:"各个区之间的楼盘个数对比关系",
        left:"center",
            },       

    label:{
        formatter:'{b}:{d}%',       
        },
            
    legend:{
        left:"3",
        top:"15%",
        orient: 'vertical',
        },
  
    tooltip:{},

    series:{      
        type:"pie",
        data:{{data|safe}}
        },   
    }

    myChart.setOption(option)
       </script>

</body>
</html>

图表展示:

 

  1. 选用适当的图形表达描述MySQL数据库中shanghai表中各个区楼盘均价和评论数的对比关系。(4分)

要求:图形表达准确,外观整洁大方,能完整的表达数据的含义。

代码:

 

运行结果即可视化展示:

 

  1. 选用适当的图形表达描述jinghu数据表中,北京上海各个区的楼盘均价、楼盘评级和评分数的对比关系。(4分)

要求:图形表达准确,外观整洁大方,能完整的表达数据的含义。

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>楼盘均价、楼盘评级和评分数的对比关系</title>
</head>
<script src="echarts.min.js"></script>
<body>
<div id="main"style="width:800px;height:600px"></div>
    <script type="text/javascript">
    var myChart = echarts.init(document.getElementById("main"));
    var option = {
    
    title:{
        text:"楼盘均价、楼盘评级和评分数的对比关系",
        left:"center",
            },
           
    legend:{
        left:"5%",
            },
    
    label:{
        show:true,
        position:"top",
        },
        
    tooltip:{},
 
    xAxis:{
        data:{{jh_place|safe}}
        },

    yAxis:{},

    series:[
    {
        name:"均价",
        type:"line",
        data:{{jh_price|safe}}
    },
    {
        name:"评级",
        type:"line",
        data:{{jh_score|safe}}
    },
    {
        name:"评分",
        type:"bar",
        data:{{jh_count|safe}}
    },
    ]
    }
    myChart.setOption(option)
    </script>
</body>
</html>

运行结果即展示图表如下:

 

  1. 针对jinghu数据集中,运用线性回归,分析楼盘评级和楼盘均价之间的关系,并给出线性回归的直线图。(7分)

要求:图形表达准确,外观整洁大方,能完整的表达数据的含义。

代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Jan  6 03:24:35 2022
@author: admin
"""

from sklearn.linear_model import LinearRegression
import pymysql
import numpy as np
from matplotlib import pyplot as plt

db = pymysql.connect(host='192.168.31.104', user='root', password='Passwd1!', db='spark')
cursor = db.cursor()
sql = "select * from jinghu"
cursor.execute(sql)
datas = cursor.fetchall()
data = np.array(datas)
x_data = data[:, 1]
y_data = data[:, 3]
x_data = x_data.astype(np.float32)[:, np.newaxis]
y_data = y_data.astype(np.float32)[:, np.newaxis]

model = LinearRegression()
model.fit(x_data, y_data)
pre = model.predict(x_data)
plt.plot(x_data, y_data, ".")
plt.plot(x_data, model.predict(x_data), 'r')
plt.show()

运行即可视化图表展示如下:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据采集+数据可视化练习(2022-1-6) 的相关文章

随机推荐

  • 基于Java API 方式使用Java kafka在IDEA创建依赖

    在idea创建工程Maven 在pom xml添加如下依赖
  • Java编写的图书管理系统,窗体版本-003

    今天为大家分享一个java语言编写的图书管理程序 003 目前系统功能已经很全面 后续会进一步完善 整个系统界面漂亮 有完整得源码 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进步 开发环境 开发语言为Java 开发环境Eclip
  • 数据库第十章——数据库恢复技术

    第十章 数据库恢复技术 文章目录 第十章 数据库恢复技术 一 事务的基本概念 一 基本概念 二 特性 二 数据库恢复概述 三 故障的种类 四 恢复的实现技术 如何建立冗余数据 一 数据转储 二 登记日志文件 五 恢复策略 如何利用冗余数据进
  • ruoyi cloud 用官方自带的工具更换包名出现的问题与解决办法

    使用ruoyi cloud官方的包生成后 有2点的修改很重要 1是所有带META INF spinrg文件夹的org springframework boot autoconfigure AutoConfiguration imports文
  • oracle10g异常日志查看

    oracle10g异常日志查看 警告日志 oracle product 10 2 0 db 1 admin orcl bdump alert orcl log 监听日志 oracle product 10 2 0 db 1 NETWORK
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--三.使用SpringMVC完成增删改查

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 效果演示 一 导入项目的相关依赖 二 添加框架的配置文件 gen
  • 高效的公式提取神器Mathpix snipping Tool+ Mathtype

    推荐一个有用高效的公式提取神器Mathpix snipping Tool Mathtype Mathpix snip是一款功能强大 很有用的公式识别及复制软件 能够将已有的PDF或CAJ等文中的公式 纸上打印的公式 甚至在纸上手写的公式统统
  • 共享计算机后防火墙能开启,Windows XP中防火墙后如何实现共享

    通过开启Windows XP系统中内置的 Internet 连接防火墙 可以让我们安心的上网冲浪 但是在开启了 Internet 连接防火墙 之后 我们就会发现不能正常的使用 网络共享 功能了 Internet 连接防火墙 在阻挡恶意程序的
  • C语言将int类型存入char型

    最近在做算法题的时候遇到了一个问题 就是怎么将int类型的值变成当成字符串 字符数组 类型 例如 有个 int 1024 如何将整形的1024转为字符串类型 String 的1024或者字符数组 char 类型的1024呢 其实可以用ito
  • Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键

    Vscode快速入门 这里写目录标题 安装 插件安装 Ctrl Shift X 插件商店 插件位置 默认位置 修改默认路径 修改vscode默认引用插件的路径 在命令行总配置code 基本操作 安装 Visual Studio Code 官
  • RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装(动态演示)

    入职公司后 公司要求组件化开发 经过讨论后我将网络请求框架单独进行了封装 不过当时框架里将常用的 util 和 ui 均放入到了共同的 Common 包下 导致里面部分代码耦合 后来为了降低耦合性又将 Common 拆分为了lib comm
  • Python 解决百钱买百鸡问题

    我国古代数学家张丘建在 算经 一书中曾提出过著名的 百钱买百鸡 问题 该问题叙述如下 鸡翁一 值钱五 鸡母一 值钱三 鸡雏三 值钱一 百钱买百鸡 则翁 母 雏各几何 翻译过来 意思是公鸡一个五块钱 母鸡一个三块钱 小鸡三个一块钱 现在要用一
  • Django开发员工管理系统(Part I)

    文章目录 1 准备工作 1 1 创建django项目 1 2 创建app 1 3 配置settings py文件 完成app注册 2 设计数据库表结构 3 在MySQL中生成表 3 1 创建数据库 3 2 修改配置文件 连接MySQL数据库
  • Nature:为啥室温超导支棱不起来

    克雷西 发自 凹非寺量子位 公众号 QbitAI 引发全球热议的LK 99风波告一段落后 Nature的一篇资讯头条再次提及了 室温超导 尽管对超导的热情一直不减 但随着一次又一次被证伪 人们很难不对 室温超导 慎之又慎 Nature的这篇
  • GitHub开源:狗屁不通文章生成器

    万字申请 废话报告 魔幻形式主义大作怎么写 GitHub开源狗屁不通文章生成器了解一下 只要输入一句话 系统就会给你一篇万字长文 查看源代码编写风格清新脱俗 并且毫无算法 简单暴力 直接在关键语句前后加上废话 名人名言 GitHub Git
  • 关系数据库中连接池的机制是什么?

    前提 为数据库连接建立一个缓冲池 1 从连接池获取或创建可用连接 2 使用完毕之后 把连接返回给连接池 3 在系统关闭前 断开所有连接并释放连接占用的系统资源 4 能够处理无效连接 限制连接池中的连接总数不低于或者不超过某个限定值 其中有几
  • 模式识别之分类器

    常见分类器介绍 1 SVM分类器 监督学习分类器 答 训练样本必须先标识不同类别 然后进行训练 SVM算法就是找一个超平面 对于已经被标记的训练样本 SVM训练得到一个超平面 使得两个类别训练集中距离超平面最近的样本之间的垂直距离要最大 也
  • Java--Map和HashMap基础

    一 Map常用方法 1 Map集合在 java util Map 包下 Map集合以键值对 key和value 的方式存储数据 key和value都是引用数据类型 都是存储对象的内存地址 2 Map接口中常用方法 V put K key V
  • W3C?什么是W3C相关标准?

    什么是W3C标准 什是W3C标准 不是一个标准 而是万维网联盟制定的一系列标准 网页主要由三部分组成 结构 Structure 表现 Presentation 和行为 Behavior 对应的标准也分三方面 结构化标准语言主要包括XHTML
  • 数据采集+数据可视化练习(2022-1-6)

    任务书3 赛题说明 竞赛内容分布 竞赛时长 任务一 Spark 组件部署管理 Standalone 模式 15 任务二 数据采集 20 任务三 数据清洗与分析 30 任务四 数据可视化 20 任务五 综合分析 10 团队分工明确合理 操作规