**一**
因为NumPy数组在数值运算方面的效率优于Python提供的list,所以灵活掌握NumPy中数组的创建和基础的运算是有必要的。请使用NumPy库,编写Python代码完成下列操作:启动Jupyter Notebook创建一个Notebook。(2分)创建一个数值从0至1,间隔为0.01的数组arr1。(2分)创建一个包含101个服从正态分布的随机数的数组arr2。(注意:数组arr2为一维数组)(2分)对数组arr1和数组arr2进行四则运算,并输出其结果。(四则运算包括加、减、乘、除运算)(2分)对数组arr2进行简单的统计分析,并输出其结果。(统计分析包括对数组进行升序排序、求和、求均值、求标准差和求最小值操作)。(5分)
----------------分割线-------------------
#(1)启动JupyterNotebook创建一个Notebook。(2分)C:\Users\Administartor>jupyernotebook#(2)创建一个数值从0至1,间隔为0.01的数组arr1。(2分)
import numpy as nparr1 =np.arange(0, 1.01, 0.01)
#(3)创建一个包含101个服从正态分布的随机数的数组arr2。(注意:数组arr2为一维数组)(2分)
arr2 = np.random.randn(101)
#(4)对数组arr1和数组arr2进行四则运算。(四则运算包括加、减、乘、除运算)(2分)
print('两数组之和为:\n', arr1 + arr2)print('两数组之差为:\n', arr1 - arr2)print('两数组之积为:\n', arr1 * arr2)print('两0数组之商为:\n', arr1/ arr2)
#(5)对数组arr2进行简单的统计分析。(统计分析包括对数组进行升序排序、求和、求均值、求标准差和求最小值操作)。
print('排序后数组为:', np.sort(arr2))print('数组的和为:', np.sum(arr2))print('数组的均值为:', np.mean(arr2))print('数组的标准差为:', np.std(arr2))print('数组的最小值为:', np.min(arr2))
#(6)将数组arr1和数组arr2存储为当前工作路径下的一个二进制格式的文件arr.npz。(2分)
np.savez('arr.npz', arr1, arr2)
**二**
请编写Python代码,对鸢尾花数据完成下列操作:读取数据文件iris.csv,储存为数据框iris,并将数据框的列名称从左至右依次修改为“sepal_length”“sepal_width”“petal_length”“petal_width”“class”。(3分)将数据框iris中“petal_length”列的第0行至第9行设置为缺失值。(注意:在Python中,索引为0开始。)(3分)将数据框iris中“petal_length”列的缺失值全部替换为1.0。(3分)删除数据框iris中“class”列。(2分)将数据框iris的前3行设置为缺失值。(2分)删除数据框iris中存在缺失值的行。(2分)重新设置数据框iris的行索引。(3分)将数据框iris保存到当前工作路径下并命名为iris_new.csv。(2分)
------------------分割线-----------------
# (1)读取数据文件iris.csv,储存为数据框iris,并将数据框的列名称从左至右依次改修为“sepal_length”“sepal_width”“petal_length”“petal_width”“class”。(3分)
importpandas as pdiris =pd.read_csv('iris.csv', header=None)iris.columns= ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
# (2)将数据框iris中“petal_length”列的第0行至第9行设置为缺失值。(注意:在Python中,索引为0开始。)(3分)
iris.loc[0:9, 'petal_length'] = None
#(3)将数据框iris中“petal_length”列的缺失值全部替换为1.0。(3分) iris['petal_length'].fillna(1.0,inplace=True)# (4)删除数据框iris中“class”列。(2分)deliris['class']
# (5)将数据框iris的前3行设置为缺失值。(2分)iris.iloc[0:3, :] = None# (6)删除数据框iris中存在缺失值的行。(2分)iris.dropna(how='any',inplace=True)# (7)重新设置数据框iris的行索引。(3分)iris.reset_index(drop=True,inplace=True)#(8)将数据框iris保存到当前工作路径下并命名为iris_new.csv。(2分)iris.to_csv('iris_new.csv')
**三**
葡萄酒是以葡萄为原料酿造的一种果酒。葡萄酒的品种很多,因葡萄的栽培、葡萄酒生产工艺条件的不同,产品风格各不相同。wine数据集包含3种不同的葡萄酒的记录共178条。其中,每个特征对应葡萄酒的每种化学成分,并且都属于连续型数据。通过对wine数据集的数据进行聚类,实现葡萄酒的类别划分。请依据wine数据集,编写Python代码完成下列操作:读取数据文件wine.csv,并储存为数据框wine。(1分)查询据框wine中是否存在缺失值。若存在缺失值,则需对其进行处理;反之,则无需处理。(2分)在wine数据集中,“Class”列为葡萄酒的类别,分别为1、2和3。绘制各类别的数量占比饼图。(4分)将数据框wine的数据和标签进行拆分,分别储存至数据框wine_data和数据框wine_label。(3分)将数据划分为训练集和测试集,训练集和测试集样本数比例为8:2,并将训练集数据、测试集数据、训练集标签和测试集标签分别储存至数据框wine_train、数据框wine_test、数据框wine_train_label和数据框wine_test_label。(3分)构建聚类数目为3的K-Means模型,并命名为kmeans。(4分)对比真实标签和聚类标签,求取FMI(FMI为聚类模型的评价指标),并输出其结果。(4分)当聚类数目为2~10类时,确定最优聚类数目。(4分)
-----------------分割线------------------
#(1)读取数据文件wine.csv,并储存为数据框wine。(1分)
importpandas as pdwine= pd.read_csv('wine.csv', encoding='gb18030')
#(2)查询据框wine中是否存在缺失值。若存在缺失值,则需对其进行处理;反之,则无需处理。(2分)
print(wine.isnull().sum()) # 由此可知无空值,无需处理
#(3)在wine数据集中,“Class”列为葡萄酒的类别,分别为1、2、3。绘制各类别的数量占比饼图。(4分)
wine_class= wine['Class'].value_counts() # 各类别数量importmatplotlib.pyplot as pltplt.rcParams['font.sans-serif']= 'SimHei' # 正常显示中文plt.rcParams['axes.unicode_minus'] = False # 正常显示符号plt.pie(wine_class,labels=wine_class.index, autopct='%.2f%%') # 小数点个数plt.title('各红酒类别占比图')plt.show()
#(4)将数据框wine的数据和标签进行拆分,分别储存至数据框wine_data和数据框wine_label。(3分)
wine_data= wine.iloc[: , 1: 14] # 数据wine_label= wine.iloc[: , 0] # 标签
#(5)将数据划分为训练集和测试集,训练集和测试集样本数比例为8:2,并将训练集数据、测试集数据、训练集标签和测试集标签分别储存至数据框wine_train、数据框wine_test、数据框wine_train_label和数据框wine_test_label。(3分)fromsklearn.model_selection import train_test_splitwine_train,wine_test, wine_train_label, wine_test_label = train_test_split\(wine_data,wine_label, test_size=0.2, random_state=42)
#(6)构建聚类数目为3的K-Means模型,并命名为kmeans。(4分)
fromsklearn.cluster import KMeans # 导入分类器库kmeans= KMeans(n_clusters = 3, random_state=123).fit(wine_train) # 构建并训练模型
#(7)对比真实标签和聚类标签,求取FMI(FMI为聚类模型的评价指标),并输出其结果。(4分)
fromsklearn.metrics import fowlkes_mallows_scorescore= fowlkes_mallows_score(wine_train_label.tolist(), kmeans.labels_)print('wine数据集的类中心为3时,其FMI的评价分值为:%f'%score)
#(8)当聚类数目为2~10类时,确定最优聚类数目。(4分)
fori in range(2, 11):kmeans =KMeans(n_clusters=i, random_state=123).fit(wine_train)score =fowlkes_mallows_score(wine_train_label, kmeans.labels_)print('wine数据聚%d类FMI评价分值为:%f' %(i, score))#由此可知,最优聚类数目为2