ZGZQ模拟操作题

  • 大数据平台组件搭建。

要求在Hadoop集群上搭建1.6.3版本的Spark分布式集群。(提示如下,注意每一步骤的代码与结果需截图在报告中体现)

1.Spark安装包处理,解压到/usr/local目录下,在master节点通过命令“wget -P /opt http://datasrc.tipdm.net:81/bigdata/spark/software/spark-1.6.3-bin-hadoop2.6.tgz”进行获取。

2.Spark配置文件修改(spark-env.sh、slaves、spark-default.conf),配置要求为:以master为主节点,Spark Master端口号为7077,Worker使用计算资源为单核512m,Executor使用计算资源为单核512m,限制每台机器只能有一个worker,spark日志相关信息与事件日志的保存路径均设置为HDFS文件系统上的/spark-logs。

3.子节点同步。

4.创建spark-default.conf配置文件中指定的Spark日志存放目录。

5.修改环境变量,并使其生效。

6.确保Hadoop集群已开启。

7.启动Spark集群。

8.查看Spark监控界面,确认集群部署状态无误。

【答案】

(1)解压安装包到/usr/local下。

tar -zxf /opt/spark-1.6.3-bin-hadoop2.6.tgz -C /usr/local

(2)进入/usr/local/spark-1.6.3-bin-hadoop2.6/conf。

cd /usr/local/spark-1.6.3-bin-hadoop2.6/conf

(3)配置spark-env.sh文件,复制spark-env.sh.template文件,重命名为spark-env.sh。

cp spark-env.sh.template spark-env.sh

# 在文件末尾配置如下内容:

export JAVA_HOME=/usr/lib/jvm/java

export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop/

export SPARK_MASTER_IP=master

export SPARK_MASTER_PORT=7077

export SPARK_WORKER_MEMORY=512m

export SPARK_WORKER_CORES=1

export SPARK_EXECUTOR_MEMORY=512m

export SPARK_EXECUTOR_CORES=1

export SPARK_WORKER_INSTANCES=1

(4)配置slaves文件,复制slaves.template文件,重命名为slaves。

cp slaves.template slaves

# 在文件中配置如下内容:

slave1

slave2

(5)配置spark-defaults.conf文件,复制spark-defaults.conf.template文件,重命名为spark-defaults.conf。

cp spark-defaults.conf.template spark-defaults.conf

# 在配置文件中添加如下内容:

spark.master                    spark://master:7077

spark.eventLog.enabled           true

spark.eventLog.dir               hdfs://master:8020/spark-logs

spark.history.fs.logDirectory       hdfs://master:8020/spark-logs

(6)将配置好的Spark目录同步到子节点。

scp -r /usr/local/spark-1.6.3-bin-hadoop2.6/ slave1:/usr/local

scp -r /usr/local/spark-1.6.3-bin-hadoop2.6/ slave2:/usr/local

(7)创建spark-logs目录

hdfs dfs -mkdir /spark-logs

(8)修改环境变量,在各节点的/etc/profile下添加Spark对应路径。

export SPARK_HOME=/usr/local/spark-1.6.3-bin-hadoop2.6

export PATH=$PATH:$SPARK_HOME/bin

    运行“source /etc/profile”使配置生效。D

(9)jps检查三个节点是否已开启Hadoop集群,未开启则在master通过命令开启。

$HADOOP_HOME/sbin/start-all.sh

(10)启动Spark集群

/usr/local/spark-1.6.3-bin-hadoop2.6/sbin/start-all.sh

(11)在浏览器查看,检查能否正常监控,两个子节点状态是否与要求一致。

http://master:8080

  • 编程学习网站题目爬取。

1.访问菜鸟教程(https://www.runoob.com),爬取其Python3实例模块的题目内容,要求输出格式如下图所示。

【答案】

import requests

from lxml import etree

import time

# 获取题目链接

url = 'https://www.runoob.com/python3/python3-examples.html'

web_data = requests.get(url)   

dom = etree.HTML(web_data.text, etree.HTMLParser(encoding='utf-8'))  # 网页解析

exerciseList= dom.xpath('//div[@id="content"]/ul/li/a/text()')       # 练习题名称

urlList= dom.xpath('//div[@id="content"]/ul/li/a/@href')             # 练习题超链接

urlList = ['/python3/'+i  if '/python3/' not in i else i for i in urlList ]                               

urlList = ['https://www.runoob.com' + i if 'www.runoob.com/' not in i else 'https:'+i for i in urlList]   

exerciseString = '\n'.join(exerciseList)      # 将练习题名称拼接成一个字符串

with open('exercisePython.txt', 'w') as f:

    f.write(exerciseString)

#爬取题目数据及整理写出

resultList = []

for url in urlList:

    web_data = requests.get(url)

    dom = etree.HTML(web_data.text, etree.HTMLParser(encoding='utf-8'))  # 网页源码解析

    # 获取题目及答案

    title = dom.xpath('string(//div[@id="content"]/h1)')       # 练习题名称

    content = dom.xpath('string(//div[@id="content"]/p[2])')   # 练习题描述内容

    code = dom.xpath('string(//div[@id="content"]//div[@class="example"]//div[@class="hl-main"])')  # 练习题答案

    result = dom.xpath('string(//div[@id="content"]/p[3])')    # 结果描述

    output = dom.xpath('string(//div[@id="content"]/pre)')     # 目标输出

    res = title + '\n' + content+ '\n'   # 将内容进行拼接

    resultList.append(res)

    time.sleep(1)

    print(url, '\n', res)

mid = resultList.copy()

for i in range(len(mid)):

    mid[i] = str(i+1)+'、'+ mid[i]  # 加入题目序号

with open('Python编程基础上机题库1.txt', 'w', encoding='utf-8') as f:

    f.write('\n'.join(mid))         # 将数据写出

三、电力数据分析与挖掘。数据data_etr.csv为用户用电量数据,数据中有编号为1-200的200位电力用户,DATA_DATE表示时间,如2015/1/1表示2015年1月1日,KWH为用电量。请完成以下工作:
(1) 将数据进行转置,转置后行为用户编号、列为日期、值为用户每日用电量。

(2) 对数据中的异常数据进行识别并处理。

(3) 统计每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。

(4) 每个用户用电数据按日差分,并求取差分结果的基本统计量,统计量同3。

(5) 求取每个用户的5%分位数。

(6) 每个用户按周求和并差分(一周7天,年度分开),并求取差分结果的基本统计量,统计量同3。

(7) 统计每个用户的日用电量在其最大值0.9倍以上的次数。

(8) 求取每个用户日为最大值/最小值的索引月份,若最大值/最小值存在于多个月份中,则输出含有最大值/最小值最多的那个月份。如1号用户的最小值为0,12个月每个月都有0,则看哪个月的0最多。

(9) 合并上述特征。

【答案】

# 1.将数据进行转置,转置后行为用户编号、列为日期、值为用户每日用电量。

import numpy as np

import pandas as pd

import os

#将数据进行转置,转置后行为用户编号、列为日期、值为用户每日用电量。

data=pd.read_csv('data_etr.csv',parse_dates=['DATA_DATE'],encoding='gbk')

data.head()

#透视表

data_new=pd.pivot_table(data=data,values='KWH',index='CONS_NO',columns='DATA_DATE')

# 2.对数据中的异常数据进行识别并处理。

def clear_(x=None):

QL=x.quantile(0.25)#下四分位数

QU=x.quantile(0.75)#上四分位数

IQR=QU-QL

x[((x>QU+1.5*IQR)|(x<QL-1.5*IQR))]=None

return x

data_new.apply(clear_,axis=0)#对每一行操作

# 3.统计每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。

feature1=data_new.T.agg(['max','min','mean','median','sum','var','skew','kurt'],axis=0).T

# 4.每个用户用电数据按日差分,并求取差分结果的基本统计量,统计量同3。

feature2=data_new.T.diff(axis=1).agg(['max','min','mean','median','sum','var','skew','kurt'],axis=0).T

#  5.求取每个用户的5%分位数。

feature3=data_new.quantile(0.05,axis=1)

# 6.每个用户按周求和并差分(一周7天,年度分开),并求取差分结果的基本统计量,统计量同3。

data_new.columns.week

feature4=(data_new.T.resample('W').sum()).T.diff(axis=1).T.agg(['max','min','mean','median','sum','var','skew','kurt'],axis=0).T

# 7.统计每个用户的日用电量在其最大值0.9倍以上的次数。

feature5=data_new.apply(lambda x:sum(x>x.max()*0.9),axis=1)

# 8.求取每个用户日为最大值/最小值的索引月份,若最大值/最小值存在于多个月份中,则输出含有最大值/最小值最多的那个月份。如1号用户的最小值为0,12个月每个月都有0,则看哪个月的0最多。

feature6=data_new.apply(lambda x: x==x.min(),axis=1).groupby(by=data_new.columns.month,axis=1).sum().idxmax(axis=1) #最小值

feature7=data_new.apply(lambda x: x==x.max(),axis=1).groupby(by=data_new.columns.month,axis=1).sum().idxmax(axis=1) #最大值

# 9.合并上述特征。

pd.concat([feature1,feature2,feature3,feature4,feature5,feature6,feature7],axis=0)

四、股票数据可视化,完成以下问题:
1.文件读取及数据查看;
2.提取股票代号600000在2017年1月3日至2017年1月20日的收盘价格数据,并绘制股票价格走势图进行分析;

3.提取股票代号600000在2017年1月3日至2017年1月24日的交易量数据,并绘制交易量分布柱状图进行分析;

4.提取股票代号600000在2017年1月至11月的交易量统计数据,并绘制月交易量分布饼图进行分析;

5.绘制以上图形组成的3×1子图。

【答案】

  1. 文件读取及查看

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

data=pd.read_excel('/data/trd.xlsx',engine="openpyxl")

#查看列名和数据

print(data.columns)

print(data.iloc[:5])

2. 提取股票代号600000在2017年1月3日至2017年1月20日的收盘价格数据,并绘制股票价格走势图

dt=data.loc[data['股票代码']==600000,['交易日期','收盘价','交易量']]

I1=dt['交易日期'].values>='2017-01-03'

I2=dt['交易日期'].values<='2017-01-20'

dta=dt.iloc[I1&I2,:]

y1=dta['收盘价']

x1=range(len(y1))

plt.figure(1)

plt.plot(x1,y1)

plt.xlabel(u' date ',fontproperties='SimHei')

plt.ylabel(u' Closing_Price ',fontproperties='SimHei')

plt.title(u' Closing_Price_State ',fontproperties='SimHei')

plt.savefig('1.png')

3. 提取股票代号600000在2017年1月3日至2017年1月24日的交易量数据,并绘制交易量分布柱状图

I3=dt['交易日期'].values>='2017-01-03'

I4=dt['交易日期'].values<='2017-01-24'

dta=dt.iloc[I3&I4,:]

y2=dta['交易量']

x2=range(len(y2))

plt.figure(2)

plt.bar(x2,y2)

plt.xlabel(u' date ',fontproperties='SimHei')

plt.ylabel(u' Volume ',fontproperties='SimHei')

plt.title(u' Volume_State ',fontproperties='SimHei')

plt.savefig('2.png')


4. 提取股票代号600000在2017年1月至11月的交易量统计数据,并绘制月交易量分布饼图

D=np.zeros((11))

list1=list()

for m in range(11):

    m=m+1

    if m<10:

        m1='2017-0'+str(m)+'-01'

        m2='2017-0'+str(m)+'-31'

        mon='0'+str(m)

    else:

        m1='2017-'+str(m)+'-01'

        m2='2017-'+str(m)+'-31'

        mon=str(m)

    I1=dt['交易日期'].values>=m1

    I2=dt['交易日期'].values<=m2

    D[m-1]=dt.iloc[I1&I2,[2]].sum()[0]

    list1.append(mon)

plt.figure(3)

plt.pie(D,labels=list1,autopct='%1.2f%%') # 保留小数点后两位

plt.title(u'Month_Volume_State',fontproperties='SimHei')

plt.savefig('3.png')

5. 绘制以上图形组成的3×1子图

plt.figure(4)

plt.figure(figsize=(14,6))

plt.subplot(1,3,1)

plt.plot(x1,y1)

plt.xlabel(u' date ',fontproperties='SimHei')

plt.ylabel(u' Closing_Price ',fontproperties='SimHei')

plt.title(u' Closing_Price_State ',fontproperties='SimHei')

plt.subplot(1,3,2)

plt.bar(x2,y2)

plt.xlabel(u' date ',fontproperties='SimHei')

plt.ylabel(u' Volume ',fontproperties='SimHei')

plt.title(u' Volume_State ',fontproperties='SimHei')

plt.subplot(1,3,3)

plt.pie(D,labels=list1,autopct='%1.2f%%') # 保留小数点后两位

plt.title(u' Month_Volume_State ',fontproperties='SimHei')

plt.savefig('4.png')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值