应用KNN对采集到的豆瓣TOP250数据进行自动分类
2019-05-30 本文已影响0人
Haraway
#-*- coding: utf-8 -*-
import pymysql
import pandas as pd
from sklearn.cluster import KMeans
from pandas import DataFrame
from scipy.cluster.hierarchy import linkage,dendrogram
import matplotlib.pyplot as plt
if __name__ == '__main__':
conn = pymysql.connect(host="localhost",
user="root",
password="xp",
database="estore",)
cursor = conn.cursor()
sql = "select * from DB"
cursor.execute(sql)
results = cursor.fetchall()
resultList = []
for result in results:
resultList.append(result)
# print(resultList)
df = DataFrame(resultList)
# print(df.head())
# 绘制散点图 评分,参与评论人数
plt.figure(figsize=(10, 8))
plt.scatter(df[7].astype(float), df[8].astype(float))
plt.show()
scoreDf = pd.DataFrame(df, columns=[7])
scoreDf.head()
k = 6 # 聚类的类别
iteration = 500 # 聚类最大循环次数
model = KMeans(n_clusters=k,
n_jobs=1,
max_iter=iteration) # 分为k类,并发数1,数值大系统卡死
model.fit(scoreDf) # 开始对评分进行聚类
# 详细输出原始数据及其类别
res = pd.concat([df,
pd.Series(model.labels_, index=df.index)],
axis=1) # 详细输出每个样本对应的类别
res.columns = list(df.columns) + [u'class'] # 重命名表头
# 根据聚类画出分类统计图
for col in res.columns:
if col in [u'class']:
fig = plt.figure()
res[col].hist(bins=20)
fig.show()
res.to_excel('knn_result.xls') # 保存结果



豆瓣TOP250评分为8.3-9.6分,从结果中可以看到:8.9、9.0、9.1分被分到第0组,8.6、8.7分被分到第1组,9.2、9.3、9.4分被分到第2组,8.8分被分到第3组,8.3、8.4、8.5分被分到第4组,9.6分被分到第5组,实现了对数据的自动化分类。