江苏省大数据技能大赛训练(2022.1.8)"/>
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的安装与部署
- 在master节点解压sqoop安装包,将解压后的安装文件移动到“/usr/local/src”路径下并更名为 sqoop,将全部命令复制并粘贴;
- 完善sqoop的配置文件,将所有命令以及配置内容复制粘贴
- 设置sqoop的环境变量,将mysql驱动解压并移动到相应位置,并连接MySQL数据库(密码为Passwd1!)显示所有数据库
任务四:Hive的安装与部署
- 在master节点解压Hive安装包,将解压后的安装文件移动到“/usr/local/src”路径并更名为hive,将全部命令复制并粘贴;
- 完善hive配置文件(配置数据库),将hive-sitem.xml文件的内容截图并粘贴
- 启动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股中每支股票当日的数据信息(.html#sh_a_board、.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'] start_urls = [ '=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', '=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中,将过程和结果截图并粘贴
模块三:数据清洗与分析
- 分析得出北京证券交易所中,涨跌幅最低的前十股票代码、名称以及跌幅,截图并提交
- 分析得出北京证券交易所中,成交额最高的前十股票代码、名称以及成交量,截图并提交
- 将沪深证券交易所的csv表格和北京证券交易所csv表格合并,此部分在后续题目中都需要使用,将部分代码截图即可
- 分析得出A股三大证券交易所中,涨跌幅最低的前十股票代码、名称以及跌幅,截图并提交
- 分析得出A股三大证券交易所中,成交额最高的前十股票代码、名称以及成交量,截图并提交
- 分析得出A股三大证券交易所中,各个市场股票的个数以及总成交量,截图并提交
- 分析得出A股三大证券交易所中,换手率前十的股票代码、名称、市场以及换手率,截图并提交
- 分析得出A股三大证券交易所中,振幅前十的股票代码、名称、市场以及换手率,截图并提交
- 分析得出A股三大证券交易所中,各个市场股票的平均涨跌幅,截图并提交
- 分析得出A股三大证券交易所中,各个市场的股票总成交额以及平均换手率
- 将三大市场的股票数据,根据市场、股票个数(分析得到)、平均涨跌幅(分析得到)、总成交量(分析得到)、总成交额(分析得到)、平均换手率(分析得到),写入到MySQL数据库(a_stocks数据表),截图并提交
模块四:数据可视化
为更好地帮助分析人员理解数据,需要从数据库中提取数据、对数据进行统计分析、并对数据分析结果用进行可视化呈现,具体包括以下四个子任务:
- 选用适当的图形表达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> |
- 选用适当的图形表达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> |
- 选用适当的图形表达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> |
- 针对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() |
更多推荐
2022年江苏省大数据技能大赛训练(2022.1.8)
发布评论