概述
数据特征分析
分布分析
- 研究数据的分布特征和分布类型
- 定量数据
- 极差 : max - min
- 通过直方图直接判断分组组数
- 简单查看数据分布,确定分布组数
- 一般8-16即可
- 求出分组区间
- pd.cut(x, bins, right)
- 按照组数对x分组,且返回一个和x同样长度的分组dataframe
- right:是否包含右边,默认为True
- 通过groupby查看不同组的数据频率分布
- 求出目标字段下频率分布的其他统计量 → 频数,频率,累计频率
- 绘制频率直方图、饼图
- 定性数据
- 绘制频率直方图;根据不可用数据描述的特征,例如朝向
- 通过计数统计判断不同类别的频率
对比分析
- 两个互相联系的指标进行比较
- 绝对数比较(相减)
- 相互对比的指标在量级上不能差别过大
- 折线图比较
- 多系列柱状图比较
- 柱状图堆叠图+差值折线图比较
- 相对数比较(相除)
- 有联系的指标综合计算后的对比,数值为相对数
- 结构分析
- 各组总量指标与总体的总量指标对比,计算出各组数量在总量中所占比重
- 反映总体的内部结构
- 比例分析
- 将总体不同部分的指标数值进行对比,其相对指标一般称为“比例相对数”
- 比例相对数 = 总体中某一部分数值 / 总体中另一部分数值
- 空间比较分析(横向对比分析)
- 同类现象在同一时间不同空间的指标数值进行对比,反应同类现象在不同空间上的差异程度和现象发展不平衡的状况
- 空间比较相对数 = 甲空间某一现象的数值 / 乙空间同类现象的数值
- 动态对比分析(纵向对比分析)
- 同一现象在不同时间上的指标数值进行对比,反应现象的数量随着时间推移而发展变动的程度及趋势
- 最基本方法,计算动态相对数 → 发展速度
- 动态相对数(发展速度) = 某一现象的报告期数值 / 同一现象的基期数值
- 基期:用来比较的基础时期
- 报告期:所要研究的时期,又称计算期
统计分析
- 统计指标对定量数据进行统计描述
- 集中趋势度量
- 指一组数据向某一中心靠拢的倾向,核心在于寻找数据的代表值或中心值
- 算数平均数
- 简单算术平均值:总和 / 样本数量 (不涉及权重)
- 加权算术平均值:(x1f1 + x2f2 + ... + xnfn) / (f1 + f2 + ... + fn)
- 位置平均数
- 众数 : 出现次数最多的数
- 中位数 : 排序后处于中间的数
- 离中趋势度量
- 指一组数据中各数据以不同程度的距离偏离中心的趋势
- 极差:最大值 - 最小值
- 分位差:data['75%'] - data['25%']
- 方差:各组中数值与算数平均数离差平方的算术平均数
- 标准差
- 方差的平方根
- 标准差越大,离中趋势越明显
- 最常用的离中趋势指标
帕累托分析
- 贡献度分析
- 帕累托法则:20/80定律
- 客观存在的无法解释的不平衡
- 多数,造成少许的影响
- 少数,造成主要的、重大的影响
- 分析步骤:
- 1.根据值从大到小排列,绘制柱状图
- 2.创建累计占比cumsum,
- 3.找到累计占比超过80%时候的index和索引位置
- 4.绘制累计占比曲线(y副坐标轴)
- 5.突出显示累计占比超80%的点
正太性检验
- 定义:利用观测数据判断总体是否服从正态分布
- 直方图初判
- 根据数据绘制直方图
- 绘制密度曲线
- QQ图判断
- 把测试样本数据的分位数与已知分布相比较
- 散点图,由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图
- 参考直线:四分之一分位点和四分之三分位点这两点确定,看散点是否落在这条线的附近
- 绘制步骤:
- 1.数据清洗后,对数据进行排序
- 2.计算每个数据对应的百分位:p(i)=(i-0.5)/n
- 3.绘制直方图和QQ图
- K-S检测
- from scipy import stats
- stats.kstest(df['value'],'norm',(u,std))
- .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
- 结果返回两个值:statistic → D值,pvalue → P值
- p值大于0.05,为正态分布
相关性分析
- 分析连续变量之间的线性相关程度的强弱
- 图示初判
- 变量之间的线性相关性
- 正线性相关
- 负线性相关
- 散点图矩阵初判多变量间关系
- 变量之间的线性相关性
- Pearson相关系数
- 算法:r = data['(x-u1)*(y-u2)'].sum() / np.sqrt(data['(x-u1)**2'].sum() * data['(y-u2)**2'].sum())
- data.corr():data.corr(method='pearson', min_periods=1) → 直接给出数据字段的相关系数矩阵
- Sperman秩相关系数
- 算法
- 1.对每列数据按照从小到大排序,分别设定秩次index
- 2.求得秩次差的平方,
- 3.rs = 1 - 6 * (data['d2'].sum()) / (n * (n**2 - 1))
- n 为数据个数
- data['d2'] :秩次差的平方
- data.corr(method='spearman')
- 算法
数据处理
缺失值处理
- 判断是否有缺失值
- isnull:缺失值为True,非缺失值为False
- notnull:缺失值为False,非缺失值为True
- 删除缺失值
- data.dropna()
- 可直接用于Series,Dataframe
- inplace参数,默认False → 生成新的值
- data.dropna()
- 填充缺失值
- s.fillna(value,inplace = True,method='pad')
- value 为填充值
- inplace 为 True 时替换源数据
- method参数
- pad / ffill → 用之前的数据填充
- backfill / bfill → 用之后的数据填充
- s.fillna(value,inplace = True,method='pad')
- 替换缺失值
- df.replace(to_replace=None, value=None, inplace=False,)
- to_replace → 被替换的值
- value → 替换值
- 缺失值插补
- 均值/中位数/众数插补
- u = s.mean() # 均值
- me = s.median() # 中位数
- mod = s.mode() # 众数
- mod.tolist() : 转换为列表,可能不仅一个
- 均值/中位数/众数插补
- 临近值插补
- 修改method参数
- pad / ffill → 用之前的数据填充
- backfill / bfill → 用之后的数据填充
- 修改method参数
- 拉格朗日插值法
- from scipy.interpolate import lagrange
- lagrange(x,y):输出值为多项式的n个系数,y = a0 * x**2 + a1 * x + a2
- lagrange(x,y)(10):插值10为:y = a0 * 10**2 + a1 * 10+ a2
异常值处理
- 定义
- 指样本中的个别值,其数值明显偏离其余的观测值
- 异常值也称离群点,异常值的分析也称为离群点的分析
- 异常值分析
- 3σ原则
- 如果数据服从正态分布,异常值被定义为一组测定值中与平均值的偏差超过3倍的值
- p(|x - μ| > 3σ) ≤ 0.003
- 分别找出正常值和异常值,绘制散点图
- 绘制密度曲线,辅助标注3σ和-3σ垂直线
- 箱型图分析
- 计算分位差:iqr = s['75%'] - s['25%']
- 计算内限
- 下限:mi = q3 - 1.5 * iqr
- 上限:mi = q3 + 1.5 * iqr
- 借用散点图和箱形图
- 3σ原则
- 异常值处理方法
- 删除
- 修正填补
数据归一化
- 将数据按比例缩放,使之落入一个小的特定区间
- 去除数据的单位限制,将其转化为无量纲的纯数值
- 不同单位或量级的指标能够进行比较和加权
- 归一化处理,[0,1]区间映射
- Z-score标准化:
- z=(x-μ)/σ:其中x为某一具体分数,μ为平均数,σ为标准差
- 是一个分数与平均数的差再除以标准差的过程
- Z值的量代表着原始分数和母体平均值之间的距离,是以标准差为单位计算
- 数学意义:一个给定分数距离平均数多少个标准差?
- 经过处理的数据符合标准正态分布,即均值为0,标准差为1
- 0-1标准化:
- x = (x - Min) / (Max - Min)
- Z-score标准化:
数据连续属性离散化
- 连续属性变换成分类属性
- 等宽法 → 将数据均匀划分成n等份,每份的间距相等
- cats = pd.cut(ages,bins)
- bins 为分组依据或个数
- 可以设置自己的区间名称,用labels参数
- cats.codes:分组后的区间,用代号来注释数据对应区间,结果为ndarray
- cats.categories:四个区间,结果为index
- pd.value_counts(cats):按照区间计数
- cats = pd.cut(ages,bins)
- 等频法 → 以相同数量的记录放进每个区间
- cats = pd.qcut(s,4)
- 按照四分位数切割,可以修改值
- 根据样本分位数对数据进行面元划分,得到大小基本相等的面元
- 等宽法 → 将数据均匀划分成n等份,每份的间距相等
数学建模
线性回归
- 概念
- 因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的
- 使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系
- 类型
- 简单线性回归
- 数据示例
- from sklearn.linear_model import LinearRegression
- np.random.RandomState → 随机数种子
- model = LinearRegression()
- 线性回归评估器,用于拟合数据得到拟合直线
- model.fit(x,y) → 拟合直线,参数分别为x与y
- x[:,np.newaxis] → 将数组变成(n,1)形状
- model.predict(xtest) → 预测
- 绘制散点图和线性回归拟合直线
- 误差
- plt.plot([xtrain,xtrain],[ytrain,ytest2],color = 'gray')
- 分别计算拟合值和实际值
- 绘制误差线
- plt.plot([xtrain,xtrain],[ytrain,ytest2],color = 'gray')
- 求解a,b
- 斜率a为:model.coef_[0]
- 截距b为:model.intercept_
- 数据示例
- 多元线性回归
- 绘制散点矩阵
- model = LinearRegression()
- model.fit(df[['b1','b2','b3','b4']],df['y'])
- 其它参数设置同一元线性回归
- 简单线性回归
模型评估
- SSE(和方差、误差平方和):The sum of squares due to error
- MSE(均方差、方差):Mean squared error
- RMSE(均方根、标准差):Root mean squared error
- R-square(确定系数) Coefficient of determination
- 步骤方法:
- from sklearn import metrics
- ytest = model.predict(xtrain[:,np.newaxis]) # 求出预测数据
- mse = metrics.mean_squared_error(ytrain,ytest) # 求出均方差
- rmse = np.sqrt(mse) # 求出均方根
- ssr = ((ytest - ytrain.mean())**2).sum() # 求出预测数据与原始数据均值之差的平方和
- sst = ((ytrain - ytrain.mean())**2).sum() # 求出原始数据和均值之差的平方和
- r = model.score(xtrain[:,np.newaxis],ytrain) # 求出确定系数
- r2 = ssr / sst # 求出确定系数
KNN分类
- 在距离空间里,如果一个样本的最接近的k个邻居里,绝大多数属于某个类别,则该样本也属于这个类别
- 电影分类
- from sklearn import neighbors
- knn = neighbors.KNeighborsClassifier();建模
- knn.fit(data[['fight','kiss']],data['type']);拟合数据
- knn.predict([[18,90]]);预测未知数据
- 绘制图表可视化
- 植物分类
- from sklearn import datasets
- iris = datasets.load_iris();加载数据
- 转换为DataFrame数据结构
- knn = neighbors.KNeighborsClassifier();建模
- knn.fit(iris.data,df['target_names']);拟合训练数据
- knn.predict(pre_data);预测数据
聚类(PCA主成分分析)
- 最广泛无监督算法 + 基础的降维算法
- 通过线性变换将原始数据变换为一组各维度线性无关的表示,用于提取数据的主要特征分量 → 高维数据的降维
- 二维数据降维
- 创建数据df
- rom sklearn.decomposition import PCA:加载主成分分析模块PCA
- pca = PCA(n_components=1) # n_components = 1 → 降为1维
- pca.fit(df) # 构建模型
- pca.explained_variance_
- # 输出特征值
- explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比
- pca.components_
- # 输出特征向量
- 返回具有最大方差的成分
- pca.n_components:# 输出成分的个数
- x_pca = pca.transform(df) # 数据转换,主成分分析,生成新的向量x_pca,为降维后的数据:fit_transform(X)
- x_new = pca.inverse_transform(x_pca) # 将降维后的数据转换成原始数据
- 绘制图表
- 多维数据降维
- from sklearn.datasets import load_digits digits = load_digits():加载数据
- pca = PCA(n_components=2) # 降为2维
- projected = pca.fit_transform(digits.data)
- pca.explained_variance_ # 输出特征值
- pca.components_.shape # 输出特征向量形状:降维后,得到2个成分,每个成分有64个特征向量
- 主成分筛选
- pca = PCA(n_components=10)
- projected = pca.fit_transform(digits.data)
- 降维后,得到10个成分,每个成分有64个特征向量
- 做贡献率累计求和,构建DataFrame
- 寻找贡献率超过85%时的成分,即主要成分
K-means聚类
- 概念
- 典型的基于距离的聚类算法
- K均值: 基于原型的、划分的距离技术,它试图发现用户指定个数(K)的簇
- 以欧式距离作为相似度测度
- 步骤方法
- from sklearn.datasets.samples_generator import make_blobs:make_blobs聚类数据生成器
- x,y_true = make_blobs()
- n_samples → 待生成的样本的总数
- n_features → 每个样本的特征数
- centers → 类别数
- cluster_std → 每个类别的方差,如多类数据不同方差,可传入列表
- random_state → 随机数种子
- x → 生成数据值, y → 生成数据对应的类别标签
- 绘制图表显示
- 构建K均值模型
- from sklearn.cluster import KMeans #导入模块
- kmeans = KMeans(n_clusters = 4)
- kmeans.fit(x)
- y_means = kmeans.predict(x
- centriods = kmeans.cluster_centers_:得到不同簇的中心点
蒙特卡罗模拟
- 概念理解
- 又称随机抽样或统计试验方法,以概率和统计理论方法为基础
- 使用随机数(或更常见的伪随机数)
- 用电子计算机实现统计模拟或抽样,以获得问题的近似解。
- 案例
- π的计算
- from matplotlib.patches import Circle
- numpy.random.uniform(low,high,size) → 从一个均匀分布[low,high)中随机采样,均匀分布
- 在正方形区域内随机投点
- 计算点到圆心的距离
- 统计落在圆内的点的数目
- 绘图
- plt.plot(x,y,'ko',markersize = 1)
- circle = Circle(xy=(a,b),radius=r,alpha = 0.5,color = 'red')
- axes.add_patch(circle)
- 计算积分 y = x**2
- 排队上厕所问题:理论联系实际。将实际问题转换建模分析。通过大量数据以近似值逼近真实值
- π的计算
最后
以上就是淡然秀发为你收集整理的python基础笔记(六)_数据清洗及建模的全部内容,希望文章能够帮你解决python基础笔记(六)_数据清洗及建模所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复