在Python中,pandas是基于NumPy數(shù)組構(gòu)建的,使數(shù)據(jù)預(yù)處理、清洗、分析工作變得更快更簡單。pandas是專門為處理表格和混雜數(shù)據(jù)設(shè)計的,而NumPy更適合處理統(tǒng)一的數(shù)值數(shù)組數(shù)據(jù)。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站制作、洛江網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、洛江網(wǎng)絡(luò)營銷、洛江企業(yè)策劃、洛江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供洛江建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
使用下面格式約定,引入pandas包:
pandas有兩個主要數(shù)據(jù)結(jié)構(gòu):Series和DataFrame。
Series是一種類似于一維數(shù)組的對象,它由 一組數(shù)據(jù) (各種NumPy數(shù)據(jù)類型)以及一組與之相關(guān)的 數(shù)據(jù)標簽(即索引) 組成,即index和values兩部分,可以通過索引的方式選取Series中的單個或一組值。
pd.Series(list,index=[ ]) ,第二個參數(shù)是Series中數(shù)據(jù)的索引,可以省略。
Series類型索引、切片、運算的操作類似于ndarray,同樣的類似Python字典類型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之間的主要區(qū)別在于Series之間的操作會根據(jù)索引自動對齊數(shù)據(jù)。
DataFrame是一個表格型的數(shù)據(jù)類型,每列值類型可以不同,是最常用的pandas對象。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。DataFrame中的數(shù)據(jù)是以一個或多個二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index為指定的列、行索引,并按照順序排列。
如果創(chuàng)建時指定了columns和index索引,則按照索引順序排列,并且如果傳入的列在數(shù)據(jù)中找不到,就會在結(jié)果中產(chǎn)生缺失值:
數(shù)據(jù)索引 :Series和DataFrame的索引是Index類型,Index對象是不可修改,可通過索引值或索引標簽獲取目標數(shù)據(jù),也可通過索引使序列或數(shù)據(jù)框的計算、操作實現(xiàn)自動化對齊。索引類型index的常用方法:
重新索引 :能夠改變、重排Series和DataFrame索引,會創(chuàng)建一個新對象,如果某個索引值當前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, copy ) :index/columns為新的行列自定義索引;fill_value為用于填充缺失位置的值;method為填充方法,ffill當前值向前填充,bfill向后填充;limit為最大填充量;copy 默認True,生成新的對象,F(xiàn)alse時,新舊相等不復(fù)制。
刪除指定索引 :默認返回的是一個新對象。
.drop() :能夠刪除Series和DataFrame指定行或列索引。
刪除一行或者一列時,用單引號指定索引,刪除多行時用列表指定索引。
如果刪除的是列索引,需要增加axis=1或axis='columns'作為參數(shù)。
增加inplace=True作為參數(shù),可以就地修改對象,不會返回新的對象。
在pandas中,有多個方法可以選取和重新組合數(shù)據(jù)。對于DataFrame,表5-4進行了總結(jié)
適用于Series和DataFrame的基本統(tǒng)計分析函數(shù) :傳入axis='columns'或axis=1將會按行進行運算。
.describe() :針對各列的多個統(tǒng)計匯總,用統(tǒng)計學(xué)指標快速描述數(shù)據(jù)的概要。
.sum() :計算各列數(shù)據(jù)的和
.count() :非NaN值的數(shù)量
.mean( )/.median() :計算數(shù)據(jù)的算術(shù)平均值、算術(shù)中位數(shù)
.var()/.std() :計算數(shù)據(jù)的方差、標準差
.corr()/.cov() :計算相關(guān)系數(shù)矩陣、協(xié)方差矩陣,是通過參數(shù)對計算出來的。Series的corr方法用于計算兩個Series中重疊的、非NA的、按索引對齊的值的相關(guān)系數(shù)。DataFrame的corr和cov方法將以DataFrame的形式分別返回完整的相關(guān)系數(shù)或協(xié)方差矩陣。
.corrwith() :利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關(guān)系數(shù)。傳入一個Series將會返回一個相關(guān)系數(shù)值Series(針對各列進行計算),傳入一個DataFrame則會計算按列名配對的相關(guān)系數(shù)。
.min()/.max() :計算數(shù)據(jù)的最小值、最大值
.diff() :計算一階差分,對時間序列很有效
.mode() :計算眾數(shù),返回頻數(shù)最高的那(幾)個
.mean() :計算均值
.quantile() :計算分位數(shù)(0到1)
.isin() :用于判斷矢量化集合的成員資格,可用于過濾Series中或DataFrame列中數(shù)據(jù)的子集
適用于Series的基本統(tǒng)計分析函數(shù),DataFrame[列名]返回的是一個Series類型。
.unique() :返回一個Series中的唯一值組成的數(shù)組。
.value_counts() :計算一個Series中各值出現(xiàn)的頻率。
.argmin()/.argmax() :計算數(shù)據(jù)最大值、最小值所在位置的索引位置(自動索引)
.idxmin()/.idxmax() :計算數(shù)據(jù)最大值、最小值所在位置的索引(自定義索引)
pandas提供了一些用于將表格型數(shù)據(jù)讀取為DataFrame對象的函數(shù)。下表對它們進行了總結(jié),其中read_csv()、read_table()、to_csv()是用得最多的。
在數(shù)據(jù)分析和建模的過程中,相當多的時間要用在數(shù)據(jù)準備上:加載、清理、轉(zhuǎn)換以及重塑。
在許多數(shù)據(jù)分析工作中,缺失數(shù)據(jù)是經(jīng)常發(fā)生的。對于數(shù)值數(shù)據(jù),pandas使用浮點值NaN(np.nan)表示缺失數(shù)據(jù),也可將缺失值表示為NA(Python內(nèi)置的None值)。
替換值
.replace(old, new) :用新的數(shù)據(jù)替換老的數(shù)據(jù),如果希望一次性替換多個值,old和new可以是列表。默認會返回一個新的對象,傳入inplace=True可以對現(xiàn)有對象進行就地修改。
刪除重復(fù)數(shù)據(jù)
利用函數(shù)或字典進行數(shù)據(jù)轉(zhuǎn)換
df.head():查詢數(shù)據(jù)的前五行
df.tail():查詢數(shù)據(jù)的末尾5行
pandas.cut()
pandas.qcut() 基于分位數(shù)的離散化函數(shù)?;谥然蚧跇颖痉治粩?shù)將變量離散化為等大小桶。
pandas.date_range() 返回一個時間索引
df.apply() 沿相應(yīng)軸應(yīng)用函數(shù)
Series.value_counts() 返回不同數(shù)據(jù)的計數(shù)值
df.aggregate()
df.reset_index() 重新設(shè)置index,參數(shù)drop = True時會丟棄原來的索引,設(shè)置新的從0開始的索引。常與groupby()一起用
numpy.zeros()
python 離散型數(shù)據(jù)量化的方法可以采用變量轉(zhuǎn)換方法來解決,分類數(shù)據(jù)和連續(xù)數(shù)據(jù)需要參與模型計算,并且通常會轉(zhuǎn)換為數(shù)值數(shù)據(jù)。
當然,某些算法允許這些數(shù)據(jù)直接參與計算,例如分類算法中的決策樹和關(guān)聯(lián)規(guī)則。將非數(shù)字數(shù)據(jù)轉(zhuǎn)換為數(shù)字數(shù)據(jù)的最佳方法是將所有類別或有序變量的范圍從一列多值形式轉(zhuǎn)換為僅包含真值的多列??梢詫rue值傳遞給True,F(xiàn)alse或0、1。這種符號轉(zhuǎn)換方法有時稱為真值轉(zhuǎn)換。
具體代碼是:
import pandas as pddata = [.
['yellow', 'S', 10.1, 'class1'].
['red', 'M', 13.5, 'class1'].
['red', 'M', 15.1, 'class2'].
['blue', 'XL', 15.3, 'class2'.
df = pd.DataFrame(.
data,columns=['color', 'size', 'prize', 'class'].
python 離散型數(shù)據(jù)用連續(xù)數(shù)據(jù)處理的方法是:
1、等寬法:若數(shù)據(jù)區(qū)間為0~20,設(shè)置箱子個數(shù)為4個,則等寬法會將數(shù)據(jù)裝入4個箱子:[0,5],(5,10],(10,15],(15,20],并且可以設(shè)置每個箱子的名字,如1、2、3、4。
等寬法缺點是分箱結(jié)果會受到最值影響。并且需要人為指定箱子個數(shù),比較依賴于經(jīng)驗。分箱結(jié)果會直接影響后續(xù)分類、聚類的結(jié)果。
2、等頻法:等頻法是指將一組數(shù)據(jù)分解成n個部分后,每個部分的記錄數(shù)量是一樣多的。等頻法常用pandas庫中的qcut()函數(shù)進行處理。
離散型很簡單,一個一個列出來就可以了
連續(xù)型的話,也不難,看具體的吧
比如兩個連續(xù)型X、Y
現(xiàn)在條件可以任意給,比如知道X、Y的密度函數(shù),那直接用xy乘以聯(lián)合密度函數(shù)的定積分就可以了。
R編程語言已經(jīng)成為統(tǒng)計分析中的事實標準。但在這篇文章中,我將告訴你在Python中實現(xiàn)統(tǒng)計學(xué)概念會是如此容易。我要使用Python實現(xiàn)一些離散和連續(xù)的概率分布。雖然我不會討論這些分布的數(shù)學(xué)細節(jié),但我會以鏈接的方式給你一些學(xué)習這些統(tǒng)計學(xué)概念的好資料。在討論這些概率分布之前,我想簡單說說什么是隨機變量(random variable)。隨機變量是對一次試驗結(jié)果的量化。
舉個例子,一個表示拋硬幣結(jié)果的隨機變量可以表示成
Python
1
2
X = {1 如果正面朝上,
2 如果反面朝上}
隨機變量是一個變量,它取值于一組可能的值(離散或連續(xù)的),并服從某種隨機性。隨機變量的每個可能取值的都與一個概率相關(guān)聯(lián)。隨機變量的所有可能取值和與之相關(guān)聯(lián)的概率就被稱為概率分布(probability distributrion)。
我鼓勵大家仔細研究一下scipy.stats模塊。
概率分布有兩種類型:離散(discrete)概率分布和連續(xù)(continuous)概率分布。
離散概率分布也稱為概率質(zhì)量函數(shù)(probability mass function)。離散概率分布的例子有伯努利分布(Bernoulli distribution)、二項分布(binomial distribution)、泊松分布(Poisson distribution)和幾何分布(geometric distribution)等。
連續(xù)概率分布也稱為概率密度函數(shù)(probability density function),它們是具有連續(xù)取值(例如一條實線上的值)的函數(shù)。正態(tài)分布(normal distribution)、指數(shù)分布(exponential distribution)和β分布(beta distribution)等都屬于連續(xù)概率分布。
若想了解更多關(guān)于離散和連續(xù)隨機變量的知識,你可以觀看可汗學(xué)院關(guān)于概率分布的視頻。
二項分布(Binomial Distribution)
服從二項分布的隨機變量X表示在n個獨立的是/非試驗中成功的次數(shù),其中每次試驗的成功概率為p。
E(X) =?np, Var(X) =?np(1?p)
如果你想知道每個函數(shù)的原理,你可以在IPython筆記本中使用help file命令。?E(X)表示分布的期望或平均值。
鍵入stats.binom?了解二項分布函數(shù)binom的更多信息。
二項分布的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?
假設(shè)在該試驗中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結(jié)果為k = np.arange(0,11):你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf計算每次觀測的概率質(zhì)量函數(shù)。它返回一個含有11個元素的列表(list),這些元素表示與每個觀測相關(guān)聯(lián)的概率值。
您可以使用.rvs函數(shù)模擬一個二項隨機變量,其中參數(shù)size指定你要進行模擬的次數(shù)。我讓Python返回10000個參數(shù)為n和p的二項式隨機變量。我將輸出這些隨機變量的平均值和標準差,然后畫出所有的隨機變量的直方圖。
泊松分布(Poisson Distribution)
一個服從泊松分布的隨機變量X,表示在具有比率參數(shù)(rate parameter)λ的一段固定時間間隔內(nèi),事件發(fā)生的次數(shù)。參數(shù)λ告訴你該事件發(fā)生的比率。隨機變量X的平均值和方差都是λ。
E(X) =?λ, Var(X) =?λ
泊松分布的例子:已知某路口發(fā)生事故的比率是每天2次,那么在此處一天內(nèi)發(fā)生4次事故的概率是多少?
讓我們考慮這個平均每天發(fā)生2起事故的例子。泊松分布的實現(xiàn)和二項分布有些類似,在泊松分布中我們需要指定比率參數(shù)。泊松分布的輸出是一個數(shù)列,包含了發(fā)生0次、1次、2次,直到10次事故的概率。我用結(jié)果生成了以下圖片。
你可以看到,事故次數(shù)的峰值在均值附近。平均來說,你可以預(yù)計事件發(fā)生的次數(shù)為λ。嘗試不同的λ和n的值,然后看看分布的形狀是怎么變化的。
現(xiàn)在我來模擬1000個服從泊松分布的隨機變量。
正態(tài)分布(Normal Distribution)
正態(tài)分布是一種連續(xù)分布,其函數(shù)可以在實線上的任何地方取值。正態(tài)分布由兩個參數(shù)描述:分布的平均值μ和方差σ2?。
E(X) =?μ, Var(X) =?σ2
正態(tài)分布的取值可以從負無窮到正無窮。你可以注意到,我用stats.norm.pdf得到正態(tài)分布的概率密度函數(shù)。
β分布(Beta Distribution)
β分布是一個取值在?[0, 1]?之間的連續(xù)分布,它由兩個形態(tài)參數(shù)α和β的取值所刻畫。
β分布的形狀取決于α和β的值。貝葉斯分析中大量使用了β分布。
當你將參數(shù)α和β都設(shè)置為1時,該分布又被稱為均勻分布(uniform distribution)。嘗試不同的α和β取值,看看分布的形狀是如何變化的。
指數(shù)分布(Exponential Distribution)
指數(shù)分布是一種連續(xù)概率分布,用于表示獨立隨機事件發(fā)生的時間間隔。比如旅客進入機場的時間間隔、打進客服中心電話的時間間隔、中文維基百科新條目出現(xiàn)的時間間隔等等。
我將參數(shù)λ設(shè)置為0.5,并將x的取值范圍設(shè)置為 $[0, 15]$ 。
接著,我在指數(shù)分布下模擬1000個隨機變量。scale參數(shù)表示λ的倒數(shù)。函數(shù)np.std中,參數(shù)ddof等于標準偏差除以 $n-1$ 的值。
結(jié)語(Conclusion)
概率分布就像蓋房子的藍圖,而隨機變量是對試驗事件的總結(jié)。我建議你去看看哈佛大學(xué)數(shù)據(jù)科學(xué)課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關(guān)于統(tǒng)計模型和分布的全部。
python剔除掉一堆數(shù)據(jù)中離散度比較大的數(shù)據(jù)步驟如下:
1、創(chuàng)建DataFrame:可以使用Pandas的DataFrame()函數(shù)創(chuàng)建一個DataFrame,將數(shù)據(jù)存入DataFrame中。
2、計算每個特征的IQR值:可以使用Pandas的describe()函數(shù),計算每個特征列的四分位數(shù),再計算出每列IQR值。
3、計算每個特征的離散度:可以根據(jù)每列的最小值和最大值,減去其最低四分位數(shù)和最高四分位數(shù),來計算每個特征的離散度。
4、篩選出離散度比較大的數(shù)據(jù):可以根據(jù)不同的閾值,篩選出離散度比較大的數(shù)據(jù),并剔除掉這部分數(shù)據(jù)。
基于文本文檔(Markdown) 設(shè)想好需要的基本需要的表、字段、類型;
使用 Rails Migration 隨著功能的開發(fā)逐步創(chuàng)建表;
隨著細節(jié)功能的開發(fā)、需求,逐步增加字段,刪除字段,或者調(diào)整字段類型;
第一個 Release 的時候清理 Migrations 合并成一個;
隨著后期的改動,逐步增加、修改、刪除字段或表。
基本上我的所有項目都是這么搞的,這和項目是否復(fù)雜無關(guān)。