9.现有如下图所示的学生信息,请根据图中的信息完成以下操作(1)根据年级信息为分组键,对学生信息进行分组,并输出大一学生信息。(2)分别计算出四个年级中身高最高的同学。(3)计算大一学生与大三学生的平均体重。
答:#(1)import pandas as pdstudnets_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_datadata=studnets_data.groupby('年级')Freshman=dict([x for x in data])['大一']print(Freshman)#
(2)data=data.apply(max)del data['年级']print(data)#
(3)Junior=dict([x for x in data])['大三']print(Freshman['体重'].apply('mean'))print(Junior['体重'].apply('mean'))
10.现有如下图所示的两组数据,其中A组中B列数据存在缺失值,并且该列数据为int类型B组中的数据均为str类型。接下来,请对这些数据进行以下操作(1)使用 DataFrame 创建这两组数据(2)现在需要使用B组中的数据对A组中的缺失值进行填充并保持数据类型一致(3)将合并后 A 组中索引名为 key 的索引重命名为 D答:#(1)import pandas as pdimport numpy as npgroup_a=pd.DataFrame({'A':[2,3,5,2,3],'B':['5',nan,'2','3','6'],'C':[8,7,50,8,2],'key':[3,4,5,2,5]})group_b=pd.DataFrame({'A': [3,3,3],'B': [4,4,4],'C': [5,5,5]})#
(2)group_a=group_a.combine_first(group_b)group_a#
(3)group_a.rename(columns={'key':'D'})
11.中国已经成为了体育大国,从 2008 年的夏季奥运会到 2022 年的冬季奥运会(1)计算中国男篮、女篮运动员的平均身高与平均体重(2)统计中国篮球运动员的年龄分布情况(3)计算中国篮球运动员的体质指数
答:# 读取运行员信息表.csv文件中的内容f1=open('C:/Users/admin/Desktop/运动员信息表.csv')df=pd.read_csv(f1)df# 按项目一列进行分组data_group=df.groupby('项目')# 输出篮球分组的信息df_basketball=dict([x for x in data_group])['篮球']df_basketball
# 按性别一列进行分组,并使用方法groupby_sex=df_basketball.groupby('性别')groupby_sex.mean()
# 使用 transfrom 方法将数据进行聚合,并利用其特性将平均值进行广播info=groupby_sex.transform('mean')info
# 查看男篮运动员的分组baseketball_male=dict([x for x in groupby_sex])['男']baseketball_male
# 求数据极差的函数def range_data_group(arr):return arr.max()-arr.min()
# 求年龄、身高、体重这三列数据的极差值baseketball_male.agg({'年龄(岁)':range_data_group,'身高(cm)':range_data_group,'体重(kg)':range_data_group})
# 添加“体质指数”列df_basketball['体质指数']=0df_basketball# 定义计算 BMI 值的函数def outer(num):def ath_bmi(sum_bmi)weight=df_basketball['体重(kg)']height=df_basketball['身高(cm)']sum_bmi=weight/(height/100)**2return num+sum_bmireturn ath_bmiall_bmi=df_basketball['体质指数']df_basketball['体质指数']=df_basketball[['体质指数']].apply(outer(all_bmi))df_basketbal
12.有一组关于北京和天津地区的统计信息,(1)检查重复数据,一旦发现有重复的数据,就需要将其进行删除。(2)检查缺失值,为了保持数据的完整性,通常会使用某个数据填充(3)检查异常值,一旦发现数据中存在异常值,通常先要对照原始数据进一步确认,如果是错误的数值,则直接使用正确的数值进行替换即可。(4)对北京和天津数据进行合并
答:import pandas as pd
# 读取北京地区信息file_path_bj=open('C:/Users/admin/Desktop/北京地区信息.csv')file_data_bjinfo=pd.read_csv(file_path_bj)file_data_bjinfo
# 读取天津地区信息file_path_tj=open('C:/Users/admin/Desktop/天津地区信息.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_bjinfofile_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
# 对北京地区信息进行异常值检测import matplotlib.pyplot as pltplt.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(亿元)','常住人口(万人)'])# 对两地信息数据进行合并pd.concat([file_data_bjinfo,file_data_tjinfo],ignore_index=True)
13. 给定一个餐饮订单数据文件(meal_order_detail.xlsx),(1)读取excel文件中的数据到 DataFrame 中。(2)使用索引操作选择特定列的数据。(3)对 DataFrame 中的数据进行算术运算,如计算订单的总金(4)对 DataFrame 进行排序,如按照订单金额从高到低排序。(5)使用统计功能,计算各个菜品的销售总量和销售总金额。(6)使用层次化索引,对菜品进行分类汇总。
答:#(1)读取CSV文件df=pd.read_csv('orders.csv')#(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','amounts': 'sum',)}).rename(columns={'counts':'total_sold','amounts':'total_revenue_based_on_single_price'})# 如果需要基于总价计算销售总金额,请使用下面的代码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'})#如果需要基于总价计算层次化索引的销售总金额,请在groupby之后对'total_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