日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python常用扩展包

發(fā)布時(shí)間:2025/3/21 python 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python常用扩展包 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. Python常用擴(kuò)展包

????????參考張良均的《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》,下圖展示了常見的Python擴(kuò)展包。


????????常用的包主要包括:
????????1.Numpy
????????Python沒有提供數(shù)組,列表(List)可以完成數(shù)組,但不是真正的數(shù)據(jù),當(dāng)數(shù)據(jù)量增大時(shí),,它的速度很慢。所以Numpy擴(kuò)展包提供了數(shù)組支持,同時(shí)很多高級(jí)擴(kuò)展包依賴它。例如:Scipy、Matplotlib、Pandas。

????????2.Scipy
????????該包提供矩陣支持,以及矩陣相關(guān)的數(shù)值計(jì)算模塊。如果說Numpy讓Python有了Matlab的味道,那么Scipy就讓Python真正地成為二半個(gè)Matlib。因?yàn)樯婕暗骄仃噧?nèi)容,而課程中主要使用數(shù)組,所以不再介紹。

????????3.Pandas
????????Pandas是面板數(shù)據(jù)(Panel Data)的簡寫。它是Python最強(qiáng)大的數(shù)據(jù)分析和探索工具,因金融數(shù)據(jù)分析工具而開發(fā),支持類似SQL的數(shù)據(jù)增刪改查,支持時(shí)間序列分析,靈活處理缺失數(shù)據(jù),后面詳細(xì)介紹。

????????4.Scikit-Learn
????????Scikit-Learn是一個(gè)基于python的用于數(shù)據(jù)挖掘和數(shù)據(jù)分析的簡單且有效的工具,它的基本功能主要被分為六個(gè)部分:分類(Classification)、回歸(Regression)、聚類(Clustering)、數(shù)據(jù)降維(Dimensionality Reduction)、模型選擇(Model Selection)、數(shù)據(jù)預(yù)處理(Preprocessing),前面寫的很多文章算法都是出自該擴(kuò)展包。
????????詳見官網(wǎng):http://scikit-learn.org/stable/

????????5.Matplotlib
????????該包主要用于繪圖和繪表,強(qiáng)大的數(shù)據(jù)可視化工具,做圖庫,語法類似MATLAB。同時(shí),Seaborn也是數(shù)據(jù)可視化的工具包。
????????注意:這些包在Anaconda集成環(huán)境中已經(jīng)存在,可以直接使用,最早我是通過Python2.7來編寫代碼的,安裝過程通過pip install numpy,而且安裝順序非常講究,容易出錯(cuò),所以推薦大家使用該集成包。

二. Numpy科學(xué)計(jì)算包

????????NumPy(Numeric Python)系統(tǒng)是Python的一種開源的數(shù)值計(jì)算擴(kuò)展,一個(gè)用python實(shí)現(xiàn)的科學(xué)計(jì)算包。它提供了許多高級(jí)的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運(yùn)算庫。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。
????????推薦學(xué)習(xí):http://old.sebug.net/paper/books/scipydoc/numpy_intro.html
????????下面通過這段代碼詳細(xì)講解這個(gè)包在數(shù)據(jù)分析中的常見用法:

????1.一維數(shù)組處理

#導(dǎo)入包并重命名 import numpy as np#定義一維數(shù)組 a = np.array([2, 0, 1, 5, 8, 3]) print u'原始數(shù)據(jù):', a#輸出最大、最小值及形狀 print u'最小值:', a.min() print u'最大值:', a.max() print u'形狀', a.shape#數(shù)據(jù)切片 print u'切片操作:' print a[:-2] print a[-2:] print a[:1]#排序 print type(a) a.sort() print u'排序后:', a


????????輸出結(jié)果如下所示:

原始數(shù)據(jù): [2 0 1 5 8 3] 最小值: 0 最大值: 8 形狀 (6L,) 切片操作: [2 0 1 5] [8 3] [2] <type 'numpy.ndarray'> 排序后: [0 1 2 3 5 8]


????????核心代碼:
????????代碼通過np.array定義了一個(gè)數(shù)組[2, 0, 1, 5, 8, 3],其中min計(jì)算最小值,max計(jì)算最大值,shape表示數(shù)組的形狀,因?yàn)槭且痪S數(shù)組,故6L(6個(gè)數(shù)字)。
????????最重要的一個(gè)知識(shí)點(diǎn)是數(shù)組的切片操作,因?yàn)樵跀?shù)據(jù)分析過程中,通常會(huì)對(duì)數(shù)據(jù)集進(jìn)行"80%-20%"或"70%-30%"的訓(xùn)練集和測試集劃分,通常采用的方法就是切片。
????????a[:-2]表示從頭開始獲取,"-2"表示后面兩個(gè)值不取,結(jié)果:[2 0 1 5]
????????a[-2:]表示后往前數(shù)兩個(gè)數(shù)字,獲取數(shù)字至結(jié)尾,即獲取最后兩個(gè)值[8 3]
????????a[:1]表示從頭開始獲取,獲取1個(gè)數(shù)字,即[2]

??2.二維數(shù)組處理
注意的是定義二維數(shù)組括號(hào)不要弄錯(cuò),正確的應(yīng)該是:[[1,2,3],[4,5,6]]
同時(shí)計(jì)算機(jī)的存儲(chǔ)下標(biāo)都是從0開始計(jì)算的。


????????代碼如下:

#定義二維數(shù)組 import numpy as np c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])#獲取值 print u'形狀:', c.shape print u'獲取值:', c[1][0] print u'獲取某行:' print c[1][:] print u'獲取某行并切片:' print c[0][:-1] print c[0][-1:]#獲取具體某列值 print u'獲取第3列:' print c[:,np.newaxis, 2]#調(diào)用sin函數(shù) print np.sin(np.pi/6) print type(np.sin(0.5))#范圍定義 print np.arange(0,4) print type(np.arange(0,4))


????????代碼輸出結(jié)果如下所示:

形狀: (3L, 4L) 獲取值: 4 獲取某行: [4 5 6 7] 獲取某行并切片: [1 2 3] [4] 獲取第3列: [[3][6][9]] 0.5 <type 'numpy.float64'> [0 1 2 3] <type 'numpy.ndarray'>


????????需要注意:
???????(1)獲取二維數(shù)組中的某行,如第2行數(shù)據(jù)[4,5,6,7],采用方法是:c[1][:];
???????(2)獲取二維數(shù)組中的某列,如第2列數(shù)據(jù)[[3] [6] [9]],c[:,np.newaxis, 2]。因?yàn)橥ǔT跀?shù)據(jù)可視化中采用獲取某列數(shù)據(jù)作為x或y坐標(biāo),同時(shí)多維數(shù)據(jù)也可以采用PCA降低成兩維數(shù)據(jù),再進(jìn)行顯示。


三. Pandas數(shù)據(jù)分析包

????????Pandas是面板數(shù)據(jù)(Panel Data)的簡寫。它是Python最強(qiáng)大的數(shù)據(jù)分析和探索工具,因金融數(shù)據(jù)分析工具而開發(fā),支持類似SQL的數(shù)據(jù)增刪改查,支持時(shí)間序列分析,靈活處理缺失數(shù)據(jù)。
????????注意:首先聲明改包功能非常強(qiáng)大,我只是學(xué)習(xí)了它的非常小的一部分,后面隨著學(xué)習(xí)深入會(huì)寫更多它的用法,同時(shí)建議讀者自行學(xué)習(xí),不喜勿噴。

????????約定俗成的導(dǎo)入慣例:
????????from pandas import Series, DataFrame
????????import pandas as pd

1.常見用法:讀寫文件
?這里讀文件最常用的是兩種方法:

#寫入excel文件: df.to_excel('foo.xlsx', sheet_name='Sheet1') #從excel文件中讀取: pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA']) #寫入csv文件: df.to_csv('foo.csv') #從csv文件中讀取: pd.read_csv('foo.csv') #寫入HDF5存儲(chǔ): df.to_hdf('foo.h5','df') #從HDF5存儲(chǔ)中讀取: pd.read_hdf('foo.h5','df')


????????下面通過一個(gè)具體的案例來講解該包,這里讀取的數(shù)據(jù)是張良均的《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》的第六章的電力用戶數(shù)據(jù)集,missing_data.xls文件。內(nèi)容如下,共3列數(shù)據(jù),分別是用戶A、用戶B、用戶C,共21行,對(duì)應(yīng)21天的用電量,其中包含缺失值。

235.8333 324.0343 478.3231 236.2708 325.6379 515.4564 238.0521 328.0897 517.0909 235.9063 514.89 236.7604 268.8324 404.048 486.0912 237.4167 391.2652 516.233 238.6563 380.8241 237.6042 388.023 435.3508 238.0313 206.4349 487.675 235.0729 235.5313 400.0787 660.2347411.2069 621.2346 234.4688 395.2343 611.3408 235.5 344.8221 643.0863 235.6354 385.6432 642.3482 234.5521 401.6234 236 409.6489 602.9347 235.2396 416.8795 589.3457 235.4896 556.3452 236.9688 538.347


?部分Excel文件數(shù)據(jù)截圖如下所示:


具體代碼如下所示:

#讀取數(shù)據(jù) header設(shè)置Excel無標(biāo)題頭 import pandas as pd data = pd.read_excel("missing_data.xls", header=None)? print data#計(jì)算數(shù)據(jù)長度 print u'行數(shù)', len(data)#計(jì)算用戶A\B\C用電總和 print data.sum()#計(jì)算用戶A\B\C用點(diǎn)量算術(shù)平均數(shù) mm = data.sum() print mm#輸出預(yù)覽前5行數(shù)據(jù) print u'預(yù)覽前5行數(shù)據(jù)' print data.head()#輸出數(shù)據(jù)基本統(tǒng)計(jì)量 print u'輸出數(shù)據(jù)基本統(tǒng)計(jì)量' print data.describe()


輸出結(jié)果如下所示:

? ? ? ? ? ?0 ? ? ? ? 1 ? ? ? ? 2 0 ? 235.8333 ?324.0343 ?478.3231 1 ? 236.2708 ?325.6379 ?515.4564 2 ? 238.0521 ?328.0897 ?517.0909 3 ? 235.9063 ? ? ? NaN ?514.8900 4 ? 236.7604 ?268.8324 ? ? ? NaN 5 ? ? ? ?NaN ?404.0480 ?486.0912 6 ? 237.4167 ?391.2652 ?516.2330 7 ? 238.6563 ?380.8241 ? ? ? NaN 8 ? 237.6042 ?388.0230 ?435.3508 ... 行數(shù) 21 0 ? ?4488.9899 1 ? ?6182.3265 2 ? ?9416.3276 dtype: float64 0 ? ?4488.9899 1 ? ?6182.3265 2 ? ?9416.3276 dtype: float64 預(yù)覽前5行數(shù)據(jù)0 ? ? ? ? 1 ? ? ? ? 2 0 ?235.8333 ?324.0343 ?478.3231 1 ?236.2708 ?325.6379 ?515.4564 2 ?238.0521 ?328.0897 ?517.0909 3 ?235.9063 ? ? ? NaN ?514.8900 4 ?236.7604 ?268.8324 ? ? ? NaN 輸出數(shù)據(jù)基本統(tǒng)計(jì)量0 ? ? ? ? ? 1 ? ? ? ? ? 2 count ? 19.000000 ? 17.000000 ? 17.000000 mean ? 236.262626 ?363.666265 ?553.901624 std ? ? ?1.225465 ? 57.600529 ? 67.707729 min ? ?234.468800 ?206.434900 ?435.350800 25% ? ? ? ? ? NaN ? ? ? ? NaN ? ? ? ? NaN 50% ? ? ? ? ? NaN ? ? ? ? NaN ? ? ? ? NaN 75% ? ? ? ? ? NaN ? ? ? ? NaN ? ? ? ? NaN max ? ?238.656300 ?416.879500 ?660.234700


????????其中data.describe()輸出數(shù)據(jù)的基本信息統(tǒng)計(jì),其方法參考前面的圖,包括count計(jì)數(shù)、std、max等函數(shù)。同時(shí)因?yàn)镋xcel表格中存在空值,故Python顯示為NaN(Not a Number)表示空。

2.Series
????????Series是一維標(biāo)記數(shù)組,可以存儲(chǔ)任意數(shù)據(jù)類型,如整型、字符串、浮點(diǎn)型和Python對(duì)象等,軸標(biāo)一般指索引。
????????Series、Numpy中的一維array 、Python基本數(shù)據(jù)結(jié)構(gòu)List區(qū)別:List中的元素可以是不同的數(shù)據(jù)類型,而Array和Series中則只允許存儲(chǔ)相同的數(shù)據(jù)類型,這樣可以更有效的使用內(nèi)存,提高運(yùn)算效率。

from pandas import Series, DataFrame#通過傳遞一個(gè)list對(duì)象來創(chuàng)建Series,默認(rèn)創(chuàng)建整型索引; a = Series([4, 7, -5, 3]) print u'創(chuàng)建Series:' print a#創(chuàng)建一個(gè)帶有索引來確定每一個(gè)數(shù)據(jù)點(diǎn)的Series ; b = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) print u'創(chuàng)建帶有索引的Series:' print b#如果你有一些數(shù)據(jù)在一個(gè)Python字典中,你可以通過傳遞字典來創(chuàng)建一個(gè)Series; sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} c = Series(sdata) print u'通過傳遞字典創(chuàng)建Series:' print c states = ['California', 'Ohio', 'Oregon', 'Texas'] d = Series(sdata, index=states) print u'California沒有字典為空:' print d


?輸出如下所示:

創(chuàng)建Series: 0 ? ?4 1 ? ?7 2 ? -5 3 ? ?3 dtype: int64 創(chuàng)建帶有索引的Series: d ? ?4 b ? ?7 a ? -5 c ? ?3 dtype: int64 通過傳遞字典創(chuàng)建Series: Ohio ? ? ?35000 Oregon ? ?16000 Texas ? ? 71000 Utah ? ? ? 5000 dtype: int64 California沒有字典為空: California ? ? ? ?NaN Ohio ? ? ? ? ?35000.0 Oregon ? ? ? ?16000.0 Texas ? ? ? ? 71000.0 dtype: float64


Series的一個(gè)重要功能是在算術(shù)運(yùn)算中它會(huì)自動(dòng)對(duì)齊不同索引的數(shù)據(jù)。

3.DataFrame ?????
????????DataFrame是二維標(biāo)記數(shù)據(jù)結(jié)構(gòu),列可以是不同的數(shù)據(jù)類型。它是最常用的pandas對(duì)象,像Series一樣可以接收多種輸入:lists、dicts、series和DataFrame等。初始化對(duì)象時(shí),除了數(shù)據(jù)還可以傳index和columns這兩個(gè)參數(shù)。
????????注意:
????????(1) 在pandas中用函數(shù) isnull 和 notnull 來檢測數(shù)據(jù)丟失:pd.isnull(a)、pd.notnull(b)。
????????Series也提供了這些函數(shù)的實(shí)例方法:a.isnull()。
????????(2)?Pandas提供了大量的方法能夠輕松的對(duì)Series,DataFrame和Panel對(duì)象進(jìn)行各種符合各種邏輯關(guān)系的合并操作。如:Concat、Merge (類似于SQL類型的合并)、Append (將一行連接到一個(gè)DataFrame上)。
????????(3)?DataFrame中常常會(huì)出現(xiàn)重復(fù)行,DataFrame的duplicated方法返回一個(gè)布爾型Series,表示各行是否是重復(fù)行;還有一個(gè)drop_duplicated方法,它返回一個(gè)移除了重復(fù)行的DataFrame。
????????總之,Pandas是非常強(qiáng)大的一個(gè)數(shù)據(jù)分析包,很多功能都需要我自己去慢慢摸索。


四. Matplotlib畫圖包

????????Matplotlib是一個(gè)Python的圖形框架,類似于MATLAB和R語言。它是python最著名的繪圖庫,它提供了一整套和matlab相似的命令A(yù)PI,十分適合交互式地進(jìn)行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應(yīng)用程序中。
????????補(bǔ)充兩張圖,原自《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》,對(duì)大家繪圖很有幫助。


???????最常用的畫圖函數(shù)是plot,同時(shí)常用的設(shè)置樣式方法見下圖。

????????這里主要使用前面第三部分Pandas讀取的電力數(shù)據(jù)繪制圖形,主要是柱狀圖和餅圖。


1.繪制柱狀圖

# -*- coding: utf-8 -*- """ Created on Mon Nov 14 04:06:01 2016 @author: yxz15 """#導(dǎo)入數(shù)據(jù)集 import pandas as pd data = pd.read_excel("missing_data.xls", header=None)? mm = data.sum() print u'計(jì)算用電量總數(shù):' print mm#繪制圖形 import numpy as np import matplotlib.pyplot as plt #中文字體顯示 plt.rc('font', family='SimHei', size=13) N = 3 #3個(gè)用戶 0 1 2 ind = np.arange(N) ?# the x locations for the groups? print ind #設(shè)置寬度 width = 0.35 ? ? ? ? x = [u'用戶A', u'用戶B', u'用戶C'] #繪圖 plt.bar(ind, mm, width, color='r', label='sum num') plt.xlabel(u"用戶名") plt.ylabel(u"總耗電量") plt.title(u'電力竊漏電用戶自動(dòng)識(shí)別--總耗電量') plt.legend() #設(shè)置底部名稱 plt.xticks(ind+width/2, x, rotation=40) #旋轉(zhuǎn)40度 plt.show()


輸出如下所示:

2.繪制餅圖

import matplotlib.pyplot as pltfracs = [45, 30, 25] ? ? ? ? ? ? #每一塊占得比例,總和為100 n = mm[0]+mm[1]+mm[2] a = (mm[0]*1.0*100/n) b = (mm[1]*1.0*100/n) c = (mm[2]*1.0*100/n) print a, b, c, n fracs = [a, b, c]explode=(0, 0, 0.08) ? ? ? ? ? ? #離開整體的距離,看效果 labels = 'A', 'B', 'C' ? ? ? ? ? #對(duì)應(yīng)每一塊的標(biāo)志plt.pie(fracs, explode=explode, labels=labels,autopct='%1.1f%%', shadow=True, startangle=90, colors = ("g", "r", "y"))# startangle是開始的角度,默認(rèn)為0,從這里開始按逆時(shí)針方向依次展開plt.title('Raining Hogs and Dogs') ? #標(biāo)題plt.show()


輸出如下所示:

?3.柱狀圖及比例顯示

import matplotlib.pyplot as plt import numpy as np plt.rc('font', family='SimHei', size=13)num = np.array([13325, 9403, 9227, 8651]) ratio = np.array([0.75, 0.76, 0.72, 0.75]) men = num * ratio women = num * (1-ratio) x = [u'聊天',u'支付',u'團(tuán)購\n優(yōu)惠券',u'在線視頻']width = 0.5 idx = np.arange(len(x)) plt.bar(idx, men, width, color='red', label=u'男性用戶') plt.bar(idx, women, width, bottom=men, color='yellow', label=u'女性用戶') plt.xlabel(u'應(yīng)用類別') plt.ylabel(u'男女分布') plt.xticks(idx+width/2, x, rotation=40) plt.legend() plt.show()


????????輸出如下所示

????????當(dāng)然該包可以繪制更多的圖形,希望讀者自己去學(xué)習(xí)。比如線性回歸:


? ?
????????matplotlib.pyplot是用來畫圖的方法,matplotlib是可視化包。
????????import matplotlib.pyplot as plt

????????繪制散點(diǎn)圖(scatter),橫軸為x,獲取的第1列數(shù)據(jù);縱軸為y,獲取的第2列數(shù)據(jù);c=y_pred對(duì)聚類的預(yù)測結(jié)果畫出散點(diǎn)圖,marker='o'說明用點(diǎn)表示圖形。
????????plt.scatter(x, y, c=y_pred, marker='o')?

????????表示圖形的標(biāo)題為Kmeans-heightweight Data。
????????plt.title("Kmeans-Basketball Data")

????????表示圖形x軸的標(biāo)題。
????????plt.xlabel("assists_per_minute")

????????表示圖形y軸的標(biāo)題。
????????plt.ylabel("points_per_minute")?

????????設(shè)置右上角圖例。
????????plt.legend(["Rank"])?

????????表示顯示圖形。
????????plt.show()
?————————————————?
版權(quán)聲明:本文為CSDN博主「Eastmount」的原創(chuàng)文章,遵循CC 4.0 by-sa版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/eastmount/article/details/53144633

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Python常用扩展包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。