整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          用Python導(dǎo)入數(shù)據(jù)方法匯總

          用Python導(dǎo)入數(shù)據(jù)方法匯總

          ython可以使用各種各樣的文件作為數(shù)據(jù)源:

          • 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導(dǎo)入。

          numpy.recfromcsv - 加載存儲在逗號分隔文件中的ASCII數(shù)據(jù)。返回的數(shù)組是一個記錄數(shù)組(如果usemask=False)或masked記錄數(shù)組(如果usemask=True)。Python示例代碼:

          data=np.recfromcsv(file)
          

          numpy.loadtxt - 此函數(shù)旨在成為簡單格式化文件的快速閱讀器。該genfromtxt函數(shù)提供了更復(fù)雜的處理,例如,缺失值的行。

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

          numpy.genfromtxt - 從文本文件加載數(shù)據(jù),并按指定處理缺失值。是更復(fù)雜的函數(shù),有很多參數(shù)來控制你的導(dǎo)入。

          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對象結(jié)構(gòu)。可以對python中的任何對象進行pickle,以便將其保存在磁盤上。pickle的作用是在將對象寫入文件之前先將其“序列化”。Pickling是一種將python對象(list,dict等)轉(zhuǎn)換為字符流的方法。這個想法是這個字符流包含在另一個python腳本中重建對象所需的所有信息。下面的代碼將打印一個在某處創(chuàng)建并存儲在文件中的字典 - 非常酷,不是嗎?

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

          Excel

          與pandas.read_excel將Excel表讀入panda DataFrame中,并進行了大量的自定義導(dǎo)入數(shù)據(jù),這個函數(shù)的文檔很清楚,你可以用Excel文件做任何你想做的事情。

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

          SAS和Stata

          SAS代表統(tǒng)計分析軟件。SAS數(shù)據(jù)集包含組織為觀察(行)和變量(列)表的數(shù)據(jù)值。要打開此類文件并從中導(dǎo)入數(shù)據(jù),請看下面的Python代碼示例:

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

          Stata是一款強大的統(tǒng)計軟件,可以讓用戶分析、管理和生成數(shù)據(jù)的圖形化可視化。它主要被經(jīng)濟學(xué)、生物醫(yī)學(xué)和政治學(xué)領(lǐng)域的研究人員用于研究數(shù)據(jù)模式。存儲在.dta文件中的數(shù)據(jù),導(dǎo)入它的最好方法是pandas.read_stata

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

          HDF5

          分層數(shù)據(jù)格式(HDF)是一組文件格式(HDF4, HDF5),用于存儲和組織大量數(shù)據(jù)。HDF5是一個獨特的技術(shù)套件,可以管理非常大和復(fù)雜的數(shù)據(jù)集合。HDF5簡化了文件結(jié)構(gòu),只包含兩種主要類型的對象:

          • Datasets,是同構(gòu)類型的多維數(shù)組
          • Groups,它是可以容納數(shù)據(jù)集和其他組的容器結(jié)構(gòu)

          這就產(chǎn)生了一種真正的層次化、文件系統(tǒng)式的數(shù)據(jù)格式。實際上,HDF5文件中的資源甚至可以使用類似/ path / to / resource訪問HDF5文件中的資源。元數(shù)據(jù)以用戶定義的、附加到Groups和Datasets的命名屬性的形式存儲。然后,可以使用數(shù)據(jù)集、組和屬性構(gòu)建表示圖像和表的更復(fù)雜的存儲api。

          要導(dǎo)入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并將數(shù)據(jù)存儲在.mat文件中。那些文件是什么?這些文件包含在MATLAB工作空間中分配給它們的變量和對象列表。將它作為字典導(dǎo)入Python并不奇怪,其中鍵是MATLAB變量和值 - 分配給這些變量的對象。要編寫和讀取MATLAB文件,請使用scipy.io包。

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

          關(guān)系數(shù)據(jù)庫

          使用驅(qū)動程序連接到數(shù)據(jù)庫,我們可以直接從那里獲取數(shù)據(jù)。通常它意味著:創(chuàng)建連接,連接,運行查詢,獲取數(shù)據(jù),關(guān)閉連接。它可以一步一步地完成,但在pandas 中只需要sqlalchemy包創(chuàng)建的連接。下面是連接到sqlite數(shù)據(jù)庫引擎并從中獲取數(shù)據(jù)的示例:

          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的數(shù)據(jù)

          首先,如果我們有一個文件的URL,我們可以使用標準的pandas.read_csv / pandas.read_excel函數(shù)在參數(shù)“file=”中指定它

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

          除此之外,要從Web獲取數(shù)據(jù),我們需要使用HTTP協(xié)議,特別是GET方法。并且requests 包做了這個令人難以置信的工作。要從requests.get收到的響應(yīng)中訪問文本,我們只需要使用方法.text。

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

          r.text將為我們提供一個包含所有html標簽的網(wǎng)頁 - 不是很有用,不是嗎?我們有一個BeautifulSoup包,可以解析HTML并提取我們需要的信息,在本例中是所有超鏈接(繼續(xù)前面的例子):

          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

          在計算機編程中,應(yīng)用程序編程接口(API)是一組子例程定義,通信協(xié)議和用于構(gòu)建軟件的工具。一般而言,它是一組明確定義的各種組件之間的通信方法。有許多不同的API,首先必須做的是檢查文檔,但事實是幾乎所有API都以JSON格式返回數(shù)據(jù)。requests 包將再次幫助我們。(我們必須發(fā)送HTTP GET請求以從API獲取數(shù)據(jù))。

          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])
          

          我們可以看到,數(shù)據(jù)無處不在,我們必須知道獲取它的所有方法

          件介紹

          Matlab(矩陣實驗室)是全球領(lǐng)先的數(shù)學(xué)計算軟件開發(fā)商美國 MathWorks 公司研發(fā)的一款面向科學(xué)與工程計算的高級語言的商業(yè)數(shù)學(xué)軟件,集算法開發(fā)、數(shù)據(jù)分析、可視化和數(shù)值計算于一體的編程環(huán)境,其核心是仿真交互式矩陣計算,廣泛應(yīng)用于科學(xué)計算、數(shù)據(jù)分析、算法開發(fā)和繪圖設(shè)計等科研領(lǐng)域應(yīng)用環(huán)境。

          MATLAB 是一種面向科學(xué)與工程計算的高級語言,允許以數(shù)學(xué)形式的語言編寫程序,比BASIC、FORTRAN 和 C語言都要更加接近于我們書寫數(shù)學(xué)計算公式的思維方式。可以說,用MATLAB 編寫程序,就像是在草稿紙上排列公式和求解問題,因此對于理科生和科研人員來說,它編寫簡單,編程效率高,而且通俗易懂。

          MATLAB 是對代碼、文件和數(shù)據(jù)進行管理的開發(fā)環(huán)境;是按迭代的方式探查、設(shè)計及求解問題的交互式工具;可用于包括線性代數(shù)、統(tǒng)計、傅里葉分析、篩選、優(yōu)化以及數(shù)值積分等的數(shù)學(xué)函數(shù);可用于可視化數(shù)據(jù)的二維和三維圖形函數(shù)構(gòu)建和設(shè)計;可用于基于MATLAB 的算法與外部應(yīng)用程序和語言集成的各種函數(shù)。

          MATLAB核心競爭力之一的Simulink模塊化建模環(huán)境,是面向多域和嵌入式工程系統(tǒng)的仿真和基于模型的設(shè)計,可以用傻瓜式的拖動進行很多問題的建模,廣泛用于汽車、航空航天、通訊、電子、信號處理、工業(yè)自動化、視頻處理和圖像處理系統(tǒng)等領(lǐng)域的創(chuàng)新和開發(fā)。如果沒有Simulink,通信、控制、信號、車輛等專業(yè)的研究效率都會受到影響。哪怕不用Simulink,很多這方面的仿真軟件也只提供MATLAB接口。

          軟件截圖

          更新日志

          MATLAB幫助文檔 - MathWorks 中國

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

          MATLAB發(fā)行說明 - MathWorks 中國

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

          運行要求

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

          硬件要求:16G內(nèi)存 + 獨顯 + Inter酷睿(適合)、AMD銳龍

          2021年可以流暢跑Matlab的生產(chǎn)力兼游戲筆記本型號推薦:

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

          其次:聯(lián)想小新Pro/Air Plus(辦公和生產(chǎn)力需求買帶獨顯版)

          效驗信息

          # 初始完整安裝包

          鏡像大小:19.2GB

          創(chuàng)建時間:Fri Sep 17 15:46:28 2021

          初始版本:R2021b v9.11.0.1769968

          鏡像名稱:Matlab911R2021b_Win64.iso

          SHA1: E28A6EEED0ED7918D32BDC0297E4932256DFDD36

          # 更新補丁安裝包

          鏡像大小:6.76GB

          創(chuàng)建時間:2022年2月8日, 17:00:00

          詳細版本:R2021b Update 3 v9.11.0.1873467

          鏡像名稱:Matlab911_R2021b_Update3Win.iso

          SHA1: 6078C9C554EC9D9128F5D0AA8009A9FAA3EB7875

          網(wǎng)盤:MATLAB R2021b Update3 - 清風(fēng)小站 (qfwl.ltd)

          ATLAB的工作區(qū)有:基礎(chǔ)工作區(qū)( 'base' )和函數(shù)工作區(qū)('caller')。

          基礎(chǔ)工作區(qū):用于存儲在命令行中創(chuàng)建的變量,或者存儲當前命令行或編輯器運行m腳本時腳本創(chuàng)建的變量。

          函數(shù)工作區(qū):為保護數(shù)據(jù)的完整性,每個函數(shù)都有其自己的工作區(qū),該工作區(qū)與基礎(chǔ)工作區(qū)和所有其他工作區(qū)分開。例如,假設(shè) funA 調(diào)用 funB。funB 的調(diào)用方工作區(qū)就是 funA。

          如何在工作區(qū)之間共享變量或如何使它們在函數(shù)執(zhí)行之間持久保留。

          大多數(shù)情況下,在函數(shù)內(nèi)創(chuàng)建的變量是僅可在該函數(shù)內(nèi)識別的局部變量。局部變量不能用在命令行中,也不適用于任何其他函數(shù)。但是,可以通過多種方式在函數(shù)或工作區(qū)之間共享數(shù)據(jù)。


          1.最佳做法:傳遞參量

          擴大函數(shù)變量作用域的最安全的方式是使用函數(shù)輸入和輸出參量,這樣可以傳遞變量的值。

          例如,創(chuàng)建兩個函數(shù) update1 和 update2,它們共享和修改輸入值。update2 可以是文件 update1.m 中的局部函數(shù),也可以是它自己的文件 update2.m 中的函數(shù)。

          示例程序1

          clc;%清除命令行窗口命令
          clear all;%清除工作區(qū)變量
          close all;%關(guān)閉圖形窗口
          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

          運行結(jié)果


          2.嵌套函數(shù)

          嵌套函數(shù)可以訪問其所在的所有函數(shù)的工作區(qū)。所以,例如嵌套函數(shù)可以使用在其父函數(shù)中定義的變量(在本例中為 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

          運行結(jié)果

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

          如果父函數(shù)不使用指定變量,變量保持為嵌套函數(shù)的局部變量。例如,在該版本的 primaryFx 中,以下兩個嵌套函數(shù)擁有它們自己的不能彼此交互的 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

          運行結(jié)果

          >> primaryFx1
          x1=1
          x1=2
          >>

          3.持久變量

          如果將函數(shù)內(nèi)的變量聲明為持久變量,則從一個函數(shù)調(diào)用轉(zhuǎn)到下個函數(shù)調(diào)用時變量會保留其值。其他局部變量僅在當前函數(shù)執(zhí)行期間保留它們的值。持久變量等效于其他編程語言中的靜態(tài)變量。

          要使用 persistent 關(guān)鍵字聲明變量之后再使用它們。MATLAB將持久變量初始化為空矩陣[]。

          例如,在名為 findSum.m 的文件中定義一個函數(shù),先將總和值初始化為 0,然后在每次迭代時與該值相加。

          示例程序4

          clc;%清除命令行窗口命令
          clear all;%清除工作區(qū)變量
          close all;%關(guān)閉圖形窗口
          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

          運行結(jié)果

          
          
          SUM_X=55
          
          
          >>

          調(diào)用該函數(shù)時,SUM_X 的值在后續(xù)執(zhí)行之間持久保留。

          以下操作可清除函數(shù)的持久變量:

          clear all
          clear functionname
          編輯函數(shù)文件

          要避免清除持久變量,請使用 mlock 鎖定函數(shù)文件。


          4.全局變量

          全局變量是可以從函數(shù)或命令行中訪問的變量。它們擁有自己的工作區(qū),這些工作區(qū)與基礎(chǔ)和函數(shù)工作區(qū)分開。

          但是,全局變量具有顯著風(fēng)險。例如:

          • 任何函數(shù)都可以訪問和更新全局變量。使用此類變量的其他函數(shù)可能返回意外結(jié)果。
          • 如果無意間提供與現(xiàn)有全局變量同名的“新”全局變量,一個函數(shù)可能覆蓋另一個函數(shù)預(yù)期的值。此類錯誤很難診斷。
          • 請盡可能謹慎使用全局變量。

          如果使用全局變量,請使用 global 關(guān)鍵字聲明它們,然后從任何特定位置(函數(shù)或命令行)訪問它們。例如,在名為 falling.m 的文件中創(chuàng)建一個函數(shù)。

          示例程序5

          clc;%清除命令行窗口命令
          clear all;%清除工作區(qū)變量
          global GRAVITY
          GRAVITY=32;
          y=falling((0:.1:5)')'
          
          
          function h=falling(t)
             global GRAVITY
             h=1/2*GRAVITY*t.^2;
          end

          運行結(jié)果

          
          
          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
          
          
          >>

          通過上述兩條全局語句,可以在函數(shù)內(nèi)使用在命令提示符下賦值給 GRAVITY 的值。但是,更為穩(wěn)健的做法是,重新定義函數(shù)以接該值作為輸入。


          5.在另一工作區(qū)中計算

          通過 evalin 和 assignin 函數(shù),可以計算字符向量中的命令或變量名稱并指定是否使用當前或基礎(chǔ)工作區(qū)。和全局變量一樣,這些函數(shù)存在覆蓋現(xiàn)有數(shù)據(jù)的風(fēng)險。

          assignin函數(shù)作用為指定工作區(qū)中的變量賦值
          evalin函數(shù)作用在指定的工作區(qū)中計算 MATLAB 表達式

          參考內(nèi)容

          [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

          本文內(nèi)容來源于網(wǎng)絡(luò),僅供參考學(xué)習(xí),如內(nèi)容、圖片有任何版權(quán)問題,請聯(lián)系處理,24小時內(nèi)刪除。


          作 者 | 郭志龍

          編 輯 | 郭志龍
          校 對 | 郭志龍


          主站蜘蛛池模板: 国产vr一区二区在线观看| 亚洲人成人一区二区三区| 国产凸凹视频一区二区| 久久精品道一区二区三区| 精品中文字幕一区二区三区四区| 久久久久久免费一区二区三区| 日韩一区二区三区免费体验| 中文字幕一区二区三区5566| 一夲道无码人妻精品一区二区| 天天爽夜夜爽人人爽一区二区| 黑巨人与欧美精品一区| 91精品福利一区二区| 无码人妻精品一区二区三区在线 | 午夜DV内射一区二区| 精品一区二区三区高清免费观看 | 精品一区二区三区在线观看视频 | 日本一区午夜爱爱| 国产品无码一区二区三区在线| 国产精品一级香蕉一区| 亚洲一区在线免费观看| 久久无码AV一区二区三区| 在线精品国产一区二区| 在线精品国产一区二区| 亚洲中文字幕久久久一区| 亚洲一区免费视频| 日本高清一区二区三区| 另类国产精品一区二区| 在线视频亚洲一区| 亚洲日本一区二区一本一道| 国产精品免费一区二区三区| 丝袜人妻一区二区三区| 末成年女A∨片一区二区| 韩国一区二区视频| 无码中文字幕乱码一区| 国产三级一区二区三区| av无码人妻一区二区三区牛牛 | 亚洲韩国精品无码一区二区三区| 亚洲韩国精品无码一区二区三区| 日韩AV无码久久一区二区| 亚洲中文字幕久久久一区| 福利在线一区二区|