目錄:
- 數(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ù)量比較大寞秃,因此對于缺失值可以直接做刪除處理。
# 去除缺失值
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公司败潦。
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()