Python描述性統(tǒng)計與pandas簡單入門

01

Python是一門很牛逼的編程語言,語法簡單,功能強(qiáng)大,它可以用于Web開發(fā),網(wǎng)絡(luò)爬蟲,寫腳本,人工智能,機(jī)器學(xué)習(xí),數(shù)據(jù)分析,數(shù)據(jù)可視化等等。說了那么多用途,相信你和我一樣,內(nèi)心早就燃起了對學(xué)習(xí)Python的熱情。這里強(qiáng)烈推薦廖雪峰老師的Python教程,喜歡看書的話,則推薦《PYTHON基礎(chǔ)教程》,最新版出到第三版了。

接下來我將會使用Jupyter Notebook來進(jìn)行代碼的編寫與運行,它是以網(wǎng)頁的形式打開的,可以直接在里面編寫代碼和運行,非常方便。對于小白來說,推薦安裝Anaconda,Anaconda已經(jīng)自動為我們安裝好了Jupyter Notebook以及其他工具等。當(dāng)然,喜歡鉆研的小伙伴也可以到終端輸入pip命令安裝,具體的就不再贅述了。

首先導(dǎo)入相關(guān)的Python模塊,并加載好待會兒要操作的數(shù)據(jù)集。這個數(shù)據(jù)集是以前練習(xí)爬蟲的時候抓取下來的豆瓣讀書數(shù)據(jù)。

import numpy as np
import pandas as pd
data = pd.read_excel("doubanTOP250.xlsx")
df = data.head() 
df

因為該數(shù)據(jù)集是.xlsx格式,使用pandas.read_excel來加載。其它加載數(shù)據(jù)的方式還有很多,常見的有:

  • 從CSV文件導(dǎo)入數(shù)據(jù)
pd.read_csv():
  • 導(dǎo)入json格式的字符串文件
pd.read_json()
  • 從帶分隔符的文本文件導(dǎo)入數(shù)據(jù)
pd.read_table()
  • 導(dǎo)入SQL表
pd.read_sql_table()
  • 導(dǎo)入xlsx格式的文件
pd.read_excel()

describe函數(shù)可以快速生成各類統(tǒng)計指標(biāo),如平均數(shù)、標(biāo)準(zhǔn)差、中位數(shù)、最大值等,適用于數(shù)值型數(shù)據(jù)。

stats_numeric = pd.DataFrame.describe(df[['price']])
stats_numeric

如果對均值、中位數(shù)、峰態(tài)系數(shù)等的概念不是很清楚,可以點擊先看下這篇文章:統(tǒng)計學(xué)入門級-描述性統(tǒng)計理論。接下來用Python進(jìn)行描述性統(tǒng)計,直接上代碼。

mode1 = df['rate'].mode()[0]
print('眾數(shù):' + str(mode1))
mean1 = df['price'].mean()
print('均值:'+ str(mean1))
median1 = df['price'].median()
print('中位數(shù):' + str(median1))
min1 = df['price'].min()
print('最小值:' + str(min1))
max1 = df['price'].max()
print('最大值:' + str(max1))
quantile1 = df['price'].quantile(q=0.25)
print('第一四分位數(shù):' + str(quantile1))
quantile2 = df['price'].quantile(q=0.50)
print('第二四分位數(shù),即中位數(shù):' + str(quantile2))
quantile3 = df['price'].quantile(q=0.75)
print('第三四分位數(shù):' + str(quantile3))
std1 = df['price'].std()
print('樣本標(biāo)準(zhǔn)差:' + str(std1))
var1 = df['price'].var()
print('樣本方差:' + str(var1))
skew1 = df['price'].skew()
print('偏態(tài)系數(shù):' + str(skew1))
kurt1 = df['price'].kurt()
print('峰態(tài)系數(shù):' + str(kurt1))

describe = {'mode':[mode1],
            'mean': [mean1],
            'median': [median1],
            'min': [min1],
            'max': [max1],
            'quantile1': [quantile1],
            'quantile2': [quantile2],
            'quantile3': [quantile3],
            'standard deviation': [std1],
            'variance': [var1],
            'skewness coefficient': [skew1],
            'kurtosis coefficient': [kurt1]
           }
stats = pd.DataFrame(describe,columns= ['mode','mean','median','min','max','quantile1','quantile2',
                                     'quantile3','standard deviation','variance','skewness coefficient',
                                     'kurtosis coefficient'])                                 
stats

02

Series和DataFrame是pandas兩個常用的工具數(shù)據(jù)結(jié)構(gòu)。Series是一種一維的數(shù)組型對象,它包含一個值序列和索引,如果索引沒有明確指定的話,默認(rèn)是0到N-1(N為數(shù)據(jù)的長度)??梢哉J(rèn)為Series是一個定長有序的字典,因為它將索引值和數(shù)據(jù)值按位置配對。

#  創(chuàng)建一個Series,或者使用字典生成一個series
series1 = pd.Series([1,2,-3,9], index = ['a', 'b', 'c', 'd'])  
dict = {'tom': 9, 'sam': 79, 'andrew': 90, 'mary':84}
series2 = pd.Series(dict)
series2
  • 獲取Series對象的值:
series1.values
  • 通過索引獲取值:
series1['a']
series1[['b','a']]
  • 獲取Series對象的索引:
series1.index
  • 判斷Series對象的缺失數(shù)據(jù):
series1.isnull()
series1.notnull()
  • 對Series對象的值進(jìn)行排序:
series1.sort_values()

兩個Series對象還可以進(jìn)行相加,在這數(shù)學(xué)操作中,Series會自動對齊索引。


03

DataFrame表示的是矩陣的數(shù)據(jù)表,包含已排序的列集合,每一列的值類型可以不同,數(shù)值型、字符串、布爾值都可以,它既有行索引也有列索引。

data = {'name': ['tom', 'sam', 'mary', 'jerry'],
           'age': [12, 23,15,18],
           'score':[67,89,88,90]}
# columns指定了列的順序,df1將會按照指定順序排列         
df1 = pd.DataFrame(data,columns = ['score', 'name', 'age'])
df1

獲取df1的其中一列,可以按字典型標(biāo)記或?qū)傩阅菢訖z索為Series。df1[column]對于任意列名均有效,df1.column 只在列名是有效的Python變量名時有效。

df1['age'] 
df1.age

pandas的其他常用操作如下:

df1.head(n),df1.tail(n)
查看前n行/最后n行,若不指定默認(rèn)前5行
df.info() 
查看索引、數(shù)據(jù)類型和內(nèi)存信息
df1.shape 
查看行數(shù)和列數(shù)
df1['age'].value_counts()  
查看Series對象的唯一值和計數(shù)
df1.values 
以數(shù)組的形式返回數(shù)據(jù)
df1.loc[2] 
通過位置或特殊屬性loc進(jìn)行選取某一行
df1.columns 
獲取DataFrame對象的列
df1.index 
獲取DataFrame對象的索引
df1.isnull(),df1.notnull() 
判斷DataFrame對象的缺失數(shù)據(jù)
df1.sort_values() 
按照列對DataFrame對象進(jìn)行排序`

關(guān)于Pandas數(shù)據(jù)處理的知識點還有很多,包括數(shù)據(jù)合并,過濾,分組,空值的刪除替換,數(shù)據(jù)的選取等等,后續(xù)會再補(bǔ)上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容