lzhandbyz

第一题

现有如下图所示的学生信息,请根据图中的信息完成以下操作(1)根据年级信息为分组键,对学生信息进行分组,并输出大一学生信息。(2)分别计算出四个年级中身高最高的同学。(3)计算大一学生与大三学生的平均体重。
#(1) 大一学生信息:
import pandas as pd
studnets_data = pd.DataFrame({'年级':['大一','大二','大三',
'大四','大二','大三',
'大一','大三','大四'],
'姓名':['李宏卓','李思真','张振海',
'赵鸿飞','白蓉','马腾飞',
'张晓凡','金紫萱','金烨'],
'年龄':[18,19,20,21,
19,20,18,20,21],
'身高':[175,165,178,175,
160,180,167,170,185],
'体重':[65,60,70,76,55,
70,52,53,73]})
studnets_data
#(2)身高最高的同学 :
data = studnets_data.groupby('年级')
Freshman = dict([x for x in data])['大一']
print(Freshman)
data = studnets_data.apply(max)
del data['年级']
print(data)
#(3)平均体重 :
data = studnets_data.groupby('年级').apply(lambda x: x.to_dict(orient='list')).to_dict()
Freshman = data['大一']
avg_weight_freshman = sum(Freshman['体重']) / len(Freshman['体重'])
print(f"平均体重 (大一): {avg_weight_freshman}")
Junior = data['大三']
avg_weight_junior = sum(Junior['体重']) / len(Junior['体重'])
print(f"平均体重 (大三): {avg_weight_junior}")

第二题

现有如下图所示的两组数据,其中A组中B列数据存在缺失值,并且该列数据为int类型B组中的数据均为str类型。接下来,请对这些数据进行以下操作(1)使用 DataFrame 创建这两组数据(2)现在需要使用B组中的数据对A组中的缺失值进行填充并保持数据类型一致(3)将合并后 A 组中索引名为 key 的索引重命名为
#(1)创建两组数据:
import pandas as pd
import numpy as np
group_a = pd.DataFrame({'A': [2,3,5,2,3],
'B': ['5',np.nan,'2','3','6'],
'C': [8,7,50,8,2],
'key': [3,4,5,2,5]})
group_b = pd.DataFrame({'A': [3,4,5],
'B': [3,4,5],
'C': [3,4,5]})
print(group_a)
print(group_b)
#(2)保持数据类型一致:
group_a = group_a.combine_first(group_b)
group_a
#(3)重命名:
group_a.rename(columns={'key':'D'})

第三题

中国已经成为了体育大国,从 2008 年的夏季奥运会到 2022 年的冬季奥运会(1)计算中国男篮、女篮运动员的平均身高与平均体重(2)统计中国篮球运动员的年龄分布情况(3)计算中国篮球运动员的体质指数
#(1) 平均身高与平均体重:
import pandas as pd
file_path=open('运动员信息表.csv')
df=pd.read_csv(file_path)
data_group=df.groupby('项目')
df_basketball=dict([x for x in data_group])['篮球']
df_basketball
sex_grouped =df_basketball.groupby("性别")[["年龄(岁)","身高(cm)","体重(kg)"]].mean()
print(sex_grouped)
#(2) 统计年龄分布情况
age_distribution = df_basketball['年龄(岁)'].value_counts().sort_index()
print(age_distribution)
#(3) 体质指数:
# 计算 bmi 数值
df_basketball['体质指数']=0
df_basketball
def outer(num):
def bminum(sumbim):
weight=df_basketball["体重(kg)"]
height=df_basketball["身高(cm)"]
sumbim=weight /(height/100)**2
return num+sumbim
return bminum
# 调用函数
bimdata=df_basketball["体质指数"]
df_basketball["体质指数"]=df_basketball[["体质指数"]].apply(outer(bimdata))
df_basketball

第四题

有一组关于北京和天津地区的统计信息,(1)检查重复数据,一旦发现有重复的数据,就需要将其进行删除。(2)检查缺失值,为了保持数据的完整性,通常会使用某个数据填充(3)检查异常值,一旦发现数据中存在异常值,通常先要对照原始数据进一步确认,如果是错误的数值,则直接使用正确的数值进行替换即可。(4)对北京和天津数据进行合并
import pandas as pd
#(1)查询重复数据并进行删除
# 读取北京地区信息
file_path_bj = open('北京地区信息.csv')
file_data_bjinfo = pd.read_csv(file_path_bj)
file_data_bjinfo
# 读取天津地区信息
file_path_tj = open('天津地区信息.csv')
file_data_tjinfo = pd.read_csv(file_path_tj)
file_data_tjinfo
# 检测 file_data_bjinfo 中的数据,返回 True 的表示是重复数据
file_data_bjinfo.duplicated()
# 检测 file_data_tjinfo 中的数据,返回 True 的表示是重复数据
file_data_tjinfo.duplicated()
# 北京地区 删除重复数据
file_data_bjinfo = file_data_bjinfo.drop_duplicates()
file_data_bjinfo
#(2)对数据进行填充
file_data_tjinfo.isnull() # 检测数据是否存在缺失数据
# 计算常住人口的平均数,设置为 float 类型并保留两位小数
population = float("{:.2f}".format(file_data_tjinfo['常住人口(万人)'].mean()))
# 以字典映射的形式将需要填充的数据进行对应
values={'常住人口(万人)':population}
file_data_tjinfo = file_data_tjinfo.fillna(value=values)
file_data_tjinfo
#(3)检测异常
# 对北京地区信息进行异常值检测
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
file_data_bjinfo.boxplot(column=['行政面积(K㎡)','户籍人口(万人)','男性','女性','GDP(亿元)
','常住人口(万人)'])
# 对天津地区信息进行异常值检测
file_data_tjinfo.boxplot(column=['行政面积(K㎡)','户籍人口(万人)','男性','女性','GDP(亿元)
','常住人口(万人)'])
#(4)数据进行合并
# 对两地信息数据进行合并
pd.concat([file_data_bjinfo,file_data_tjinfo],ignore_index=True)

第五题

给定一个餐饮订单数据文件(meal_order_detail.xlsx),(1)读取excel文件中的数据到 DataFrame 中。(2)使用索引操作选择特定列的数据。(3)对 DataFrame 中的数据进行算术运算,如计算订单的总金(4)对 DataFrame 进行排序,如按照订单金额从高到低排序。(5)使用统计功能,计算各个菜品的销售总量和销售总金额。(6)使用层次化索引,对菜品进行分类汇总。
正确答案:
import pandas as pd
import numpy as np
# 1. 读取 xlsx 文件
df = pd.read_excel(r'meal_order_detail.xlsx')
df
# 2. 索引操作选择特定列的数据(例如:选择 dishes_name 和 amounts 列)
selected_columns_df = df[['dishes_name', 'amounts']]
print("Selected Columns:")
# 打印选定的列的前几行
print(selected_columns_df.head())
# 3. 算术运算(计算订单中每个菜品的总价)
df['total_price'] = df['amounts'] * df['counts']
print("\nArithmetic Operation - Total Price per Dish:")
# 打印菜品名、数量、单价和总价的前几行
print(df[['dishes_name', 'counts', 'amounts', 'total_price']].head())
# 4. 排序(例如:按照订单的总价从高到低排序)
sorted_df = df.sort_values(by='total_price', ascending=False)
print("\nSorted DataFrame by Total Price:")
# 打印按总价排序后的前几行
print(sorted_df[['dishes_name', 'total_price']].head())
# 5. 统计(例如:计算各个菜品的销售总量和销售总金额)
sales_summary = df.groupby('dishes_name').agg({
'counts':'sum', # 计算销售总量
'total_price':'sum' # 计算基于总价的销售总金额
}).rename(columns={'counts':'total_sold','total_price':'total_revenue'})
print("\nSales Summary:")
print(sales_summary.head()) # 打印销售统计的前几行
# 6. 层次化索引(例如:先按 parent_class_name 分类,再按 dishes_name 分类,计算销售总量和
销售总金额)
# 假设 parent_class_name 列存在于数据集中,并且我们希望根据这个分类进行分组
hierarchical_index_df = df.groupby(['parent_class_name',
'dishes_name']).agg({

'counts': 'sum',
'amounts': 'sum'
}).rename(columns={'counts': 'total_sold', 'amounts':
'total_revenue_based_on_single_price'})
print("\nHierarchical Indexing Sales Summary:")
print(hierarchical_index_df.head()) # 打印层次化索引销售统计

1.请简述创建 NumPy 数组的函数有哪些

答:创建NumPy数组的方法有 array()、zeros()、ones()、empty()、arange()函数

2.请简述什么是标量运算

答:大小相等的数组之间的任何算术运算都会将运算应用到元素级,同样,数组与标量的算术运算也会将那个标量值传播到各个元素。当数组进行相加、相减、乘以或除以一个数字时,这些称为标量运算

3.请简述什么是 DataFrame

答:DataFrame是一个类似于二维数组或表格(如excel)的对象,它每列的数据可以是不同的数据类型。与Series的结构相似,DataFrame的结构也是由索引和数据组成的,不同的是,DataFrame的索引不仅有行索引,还有列索引

4.请简述基于情感词典进行情感极性分析的实现流程答:(1)对文本进行分词操作,从中找出情感词、否定词以及程度副词。(2)判断每个情感词之前是否有否定词及程度副词,将它之前的否定词和程度副词划分为一组。如果存在否定词,则将情感词的情感权值乘以-1;如果有程度副词,就乘以程度副词的程度值。(3)将所有组的得分加起来,得分大于0的归于正向,小于0的归于负向

5.请简述建立 ARIMA 模型的基本步骤

答:(1) 获取被观测的时间序列数据;(2) 根据时间序列数据进行绘图,观测是否为平稳时间序列。对于非平稳时间序列,需要进行d阶差分运算,转化为平稳时间序列。(3) 对以上平稳的时间序列,分别求得其自相关系数ACF和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层p和阶数q。(4) 根据上述计算的d、q、p得到ARIMA模型,然后对模型进行检验

6.请列举几个常用的统计计算方法,并说明它们的作用

答:常用的统计方法有sum、mean、median、max、min等,其中sum 表示计算运算结果的和;mean 表示计算运算结果的平均值;median 表示计算运算结果的中位数;max/min 表示计算运算结果的最大值/最小值

7.请阅读下面一段程序:import pandas as pddate_list=['2015/06/01', '2017/06/01', '2016/08/01','2016.6.1','2018.6.1']date_index=pd.to_datetime(date_list)date_ser=pd.Series(np.arange(5), index=date_index)date_ser.sort_index().truncate(after='2016-7-31')运行上述程序,它最终执行的结果是什么

答:2015-06-01 0、2016-06-01 3、dtype: int328.请使用 NLTK 对“I like playing basketball.”进行分词操答:import nltk sentence = "I like playing basketball." words = nltk.word_tokenize(sentence)9

判断

 Anconda 不支持 Python2.x 版本。

数据分析是一个有目的地收集和整合数据的过程。

Matplotlib 是一个用在 Python 中绘制数组的 3D 图形库。

如果两个数组的形状不同,则它们是无法执行算术运算的

如果希望创建一个数组,则只能用 array()函数实现

通过 empty()函数创建的数组中所有元素值都是 NaN。

ndarray 对象的数据类型可以通过 type()方法进行转换。

数组使用切片和索引的方式与列表完全一样。

假设当前有一个 3 行 3 列的 ndarray 数组,如果想要获取第 3 行第 2 列的元素,可以使用 ndarray[3,2]。

ndarray 对象不支持切片操作。

通用函数会对数组中的每一个元素都进行操作。

all()函数用于找出数组中的唯一值。

Pandas 只有 Series 和 DataFrame 两种数据结构。

Pandas 中的索引对象是可以修改的。

通过 from_arrays()方法可以将元组列表转换为 MultiIndex 对象。

read_csv()和 read_table()函数没有任何区别。

read_html()函数可以读取网页中所有的数据。

Series 对象可以具有多层索引结构。

缺失数据是人为有意造成的。

fillna()方法处理缺失数据时可以使用 Series 对象填充,但不可以使用 DataFrame 对象填充。

使用 to_numberic()函数可以对任何数据类型进行修改。

使用 concat()函数合并数据时,可以通过左连接和右连接这两种方式连接。

drop_duplicated()方法可以删除重复值。

具有多层索引的 DataFrame 对象经过 stack()重塑后,返回的是一个 Series 对象。

使用 merge()函数进行数据合并时,不需要指定合并键。

groupby()方法不能使用函数做为分组键。

使用 groupby()方法进行分组时,其分组键中的数据类型必须是相同的。

只要使用 groupby()方法分组,就会产生一个 DataFrameGroupby 对象

使用 agg()方法进行聚合运算会对产生的标量值进行广播。

apply()方法可以将某个函数应用到 DataFrame 对象的每个数据。

使用 Series 对象做为分组键时,必须保证 Series 对象的长度与被分组数组的长度相等。

通过 agg()方法进行聚合时只能接收单个函数。

散点图包含的数据点越少,比较的效果就会越好。

我们可以调用 new()函数构建一张新的空白画布。

如果希望一次性创建一组子图,则可以通过 subplot()函数进行实现。

时间序列是不能使用位置索引来获取数据。

在操作时间戳索引时,可以直接使用任何日期字符串来选取子集。

在创建 DatetimeIndex 对象时,如果只是指定了开始日期与结束日期,则默认生成的时间戳是按小 时计算的。

时间序列的移动是指沿着纵轴方向将数据进行前移或后移。

若调用 shift()方法时传入一个正数,则表明时间序列中的数据会沿着纵轴反方向移动一次。

Period 对象不支持参与数学运算。

如果是将低频率数据转换到高频率数据,则称为降采样。

在降采样时,时间序列的数据量是增加的。

时间序列分析没有任何硬性的要求。

NLP 主要是实现人与计算机之间用英文进行有效沟通。

文本数据可以直接用来分析,不需要做任何处理。

如果将 cut()函数的 cut_all 参数设为 False,则表示按照全模式进行分词。

词干提取能够捕捉基于词根的规范单词形式。

如果两个向量的夹角越小,则表示它们越不相似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值