您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数据特征分析

宝哥大数据 发布时间:2019-05-25 12:32:28 ,浏览量:0

数据特征分析  特征分布分析  对比分析  统计量分析

 特征一般指用于模型训练的变量,原始数据中的特征有些是数值,格式信息,但在进行机器学习前,都需要转换为数值。根据实际情况,有些是字符或其他有时需要根据已有特征生成或衍生出新特征,如根据用户年龄衍生出表示老、中、青的新特征;有时需要对一些特征进行规范化、标准化等转换,尤其是回归类模型。

一、特征分布分析

 特征的分布分析有助于发现相关数据的分布特征、分布类型、分布是否对称等,使用数据可视化方法,这样便于直观发现特征的异常值。下面以用户信息数据为例,

1.1、分析用户的年龄特征
from pyspark import Row
from pyspark.sql import SparkSession

import pandas as pd
import matplotlib.pyplot as plt

spark = SparkSession.builder.appName("test01") \
    .getOrCreate()

sc = spark.sparkContext
def test():
    userrdd = sc.textFile("hdfs://192.168.179.14:8020/mlDataSet/ml-100k/u.user") \
        .map(lambda line: line.split("|"))

    # 利用反射机制, 将RDD转为DataFrame
    df = userrdd.map(lambda fields: Row(userid=fields[0], age=int(fields[1]), gender=fields[2],
                                        occupation=fields[3], zip=fields[4]))
    schemauser = spark.createDataFrame(df)

    schemauser.createOrReplaceTempView("user")

    # schemauser.describe("userid", "age", "gender", "occupation", "zip").show()

    age = spark.sql("SELECT age FROM user")
    ages = age.rdd.map(lambda p: p.age).collect()

	
    plt.figure()
    # 绘制用户年龄分布图
    plt.hist(ages, bins=20, color='lightblue', density=False, alpha=0.5)
    plt.show()

每个字段的统计信息    
schemauser.describe("userid", "age", "gender", "occupation", "zip").show()
    

+-------+-----------------+-----------------+------+-------------+------------------+
|summary|           userid|              age|gender|   occupation|               zip|
+-------+-----------------+-----------------+------+-------------+------------------+
|  count|              943|              943|   943|          943|               943|
|   mean|            472.0|34.05196182396607|  null|         null| 50868.78810810811|
| stddev|272.3649512449549|12.19273973305903|  null|         null|30891.373254138158|
|    min|                1|                7|     F|administrator|             00000|
|    max|               99|               73|     M|       writer|             Y1A6B|
+-------+-----------------+-----------------+------+-------------+------------------+
用户年龄特征分布

在这里插入图片描述

1.2、分析用户职业分布特征
def test():
    userrdd = sc.textFile("hdfs://192.168.179.14:8020/mlDataSet/ml-100k/u.user") \
        .map(lambda line: line.split("|"))

    # 利用反射机制, 将RDD转为DataFrame
    df = userrdd.map(lambda fields: Row(userid=fields[0], age=int(fields[1]), gender=fields[2],
                                        occupation=fields[3], zip=fields[4]))
    schemauser = spark.createDataFrame(df)
    schemauser.createOrReplaceTempView("user")
	
	plt.figure()
    # 用户职业特征分布
    count_occp = spark.sql("SELECT occupation, COUNT(occupation) as cnt FROM user "
                           "GROUP BY occupation order by cnt DESC")
    count_occp.show(5)
    x_axis = count_occp.rdd.map(lambda p: p.occupation).collect()
    y_axis = count_occp.rdd.map(lambda p: p.cnt).collect()

    import numpy as np
    pos = np.arange(len(x_axis))

    width = 1.0
    # 隐式增加一个figure, 或为当前figure新增一个axes
    ax = plt.axes()
    ax.set_xticks(pos + (width / 2))        # 设置x轴的刻度
    ax.set_xticklabels(x_axis)              # 为对应刻度打上标签
    plt.bar(pos, y_axis, width, color='orange')
    plt.xticks(rotation=30)                 # x轴上的标签旋转30度
    fig = plt.gcf()                         # 获取当前figure应用
    fig.set_size_inches(16, 10)             # 设置figure的大小
    plt.show()      

 从下图所示的用户职业分布图可以看出,学生占绝大多数,其次是其他职业从业者、 教育工作者、管理者、工程师等。医生、家庭主妇或许平时较忙,故数量比较少。 在这里插入图片描述

二、特征分布及相关性分析

 在数据探索阶段分析特征分布、特征间的相关性等,将为后续的特征选择、特征提取 将提供重要依据。

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0395s