Python數(shù)據(jù)分析 | 數(shù)據(jù)描述性分析

目錄:

  • 數(shù)據(jù)準(zhǔn)備
  • 類別型數(shù)據(jù)分析
  • 數(shù)值型數(shù)據(jù)分析
    • 查看數(shù)據(jù)分布
    • 查看異常值
    • 描述性統(tǒng)計分析
    • 數(shù)據(jù)分布模型
  • 相關(guān)性分析

1.數(shù)據(jù)準(zhǔn)備

首先導(dǎo)入一些必要的數(shù)據(jù)處理包和可視化的包,讀文檔數(shù)據(jù)并通過前幾行查看數(shù)據(jù)字段默终。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt   
import matplotlib

# 設(shè)置中文識別
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
# matplotlib.style.use('bmh')
matplotlib.style.use('seaborn-white')

data = pd.read_excel(r"C:/Users/asus/Desktop/match_result.xlsx", encoding='utf-8')
# 查看數(shù)據(jù)樣例信息
data.head()
數(shù)據(jù)示例

對于我的數(shù)據(jù)來說,由于數(shù)據(jù)量比較大寞秃,因此對于缺失值可以直接做刪除處理。

# 去除缺失值
data.dropna(inplace=True)

得到最終的數(shù)據(jù)偶惠,并提取需要的列作為特征。

result = data['result']
inventor_num = data['inventor_num']
inventor_patent_num = data['inventor_patent_num']
famliy = data['famliy']
assignee_patent_num = data['assignee_patent_num']
claims_num = data['claims_num']

2.類別型數(shù)據(jù)分析

對類別數(shù)據(jù)進(jìn)行統(tǒng)計:

  • count:指定字段的非空總數(shù)朗涩。
  • unique:該字段中保存的值類型數(shù)量忽孽,比如性別列保存了男、女兩種值谢床,則unique值則為2兄一。
  • top:數(shù)量最多的值。
  • freq:數(shù)量最多的值的總數(shù)识腿。
object_result = data.describe(include=['object'])

類別型字段包括location出革、cpc_class、pa_country渡讼、pa_state骂束、pa_city、assignee六個字段成箫,其中:

  • location有5,215個唯一值展箱,每個值出現(xiàn)的頻次都是1,說明這5,215個專利沒有重復(fù)值蹬昌;
  • cpc_class有1436個唯一值混驰,其中最高的是有151個專利來自“A-61-k-31”這一分類;
  • pa_country有2個唯一值皂贩,說明所有申請的專利來自兩個不同國家栖榨,其中有5,174個專利(占99.21%)來自美國;
  • pa_state有49個唯一值明刷,其中有790個專利來自Virginia州婴栽;
  • pa_city有635個唯一值,其中有541個專利來自Washington遮精;
  • pa_assignee有2876個唯一值居夹,其中有68個專利都來自IBM公司败潦。
類別型數(shù)據(jù)統(tǒng)計

3.數(shù)值型數(shù)據(jù)分析

單變量統(tǒng)計描述是數(shù)據(jù)分析中最簡單的形式,其中被分析的數(shù)據(jù)只包含一個變量准脂,不處理原因或關(guān)系劫扒。單變量分析的主要目的是通過對數(shù)據(jù)的統(tǒng)計描述了解當(dāng)前數(shù)據(jù)的基本情況,并找出數(shù)據(jù)的分布模型狸膏。
單變量數(shù)據(jù)統(tǒng)計描述從集中趨勢上看沟饥,指標(biāo)有:均值,中位數(shù)湾戳,分位數(shù)贤旷,眾數(shù);從離散程度上看砾脑,指標(biāo)有:極差幼驶、四分位數(shù)、方差韧衣、標(biāo)準(zhǔn)差盅藻、協(xié)方差、變異系數(shù)畅铭,從分布上看氏淑,有偏度,峰度等硕噩。需要考慮的還有極大值假残,極小值(數(shù)值型變量)和頻數(shù),構(gòu)成比(分類或等級變量)炉擅。

查看數(shù)據(jù)分布

對于數(shù)值型數(shù)據(jù)辉懒,首先希望了解一下數(shù)據(jù)取值范圍的分布,因此可以用統(tǒng)計圖直觀展示數(shù)據(jù)分布特征坑资,如:柱狀圖耗帕、正方圖、箱式圖袱贮、頻率多邊形和餅狀圖仿便。

fig = plt.figure(figsize=(16,8))

plt.subplot(231)
plt.plot(inventor_num.index, inventor_num)
plt.ylabel("inventor number")
plt.xlabel("application id")
plt.title('inventor number distribution')

plt.show()

按照發(fā)布的時間先后作為橫坐標(biāo),數(shù)值范圍的分布情況如圖所示.

直方圖

還可以根據(jù)最終分類的結(jié)果查看這些數(shù)值數(shù)據(jù)在不同類別上的分布統(tǒng)計攒巍。

fig = plt.figure(figsize=(16,8))

plt.subplot(231)
df1 = data[data['result']==1]
plt.scatter(df1.index, df1['inventor_num'], label="success")
df2 = data[data['result']==0]
plt.scatter(df2.index, df2['inventor_num'], label="fail")
plt.ylabel("inventor number")
plt.xlabel("application id")
plt.title('inventor number of different class')

plt.legend()
plt.grid()
plt.show()
不同類別下的分布
描述性統(tǒng)計分析
def status(x) : 
    return pd.Series([x.count(),x.sum(),x.min(),x.idxmin(),x.quantile(.25),x.median(),
                      x.quantile(.75),x.mean(),x.max(),x.idxmax(),x.mode(),x.mad(),x.var(),
                      x.std(),x.skew(),x.kurt()],index=['非空數(shù)','求和','最小值','最小值位置','25%分位數(shù)',
                    '中位數(shù)','75%分位數(shù)','均值','最大值','最大值位數(shù)','眾數(shù)','平均絕對偏差','方差','標(biāo)準(zhǔn)差','偏度','峰度'])

df = pd.DataFrame(np.array([result,inventor_num]).T, columns=['result','inventor_num'])

df.apply(status)
查看異常值

箱線圖可以更直觀的查看異常值的分布情況嗽仪。

fig = plt.figure(figsize=(16,8))

plt.subplot(231)
inventor_num.plot.box(vert=False, grid = True)
plt.xlabel("application id")
plt.title('inventor number of different class')

plt.show()
箱線圖

異常值指數(shù)據(jù)中的離群點(diǎn),此處定義超出上下四分位數(shù)差值的1.5倍的范圍為異常值柒莉,查看異常值的位置闻坚。

# 上四分位數(shù)
q3 = claims_num.quantile(q=0.75)
#下四分位數(shù)
q1 = claims_num.quantile(q=0.25)
# 四分位差
iqr = q3-q1
print("上四分位數(shù):{}\n下四分位數(shù):{}\n四分位差{}".format(q3,q1,iqr))
df_tm_01 = claims_num[(claims_num>q3+1.5*iqr) | (claims_num<q1-1.5*iqr)]
print("異常值:\n{}".format(df_tm_01))
數(shù)據(jù)分布模型——檢驗(yàn)是否符合正態(tài)分布

參考:
python數(shù)據(jù)分析之?dāng)?shù)據(jù)分布 - yancheng111 - 博客園
python數(shù)據(jù)統(tǒng)計分析 - 簡書

方法1 :scipy.stats.normaltest (a, axis=0)
  • 參數(shù):a - 待檢驗(yàn)數(shù)據(jù);axis - 可設(shè)置為整數(shù)或置空兢孝,如果設(shè)置為 none窿凤,則待檢驗(yàn)數(shù)據(jù)被當(dāng)作單獨(dú)的數(shù)據(jù)集來進(jìn)行檢驗(yàn)仅偎。該值默認(rèn)為 0,即從 0 軸開始逐行進(jìn)行檢驗(yàn)雳殊。
  • 返回:k2 - s^2 + k^2橘沥,s 為 skewtest 返回的 z-score,k 為 kurtosistest 返回的 z-score夯秃,即標(biāo)準(zhǔn)化值座咆;p-value - p值 (p>0.05 符合正態(tài)分布) 返回結(jié)果 p-value=0.00000000e+000,比指定的顯著水平(一般為5%)小仓洼,則拒絕假設(shè):x不服從正態(tài)分布介陶。
scipy.stats.normaltest(claims_num)
方法2 Shapiro-Wilk test
  • 方法:scipy.stats.shapiro(x)
  • 官方文檔:SciPy v1.1.0 Reference Guide
  • 參數(shù):x - 待檢驗(yàn)數(shù)據(jù)
  • 返回:W - 統(tǒng)計數(shù);p-value - p值
scipy.stats.shapiro(claims_num)
方法3: scipy.stats.kstest

科爾莫戈羅夫檢驗(yàn)(Kolmogorov-Smirnov test)色建,檢驗(yàn)樣本數(shù)據(jù)是否服從某一分布哺呜,僅適用于連續(xù)分布的檢驗(yàn)。下例中用它檢驗(yàn)正態(tài)分布镀岛。

  • 方法:scipy.stats.kstest (rvs, cdf, args = ( ), N = 20, alternative =‘two-sided’, mode =‘a(chǎn)pprox’)
  • 官方文檔:SciPy v0.14.0 Reference Guide
  • 參數(shù):rvs - 待檢驗(yàn)數(shù)據(jù)弦牡,可以是字符串、數(shù)組漂羊;
  • cdf - 需要設(shè)置的檢驗(yàn),這里設(shè)置為 norm卸留,也就是正態(tài)性檢驗(yàn)走越;
  • alternative - 設(shè)置單雙尾檢驗(yàn),默認(rèn)為 two-sided
  • 返回:W - 統(tǒng)計數(shù)耻瑟;p-value - p值
scipy.stats.kstest(claims_num,'norm')

在使用k-s檢驗(yàn)該數(shù)據(jù)是否服從正態(tài)分布旨指,提出假設(shè):x從正態(tài)分布。最終返回的結(jié)果喳整,p-value=0.9260909172362317谆构,比指定的顯著水平(一般為5%)大,則我們不能拒絕假設(shè):x服從正態(tài)分布框都。這并不是說x服從正態(tài)分布一定是正確的搬素,而是說沒有充分的證據(jù)證明x不服從正態(tài)分布。因此我們的假設(shè)被接受魏保,認(rèn)為x服從正態(tài)分布熬尺。如果p-value小于我們指定的顯著性水平,則我們可以肯定的拒絕提出的假設(shè)谓罗,認(rèn)為x肯定不服從正態(tài)分布粱哼,這個拒絕是絕對正確的。

方法4: Anderson-Darling test
  • 方法:scipy.stats.anderson (x, dist =‘norm’ )
    該方法是由 scipy.stats.kstest 改進(jìn)而來的檩咱,可以做正態(tài)分布揭措、指數(shù)分布胯舷、Logistic 分布、Gumbel 分布等多種分布檢驗(yàn)绊含。默認(rèn)參數(shù)為 norm桑嘶,即正態(tài)性檢驗(yàn)。
  • 官方文檔:SciPy v1.1.0 Reference Guide
  • 參數(shù):x - 待檢驗(yàn)數(shù)據(jù)艺挪;dist - 設(shè)置需要檢驗(yàn)的分布類型
  • 返回:statistic - 統(tǒng)計數(shù)不翩;critical_values - 評判值;significance_level - 顯著性水平
scipy.stats.anderson(claims_num,dist="norm")

4.相關(guān)性分析

衡量兩個變量的相關(guān)性至少有以下三個方法:

  • pearson:衡量兩個數(shù)據(jù)集合是否在一條線上(線性關(guān)系)
  • kendall:有序變量相關(guān)性
  • spearman:根據(jù)變量排列位置的等級相關(guān)性麻裳,多用于交叉數(shù)據(jù)

皮爾森相關(guān)系數(shù)(Pearson correlation coefficient)是反應(yīng)倆變量之間線性相關(guān)程度的統(tǒng)計量口蝠,用它來分析正態(tài)分布的兩個連續(xù)型變量之間的相關(guān)性。常用于分析自變量之間津坑,以及自變量和因變量之間的相關(guān)性妙蔗。

from scipy import stats
import scipy

# 方法一
data['result'].corr(data['inventor_num'], method='pearson')

# 方法二
stats.pearsonr(result, inventor_num)

返回結(jié)果的第一個值為相關(guān)系數(shù)表示線性相關(guān)程度,其取值范圍在[-1,1]疆瑰,絕對值越接近1眉反,說明兩個變量的相關(guān)性越強(qiáng),絕對值越接近0說明兩個變量的相關(guān)性越差穆役。當(dāng)兩個變量完全不相關(guān)時相關(guān)系數(shù)為0寸五。第二個值為p-value,統(tǒng)計學(xué)上耿币,一般當(dāng)p-value<0.05時梳杏,可以認(rèn)為兩變量存在相關(guān)性。

斯皮爾曼等級相關(guān)系數(shù)(Spearman’s correlation coefficient for ranked data )淹接,它主要用于評價順序變量間的線性相關(guān)關(guān)系十性,在計算過程中,只考慮變量值的順序(rank, 秩或稱等級)塑悼,而不考慮變量值的大小劲适。常用于計算類型變量的相關(guān)性。

# spearman 相關(guān)系數(shù)
data['result'].corr(data['inventor_num'], method='spearman')

stats.spearmanr(result,inventor_num)

返回結(jié)果的第一個值為相關(guān)系數(shù)表示線性相關(guān)程度厢蒜,本例中correlation趨近于1表示正相關(guān)霞势。第二個值為p-value,p-value越小郭怪,表示相關(guān)程度越顯著支示。

kendall

# kendall 相關(guān)系數(shù)
data['result'].corr(data['inventor_num'], method='kendall')

也可以直接對整體數(shù)據(jù)進(jìn)行相關(guān)性分析,一般來說鄙才,相關(guān)系數(shù)取值和相關(guān)強(qiáng)度的關(guān)系是:0.8-1.0 極強(qiáng) 0.6-0.8 強(qiáng) 0.4-0.6 中等 0.2-0.4 弱 0.0-0.2 極弱颂鸿。

data.corr()
連續(xù)變量的相關(guān)系數(shù)(corr)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市攒庵,隨后出現(xiàn)的幾起案子嘴纺,更是在濱河造成了極大的恐慌败晴,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栽渴,死亡現(xiàn)場離奇詭異尖坤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闲擦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門慢味,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墅冷,你說我怎么就攤上這事纯路。” “怎么了寞忿?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵驰唬,是天一觀的道長。 經(jīng)常有香客問我腔彰,道長叫编,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任霹抛,我火速辦了婚禮搓逾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杯拐。我一直安慰自己恃逻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布藕施。 她就那樣靜靜地躺著,像睡著了一般凸郑。 火紅的嫁衣襯著肌膚如雪裳食。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天芙沥,我揣著相機(jī)與錄音诲祸,去河邊找鬼。 笑死而昨,一個胖子當(dāng)著我的面吹牛救氯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歌憨,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼着憨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了务嫡?” 一聲冷哼從身側(cè)響起甲抖,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漆改,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后准谚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挫剑,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年柱衔,在試婚紗的時候發(fā)現(xiàn)自己被綠了樊破。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡唆铐,死狀恐怖哲戚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情或链,我是刑警寧澤惫恼,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站澳盐,受9級特大地震影響祈纯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叼耙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一腕窥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筛婉,春花似錦簇爆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至硕勿,卻和暖如春哨毁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背源武。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工扼褪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粱栖。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓话浇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親闹究。 傳聞我的和親對象是個殘疾皇子幔崖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容