from numpy import *
import random
import numpy as np
from sklearn.cluster import KMeans
import re
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.colors
import csv
import pandas as pd
from sklearn.metrics import silhouette_score
from scipy.spatial.distance import cdist
import imp
import imp
#计算两个点之间的欧氏距离
def calcuDistance(vec1, vec2):
return np.sqrt(np.sum(np.square(vec1 - vec2)))
#根据距离质心的大小定义用户目前所处的等级
def UserRank(AC_num, ua_centroids):
min = 100000
userRank = mini = -1
rows = shape(ua_centroids)[0]
for i in range(rows):
if calcuDistance(AC_num, ua_centroids[i][0]) < min:
min = calcuDistance(AC_num, ua_centroids[i][0])
mini = i
return mini+1
#统计每个用户等级的人数
def UserRank_cnt():
cntuserrank1 = 0
cntuserrank2 = 0
cntuserrank3 = 0
cntuserrank4 = 0
cntuserrank5 = 0
rows = shape(UAKMat)[0]
for i in range(rows):
x = UserRank(UAKarray[i][0], ua_centroids)
if x == 1:
cntuserrank1 += 1
elif x == 2:
cntuserrank2 += 1
elif x == 3:
cntuserrank3 += 1
elif x == 4:
cntuserrank4 += 1
else:
cntuserrank5 += 1
return cntuserrank1,cntuserrank2,cntuserrank3,cntuserrank4,cntuserrank5
#根据AC题量的多少给不同题目自定义难度等级
def ProbRank_Cnt(AKMat, pa_centroids):
cntprobrank1 = 0
cntprobrank2 = 0
cntprobrank3 = 0
cntprobrank4 = 0
cntprobrank5 = 0
rows1 = shape(AKMat)[0]
rows2 = shape(pa_centroids)[0]
ARKMat = AKMat
ARKMat = np.insert(ARKMat, 1, values=0, axis=1)
for i in range(rows1): # i=0
min = 1000000
for j in range(rows2):
if calcuDistance(AKMat[i], pa_centroids[j]) < min:
min = calcuDistance(AKMat[i], pa_centroids[j])
minJ = j
ARKMat[i, 1] = 5-minJ
if minJ == 0:
cntprobrank5 += 1
elif minJ == 1:
cntprobrank4 += 1
elif minJ == 2:
cntprobrank3 += 1
elif minJ == 3:
cntprobrank2 += 1
elif minJ == 4:
cntprobrank1 += 1
return ARKMat,cntprobrank1,cntprobrank2,cntprobrank3,cntprobrank4,cntprobrank5
#根据不同难度等级所带的标记不同,统计出不同难度等级的题量有多少
def showRecommend(APARKMat):
ProbRank_Cnt(AKMat, pa_centroids)
centroids0 = []
centroids1 = []
centroids2 = []
centroids3 = []
centroids4 = []
row = shape(APARKMat)[0]
for i in range(row):
if APARKMat[i, 2] == 1:
centroids0.append(APARKMat[i, 0])
elif APARKMat[i, 2] == 2:
centroids1.append(APARKMat[i, 0])
elif APARKMat[i, 2] == 3:
centroids2.append(APARKMat[i, 0])