你們要的pandas來了!
"第三更來了"
04
—
《數(shù)據(jù)加載》
處理普通文本
讀取文本:read_csv() ? read_table()
| 方法參數(shù) | 參數(shù)解釋 |
| filepath_or_buffer | 文件路徑 |
| sep | 列之間的分隔符。read_csv()默認(rèn)為為',', read_table()默認(rèn)為'\t' |
| header | 默認(rèn)將首行設(shè)為列名。header=None時(shí)應(yīng)手動(dòng)給出列名。 |
| names | header=None時(shí)設(shè)置此字段使用列表初始化列名。 |
| index_col | 將某一列作為行級(jí)索引。若使用列表,則設(shè)置復(fù)合索引。 |
| usecols | 選擇讀取文件中的某些列。設(shè)置為為相應(yīng)列的索引列表。 |
| skiprows | 跳過行。可選擇跳過前n行或給出跳過的行索引列表 |
| encoding | 編碼。 |
寫入文本:dataFrame.to_csv(
| 方法參數(shù) | 參數(shù)解釋 |
| filepath_or_buffer | 文件路徑 |
| sep | 列之間的分隔符。默認(rèn)為',' |
| na_rep | 寫入文件時(shí)dataFrame中缺失值的內(nèi)容。默認(rèn)空字符串。 |
| columns | 定義需要寫入文件的列。 |
| header | 是否需要寫入表頭。默認(rèn)為True。 |
| index | 會(huì)否需要寫入行索引。默認(rèn)為True。 |
| encoding | 編碼。 |
案例:讀取電信數(shù)據(jù)集。
pd.read_csv('../data/CustomerSurvival.csv',?header=None,?index_col=0)處理JSON
讀取json:read_json()
| 方法參數(shù) | 參數(shù)解釋 |
| filepath_or_buffer | 文件路徑 |
| encoding | 編碼 |
案例:讀取電影評(píng)分?jǐn)?shù)據(jù):
pd.read_json('../data/ratings.json')寫入json:to_json()
| 方法參數(shù) | 參數(shù)解釋 |
| filepath_or_buffer | 文件路徑;若設(shè)置為None,則返回json字符串 |
| orient | 設(shè)置面向輸出格式:['records', 'index', 'columns', 'values'] |
案例:
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}df = pd.DataFrame(data, index=['s1','s2','s3','s4'])df.to_json(orient='records')
其他文件讀取方法參見:https://www.pypandas.cn/docs/user_guide/io.html
05
—
《數(shù)值型描述統(tǒng)計(jì)》
算數(shù)平均值
$S = [s_1, s_2, ..., s_n] $
樣本中的每個(gè)值都是真值與誤差的和。
$mean = \frac{(s_1 + s_2 + ... + s_n) }{n}$
算數(shù)平均值表示對(duì)真值的無偏估計(jì)。
m = np.mean(array)m = array.mean()m = df.mean(axis=0)
案例:針對(duì)電影評(píng)分?jǐn)?shù)據(jù)做均值分析:
mean = ratings['John Carson'].mean()mean = np.mean(ratings['John Carson'])means = ratings.mean(axis=1)
加權(quán)平均值
求平均值時(shí),考慮不同樣本的重要性,可以為不同的樣本賦予不同的權(quán)重。
樣本:$S = [s_1, s_2, s_3 ... s_n]$
權(quán)重:$W =[w_1, w_2, w_3 ... w_n]$
加權(quán)平均值:
代碼實(shí)現(xiàn):
a = np.average(array, weights=volumes)
案例:自定義權(quán)重,求加權(quán)平均。
# 加權(quán)均值w = np.array([3,1,1,1,1,1,1])np.average(ratings.loc['Inception'], weights=w)mask = ~pd.isna(ratings.loc['Inception'])np.average(ratings.loc['Inception'][mask], weights=w[mask])
最值
np.max() / np.min() / np.ptp(): 返回一個(gè)數(shù)組中最大值/最小值/極差(最大值減最小值)
import numpy as np# 產(chǎn)生9個(gè)介于[10, 100)區(qū)間的隨機(jī)數(shù)a = np.random.randint(10, 100, 9)print(a)print(np.max(a), np.min(a), np.ptp(a))
np.argmax() np.argmin(): 返回一個(gè)數(shù)組中最大/最小元素的下標(biāo)
print(np.argmax(a), np.argmin(a))print(series.idxmax(), series.idxmin())print(dataframe.idxmax(),?dataframe.idxmin())
np.maximum() np.minimum(): 將兩個(gè)同維數(shù)組中對(duì)應(yīng)元素中最大/最小元素構(gòu)成一個(gè)新的數(shù)組
print(np.maximum(a, b), np.minimum(a, b), sep='\n')中位數(shù)
將多個(gè)樣本按照大小排序,取中間位置的元素。
若樣本數(shù)量為奇數(shù),中位數(shù)為最中間的元素
$[1, 2000, 3000, 4000, 10000000]$
若樣本數(shù)量為偶數(shù),中位數(shù)為最中間的兩個(gè)元素的平均值
$[1,2000,3000,4000,5000,10000000]$
案例:分析中位數(shù)的算法,測試numpy提供的中位數(shù)API:
import numpy as npclosing_prices = np.loadtxt('../../data/aapl.csv',delimiter=',', usecols=(6), unpack=True)size = closing_prices.sizesorted_prices = np.msort(closing_prices)median = (sorted_prices[int((size - 1) / 2)] +sorted_prices[int(size / 2)]) / 2print(median)median = np.median(closing_prices)print(median)
頻數(shù)與眾數(shù)
頻數(shù)指一組數(shù)據(jù)中各離散值出現(xiàn)的次數(shù),而眾數(shù)則是指一組數(shù)據(jù)中出現(xiàn)次數(shù)最多的值。
cars = np.array(['bmw', 'bmw', 'bz', 'audi', 'bz', 'bmw'])cars = pd.Series(cars)cars.value_counts()cars.mode()
四分位數(shù)
所謂四分位數(shù),即把數(shù)值由小到大排列并分成四等份,處于三個(gè)分割點(diǎn)位置的數(shù)值就是四分位數(shù)。
第1四分位數(shù) (Q1),又稱“較小四分位數(shù)”,等于該樣本中所有數(shù)值由小到大排列后第25%的數(shù)字。
第2四分位數(shù) (Q2),又稱“中位數(shù)”,等于該樣本中所有數(shù)值由小到大排列后第50%的數(shù)字。
第3四分位數(shù) (Q3),又稱“較大四分位數(shù)”,等于該樣本中所有數(shù)值由小到大排列后第75%的數(shù)字。
第3四分位數(shù)與第1四分位數(shù)的差距又稱四分位距(InterQuartile Range,IQR)
ary?=?np.array([1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5])s = pd.Series(ary)s.quantile([.0, .25, .5, .75, 1.])
標(biāo)準(zhǔn)差
樣本(sample):
平均值:
離差(deviation):表示某組數(shù)據(jù)距離某個(gè)中心點(diǎn)的偏離程度
離差方:
總體方差(variance):
總體標(biāo)準(zhǔn)差(standard deviation):
樣本方差:
其中,n-1稱之為“貝塞爾校正”,這是因?yàn)槌槿颖緯r(shí)候,采集的樣本主要是落在中心值附近,那么通過這些樣本計(jì)算的方差會(huì)小于等于對(duì)總體數(shù)據(jù)集方差的無偏估計(jì)值。為了能彌補(bǔ)這方面的缺陷,那么我們把公式的n改為n-1,以此來提高方差的數(shù)值。稱為貝塞爾校正系數(shù)。
樣本標(biāo)準(zhǔn)差:
案例:根據(jù)標(biāo)準(zhǔn)差理論,針對(duì)評(píng)分?jǐn)?shù)據(jù)進(jìn)行方差分析:
ratings.std(axis=0)
宏觀數(shù)值統(tǒng)計(jì)
ratings.describe()“您的關(guān)注就是我寫下去的動(dòng)力”
