当前位置: 首页 > article >正文

实验三 Python 数据可视化 Python 聚类-K-means(CQUPT)

一、实验目的

 Python 数据可视化:

1、学习使用 jiebawordcloud 等类库生成词云图。

2、学习使用 Matplotlib 库进行数据可视化。

Python 聚类-K-means:

1、理解聚类非监督学习方法的基本原理。

2、掌握 Pythonnumpypandassklearn 实现聚类的方法。

二、实验原理

运用 Anaconda 搭建的 Spyder平台编写 Python 实例程序。

运用 Anaconda 搭建的 Spyder平台编写实例 Python K-means 聚类程序。

三、使用软件平台

1、Windows 11电脑一台。

2、Anaconda、Python、Spyder平台。

四、实验内容

实例1:简历信息词云图

结果:

代码: 

对了记得把老师的文件放在同一个文件夹下

import jieba
import imageio
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 读取个人信息文件
with open("per_info.txt", "r", encoding="utf-8") as f:
    word_content = f.read().replace("\n", "")

# 读取背景图片
mask_img = imageio.imread("china.jpg")

# 分词处理
word_cut = jieba.cut(word_content)
word_cut_join = " ".join(word_cut)

# 创建词云对象
wc = WordCloud(
    font_path="STXINGKA.ttf",  # 选择支持中文的字体
    mask=mask_img,  # 背景图
    background_color="white",  # 背景颜色
    max_words=500,  # 最大显示词语数
    max_font_size=80  # 最大字体
)

# 生成词云
wc.generate(word_cut_join)

# 显示词云
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()

# 保存词云到本地
wc.to_file("personal_wordcloud.jpg")

 实例2:疫情病例数发展趋势可视化

结果:

代码:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置字体为 SimHei(黑体)
rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 读取疫情数据
data_file = "cq_COVID-19.xlsx"  
data = pd.read_excel(data_file)

# 提取日期和感染人数并保存到列表
dates = pd.to_datetime(data['日期']).tolist()  # 转换为 Python 列表
cases = data['感染人数'].tolist()  # 转换为 Python 列表

# 打印两个列表(仅供调试)
print("日期列表:", dates)
print("感染人数列表:", cases)

# 绘制折线图
plt.figure(figsize=(12, 6))
plt.plot(dates, cases, marker='o', linestyle='-', label='感染人数')

# 设置图表标题和轴标签
plt.title('重庆疫情病例数发展趋势--来自420刘清城', fontsize=16)
plt.xlabel('日期', fontsize=12)
plt.ylabel('感染人数', fontsize=12)

# 美化图表
plt.grid(alpha=0.3)
plt.xticks(rotation=45)  # 日期横轴倾斜以便阅读
plt.legend()
plt.tight_layout()

# 显示图表
plt.show()

实例3:基于经纬度的城市聚类

结果:

代码:

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 读取城市数据
file_path = "China_cities.csv"  # 确保文件路径正确
data = pd.read_csv(file_path)

# 检查数据
print("数据预览:")
print(data.head())

# 提取经纬度数据
coordinates = data[['北纬', '东经']]

# 数据清洗:确保数据没有缺失值
coordinates = coordinates.dropna()

# 转换为数值类型(如果必要)
coordinates['北纬'] = pd.to_numeric(coordinates['北纬'], errors='coerce')
coordinates['东经'] = pd.to_numeric(coordinates['东经'], errors='coerce')

# 丢弃无法转换为数值的行
coordinates = coordinates.dropna()

# 使用 K-Means 模型进行聚类
kmeans = KMeans(n_clusters=5, random_state=42)  # 将城市分为3类
data['聚类标签'] = kmeans.fit_predict(coordinates)

# 输出聚类中心
print("聚类中心:")
print(kmeans.cluster_centers_)

# 绘制聚类结果图
plt.figure(figsize=(10, 6))
colors = ['gray', 'blue', 'green',"yellow","cyan"]

for i in range(5):  # 根据聚类标签绘制不同颜色的点
    cluster_points = data[data['聚类标签'] == i]
    plt.scatter(cluster_points['东经'], cluster_points['北纬'], c=colors[i], label=f'聚类{i+1}')

# 绘制聚类中心
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 1], centers[:, 0], c='Red', marker='*', s=200, label='聚类中心')

# 设置图表标题和轴标签
plt.title('中国主要城市聚类图', fontsize=16)
plt.xlabel('东经', fontsize=12)
plt.ylabel('北纬', fontsize=12)
plt.legend()
plt.grid()
plt.show()

 思考题一:

结果:

代码: 

import jieba
import matplotlib.pyplot as plt

# 读取政府工作报告文件
file_path = "govreport-2022.txt"  # 替换为实际文件路径
with open(file_path, "r", encoding="utf-8") as f:
    text = f.read()

# 分词处理
words = jieba.lcut(text)

# 统计词频并存储到字典
word_count = {}
for word in words:
    # 去除标点符号和无意义的单字
    if len(word) > 1 and word not in [",", "。", "、", "“", "”", "的", "和", "是", "在"]:
        word_count[word] = word_count.get(word, 0) + 1

# 将字典转换为列表并按词频降序排序
sorted_word_count = sorted(word_count.items(), key=lambda x: x[1], reverse=True)

# 提取前5个高频词并构建两个列表
top_words = sorted_word_count[:5]
words = [item[0] for item in top_words]
counts = [item[1] for item in top_words]

# 绘制柱状图
plt.figure(figsize=(10, 6))
bars = plt.bar(words, counts, color="skyblue")

# 在每个柱上方添加数字
for bar, count in zip(bars, counts):
    plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height(),  # 坐标调整
             str(count), ha="center", va="bottom", fontsize=15)

# 设置标题和标签
plt.title("2022年政府工作报告高频词", fontsize=16)
plt.xlabel("单词名称", fontsize=20)
plt.ylabel("出现频率", fontsize=20)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.tight_layout()

# 显示图表
plt.show()

思考题二:

 结果:

代码:

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
from matplotlib import rcParams

# 设置字体为 SimHei(黑体)
rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 加载鸢尾花数据集
iris = load_iris()
data = pd.DataFrame(iris.data, columns=iris.feature_names)
data['种类'] = iris.target

# 查看数据集前5行
print("鸢尾花数据集前5行:")
print(data.head())

# 提取四个特征数据
features = data.iloc[:, :4]  # 全部四个特征

# 使用 K-Means 模型进行聚类
kmeans = KMeans(n_clusters=3, random_state=42)  # 将数据分为3类
data['聚类标签'] = kmeans.fit_predict(features)

# 输出聚类中心
print("聚类中心:")
print(kmeans.cluster_centers_)

# 绘制两张图
plt.figure(figsize=(12, 10))

# 子图1:花萼长度和宽度
plt.subplot(2, 1, 1)
colors = ['yellow', 'blue', 'green']
markers = ['o', 's', '^']  # 圆形、方形、三角形

for i in range(3):  # 遍历3个聚类
    cluster_points = data[data['聚类标签'] == i]
    plt.scatter(cluster_points.iloc[:, 0], cluster_points.iloc[:, 1], c=colors[i], marker=markers[i], label=f'聚类{i+1}')

# 绘制聚类中心
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='*', s=300, label='聚类中心')

# 设置标题和轴标签
plt.title('鸢尾花按花萼特征聚类图', fontsize=16)
plt.xlabel('花萼长度', fontsize=12)
plt.ylabel('花萼宽度', fontsize=12)
plt.legend()
plt.grid()

# 子图2:花瓣长度和宽度
plt.subplot(2, 1, 2)

for i in range(3):  # 遍历3个聚类
    cluster_points = data[data['聚类标签'] == i]
    plt.scatter(cluster_points.iloc[:, 2], cluster_points.iloc[:, 3], c=colors[i], marker=markers[i], label=f'聚类{i+1}')

# 绘制聚类中心
plt.scatter(centers[:, 2], centers[:, 3],  c='red', marker='*', s=300, label='聚类中心')

# 设置标题和轴标签
plt.title('鸢尾花按花瓣特征聚类图', fontsize=16)
plt.xlabel('花瓣长度', fontsize=12)
plt.ylabel('花瓣宽度', fontsize=12)
plt.legend()
plt.grid()

# 显示图形
plt.tight_layout()
plt.show()


http://www.kler.cn/a/581692.html

相关文章:

  • Linux基础开发工具—vim
  • FPGA 32 ,以太网TCP/IP四层模型:从MII到RGMII的深度解析( TCP/IP传输控制协议 )
  • 前端项目 Node.js 与 node-sass 版本兼容问题
  • 一个差劲的软件设计
  • 物理服务器的作用都有哪些?
  • mysql的binlog,redolog,undolog作用
  • . 从理论到实践:小红书、京东如何玩转大模型
  • 虚拟机 CentOS 9 网络配置
  • 电机控制常见面试问题(六)
  • OTA自动化测试解决方案——实车级OTA测试系统PAVELINK.OTABOX:实车级OTA自动化系统|系统级OTA通道测试系统|系统级OTA压力测试系统|PAVELINK.OTABOX解决方案
  • 编程视界:C++命名空间
  • HTTP 强 Etag 和 弱 Etag
  • perl、python、tcl语法中读写Excel的模块
  • 文档解析:PDF、图片内容deepseek解析出错怎么办?
  • 设备物联网无线通信,ESP32-C3芯片模组方案,智能化联动控制
  • 从零到多页复用:我的WPF MVVM国际化实践
  • 人脸识别之数据集中 PI20 和 CFMT 之间关联的模型预测贝叶斯(Python+论文代码实现)
  • 开发常用软件
  • CVPR2025轨迹预测相关论文以及自动驾驶端到端相关论文
  • Android Service封装实战:基于Binder与接口的高效通信方案