Python数据分析 | 数据描述性分析

2020-01-09  本文已影响0人  cathy1997

目录:


1.数据准备

首先导入一些必要的数据处理包和可视化的包,读文档数据并通过前几行查看数据字段。

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

# 设置中文识别
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')
# 查看数据样例信息
data.head()
数据示例

对于我的数据来说,由于数据量比较大,因此对于缺失值可以直接做删除处理。

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

得到最终的数据,并提取需要的列作为特征。

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.类别型数据分析

对类别数据进行统计:

object_result = data.describe(include=['object'])

类别型字段包括location、cpc_class、pa_country、pa_state、pa_city、assignee六个字段,其中:

类别型数据统计

3.数值型数据分析

单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系。单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型。
单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等。需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量)。

查看数据分布

对于数值型数据,首先希望了解一下数据取值范围的分布,因此可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图。

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()

按照发布的时间先后作为横坐标,数值范围的分布情况如图所示.

直方图

还可以根据最终分类的结果查看这些数值数据在不同类别上的分布统计。

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()
不同类别下的分布
描述性统计分析
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=['非空数','求和','最小值','最小值位置','25%分位数',
                    '中位数','75%分位数','均值','最大值','最大值位数','众数','平均绝对偏差','方差','标准差','偏度','峰度'])

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()
箱线图

异常值指数据中的离群点,此处定义超出上下四分位数差值的1.5倍的范围为异常值,查看异常值的位置。

# 上四分位数
q3 = claims_num.quantile(q=0.75)
#下四分位数
q1 = claims_num.quantile(q=0.25)
# 四分位差
iqr = q3-q1
print("上四分位数:{}\n下四分位数:{}\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))
数据分布模型——检验是否符合正态分布

参考:
python数据分析之数据分布 - yancheng111 - 博客园
python数据统计分析 - 简书

方法1 :scipy.stats.normaltest (a, axis=0)
scipy.stats.normaltest(claims_num)
方法2 Shapiro-Wilk test
scipy.stats.shapiro(claims_num)
方法3: scipy.stats.kstest

科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验。下例中用它检验正态分布。

scipy.stats.kstest(claims_num,'norm')

在使用k-s检验该数据是否服从正态分布,提出假设:x从正态分布。最终返回的结果,p-value=0.9260909172362317,比指定的显著水平(一般为5%)大,则我们不能拒绝假设:x服从正态分布。这并不是说x服从正态分布一定是正确的,而是说没有充分的证据证明x不服从正态分布。因此我们的假设被接受,认为x服从正态分布。如果p-value小于我们指定的显著性水平,则我们可以肯定的拒绝提出的假设,认为x肯定不服从正态分布,这个拒绝是绝对正确的。

方法4: Anderson-Darling test
scipy.stats.anderson(claims_num,dist="norm")

4.相关性分析

衡量两个变量的相关性至少有以下三个方法:

皮尔森相关系数(Pearson correlation coefficient)是反应俩变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性。常用于分析自变量之间,以及自变量和因变量之间的相关性。

from scipy import stats
import scipy

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

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

返回结果的第一个值为相关系数表示线性相关程度,其取值范围在[-1,1],绝对值越接近1,说明两个变量的相关性越强,绝对值越接近0说明两个变量的相关性越差。当两个变量完全不相关时相关系数为0。第二个值为p-value,统计学上,一般当p-value<0.05时,可以认为两变量存在相关性。

斯皮尔曼等级相关系数(Spearman’s correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 秩或称等级),而不考虑变量值的大小。常用于计算类型变量的相关性。

# spearman 相关系数
data['result'].corr(data['inventor_num'], method='spearman')

stats.spearmanr(result,inventor_num)

返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关。第二个值为p-value,p-value越小,表示相关程度越显著。

kendall

# kendall 相关系数
data['result'].corr(data['inventor_num'], method='kendall')

也可以直接对整体数据进行相关性分析,一般来说,相关系数取值和相关强度的关系是:0.8-1.0 极强 0.6-0.8 强 0.4-0.6 中等 0.2-0.4 弱 0.0-0.2 极弱。

data.corr()
连续变量的相关系数(corr)
上一篇下一篇

猜你喜欢

热点阅读