数学建模与数据分析 || 2. 结构化与非结构化数据的读取方法

news2024/10/10 0:23:22

结构化与非结构化数据的读取方法

文章目录

  • 结构化与非结构化数据的读取方法
    • 1. 结构化数据的读取
      • 1.1 pandas 读取 excel 文件
      • 1.2 pandas 读取 csv 文件
      • 1.3 pandas 读取 txt 文件
      • 1.4 利用 scipy 读取 mat 格式文件数据
      • 1.5 利用 numpy 存储和读取 npz 格式文件
    • 2. python 读取图像的常用方式
      • 2.1 利用 Pillow 库实现图像的输入、输出及保存
      • 2.2 使用 scikit-image 输入输出、图像及保存图像
      • 3.3 使用 matplotlib 读取、保存和现实图像

数据的表现格式有两种: 一种是结构化数据; 另一种是非结构化数据. 结构化数据指的是具有明确含义的行列结构存储形式, 如常见的excel格式中, 行表示样本点, 每一列表示各自的特征(如身高、体重等). 非结构化数据存储时虽有行和列的结构,但是没有明确的含义, 如图像, 行只是表示第几行, 列只是表示第几列, 而行或者列之间并没有意义上的区别. 下面将介绍两种存储方式的 python 读取方法, 因为数据只有读入内存才能进行处理.

1. 结构化数据的读取

本文的数据可通过链接下载, 该数据中的两个数据由《python大数据分析与应用实战》提供, 数据链接:: https://pan.baidu.com/s/149b4Z1Hp2xRUTxdopklu-A 提取码: brij, 下载数据后放在代码同级目录下的data文件夹中即可

1.1 pandas 读取 excel 文件

在这里插入图片描述

import numpy as np
import pandas as pd

#读取疫情数据、数据格式变换
df = pd.read_excel('data/01感染人数分布数据.xlsx',sheet_name='各地区确诊')#读取历史疫情数据
df.index = df['日期'] #修改索引值为日期
df1 = df.drop(['日期'], axis=1)#删除多余日期列
df1

在这里插入图片描述

1.2 pandas 读取 csv 文件

import pandas as pd

df = pd.read_csv('data/sanya12345.csv',index_col=0)#读取数据
print(df.info())
‘’‘
<class 'pandas.core.frame.DataFrame'>
Int64Index: 184568 entries, 125282 to 127953
Data columns (total 20 columns):
 #   Column          Non-Null Count   Dtype  
---  ------          --------------   -----  
 0   orderAll        184568 non-null  float64
 1   order           184568 non-null  float64
 2   工单编号            184568 non-null  int64  
 3   工单分类            184567 non-null  object 
 4   工单来源            184567 non-null  object 
 5   来电时间            184567 non-null  object 
 6   来电类型            184567 non-null  object 
 7   工单标题            184567 non-null  object 
 8   工单内容            184567 non-null  object 
 9   工单状态            184567 non-null  object 
 10  是否延期            184568 non-null  object 
 11  序号              183977 non-null  float64
 12  处理时间            184567 non-null  object 
 13  处理环节            184567 non-null  object 
 14  处理单位            184179 non-null  object 
 15  处理描述            184567 non-null  object 
 16  extractAddress  131264 non-null  object 
 17  lon84           126785 non-null  float64
 18  lat84           126785 non-null  float64
 19  cluster         184568 non-null  int64  
dtypes: float64(5), int64(2), object(13)
memory usage: 29.6+ MB
None
’‘’

1.3 pandas 读取 txt 文件

pandas 读取的数据类型为 DataFrame (或 Series),可通过 .values 操作提取 ndarray 形式.

import numpy as np
import pandas as pd

mat = pd.read_table('data/matrix_data.txt',header=None,sep=',')

print('读入数据为:\n',mat)
print('\n\n转化为 ndarray 类型: \n',mat.values)

'''
读入数据为:
     0   1   2   3   4
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14


转化为 ndarray 类型: 
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
'''

1.4 利用 scipy 读取 mat 格式文件数据

Matlab 常用的数据格式为 .mat 格式, python 中可通过 scipy.io 函数库进行读取, 但是读取格式不是一个矩阵,而是一个字典类型, 需要通过字典中的键-值进行提取

import scipy.io as sio

gt_mat = sio.loadmat('data/data.mat') # 读取的数据格式为字典类型
gt_mat
‘’‘
{'__header__': b'MATLAB 5.0 MAT-file, Platform: MACI64, Created on: \xe4\xba\x8c 11 15 18:53:59 2022',
 '__version__': '1.0',
 '__globals__': [],
 'A': array([[-1.3076883 ,  3.57839694,  3.03492347,  0.7147429 ,  1.48969761],
        [-0.43359202,  2.76943703,  0.72540422, -0.20496606,  1.40903449],
        [ 0.34262447, -1.34988694, -0.06305487, -0.12414435,  1.41719241]])}
’‘’
gt_mat.keys() # 查看字典的键
‘’‘
dict_keys(['__header__', '__version__', '__globals__', 'A'])
’‘’
gt_mat['A'] # 通过字典的键提取字典相应的值,即可显示为 adarray 格式的矩阵
‘’‘
array([[-1.3076883 ,  3.57839694,  3.03492347,  0.7147429 ,  1.48969761],
       [-0.43359202,  2.76943703,  0.72540422, -0.20496606,  1.40903449],
       [ 0.34262447, -1.34988694, -0.06305487, -0.12414435,  1.41719241]])
’‘’

1.5 利用 numpy 存储和读取 npz 格式文件

npz 格式的文件存储和读取需要借助 numpy 库, 可以通过 numpy.savez() 对 array 对象或者列表进行直接存储.

import numpy as np

x = np.array([1,2,3,4,5,6,7,8,9,10])
np.savez('data.npz',x)

读取 npz 格式的文件需要用到 numpy.load() 函数, 读取的数据格式不是原有存贮的格式, 而是一个 NpzFile 对象, 需要通过对象函数 .files 进行提取, 提取出的数据是一个列表, 还需要对数据列表进一步提取.

import numpy as np

y = np.load('data.npz')
print(type(y))
print(y.files)
data = y['arr_0']
data
'''
<class 'numpy.lib.npyio.NpzFile'>
['arr_0']
Out[52]:
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
'''

2. python 读取图像的常用方式

图像的读取与保存是图像处理或计算机视觉领域中最基本的操作,python中有众多的库支持图像的读取、显示与存储,常用的库包括 matplotlib、skimage 和 Pillow 库。使用时,首先测试测试是否安装了 skimage 和 PIL 库。如果没有安装,可以通过 Anaconda-prompt-pip install pillow 和 pip install scikit-image 进行安装。

本部分内容所用的数据放在百度网盘:
链接: https://pan.baidu.com/s/1DXKTofRWufhVpP_HEQKk9A 提取码: pl5u。
下载到本地,置于代码文件同级目录的新建文件夹“images”即可。

在这里插入图片描述

2.1 利用 Pillow 库实现图像的输入、输出及保存

Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用起来也更为复杂,主要应用于机器视觉、图像分析等领域,比如众所周知的“人脸识别”应用 。

from PIL import Image
import matplotlib.pylab as plt
# 图像的读入
im = Image.open("images/parrot.png")
# 显示图像的宽和高,以及图像的颜色通道
print(im.width, im.height, im.mode, im.format, type(im))

plt.axis('off')
plt.imshow(im)

图片进入到内存中,参与运算的主要是矩阵。Pillow 库读取的图像对象无法直接进行数字运算,需要先将图像对象转化成 ndarray形式。图像像素值有两种取值范围,一种是0~255,一种是0~1.

import numpy as np
mat = np.array(im).astype('float')# 转化为 ndarray 形式(像素值为 uint8 类型),且像素值更改为浮点数
mat[0:10,0:10,0]

输出结果

array([[67., 68., 67., 67., 68., 67., 68., 68., 68., 68.],
       [69., 68., 68., 68., 68., 68., 69., 68., 68., 68.],
       [70., 71., 69., 67., 67., 69., 71., 71., 71., 69.],
       [71., 71., 68., 66., 67., 70., 71., 72., 72., 71.],
       [70., 69., 68., 67., 66., 69., 70., 71., 72., 71.],
       [67., 69., 68., 68., 68., 69., 69., 70., 71., 71.],
       [69., 70., 70., 70., 69., 68., 67., 69., 70., 70.],
       [69., 69., 69., 70., 70., 68., 67., 67., 68., 68.],
       [69., 69., 69., 69., 70., 68., 67., 67., 68., 70.],
       [69., 69., 69., 69., 70., 70., 68., 68., 69., 72.]])

我们也可以将 ndarray 格式的矩阵转化成图像对象, 在对图像放缩的时候只有图像格式的数据才能操作, 通过自动插值的方式获得, 而矩阵很难轻松地进行放缩. 这种格式的转换需要用的 PIL.Image.fromarray() 完成此操作.

2.2 使用 scikit-image 输入输出、图像及保存图像

from skimage.io import imread
import matplotlib.pylab as plt

im = imread("images/parrot.png")

print(im.shape, im.dtype, type(im))
plt.figure(figsize=(10,10))
plt.imshow(im)
plt.axis('off')
plt.show()

sk-image 库读取的图像对象同样无法直接进行数字运算,需要先将图像对象转化成 ndarray形式。

import numpy as np
mat = np.array(im).astype('float')# 转化为 ndarray 形式(像素值为 uint8 类型),且像素值更改为浮点数
mat[0:10,0:10,0]

输出

array([[67., 68., 67., 67., 68., 67., 68., 68., 68., 68.],
       [69., 68., 68., 68., 68., 68., 69., 68., 68., 68.],
       [70., 71., 69., 67., 67., 69., 71., 71., 71., 69.],
       [71., 71., 68., 66., 67., 70., 71., 72., 72., 71.],
       [70., 69., 68., 67., 66., 69., 70., 71., 72., 71.],
       [67., 69., 68., 68., 68., 69., 69., 70., 71., 71.],
       [69., 70., 70., 70., 69., 68., 67., 69., 70., 70.],
       [69., 69., 69., 70., 70., 68., 67., 67., 68., 68.],
       [69., 69., 69., 69., 70., 68., 67., 67., 68., 70.],
       [69., 69., 69., 69., 70., 70., 68., 68., 69., 72.]])

3.3 使用 matplotlib 读取、保存和现实图像

matplotlib.image 库中的 imread() 函数可以读取浮点 numpy ndarray 中的图像,像素值表示为 [0,1] 中的真值。

import matplotlib.pylab as plt
import matplotlib.image as mpimg

im = mpimg.imread("images/parrot.png")
print(im.shape,im.dtype,type(im))#  读入的图像包含R、G、B、alpha 四个通道,可通过 convert 进行其它格式的转换不能直接imshow输出
plt.figure(figsize=(10,10))
plt.imshow(im)
plt.axis('off')
plt.show()

利用 matplotlib.image 库读的图片本身就是 ndarray 类型,且像素点格式为浮点数,因此,无需额外进行数字格式的转换。

im[0:5,0:5,0]

输入结果

array([[0.2627451 , 0.26666668, 0.2627451 , 0.2627451 , 0.26666668],
       [0.27058825, 0.26666668, 0.26666668, 0.26666668, 0.26666668],
       [0.27450982, 0.2784314 , 0.27058825, 0.2627451 , 0.2627451 ],
       [0.2784314 , 0.2784314 , 0.26666668, 0.25882354, 0.2627451 ],
       [0.27450982, 0.27058825, 0.26666668, 0.2627451 , 0.25882354]],
      dtype=float32)

注意:如需将图像保存在本地,可添加代码:im.save(‘本地文件夹路径’)即可,如im.save(“images/parrot_save.jpg”)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot国际化

软件的国际化软件的国际化&#xff1a;软件开发时&#xff0c;要使它能同时应对世界不同地区和国家的访问&#xff0c;并针对不同地区和国家的访问&#xff0c;提供相应的、符合来访者阅读习惯的页面或数据。国际化internationalization&#xff0c;在i和n之间有 18 个字母&…

AXI 总线协议学习笔记(2)

引言 从本文开始&#xff0c;正式系统性学学习AXI总线。 如何获取官方协议标准&#xff1f; 第一步&#xff1a;登陆官网&#xff1a;armDeveloper 第二步&#xff1a;登录&#xff0c;无账号需要注册 第三步&#xff1a;点击文档 第四步&#xff1a; 第五步&#xff1a;浏…

最新最全阿里内推830道面试题合集,BATJ都有问到

小小叹语&#xff1a;你是否对你现在的生活状态有满足感呢&#xff1f;逝去日子经过多少风雨波折才有今天的成就&#xff0c;只有努力向上不断闯断&#xff0c;热爱竟逐每秒每分钟&#xff0c;才能拥有的更多。 而对于一个程序员来说&#xff0c;如果说你是想要在互联网行业找…

【题解】2023牛客寒假算法基础集训营4

目录A 清楚姐姐学信息论思路B. 清楚姐姐学构造思路C. 清楚姐姐学01背包(Easy Version)思路D. 清楚姐姐学01背包(Hard Version)思路E. 清楚姐姐打怪升级思路F. 清楚姐姐学树状数组思路G. 清楚姐姐逛街(Easy Version)思路L. 清楚姐姐的三角形I思路M. 清楚姐姐的三角形II思路A 清楚…

Grafana 系列文章(四):Grafana Explore

&#x1f449;️URL: https://grafana.com/docs/grafana/latest/explore/ &#x1f4dd;Description: Explore Grafana 的仪表盘 UI 是关于构建可视化的仪表盘。Explore 剥离了仪表盘和面板选项&#xff0c;这样你就可以。.. Grafana 的仪表盘 UI 是关于构建可视化的仪表盘的。…

happen-before

happen-before 什么是happen-before JMM可以通过happens-before关系向程序员提供跨线程的内存可见性保证(如果A线程的写操作a与B线程的读操作b之间存在happens-before关系&#xff0c;尽管a操作和b操作在不同的线程中执行&#xff0c;但JMM向程序员保证a操作将对b操作可见). …

Leetcode(上)

Leetcode&#xff08;上&#xff09; 1.LeetCode01 两数之和 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

数据结构——优先级队列和堆

目录 一、堆 1.概念 2.堆的存储方式 3.性质 4.模拟实现堆&#xff08;以小根堆为例&#xff09; &#xff08;1&#xff09;.堆的调整 &#xff08;2&#xff09;.堆的创建 &#xff08;3&#xff09;.建堆的时间复杂度 &#xff08;4&#xff09;.堆的插入和删除 5.堆…

微服务篇之Eureka注册中心

目录 1. 初识Eureka 1.1 Eureka是什么 1.2 什么是注册中心 1.3 Eureka的原理 2. Eureka的快速入门 2.1 搭建eureka的单机服务 2.2 注册服务的消费者 2.3 注册服务的提供者 3. Eureka的特性 3.1 自我保护机制 3.2 集群支持AP特性 4. Eureka的集群 4.1 不分区集群模式 4.2 分…

Go语言测试(回归测试、集成测试、单元测试简述)与项目开发的流程简述

测试项目流程1. 测试的类别2. 单元测试的规则&#xff08;函数以Test开头&#xff09;2.1 示例12.2 示例23. Mock测试&#xff08;打桩&#xff09;4. 基准测试&#xff08;类似于单元测试&#xff0c;函数以Benchmark开头&#xff09;5. 项目开发的流程项目拆解代码设计测试运…

浪涌保护器(电涌保护器)连接线规格分析方案

低压配电设计中&#xff0c;现在对于浪涌保护器(SPD)及其专用保护装置的标注和画法&#xff0c;都比较规范统一了。那有没有遇到要求标注浪涌保护器连接线规格的情况&#xff1f;或者说&#xff0c;设计师有没有责任要标注清楚各类浪涌保护器连接线规格&#xff1f;地凯科技防雷…

屈光发育档案是什么?为什么专业医生建议从3岁开始就要建立?

当孩子出现近视问题时&#xff0c;家长们都会很焦虑。其实儿童视力发育是一个循序渐进&#xff0c;逐渐成长完善的过程。我们唯一能做的就是预防&#xff0c;在未近视时提前发现近视的趋势。来源&#xff1a;卫生健康委网站这其中最为关键的是建立屈光发育档案。国家青少年近视…

视频剪辑有这6个高清视频素材库就够了

视频剪辑必备的6个网站&#xff0c;免费、可商用&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材类型非常多&#xff0c;平面设计、UI设计、电商类、图片、视频、音频等素材站内都能找到。视频素材全部高清、无…

C++——map和set封装实现

目录 mao和set模拟实现 模拟实现 取K的仿函数 Insert 迭代器 begin和end 和-- operator[] 完整代码 set.h map.h rbtree.h mao和set模拟实现 STL map和set只是包含了几个头文件 主要在选中的这个文件里&#xff0c;打开之后我们可以看到红黑树 用红黑树…

【操作系统】第二章 进程与线程

文章目录第二章 知识体系2.1 进程与线程2.1.1 进程的概念和特征2.1.2 进程的状态与转换2.1.3 进程的组成2.1.4 进程控制2.1.5 进程通信2.1.6 进程的上下文切换2.1.7 线程和多线程模型2.2 处理机调度2.2.1 调度的概念2.2.2 调度的层次分类2.2.3 调度的实现2.2.4 典型的调度算法2…

【八大数据排序法】选择排序法的图形理解和案例实现 | C++

第十五章 选择排序法 目录 第十五章 选择排序法 ●前言 ●认识排序 ●一、选择排序法是什么&#xff1f; 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ● 总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法&#xff0c;它主要是将一堆不规则…

活体识别3:论文笔记之《FACE ANTI-SPOOFING BASED ON COLOR TEXTURE ANALYSIS》

说明 本文是我对论文《FACE ANTI-SPOOFING BASED ON COLOR TEXTURE ANALYSIS》做的一个简单笔记。 这个论文是芬兰奥卢大学(Oulu)课题组的一篇很有代表性的论文&#xff0c;写于2015年&#xff0c;使用的是“LBP特征SVM分类器”这种比较传统的方案&#xff0c;方案不复杂&…

如何使用 JuiceFS 创建 WebDAV 共享

WebDAV 是一种基于 HTTP 的文件共享协议&#xff0c;最初被设计用于多用户文档协作编辑的场景&#xff0c;也被广泛应用在基于互联网的文件存储、数据同步等网盘类应用场景。 手机端和 PC 端有大量的应用内置了对 WebDAV 的支持&#xff0c;比如知名的文献管理工具 Zotero、iP…

微信小程序 java Springboot校园租房指南房屋租赁系统

东前端&#xff1b;首页、房源信息、租房指南、我的&#xff0c;用户前端&#xff1b;首页、房源信息、租房指南、我的等主要功能模块的操作和管理。 1.出租房源信息的上传、审核、发布&#xff1b; 2.租房信息的浏览、查找、查看&#xff1b; 3.用户与出租方通信&#xff1b; …