人工智能及Python应用 第11章 人工智能+金融应用 职业能力测评习题及答案_第1页
人工智能及Python应用 第11章 人工智能+金融应用 职业能力测评习题及答案_第2页
人工智能及Python应用 第11章 人工智能+金融应用 职业能力测评习题及答案_第3页
人工智能及Python应用 第11章 人工智能+金融应用 职业能力测评习题及答案_第4页
人工智能及Python应用 第11章 人工智能+金融应用 职业能力测评习题及答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人工智能+金融应用【职业能力测评】一、选择题1.机器学习按照学习方式可分为哪几类?(ABCD)(多选)A.有监督学习B.半监督学习C.无监督学习D.强化学习2.线性回归和逻辑回归之间的主要区别是(ABC)。(多选)A.线性回归用于预测连续值,而逻辑回归用于预测二分类标签。

B.线性回归的输出范围是(-∞,+∞),而逻辑回归的输出范围是(0,1)。

C.线性回归通常使用均方误差(MSE)作为损失函数,而逻辑回归使用交叉熵损失函数。

D.线性回归可以处理多分类问题,而逻辑回归只能处理二分类问题。3.线性回归是一种(B)。A.分类算法B.回归算法C.聚类算法D.优化算法4.逻辑回归是一种(A)。A.分类算法B.回归算法C.聚类算法D.优化算法5.准确率是最常用的分类性能指标,其计算公式为(D)。Accuracy=TP/((TP+FP)Accuracy=TP/(TP+FN)Accuracy=1/Precisin+1/RecallAccuracy=(TP+TN)/(TP+FN+FP+TN)二、实训操作题【Python程序开发-技能竞赛真题】配套教学资源中的day.csv文件中包含了多个城市2011年1月1日至2022年4月30日的天气数据。原始数据中存在脏数据,不能直接用于后续数据分析,现需要对该表数据进行清洗操作,并将清洗之后的数据进行保存。参考代码:importnumpyasnp

importpandasaspd

importdatetimeasdt

defdeal_tem_col(df,tem_col):

"""将温度处理成浮点型,传入df和要处理的列名"""

#将温度后面的C去掉

df[tem_col]=df[tem_col].apply(lambdax:x[:-1]ifxisnotnp.nanelsex)

#将空串替换为np.nan

df[tem_col]=df[tem_col].replace('',np.nan)

#将除空值以外的数据变为浮点型,方便计算

df[tem_col]=df[tem_col].apply(lambdax:float(x)ifxisnotnp.nanelsex)

defgen_full_df(origin_df,all_date,left_on,right_on,sorted_field,drop_col=None):

"""

定义函数生成日期完整的DataFrame

origin_df:原始数据

all_date:完整的日期

left_on:左连接字段

right_on:右连接字段

sort_field:排序字段

drop_col:要删除的字段

"""

new_list=[]#获取城市

citys=pd.unique(origin_df['city'])

forcityincitys:

#筛选城市的DataFrame

city_df=origin_df.loc[origin_df['city']==city]

#将城市的DataFrame和日期合并

merge_df=pd.merge(city_df,all_date,left_on=left_on,right_on=right_on,how='right')

#合并后,有些数据城市为nan,修改城市列

merge_df['city']=city

#将表中的date_week删掉

ifdrop_col:

merge_df=merge_df.drop(labels=drop_col,axis=1)

#按日期降序排序

merge_df=merge_df.sort_values(by=sorted_field,ascending=False,ignore_index=True)

new_list.append(merge_df)

full_df=pd.concat(new_list)

returnfull_df

defget_wind_direction_and_level(winds):

"""

传入原有风力,得到风向和风力等级

winds:原有的风力列

"""

#定义风向和风力列表

wind_directions,wind_levels=[],[]

#遍历风力

forwindinwinds:

try:

wind_split=wind.split()

#如果切分长度等于2

iflen(wind_split)==2:

#前面代表风向

wind_directions.append(wind_split[0])

#后面代表风力等级

wind_levels.append(wind_split[1])

else:

wind_directions.append(np.nan)

wind_levels.append(np.nan)

exceptException:

wind_directions.append(np.nan)

wind_levels.append(np.nan)

returnwind_directions,wind_levels

defget_mode(x):

"""求众数,求不到返回nan"""

try:

returnx.mode().values[0]

exceptException:

returnnp.nan

deffill_null_value(wait_fill_df,to_fill_df,col_name,idx1,idx2):

"""

wait_fill_df:待填充的DataFrame

to_fill_df:填充的DataFrame

col_name:需要填充列名

idx1:从填充DataFrame中去查询数据的字段索引

idx2:从填充DataFrame中去查询数据的字段索引

"""

#按列筛选出该列存在缺失值的数据

col_value=wait_fill_df.loc[wait_fill_df[col_name].isnull()]

#空值列表

null_list=[]

forrowincol_value.values:#计算应该填充的值

null_v=to_fill_df.loc[(row[idx1],row[idx2]),col_name]

null_list.append(null_v)

#将计算出来的值赋值到原来为nan的地方

wait_fill_df.loc[wait_fill_df[col_name].isnull(),col_name]=null_list

print("%s填充成功"%col_name)

#处理每日天气数据

defdeal_day_data():

#1.1获取2011年1月1日至2022年4月30日的所有天数

days=pd.date_range(start='2011-01-01',end='2022-04-30',freq='D').to_frame(name='date').astype({'date':'str'})

print("天数:%s"%len(days))

#1.2读取每日数据,根据数据实际存放路径修改

day_df=pd.read_csv('../data/day.csv')

print(day_())

print(day_df.describe())

print("#"*30)

#将id设置为行索引

day_df=day_df.set_index('id')

#1.3处理date_week

day_df['date_week']=day_df['date_week'].apply(lambdax:x[:10])

#1.4处理最高温和最低温

#查看以下最高温中各类数据的频数,除了空值之外,基本就是数字+C这种形式

vc=day_df['hightest_tem'].value_counts()

#print(vc)

deal_tem_col(day_df,'hightest_tem')

deal_tem_col(day_df,'lowest_tem')

#1.5去重,按照城市和日期去重

print("去重前:",len(day_df))#后续删除

day_df=day_df.drop_duplicates(subset=['city','date_week'])

print("去重之后数据条数:%s"%len(day_df))

#1.6生成日期完整的DataFrame

full_day_df=gen_full_df(day_df,days,left_on='date_week',right_on='date',sorted_field='date',

drop_col='date_week')

#1.7从风力中得到风向和风力等级

full_day_df['wind_direction']=get_wind_direction_and_level(full_day_df['wind'].values)[0]

full_day_df['wind_level']=get_wind_direction_and_level(full_day_df['wind'].values)[1]

#处理之后,将原来的风力删掉

full_day_df.drop(labels='wind',axis=1,inplace=True)

#1.8填充缺失值

#每天的缺失值需要按照其它年份相应月相应天的平均值来填充,比如2022年1月1日的数据缺失,我们需要用除该年之外的其它年份的1月1日数据填充

#首先需要生成一列,月日,用于分组

full_day_df['month_day']=full_day_df['date'].apply(lambdax:x[5:])

#按照城市和month_day分组,温度求平均值,weather、风向、风力等级求众数,这些值计算出来用于填充缺失值

month_day_group=full_day_df.groupby(by=['city','month_day']).agg({'hightest_tem':'mean','lowest_tem':'mean',

'weather':get_mode,

'wind_direction':get_mode,

'wind_level':get_mode})

#对刚才分组得到的df中的nan进行填充,以该列的平均值和众数来填充

month_day_group['hightest_tem']=month_day_group['hightest_tem'].fillna(month_day_group['hightest_tem'].mean())

month_day_group['lowest_tem']=month_day_group['lowest_tem'].fillna(month_day_group['lowest_tem'].mean())

month_day_group['weather']=month_day_group['weather'].fillna(month_day_group['weather'].mode()[0])

month_day_group['wind_direction']=month_day_group['wind_direction'].fillna(

month_day_group['wind_direction'].mode()[0])

month_day_group['wind_level']=month_day_group['wind_level'].fillna(month_day_group['wind_level'].mode()[0])

#print(month_day_group)

#为含有缺失值的列进行填充

fill_null_value(full_day_df,month_day_group,'hightest_tem',0,-1)

fill_null_value(full_day_df,month_day_group,'lowest_tem',0,-1)

fill_null_value(full_day_df,month_day_group,'weather',0,-1)

fill_null_value(full_day_df,month_day_group,'wind_direction',0,-1)

fill_null_value(full_day_df,month_day_group,'wind_level',0,-1)

#1.9这里处理一下,如果最高温比最低温还低,则将最高温改为最低温+5

diff=full_day_df['hightest_tem']-full_day_df['lowest_tem']

diff[diff<0]=5

full_day_df['hightest_tem']=full_day_df['lowest_tem']+diff

#1.10温度保留2位小数

full_day_df['hightest_tem']=full_day_df['hightest_tem'].apply(lambdax:round(x,2))

full_day_df['lowest_tem']=full_day_df['lowest_tem'].apply(lambdax:round(x,2))

#生成星期

weekday_dic={0:"星期一",1:'星期二',2:'星期三',3:'星期四',4:'星期五',5:'星期六',6:'星期天'}

full_day_df['weekday']=full_day_df['date'].apply(

lambdax:weekday_dic[dt.datetime.strptime(x,'%Y-%m-%d').weekday()])

#查看清洗后的info()、describe()

print(full_day_())

print("*"*30)

print(full_day_df.describe())

#1.11存储,根据数据实际需存放路径修改

full_day_df.to_csv('../data/cleaned_data/clean_day.csv',index=False,encoding='utf-8')

if__name__=='__main__':

deal_day_data()代码运行结果:天数:4138<class'pandas.core.frame.DataFrame'>RangeIndex:127666entries,0to127665Datacolumns(total7columns):#ColumnNon-NullCountDtype----------------------------0id127666non-nullint641city127666non-nullobject2date_week127666non-nullobject3hightest_tem127664non-nullobject4lowest_tem127663non-nullobject5weather127654non-nullobject6wind127665non-nullobjectdtypes:int64(1),object(6)memoryusage:6.8+MBNoneidcount127666.000000mean63835.487021std36855.085885min0.00000025%31918.25000050%63835.50000075%95751.750000max127670.000000##############################去重前:127666去重之后数据条数:123542hightest_tem填充成功lowest_tem填充成功weather填充成功wind_direction填充成功wind_level填充成功<class'pandas.core.frame.DataFrame'>Int64Index:124140entries,0to4137Datacolumns(total9col

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论