Python大数据处理与分析期末考试试卷习题题库及习题答案16_第1页
Python大数据处理与分析期末考试试卷习题题库及习题答案16_第2页
Python大数据处理与分析期末考试试卷习题题库及习题答案16_第3页
Python大数据处理与分析期末考试试卷习题题库及习题答案16_第4页
Python大数据处理与分析期末考试试卷习题题库及习题答案16_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章

1.简述什么是Python以及Python有哪些特点。

答:

Python是1989年荷兰人GuidovanRossum发明地一种面向对象地解释型编

程语言。Python语言简洁,易读以及可扩展性好,语法非常清晰,而且Python地拓

展库丰富,具有脚本语言中最丰富与强大地类库。Python语言及其众多地扩展库

构成地开发环境十分适合工程技术,科研人员处理实验数据,制作图表,甚至开发

科学计算应用程序。

2.Python在Linux系统地安装主要分为哪几步。

答:

(1)检查Python版本(2)下载源码包(3)解压编译源码(4)安装Python

(5)调整系统默认Python指向

3.简述Anaconda地特点与作用。

答:

Anaconda是基于Python地数据处理与科学计算平台,它内置了许多非常有用

地第三方库,其内部包含了conda,Python在内地超过180个科学包及其依赖项。

Anaconda是在conda(一个包管理器与环境管理器)上发展出来地。安装Anaconda.

就相当于把Python与一些如Numpy,Pandas,Scrip,Matplotlib等常用地库自动安装

好了,比在常规Python环境下安装这些组件更容易。

总结起来,Anaconda具有四大特点:①开源;②集成安装;③高性能使用Python

与R语言;④免费地社区支持。

4.简述Jupyter与PyCharm地区别。

答:

JupyterNotebook是一个交互式笔记本,一种模块化地Python编辑器,支持运

行40多种编程语言。它地本质是一个Web应用程序,便于创建与共享程序文档,

数学方程,可视化与markdown等。在Jupyter中,可以把大段地Python代码碎片

化处理,分开每一段来运行。在软件开发中,Jupyter可能显得并没有那么好用,这个

模块化地功能反而会破坏掉程序地整体性。但是当在做数据处理,分析,建模,观察

结果等地时候,Jupyter模块化地功能不仅会提供更好地视觉体验,更能大大缩小运

行代码及调试代码地时间,同时还会让整个处理与建模地过程变得异常清晰。

Pychann是一种PythonIDE,其有一整套可以帮助用户在使用Python语言开

发时提高其效率地工具,如调试,语法高亮,Project管理,代码跳转,智能提示,自动补

全,单元测试,脚本控制等。此外,该IDE还提供了用户支持Django框架下地专业

Web开发。Pycharm作为专业地IDE,比JupyterNotebook更适合完整项目地开发,

而JupyterNotebook则更适合数据分析与建模。

第2章

1.简述什么是NumPy,如何安装NumPy。

答:

NumPy(NumericalPython)是Python地一种开源地数值计算扩展。这种工

具可用来存储与处理大型矩阵,比Python自身地嵌套列表(nestedliststructure)结

构要高效地多(该结构也可以用来表示矩阵(matrix)),支持大量地维度数组与

矩阵运算,此外也针对数组运算提供大量地数学函数库。

NumPy地安装需要在电脑上打开d,然后使用pip工具安装。

2.数组对象地属性有哪些?

答:

属性具体说明

ndarray.ndim维度个数,也就是数组轴地个数,比如一维,二维,三维等

数组地维度。这是一个整数地元组,表示每个维度上数组地大小。例

ndarray.shape

如,一个n行与m列地数组,它地shape属性为(n,m)

ndarray.size数组元素地总个数,等于shape属性中元组元素地乘积

描述数组中元素类型地对象,既可以使用标准地Python类型创建或

ndarray.dtype指定,也可以使用NumPy特有地数据类型来指定,比如

NumP32,NumPy.float64等

数组中每个元素地字节大小。例如,元素类型为float64地数组有8

ndarray.itemsize

(64/8)个字节,这相当于ndarray.dtype.itemsize

3.Python中数组地自增自减运算有什么特点?

答:

Python中没有"-"或"++”运算符,因此,对变量进行自增自减需要使用“+="或"-

="运算符来完成,运算地结果不是赋值给一个新数组,而是修改实际数据,即原来

地数值发生了改变。

4.求下列矩阵地逆:

arrayl=np.array([[l,4,7],[2,5,8],[3,6,9]])

答:

importNumPyasnp

arrayl=np.array([[l,4,7],[2,5,8],[3,6,9]])#创建一个二维数组

np.linalg.inv(array1)

5.编程题:使用NumPy数组对象,创建两个3*3地矩阵,并计算矩阵乘法。

答:

importNumPy.matlib

importNumPyasnp

array1=np.array([[2,4],[6,81D#创建一个二维数组

array2=np.array([[22,44],[66,88]])#创建一个二维数组

np.dot(array1,array2)#使用dot。函数求数组地乘积

6.计算吗+[+'+...+专地与。

答:

importNumPyasnp

array1=np.arange(l,l00,2)

sum=0

foriinarray1:

sum+=(l/i)

print(sum)

第3章

1.简述什么是Pandas,如何安装Pandas?

答:

Pandas是基于NumPy地一种工具,该工具是为解决数据分析任务而创建地。

Pandas纳入了大量库与一些标准地数据模型,提供了高效地操作大型数据集所需

地工具。Pandas提供了大量能使我们快速便捷地处理数据地函数与方法,是使

Python成为强大而高效地数据分析环境地重要因素之一。

Pandas地安装需要在电脑上打开d,然后使用pip工具安装

2.简述Pandas与NumPy地区别与联系。

答:

NumPy中地ndarray用于处理多维数值型数组,重点在于进行数值运算,无索

引。Pandas中地Series类似于DataFrame地子集,DataFrame中地每一列都可以看

作是一个Series,有索引,方便进行数据地查询,筛选,所以Pandas重点在于进行数

据分析。在数学与统计方法上,NumPy中地ndarray只能进行数值型统计,而Pandas

中地DataFrame既可以进行数值型,也可以进行非数值型统计。

3.Series对象与DataFrame对象有什么区别?

答:

Series是Pandas中最基本地对象,类似于一维数组地对象,由一组数据与一组与之有关地

数据标签(索引)组成。DataFrame对象地数据结构跟excel表相似,其目地是将Series地使

用场景由一维扩展到多维,它由按一定顺序排列地多列数据组成,各列地数据类型可以有所不

同。

4.如何使用对象快速导入导出数据?

答:

导入数据使用函数read_csv(filrpath,sep,names,encoding)。

导出数据使用to_csv(filrpath,sep,names,encoding)。

5.尝试掷骰子100次,在excel表格里记录每一次地值,尝试将此数据使用Pandas

做统计分析。

答:

使用导入数据使用read_csv(filrpath,sep,names,encoding)函数将数据导入Pandas变量中,

然后使用各种统计函数对数据进行分析。

6.创建学生成绩excel表,快速完成成绩统计与分析。

答:

使用导入数据使用函数read_csv(filrpath,sep,names,encoding)将数据导入Pandas变量中,

然后使用各种统计函数对数据进行分析,如3.5案例所示,然后完成数据分析与修改补充后,导

出数据使用tocsv(filrpalh,sep,names,encoding)函数。

第4章

1.简述使用Matplotlib进行数据可视化地绘图步骤。

答:

(1)导入第三方包(2)准备数据(3)函数绘图(4)完善图表(5)展示结

2.折线图,柱状图,直方图撤点图,等值线图分别用什么函数绘制,它们地常用参数

有哪些?

答:

(1)折线图:pyplot.plot。常用参数:x,y,format_string,**kwargs

(2)柱状图:pyplot.bar()常用参数:x,height,width,bottom,align,data,

**kwargs

(3)直方图:pyplot.hist。常用参数:x,bins,weights,bottom,histtype,align,

orientation,rwidth,color,label,stacked,**kwargs

(4)散点图:pyplot.scatter。常用参数:x,y,s,c,marker,ap,vmin,vmax,alpha,

linewidths,edgecolors,**kwargs

(5)等值线图:pypk)t.contourf()常用参数:x,y,z,levels,**kwargs

pyplot.contour()常用参数:x,y,z,levels,**kwargs

3.简述基础类元素与容器类元素分别有哪些,它们地关系是什么?

答:

基础类元素:线(line),点(marker),文字(text),图例,图表标题,图片(image)等

容器类元素:图形,坐标图形,坐标轴(axis)与刻度(tick)。

容器类元素可以包含许多基础类元素并将它们组织成一个整体,它们也有层

级结构:图形包含坐标图形;坐标图形包含坐标轴;坐标轴又包含刻度。

4.常用地图形元素设置函数有哪些,它们地作用分别是什么?

答:

1.添加图例与标题。添加图例一般使用legend。函数,添加标题使用title。函

数。

2.调整刻度格式与设置刻度标签。对x,y轴地刻度范围设置一般用到xlim()

与ylim()两个函数;标题设置一般使用xlabel()与ylabel()两个函数;内容与格式设

置一般使用xticks()与yticks()两个函数。

3.为图表添加网格线。绘制网格线一般使用grid()函数。

4.绘制参考线。绘制参考线一般使用axhline。与axvline。两个函数。

5.添加图表注释。绘制注释一般使用annotate。与text。函数,分别用于添加指

向型注释文本与无指向型注释文本。

6.向统计图形添加表格。绘制表格一般使用table。函数。

5.简述怎样使用用颜色参数与颜色映射来调整图形。

答:

1.在函数中使用颜色参数。a.使用英文全称来给color参数赋值从而进行颜

色设置。b.使用英文缩写来进行颜色设置。C.使用Hex模式地#RRGGBB字符串来进

行颜色设置。d.用三元(RGB)或四元(RGBA)元组来进行颜色配置。

2.在函数中使用颜色映射表。a.使用给关键字参数指定颜色映射表名地方式

来配置图表颜色。b.使用给matplotlib.pyplot.set」ip()函数传入相应颜色映射表名

地方式来配置图表颜色。

常用地颜色映射表

有:autumn,bone,cool,copper,flag,gray,hot,hsv,jet,pink,spring,summer,winter等。

第5章

1.字符串有哪些方法?它们地特点分别是什么?

答:

字母小写str.lower。,字母大写str.upper。,统计次数str.count(sub),将字符串str

按sep分割str.split(sep=None),字符替换str.replace(o】d,new)等方法,特点是对字符

串分别实现各自对应地功能。

2.什么是正则表达式?

答:

正则表达式(英文:RegularExpression),在计算机科学中,是指一个用来描述

或者匹配一系列符合某个句法规则地字符串地单个字符串。在很多文本编辑器或

其它工具里,正则表达式通常被用来检索与/或替换那些符合某个模式地文本内容

3.Python中异常值如何处理?

答:

(1)重复数据地预处理

重复数据指多次出现地数据。对于一般数量可控地重复数据,通常采用地方法

是简单地比较算法剔除。对于重复地可控数据而言,一般通过代码实现对信息地

匹配比较,进而确定,剔除不需要地数据。

(2)异常数据地预处理

异常数据是无意义地数据,这个词通常作为损坏数据地同义词使用,但现阶段

其意义已经扩展到包含所有难以被计算机正确理解与翻译地数据,如非结构化文

本。任何不可被源程序读取与运用地数据,不管是已经接收地,存储地,还是改变地,

都被称为噪声数据。

(3)缺失数据地预处理

缺失数据表示数据不完整,信息丢失,因而无法完成有关匹配与计算,如信息统

计中年龄与性别丢失地情况。缺失数据地处理主要有4种方式:均值补差,利用同

类均值补差,极大似然估计,多重补差。从简单意义上讲,均值补差与利用同类均值

补差是思维简单地处理方式,在实际中应用比较广泛。极大似然估计是在概率上

用最大可能地方式处理数据地缺失问题,其存在局部极值而且收敛速度过慢,计算

较为复杂等问题。多重补差是为每一个缺失值提供一个可能地替换值,以确保其

无关性,构成替换阈,再根据其自由组合,从而对每一个替换结果进行总体预测,对

结论进行总体评判。多重补差这种思想来源于贝叶斯极大似然法,但比该方法在

预判性上产生更多地多元化操作。

4.如何整理数据并对数据进行预处理?

答:

数据预处理有多种方法:数据清理,数据集成,数据变换,数据归约等。数据清洗

是对"脏"数据地处理,需要被清理地数据一般有以下类型:重复数据,异常数据,缺

失数据。数据集成是把不同来源,格式,特点性质地数据在逻辑上或物理上有机地

集中。数据变换主要找到数据地特征表示,用维变换成转换方法减少有效变量地

数目或找到数据地不变式,包括规格化,归约,切换,旋转与投影等操作。数据归约是

指在尽可能保持数据原貌地前提下,最大限度地精简数据量。

5.数据降维地好处是什么?

答:

运用PCA对高维数据进行降维,有一下几个特点:

(1)数据从高维空间降到低维,因为求方差地缘故,相似地特征会被合并掉,因

此数据会缩减,特征地个数会减小,这有利于防止过拟合现象地出现。但PCA并不

是一种好地防止过拟合地方法,在防止过拟合地时候,最好是对数据进行正则化;

(2)使用降维地方法,使算法地运行速度加快;

(3)减少用来存储数据地内存空间;

(4)从x(i)到z⑴地映射过程中,对训练数据进行降维,然后对测试数据或验

证数据进行降维;

6.什么是稀疏矩阵?如何使用字典学习?

答:

稀疏表示就是用较少地基本信号地线性组合来表达大部分或者全部地原始

信号。其中,这些基本信号被称作原子,是从过完备字典中选出来地;而过完备字典

则是由个数超过信号维数地原子聚集而来地。可见,任一信号在不同地原子组下

有不同地稀疏表示。假设用一个M*N地矩阵表示数据集X,每一行代表一个样本,

每一列代表样本地一个属性,一般而言,该矩阵是稠密地,即大多数元素不为Oo稀

疏表示地意义是寻找一个系数矩阵A(K*N)以及一个字典矩阵B(M*K),使得

B*A尽可能地还原X,且A尽可能地稀疏。A便是X地稀疏表示。

像列表一样,"字典"是许多值地集合。但不像列表地下标,字典地索引可以使用

许多不同数据类型,不只是整数。字典地索引被称为“键”,键及其关联地值称为"键

-值”对。在代码中,字典输入时代花括号{}。字典学习地算法理论包含两个阶段:

字典构建阶段(DictionaryGenerate)与利用字典(稀疏地)表示样本阶段(Sparse

codingwithapreputeddictionary),这两个阶段地每个阶段都有许多不同算法可供

选择。字典学习地第一个好处是它实质上是对于庞大数据集地一种降维表示;第

二个好处是正如同字是句子最质朴地特征一样,字典学习总是尝试学习蕴藏在样

本背后最质朴地特征(假如样本最质朴地特征就是样本最好地特征)。稀疏表示

地本质:用尽可能少地资源表示尽可能多地知识,这种表示还能带来一个附加地好

处,即计算速度快。我们希望字典里地字可以尽能地少,但是却可以尽可能地表示

最多地句子。这样地字典最容易满足稀疏条件。

第6章

上机实验

3.实验步骤

(1)打开JupyterNotebook工具,使用Pandas模块读取6.3节所提供压缩文件(房产信

息.rar)中地锦江.xlsx,按照6.3.1节中地步骤与格式完成数据地预处理,预处理完成之后保存

为xlsx文件,文件名:锦江一预处理.xlsx。注意:由于读入数据存在一定差异,步骤可能略有不同。

步骤1)中地代码大部分与6.3.1节中代码相同,仅在数据读取部分不同,这里仅给出数据

读取部分地代码:

file=,锦江.xlsx,

data=pd.read_excel(file)

data#预览数据

(2)读入第一步处理好地数据文件:锦江一预处理.xlsx,结合Pandas,Matlibplot模块,绘制

以下图表:房源所在楼层分布地柱状图(横坐标:低楼层,中楼层与高楼层,纵坐标:房源数量),

二手房总价前10名地柱状图(横坐标:总价,纵坐标:位置信息),房屋单价与面积地散点图(横

坐标:单价,纵坐标:房屋面积)。提示:可依次参考图6-22,图6-21与图6-24。

首先读取上一步处理好地数据:

input_file_path=,锦江_预处理.xlsx,

data=pd.read_excel(input_file_path)

房源所在楼层分布地柱状图:

#统计房屋楼层分布

data[['高楼层','中楼层','低楼层1]].sum().plot(kind='bar',rot=0)

pit.ylabel(1房源数量1)

在JupyterNotebook工具中看到以下输出信息,如图6-1所示。

底楼层中蜗低楂层

图6-1房源所在楼层分布地柱状图

二手房总价前10名地柱状图:

#设置记录个数

ntop=10

#按单价对数据进行排序

data_top=data.sort_values(by=*,ascending=False)[:ntop]

#设置数据

y=range(len(data_top.总价))

width=data_top.总价

y_label=data_top.位置信息+1(1+data_top.区域+1)'

#plot

fig=pit.figure(figsize=(12,4),dpi=900)

ax=fig.add_subplot(121)

ax.set_title('锦江区二手房总价toplO')

1

ax.barh(y,width,facecolor='bisquezedgecolor=*pink,,

height=0.5,tick_label=y_label)

pit.show()

在JupyterNotebook工具中看到以下输出信息,如图6-2所示。

1600

图6-2二手房总价前10名地柱状图

房屋单价与面积地散点图:

nn

data.plot(kind=scatterzx="单价",y="面积”,alpha=0.4)

在JupyterNotebook工具中看到以下输出信息,如图6-3所示。

300-

250-

200-

100-

50-

12345678

单价

图6-3房屋单价与面积地散点图

(3)读入第一步处理好地数据文件:锦江—预处理.xlsx,结合Pandas,Sklearn模块建立多

元回归模型。选择房屋所在区域,户型,面积,朝向为输入特征属性作为回归自变量,房屋单

价为因变量,测试集与训练集比例为2:8,并计算MSE,MAE,R?与此等评价指标。

导入实验所需要地包:

importpandasaspd

importnumpyasnp

importmatplotlib.pyplotaspit

fromsklearn.model_selectionimporttrain_test_split#划分测试集与训练集

fromsklearn.linear_modelimportLinearRegressionasLR#回归模块

#在ipython中直接显示图像

%matplotlibinline

#设置绘图显示中文字体

pit.reParams[*font.sans-serif]=['MicrosoftYaHei1]

读取数据:

input_file_path=,锦江_预处理.xlsx,

data=pd.read_excel(input_file_path)

选择自变量与因变量:

#特征提取

unit_price=data.单价

house_area=data.面积

house_type=室0厅IF室1厅I室2厅I室。厅I室1厅I

,室2厅I,3室0厅I,3室1厅I,室2厅I室3厅I

F室0厅,,F室1厅I乜室2厅I室1厅I室2厅I

室3厅I室2厅I,9室2厅

region=data[[,锦江,]]

house_dirt=data【U东l,南,,,西l,北l,东北l,东南l,西南I,西北

#选择自变量与因变量

X=pd.concat([house_area,house_type,region,house_dirt],axis=l)

Y=unit_price

设置训练集与测试集:

#设置训练集与测试集

Xtrain,Xtest,Ytrain,Ytest=train_test_split(X,Y,test_size=O.2,

random_state=420)

建立线性回归模型:

#线性回归

reg=LR().fit(Xtrain,Ytrain)

#预测

yhat=reg.predict(Xtest)

模型效果评价:

#用于检验模型效果

fromsklearn.metricsimportmean_squared_error#MSE

fromsklearn.metricsimportmean_absolute_error#MAE

fromsklearn.metricsimportr2_score#R2

mse=mean_squared_error(Ytest,yhat)#MSE

mae=mean_absolute_error(Ytest,yhat)#MAE

r2=r2_score(Ytest,yhat)#R2

#调整R2

n=Xtest.shape[0]

k=Xtest.shape[1]

adj_r2=1-(l-r2)*((n-1)/(n-k-1))

print('MSE:'+str(mse))

print('MAE:'+str(mae))

print('R2:1+str(r2))

print。调整R2:'+str(adj_r2))

在JupyterNotebook工具中看到以下输出信息,如图6-4所示。

MSE:0.4252265402966633

MAE:0.5032426495187453

R2:0.0777469247413266

调整R2:0.02173155357594081

图6-4模型效果评价

4.实验总结与思考

D哪一类型地数据需螃用独热编鹤处理?___________________________________

在遇到分类特征时,离散其特征取值之间没有大小意义。换句话说,这些特征

值不是连续地,而是无序且离散地。这时就需要独热编码处理,例如:性别有男有女,

颜色有红色,蓝色与绿色等等。

2)对于多元回归模型有哪些评价指标,侧重于模型地嘟方面评价?_________________

多元回归模型有均方误差MSE,平均绝对误差MAE,多重判定系数R2与调整

多重判定系数形等评价指标,前两者侧重于评价模式是否预测到了正确地数值,

后两者侧重于评价模型是否拟合到了足够地信息。

第7章

3.实验步骤

代码:(注:该代码采用在JupyterNoteBook上分段运行)

1.数据预处理

importpandasaspd

importmatplotlib.pyplotaspit

fromsklearn.clusterimportKMeans

datafile="RFM聚类分析.xlsx”

data=pd.read_excel(datafile,encoding=

data.head(lO)

#----------------------#

data.shape

#----------------------#

print(())

#-------------------------#

data.isnull()

#------------------------#

data.isnull().sum()

#------------------------#

data.describe()

#------------------------#

(data==0).any()

#------------------------#

forcolindata.columns:

count=0

count=[count+1forxindatafcol]ifx==0]

print(col+,'+str(sum(count)))

#-------------------------#

index1=(data["gendern]==0)&(data[Hagen]==0)

n

index2=(data["pay_num"]二二0)|(data[pay_times"]==0)

index4=((data[ngender"]!=0)|(data[Hagen]!=0))&((datarpay_num[!=0)&

(data["pay_timesn]!=0))

index3=((data—gender"]==0)&(data[nagen]==0))|((data[npay_num"]==0)|

(data["pay_timesn]==0))

index3.index

#------------------------#

data=data.drop(data[index3].index)

#------------------------#

data.shape

#------------------------#

data.duplicated().sum()

#------------------------#

data.duplicated(「user_id']).sum()

#------------------------#

data=data.drop_duplicates([,user_id,])

#------------------------#

data.shape

#-----------------------#

gender=pd.value_counts(data[,gender,])

age=pd.value_counts(data「age'])

2.样本提取

data_select=data[['user_id',,pay_num,,,pay_times,,,last_pay_time,]]

data_select.head()

#-----------------------#

data_select.columns=「用户id?消费金额;消费次数?最后一次消费时间]

data_select.head()

#------------------------#

fromdatetimeimportdatetime

exdata_date=datetime(2016,7,20)

start_date=datetime(2016,6,1)

print(exdata_date)

print(start_date)

##

data_select]最后一次消费时间[二pd.to_datetime(data_select「最后一次消费时

间口)

data_select['R(最后一次消费距提数日时间)']=exdata_date_data_select['最后

一次消费时间']

data_select.head()

#-----------------------#

frommathimportceil

period_day=data_select['最后一次消费时间']-start_date

period_month=[]

foriinperiod_day:

period_month.append(ceil(i.days/30))

print(period_month)

print(叫"*110)

foriinrange(0,len(period_month)):

ifperiod_month[i]==0:

period_month[i]=1

print(period_month)

#---------------#

data_select「F(月均消费次数)']=data_select「消费次数」/period_month

data_select.head()

#---------------#

data_select「M(月均消费金额)1=data_select「消费金额1/period_month

data_select

#---------------#

#去掉列标题空白

data_select=data_select.rename(columns=lambdax:x.strip())

#保存数据

output_file_path廿移动公司客户信息预处理.xlsx'

data_select.to_excel(output_file_path,index=False)

importpandasaspd

importmatplotlib.pyplotaspit

fromsklearn.clusterimportKMeans

datafile二”移动公司客户信息预处理.xlsx”

data=pd.read_excel(datafile,encoding=*'utf-8n)

data.head(lO)

#---------------#

cdata=data[[R(最后一次消费距提数日时间)?F(月均消费次数)?M(月均消费

金额)']]

cdata.index=data「用户id']

z_cdata二(cdata-cdata.mean())/cdata.std()

z.cdata.columns=「R(标准化)','F(标准化)?M(标准化川

z_cdata.head()

4.模型建主与分类

#模型构建

SSE二口

forkinrange(l,9):

estimator=KMeans(n_clusters=k)

estimator.fit(z_cdata)

SSE.append(estimator.inertia.)#样本到最近地聚类中心地距离平方之与

X=range(1,9)

plt.rcParamstTont.sans-serif]=['MicrosoftYaHei1]

#plt.figure(dpi=128,figsize=(8,4))

plt.xlabelCl值)

plt.ylabel('SSE')

plt.plot(X,SSE;o-t)

pit.title(“肘部图”)

plt.saveflg("肘部图”,dpi=128)

plt.show()

#-------------------------#

kmodel=KMeans(n_clusters=4,njobs=4,max_iter=100,random_state=0)

kmodel.fit(z_cdata)

#------------------------#

kmodel.labels_

#------------------------#

kmodel.cluster_centers_#查看聚类中心

5.整合结果

rl=pd.Series(kmodel.labels_).value_counts()#统计所属各个类别地数据个数

r2二pd.DataFrame(kmodeLcluster_centers_)#找出聚类中心

r二pd.concat([r2,rl],axis=1)#横向连接(0是纵向),得到聚类中心对应地类

别下地数目

r.columns=+「各类别人数']#重命名表头

r

#------------------------#

KM_data=pd.concat([z_cdata,pd.Series(kmodel.Iabels_,index=

z_cdata.index)],axis=1)

KM_data.columns=list(z_cdata.columns)+[类别]

KM_data.head()

#-----------------------#

datal=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)

datal.columns.list(data.columns)+[类别']

datal.headO

#-----------------------#

kmeans_analysis=KM_data.groupby(KM_data「类另叫).mean。

kmeans_analysis.columns=

kmeans_analysis

#------------------------#

KM_data「用户id*]=KM_data.index

#保存数据

output_file_path廿类另U-客户信息对应(标准化数据).xlsx,

KM_data.to_excel(output_file_path,index=False)

output_file_path='类另ij-客户信息对应(预处理数据).xlsx'

data1.to_excel(output_file_path,index=False)

output_file_path='聚类结果统计.xlsx,

r.to_excel(output_file_path,index=False)

6.数据可视化

plt.rcParamst'font.sans-serif]='SimHei'

gender=pd.value_counts(data[,gender,])

age二pd.value_counts(data['age'])

plt.bar(gender.index,gender,width=0.5,tick_label=['^',,^C,],color=,c,)

plt.xlabel,性另『,fontsize=12)

plt.ylabelC人数;fontsize=12)

plt.title("性别-人数统计图”,fontsize=16)

plt.saveflg("性另I」-人数统计图\dpi=128)

plt.show()

#-----------------------#

age=age.sort_index()

plt.figure(figsize=(10,6))

plt.plot(age.index,age)

plt.xticks(range(0,80,5),fontsize=12)

plt.yticks(range(2,20),fontsize=12)

plt.grid(ls=,:,,alpha=0.8)

plt.xlabelf年龄;fontsize=14)

plt.ylabel(,A^,,fontsize=14)

plt.title("年龄■人数统计图”,fontsize=20)

plt.fill_between(age.index,age,color='c',alpha=0.3)

plt.saveflg("年龄-人数统计图”,dpi=128)

plt.show()

#---------------#

kmeans_analysis.plot(kind='bar;rot=0,yticks=range(-1,9))

pit.title(“聚类结果统计柱状图”)

plt.xticks(range(0,4)1第0类,第1类,第2类;第3类1)

plt.grid(axis=,y,,color-grey,,linestyle=,-\alpha=0.5)

plt.ylabel(nRFM三个指标均值”)

pit.savefig("聚类结果统计柱状图\dpi=128)

#---------------#

r.plot(kind='bar',y='各类另U人数;rot=0)

plt.xlabel("类别”,fontsize=14)

plt.ylabel("人数”,fontsize=14)

plt.title(”聚类结果各类别人数统计",fontsize=16)

pit.savefig("聚类结果各类别人数统计”,dpi=128)

#-----------------------#

importnumpyasnp

center_num=kmeans_analysis.values

#绘图

fig=plt.figure(figsize=(10,8))

#设置为极坐标模式

ax=fig.add_subplot(111,polar=True)

feature=[nRn,nFH,nMn]

N=len(feature)

fori,vinenumerate(center_num):

#设置雷达图地角度,用于平分切开一个圆面

angles=np.linspace(O,2*np.pi,N,endpoint二False)

#为了使雷达图一圈封闭起来,需要下面地步骤

center=np.concatenate((v[:],[v[0]]))

angles二np.concatenate((angles,[angles[0]]))

#绘制折线图

ax.plot(angles,center,'o-',linewidth=2,label="第%d类型"%⑴)

#填充颜色

ax.fill(angles,center,alpha=0.25)

#添加每个特征地标签

ax.set_thetagrids(angles*180/np.pi,feature,fontsize=15)

#添加标题

plt.title('客户群特征分析图,,fontsize=20)

#添加网格线

ax.grid()

#设置图例

plt.legend(loc='upper

right',bbox_to_anchor=(1.2,1.0),shadow=True,fontsize=12)

#保存图形

#plt.savefig('客户群特征分析图',dpi=128,bbox_inches='tight')

#显示图形

plt.show()

4.实验总结与思考

(1)除了RFM三个特征,还可以提取出哪些特征来作为聚类地指标?

(2)如何根据肘部法选择可能地k值,怎样筛选出最合适地k值?

(3)如何根据聚类结果中各聚类中心坐标来定位各类别所代表地客户群体?

答:

(1)其它可利用地特征有很多,比如年龄,性别;或是将本案例使用地RFM中

地M改为对流量地统计或是通话时间地统计。

(2)使用肘部法需要探究每种分类情况下地平均聚类畸变程度,k值从I开

始遍历分别进行聚类,每次聚类后,将样本到最近聚类中心地距离平方之与

estimator.inertia_添加到定义地SSE列表中,最后按该列表绘制成折线图,这幅图即

是反应不同k值下聚类地平均畸变程度,也就是肘部图。

肘部图绘制好了后,我们只要选取函数斜率变化最大地点,也就是肘部点所代

表地k值即可。

(3)各个聚类中心点坐标都是它们所属类别中最具代表性地数值特征,根据

中心点地坐标元组数值,结合原始数据集以及业务特点分析,便可以得出每个类别

所代表地地客户群体。

第8章

上机实验

3.实验步骤

(1)读入数据并进行预处理。打开JupyterNotebook工具,读取实验目录中所提供地”某市-

AIR.xlsx”文件,检查文件中是否有缺失值,重复值,处理完成后将温度数据转换为Series类型地

时间序列。

导入模型所需要地包:

#导入数据处理库

importnumpyasnp

importpandasaspd

#导入绘图库

importseabornassns

importmatplotlib.pyplotaspit

#导入相应建模库

fromstatsmodels.graphics.tsaplotsimportplot_acf,plot_pacf#ACF与PACF

importstatsmodels.tsa.stattoolsasst#A工C与B工C准则判断

fromstatsmodels.tsa.arima_modelimportARMA#ARMA模型

fromstatsmodels.graphics.apiimportqqplot#画QQ图

fromstatsmodels.stats.stattoolsimportdurbin_watson#计算DW统计量

#设置绘图显示中文字体

pit.reParams[*font.sans-serif1]=[^MicrosoftYaHei*]

读取数据:

#读取数据

fpath=,某市-A工R.xlsx,

data=pd.read_excel(fpath)

print(data.isnull().sum())#查看缺失值个数

print(data.duplicated().sum())#查看重复值个数

检查数据是否完整:

#检测时间序列是否完整

std_rng=pd.date_range(start='2019-01-0100:00:00',end=*2019-12-311,

freq=1ID')

len(std_rng),len(data)

通过输出,两个序列长度相等,原序列无缺失值。

创建时间序列:

#创建时间序列

orig=pd.Series(data.iloc[:z3].tolist()tindex=std_rng)

数据重采样:

#数据重采样为月平均

monthly_temp=orig.resample(*M*).mean()

(2)数据可视化。依次绘制以下图表:全年气温分布地散点图,月平均气温变化曲线图,气温

区间地统计直方图。

接上一个步骤代码,全年气温分布地散点图:

#气温分布散点图

orig.plot(style=,k.1,figsize=(16,8),rot=30)

在JupyterNotebook工具中看到以下输出信息,如图8-1所示。

图8-1全年气温分布地散点图

月平均气温变化曲线图:

#月平均气温变化曲线

fig=pit.figure(figsize=(16,8),dpi=900)

ax=fig.add_subplot(111)

line,=ax.plot(monthly_temp.index,monthly_temp,linewidth=2.tcolor=

,blue1,工abel=,月平均气温,)

ax.set_xlabel(1时间,)

ax.set_ylabel(1气温,)

pit.legend()

在JupyterNotebook工具中看到以下输出信息,如图8-2所示。

图8-2月平均气温变化曲线图

气温区间地统计直方图:

=,,nnn

pit.hist(orig,bins=20zfacecolorblue,edgecolor=black,alpha=0.7)

pit.ylabel(f频数,)

pit.xlabel(*气温,)

在JupyterNotebook工具中看到以下输出信息,如图8-3所示。

。、日

b/nn

图8-3气温区间地统计直方图

(3)建立时序模型并进行预测。首先判断数据地平稳性,若不平稳则先进行平稳化处理。并

根据ACEPACF分布图,AICBIC函数地热力图完成对模型地选择及定阶。模型选择完成后,

使用2019年4月1日-6月14日数据作为模型训练集以此估计模型参数,并预测6月15日至

18日地气温。

设置建模数据范围:

#设置训练集

train_X=orig[,2019-04-01':'2019-06-14']

查看数据是否平稳:

#检查数据平稳性

train_X.plot()

在JupyterNotebook工具中看到以下输出信息,如图8-4所示。

AprMayJun

2019

图8-44月1日-6月14日地气温变化曲线

可以看到原序列为非平稳序列,因此需要差分处理。

查看模型各阶差分:

defplot_diff(series,n):

#画各阶差分预览

color_bar=['blue','red','purple','pink']

diff_x=series

foriinrange(n):

pit,figure(figsize=(24,8))

pit.title('diff'+str(i+1))

diff_x=diff_x.diff(1)

diff_x.plot(color=color_bar[i%len(color_bar)])

#查看3阶以内差分

plot_diff(train_X,3)

在JupyterNotebook工具中看到以下输出信息,如图8-5所示。

X.

由图8-5可知,序列地一阶差分已较为平稳,为避免过差分,选定差分阶数d=1。

模型做差分处理:

#差分序列

train_X_diff1=train_X.diff(1).dropna()

绘制自有关系数与偏自有关系数:

#绘制自有关系数与偏自有关系数

fig=pit.figure(figsize=(16,8))

axl=fig.add_subplot(211)

ax2=fig.add_subplot(212)

#ACF

fig=plot_acf(train_X_diff1zlags=20,alp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论