目錄
Numpy專門針對ndarray的操作和運算進行了設計,所以數組的存儲效率和輸入輸出性能遠優于Python中的嵌套列表,數組越大,Numpy的優勢就越明顯。Numpy系統是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix))。據說NumPy將Python相當于變成一種免費的更強大的MATLAB系統。
ndarray中的所有元素的類型都是相同的,而Python列表中的元素類型是任意的,所以ndarray在存儲元素時內存可以連續,而python原生lis就t只能通過尋址方式找到下一個元素,這雖然也導致了在通用性能方面Numpy的ndarray不及Python原生list,但在科學計算中,Numpy的ndarray就可以省掉很多循環語句,代碼使用方面比Python原生list簡單的多。
總的來說,在科學計算和大數據的處理上面,numpy的優勢遠遠超過了原生態的Python內置方法,正所謂“工欲善其事必先利其器”,任何一門工程學科的發現和精進,都離不開各種軟件的升級和迭代。
# 列表[1,2,"a",4]
在Python中,最為常見的數據類型就是列表,列表是一維的數據,同時也是我們處理數據的常見集裝箱。
在anaconda里面的jupyter notebook里面,我們直接使用pip安裝這一個庫,一般的anaconda會自帶numpy這一個第三方庫。
在使用numpy的時候,首先要引入這一個第三方庫,使用:import numpy as np即可,便于為我們后面的方法屬性調用。
在構造最為基本的numpy數據時,我們使用numpy的array()方法,里面就是一個列表形式的,可以是多維數組,最終構造成:ndarray類型
# 集合set([1,"a",3,4]) #集合的元素唯一且無序
# 元組tuple([1,"a",3,4])#元組的元素不可變
對于Python里面的常見的幾種數據類型:字符串、元組、列表、字典、集合,重點需要注意的是字符串和元組是不可修改的,但是可以通過索引來組合和切斷這些元素,例如:
我們發現,元組是不可以修改的,但是我們的列表卻可以
那么就會有小伙伴疑問了,那么不可修改,怎么辦!我們可以通過下面的方法:
直接在同一個元組上更新是不可行的,但是可以通過拷貝現有的元組片段構造一個新的元組的方式解決。
通過分片的方法讓元組拆分成兩部分,然后再使用連接操作符(+)合并成一個新元組,最后將原來的變量名(temp)指向連接好的新元組。在這里就要注意了,逗號是必須的,小括號也是必須的!
temp = ("小雞","小狗","小豬")temp = temp[:2] + ("小猴子",) + temp[2:]print(temp) ("小雞", "小狗", "小猴子", "小豬")
刪除元組中的元素:對于元組是不可變的原則來說,多帶帶刪除一個元素是不可能的,當然你可以利用切片的方式更新元組,間接的刪除一個元素。
temp = ("小雞","小狗","小豬") temp = temp[:1] + temp[2:] print(temp) ("小雞", "小豬")
在日常中很少用del去刪除整個元組,因為Python的回收機制會在這個元組不再被使用的時候自動刪除。如果整個刪除那么就會報錯!!!
最簡單的方法就是使用列表進行二維數組的創建,那么如果我們不使用這種方法,我們應該如何去做呢?
答案是:numpy的array()
我們也可以將一個numpy裝換為dataframe類型,也就是我們的二維數據表
我們使用Python里面的最強大的pandas庫,進行處理,構造一個二維數組,使用pandas里面的column方法,對數組的標簽進行自定義。
如何去理解這個維度呢?首先我們知道任何一個數組都是需要一個[]進行包裹的,其實最為簡單的判斷方法就是看[]的個數,從左到右,數一下,三個,那么就是三維數組,簡單粗暴但是言簡意賅。
其實從數據表里面我們可以看出,如果需要組成這樣二維多帶帶的數據表,那么就是二維數據,在單元的數據表中,仍然存在數組的嵌套,那么就是維度的+1
查看版本
np.array?
可以查看官方的解釋,同時我們也可以使用np.info(np.array)對方法進行查看和學習
有時候我們需要產生一個特定范圍的的數組,而且我們希望數據是平均的分配,這個時候我們我們就可以使用numpy的linspace()方法了,它的功能就是產生一個特定平均份數的一維數組。
np.linspace(start,end,count):注意它會將開始元素和末尾的元素都取到,然后按照count份數進行分割
np.empty(行,列):也就是產生特定的維度,多少行和列的數組
q = np.array([1,2,3,4],dtype=np.complex128) print("數據類型",type(q)) #打印數組數據類型 print("數組元素數據類型:",q.dtype) #打印數組元素數據類型 print("數組元素總數:",q.size) #打印數組尺寸,即數組元素總數 print("數組形狀:",q.shape) #打印數組形狀 print("數組的維度數目",q.ndim) #打印數組的維度數目
初學者總是把這些屬性記成了方法,注意我們的屬性是沒有()的
通過這個例子,我們可以看到numpy的效率遠遠高于我們的list列表原生態的執行速度和效率
那么有時候我們再想,如果數組的長度不一致,那么會不會有影響呢?
通過例子,我們發現,如果構造的數據長度不一致,不會報錯,但是會發出警告,也就是說這種方法,在Python里面還是支持的,但是我們發現它被多帶帶的構造為一個list類型了,元素大小也就發生了改變,將一個列表嵌套在一個列表當中。
我們可以看看長度一致的情況:
顯然是符合我們的要求的
創建的時候可以指定我們的數據類型
np.arange(),返回的是序列數組,最后一個取不到,一維的
np.ones(3,4),返回的是3行4列的全1數組,如果里面有三個數字,那么第一數字代表里面,有多少個多帶帶獨立的數組
np.zeros(數組,行,列)生成一個多少個獨立數組,每個獨立數組里面有多少行,多少列,最后類型是全0數組,如下:
np.full((n,m),value),生成一個特定維度的數組,且元素由自己定義
np.eye(n),生成一個nxn的單位矩陣
np.ones_like(array),生成一個和目標數組一樣的全1數組
使用np.linspace(),形成新的一維序列數組
使用np.concatenate((array1,array2),axis=0):按照行進行拼接
np.concatenate((array1,array2),axis=1):按照列進行拼接
如果這里使用橫向連接,那么就會報錯,為了防止報錯,我們可以使用裝置功能
拼接也要注意,是否可以?。?!
我們可以根據自己需要變換我們的一維數組,為多維數組,使用reshape(行,列)
這個方法也可以修改,但是要注意的是:resize(方法)修改的是原數組,而reshape(方法)并沒有修改原數組,需要賦值給新的變量,該修改才能生效。
使用swapaxes(1,0)進行維度調換,原來的行數變成現在的列數,不改變原數組
flatten()降維處理,一維,不改變原數組
astype(np.int16),或者其他的numpy數據類型,直接拷貝數據類型格式
轉換為list類型
索引和我們Python里面的較為相似,如果里面存在多個獨立數組,那么第一個索引只取出大的數組框,然后后面對應的就是行和列
對于步長而言,我們要明確的是,索引從0開始,最后一個索引永遠取不到,其次,不寫出的索引為默認取到,對于步長取索引,我們按照空格方法記憶最好!
np.sum(array,axis=(0,1))對行和列進行求和,那么就是所有元素相加,如果是1,那么就是行,0就是列
有小伙伴對axis=1,0的具體含義有很多的疑問:這里給出解釋:
注意看,官方對于0和1的解釋是軸,也就是坐標軸。而坐標軸是有方向的,所以千萬不要用行和列的思維去想axis,因為行和列是沒有方向的,這樣想會在遇到不同的例子時感到困惑。
根據官方的說法,1表示橫軸,方向從左到右;0表示縱軸,方向從上到下。當axis=1時,數組的變化是橫向的,而體現出來的是列的增加或者減少。
其實axis的重點在于方向,而不是行和列。具體到各種用法而言也是如此。當axis=1時,如果是求平均,那么是從左到右橫向求平均;如果是拼接,那么也是左右橫向拼接;如果是drop,那么也是橫向發生變化,體現為列的減少。
當考慮了方向,即axis=1為橫向,axis=0為縱向,而不是行和列,那么所有的例子就都統一了。
對于這些方法,熟悉和掌握是兩回事,熟能生巧.......
仔細觀察這兩個方法:
np.random.rand()是產生0,1的分布隨機數
np.random.randn()產生的是標準正態分布隨機數
有n的是正態分布隨機數,沒有的是0,1的隨機數
隨機種子
數組打亂
一般在numpy里面對于數據保存和載入,沒有經常性的要求,因為在pandas里面提供了大量的方法,為我們載入和保存。
Python Data Analysis Library 或 pandas 是基于NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使Python成為強大而高效的數據分析環境的重要因素之一。
Series:一維數組,與Numpy中的一維array類似。二者與Python基本的數據結構List也很相近,其區別是:List中的元素可以是不同的數據類型,而Array和Series中則只允許存儲相同的數據類型,這樣可以更有效的使用內存,提高運算效率。
Time- Series:以時間為索引的Series。
DataFrame:二維的表格型數據結構。很多功能與R中的data.frame類似??梢詫ataFrame理解為Series的容器。以下的內容主要以DataFrame為主。
Panel :三維的數組,可以理解為DataFrame的容器。
Pandas 有兩種自己獨有的基本數據結構。讀者應該注意的是,它固然有著兩種數據結構,因為它依然是 Python 的一個庫,所以,Python 中有的數據類型在這里依然適用,也同樣還可以使用類自己定義數據類型。只不過,Pandas 里面又定義了兩種數據類型:Series 和 DataFrame,它們讓數據操作更簡單了。
# 導入pandas和numpy!pip install numpy!pip install pandasimport pandas as pdimport numpy as np
pd.Series():創建一個數據表,里面的index提供了索引的方法,給出的是一個列表的類型。
同時也可以使用index取出標簽索引
Series提供了字典的類型,進行組合,就算是我們有缺失的鍵值對,但是我們可以自己定義標簽index
列表也可以完成,這在我們進行爬蟲的時候,我們可以用列表容器進行,存儲
創建的是一樣的值,我們可以根據自己的需要進行
按照索引進行取值和修改
get()方法,如果存在這樣的鍵值對,那么就可以取出來,但是如果不存在,就會使用后面的那個默認值
索引切片和我們之前介紹的Python內置方法也是一樣,和numpy里面的思想也差不多,這里就不多多贅述了。
我們發現列表解析原來如此的強大,為我們減輕很多的麻煩,其實如果你熟練掌握Python的基礎語法,這一點你也是可以理解的
pd.date_range():
pd.date_range( start=None,#開始時間 end=None,#截止時間 periods=None,#總長度 freq=None,#時間間隔 tz=None,#時區 normalize=False,#是否標準化到midnight name=None,#date名稱 closed=None,#首尾是否在內 **kwargs,)
asfreq("時間頻率"):改變時間頻率
索引思想依然一致
按照步長進行索引的搜尋
通過字典進行構造,這也滿足了,我們如何把字典類型轉換為dataframe類型,最后保存在我們需要的數據表類型里面
說實話,在我們的日常數據處理里面,我們一般是把字典嵌套在列表里面,那么我們就可以把列表放入這個里面,最后轉換為dataframe類型存儲
不加index,默認數字序列
行標簽,column如果和字典的鍵不對應,那么就會為空,這個是需要注意的
三維數組進行,數據表展示,就是這樣的
這里交代了數據表里面一般拼接,增加和賦值操作
df["字段"]=pd.Series([填充字段],index=[列標簽]),可以達到對數據表的增加,在特定的列索引上面添加數據
刪除并顯示值,該列數據
對某一列刪除操作
會根據索引來進行匹配,沒有匹配到索引的,將會填充為NaN
為了演示數據的導出。這里我們引入一個新的第三方庫tushare,通過這個庫,我們可以輕松的獲取金融相關數據,如股票數據。
以下為tushare庫的介紹。 其官方文檔地址為:http://tushare.org/index.html TuShare是一個免費、開源的python財經數據接口包。主要實現對股票等金融數據從數據采集、清洗加工 到 數據存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便于分析的數據,為他們在數據獲取方面極大地減輕工作量,使他們更加專注于策略和模型的研究與實現上。
考慮到Python pandas包在金融量化分析中體現出的優勢,TuShare返回的絕大部數據格式都是pandas DataFrame類型,非常便于用pandas/NumPy/Matplotlib進行數據分析和可視化。
當然,如果您習慣了用Excel或者關系型數據庫做分析,您也可以通過TuShare的數據存儲功能,將數據全部保存到本地后進行分析。
我們先獲取2017年,第二季度全部股票的業績報告,盈利能力,營運能力數據,然后分別用不同方式保存它們。
!pip install wheel!pip install lxml!pip install tushare!pip install beautifulsoup4!pip install requests!pip install pandasimport tushare as ts# 業績報告report = ts.get_report_data(2017,2)# 盈利能力profit = ts.get_profit_data(2017,2)# 營運能力operation = ts.get_operation_data(2017,2)
report.to_csv("./report.csv",index = False,encoding = "utf-8")profit.to_csv("./profit.csv",index = False,encoding = "utf-8")operation.to_csv("./operation.csv",index = False,encoding = "utf-8")
# 可以分別導出到不同的Excel工作簿;!pip install openpyxlreport.to_excel("./report.xlsx",index =False)profit.to_excel("./profit.xlsx",index = False)operation.to_excel("./operation.xlsx",index =False)
在pandas里面提供了大量的數據載入和數據導出的方法
#先打開一個Excel工作簿,然后分別寫入三個表格,然后關掉Excel工作簿writer = pd.ExcelWriter("./finance.xlsx")report.to_excel(writer,sheet_name="report",index = False)profit.to_excel(writer,sheet_name="profit",index = False)operation.to_excel(writer,sheet_name="operation",index = False)# 文件寫入完畢后關掉Excel工作簿writer.close()
# 導出為json文件report.to_json("./report.json")
# 導出為hdf文件!pip install tablesfrom warnings import filterwarningsfilterwarnings("ignore")report.to_hdf("./report.hdf","report")# ImportError: HDFStore requires PyTables, "No module named "tables"" problem importing
import sqlite3# 創建連接sqlite_con = sqlite3.connect("./pandas.db")# 寫入數據report.to_sql("report",sqlite_con,if_exists ="replace",index =False)profit.to_sql("profit",sqlite_con,if_exists ="replace",index =False)operation.to_sql("operation",sqlite_con,if_exists ="replace",index =False)
# 從文本文件# 推薦使用相對路徑pd.read_csv("./report.csv").head(3)
#從Excel文件# 如果不是被迫選擇Excel文件格式,一般不推薦使用Excel文件格式,速度很慢!pip install xlrdpd.read_excel("./report.xlsx").head()
如果說,數據的導入和導出是數據的前提,那么數據的處理分析那么就是數據的精華
按照不同的字段進行分組聚合統計,count()計數,sum()求和
按照不同的字段分別分組聚合,然后進行統計分析,輸出需要顯示的指標變量的值
注意這里的describe()用于描述性分析,直接可以使用該方法
構造兩個臨時數據表,用于我們后面的操作
直接進行連接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119691.html
摘要:最好是客戶雙擊,完事兒。目前已經兼容,以及和。一共會有個對象,分別是。,就是我們的工作目錄,存放我們的數據。編譯打包最后,我們執行就好了。打包的可執行文件會在里,中是一些打包時候需要的文件。輸出中最后有字樣,就算成功了。 showImg(https://img-blog.csdnimg.cn/20190303211533768.png?x-oss-process=image/water...
必須要看的前言 本文風格:以??簡單易懂??的語言帶你徹底搞懂KNN,了解什么是有監督學習算法。 認真看完這篇文章,徹底了解KNN、了解監督學習算法絕對是一樣很簡單的事情。 注:本篇文章非常詳細,同時我也附加了Python代碼,歡迎收藏后慢慢閱讀。 目錄 必須要看的前言監督學習算法KNN/K近鄰算法1 算法原理1.1 實現過程1.2 距離的確定 2 算法的優缺點3 算法的變種3.1 變...
??蘇州程序大白一文從基礎手把手教你Python數據可視化大佬??《??記得收藏??》 目錄 ????開講啦?。。。????蘇州程序大白?????博主介紹前言數據關系可視化散點圖 Scatter plots折線圖強調連續性 Emphasizing continuity with line plots同時顯示多了圖表 數據種類的可視化 Plotting with categorical da...
前言: 先感受一下數據科學的魅力,上圖是在Smart Dubai 2017 GITEX科技周展臺上推出Smart Decision-Making Platform(智能決策平臺),于10月8日至12日在迪拜世界貿易中心舉行。游客可以通過一個沉浸式的空間將數據可視化,讓他們了解迪拜的未來。讓參觀者可以在現場查閱觀看全市數據,這意味著迪拜將成為了世界上第一個與公眾分享實時實時數據的城市,同時還可以預...
閱讀 3133·2021-11-15 18:14
閱讀 1787·2021-09-22 10:51
閱讀 3303·2021-09-09 09:34
閱讀 3517·2021-09-06 15:02
閱讀 1037·2021-09-01 11:40
閱讀 3198·2019-08-30 13:58
閱讀 2536·2019-08-30 11:04
閱讀 1091·2019-08-28 18:31