深度实践SPARK机器学习_学习笔记_第二章2.4探索数据1

2.4.1 数据统计信息

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

#初始化

import os
#导入需要的包
from pyspark.sql import SparkSession
from pyspark.sql import Row
#初始化SparkSession
spark = SparkSession\
        .builder \
        .appName("python Spark SQL basic example") \
        .config("spark.some.config.option","some-value") \
        .getOrCreate()
app_id = spark.sparkContext.applicationId
print(app_id)
# spark.stop()

#加载数据sc = spark.sparkContext
#数据质量分析,主要包括缺失值、异常值、不一致的值、错误数据
#导入需要的库
import pandas as pd
import matplotlib.pyplot as plt
#加载数据,使用标题行
df = pd.read_excel("catering_sale.xls",header=0)
df.count()

统计量分析:最大值、最小值、平均值、分位数、方差等

df.describe()

2.4.2 数据质量分析

#2.4.2 数据质量分析
#建立图像
plt.figure()

#画箱线图
bp = df.boxplot(return_type='dict')
x = bp['fliers'][0].get_xdata()
y = bp['fliers'][0].get_ydata()
y.sort()

#用annotata添加注释

for i in range(len(x)):
    plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.1-0.8/(y[i]-y[i-1]),y[i]))
plt.show()

2.4.3 数据特征分析

import os
#导入需要的包
from pyspark.sql import SparkSession
from pyspark.sql import Row
#初始化SparkSession
spark = SparkSession\
        .builder \
        .appName("python Spark SQL basic example") \
        .config("spark.some.config.option","some-value") \
        .getOrCreate()
app_id = spark.sparkContext.applicationId
print(app_id)
# spark.stop()

sc = spark.sparkContext
#加载textfile文件并转换为行式
userrdd = sc.textFile("hdfs://n&&&&&&¥%¥%/u.user").map(lambda line:line.split("|"))

#利用反射机制把rdd转换为dataframe
df = userrdd.map(lambda fields: Row(name=fields[0],age=int(fields[1]),gender=fields[2],occupation=fields[3],zip=fields[4]))

#把dataframe注册为一个table
schuser = spark.createDataFrame(df)
schuser.createOrReplaceTempView("user")(这里总报错,修改一下schuser名称,有可能是缓存问题)

#在table上运行Sql
age=spark.sql("select age from user")

import matplotlib.pyplot as plt
#把运行结果转换为RDD
ages = age.rdd.map(lambda p :p.age).collect()
plt.hist(ages,bins=20,color='lightblue',normed=True)   #这里原书中没有import matplotlib.pyplot as plt,也没有写plt.hist,只是写成hist,报错:NameError: name 'hist' is not defined

#还可以分析用户职业分布特征

#选取用户职业信息

#选取用户职业数据
count_occp=spark.sql("select occupation,count(occupation) as cnt from user group by occupation order by cnt")
count_occp.show(5)

import matplotlib.pyplot as plt
#获取职业名和职业数,以便画出各职业总数的图形,把运行结果转化为rdd
x_axis = count_occp.rdd.map(lambda p: p.occupation).collect()
y_axis = count_occp.rdd.map(lambda p: p.cnt).collect()
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(10,10)  ##设置当前figure大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学习指南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值