導航:首頁 > 編程語言 > pythonnotes

pythonnotes

發布時間:2024-02-02 11:14:46

python如何在給定的字元串中,統計某個特定子串的數量

代碼如下:【備注】:1. 用str.split(',')只能分隔逗號一種;如果涉及弊戚到多重分隔的話就需要使用re.split(',|:')。2. 原字元串以逗號分隔的,後面有一個或多個字元串,所以re.split(', | ')。3. 執行re.split(r', | ', S)操作之後,列表中會產生大量的'',就需要將filter過濾掉。4. 使用手慶L.count(x) == 1 或者 L.count(x) > 1來保留重復項或,非重復項。5. set(L)則是保留列表中的唯一項,再用list()將其轉換為列表。6. 使用', '.join(L),將列表拼接租薯陵成我們想要的字元串。

❷ Python 中的可視化工具介紹

幾周前,R語言社區經歷了一場關於畫圖工具的討論。對於我們這種外人來說,具體的細節並不重要,但是我們可以將一些有用的觀點運用到 Python 中。討論的重點是 R 語言自帶的繪圖工具 base R 和 Hadley Wickham 開發的繪圖工具 ggplot2 之間的優劣情況。如果你想了解更多細節內容,請閱讀以下幾篇文章:

其中最重要的兩個內容是:

不是所有人都認同第二個觀點,ggplot2確實無法繪制出所有的圖表類型,但是我會利用它來做分析。

以下是 2016 年 4 月寫的關於繪圖工具的概述。出於多方面的原因,繪圖工具的選取更多地取決於個人偏好,因此本文介紹的 Python 繪圖工具也僅代表我的個人使用偏好。

Matplotlib 是一個強大的工具,它是 Pandas' builtin-plotting Seaborn 的基礎。 Matplotlib 能夠繪制許多不同的圖形,還能調用多個級別的許多 API 。我發現 pyplot api 非常好用,你可能用不上 Transforms 或者 artists ,但是如果你有需求的話可以查閱幫助文檔。我將從 pandas seaborn 圖開始介紹,然後介紹如何調用 pyplot API

DataFrame Series 擁有 .plot 的命名空間,其中有許多圖形類別可供選擇(line, hist, scatter, 等等)。 Pandas 對象還提供了額外的用於增強圖形展現效果的數據,如索引變數。
由於 pandas 具有更少的向後兼容的限制,所以它具有更好的美學特性。從這方面來說,我認為 pandas 中的 DataFrame.plot 是一個非常實用的快速探索性分析的工具。

Michael Waskom 所開發的 Seaborn 提供了一個高層次的界面來繪制更吸引人統計圖形。 Seaborn 提供了一個可以快速探索分析數據不同特徵的 API 介面,接下來我們將重點介紹它。

Bokeh 是一款針對瀏覽器開發的可視化工具。
matplotlib 一樣,**Bokeh
** 擁有一系列 API 介面。比如 glpyhs 介面,該介面和 matplotllib 中的 Artists 介面非常相似,它主要用於繪制環形圖、方形圖和多邊形圖等。最近 Bokeh 又開放了一個新的圖形介面,該介面主要用於處理詞典數據或 DataFrame 數據,並用於繪制罐頭圖。

以下是一些本文沒有提到的可視化工具:

我們將利用 ggplot2 中的 diamonds 數據集,你可以在 Vincent Arelbundock's RDatasets 中找到它(pd.read_csv(' http://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv') ),此外我們還需要檢測是否已經安裝 feather

[站外圖片上傳中……(4)]

Bokeh 提供了兩個 API,一個是低級的 glyph API,另一個是高級的 Charts API。

[站外圖片上傳中……(5)]

還不是很清楚我們應該在啥時候利用 Bokeh 來進行探索性分析,不過它的互動式功能可以激發我的興趣。就個人而言,由於習慣問題我平時仍然一直使用 matplotlib 來繪圖,我還無法完全切換到 Bokeh 中。

我非常喜歡 Bokeh 的儀表盤功能和 bokeh server 的 webapps。

[站外圖片上傳中……(6)]

[站外圖片上傳中……(7)]

[站外圖片上傳中……(8)]

matplotlib 並不局限於處理 DataFrame 數據,它支持所有使用 getitem 作為鍵值的數據類型。

[站外圖片上傳中……(9)]

[站外圖片上傳中……(10)]

我們從列變數的名字中提取出軸標簽,利用 Pandas 可以更加便捷地繪制一系列共享 x 軸數據的圖形。

[站外圖片上傳中……(11)]

[站外圖片上傳中……(12)]

本文中的剩餘部分將重點介紹 seaborn和為什麼我認為它是探索性分析的強大工具。

我強烈建議你閱讀 Seaborn 的 introctory notes,這上面介紹了 seaborn 的設計邏輯和應用領域。

我們可以通過一個穩定的且易懂的 API 介面來調用 Seaborn。

事實上,seaborn 是基於 matplotlib 開發的,這意味著如果你熟悉 pyplot API的話,那麼你可以很容易地掌握 seaborn。

大多數 seaborn 繪圖函數的參數都由 x, y, hue, 和 data 構成(並不是所有的參數都是必須的)。如果你處理的對象是 DataFrame,那麼你可以直接將列變數的名稱和數據集的名稱一同傳遞到繪圖函數中。

[站外圖片上傳中……(13)]

[站外圖片上傳中……(14)]

[站外圖片上傳中……(15)]

[站外圖片上傳中……(16)]

我們可以很輕易地探究兩個變數之間的關系:

[站外圖片上傳中……(17)]

[站外圖片上傳中……(18)]

或者一次探究多個變數之間的關系:

[站外圖片上傳中……(19)]

[站外圖片上傳中……(20)]

pariplot 是 PairGrid 的一個包裝函數,它提供了 seaborn 一個重要的抽象功能——Grid。Seaborn 的 Grid 將 matplotlib 中Figure 和數據集中的變數聯系起來了。

我們有兩種方式可以和 grids 進行交互操作。其一,seaborn 提供了類似於 pairplot 的包裝函數,它提前設置了許多常見任務的參數;其二,如果你需要更多的自定義選項,那麼你可以直接利用 Grid 方法。

[站外圖片上傳中……(21)]
[站外圖片上傳中……(22)]

[站外圖片上傳中……(23)]
34312 rows × 7 columns

[站外圖片上傳中……(24)]
[站外圖片上傳中……(25)]

FaceGrid 可以通過控制分面變數來生成 Grid圖形,其中PairGrid是它的一個特例。接下來的案例中,我們將以數據集中的 cut 變數為分面變數來繪制圖像:
[站外圖片上傳中……(26)]

[站外圖片上傳中……(27)]
最後一個案例展示了如何將 seaborn 和 matplotlib 結合起來。g.axes是matplotlib.Axes的一個數組,g.fig是matplotlib.Figure的一個特例。這是使用 seaborn 時常見的一個模式:利用 seaborn 的方法來繪制圖像,然後再利用 matplotlib 來調整細節部分。

我認為 seaborn 之所以吸引人是因為它的繪圖語法具有很強的靈活性。你不會被作者所設定的圖表類型所局限住,你可以根據自己的需要創建新的圖表。
[站外圖片上傳中……(28)]

[站外圖片上傳中……(29)]

[站外圖片上傳中……(30)]

[站外圖片上傳中……(31)]

本來,我打算準備更多的例子來介紹 seaborn,但是我會將相關鏈接分享給大家。Seaborn 的說明文檔寫的非常詳細。

最後,我們將結合 scikit-learn 來介紹如何利用 GridSearch 來尋找最佳參數。
[站外圖片上傳中……(32)]

[站外圖片上傳中……(33)]

[站外圖片上傳中……(34)]

原文鏈接: http://tomaugspurger.github.io/modern-6-visualization.html

譯者:Fibears

❸ python2和python3的區別,轉換及共存

python2和python3的區別

1.性能

Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間,在字元串和整形操作上可以取得很好的優化結果。

Py3.1性能比Py2.5慢15%,還有很大的提升空間。

2.編碼

Py3.X源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>> 中國 = 'china'
>>>print(中國)
china

3. 語法

1)去除了<>,全部改用!=

在Python 2里,為了得到一個任意對象的字元串表示,有一種把對象包裝在反引號里(比如`x`)的特殊語法。在Python 3里,這種能力仍然存在,但是你不能再使用反引號獲得這種字元串表示了。你需要使用全局函數repr()。

Notes

Python 2

Python 3

`x` repr(x)

`'PapayaWhip' + `2`` repr('PapayaWhip'+repr(2))

Note:x可以是任何東西—一個類,函數,模塊,基本數據類型,等等。repr()函數可以使用任何類型的參數。

2)去除``,全部改用repr()

3)關鍵詞加入as 和with,還有True,False,None

4)整型除法返回浮點數,要得到整型結果,請使用//

由於人們常常會忽視Python 3在整數除法上的改動(寫錯了也不會觸發Syntax Error),所以在移植代碼或在Python 2中執行Python 3的代碼時,需要特別注意這個改動。

所以,我還是會在Python 3的腳本中嘗試用float(3)/2或 3/2.0代替3/2,以此來避免代碼在Python 2環境下可能導致的錯誤(或與之相反,在Python 2腳本中用from __future__ import division來使用Python 3的除法)。

Python 2

print'3/2=',3/2print'3//2=',3//2print'3/2.0=',3/2.0print'3//2.0=',3//2.0
3/2=13//2=13/2.0=1.53//2.0=1.0

默認,如果兩個操作數都是整數,Python 2 自動執行整型計算。

Python 3

print('3/2=',3/2)print('3//2=',3//2)print('3/2.0=',3/2.0)print('3//2.0=',3//2.0)
3/2=1.53//2=13/2.0=1.53//2.0=1.0

Note: 需要注意的是「雙劃線」(//)操作符將一直執行整除,而不管操作數的類型,這就是為什麼 5.0//2.0 值為 2.0。Python 3 中,/ 操作符是做浮點除法,而 // 是做整除(即商沒有餘數,比如 10 // 3 其結果就為 3,余數會被截除掉,而 (-7) // 3 的結果卻是 -3。這個演算法與其它很多編程語言不一樣,需要注意,它們的整除運算會向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一樣。

5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全局)變數

6)print

去除print語句,加入print()函數實現相同的功能。同樣的還有 exec語句,已經改為exec()函數

在Python 2里,print是一個語句。無論你想輸出什麼,只要將它們放在print關鍵字後邊就可以。

Python 3里,print()是一個函數。就像其他的函數一樣,print()需要你將想要輸出的東西作為參數傳給它。

例如:
2.X: print "The answer is", 2*2
3.X: print("The answer is", 2*2)
2.X: print x, # 使用逗號結尾禁止換行
3.X: print(x, end=" ") # 使用空格代替換行

在Python 2里,如果你使用一個逗號(,)作為print語句的結尾,它將會用空格分隔輸出的結果,然後在輸出一個尾隨的空格(trailing space),而不輸出回車(carriage return)。在Python 3里,通過把end=' '作為一個關鍵字參數傳給print()可以實現同樣的效果。參數end的默認值為' ',所以通過重新指定end參數的值,可以取消在末尾輸出回車符。
2.X: print # 輸出新行
3.X: print() # 輸出新行
2.X: print >>sys.stderr, "fatal error"
3.X: print("fatal error", file=sys.stderr)

在Python 2里,你可以通過使用>>pipe_name語法,把輸出重定向到一個管道,比如sys.stderr。在Python 3里,你可以通過將管道作為關鍵字參數file的值傳遞給print()來完成同樣的功能。參數file的默認值為std.stdout,所以重新指定它的值將會使print()輸出到一個另外一個管道。
2.X: print (x, y) # 輸出repr((x, y))
3.X: print((x, y)) # 不同於print(x, y)!

exec語句

exec()函數使用一個包含任意Python代碼的字元串作為參數,然後就像執行語句或者表達式一樣執行它。exec()跟eval()是相似的,但是exec()更加強大並更具有技巧性。eval()函數只能執行單獨一條表達式,但是exec()能夠執行多條語句,導入(import),函數聲明—實際上整個Python程序的字元串表示也可以。

Notes

Python 2

Python 3

execcodeString exec(codeString)

execcodeStringina_global_namespace exec(codeString,a_global_namespace)

execcodeStringina_global_namespace,a_local_namespace exec(codeString,a_global_namespace,a_local_namespace)

❹ 可以讓你快速用Python進行數據分析的10個小技巧

一些小提示和小技巧可能是非常有用的,特別是在編程領域。有時候使用一點點黑客技術,既可以節省時間,還可能挽救「生命」。

一個小小的快捷方式或附加組件有時真是天賜之物,並且可以成為真正的生產力助推器。所以,這里有一些小提示和小技巧,有些可能是新的,但我相信在下一個數據分析項目中會讓你非常方便。

Pandas中數據框數據的Profiling過程

Profiling(分析器)是一個幫助我們理解數據的過程,而Pandas Profiling是一個Python包,它可以簡單快速地對Pandas 的數據框數據進行 探索 性數據分析。

Pandas中df.describe()和df.info()函數可以實現EDA過程第一步。但是,它們只提供了對數據非常基本的概述,對於大型數據集沒有太大幫助。 而Pandas中的Profiling功能簡單通過一行代碼就能顯示大量信息,且在互動式HTML報告中也是如此。

對於給定的數據集,Pandas中的profiling包計算了以下統計信息:

由Pandas Profiling包計算出的統計信息包括直方圖、眾數、相關系數、分位數、描述統計量、其他信息——類型、單一變數值、缺失值等。

安裝

用pip安裝或者用conda安裝

pip install pandas-profiling

conda install -c anaconda pandas-profiling

用法

下面代碼是用很久以前的泰坦尼克數據集來演示多功能Python分析器的結果。

#importing the necessary packages

import pandas as pd

import pandas_profiling

df = pd.read_csv('titanic/train.csv')

pandas_profiling.ProfileReport(df)

一行代碼就能實現在Jupyter Notebook中顯示完整的數據分析報告,該報告非常詳細,且包含了必要的圖表信息。

還可以使用以下代碼將報告導出到互動式HTML文件中。

profile = pandas_profiling.ProfileReport(df)

profile.to_file(outputfile="Titanic data profiling.html")

Pandas實現互動式作圖

Pandas有一個內置的.plot()函數作為DataFrame類的一部分。但是,使用此功能呈現的可視化不是互動式的,這使得它沒那麼吸引人。同樣,使用pandas.DataFrame.plot()函數繪制圖表也不能實現交互。 如果我們需要在不對代碼進行重大修改的情況下用Pandas繪制互動式圖表怎麼辦呢?這個時候就可以用Cufflinks庫來實現。

Cufflinks庫可以將有強大功能的plotly和擁有靈活性的pandas結合在一起,非常便於繪圖。下面就來看在pandas中如何安裝和使用Cufflinks庫。

安裝

pip install plotly

# Plotly is a pre-requisite before installing cufflinks

pip install cufflinks

用法

#importing Pandas

import pandas as pd

#importing plotly and cufflinks in offline mode

import cufflinks as cf

import plotly.offline

cf.go_offline()

cf.set_config_file(offline=False, world_readable=True)

是時候展示泰坦尼克號數據集的魔力了。

df.iplot()

df.iplot() vs df.plot()

右側的可視化顯示了靜態圖表,而左側圖表是互動式的,更詳細,並且所有這些在語法上都沒有任何重大更改。

Magic命令

Magic命令是Jupyter notebook中的一組便捷功能,旨在解決標准數據分析中的一些常見問題。使用命令%lsmagic可以看到所有的可用命令。

所有可用的Magic命令列表

Magic命令有兩種:行magic命令(line magics),以單個%字元為前綴,在單行輸入操作;單元magic命令(cell magics),以雙%%字元為前綴,可以在多行輸入操作。如果設置為1,則不用鍵入%即可調用Magic函數。

接下來看一些在常見數據分析任務中可能用到的命令:

% pastebin

%pastebin將代碼上傳到Pastebin並返回url。Pastebin是一個在線內容託管服務,可以存儲純文本,如源代碼片段,然後通過url可以與其他人共享。事實上,Github gist也類似於pastebin,只是有版本控制。

在file.py文件中寫一個包含以下內容的python腳本,並試著運行看看結果。

#file.py

def foo(x):

return x

在Jupyter Notebook中使用%pastebin生成一個pastebin url。

%matplotlib notebook

函數用於在Jupyter notebook中呈現靜態matplotlib圖。用notebook替換inline,可以輕松獲得可縮放和可調整大小的繪圖。但記得這個函數要在導入matplotlib庫之前調用。

%run

用%run函數在notebook中運行一個python腳本試試。

%run file.py

%%writefile

%% writefile是將單元格內容寫入文件中。以下代碼將腳本寫入名為foo.py的文件並保存在當前目錄中。

%%latex

%%latex函數將單元格內容以LaTeX形式呈現。此函數對於在單元格中編寫數學公式和方程很有用。

查找並解決錯誤

互動式調試器也是一個神奇的功能,我把它單獨定義了一類。如果在運行代碼單元時出現異常,請在新行中鍵入%debug並運行它。 這將打開一個互動式調試環境,它能直接定位到發生異常的位置。還可以檢查程序中分配的變數值,並在此處執行操作。退出調試器單擊q即可。

Printing也有小技巧

如果您想生成美觀的數據結構,pprint是首選。它在列印字典數據或JSON數據時特別有用。接下來看一個使用print和pprint來顯示輸出的示例。

讓你的筆記脫穎而出

我們可以在您的Jupyter notebook中使用警示框/注釋框來突出顯示重要內容或其他需要突出的內容。注釋的顏色取決於指定的警報類型。只需在需要突出顯示的單元格中添加以下任一代碼或所有代碼即可。

藍色警示框:信息提示

<p class="alert alert-block alert-info">

<b>Tip:</b> Use blue boxes (alert-info) for tips and notes.

If it』s a note, you don』t have to include the word 「Note」.

</p>

黃色警示框:警告

<p class="alert alert-block alert-warning">

<b>Example:</b> Yellow Boxes are generally used to include additional examples or mathematical formulas.

</p>

綠色警示框:成功

<p class="alert alert-block alert-success">

Use green box only when necessary like to display links to related content.

</p>

紅色警示框:高危

<p class="alert alert-block alert-danger">

It is good to avoid red boxes but can be used to alert users to not delete some important part of code etc.

</p>

列印單元格所有代碼的輸出結果

假如有一個Jupyter Notebook的單元格,其中包含以下代碼行:

In [1]: 10+5

11+6

Out [1]: 17

單元格的正常屬性是只列印最後一個輸出,而對於其他輸出,我們需要添加print()函數。然而通過在notebook頂部添加以下代碼段可以一次列印所有輸出。

添加代碼後所有的輸出結果就會一個接一個地列印出來。

In [1]: 10+5

11+6

12+7

Out [1]: 15

Out [1]: 17

Out [1]: 19

恢復原始設置:

InteractiveShell.ast_node_interactivity = "last_expr"

使用'i'選項運行python腳本

從命令行運行python腳本的典型方法是:python hello.py。但是,如果在運行相同的腳本時添加-i,例如python -i hello.py,就能提供更多優勢。接下來看看結果如何。

首先,即使程序結束,python也不會退出解釋器。因此,我們可以檢查變數的值和程序中定義的函數的正確性。

其次,我們可以輕松地調用python調試器,因為我們仍然在解釋器中:

import pdb

pdb.pm()

這能定位異常發生的位置,然後我們可以處理異常代碼。

自動評論代碼

Ctrl / Cmd + /自動注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。

刪除容易恢復難

你有沒有意外刪除過Jupyter notebook中的單元格?如果答案是肯定的,那麼可以掌握這個撤消刪除操作的快捷方式。

如果您刪除了單元格的內容,可以通過按CTRL / CMD + Z輕松恢復它。

如果需要恢復整個已刪除的單元格,請按ESC + Z或EDIT>撤消刪除單元格。

結論

在本文中,我列出了使用Python和Jupyter notebook時收集的一些小提示。我相信它們會對你有用,能讓你有所收獲,從而實現輕松編碼!

閱讀全文

與pythonnotes相關的資料

熱點內容
往復式壓縮氣缸過熱的原因 瀏覽:839
4u伺服器機箱怎麼賣 瀏覽:461
如何自學葡萄牙語app 瀏覽:456
擺來擺去的游戲解壓 瀏覽:270
centos注銷命令 瀏覽:859
vue多端編譯 瀏覽:753
程序員qq表白代碼編輯 瀏覽:893
聯想伺服器怎麼進後台 瀏覽:114
安卓定製rom怎麼刷 瀏覽:539
三層交換機的配置命令 瀏覽:110
49演算法公式 瀏覽:790
求最小生成樹演算法代碼及運行圖片 瀏覽:930
python掃雷計數 瀏覽:879
什麼安卓手機品牌最保值 瀏覽:846
編程貓買房子 瀏覽:134
c語言系列編程 瀏覽:742
符合國標加密標准技術 瀏覽:497
加密狗介面會壞嗎 瀏覽:625
javame開發 瀏覽:380
python3偽裝瀏覽器 瀏覽:242