内容正文:
第16课 大数据处理的基本思想与架构 编程处理数据(见学生用书P83)
——4.2 大数据处理,教材第123~134页
1.了解大数据处理的基本思想与架构。 2.掌握pandas模块的两种数据结构Series和DataFrame。
1.大数据处理的基本思想
(1)处理大数据时,一般采用分治思想。分治就是把一个复杂的问题分成两个或更多个相同或相似的__子问题__,找到求这几个子问题的解法后,再找出合适的方法把它们组合成求__整个问题__的解法。如果这些子问题还难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。
(2)__分布式计算__是把一个需要非常巨大的计算能力才能解决的问题分成许多小部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
(3)并行处理是计算系统中能同时执行两个或更多处理的一种计算方法,其主要目的是节省大型和复杂问题的处理时间。
2.大数据处理的类型和架构
数据类型
数据特征
处理方式
软件或平台
静态数据
在处理时已收集完成、在计算时不会发生改变的数据
批处理计算
Hadoop、Spark等
__流数据__
不间断地、持续地到达的实时数据,比如根据交通路况实时更新导航路线
流计算
Storm、Heron等
图数据
现实世界中以图的形式呈现的一些数据,如社交网络、道路交通等数据
__图__计算
Pregel、GraphX等
(1)批处理计算:Hadoop是一个可运行于大规模计算机集群上的__分布式__系统基础架构,适用于__静态数据__的批处理计算。Hadoop计算平台主要包括__Common公共库__、分布式文件系统HDFS、__分布式数据库HBase__、分布式并行计算模型MapReduce等多个模块。
①分布式文件系统HDFS:将大规模海量数据以文件的形式、用多个副本保存在不同的存储节点中,并用分布式系统进行管理。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。目前,__云盘__、__网盘__的底层一般采用HDFS实现。
②分布式数据库HBase:建立在HDFS提供的底层存储基础上,采用基于列的存储方式,主要用来存储非结构化数据和半结构化数据,具有良好的横向扩展能力,可管理__PB级__的大数据。
③分布式并行计算模型MapReduce:能够处理大规模数据集的并行运算,主要由__Map(映射)__和__Reduce(归纳)__2个函数构成。它的核心处理思想是将任务分解并__分发到多个节点__上进行处理。
(2)流计算:通过流计算系统,可以简单、高效、可靠地实现实时数据的获取、传输和存储,在与数据库、Hadoop、编程语言等整合后可开发出功能强大的__实时计算__与__分析应用__。处理流数据的软件系统主要有IBM InfoSphere Streams、Twitter Storm、Yahoo! S4、__银河流数据处理平台(淘宝)__、Facebook Puma等。
(3)图计算:目前通用的图处理软件主要包括两类:一类是__图数据库__,如Neo4j、InfiniteGraph、OrientDB等;另一类是__并行图处理系统__,如Google Pregel、Apache Giraph、卡内基梅隆大学的GraphLab、运行于Spark平台的GraphX等。
(4)实时处理与批处理的整合:Twitter开源了其大数据处理系统Summingbird,该系统实现了批处理和流计算在一个平台架构下的整合(Hadoop+Storm)。开发者在同一个平台既可以做批处理,也可以做流计算,还可以进行两种模式的混合使用。
3.编程处理数据
(1)引入pandas模块:import pandas as pd(pd 为用户导入模块取的别名)
(2)pandas模块的数据结构:pandas提供了__Series__和__DataFrame__两种数据结构。
①Series对象常用属性
属性
说明
index
Series的__下标索引__,默认值是从0起递增的整数
values
存放Series值的一个数组
②DataFrame对象常用属性
属性
说明
index
DataFrame的__行索引__
columns
存放各__列__的列标题
values
存放值的二维数据
T
__行列转置__
1.Series与DataFrame联系与区别
数据结构
Series
DataFrame
维度
一维
二维
组成
包含一个数组的数据和一个与数据关联的索引(index),索引值默认是从0起递增的整数
由1个索引列(index)和若干个数据列组成,每个数据列可以是不同的类型
创建
列表、字典等可以用来创建Series数据结构,与列表不同的是,Series的索引可以指定,类型可以为字符串型
通常用一个相等长度的列表或字典来创建,也可以直接读取二维数据文件创建
联系
①DataFrame可以看作是共享同一个index的Series的集合
②DataFrame对象和Series对象中的一列均可以通过字典记法或属性来检索,列可以通过赋值来修改
2.pandas模块的Serise对象相关操作
(1)创建:列表、字典等可以用来创建Series数据结构
s1=pd.Series([1,2,3,4])
s2=pd.Series({'a':1,'b':2,'c':3})
(2)查找:借助index的索引值实现查找;对values的值进行条件索引
print(s1[0]) #查找索引为0的值
print(s2['b']) #查找索引为'b'的值
print(s1[s1>3]) #查找values大于3的值
(3)修改:赋值语句实现修改
s1[1]=10 #将索引为1的值修改为10
3.pandas模块的DataFrame对象相关操作
(1)创建:通常用一个相等长度的列表或字典来创建
import pandas as pdx=pd.DataFrame({”a”:[1,2,3],”b”:[4,5,6],”c”:[7,8,9]})
(2)导入
pd.read_excel(filename) #从Excel文件导入数据
pd.read_csv(filename) #从CSV文件导入数据
(3)导出
df.to_excel(filename) #导出数据到Excel文件
df.to_csv(filename) #导出数据到CSV文件
(4)查找
通过index、columns、values属性查看DataFrame对象的行索引、列索引及数据。如df.index、df.columns、df.values。
①查找整列,通过字典记法或属性检索实现查找:df.id、df['id']。
②查找整行:df.values[i],i为0时,查找第1行数据。
③查找单个值:
通过at[]方法实现查找:df.at[i,'id'],其中i为行索引,'id'为列标题,当i为0时,查找id列第1行的值。
通过df['id'][i]实现查找,其中i为行索引,'id'为列标题,当i为0时,查找id列第1行的值。
通过df.values[i][j]实现查找,其中i为行索引,j为列索引,当i为0,j为0时,查找第1行第1列的值。
④条件查询:
单条件查询:df1=df[df[”借阅次数”]>30],检索df对象中“借阅次数”大于30的数据行,存储在df1对象中,注意返回新的DataFrame对象,不改变原来的对象,若要改变可以写成:df=df[df[”借阅次数”]>30]。
多条件查询:
df1=df[df[”借阅次数”]>30]
df2=df1[df1[”性别”]==”女”]
检索df对象中“借阅次数”大于30且性别为“女”的数据行存储在df2对象中。
上述语句可以写成:
df1=df[(df[”借阅次数”]>30)&(df1[”性别”]==”女”)] ,检索df对象中“借阅次数”大于30且性别为“女”的数据行,存储在df1对象中。
注意:“&”表示“与”的关系;“|”表示“或”的关系。
4.DataFrame常用函数
函数
说明
count()
返回非空(NaN)数据项的数量
sum()、mean()
求和、求平均值,通过axis=0/1确定行列
max()、min()
返回最大、最小值
describe()
返回各列的基本描述统计值,包含计数、平均数、标准差、最大值、最小值及4分位差
head()、tail()
返回DataFrame的前n个、后n个数据记录
groupby()
对各列或各行中的数据进行分组,然后可对其中每一组数据进行不同的操作
df.groupby(分组依据,as_index=True/False)
例如,df.groupby('地域', as_index=True),按“地域”进行分组,“as_index”属性的值为True,则分组依据作为索引;“as_index”属性的值为False,则分组依据不会作为索引
sort_values()
排序,通过axis=0/1确定行列,axis默认值为0,纵向排序。ascending=True/False确定升/降序,ascending默认值为True,升序排序。排序结果返回一个新的DataFrame对象
多关键字排序:
例如,bd=bd.sort_values(['班级','身高'],ascending=[True,False]),实现班级为主要关键字升序排序,升高为次要关键字降序排序
drop()
删除数据,通过axis=0/1确定行列,并返回另一个DataFrame对象来存放改变后的数据
append()
在指定元素的结尾插入内容,并返回另一个DataFrame对象来存放改变后的数据
insert()
在指定位置插入列
rename()
修改列名或者索引
concat()
合并DataFrame对象
set_value()
根据行标签和列标签设置单个值
plot()
绘图
下列关于大数据的说法中,不正确的是( C )
A.分治思想是处理大数据的基本思路
B.Hadoop、Spark适用于静态数据的批处理计算
C.图计算是指对大规模图片类型数据进行处理的计算方式
D.电商平台的“猜你喜欢”功能运用了大数据技术
【解析】 图计算用于处理图中的节点与节点之间的关系,选项C错误。
变式1 Flight Aware平台可以为用户提供实时航班数据、机场信息、天气图、飞行计划、导航图、航空新闻和照片。该平台提供的数据是( B )
A.静态数据 B.流数据
C.图数据 D.结构化数据
【解析】 提供实时数据,属于流数据,选项B正确。
变式2 下列关于大数据处理的说法中,正确的是( D )
A.大数据处理系统无法同时实现批处理和流计算
B.Hbase是谷歌图处理系统Google Pregel的开源实现
C.实时处理和批处理的整合增加了系统开销
D.计算模型MapReduce用于大规模数据集的并行运算
【解析】 选项A,大数据处理系统可以同时实现批处理和流计算,选项错误;选项B,Hbase是谷歌BigTable数据库的开源实现,选项错误;选项C,实时处理和批处理的整合有利于减少系统的开销,降低使用成本,选项错误。
2024·江山中学检测火车作为中国交通运输的动脉,每年仅春运就承担了约 10 亿人次的运输。在互联网和移动终端普及的今天,通过网络购票成为了最佳选择。系统通过大数据技术,对购票的实时数据进行合理分析,精准调配列车运行车次。结合材料,下列关于大数据的说法中,正确的是( D )
A.系统可以使用批处理计算对购票的实时数据进行分析
B.大数据指数据量庞大、价值密度高的数据
C.大数据应用不会泄露用户的隐私信息
D.一般采用分治思想进行大数据分析
【解析】 选项A,静态数据适合批处理,流数据适合实时计算,图数据需要进行图计算,选项错误;选项B,大数据具有数据体量大、速度快、数据类型多、价值密度低的特点,选项错误;选项C,大数据应用会泄露用户的隐私信息,选项错误。
变式1 某机场采集了过去两年中每个时刻的旅客到达量和陆路交通情况的数据,开发出一个智能出租车调度系统,从而使旅客在机场等候出租车的时间大幅缩短。结合材料,下列说法正确的是( A )
A.人们在机场候车的行为产生了数据
B.机场主要通过人工方式采集数据
C.机场在过去两年中采集到的数据属于流数据
D.大数据处理只需要分析最近一个月的抽样数据
【解析】 选项B,机场主要通过机器采集数据,而不是通过人工方式,选项错误;选项C,流数据是指不间断地、持续地到达的实时数据,机场在过去两年中采集到的数据不属于流数据,选项错误;选项D,大数据收集和分析的数据量非常大,不仅仅是最近一个月的抽样数据,选项错误。
变式2 2024·玉环中学检测下列关于数据、信息和大数据的说法中,不正确的是( C )
A.单纯的数据没有明确含义,将其放到具体环境中所产生的内涵是信息
B.数据是信息的一种载体,它可以有数字、文字、图像等多种表现形式
C.大数据处理中的分治思想是人工智能技术的体现
D.对于大数据,不再追求每一个数据的精确性,而是能够接受数据的混杂性
【解析】 数据是对客观事物的符号表示,形式可以是图形符号、数字、字母等,这些符号在脱离具体的语境、环境是没有意义的,在特定的环境下反映出来的含义才是信息,而数据本身就是信息的载体,选项A、B正确。大数据体量大,要分析全体数据,对数据不再追求准确性,而是能够接收数据的混杂性,选项D正确。大数据采用分治思想,分而治之地将任务分解成多个子任务并分发到多个处理节点上,最后汇总得到原任务的解,这仅仅是分治,并未体现人工智能技术,选项C错误。
有如下Python 程序段:
import pandas as pd #第1 行
s=pd.Series([166,178,180],index=[”user1”,”user2”,”user3”]) #第2 行
print(s) #第3 行
执行该程序段后,输出的结果是( C )
A
B
C
D
166
178
180
0 166
1 178
2 180
user1 166
user2 178
user3 180
0 user1 166
1 user2 178
2 user3 180
【解析】 第2 行代码创建的Series 对象结构中指定了具体的索引内容,所以输出对象s 时分别输出指定的索引与值,选项C正确。
变式 有如下Python程序段:
import pandas as pd
s=pd.Series(range(70,100,10))
for i in s:
print(i)
执行该程序段后,输出的结果是( B )
A
B
C
D
70
80
90
70
80
90
70
80
90
100
0
1
2
【解析】 没有指定索引,默认是0,1,2,…,range(70,100,10)能取到的值有70,80,90,选项B正确。
有如下Python程序段:
import pandas as pd
data=[[1,2,3],[3,4,5],[6,7,8]]
df1=pd.DataFrame(data,index=['A','B','C'],columns=['E','F','G'])
print(df1)
执行该程序段后,输出的结果是( B )
A
B
C
D
E F G
1 2 3
3 4 5
6 7 8
E F G
A 1 2 3
B 3 4 5
C 6 7 8
A 1 2 3
B 3 4 5
C 6 7 8
A B C
E 1 2 3
F 3 4 5
G 6 7 8
【解析】 由创建DataFrame对象的语句可得,行索引为ABC,列标题为EFG,选项B正确。
变式 有如下Python 程序段:
import pandas as pd
df1=pd.DataFrame([[10]],columns=[”A”])
df2=pd.DataFrame([[20]],columns=[”A”])
df3=pd.DataFrame(data=[30,40],columns=[”B”])
df1=df1.append(df2)
df=df1.append(df3,ignore_index=True)
print(df)
执行该程序段后,输出的结果是( D )
A. B.
C. D.
【解析】 df1=pd.DataFrame([[10]],columns=[”A”]) #创建对象df1,有1列,列名为A
df2=pd.DataFrame([[20]],columns=[”A”])#创建对象df2,有1列,列名为A
df3=pd.DataFrame(data=[30,40],columns=[”B”])#创建对象df3,有1列,列名为B
df1.append(df2)#把df2添加到df1中
df=df1.append(df3,ignore_index=True)#把df3添加到df1中,此时共有2列
选项D正确。
某DataFrame 对象df 共包含6 个数据列、30 个数据行,其中第5 列为“总分”列,下列语句中能读取df 对象中“总分”列所有数据的是( D )
A.df.[总分] B.df.columns[4] C.df.”总分” D.df.总分
【解析】 DataFrame 对象中的一列可以通过字典记法或属性来检索,采用字典记法格式为对象名[标题名],因为此处列标题为字符型,所以可写作df['总分'],选项A 错误;采用属性索引某列格式为对象名标题名,标题名不可以加双引号,所以可写作df.总分,故选项C 错误,选项D 正确;columns 为DataFrame 对象的标题列表,所以df.columns[4]的值为'总分',选项B 错误。
变式1 2024·遂昌中学检测某DataFrame 对象中,包含“商品编码”“销售价格”“销售日期”等数据列。下列语句中,能将df 对象中的数据以“商品编码”为关键字降序排序的是( D )
A.df.sort_index(axis=1,ascending=True)
B.df.sort_values('商品编码',ascending=False)
C.df.sort_values('商品编码',ascending=True,inplace=True)
D.df.sort_values('商品编码',ascending=False,inplace=True)
【解析】 发现解决问题的关键在于将df 对象中的数据按“商品编码”从大到小排列。df 对象中的数据采用DataFrame 结构组织,因此可以使用sort_values()函数按“商品编码” 降序排列df 对象中的数据。参数ascending=False 为降序,inplace=True 为用排序结果替换df 中的数据,选项D正确。
变式2 “xscj1.csv”文件中数据包含“xm”“xh”“yw”“sx”等字段,有若干个数据行,执行下列程序段后,对象df_data中的数据将( A )
import pandas as pd
df_data=pd.read_csv(”xscj1.csv”)
df_data.drop(”yw”,axis=1)
df_data.drop(0)
df_data.sort_values(”sx”,inplace=True)
A.按“sx”升序排序 B.不再包含“yw”数据列
C.删除了第一行记录 D.增加了一个数据行
【解析】 drop()函数不改变原有对象中的数据,选项A正确。
变式3 2024·湖州中学检测小王收集了学校高一新生适应情况调查问卷的有关数据,数据样例如图所示。已知问卷第1 题内容如下:你对高中生活的适应情况如何?选项:A.完全不适应/B.不太适应/C.一般/D.基本适应/E.完全适应。每条数据依次包含姓名、班级及10 个问题的选择结果。为获取该题中选择“完全适应”的各班人数,编写的主要Python代码如下,请在横线处分别选择合适的代码填入。
import pandas as pd
df=pd.read_csv(open(”高一适应情况调查.csv”)) #读取文件“高一适应情况调查.csv”中的数据
df2=①__B__#筛选df 中选择为“完全适应”的数据作为新DataFrame
g=df2.groupby(”class”).②__D__
g=g.sort_values(”name”,ascending=False)[”name”].head(10)
A.df[”Q1”]=='E' B.df[df[”Q1”]=='E'] C.df[df[”Q1”]=='完全适应']
D.count() E. sum()
【解析】 ①由题干和图可知,完全适应是E,选项B正确;②要统计数量使用count(),选项D正确。
|随|堂|检|测|
1.下列关于大数据的说法中,不正确的是( B )
A.处理大数据时,一般采用分治思想
B.某学校的高考报名数据属于大数据
C.大数据的速度快不仅指数据产生的速度快,还指数据处理的速度快
D.Hadoop 是一个可运行于大规模计算机集群上的分布式系统基础架构
【解析】 选项B违背了大数据的4V 特征:密度低,体量大,类型多,更新速度和处理速度快,不属于大数据,选项错误。
2.下列关于Hadoop架构的说法中,正确的是( A )
A.采用MapReduce编程模型处理大规模数据集
B.不能运行于大规模计算机集群上
C.采用NTFS文件系统管理数据文件
D.是一个对大数据进行聚合式处理的基础软件框架
【解析】 选项B,Hadoop架构是一个可运行于大规模计算机集群上的分布式系统基础架构,选项错误;选项C,采用HDFS文件系统管理数据文件,选项错误;选项D,Hadoop是一个分布式系统基础架构,选项错误。
3.有如下Python程序段:
import pandas as pd
s1=pd.Series([”学习”,”运动”,”睡觉”,”吃饭”],index=[”01”,”02”,”03”,”04”])
s1[”03”]=”休息”
bm=s1.index
sub=s1.values
time=[40,90,79,30]
num=[13,2,10,3]
co1=[”活动”,”时长”,”次数”]
data={”活动”:sub,”时长”:time,”次数”:num}
df1=pd.DataFrame(data,index=bm,columns=co1)
print(df1[df1[”时长”]*df1[”次数”]>120])
执行该程序段后,输出的结果是( B )
活动 时长 次数
01 学习 40 True
02 运动 90 True
03 休息 79 True
活动 时长 次数
01 学习 40 13
02 运动 90 2
03 休息 79 10
A. B.
01 02 03
活动 学习 40 13
时长 运动 90 2
次数 休息 79 10
C. D.
【解析】 首先将睡觉修改为休息;执行bm=s1.index,bm为[”01”,”02”,”03”,”04”],执行sub=s1.values,sub为[”学习”,”运动”,”休息”,”吃饭”],创建df1=pd.DataFrame(data,index=bm,columns=co1),并筛选出时长和次数的乘积大于120的活动。
4.若要筛选本次考试数学分数超过120分且技术分数到达88分及以上的学生,并输出他们的考试情况,横线处应该填入的代码为( B )
df1=________
print(df1)
A.df[(df[”数学”]>=120)&(df[”技术”]>=88)]
B.df[(df[”数学”]>120)&(df[”技术”]>=88)]
C.df[(df[”数学”]>120)|(df[”技术”]>=88)]
D.df[(df[”数学”]>=120)|(df[”技术”]>88)]
【解析】 “且”是“与”的关系,使用“&”;超过120分使用“>120”;达到88分及以上使用“>=”88,选项B正确。
5.从Excel文件中读取数据。对数据按照票数降序排序,取票数最高的5本书的数据。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(”青少年热门书籍.xlsx”)
df2=________
df2=df2.head(5)
在程序中横线处填入代码,下列选项正确的是( B )
A.df.sort_index('票数',ascending=False)
B.df.sort_values('票数',ascending=False)
C.df.sort_values('票数',ascending=True)
D.df.sort_index('票数',ascending=True)
【解析】 sort_values是对值进行排序,要求降序排序ascending的值为False,选项B正确。
6.2024·台州地区检测小李收集了某奶茶门店2023 年11 月的销售数据,如图所示。
为统计分析该门店不同品类饮品的销售情况,小李编写了一个Python 程序。请回答下列问题。
(1)观察图中前6 条记录,其中存在的问题是__A__(单选,填字母)。
A.数据缺失 B.数据重复 C.数据异常 D.格式不一致
(2)完成数据整理后,读取文件,筛选出点单成功的数据,代码如下。
import pandas as pd
df=pd.read_excel(”salelist.xlsx”)
df1=________#
横线处应填入的代码为__B__(单选,填字母)。
A.df[df[”金额”]>0] B.df[df.点单状态==”成功”]
C.df1[df1[”金额”]>0] D.df1[df1.点单状态==”成功”]
【解析】 (1)第1条记录缺少“数量”数据,选项A符合题意。
(2)筛选出点单成功的数据,需要对df对象的点单成功列进行查找,可以填入df[df.点单状态==”成功”]或df[df[”点单状态”]==”成功”],选项B正确。
温馨提示:请完成高效作业16 )
学科网(北京)股份有限公司
$$