精华内容
下载资源
问答
  • 信息分析与预测
    千次阅读
    2020-05-07 16:37:58

    课程编号:    400802020  课程名称:         数据分析与预测课程设计       

    考试形式:大作业设计答辩(非笔试)

     

                                         

    一、设计考核说明

    运用所学的机器学习知识,基于Python或R或C编程环境,根据下面给出的要求,选择相关分析设计内容,完成一个数据分析与预测案例实现,最终提交设计文档。提交的设计文档内容必须包括:数据预处理、模型构建、代码实现、结果分析。学生必须提前完成案例的实现与设计文档的撰写,并参加上机演示答辩。没能完成案例实现与设计文档撰写的同学,取消答辩资格。本次设计答辩考核作为该课程的考试考核。

     

    二、具体要求:

    1. 学生在选题范围中选择设计题目(学生亦可自选择相关设计题目,但要求难度相当)。
    2. 学生必须单独完成设计工作。
    3. 要求按照数据分析与预测设计规范来撰写设计文档。文档每人一份。
    4. 设计文档要求内容完整,结构清晰,最终提交电子文档。电子文档命名参照以下规范:例如:【B08082021**张三数据挖掘设计文档】,要求保存为word 或wps文档。

     

    三、设计题目选题表(数据以电子档给出)

    题目1:心脏病的预测

    心脏病是人类健康的头号杀手,每年全世界有1/3的死亡人口是由心脏病引起的,在我国每年有几十万人死于心脏病,通过体检数据建立一套心脏病预测系统是非常实用的。

    本题研究的数据是真实的心脏病患者体检数据,为了能更好的预测,请分析数据(按照heart-disease.names中说明,用76个特征中的14个指定特征构建模型。以cleveland.data作为训练数据,以new.data作为测试数据),针对预测的目标及要求,构建合适的模型。

    请根据提供的数据实现以下目标:

    (1) 挑出指定特征的数据存储为新的文件(训练数据和测试数据都需处理);

    (2) 利用(1)的数据构建心脏病预测模型;

    (3) 该模型进行预测时准确率能达到75%以上。

     

     

    题目2:雾霾天气成因分析

    近几年国家和人民非常关心的一个话题是环境,大家都意识到环境的重要性,如今天气预报都包含了空气质量的信息。雾霾不光影响了人们的出行和娱乐,对人们的健康也有很大危害。如果人们能通过技术的手段找出引发雾霾天气的真凶,这将对治理雾霾有特别大的帮助。

    国家气象局每天都会公布当日的天气状况,每个地区的各种污染物的指标,只需找出哪些污染物指标跟雾霾天气关联度最大,就可以找到引发雾霾天气的原因,从而可以有针对地治理。

    本题要求如下:

    (1) 采集某城市某年全年的空气指标;

    (2) 依据采集数据挑选特征,构建模型挑选出影响雾霾成因的关键因素。

    404 (csdn.net)

     

    题目3: 混凝土的强度预测

    在工程领域中,对建筑材料的性能有精确的估计至关重要。这些估计是必需的,以便制定安全准则来管理用于楼宇、桥梁和道路建设中的材料。

    估计混泥土的强度是一个特别有趣的挑战。尽管混泥土几乎要用于每一个建设项目,但由于它各种成分的使用以复杂的方式相互作用,所以它的性能变化很大。因此,很难精确地预测它最终产品的强度。

    本题给定一份材料成分清单,要求:

    (1)挑选合适的模型预测混泥土强度;

    (2)考虑预测值与真实值的相关性,评估模型性能并进行优化。

    混凝土的强度预测原始数据-数据库文档类资源-CSDN下载

     

    题目4:口红销量预测

    美容界曾有一个著名的调查:“假如你只能拥有一个化妆品,你想要的的是什么产品?”95%以上的亚洲女性都选择了口红。为了让商家生产出更符合消费者的口红,提高其销售量,本题提供在京东网站上爬取的1600多条销售数据。在这诸多影响口红销量的影响因素中,分析哪些因素对口红销量至关重要,根据这些因素预测商家的销售量。

    本题要求如下:

    1. 对提供的数据进行数据预处理(数据清洗,处理缺失值等等)
    2. 挑选合适的预测模型来预测商家的口红销售量。

    404 (csdn.net)

     

    题目5:钻石价格预测

    年轻人在“钻石恒久远,一颗永流传”的广告营销下,在选择结婚戒指的时候,则不由自主的考虑钻石戒指。有需求就会有市场,于是钻石的价格也水涨船高。

    1. 在R中的ggplot2包中提取数据diamonds;
    2. 分别探讨克拉、颜色、切割等属性跟价格的关系
    3. 讨论多个属性跟价格的关系
    4. 预测carat为1.01,cut为ideal,color为E,clarity为VS2的钻石的价格,置信区间为0.95.


    四、考核成绩构成

     

    设计文档撰写:30%(考核点:问题需求的分析、文档撰写的结构层次、原理知识阐述、实验过程描述等)

    上机演示答辩:70%(考核点:功能演示、原理分析、问题回答)

     

    大作业文档结构参考

     

     

    数据分析与预测课程设计

     

    题目:****************

    学号:****************

    姓名:****************

     

     

     

     

    一、任务背景

    二、数据分析与预测目标

    三、数据预处理及分析

    四、模型构建与评价

    五、总结

     

    更多相关内容
  • AQI(空气质量指数)分析与预测(一)

    千次阅读 2021-01-30 01:00:18
    任务说明期望能够运用数据分析的相关技术,对全国城市空气质量进行研究与分析,希望能够解决如下疑问:哪些城市的空气质量较好/较差?【描述性统计分析】空气质量在地理位置上,是否具有一定的规律?【描述性统计...

    任务说明

    期望能够运用数据分析的相关技术,对全国城市空气质量进行研究与分析,希望能够解决如下疑问:

    哪些城市的空气质量较好/较差?【描述性统计分析】

    空气质量在地理位置上,是否具有一定的规律?【描述性统计分析】

    临海城市的空气质量是否有别于内陆城市?【推断统计分析】

    空气质量主要受哪些因素影响?【相关系数分析】

    全国城市空气质量普遍处于何种水平?【区间估计】

    怎样预测一个城市的空气质量?【统计建模】

    数据集描述

    我们获取了2015年空气质量数据集,该数据集包含全国主要城市的相关数据以及空气质量指数。

    c88429b8e3679509a18858e1fcfac202.png

    读取数据

    导入需要的库,同时进行一些初始化的设置

    #导入相关库

    import numpy as np

    import pandas as pd

    import matplotlib.pyplot as plt

    import seaborn as sns

    import warnings

    sns.set(style='darkgrid')

    plt.rcParams['font.family'] = 'SimHei'

    plt.rcParams['axes.unicode_minus'] = False

    warnings.filterwarnings('ignore')

    加载数据集

    #加载之后可以使用head/tail/sample等方法查看数据的大致情况

    data = pd.read_csv('data.csv')

    data.head()

    84f689ad847308f50d87f99a10f0d9e3.png

    数据清洗

    缺失值

    1 缺失值探索

    我们可以使用如下方法查看缺失值:

    info

    isnull

    data.info()

    b2ffd632d0355c4158b5f156e3d5f893.png

    data.isnull().sum(axis=0) #按列查找空值,并将空值累加

    34103d077101cae68a631888cd8139e8.png

    如上两种方式都可以看出,Precipitation列中有四个空值

    2 缺失值处理

    对于缺失值,我们可以使用如下方式处理:

    删除缺失值

    仅适用于缺失数量很少的情况

    填充缺失值

    1 数值变量

    ▷均值填充

    ▷中位数填充

    2 类别变量

    ▷众数填充

    ▷单独作为一个类别

    3 额外处理说明

    ▷缺失值小于20%,直接填充

    ▷缺失值在20%-80%,填充变量后,同时增加一列,标记该列是否缺失,方便参与后续建模

    ▷缺失值大于80%,不使用原始列,而是增加一列,标记该列是否缺失,方便参与后续建模

    #查看数据分布情况

    print(data['Precipitation'].skew()) #查看偏度值,确认左偏或右偏

    9e67e3cbcec047805ef394a84eb15585.png

    偏度值大于0,轻微右偏

    sns.distplot(data['Precipitation'].dropna())

    #distplot中不允许有空值,故使用dropna函数将空值去除

    bde7d824ce9ca18da53565daba4c41f0.png

    根据偏度值及图像可知,数据呈右偏分布,故使用中位数填充,代码如下:

    data['Precipitation'].fillna(data[].median(), inplace=True)

    异常值

    1 异常值探索

    我们可以使用如下方式,发现异常值:

    通过describe查看数值信息

    3σ方式

    使用箱线图辅助

    相关异常检测算法

    describe方法

    调用DataFrame对象的describe方法,可以显示数据的统计信息,不过此种方法仅能作为一种简单的异常探索方式。

    data.describe()

    4ddf2eba2146b6d8863a85be996f9885.png

    3σ方法

    根据正态分布的特性,我们可以将3σ之外的数据,视为异常值。我们以GDP为例,首先绘制GDP的分布。

    sns.distplot(data['GDP'])

    57d274b03e9d64ad5de5b3a20b1ec107.png

    print(data['GDP'].skew()) #偏度值

    4d20b20a74338d09886d8475e555ba3e.png

    可以看出此列呈严重的右偏分布,也就是存在部分极大的异常值,可以获取这些异常值。

    mean, std = data['GDP'].mean(), data['GDP'].std()

    lower, upper = mean-3*std, mean+3*std

    print('均值:',mean)

    print('标准差:',std)

    print('下限:',lower)

    print('上限:',upper)

    data[(data['GDP']upper)] #获取全部异常信息

    d3b44cbcecec0ae238bf6622f5245d74.png

    箱线图

    箱线图是一种常见的异常检测方式。

    sns.boxplot(data=data['GDP'])

    ac8dee62ea8d74aaf47b3509a96e3290.png

    2 异常值处理

    对于异常值,我们可以采用如下的方式处理:

    删除异常值

    视为缺失值处理

    对数转换

    使用临界值填充

    使用分箱法离散化处理

    对数转换

    如果数据中存在较大的异常值,我们可以通过取对数来进行转换,这样可以得到一定的缓解。例如,GDP变量呈现右偏分布,我们可以进行取对数转换。

    fig, ax = plt.subplots(1, 2)

    fig.set_size_inches(15, 5)

    sns.distplot(data['GDP'], ax=ax[0])

    sns.distplot(np.log(data['GDP']), ax=ax[1])

    cd70308f137ecf4a1c637850427df88e.png

    取对数的方式比较简单,不过也存在一些局限:

    取对数只能针对正数操作,不过我们可以通过如下的方式进行转换:

    np.sign(X) * np.log(np.abs(X)+1)

    适合于右偏分布,不适合左偏分布

    使用边界值替换

    我们可以对异常值进行“截断”处理,即使用临界值替换异常值。例如:在3σ与箱线图中,就可以这样处理。

    分箱离散化

    有时候,特征对目标值存在一定的影响,但是这种影响可能未必是线性的增加,此时我们就可以使用分箱方式,对特征进行离散化处理。

    重复值

    1 重复值探索

    使用duplicate检查重复值,可配合keep参数进行调整。

    #发现重复值

    print(data.duplicated().sum())

    #查看哪些记录出现了重复值

    data[data.duplicated(keep=False)] #显示所有重复值

    6af1f88cabe906cca9cdadec881b767c.png

    2 重复值处理

    重复值对数据分析通常没用,直接删除即可。

    data.drop_duplicates(inplace=True) #删除重复值

    data.duplicated().sum() #检验重复值是否成功删除

    01776b355ce5592afa206db5c36d36cc.png

    展开全文
  • AQI空气质量分析与预测

    万次阅读 多人点赞 2021-04-04 03:13:58
    AQI分析与预测 AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。 本文的分析目标是: 一、描述性统计 那些城市的空气质量较好/较差? 空气质量在地理位置...

    AQI分析与预测

    AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。

    本文的分析目标是:

    一、描述性统计

    • 那些城市的空气质量较好/较差?
    • 空气质量在地理位置分布上,是否具有一定的规律?

    二、推断统计

    • 临海城市的空气质量是否优于内陆城市?

    三、相关系数分析

    • 空气质量主要受哪些因素的影响?

    四、区间估计

    • 全国城市空气质量普遍处于哪种水平?

    五、统计建模

    • 怎样预测一个城市的空气质量?

    导包并读取数据:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.set(style="darkgrid")
    plt.rcParams["font.family"] = "SimHei"
    plt.rcParams["axes.unicode_minus"] = False
    
    data = pd.read_csv("data/data.csv")
    print(data.shape)
    data.head()
    

    数据集描述:

    • City:城市名

    • AQI:空气质量指数

    • Precipitation:降雨量

    • GDP:人均生产总值

    • Tempearture:温度

    • Longitude/Latitude:经/纬度

    • Altitude:海拔高度

    • PopulationDensity:人口密度

    • Coastal:是否沿海

    • GreenCoverageRate:绿化覆盖率

    • Incineration(10,000ton):焚烧量(w吨)

    数据清洗

    检查缺失值:

    data.isnull().sum(axis=0)
    

    查看含缺失值列数据的分布:

    #print(data["Precipitation"].skew())#偏度  
    sns.distplot(data["Precipitation"].dropna())#要删除NA值才能做分布密度图
    plt.title("分布密度图")
    
    0.27360760671177387
    

    数值型变量,数据呈现右偏分布,所以使用中位数填充。

    对缺失值进行中位数填充

    data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
    

    检查异常值的三种方法

    1. data.describe() 查看数据的描述:分位数、均值与标准差
    2. 基于正太分布 ±三个标准差涵盖99.7%的数据
    3. 箱线图(四分位距IQR=Q3-Q1,上下边界:Q3/Q1 ±1.5IQR)

    查看数据集的偏度:

    data.skew()
    
    AQI                        1.198754
    Precipitation              0.273608
    GDP                        3.761428
    Temperature               -0.597343
    Longitude                 -1.407505
    Latitude                   0.253563
    Altitude                   3.067242
    PopulationDensity          3.125853
    GreenCoverageRate         -0.381786
    Incineration(10,000ton)    4.342614
    dtype: float64
    

    可以看到GDP和人口密度等都出现了严重的右偏分布,意味着存在很多极大的异常值。

    下面我们查看以下GDP的异常值:

    mean, std = data.GDP.mean(), data.GDP.std()
    lower, upper = mean - 3 * std, mean + 3 * std
    
    print("均值:", mean)
    print("标准差:", std)
    print("下限:", lower)
    print("上限:", upper)
    data.loc[(data.GDP < lower) | (data.GDP > upper), "GDP"]
    
    均值: 2390.901815384616
    标准差: 3254.876921271434
    下限: -7373.728948429687
    上限: 12155.532579198918
    16     22968.60
    63     18100.41
    202    24964.99
    207    17502.99
    215    14504.07
    230    16538.19
    256    17900.00
    314    15719.72
    Name: GDP, dtype: float64
    

    可以通过以下代码查看每个数值列异常值的个数:

    def func(s):
        mean, std = s.mean(), s.std()
        lower, upper = mean - 3 * std, mean + 3 * std
        a, b = (s < lower).sum(), (s > upper).sum()
        return pd.Series((a, b, a+b), index=("极小异常值", "极大异常值", "总和"))
    
    data.select_dtypes(include='number').agg(func).T
    

    箱线图

    我们可以直接通过箱线图来查看数据集整体的异常情况:

    plt.figure(figsize=(16, 7))
    plt.xticks(rotation=45)
    sns.boxplot(data=data)
    

    image-20210404030819265

    也可以单独查看某个列的异常情况:

    sns.boxplot(data=data["GDP"])
    

    异常值处理

    处理方式有:

    • 删除异常数据
    • 视为缺失值处理
    • 对数转换
    • 使用边界值替换
    • 分箱离散化

    对数转换

    由于右偏分布在取对数后,往往呈现正态分布,所以我们可以对右偏分布进行取对数转换。

    例如,GDP变量呈现严重的右偏分布,我们可以进行取对数转换:

    fig, ax = plt.subplots(1, 2)
    fig.set_size_inches(15, 5)
    sns.distplot(data["GDP"], ax=ax[0])
    sns.distplot(np.log(data["GDP"]), ax=ax[1])
    

    用边界值替换

    查看处理前的数据:

    data.select_dtypes("number").agg(["max", "min"])
    

    image-20210403190338467

    用边界值替换处理:

    data_c = data.copy()
    for column in data.columns:
        s = data_c[column]
        if pd.api.types.is_numeric_dtype(s):
            quantile = np.quantile(s, [0.25, 0.75])
            IQR = quantile[1]-quantile[0]
            lower = quantile[0] - 1.5 * IQR
            upper = quantile[1] + 1.5 * IQR
            s.clip(lower, upper, inplace=True)
    data_c.describe()
    

    再查看:

    data_c.describe()
    

    结果:

    image-20210403190141161

    再次查看箱线图:

    plt.figure(figsize=(16, 7))
    plt.xticks(rotation=45)
    sns.boxplot(data=data_c)
    

    重复值处理

    # 发现重复值。
    print(data.duplicated().sum())
    # 查看哪些记录出现了重复值。
    data[data.duplicated(keep=False)]
    

    结果:

    2
    

    重复值对数据分析通常没有什么用,直接删除即可:

    data.drop_duplicates(inplace=True)
    print(data.duplicated().sum())#去重后检查
    

    结果:

    0
    

    分析

    空气质量最好/差的5个城市

    最好的5个城市

    t = data[["City", "AQI"]]
    t.nsmallest(5, "AQI")
    

    可以发现:空气质量最好的5个城市为 韶关、南平、梅州、基隆、三明

    最差的8个城市

    t.nlargest(5, "AQI")
    

    可以发现:空气质量最差的5个城市为 北京、朝阳、保定、锦州、东营

    空气质量等级分布

    对于AQI,可以对空气质量进行等级划分,划分标准为:

    分级如函数:

    import math
    
    levels = ["一级", "二级", "三级", "四级", "五级", "六级"]
    
    
    def value_to_level(AQI):
        i = math.ceil(AQI/50)-1
        if i == 5:
            i = 4
        elif i > 5:
            i = 5
        return levels[i]
    
    
    level = data["AQI"].apply(value_to_level)
    display(level.value_counts())
    sns.countplot(x=level, order=levels)
    

    结果:

    空气质量指数分布

    sns.scatterplot(x="Longitude", y="Latitude", hue="AQI", palette=plt.cm.RdYlGn_r, data=data)
    plt.title("空气质量指数分布图", size=16)
    plt.show()
    

    结果:

    从上图大致的地理位置来看,西部城市普遍好于东部城市,南部城市普遍好于北部城市。

    临海与内陆城市空气质量分布

    首先看下临海城市与内陆城市的数量:

    data["Coastal"].value_counts()
    
    否    243
    是     80
    Name: Coastal, dtype: int64
    

    分类散点图:

    sns.stripplot(x="Coastal", y="AQI", data=data)
    

    分簇散点图:

    sns.swarmplot(x="Coastal", y="AQI", data=data)
    

    小提琴图:

    sns.violinplot(x="Coastal", y="AQI", data=data)
    

    更直观的是将分簇散点图和小提琴图叠加起来看:

    sns.violinplot(x="Coastal", y="AQI", data=data, inner=None)
    sns.swarmplot(x="Coastal", y="AQI", color="r", data=data)
    

    均值

    display(data.groupby("Coastal")["AQI"].mean())
    sns.barplot(x="Coastal", y="AQI", data=data)#只能看均值数据
    

    结果:

    Coastal
    否    79.045267
    是    64.062500
    Name: AQI, dtype: float64
    

    注:柱形图上方的竖线表示置信区间。

    还可以查看箱线图:

    sns.boxplot(x="Coastal", y="AQI", data=data)
    

    而小提琴图除了展示箱线图的信息外,还能呈现分布的密度。

    就样本数据的分布图而言,我们可以看到沿海城市的AQI分布普遍低于内陆城市。但我们仅仅只有样本数据,对于总体的支持力度还需假设检验。

    假设检验: 检验内陆AQI和沿海城市AQI的均值是否相等(两样本t检验)

    from scipy import stats
    
    coastal = data.loc[data["Coastal"] == "是", "AQI"]
    inland = data.loc[data["Coastal"] == "否", "AQI"]
    

    首先进行方差齐性检验(检验两样本的方差是否一致):

    stats.levene(coastal, inland)
    

    结果:

    LeveneResult(statistic=0.08825036641952543, pvalue=0.7666054880248168)
    

    方差齐性检验,原假设H0为方差相等(齐性),显然p-value超过显著性水平,说明两样本的方差是相等的。

    下面进行两样本t检验:

    #equal_var=True表示两样本方差一致
    r = stats.ttest_ind(coastal, inland, equal_var=True)
    r
    

    结果:

    Ttest_indResult(statistic=-2.7303827520948905, pvalue=0.006675422541012958)
    

    P值小于显著性水平,所以拒绝原假设,接受备择假设,即内陆AQI和沿海城市AQI的均值不相等。

    由于统计量由左样本减右样本得到,统计量小于0说明,临海的均值小于内陆。

    下面我们假设临海空气质量的均值小于内陆空气质量的均值,则这是一个右边假设检验,可以通过以下方法得到P值:

    p = stats.t.sf(r.statistic, df=len(coastal)+len(inland)-2)
    p
    

    结果:

    0.9966622887294936
    

    说明我们有99.7%的信心认为临海的空气质量整体好于内陆空气质量(均值小于内陆)。

    空气质量主要受那些因素影响呢?

    一般我们会有如下疑问:

    • 人口密度大,是否会对空气质量造成负面影响
    • 绿化率高,是否能提高空气质量

    首先查看散点图矩阵:

    sns.pairplot(data[["AQI","PopulationDensity","GreenCoverageRate"]])
    #参数 kind="reg"给散点图绘制一条回归线
    # sns.pairplot(data[["AQI", "PopulationDensity", "GreenCoverageRate"]], kind="reg")
    

    相关系数:

    变量X与变量Y的协方差为:
    Cov ⁡ ( X , Y ) = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) n − 1 \large{\operatorname{Cov}(X, Y)=\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right)}{n-1}} Cov(X,Y)=n1i=1n(xixˉ)(yiyˉ)
    相关系数的定义:
    r ( X , Y ) = Cov ⁡ ( X , Y ) σ X σ Y \large{r(X, Y)=\frac{\operatorname{Cov}(X, Y)}{\sigma_{X} \sigma_{Y}}} r(X,Y)=σXσYCov(X,Y)

    = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 \large{=\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right)}{\sqrt{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2} \sum_{i=1}^{n}\left(y_{i}-\bar{y}\right)^{2}}}} =i=1n(xixˉ)2i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)

    相关系数的绝对值的取值范围是[0,1],可以根据相关系数衡量两个变量的相关性,正数代表正相关,负数代码负相关。绝对值的大小体现相关的程度:

    0.8-1:极强相关

    0.6-0.8:强相关

    0.4-0.6:中等程度相关

    0.2-0.4:弱相关

    0-0.2:极弱相关或无相关

    x = data["AQI"]
    y = data["Precipitation"]
    # 计算AQI与Precipitation的协方差。
    a = (x - x.mean()) * (y - y.mean())
    cov = np.sum(a) / (len(a) - 1)
    print("协方差:", cov)
    # 计算AQI与Precipitation的相关系数。
    corr = cov / np.sqrt(x.var() * y.var())
    print("相关系数:", corr)
    

    结果:

    协方差: -10098.209013903044
    相关系数: -0.40184407003013883
    

    其实可以直接使用内置方法计算:

    print("协方差:", x.cov(y))
    print("相关系数:", x.corr(y))
    

    结果:

    协方差: -10098.209013903042
    相关系数: -0.4018440700301393
    

    调用DataFrame中的方法计算相关系数:

    data.corr()
    

    使用热力图呈现相关性数值更佳:

    plt.figure(figsize=(15, 10))
    ax = sns.heatmap(data.corr(), cmap=plt.cm.RdYlGn, annot=True, fmt=".2f")
    

    结果:

    从上述相关性矩阵我们可以看到,AQI与人口密度绿化面积几乎不相关。

    AQI与纬度(0.55)和降雨量(-0.4)的相关性最高。说明:

    • 纬度越低,AQI越低,空气质量越好。
    • 降雨量越多,AQI越低,空气质量越好。

    空气质量验证

    传言说,全国所有城市的空气质量指数均值为71左右,这个消息可靠吗?

    下面作为原假设全部城市的AQI均值为71,并进行假设检验:

    print("样本均值 :", data["AQI"].mean())
    print(stats.ttest_1samp(data["AQI"], 71))
    

    结果:

    样本均值 : 75.3343653250774
    Ttest_1sampResult(statistic=1.8117630617496872, pvalue=0.07095431526986647)
    

    可以看到,P值大于显著性水平0.05,故我们没有充足的证据拒绝原假设,于是接受原假设全部城市的AQI均值为71。

    下面计算一下置信区间:

    stats.t.interval(0.95, df=len(data) - 1, loc=data.AQI.mean(), scale=stats.sem(data.AQI))
    

    结果: (70.6277615675309, 80.0409690826239)

    因此,我们可以认为全国所有城市的平均空气质量,95%的可能在(70.63, 80.04)范围内。

    建模预测

    问题:已知某市的降雨量、温度、经纬度等指标,如何预测其空气质量?

    为了进行模型计算,我们首先需要将一些文本型变量转换为离散数值变量。

    data["Coastal"] = data["Coastal"].map({"是": 1, "否": 0})
    data["Coastal"].value_counts()
    
    0    243
    1     80
    Name: Coastal, dtype: int64
    

    注意:只有两个类别时,转换为任意两个数值都可以。如果存在三个以上的分类,可以使用独热编码对变量进行转换。

    基础模型:

    #线性回归模型
    from sklearn.linear_model import LinearRegression
    #数据集的处理。训练集和测试集
    from sklearn.model_selection import train_test_split
    #构建X、y变量
    X = data.drop(["City","AQI"],axis=1)#删除多余变量 ,Y变量不能在此
    y = data["AQI"]
    #对数据进行分割 训练集和测试集
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)
    #实例化模型
    lr = LinearRegression()
    #拟合模型
    lr.fit(X_train,y_train)
    #R方值  模型评价
    print(lr.score(X_train,y_train))
    print(lr.score(X_test,y_test))
    

    结果:

    0.4538897765064037
    0.4040770562383651
    

    绘制预测结果图

    y_hat = lr.predict(X_test)
    plt.figure(figsize=(15, 5))
    plt.plot(y_test.values, "-r", label="真实值", marker="o")
    plt.plot(y_hat, "-g", label="预测值", marker="D")
    plt.legend(loc="upper left")
    plt.title("线性回归预测结果", fontsize=20)
    plt.show()
    

    下面我们将尝试优化模型提高模型效果。

    模型优化

    首先我们使用临界值替换异常值:

    for column in X.columns.drop("Coastal"):
        s = X_train[column]
        if pd.api.types.is_numeric_dtype(s):
            quantile = np.quantile(s, [0.25, 0.75])
            IQR = quantile[1]-quantile[0]
            lower = quantile[0] - 1.5 * IQR
            upper = quantile[1] + 1.5 * IQR
            s.clip(lower, upper, inplace=True)
            X_test[column].clip(lower, upper, inplace=True)
    

    再次查看模型效果:

    lr.fit(X_train, y_train)
    print(lr.score(X_train, y_train))
    print(lr.score(X_test, y_test))
    

    结果:

    0.4631142291492417
    0.44614202658395546
    

    可以看到模型相对之前有一定的提高。

    下面使用RFE(Recursive feature elimination 递归特征消除) 方法实现特征选择,因为删除一些不重要的特征,反而有助于模型效果的提高。

    from sklearn.feature_selection import RFECV
    
    # estimator: 要操作的模型。
    # step: 每次删除的变量数。
    # cv: 使用的交叉验证折数。
    # n_jobs: 并发的数量。
    # scoring: 评估的方式。
    rfecv = RFECV(estimator=lr, step=1, cv=5, n_jobs=-1, scoring="r2")
    rfecv.fit(X_train, y_train)
    
    print("剩余的特征数量:", rfecv.n_features_)
    # 返回经过特征选择后,使用缩减特征训练后的模型。
    print(rfecv.estimator_)
    # 返回每个特征的等级,数值越小,特征越重要。
    print(rfecv.ranking_)
    print("被选择的特征布尔数组:", rfecv.support_)
    print("交叉验证的评分:", rfecv.grid_scores_)
    

    结果:

    9
    LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
    [1 1 1 1 1 1 2 1 1 1]
    [ True  True  True  True  True  True False  True  True  True]
    [-0.06091362  0.1397744   0.19933237  0.16183209  0.18281661  0.20636585
      0.29772708  0.307344    0.30877162  0.30022701]
    

    绘图表示,在特征选择的过程中,使用交叉验证获取R平方的值

    plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_, marker="o")
    plt.xlabel("特征数量")
    plt.ylabel("交叉验证$R^2$值")
    

    看看进行特征选择后的效果:

    print("剔除的变量:", X_train.columns[~rfecv.support_])
    # X_train_eli = rfecv.transform(X_train)
    # X_test_eli = rfecv.transform(X_test)
    X_train_eli = X_train[X_train.columns[rfecv.support_]]
    X_test_eli = X_test[X_test.columns[rfecv.support_]]
    print(rfecv.estimator_.score(X_train_eli, y_train))
    print(rfecv.estimator_.score(X_test_eli, y_test))
    

    结果:

    剔除的变量: Index(['PopulationDensity'], dtype='object')
    0.46306656191488593
    0.44502255894081927
    

    下面我们对部分数据使用分箱操作,并进行one_Hot编码:

    from sklearn.preprocessing import KBinsDiscretizer
    # KBinsDiscretizer K个分箱的离散器。用于将数值(通常是连续变量)变量进行区间离散化操作。
    # n_bins:分箱(区间)的个数。
    # encode:离散化编码方式。分为:onehot,onehot-dense与ordinal。
    #     onehot:使用独热编码,返回稀疏矩阵。
    #     onehot-dense:使用独热编码,返回稠密矩阵。
    #     ordinal:使用序数编码(0,1,2……)。
    # strategy:分箱的方式。分为:uniform,quantile,kmeans。
    #     uniform:每个区间的长度范围大致相同。
    #     quantile:每个区间包含的元素个数大致相同。
    #     kmeans:使用一维kmeans方式进行分箱。
    k = KBinsDiscretizer(n_bins=[4, 5, 14, 6],
                         encode="onehot-dense", strategy="uniform")
    # 定义离散化的特征。
    discretize = ["Longitude", "Temperature", "Precipitation", "Latitude"]
    
    r = k.fit_transform(X_train_eli[discretize])
    r = pd.DataFrame(r, index=X_train_eli.index)
    # 获取除离散化特征之外的其他特征。
    X_train_dis = X_train_eli.drop(discretize, axis=1)
    # 将离散化后的特征与其他特征进行重新组合。
    X_train_dis = pd.concat([X_train_dis, r], axis=1)
    # 对测试集进行同样的离散化操作。
    r = pd.DataFrame(k.transform(X_test_eli[discretize]), index=X_test_eli.index)
    X_test_dis = X_test_eli.drop(discretize, axis=1)
    X_test_dis = pd.concat([X_test_dis, r], axis=1)
    # 查看转换之后的格式。
    display(X_train_dis.head())
    

    再重新查看模型效果:

    lr.fit(X_train_dis, y_train)
    print(lr.score(X_train_dis, y_train))
    print(lr.score(X_test_dis, y_test))
    

    结果:

    0.6892388692774563
    0.6546062348355671
    

    可以看到模型在经过分箱离散化操作后,预测效果大幅度提高。

    残差图分析

    残差就是模型的预测值与真实值之间的差异,可以绘制残差图对模型进行评估,横坐标为预测值,纵坐标为真实值

    对于一个模型,误差应该的随机性的,而不是有规律的。残差也随机分布于中心线附近,如果残差图中残差是有规律的,则说明模型遗漏了某些能够影响残差的解释信息。

    异方差性,是指残差具有明显的方差不一致性。

    绘制残差图:

    fig, ax = plt.subplots(1, 2)
    fig.set_size_inches(15, 5)
    data = [X_train, X_train_dis]
    title = ["原始数据", "处理后数据"]
    for d, a, t in zip(data, ax, title):
        model = LinearRegression()
        model.fit(d, y_train)
        y_hat_train = model.predict(d)
        residual = y_hat_train - y_train.values
        a.set_xlabel("预测值")
        a.set_ylabel(" 残差")
        a.axhline(y=0, color="red")
        a.set_title(t)
        sns.scatterplot(x=y_hat_train, y=residual, ax=a)
    

    在左图中,可以看出随着预测值的增大,残差也有增大的趋势。此时我们可以使用对y值取对数的方式处理。

    model = LinearRegression()
    y_train_log = np.log(y_train)
    y_test_log = np.log(y_test)
    model.fit(X_train, y_train_log)
    
    y_hat_train = model.predict(X_train)
    residual = y_hat_train - y_train_log.values
    plt.xlabel("预测值")
    plt.ylabel(" 残差")
    plt.axhline(y=0, color="red")
    sns.scatterplot(x=y_hat_train, y=residual)
    

    此时异方差性得到解决。模型效果也可能会得到进一步提升。

    检查离群点:对于多元线性回归,其回归线已经成为超平面,无法通过可视化来观测。但我们可以通过残差图,通过预测值与实际值之间的关系,来检测离群点。我们认为偏离2倍标准差的点为离群点:

    y_hat_train = lr.predict(X_train_dis)
    residual = y_hat_train - y_train.values
    
    r = (residual - residual.mean()) / residual.std()
    
    plt.xlabel("预测值")
    plt.ylabel(" 残差")
    plt.axhline(y=0, color="red")
    sns.scatterplot(x=y_hat_train[np.abs(r) <= 2],
                    y=residual[np.abs(r) <= 2], color="b", label="正常值")
    sns.scatterplot(x=y_hat_train[np.abs(r) > 2], y=residual[np.abs(r) > 2], color="orange", label="异常值")
    

    结果:

    剔除异常值后,训练模型并查看效果:

    X_train_dis_filter = X_train_dis[np.abs(r) <= 2]
    y_train_filter = y_train[np.abs(r) <= 2]
    lr.fit(X_train_dis_filter, y_train_filter)
    print(lr.score(X_train_dis_filter, y_train_filter))
    print(lr.score(X_test_dis, y_test))
    

    结果:

    0.7354141753913532
    0.6302724058812207
    

    可以看到模型效果得到了进一步的提升。

    结论

    1. 从空气质量总体分布上来说,南方城市优于北方城市,西部城市优于东部城市。
    2. 临海城市空气质量整体好于内陆城市
    3. 城市是否临海,降雨量,以及维度对空气质量指数影响最大
    4. 有95%的把握可以说城市平均空气质量指数在区间(70.63, 80.04)之间
    5. 通过历史数据,我们可以对空气质量指数进行预测
    展开全文
  • 对淘宝双十一数据进行预处理、存储、查询和可视化分析。 项目步骤 0. 安装环境 Ubuntu18.04 Java 1.8 MySQL 5.7.31 Hadoop 3.1.3 Hive 3.1.2 Spark 2.4.0 Sqoop 1.4.7 Eclipse 4.14 Pycharm 2020.2 1. 预处理 1. 将...

    案例任务

    对淘宝双十一数据进行预处理、存储、查询和可视化分析。

    项目步骤

    0. 安装环境

    Ubuntu18.04
    Java 1.8
    MySQL 5.7.31
    Hadoop 3.1.3
    Hive 3.1.2
    Spark 2.4.0
    Sqoop 1.4.7
    Eclipse 4.14
    Pycharm 2020.2

    1. 预处理和存储

    a. 将原始数据集进行预处理

    b. 把文本文件的数据集导入数据仓库Hive中

    1. 数据集下载与查看
    2. 数据集预处理
    3. 导入HDFS
    4. 在Hive上创建数据库

    2. Hive数据分析

    3. 导入MySQL

    1. hive创建内表
    2. MySQL建表
    3. 使用Sqoop将数据从Hive导入MySQL

    4. 利用Spark预测回头客

    1. 预处理训练集和测试集
    2. 预测


    一、预处理

    训练技能:

    • HDFS基本操作
    • Hive基本操作之创建数据库和建表
    • 基本数据预处理方法

    任务清单:

    • 将原始数据集进行预处理
    • 把文本文件的数据集导入数据仓库Hive中

    1. 数据集下载与查看

    数据集下载。该数据集是淘宝2015年双11前6个月(包含双11)的交易数据(交易数据有偏移,但是不影响实验的结果),里面包含3个文件,分别是用户行为日志文件user_log.csv、回头客训练集train.csv、回头客测试集test.csv.
    下面列出这3个文件的数据格式定义:
    user_log.csv,日志中的字段定义如下:

    1. user_id 买家id
    2. item_id 商品id
    3. cat_id 商品类别id
    4. merchant_id 卖家id
    5. brand_id 品牌id
    6. month 交易时间:月
    7. day 交易事件:日
    8. action 行为,取值范围{0,1,2,3},0表示点击,1表示加入购物车,2表示购买,3表示关注商品
    9. age_range 买家年龄分段:1表示年龄<18,2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],
      5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄>=50,0和NULL则表示未知
    10. gender 性别:0表示女性,1表示男性,2和NULL表示未知
    11. province 收货地址省份

    train.csv,test.csv,训练集和测试集拥有相同的字段,字段定义如下:

    1. user_id 买家id
    2. age_range 买家年龄分段
    3. gender 性别
    4. merchant_id 商家id
    5. label 是否是回头客,0值表示不是回头客,1值表示回头客,-1值表示该用户已经超出我们所需要考虑的预测范围。
      NULL值只存在测试集,在测试集中表示需要预测的值。
    $ head -5 user_log.csv
    

    user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province
    328862,323294,833,2882,2661,08,29,0,0,1,内蒙古
    328862,844400,1271,2882,2661,08,29,0,1,1,山西
    328862,575153,1271,2882,2661,08,29,0,2,1,山西
    328862,996875,1271,2882,2661,08,29,0,1,1,内蒙古

    2. 数据集预处理

    删除字段名称:数据仓库Hive不需要第一行字段名称

    $ sed -i '1d' user_log.csv
    

    1d表示删除第1行,nd表示删除第n行。

    3. 导入HDFS

    user_log.csv上传到HDFS中,启动hadoop

    $ hdfs dfs -mkdir -p /taobao/dataset/user_log
    $ hdfs dfs -put user_log.csv /taobao/dataset/user_log
    

    可在http://localhost:9870上看到上传成功的数据集。
    在这里插入图片描述

    4. 在Hive上创建数据库

    1. 启动mysql和hive

    $ service mysql start
    $ hive
    

    2. 在hive上创建数据库

    数据库名:taobao

    hive> create database taobao;
    hive> use taobao;
    

    3. 创建表

    hive内表和外表的区别:
    1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理。
    2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
    那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。
    但是作为一个经验,如果所有处理都需要由Hive完成,那么应该创建表,否则使用外部表。

    内表例子:

    hive> create table test(id int,
        > name string,
        > age int,
        > tel string)
        > row format delimited
        > fields terminated by '\t'
        > stored as textfile;
    

    外部表例子:

    hive> create external table exter_table(
        > id int,
        > name string,
        > age int,
        > tel string)
        > row format delimited
        > fields terminated by '\t'
        > stored as textfile location '/home/qnstar/external';	#HDFS地址
    

    表名:user_log. 类型:外部表,包含字段:

    1. user_id int 买家id
    2. item_id int 商品id
    3. cat_id int 商品类别id
    4. merchant_id int 卖家id
    5. brand_id int 品牌id
    6. month string 交易时间:月
    7. day string 交易事件:日
    8. action int 行为,取值范围{0,1,2,3},0表示点击,1表示加入购物车,2表示购买,3表示关注商品
    9. age_range int 买家年龄分段:1表示年龄<18,2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],
      5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄>=50,0和NULL则表示未知
    10. gender int 性别:0表示女性,1表示男性,2和NULL表示未知
    11. province string 收货地址省份
    hive> create external table user_log(
        > user_id int,
        > item_id int,
        > cat_id int,
        > merchant_id int,
        > brand_id int,
        > month string,
        > day string,
        > action int,
        > age_range int,
        > gender int,
        > province string)
        > comment 'create taobao.user_log'
        > row format delimited
        > fields terminated by ','
        > stored as textfile location '/taobao/dataset/user_log';
    
    hive> select *from user_log limit 10;
    OK
    328862	323294	833	2882	2661	08	29	0	0	1	内蒙古
    328862	844400	1271	2882	2661	08	29	0	1	1	山西
    328862	575153	1271	2882	2661	08	29	0	2	1	山西
    328862	996875	1271	2882	2661	08	29	0	1	1	内蒙古
    328862	1086186	1271	1253	1049	08	29	0	0	2	浙江
    328862	623866	1271	2882	2661	08	29	0	0	2	黑龙江
    328862	542871	1467	2882	2661	08	29	0	5	2	四川
    328862	536347	1095	883	1647	08	29	0	7	1	吉林
    328862	364513	1271	2882	2661	08	29	0	1	2	贵州
    328862	575153	1271	2882	2661	08	29	0	0	0	陕西
    Time taken: 2.493 seconds, Fetched: 10 row(s)
    

    二、Hive数据分析

    训练技能:

    • Hive基本操作之SQL查询分析
    • MySQL的基本操作
    • Sqoop的使用方法

    任务清单:

    • 对数据进行查询分析

    1. 查看hive的表

    启动hadoop,hive

    hive> use taobao;
    hive> show create table user_log;	#查看表的各种属性
    hive> desc user_log					#查看表的简单结构
    

    2. 简单查询分析

    hive> select brand_id from user_log limit 10;		#查看日志前10个交易日志的商品品牌
    

    3. 查询条数统计分析

    (1)count()

    hive> select count(*) from user_log;	#计算表内有多少条行数据
    

    在这里插入图片描述
    (2)distinct 过滤,去重,不重复user_id的数据有多少条

    select count(distinct user_id) from user_log;
    

    在这里插入图片描述(3)排除掉重复信息
    WHERE关键字在使用集合函数时不能使用,所以在集合函数中加上了HAVING来起到测试查询结果是否符合条件的作用。

    hive> select count(*) from (select user_id,item_id,cat_id,merchant_id,brand_id,month,day,action from user_log group by user_id,item_id,cat_id,merchant_id,brand_id,month,day,action having count(*)=1)a;
    

    4. 关键字条件查询分析

    (1)查询双11那天有多少人购买了商品

    hive> select count(distinct user_id) from user_log where action='2' and month=11 and day=11;
    

    (2)取给定时间和给定品牌,求当天购买的此品牌商品的数量

    hive> select count(distinct user_id) from user_log where action='2' and month=11 and day=11 and brand_id=2661;
    

    5. 用户实时查询分析

    不同的品牌的浏览次数

    hive> create table scan(brand_id INT,scan INT) COMMENT 'This is the search of bigdatataobao' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE; -- 创建新的数据表进行存储
    hive> insert overwrite table scan select brand_id,count(action) from user_log where action='2' group by brand_id; --导入数据
    hive> select * from scan; -- 显示结果
    

    三、导入MySQL

    任务清单

    • Hive预操作
    • 使用Sqoop把Hive的数据导入MySQL中

    1. hive创建内表

    hive> create table inner_user_log(user_id INT,item_id INT,cat_id INT,merchant_id INT,brand_id INT,month STRING,day STRING,action INT,age_range INT,gender INT,province STRING) COMMENT 'Welcome to XMU dblab! Now create inner table inner_user_log ' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
    
    #插入数据
    hive>  insert overwrite table inner_user_log select * from user_log;
    

    2. MySQL建表

    MySql中用一对反引号"`"来标注SQL语句中的标识,如数据库名、表名、字段名等。zhi反dao引号是非必须的,在确保不会导致歧义发生的情况下可以省略掉。

    mysql> create table `user_log` (
        -> `user_id` varchar(20),
        -> `item_id` varchar(20),
        -> `cat_id` varchar(20),
        -> `merchant_id` varchar(20),
        -> `brand_id` varchar(20),
        -> `month` varchar(6),
        -> `day` varchar(6),
        -> `action` varchar(6),
        -> `age_range` varchar(6),
        -> `gender` varchar(6),
        -> `province` varchar(10))
        -> engine=InnoDB
        -> default charset=utf8;
    #sqoop抓数据的时候会把类型转为string类型,所以mysql设计字段的时候,设置为varchar。
    

    3. 使用Sqoop将数据从Hive导入MySQL

    cd /usr/local/sqoop
    bin/sqoop export --connect jdbc:mysql://localhost:3306/taobao --username root --password root --table user_log --export-dir '/user/hive/warehouse/taobao.db/inner_user_log' --fields-terminated-by ',';
    

    在这里插入图片描述

    四、利用Spark预测回头客

    任务清单

    • 预处理训练集和测试集
    • 预测回头客

    1. 预处理训练集和测试集

    (1)把test.csv数据集里label字段表示-1值剔除掉,保留需要预测的数据.并假设需要预测的数据中label字段均为1.

    import pandas as pd
    df=pd.read_csv('/home/qnstar/Documents/datasets/data_format/test.csv')
    df['label']=df['label'].astype(str)		#将类型转换为string才能替换
    df1=df[~df['label'].isin([-1])]
    df['label']=df['label'].replace('nan','1')
    with open('/home/qnstar/Documents/datasets/data_format/test.txt','a+',encoding='utf-8') as f:
        for line in df.values:
            f.write((str(line[0])+','+str(line[1])+','+str(line[2])+','+str(line[3])+','+str(line[4])+'\n'))
    
    

    (2)剔除掉train.csv中字段值部分字段值为空的数据

    import pandas as pd
    df=pd.read_csv('/home/qnstar/Documents/datasets/data_format/train.csv')
    df1=df.dropna(axis = 0)
    df1['age_range']=df1['age_range'].astype(int)
    df1['gender']=df1['gender'].astype(int)
    df1=df1[~df1['label'].isin([-1])]
    print(df1.dtypes)
    with open('/home/qnstar/Documents/datasets/data_format/train.txt','a+',encoding='utf-8') as f:
        for line in df1.values:
            f.write((str(line[0])+','+str(line[1])+','+str(line[2])+','+str(line[3])+','+str(line[4])+'\n'))
    

    (3)删除train.csv字段名

    sed -i '1d' train.csv
    

    2. 预测

    用支持向量机进行预测

    from pyspark.ml.classification import LinearSVC
    from pyspark.ml.linalg import Vectors
    from pyspark.sql import SparkSession,Row
    from pyspark.ml.evaluation import MulticlassClassificationEvaluator
    #把文件拆分为标签列和特征列
    def splitDF(x):
        rel={}
        rel['features']=Vectors.dense(int(x[0]),int(x[1]),int(x[2]),int(x[3]))
        rel['label']=int(x[4])
        return rel
    
    spark=SparkSession.builder.master("local").appName("double11").getOrCreate()
    # 1.加载数据    封装为row对象,转换为dataframe类型,第一列为特征,第二列为标签
    training = spark.sparkContext.textFile("hdfs://localhost:9000/taobao/dataset/train.txt").map(lambda line:line.split(',')).map(lambda p:Row(**splitDF(p))).toDF()
    testing = spark.sparkContext.textFile("hdfs://localhost:9000/taobao/dataset/test.txt").map(lambda line:line.split(',')).map(lambda p:Row(**splitDF(p))).toDF()
    #2.构建模型
    dsvc = LinearSVC(maxIter=10, regParam=0.1).setFeaturesCol("label").setFeaturesCol('features')
    #3.训练模型
    dsvcModel = dsvc.fit(training)
    dsvcPredictions=dsvcModel.transform(testing)
    #4.输出预测结果
    preRel=dsvcPredictions.select("prediction","label","features").collect()
    for item in preRel:
        print(str(item['label'])+','+str(item['features'])+',prediction'+str(item['prediction']))
    #准确率
    evaluator=MulticlassClassificationEvaluator().setLabelCol("label").setPredictionCol("prediction")
    dAccuracy=evaluator.evaluate(dsvcPredictions)
    print(dAccuracy)
    
    展开全文
  • 城市空气质量分析与预测

    千次阅读 多人点赞 2020-04-13 16:31:38
    城市空气质量分析与检测一、AQI分析与预测1、背景信息2、任务说明3、数据集描述二、数据分析流程基本流程三、读取数据1、导入相关的库2、加载数据集 一、AQI分析与预测 1、背景信息 AQI指的是空气质量指数,用来衡量...
  • 进击的橘子猫正式改名上线啦! ... 也欢迎大家搜索微信公众号“进击的橘子猫”,我也会定期分享数据科学、Python、大数据、项目管理PPT的相关知识。 让我们进击起来吧!... 预测分析(Predicti...
  • 2.1 模型的假设说明 2.2 ARIMA 模型的建立 2.2.1 数据的初步分析 2.2.2 ARIMA 模型的定阶问题 2.2.3 ARIMA 模型的显著性检验 2.2.4 ARIMA 模型的预测 2.3 ARIMA-GARCH 模型的建立 2.3.1 GARCH 模型的条件检验 ...
  • python学生成绩分析与预测

    千次阅读 多人点赞 2020-05-08 21:50:51
    @大苏打TOC 欢迎使用Markdown编辑器 ...我们对Markdown编辑器进行了一些功能拓展语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会...
  • 2022年版中国电子信息产业趋势预测及投资战略规划分析报告 ═━┈┈━══━┈┈━══━┈┈━══━ 【出版机构】: 中商经济研究网 第一章 电子信息产业基本概述 1.1 信息相关产业分类 1.1.1 产业涵盖范围 ...
  • 预测分析法语法分析器的设计

    千次阅读 2021-12-14 23:58:35
    根据文法编制预测分析法语法分析程序,以便对输入的符号串进行语法分析。通过编写预测分析法语法分析程序掌握预测分析法的基本原理、FIRST和FOLLOW集的计算、预测分析表的构造方法以及语法分析法主控程序的设计。
  • NBA比赛数据分析与预测

    万次阅读 2017-11-01 10:48:11
    我的任务利用13到16年的NBA比赛统计数据,去预测...前期参考了https://www.shiyanlou.com/courses/782/labs/2647/document这里的分析与实现方法。这个实验楼里实现用了LogisticRegression。现在我想对数据做一些预处理
  • 预测分析及常用预测方法

    万次阅读 2020-11-06 14:43:18
    预测分析及常用的预测方法 预测的目的 数据分析最重要的目的就是从数据中寻找规律,找到能够指导我们未来实践的原则和方法,是产生智慧的主要途径。所以预测分析是数据分析的终极目的。虽然数据分析承担了很多功能...
  • 时间序列预测11:用电量预测 01 数据分析与建模

    万次阅读 多人点赞 2020-04-09 12:39:36
    通过之前有关LSTM的8遍基础教程和10篇处理时间序列预测任务的教程介绍,使用简单的序列数据示例,已经把LSTM的原理,数据处理流程,模型架构,Keras实现都讲清楚了。从这篇文章开始,将介绍有关时间序列预测和时间...
  • 财政收入影响因素分析预测模型。
  • 构建LL(1)预测分析表 对输入表达式进行LL(1)分析 异常处理机制 对于已完成的任务有不清楚的请参考第一篇文章 LL(1)分析法(一) ——文法预处理以及FIRST集FOLLOW集求解(编译原理) 下面废话少说让我们继续完成...
  • 数据分析 - 预测模型(学习笔记)

    千次阅读 2022-02-21 20:32:09
    快速预测的方法,只用excel就能搞掂哦。大部分日常工作的预测,都是基于连续几个数据,比如: 有今年1-5月销量,问6月销量咋样? 有最近10周的新增用户,问第11周有多少? 有过去30天的业绩,问今天业绩如何? ...
  • Python数据分析-房价预测及模型分析

    千次阅读 2021-09-17 01:21:25
    Python数据分析-房价的影响因素图解 上一篇OF讲述了房价的影响因素,主要是房屋面积、卫生间数、卧室数。今天,我们通过建立模型来预测房价。机器学习中关于回归算法-数据发展的预测,包含了几个模型: 1、线性...
  • 摘要:大数据分析要实现的应用领域之一就是预测分析,可视化分析和数据挖掘都是前期铺垫工作,只要在大数据中挖掘出信息的特点联系,就可以建立科学的数据模型,通过模型带入新的数据,从而预测未来的数据。...
  • 计算机毕业设计之大数据机器学习Python+SpringBoot考研分数分析与预测系统 大数据毕业设计 考研大数据分析 考研大数据预测 考研数据分析 KNN算法 人工智能
  • 写在前面下面这篇文章的内容主要是来自发表于TechRxiv 的一篇Preprint文章《Order Flow, Technical Analysis And Neural ...这篇文章提出了一种针对期货数据的短期预测模型,其对一系列来自技术分析、订单流的...
  • 蛋白质结构预测与分析

    千次阅读 2020-06-05 19:53:40
    蛋白质的结构 一级结构 氨基酸序列 二级结构 周期性的结构构象 ...整条多肽链的三维空间结构 ...蛋白质经过折叠后会形成规则的片段,...DSSP并不预测二级结构,而是根据二级结构的定义对已经测定三级结构的蛋白质的各.
  • 销售预测定量分析

    千次阅读 2018-03-30 17:32:03
    销售预测定量分析 定量预测法主要是根据有关的历史资料,运用现代数学方法对历史资料进行分析加工处理,并通过建立预测模型来对产品的市场变动趋势进行研究并作出推测的预测方法,如趋势预测分析法和因果预测分析法...
  • 01 引言 近些年,智能制造在流程工业生产中得到了示范应用,其重要性逐渐深入人心。国内外学者对于智能制造的理解和定义不尽相同。...预测性维护是以状态为依据的维修,是对设备进行连续在线的状态监测及数据分析
  • 2022-2028中国完全同态加密市场现状研究分析与发展前景预测报告 本文研究中国市场完全同态加密现状及未来发展趋势,侧重分析在中国市场扮演重要角色的企业,重点呈现这些企业在中国市场的完全同态加密收入、市场...
  • 中国教育信息化行业发展价值分析与运营前景展望报告2022版 ════════════════ 《修订日期》:2022年2月 《出版单位》:鸿晟信合研究院 《对接人员》:周文文 【内容分析有删减·了解详情可查看咨询...
  • 银行客户流失分析预测

    千次阅读 2020-09-27 17:22:20
    毫无疑问,客户流失会给银行带来大量损失。考虑到避免一位客户流失的成本很可能远低于挖掘一位新客户,对客户流失情况的分析预测至关重要。本文分析的数据为某银行10000条客户信息,有14个字段。 ...
  • 机器学习 线性回归分析预测棒球比赛数据

    千次阅读 多人点赞 2020-11-10 09:23:18
    机器学习,线性回归分析预测棒球比赛数据。
  • 运用python来分析预测药品销售情况.
  • 9 应用系统负载分析与磁盘容量预测

    千次阅读 2017-09-14 17:02:03
     本案例通过分析存储设备中磁盘容量预测,通过对磁盘容量的预测,可预测磁盘未来的负载情况,避免应用系统因出现存储容量耗尽的情况而导致应用系统负载率过高,最终引发系统故障。针对历史磁盘数据,采用时间序列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 335,804
精华内容 134,321
关键字:

信息分析与预测

友情链接: gpsPgprsP5110(sim300).rar