整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

用Python导入数据方法汇总

用Python导入数据方法汇总

ython可以使用各种各样的文件作为数据源:

  • flat files?—?csv, txt, tsv etc.
  • pickled files
  • excel spreadsheets
  • SAS and Stata files
  • HDF5
  • MATLAB
  • SQL databases
  • web pages
  • API

Flat files

平面文件--txt,csv - 很简单,可以使用numpy或pandas导入。

numpy.recfromcsv - 加载存储在逗号分隔文件中的ASCII数据。返回的数组是一个记录数组(如果usemask=False)或masked记录数组(如果usemask=True)。Python示例代码:

data=np.recfromcsv(file)

numpy.loadtxt - 此函数旨在成为简单格式化文件的快速阅读器。该genfromtxt函数提供了更复杂的处理,例如,缺失值的行。

data=np.loadtxt('file.csv', delimiter=',', skiprows=1, usecols=[0,2])

numpy.genfromtxt - 从文本文件加载数据,并按指定处理缺失值。是更复杂的函数,有很多参数来控制你的导入。

data=np.genfromtxt('titanic.csv', delimiter=',', names=True, dtype=None)

使用pandas更容易 - 一行,你准备好DataFrame中的文件。还支持可选地将文件迭代或分解为块。

data=pd.read_csv(file, nrows=5, header=None, sep='\t', comment='#', na_values='Nothing')

Pickle

它用于序列化和反序列化Python对象结构。可以对python中的任何对象进行pickle,以便将其保存在磁盘上。pickle的作用是在将对象写入文件之前先将其“序列化”。Pickling是一种将python对象(list,dict等)转换为字符流的方法。这个想法是这个字符流包含在另一个python脚本中重建对象所需的所有信息。下面的代码将打印一个在某处创建并存储在文件中的字典 - 非常酷,不是吗?

import pickle 
with open('data.pkl', 'rb') as file: 
 d=pickle.load(file)
print(d)

Excel

与pandas.read_excel将Excel表读入panda DataFrame中,并进行了大量的自定义导入数据,这个函数的文档很清楚,你可以用Excel文件做任何你想做的事情。

df=pd.read_excel('file.xlsx', sheet_name='sheet1')

SAS和Stata

SAS代表统计分析软件。SAS数据集包含组织为观察(行)和变量(列)表的数据值。要打开此类文件并从中导入数据,请看下面的Python代码示例:

from sas7bdat import SAS7BDAT
with SAS7BDAT('some_data.sas7bdat') as file: 
 df_sas=file.to_data_frame()

Stata是一款强大的统计软件,可以让用户分析、管理和生成数据的图形化可视化。它主要被经济学、生物医学和政治学领域的研究人员用于研究数据模式。存储在.dta文件中的数据,导入它的最好方法是pandas.read_stata

df=pd.read_stata('file.dta')

HDF5

分层数据格式(HDF)是一组文件格式(HDF4, HDF5),用于存储和组织大量数据。HDF5是一个独特的技术套件,可以管理非常大和复杂的数据集合。HDF5简化了文件结构,只包含两种主要类型的对象:

  • Datasets,是同构类型的多维数组
  • Groups,它是可以容纳数据集和其他组的容器结构

这就产生了一种真正的层次化、文件系统式的数据格式。实际上,HDF5文件中的资源甚至可以使用类似/ path / to / resource访问HDF5文件中的资源。元数据以用户定义的、附加到Groups和Datasets的命名属性的形式存储。然后,可以使用数据集、组和属性构建表示图像和表的更复杂的存储api。

要导入HDF5文件,我们需要h5py库。下面的Python代码示例使我更轻松,完全可以理解。

import h5py 
# Load file: 
data=h5py.File('file.hdf5', 'r') 
# Print the keys of the file 
for key in data.keys(): 
 print(key)
# Now when we know the keys we can get the HDF5 group
group=data['group_name'] 
# Going one level deeper, check out keys of group 
for key in group.keys(): 
 print(key)
# And so on and so on

MATLAB

很多人使用MATLAB并将数据存储在.mat文件中。那些文件是什么?这些文件包含在MATLAB工作空间中分配给它们的变量和对象列表。将它作为字典导入Python并不奇怪,其中键是MATLAB变量和值 - 分配给这些变量的对象。要编写和读取MATLAB文件,请使用scipy.io包。

import scipy.io 
mat=scipy.io.loadmat('some_project.mat')
print(mat.keys())

关系数据库

使用驱动程序连接到数据库,我们可以直接从那里获取数据。通常它意味着:创建连接,连接,运行查询,获取数据,关闭连接。它可以一步一步地完成,但在pandas 中只需要sqlalchemy包创建的连接。下面是连接到sqlite数据库引擎并从中获取数据的示例:

from sqlalchemy import create_engine 
import pandas as pd 
# Create engine 
engine=create_engine('sqlite:///localdb.sqlite')
# Execute query and store records in DataFrame 
df=pd.read_sql_query("select * from table", engine)

来自Web的数据

首先,如果我们有一个文件的URL,我们可以使用标准的pandas.read_csv / pandas.read_excel函数在参数“file=”中指定它

df=pd.read_csv('https://www.example.com/data.csv', sep=';')

除此之外,要从Web获取数据,我们需要使用HTTP协议,特别是GET方法。并且requests 包做了这个令人难以置信的工作。要从requests.get收到的响应中访问文本,我们只需要使用方法.text。

import requests 
r=requests.get('http://www.example.com/some_html_page') 
print(r.text)

r.text将为我们提供一个包含所有html标签的网页 - 不是很有用,不是吗?我们有一个BeautifulSoup包,可以解析HTML并提取我们需要的信息,在本例中是所有超链接(继续前面的例子):

from bs4 import BeautifulSoup
html_doc=r.text 
# Create a BeautifulSoup object from the HTML 
soup=BeautifulSoup(html_doc)
# Find all 'a' tags (which define hyperlinks) 
a_tags=soup.find_all('a') 
# Print the URLs to the shell 
for link in a_tags: 
 print(link.get('href'))

API

在计算机编程中,应用程序编程接口(API)是一组子例程定义,通信协议和用于构建软件的工具。一般而言,它是一组明确定义的各种组件之间的通信方法。有许多不同的API,首先必须做的是检查文档,但事实是几乎所有API都以JSON格式返回数据。requests 包将再次帮助我们。(我们必须发送HTTP GET请求以从API获取数据)。

import requests 
r=requests.get('https://www.example.com/some_endpoint') 
# Decode the JSON data into a dictionary: 
json_data=r.json()
# Print each key-value pair in json_data 
for k in json_data.keys(): 
 print(k + ': ', json_data[k])

我们可以看到,数据无处不在,我们必须知道获取它的所有方法

件介绍

Matlab(矩阵实验室)是全球领先的数学计算软件开发商美国 MathWorks 公司研发的一款面向科学与工程计算的高级语言的商业数学软件,集算法开发、数据分析、可视化和数值计算于一体的编程环境,其核心是仿真交互式矩阵计算,广泛应用于科学计算、数据分析、算法开发和绘图设计等科研领域应用环境。

MATLAB 是一种面向科学与工程计算的高级语言,允许以数学形式的语言编写程序,比BASIC、FORTRAN 和 C语言都要更加接近于我们书写数学计算公式的思维方式。可以说,用MATLAB 编写程序,就像是在草稿纸上排列公式和求解问题,因此对于理科生和科研人员来说,它编写简单,编程效率高,而且通俗易懂。

MATLAB 是对代码、文件和数据进行管理的开发环境;是按迭代的方式探查、设计及求解问题的交互式工具;可用于包括线性代数、统计、傅里叶分析、筛选、优化以及数值积分等的数学函数;可用于可视化数据的二维和三维图形函数构建和设计;可用于基于MATLAB 的算法与外部应用程序和语言集成的各种函数。

MATLAB核心竞争力之一的Simulink模块化建模环境,是面向多域和嵌入式工程系统的仿真和基于模型的设计,可以用傻瓜式的拖动进行很多问题的建模,广泛用于汽车、航空航天、通讯、电子、信号处理、工业自动化、视频处理和图像处理系统等领域的创新和开发。如果没有Simulink,通信、控制、信号、车辆等专业的研究效率都会受到影响。哪怕不用Simulink,很多这方面的仿真软件也只提供MATLAB接口。

软件截图

更新日志

MATLAB帮助文档 - MathWorks 中国

https://ww2.mathworks.cn/help/releases/R2021a/matlab/getting-started-with-matlab.html

MATLAB发行说明 - MathWorks 中国

https://ww2.mathworks.cn/help/releases/R2021a/matlab/release-notes.html

运行要求

Windows 7 SP1 x64、Windows 10 1803 x64 或更高版

硬件要求:16G内存 + 独显 + Inter酷睿(适合)、AMD锐龙

2021年可以流畅跑Matlab的生产力兼游戏笔记本型号推荐:

R/Y9000P,X ROG幻15/14, ThinkPad P17, X1 Carbon 美版

其次:联想小新Pro/Air Plus(办公和生产力需求买带独显版)

效验信息

# 初始完整安装包

镜像大小:19.2GB

创建时间:Fri Sep 17 15:46:28 2021

初始版本:R2021b v9.11.0.1769968

镜像名称:Matlab911R2021b_Win64.iso

SHA1: E28A6EEED0ED7918D32BDC0297E4932256DFDD36

# 更新补丁安装包

镜像大小:6.76GB

创建时间:2022年2月8日, 17:00:00

详细版本:R2021b Update 3 v9.11.0.1873467

镜像名称:Matlab911_R2021b_Update3Win.iso

SHA1: 6078C9C554EC9D9128F5D0AA8009A9FAA3EB7875

网盘:MATLAB R2021b Update3 - 清风小站 (qfwl.ltd)

ATLAB的工作区有:基础工作区( 'base' )和函数工作区('caller')。

基础工作区:用于存储在命令行中创建的变量,或者存储当前命令行或编辑器运行m脚本时脚本创建的变量。

函数工作区:为保护数据的完整性,每个函数都有其自己的工作区,该工作区与基础工作区和所有其他工作区分开。例如,假设 funA 调用 funB。funB 的调用方工作区就是 funA。

如何在工作区之间共享变量或如何使它们在函数执行之间持久保留。

大多数情况下,在函数内创建的变量是仅可在该函数内识别的局部变量。局部变量不能用在命令行中,也不适用于任何其他函数。但是,可以通过多种方式在函数或工作区之间共享数据。


1.最佳做法:传递参量

扩大函数变量作用域的最安全的方式是使用函数输入和输出参量,这样可以传递变量的值。

例如,创建两个函数 update1 和 update2,它们共享和修改输入值。update2 可以是文件 update1.m 中的局部函数,也可以是它自己的文件 update2.m 中的函数。

示例程序1

clc;%清除命令行窗口命令
clear all;%清除工作区变量
close all;%关闭图形窗口
X=[1:500];
Y=update1(X);
figure;
scatter(X,Y,'filled');




function y1=update1(x1)
   y1=1 + update2(x1);
end
function y2=update2(x2)
   y2=2 * cos(x2)+5*sin(x2);
end

运行结果


2.嵌套函数

嵌套函数可以访问其所在的所有函数的工作区。所以,例如嵌套函数可以使用在其父函数中定义的变量(在本例中为 x):

示例程序2

function primaryFx
   x=1;
   fprintf("x1=%d\n",x);
   nestedFx;
   fprintf("x2=%d\n",x);
   function nestedFx
      x=x + 1;
      fprintf("x3=%d\n",x);
   end
end

运行结果

>> primaryFx
x1=1
x3=2
x2=2

如果父函数不使用指定变量,变量保持为嵌套函数的局部变量。例如,在该版本的 primaryFx 中,以下两个嵌套函数拥有它们自己的不能彼此交互的 x 版本。

示例程序3

function primaryFx1
nestedFx1
nestedFx2
    function nestedFx1
        x=1;
        fprintf("x1=%d\n",x);
    end


    function nestedFx2
        x=2;
        fprintf("x1=%d\n",x);
    end
end

运行结果

>> primaryFx1
x1=1
x1=2
>>

3.持久变量

如果将函数内的变量声明为持久变量,则从一个函数调用转到下个函数调用时变量会保留其值。其他局部变量仅在当前函数执行期间保留它们的值。持久变量等效于其他编程语言中的静态变量。

要使用 persistent 关键字声明变量之后再使用它们。MATLAB将持久变量初始化为空矩阵[]。

例如,在名为 findSum.m 的文件中定义一个函数,先将总和值初始化为 0,然后在每次迭代时与该值相加。

示例程序4

clc;%清除命令行窗口命令
clear all;%清除工作区变量
close all;%关闭图形窗口
for inputvalue=1:10
    findSum(inputvalue);
end


function findSum(inputvalue)
persistent SUM_X
if isempty(SUM_X)
   SUM_X=0;
end
SUM_X=SUM_X + inputvalue;
SUM_X
end

运行结果



SUM_X=55


>>

调用该函数时,SUM_X 的值在后续执行之间持久保留。

以下操作可清除函数的持久变量:

clear all
clear functionname
编辑函数文件

要避免清除持久变量,请使用 mlock 锁定函数文件。


4.全局变量

全局变量是可以从函数或命令行中访问的变量。它们拥有自己的工作区,这些工作区与基础和函数工作区分开。

但是,全局变量具有显著风险。例如:

  • 任何函数都可以访问和更新全局变量。使用此类变量的其他函数可能返回意外结果。
  • 如果无意间提供与现有全局变量同名的“新”全局变量,一个函数可能覆盖另一个函数预期的值。此类错误很难诊断。
  • 请尽可能谨慎使用全局变量。

如果使用全局变量,请使用 global 关键字声明它们,然后从任何特定位置(函数或命令行)访问它们。例如,在名为 falling.m 的文件中创建一个函数。

示例程序5

clc;%清除命令行窗口命令
clear all;%清除工作区变量
global GRAVITY
GRAVITY=32;
y=falling((0:.1:5)')'


function h=falling(t)
   global GRAVITY
   h=1/2*GRAVITY*t.^2;
end

运行结果



y=列 1 至 11


         0    0.1600    0.6400    1.4400    2.5600    4.0000    5.7600    7.8400   10.2400   12.9600   16.0000


  列 12 至 22


   19.3600   23.0400   27.0400   31.3600   36.0000   40.9600   46.2400   51.8400   57.7600   64.0000   70.5600


  列 23 至 33


   77.4400   84.6400   92.1600  100.0000  108.1600  116.6400  125.4400  134.5600  144.0000  153.7600  163.8400


  列 34 至 44


  174.2400  184.9600  196.0000  207.3600  219.0400  231.0400  243.3600  256.0000  268.9600  282.2400  295.8400


  列 45 至 51


  309.7600  324.0000  338.5600  353.4400  368.6400  384.1600  400.0000


>>

通过上述两条全局语句,可以在函数内使用在命令提示符下赋值给 GRAVITY 的值。但是,更为稳健的做法是,重新定义函数以接该值作为输入。


5.在另一工作区中计算

通过 evalin 和 assignin 函数,可以计算字符向量中的命令或变量名称并指定是否使用当前或基础工作区。和全局变量一样,这些函数存在覆盖现有数据的风险。

assignin函数作用为指定工作区中的变量赋值
evalin函数作用在指定的工作区中计算 MATLAB 表达式

参考内容

[1]https://ww2.mathworks.cn/help/matlab/scope-variables-and-generate-names.html?s_tid=CRUX_lftnav

[2] https://ww2.mathworks.cn/help/matlab/matlab_prog/share-data-between-workspaces.html

[3] https://ww2.mathworks.cn/help/matlab/ref/evalin.html

[4]https://ww2.mathworks.cn/help/matlab/ref/assignin.html?searchHighlight=assignin&s_tid=srchtitle_support_results_1_assignin

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。


作 者 | 郭志龙

编 辑 | 郭志龙
校 对 | 郭志龙