应用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')  # 保存结果
评分人数x和评分y散点图 分类直方图 分类后结果

  豆瓣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组,实现了对数据的自动化分类。

上一篇 下一篇

猜你喜欢

热点阅读