本文目錄一覽:
可以讓你快速用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”
bTip:/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”
bExample:/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時收集的一些小提示。我相信它們會對你有用,能讓你有所收穫,從而實現輕鬆編碼!
python str與bytes編碼解碼
下面一張圖搞懂編碼、解碼、編碼表之間的關係。
不難看出,它們是一種根據編碼表進行翻譯、映射的過程:
實際上,字符串類型只有encode()方法,沒有decode()方法,而bytes類型只有decode()方法而沒有encode()方法。
二進制格式的數據也常稱為裸數據(raw data),所以str數據經過編碼後得到raw data,raw data解碼後得到的str。
上面說了,編碼是將字符數據轉換成字節數據(raw data),解碼是將字節數據轉換成字符數據。在Python中字符數據也就是字符串,即str類型,字節數據也就是bytes類型或bytearray類型。
編碼時,可以使用字節類型的構造方法bytes()、bytearray()來構造字節,也可以使用str類型的encode()方法來轉換。
解碼時,可以使用str類型的構造方法str()來構造字符串,也可以使用bytes、bytearray()類型的decode()方法。
另外需要注意的是,編碼和解碼的過程中都需要指定編碼表(字符集),默認採用的是utf-8字符集。
例如,使用encode()的方式將str編碼為bytes數據。
使用bytes()和bytearray()將str構造成bytes或bytearray數據,這兩個方法都要求str-byte的過程中給定編碼。
實際上,bytes()、bytearray()這兩個方法構造字節數據的時候還有點複雜,因為可以從多個數據源來構造,比如字符串、整數值、buffer。如何使用這兩個方法構造字節數據,詳細內容參考help(bytes)和help(bytearray)給出的說明,這裡給幾個簡單示例。
構造bytes的方式:
構造bytearray的方式:
解碼是字節序列到str類型的轉換。
例如,使用decode()方法進行解碼”我”字,它的utf-8的編碼對應為”\xe6\x88\x91″:
使用str()進行轉換。
當編碼、解碼的過程使用了不同的(不兼容的)編碼表時,就會出現亂碼。所以,解決亂碼的唯一方式是指定對應的編碼表進行編碼、解碼。
例如,使用utf-8編碼”我”字,得到一個bytes序列,然後使用gbk解碼這個bytes序列。
這裡報錯了,因為utf-8的字節序列里有gbk無法解碼的字節。如果使用文本編輯器一樣的工具去顯化這個過程,得到的將是亂碼字符。
原文地址:
Python 插曲:編碼風格是如何使用的呢?
插曲:編碼風格
此時你已經可以寫一些更長更複雜的 Python 程序,是時候討論一下 編碼風格 了。大多數語言可以寫(或者更明白的說, 格式化 )作幾種不同的風格。有些比其它的更好讀。讓你的代碼對別人更易讀是個好想法,養成良好的編碼風格對此很有幫助。
對於 Python,PEP 8 引入了大多數項目遵循的風格指導。它給出了一個高度可讀,視覺友好的編碼風格。每個 Python 開發者都應該讀一下,大多數要點都會對你有幫助:
使用 4 空格縮進,而非 TAB
在小縮進(可以嵌套更深)和大縮進(更易讀)之間,4空格是一個很好的折中。TAB 引發了一些混亂,最好棄用
折行以確保其不會超過 79 個字符
這有助於小顯示器用戶閱讀,也可以讓大顯示器能並排顯示幾個代碼文件
使用空行分隔函數和類,以及函數中的大塊代碼
可能的話,注釋獨佔一行
使用文檔字符串
把空格放到操作符兩邊,以及逗號後面,但是括號里側不加空格:a = f(1, 2) + g(3, 4)
統一函數和類命名
推薦類名用 駝峰命名, 函數和方法名用 小寫_和_下劃線。總是用 self 作為方法的第一個參數(關於類和方法的知識詳見 初識類 )
不要使用花哨的編碼,如果你的代碼的目的是要在國際化環境。Python 的默認情況下,UTF-8,甚至普通的 ASCII 總是工作的最好
同樣,也不要使用非 ASCII 字符的標識符,除非是不同語種的會閱讀或者維護代碼。
你寫的Python編碼,別人知道嗎
Python 編碼規範重要性的原因用一句話來概括就是:統一的編碼規範可以提高開發效率。
無論你是 編程者,還是 閱讀者,好的規範能讓你的效率事半功倍,甚至機器在運行時,提高程序運行的效率。今天就帶你盤一盤python的編碼規範。
ps.python的代碼編寫基本上都要遵循PEP8的風格
1、分號
不要在行尾加分號, 也不要用分號將兩條命令放在同一行。
2、命名
module_name, package_name, ClassName, method_name
應該避免的名稱
單字符名稱, 除了計數器和迭代器.
包/模塊名中的連字符(-)
雙下劃線開頭並結尾的名稱(Python保留, 例如__init__)
命名約定
所謂”內部(Internal)”表示僅模塊內可用, 或者, 在類內是保護或私有的.
用單下劃線(_)開頭表示模塊變量或函數是protected的(使用import * from時不會包含).
用雙下劃線(__)開頭的實例變量或方法表示類內私有.
將相關的類和頂級函數放在同一個模塊里. 不像Java, 沒必要限制一個類一個模塊.
對類名使用大寫字母開頭的單詞(如CapWords, 即Pascal風格), 但是模塊名應該用小寫加下劃線的方式(如lower_with_under.py). 儘管已經有很多現存的模塊使用類似於CapWords.py這樣的命名, 但現在已經不鼓勵這樣做, 因為如果模塊名碰巧和類名一致, 這會讓人困擾.
3、行長度
每行不超過80個字符
以下情況除外:
長的導入模塊語句
注釋里的URL
不要使用反斜杠連接行。
Python會將 圓括號, 中括號和花括號中的行隱式的連接起來 , 你可以利用這個特點. 如果需要, 你可以在表達式外圍增加一對額外的圓括號。
推薦:
foo_bar(self, width, height, color=’black’, design=None, x=’foo’,
emphasis=None, highlight=0)
if (width == 0 and height == 0 and
color == ‘red’ and emphasis == ‘strong’):
如果一個文本字符串在一行放不下, 可以使用圓括號來實現隱式行連接:
x = (‘這是一個非常長非常長非常長非常長 ‘
‘非常長非常長非常長非常長非常長非常長的字符串’)
4、縮進
用4個空格來縮進代碼
絕對不要用tab, 也不要tab和空格混用. 對於行連接的情況, 你應該要麼垂直對齊換行的元素(見 :ref:`行長度 ` 部分的示例), 或者使用4空格的懸掛式縮進(這時第一行不應該有參數):
5、空行
頂級定義之間空兩行, 方法定義之間空一行
頂級定義之間空兩行, 比如函數或者類定義. 方法定義, 類定義與第一個方法之間, 都應該空一行. 函數或方法中, 某些地方要是你覺得合適, 就空一行.
6、空格
按照標準的排版規範來使用標點兩邊的空格
括號內不要有空格.
按照標準的排版規範來使用標點兩邊的空格
7、類
類應該在其定義下有一個用於描述該類的文檔字符串. 如果你的類有公共屬性(Attributes), 那麼文檔中應該有一個屬性(Attributes)段. 並且應該遵守和函數參數相同的格式.
8、塊注釋和行注釋
最需要寫注釋的是代碼中那些技巧性的部分. 如果你在下次 代碼審查 的時候必須解釋一下, 那麼你應該現在就給它寫注釋. 對於複雜的操作, 應該在其操作開始前寫上若干行注釋. 對於不是一目了然的代碼, 應在其行尾添加註釋.
# We use a weighted dictionary search to find out where i is in
# the array. We extrapolate position based on the largest num
# in the array and the array size and then do binary search to
# get the exact number.
if i (i-1) == 0: # true iff i is a power of 2
為了提高可讀性, 注釋應該至少離開代碼2個空格.
另一方面, 絕不要描述代碼. 假設閱讀代碼的人比你更懂Python, 他只是不知道你的代碼要做什麼.
# BAD COMMENT: Now go through the b array and make sure whenever i occurs
# the next element is i+1
9、字符串
正確示範:
x = a + b
x = ‘%s, %s!’ % (imperative, expletive)
x = ‘{}, {}!’.format(imperative, expletive)
x = ‘name: %s; score: %d’ % (name, n)
x = ‘name: {}; score: {}’.format(name, n)
錯誤示範:
x = ‘%s%s’ % (a, b) # use + in this case
x = ‘{}{}’.format(a, b) # use + in this case
x = imperative + ‘, ‘ + expletive + ‘!’
x = ‘name: ‘ + name + ‘; score: ‘ + str(n)
10、導包
每個導入應該獨佔一行
導入總應該放在文件頂部, 位於模塊注釋和文檔字符串之後, 模塊全局變量和常量之前. 導入應該按照從最通用到最不通用的順序分組:
【總結】
1.命名
2.空白
3.語句
4.注釋
原創文章,作者:XVXA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147873.html