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

大数据可视化实验(八):大数据可视化综合实训

目录

一、实验目的... 1

二、实验环境... 1

三、实验内容... 1

1)Python纵向柱状图实训... 1

2)Python水平柱状图实训... 3

3)Python多数据并列柱状图实训.. 3

4)Python折线图实训... 4

5)Python直方图实训... 5

6)机器学习中的可视化应用... 6

四、思考问题... 8

五、总结与心得体会... 8

一、实验目的

掌握python工具,能够进行数据可视化;

掌握商业案例中的数据分析与数据可视化

二、实验环境

硬件:微型图像处理系统,

包括:主机, PC机;

操作系统:Windows 11        

应用软件:Jupyter Notebook, pycharm

数字图像处理软件:Excel/Python

三、实验内容

1)Python纵向柱状图实训

为了显示男女爱好的人数分布,本实验使用Python绘制纵向柱状图实现数据可视化。编写以下代码:

import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='SimHei', size=15)
plt.title("男女爱好人数分布图"); #图标题
num = np.array([14325, 9403, 13227, 18651])
ratio = np.array([0.75, 0.6, 0.22, 0.1])
men = num * ratio
women = num * (1-ratio)
x = ['足球','游泳','看剧','逛街']
width = 0.5
idx = np.arange(len(x))
plt.bar(idx, men, width, color='red', label='男性用户')
plt.bar(idx, women, width, bottom=men, color='gray', label='女性用户'#这一块可设置bottom,top,如果是水平放置的,可以设置right或者left
plt.xlabel('应用类别')
plt.ylabel('男女分布')
plt.xticks(idx+width/2, x, rotation=40)
#bar图上显示数字
for a,b in zip(idx,men):
    plt.text(a, b+0.05, '%.0f' % b, ha='center', va= 'bottom',fontsize=12)
for a,b,c in zip(idx,women,men):
    plt.text(a, b+c+0.5, '%.0f' % b, ha='center', va= 'bottom',fontsize=12)
plt.legend()
plt.show()

运行结果如下,可以看出男性的爱好多数为足球和游泳,女生的爱好多数为看剧和逛街:

2)Python水平柱状图实训

为了绘制水平柱状图,编写以下代码:

import matplotlib.pyplot as plt
plt.rc('font', family='SimHei', size=15)
# 假设我们有一组数据,表示不同的类别的值
categories = ['类别 A', '类别 B', '类别 C', '类别 D', '类别 E']
values = [20, 35, 30, 10, 25]

# 创建水平柱状图
plt.barh(categories, values, color='skyblue')

# 添加标签和标题
plt.xlabel('')
plt.ylabel('类别')
plt.title('水平柱状图实训')

# 可选:显示每个条形上方的值
for index, value in enumerate(values):
    plt.text(value, index, str(value))

# 显示图形
plt.show()

运行结果如下:

3)Python多数据并列柱状图实训

本实验展示了不同的专业在不同学校的招收人数分布图情况。编写以下代码:

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams[ 'font.sans-serif'] =[ 'Microsoft YaHei'] #设置字体
plt.title("不同学校专业招生人数分布图"); #图标题
x=np.arange(5)
y=[400,170,160,90,50]
y1=[300,180,150,70,90]
bar_width=0.5
tick_label=["计算机","机械","电子","管理","物理"]
plt.bar(x,y,bar_width,color="r",align="center",label="学校A")
plt.bar(x+bar_width,y1,bar_width,color="y",align="center",label="学校B")
plt.xlabel("专业")
plt.ylabel("招生人数")
plt.xticks(x+bar_width/2,tick_label)
plt.legend()
plt.show()

根据结果显示,学校a和学校b均在计算机专业招收人数最多,具体的情况如下图:

4)Python折线图实训

本实验绘制2019年1月~2019年12月的房价变化折线图,编写以下代码:

import matplotlib.pyplot as plt
plt.rcParams[
'font.sans-serif'] =[ 'Microsoft YaHei'] #设置字体
x1 = ['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08',
     
'2019-09', '2019-10', '2019-11', '2019-12']
y1 = [
9700, 9800, 9900, 12000, 11000, 12400, 13000, 13400, 14000, 14100, 13900, 13700]
plt.figure(
figsize=(10, 8))
# 标题
plt.title("房价变化")
plt.plot(x1, y1,
label='房价变化', linewidth=2, color='r', marker='o',
        
markerfacecolor='blue', markersize=10)
# 横坐标描述
plt.xlabel('月份')
# 纵坐标描述
plt.ylabel('房价')
for a, b in zip(x1, y1):
    plt.text(a, b, b,
ha='center', va='bottom', fontsize=10)
plt.legend()
plt.show()

从结果可以看出,在2019年1月的时候房价最低,在2019年12月的时候,房价最高整体呈上升趋势,其中在2019年5月的时候下降。运行结果如下:

5)Python直方图实训

本实验绘制正态分布直方图,图的值表示当前值的概率密度,为了方便信息展示只展示-4到4的概率密度,编写以下代码:

import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='SimHei', size=15)
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
#
生成一个随机样本数据集
#
假设我们有一个正态分布的随机样本
data = np.random.normal(loc=0, scale=1, size=1000)

# 创建直方图
# bins
参数定义了直方图的箱数
# density
参数设置为 True,可以展示概率密度而不是频率
plt.hist(data, bins=30, density=True, alpha=0.7, color='blue', edgecolor='black')

# 设置直方图的标题和坐标轴标签
plt.title('正态分布直方图')
plt.xlabel('')
plt.ylabel('概率密度')

# 可选:显示直方图的均值和标准差
mean = np.mean(data)
std_dev = np.std(data)
plt.text(60, 0.0075, f'Mean: {mean:.2f}')
plt.text(60, 0.005, f'Std Dev: {std_dev:.2f}')

# 显示图形
plt.show()

运行结果如下:

6)机器学习中的可视化应用

在机器学习中,可视化是一个重要的工具,它可以帮助我们理解数据的特征、模型的性能以及数据点之间的关系。以下是一个简单的Python代码示例,展示了如何在机器学习中应用可视化。编写以下代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
import seaborn as sns

# 创建一个简单的二分类数据集
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2,
                           random_state=1, n_clusters_per_class=1)

# 使用逻辑回归模型
model = LogisticRegression()
model.fit(X, y)

# 绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
                     np.arange(y_min, y_max, 0.01))

Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.figure(figsize=(10, 6))
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor='k')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Decision Boundary using Logistic Regression')
plt.show()

这段代码首先导入了所需的库,然后创建了一个简单的二分类数据集。接着,使用LogisticRegression模型进行拟合。

在绘制决策边界的部分,我们首先定义了x和y的最小值和最大值,然后创建了一个网格来覆盖整个数据点的范围。使用模型在这些网格点上的预测结果来填充这个区域,从而绘制出决策边界。

最后,使用plt.scatter绘制了原始数据点,并用不同的颜色表示不同的类别。plt.contourf用于绘制决策边界的填充图。运行结果如下:

四、思考问题

Python软件功能强大,除了上述要实现的功能,大家可以自己进行扩展。

五、总结与心得体会

在完成上述的可视化制作实验后,我有以下几点心得体会:

  1. 理解数据分布:通过制作直方图和折线图,我更好地理解了数据的分布情况和随时间的变化趋势。直方图特别适合展示连续数据的分布,而折线图则能够清晰地展示数据随时间的变化。
  2. 比较不同类别:纵向柱状图和水平柱状图都是比较不同类别之间数值大小的有效工具。我学会了如何根据需要选择使用纵向或水平柱状图,这取决于我希望强调的信息和图表的布局。
  3. 并列柱状图的挑战:在制作多数据并列柱状图时,我意识到需要仔细选择颜色和标签,以确保每个数据集都能被清晰地区分和理解。
  4. 技术实现:通过这些实验,我加深了对matplotlib和seaborn库的了解,学会了如何使用这些工具来创建各种图表。我也认识到了代码的可读性和模块化设计的重要性,这使得代码更易于维护和更新。
  5. 数据可视化的重要性:我了解到,良好的数据可视化可以帮助观众快速抓住数据的关键信息。图表的清晰度和准确性对于有效传达分析结果至关重要。
  6. 机器学习可视化的洞察:在机器学习项目中,可视化不仅用于展示数据,还可以用于展示模型的决策过程,如决策边界。这有助于理解模型是如何工作的,以及它在特定情况下可能的优缺点。
  7. 迭代与改进:在实验过程中,我学会了如何根据反馈不断迭代和改进我的图表。一个好的图表往往需要多次修改,包括调整颜色、字体大小、标签和布局。
  8. 工具的局限性:我也意识到了可视化工具的局限性。例如,某些类型的数据或分布可能不适合用柱状图或直方图来展示。因此,选择最合适的图表类型来传达特定的信息是一项重要的技能。
  9. 注释和解释:我学会了在图表中添加适当的注释和解释,这对于使图表自解释非常重要。这包括轴标签、图例、标题和任何必要的文本说明。
  10. 未来方向:最后,我意识到数据可视化是一个不断发展的领域,总有新的技术和方法出现。我计划继续学习,以便能够利用最新的工具和技术来提高我的可视化技能。
  11. 通过这些实验,我不仅提升了我的技术技能,而且对如何有效地传达数据信息有了更深刻的理解。这些经验对我的数据科学职业生涯将是宝贵的资产。

相关文章:

  • Android应用安装过程
  • Spring Cloud Alibaba - 利用Nacos动态调整线程池参数
  • Postman接口测试工具的原理及应用详解(四)
  • VUE3+ AntV Select 选择器:mode=“multiple“和mode=“tags“的区别是什么
  • ISP IC/FPGA设计-第一部分-SC130GS摄像头分析(0)
  • crossover软件如何使用 crossover软件是干嘛的 crossover软件安装激活教程方法 兼容软件电脑是什么软件
  • 高级队列实现代理穿透及迁移
  • ELK日志实时监控
  • CXL:拯救NVMe SSD缓存不足设计难题-2
  • npm创建一个空的vue3项目的方法或者pnpm创建vue3项目
  • vue uniapp MEQX JWT认证
  • 如何在Vue3项目中使用Pinia进行状态管理
  • 76. UE5 RPG 实现场景阻挡剔除功能
  • 微信小程序监听手机系统自带的左右滑动返回事件
  • Day47
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 3.7、@ResponseBody 和 @RestController
  • Bootstrap JS插件Alert源码分析
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 一些 DOM 的知识点
  • Javascript设计模式学习之Observer(观察者)模式
  • Java比较器对数组,集合排序
  • Java深入 - 深入理解Java集合
  • Meteor的表单提交:Form
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Python进阶细节
  • Solarized Scheme
  • Vue UI框架库开发介绍
  • Vue.js-Day01
  • webpack4 一点通
  • WebSocket使用
  • 半理解系列--Promise的进化史
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 每天10道Java面试题,跟我走,offer有!
  • 强力优化Rancher k8s中国区的使用体验
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 线性表及其算法(java实现)
  • 异常机制详解
  • 责任链模式的两种实现
  • 自动记录MySQL慢查询快照脚本
  • #vue3 实现前端下载excel文件模板功能
  • $forceUpdate()函数
  • $L^p$ 调和函数恒为零
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (02)vite环境变量配置
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (剑指Offer)面试题34:丑数
  • (原)Matlab的svmtrain和svmclassify
  • (转) Face-Resources