MNIST简单数据处理:哪个数字最费墨水?——Pandas入门

2023-12-18 02:30

本文主要是介绍MNIST简单数据处理:哪个数字最费墨水?——Pandas入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

手写数据集MNIST的简单数据处理

数据集

来源–LIBSVM

LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包。

数据格式

该软件使用的训练数据和检验数据文件格式:

<label> <index1>:<value1> <index2>:<value2> …

<label> 为数据集标签,对于分类,它是标识某类的整数(支持多个类),本例中就是数字0~9
<index> 是以1开始的整数,可以是不连续的,本例中就是28×28的灰度图像中,所代表的的像素点的编号,最大编号为784;
<value> 是实数,也就是自变量,在本例中为灰度值,取值(0, 1],若为0,则不会出现在数据集中。

原始数据集下载网址:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/
下载mnist8m -> mnist8m.bz2 (大小约为19G)
在这里插入图片描述在这里插入图片描述在这里插入图片描述

处理过程

因为本例不涉及像素编号,所以提前预处理了像素编号和“:”,删掉了之后的数据集看起来是下面的样子。

在这里插入图片描述
过程很简单:
对于每一个数字,将该数字的灰度值求和,也就是整行求和。这个灰度值的和,就是我们认为该数字“耗费的墨水”。之后再对所有相同数字取平均值,并排序,得到每个数字耗费墨水的程度。

代码:

#!coding:utf-8
import sys
import time
import pandas as pd
import numpy as np# 计时
start = time.time()
df = pd.read_csv('sample1.csv', header=None, dtype=float)# 填充NAN值,因为每个数字对应的每行长度是不一样的
# 也就是占用的像素数不同,因此会出现很多Nan值,我们视为0
df = df.fillna(0)
# print(type(df[1][3]))
# dflist1 = [[]for i in range(2)]# 只提取了数据集的前300行来计算, width是行的长度
numbers = 300
width = 252# 每行灰度值求和
for j in range(numbers):grey_sum = 0for i in range(1, width):grey_sum = grey_sum + df[i][j]list1[0].append(df[0][j])list1[1].append(grey_sum)# 将list1转置为df2
df2 = pd.DataFrame(list1).transpose()# 将所有数字0~9的求和后的灰度值取平均
average = []
for i in range(0, 10):df_k = df2[df2[0] == i]num_count = df_k.shape[0]average.append(np.sum(df2[df2[0] == i])/num_count)# 排序
final_results = sorted(average, key = (lambda average: [average[1], average[0]]))# 转DataFrame,设置列标题
sort = pd.DataFrame(final_results)
sort.columns = ['Number', 'Grayscale Value']
print(sort)end = time.time()
print('Time used:', end-start)

输出:
在这里插入图片描述
最费墨水的竟然是0……

整篇代码很多冗余操作,只是为了多涉及几个Pandas的基础用法,仅供参考使用方法,编程思路不建议学习,其实很多操作可以几行搞定。

预处理过后的数据样本“sample1.csv”很小,就几百K,只包含数据集中前300个数字。

https://pan.baidu.com/s/1S-uqxWLiGzyerUlfzzWDNg
提取码:og2b

更新:
网盘麻烦,我直接上传到主页资源了


有空整理一篇用Spark.sql的,因为其实原本就是Spark.sql做的。。

这篇关于MNIST简单数据处理:哪个数字最费墨水?——Pandas入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/506720

相关文章

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程