第二题:(与现场赛一样)
按照要求对给定csv格式数据进行处理。
task2.csv文件为本题的数据文件。利用Python编写代码完成以下任务:
(1)分别求取Max TemperatureF和Min TemperatureF两个特征的均值和方差。
(2)对Mean TemperatureF特征进行标准化,输出标准化之后的Mean TemperatureF特征的均值。
标准化采用计算公式如下:
x'=x-min(x)maxx-min(x)
其中,x表示标准化之前的特征,x'表示标准化之后的特征。
!说明:将代码源文件与运行结果截图放入答题卡对应位置。
import numpy as np
import pandas as pd
data = pd.read_csv('数据与代码/第二部分/task2.csv')
Max_TF_M = np.mean(data['Max TemperatureF'])
Max_TF_V = np.var(data['Max TemperatureF'])
Min_TF_M = np.mean(data['Min TemperatureF'])
Min_TF_V = np.var(data['Min TemperatureF'])
print("Max TemperatureF特征的均值为:", Max_TF_M, "方差为", Max_TF_V)
print("Min TemperatureF特征的均值为:", Min_TF_M, "方差为", Min_TF_V)
mean = data["Mean TemperatureF"]
res = (mean - mean.min()) / (mean.max() - mean.min())
data["Mean TemperatureF"] = res
mean_m = data["Mean TemperatureF"].mean()
print("标准化后的Mean TemperatureF的均值为:", mean_m)
第三题:
根据要求补全对应算法代码。
task3.txt为本题的数据文件,其内容为我国部分城市的经纬度坐标。task3.py为本题的代码文件。要求完成以下两个任务:
(1)根据经纬度坐标将所有数据利用Kmeans算法聚为10类;
(2)将聚类结果进行可视化(每一个城市表示为2维坐标平面的一个点,每一类中的点用同一种颜色,不同类的点采用不同颜色)。
!说明:将所补充代码源文件与运行结果截图放入答题卡对应位置。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import pandas as pd
from sklearn.metrics import silhouette_score
#读取原始数据
X = []
f = open("./数据与代码/第三部分/task3.txt", encoding="utf-8")
lineIndex = 1
for v in f:
if lineIndex > 1:
X.append([float(v.split()[1]), float(v.split()[2])])
else:
pass
lineIndex += 1
#转化为numpy array
X = np.array(X)
#类簇的数量
n_clusters = 10
#需要选手补全部分
#################################################################
model = KMeans(n_clusters)
model.fit(X)
# X = pd.DataFrame(X)
# print(X.head())
labels = model.labels_
print(silhouette_score(X, labels)) # 获取聚类结果总的轮廓系数
print(model.cluster_centers_) # 输出类簇中心
# MARKERS = ['*', 'v', '+', '^', 's', 'x', 'o', 'q', '&'] # 标记样式(绘图)
COLORS = ['r', 'g', 'm', 'c', 'y', 'b', 'orange', 'pink', 'red', 'gray'] # 标记颜色(绘图)
plt.figure(figsize=(10, 10))
plt.title("result", fontsize=20)
plt.xlabel("jing", fontsize=20)
plt.ylabel("wei", fontsize=20)
# for i in range(n_clusters): # 导出类簇元素
# print(f" CLUSTER-{i+1} ".center(60, '='))
# print(X[labels == i])
for i in range(n_clusters): # 绘制散点图
members = labels == i
plt.scatter(
X[members, 1],
X[members, 0],
marker='o',
c=COLORS[i],
s=60,
alpha=0.4
)
plt.grid()
#################################################
plt.title('China')
plt.show()