首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

从零开始学机器学习——准备和可视化数据

编程知识
2024年09月27日 08:31

首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns

数据准备-清洗

在进行机器学习的第一步——准备数据,为了方便起见,我已经提前下载好了所需的文件。

https://files.cnblogs.com/files/guoxiaoyu/US-pumpkins.zip?t=1726642760&download=true

在大多数情况下,我们很少能够获得完全符合规范的数据集。因此,通常第一步是对数据进行清洗。就以今天的数据为例,让我给大家打开看一下,了解它的具体格式是怎样的。

image

无论从哪个角度来看,这些数据都并非十分理想。它确实包含了大量信息,因此今天我们将以月份为主要维度,来统计南瓜每月的平均价格。这样做的话,我们基本上可以放弃许多其他字段。

开始解析

我们的目标是获取每月南瓜的平均价格,因此我们需要关注的字段包括月份和价格。手动删除不必要的字段,再让Python进行解析,这样的做法显得太繁琐和低效了。因此,今天我们将介绍一个非常实用的工具包:Pandas,它能够简化这一过程。

Pandas学习地址:https://pandas.pydata.org/

import pandas as pd
pumpkins = pd.read_csv('../data/US-pumpkins.csv')
print(pumpkins.head())
print(pumpkins.tail())

这里可以自行打印下前5行信息和后5行信息。

image

这里的数据列很多,我们需要删除那些不必要的列,只保留我们需要的月份和价格数据。

new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)
print(pumpkins.isnull().sum())

注意,我们的文件中并没有"Month"这一列,这是我们后续需要用到的重要数据。另外,还有一个"Package"字段,表示称重方式,因为不同的蔬菜可能有不同的称重方式。

通常情况下,我们购买东西时按照公斤(kg)为单位称重进行结算。然而,商家有时为了促销可能会以整个南瓜的方式出售,这种称重方式的不统一是很常见的。我们需要确保只保留统一的称重方式数据。

字段解析

我们首先来计算比较简单的日期,只获取月份而不考虑年份。尽管这样做可能会导致最终数据的不准确性,因为每年各种因素会导致价格浮动很大,但暂且不考虑这些复杂因素,先处理最简单的情况。

month = pd.DatetimeIndex(pumpkins['Date']).month
print(month)

接下来我们处理价格,我们将只考虑每个菜品的最高价和最低价,然后计算它们的平均值。

price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
print(price)

现在我们来处理称重方式。针对美国地区的称重方式,我们无需过多关注细节,直接使用已经设定好的公式即可。而对于国内地区,则需要根据数据特征进行截取和调整。

pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
print(new_pumpkins)

效果如下:

image

数据可视化

我们将使用数据可视化库 Matplotlib 来呈现我们的数据分析结果。Matplotlib 是一个强大的工具,能够帮助我们创建各种类型的图表,以便更直观地展示数据趋势和关系。

Matplotlib入门学习地址是:https://matplotlib.org/

import matplotlib.pyplot as plt
price = new_pumpkins.Price
month = new_pumpkins.Month
plt.scatter(month, price)
plt.show()

在这里,我们简单地将价格和月份数据显示在了 x 轴和 y 轴上,并没有特别复杂的图表设计。

image

我们来优化下代码:

new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")

我来解释一下:groupby方法被用来按照Month列对数据进行分组,这意味着所有具有相同月份的数据会被归为一组。

接下来,['Price'].mean()是对每个分组内的Price列计算平均值。这样,我们就得到了每个月的南瓜平均价格。

最后,.plot(kind='bar')是将计算出的平均价格数据绘制成条形图。这里的kind='bar'指定了绘图类型为条形图,它会显示每个月的平均价格,并且每个月份会对应一个条形。

image

当然,数据可视化并不局限于 Matplotlib,还有许多其他依赖库可供选择,你可以根据个人喜好和需求选择适合的工具。

总结

看起来,确实我们的数据处理工作已经基本完成了。

然而,在文章中我还提到了一个重要的观点:这种方法并不能充分解释具体问题的原因。这是因为我们只是在理想条件下计算价格,而没有考虑到年份、天气以及称重等因素的影响。尽管如此,我们已经确定了数据准备的大致流程。

现在需要做的是自行决定如何维护这一流程,确保数据的清晰性和准确性。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

🌟 欢迎关注努力的小雨!🌟

From:https://www.cnblogs.com/guoxiaoyu/p/18419035
本文地址: http://www.shuzixingkong.net/article/2344
0评论
提交 加载更多评论
其他文章 排查maven 冲突及解决方式
Maven Maven 是一个以项目为中心的自动化构建工具,主要用于Java项目的管理和构建。它提供了一种统一的方式来描述项目的结构、依赖关系和构建过程,简化了项目的构建和管理。 Maven 的主要特点: 项目对象模型(POM):Maven 使用pom.xml文件来定义项目的依赖、插件和构建配置。P
排查maven  冲突及解决方式 排查maven  冲突及解决方式 排查maven  冲突及解决方式
《HelloGitHub》第 102 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Pytho
《HelloGitHub》第 102 期 《HelloGitHub》第 102 期 《HelloGitHub》第 102 期
救园倒计时:救园最后4天
救园目的:园子这三年困难阶段靠贷款维持,救园是为了还掉贷款,度过难关。救园方式: 终身会员计划,会员,捐助,周边。救园之后,一边增加收入来源,一边加快推进园子的商业化
救园倒计时:救园最后4天
Linux服务器磁盘空间占用情况分析与清理指南
为确保重大节日期间,团队负责的测试环境服务器磁盘不会占用过高,导致频繁报警。我们要求在重大节假日前对服务器磁盘占用情况进行检查。如果发现占用过高,则需人为介入,进行相应清理。 一、检查要求 查看各分区占用情况,如果达到以下任一条件,则需要人为介入判断或处理: (1)磁盘使用率 > 90% (2
在 ArkTS 中,如何有效地进行内存管理和避免内存泄漏?
ArkTS 是鸿蒙生态的应用开发语言,它在 TypeScript 的基础上进行了优化和定制,以适应鸿蒙系统的需求。 以下是在 ArkTS 中进行有效的内存管理和避免内存泄漏: 1. 使用 const 和 let 合理声明变量: 使用 const 声明那些不会重新赋值的变量,这有助于确保变量的不变性,
深入理解 Nuxt.js 中的 app:error 钩子
title: 深入理解 Nuxt.js 中的 app:error 钩子 date: 2024/9/27 updated: 2024/9/27 author: cmdragon excerpt: 摘要:本文深入讲解了Nuxt.js框架中的app:error钩子,介绍其在处理web应用中致命错误的重要作
深入理解 Nuxt.js 中的 app:error 钩子 深入理解 Nuxt.js 中的 app:error 钩子
Java如何解决同时出库入库订单号自动获取问题
本文简要介绍了在Java中处理同时出库和入库的订单号自动获取问题,通常涉及到多线程环境下的并发控制。为了确保订单号的唯一性和连续性,我们可以使用多种策略,如数据库的自增ID、分布式锁、或者利用Java的并发工具类如`AtomicLong`等。
.Net Web项目中,实现轻量级本地事件总线 框架
一、事件总线设计方案 1.1、事件总线的概念 事件总线是一个事件管理器,负责统一处理系统中所有事件的发布和订阅。 事件总线模式通过提供一种松耦合的方式来促进系统内部的业务模块之间的通信,从而增强系统的灵活性和可维护性。 1.2、实现的功能目标 注入事件总线服务到DI容器,自动注入整个程序集的事件;
.Net Web项目中,实现轻量级本地事件总线 框架