2022年江苏省大数据技能大赛训练(2022.1.8)

任务书4

任务说明

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

模块一:环境搭建

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

说明:

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

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

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

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

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

说明:

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

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

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

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

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

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

任务三:Sqoop的安装与部署

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

任务四:Hive的安装与部署

  1. 在master节点解压Hive安装包,将解压后的安装文件移动到“/usr/local/src”路径并更名为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

模块二:数据采集与数据预处理

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

具体要求如下:

1.网站源码解析:利用 chrome 查看网页源码,分析网页结构。(4分)

2.从股票网站爬取上证A股和深证A股中每支股票当日的数据信息(http://quote.eastmoney.com/center/gridlist.html#sh_a_board、http://quote.eastmoney.com/center/gridlist.html#sz_a_board)。每个信息包括:代码、名称、市场、最新价、涨跌幅、涨跌额、成交量、成交额、振幅以及换手率。复制粘贴代码

settings.py

# 关闭robots协议

ROBOTSTXT_OBEY = False

# 开启管道

ITEM_PIPELINES = {

   'caifu_gp.pipelines.CaifuGpPipeline': 300,

}

# 指定输出文件字段顺序

FEED_EXPORT_FIELDS = ['code', 'name', 'market', 'price', 'fluctuation', 'rise', 'turnover', 'amount', 'volume', 'rate']

items.py

import scrapy

#  'code', 'name', 'market', 'price', 'fluctuation', 'rise', 'turnover', 'amount', 'volume', 'rate'

class CaifuGpItem(scrapy.Item):

    code = scrapy.Field()

    name = scrapy.Field()

    market = scrapy.Field()

    price = scrapy.Field()

    fluctuation = scrapy.Field()

    rise = scrapy.Field()

    turnover = scrapy.Field()

    amount = scrapy.Field()

    volume = scrapy.Field()

    rate = scrapy.Field()

gpSpider.py

import scrapy

import re,json

from ..items import CaifuGpItem

class GpspiderSpider(scrapy.Spider):

    name = 'gpSpider'

    allowed_domains = ['quote.eastmoney.com']

    start_urls = [

'http://81.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112409997924611356188_1641602286832&pn={}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1641602286833',       'http://81.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112409997924611356188_1641602286832&pn={}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:80&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1641602286849'

                  ]

    max_page = 133

    def start_requests(self):

        for i in range(1, self.max_page+1):

            try:

                for u in self.start_urls:

                    url = u.format(i)

                    yield scrapy.Request(url, callback=self.parse)

            except:

                continue

    def parse(self, response):

        text = response.text

        r = re.search(('.*?diff":(.*?)}}\)'), text).group(1)

        json_data = json.loads(r)

        for i in json_data:

            item = CaifuGpItem()

            item['code'] = i['f12']

            item['name'] = i['f14']

            if i['f12'][0] == '6':

                item['market'] = '上证A股'

            else:

                item['market'] = '深圳A股'

            item['price'] = i['f2']

            item['fluctuation'] = i['f3']

            item['rise'] = i['f4']

            item['turnover'] = i['f5']

            item['amount'] = i['f6']

            item['volume'] = i['f7']

            item['rate'] = i['f8']

            yield item

pipelines.py

class CaifuGpPipeline:

    def process_item(self, item, spider):

        if item['price'] == '-':

            item['price'] = ''

            item['fluctuation'] = ''

            item['rise'] = ''

            item['turnover'] = ''

            item['amount'] = ''

            item['volume'] = ''

            item['rate'] = ''

        return item

3.展示前20行数据

4.清洗数据,将缺失值剔除,复制粘贴代码

import pandas as pd

df = pd.read_csv('gp.csv')

df = df.dropna()

df.to_csv('shsz.csv')

print(df.head(20))

5.展示前20行数据

6.将csv表格提交至HDFS中,将过程和结果截图并粘贴

模块三:数据清洗与分析

  1. 分析得出北京证券交易所中,涨跌幅最低的前十股票代码、名称以及跌幅,截图并提交
  2. 分析得出北京证券交易所中,成交额最高的前十股票代码、名称以及成交量,截图并提交
  3. 将沪深证券交易所的csv表格和北京证券交易所csv表格合并,此部分在后续题目中都需要使用,将部分代码截图即可
  4. 分析得出A股三大证券交易所中,涨跌幅最低的前十股票代码、名称以及跌幅,截图并提交
  5. 分析得出A股三大证券交易所中,成交额最高的前十股票代码、名称以及成交量,截图并提交
  6. 分析得出A股三大证券交易所中,各个市场股票的个数以及总成交量,截图并提交
  7. 分析得出A股三大证券交易所中,换手率前十的股票代码、名称、市场以及换手率,截图并提交
  8. 分析得出A股三大证券交易所中,振幅前十的股票代码、名称、市场以及换手率,截图并提交
  9. 分析得出A股三大证券交易所中,各个市场股票的平均涨跌幅,截图并提交
  10. 分析得出A股三大证券交易所中,各个市场的股票总成交额以及平均换手率
  11. 将三大市场的股票数据,根据市场、股票个数(分析得到)、平均涨跌幅(分析得到)、总成交量(分析得到)、总成交额(分析得到)、平均换手率(分析得到),写入到MySQL数据库(a_stocks数据表),截图并提交

模块四:数据可视化

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

  1. 选用适当的图形表达beijing数据表中,涨幅最高前十的股票成交量的对比。

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

<!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",

        },

    tooltip:{},

    legend:{

        left:"10%",

        },

    label:{

        show:true,

        position:"top",

        },

    xAxis:{

        name:"名称",

        data:{{name|safe}},

        },

    yAxis:{

        name:"成交量(手)/万",

        },

    series:{

        name:"成交量",

        type:"bar",

        data:{{turnover|safe}},

        },

    }

    myChart.setOption(option);

</script>

</body>

</html>

  1. 选用适当的图形表达a_stocks数据表中,三大市场股票个数的占比情况。

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

<!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",

        },

    tooltip:{},

    label:{

        formatter:"{b}->{d}%",

        },

    legend:{

        orient:"vertical",

        left:"5%",

        top:"5%",

        },

    series:{

        type:"pie",

        data:{{data|safe}},

        },

    }

    myChart.setOption(option);

</script>

</body>

</html>

  1. 选用适当的图形表达a_stocks数据表中,三大市场涨跌幅和成交量之间的对比

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

<!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:600px;height:400px"></div>

<script type="text/javascript">

    var myChart = echarts.init(document.getElementById("main"));

    var option = {

    title:{

        text:"三大市场涨跌幅和成交量之间的对比",

        left:"center",

        },

    label:{

        show:true,

        position:"top",

        },

    legend:{

        left:"1%",

        },

    tooltip:{},

    xAxis:{

        data:{{market|safe}},

        },

    yAxis:{},

    series:[

        {

        name:"涨跌幅",

        type:"bar",

        data:{{fluctuation|safe}},

        },

        {

        name:"成交量",

        type:"bar",

        },]

    }

    myChart.setOption(option);

</script>

<div id="main1" style="width:600px;height:400px"></div>

<script type="text/javascript">

    var myChart = echarts.init(document.getElementById("main1"));

    var option = {

    label:{

        show:true,

        position:"top",

        },

    legend:{

        left:"10%",

        },

    tooltip:{},

    xAxis:{

        data:{{market|safe}},

        },

    yAxis:{},

    series:[

            {

        name:"涨跌幅",

        type:"bar",

        data:{{fluctuation|safe}},

        },

        {

        name:"成交量",

        type:"bar",

        data:{{turnover|tojson}},

        },]

    }

    myChart.setOption(option);

</script>

</body>

</html>

  1. 针对a_stocks数据表中,运用线性回归,分析涨跌幅和换手率之间的关系。s

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

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 a_stocks"

cursor.execute(sql)

datas = cursor.fetchall()

data = np.array(datas)

x_data = data[:, 1]

y_data = data[:, 4]

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()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值