第1章 python数据分析的概述
由于数据量比较大,已经远远超过了人力所能处理的范畴。那么管理和使用这些数据,就成为一个全新的研究课题
1.1 认识数据分析
数据分析技能,成为数据从业人员需要具备的技能之一。
明确数据分析概念、分析流程、和分析方法等相关知识,成为迈出数据分析的第1步
1.1.1 数据分析的概念
数据分析:就是用适当的方法,对收集来的数据进行分析,提取有用的信息和形成结论。以此帮助企业管理层做出决策
广义的数据分析:狭义数据分析和数据挖掘
1.狭义数据分析:指根据分析目的,采用对比分析、分组分析、交叉分析和回归分析等分析方法,对收集的数据进行处理和分析,提取有价值的信息,发挥数据的作用
2.数据挖掘:是从大量的,不完全的,有噪声的,模糊的,随机的实际应用数据中,通过应用聚类模型,分类模型,回归或关联规则等技术,挖掘潜在的价值的过程。
因此:狭义数据分析后得到的结论是‘指标统计量’
数据挖掘得到的结论是‘模型或规则’
1.1.2 数据分析的流程
需求分析--数据获取--数据预处理--分析与建模--模型评价与优化--部署
1.需求分析:决定了产品的方向
根据业务、生产和财务等部分的需要,结合现有的数据情况,提出数据分析需求的整体分析方向、内容,最终和需求方达成一致意见
2.数据获取:是数据分析的基础
方式:本地数据和网络数据
3.数据预处理:是对数据进行数据合并、清晰、标准化和数据变换的过程
合并:多个表合成一个表
清洗:去掉重复,缺失,异常,不一致的数据
标准化:去掉特征间的量纲差异
数据变换:通过离散化,哑变量等技术满足后期分析和建模的数据需求
4.分析和建模:通过对比/分组/交叉/回归等,以及聚类/分类/关联等方法,发现数据中有价值的信息,并得出结论
分类:如果分析目标是描述客户行为模式,可以采用描述型分析方法,同时还可以考虑关联规则,序列规则,聚类模型
如果分析目标是量化未来一段时间内某个事件发生的概率,则可以使用两大预测分析模型:分类预测模型和回归预测模型
分类预测模型的目标特征都是二元数据
回归预测模型的目标特征是连续型的数据
5.模型评价与优化
不同的模型有不同的指标评价其性能的优劣
聚类模型的评价指标
分类模型的评价指标
回归模型的评价指标:
模型优化是在模型评价后,如果进入实际生产环境应用后,模型的性能不理想的话,进而对模型进行重构和优化的过程
6.部署
是将数据分析结果与结论应用到实际生产系统的过程
具体内容:
可以是一份整改措施的报告
也可以是将模型部署到整个生产系统的解决方案
1.1.3 数据分析应用场景
客户分析:界定目标客户--了解客户的采购过程--客户特征分析,忠诚度分析,注意力分析,收益分析,营销分析
目的:将客户细分,使得运营策略达到最优
营销分析:产品分析--价格分析--渠道分析--广告与促销分析
社交媒体分析:用户分析--访问分析--互动分析
网络安全:
设备管理:
交通物流分析:
欺诈行为分析:
1.2 熟悉python数据分析的工具
是数据分析的首选语言
1.2.1 数据分析的常用工具:python、R、MATLAB
python:有强大的库
R:用于统计分析,绘图的语言
MATLAB:矩阵运算,回执函数与数据、实现算法
1.2.2 python数据分析的优势
语法简单--又很多库--功能强大--模型构建--胶水语言
1.2.3 python数据分析常用类库
Ipython:是py科学计算标准工具集的组成部分
NumPy:科学计算基础包
1.多维数据对象ndarray
2.数组元素级计算
3.读写硬盘上基于数组的工具
4.随机数生成功能
5.作为算法之间传递数据的容器
ScriPy:解决科学计算中各种标准问题域的模块的集合
pandas:数据分析核心库
1.为时间序列分析提供了很好的支持
Matplotlib:用于绘制图表的库
scikit-learn:数据挖掘和数据分析工具,对一些常用的算法进行了封装。基本模块包括(数据预处理,模型选择,分类,聚类,数据降维,回归)
Spyder:是交互式的Python语言开发环境
1.3 安装python的Anaconda发行版
https://www.anoconda/download
特点:开源免费--全平台支持--包含了众多库
1.4 jupyter notebook常用
代码功能和Markdown功能
第2章 NumPy数值计算基础
特点:1.科学计算 2.多维数据的容器 3.存储/处理大型矩阵
3.容器可以保存任意类型的数据
2.1 NumPy的数组对象ndarray
任务描述:python中有一个array模块,但不支持多维,也没有函数,因此要使用
NumPy中的ndarray
2.1.1 创建数组对象
说明:NumPy提供了两种基本的对象:ndarray(N-dimensional Array Object)多维数组
ufunc(Universal Function Object) 通用函数
ndarray特点:存储单一数据类型的多维数组
ufunc特点:能够对数组进行处理的函数
1.数组属性
ndim 维度
shape 尺寸,形状(几行几列)
size 元素总数
dtype 元素类型
itemsize 每一个元素的大小
2.数据创建
方法1:numpy.array(数组名)
可以建立一维数组,可以建立二维数组,还可以改变维度
2.1改变维度:数组名.shape = (m,n)
特点:先创建一个python序列,然后再将其转换为数组,效率低
方法2:用arange函数创建
np.arange(开始,结束,步长)
特点:不包含结束值
例如:np.arange(1,10,1)
np.linspace(开始,结束,元素个数)
特点:包含结束值
例如:np.linspace(1,10,5)
np.logspace(开始幂,结束幂,元素个数)
例如:np.logspace(0,5,5)
np.zeros((m,n)) 全为0的数组(m行n列)
np.eye(m,n) 单位矩阵 (m行n列)
np.diag([1,2,3,4]) 对角线的值为1,2,3,4
np.ones((m,n)) 全为1的矩阵(m行n列)
3.数据数据类型
特点:所有数组的数据类型是一样的。
类型列表:bool,inti,int8,int16,int32,int64,
uint8,uint16,uint32,uint64,
float16,float32
complex
数组类型转换函数:
float,int,bool
修改数组的数据类型:
数组名.dtype = np.类型名
创建数据类型:
df = np.dtype([('name',np.str_,40),('numitems',np.int64),('price',np.float64)])
用以上创建的类型创建数组
np.array([('曹操',20,34.5),('刘备',20,34.5)],dtype = df)
2.1.2 生成随机数
np.random.random(100) --100个0-1之间的数
np.random.rand(10,5) --10行5列均匀分布的数
np.random.randn(10,5) --10行5列正态分布的数
np.random.randint(最小值,最大值,size = (10,5)) --10行5列的数
np.random.Shuffle(arr1) --对数组进行随机排序,并返回排序的结果,(打乱顺序)
2.1.3 通过索引访问数组
1.一维数组的索引
类似于python的list的索引
2.多维数组的索引
arr2[2,3]
2.1.4 变换数组的形态
1.改变形态
数组名.reshape(m,n) --不改变原始数组的形态
2.数据展平
数组名.ravel() --数组横向展平
数组名.flatten() --数据横向展平
数组名.flatten('f') --数据纵向展平
3.数据组合
np.hstack((数组1,数组2))
np.vstack((数组1,数组2))
np.concatenate((数组1,数组2),axis = 1/0)
说明:axis为1表示横向组合
axis为0表示纵向组合
4.数组分割
np.hsplit(数组,n) 横向分割
np.vsplit(数组,n) 纵向分割
np.split(数组,n,axis=1/0)
2.2 掌握NumPy矩阵与通用函数
数组和矩阵的区别:
数组包含:n维数组对象和通用函数对象
矩阵:是继承自二维数组对象,要单独用命令创建
矩阵计算方便:矩阵相乘 *
数组相乘 .dot
2.2.1 创建NumPy矩阵
np.mat("1,2,3;4,5,6")
np.mat([(1,2,3),(4,5,6)])
np.matrix("1,2,3;4,5,6")
np.matrix([(1,2,3),(4,5,6)])
np.bmat('arr1,arr2;arr1,arr2') --小矩阵组合成大矩阵
matr2 = matr1*3
matr2 = matr1-3
matr2 = matr1+3
matr2 * matr1 --矩阵点乘
T --返回自身的转置
H --返回自身的共轭转置
I --逆矩阵
A --返回视图
2.2.2 掌握ufunc函数
说明:是一种对数组中的所有元素进行操作的函数
1.常用的ufunc函数运算
四则运算是对数组中的每个元素进行计算,因此四则运算的两个数组的形状必须相同
+ - * /
< > == <= !=
np.all(x == y)
np.any(x == y)
2.ufunc函数的广播机制
特点:输入数组向其中shape最长的数组看齐,不足的部分在前面加1补齐
输出数组的shape是输入数组各个轴上的最大值
一维数组和二维数组的广播机制为例.
2.3 利用NumPy进行统计分析
2.3.1 读/写文件
学会读写文件是利用Numpy进行数据处理的基础
1.也可以把结果存储到二进制或文本文件中。
2.提供了从文件读取数据并将其转换为数组的方法
1.save函数以二进制的格式保存数据
命令1:np.save(文件路径,数组)
说明:文件扩展名为.npy
import numpy as np
arr = np.arange(100).reshape(10,10)
np.save('C:/Users/peter/Desktop/数据分析/bit1',arr)
命令2:np.savez(文件路径,数组列表)
说明:多个数组保存到1个文件中,扩展名为Npz
2.load函数从二进制的文件中读取数据
load_data = np.load(文件名)
读取有一个数组的文件时,直接访问即可
读取有多个数组的文件时,需要用关键字访问
load_data['arr_0'] load_data['arr_1']等
3.在实际的数据分析中,我们更多的是将数据存储到txt或csv格式的文件中
np.savetxt('C:/Users/peter/Desktop/数据分析/text1.txt',arr,fmt = '%d',delimiter = ',')
说明:保存到text文件中,保存的格式是整数,分隔符是逗号
方法1:
load_arr2 = np.loadtxt('C:/Users/peter/Desktop/数据分析/text2.txt',delimiter = ',',dtype=str)
方法2:
注意:1.要导入的文本文档中,是汉字字符时,使用dtype格式限定
2.如果导入的数据的类型不同,就先定义类型
例如:
df = np.dtype([('name',np.str_,40),('sex',np.str_,4),('age',np.int32),('class',np.str_,40)]) --定义类型
load_arr4 = np.genfromtxt('C:/Users/peter/Desktop/数据分析/text2.txt',delimiter = ',',dtype=df) --导入文本文档,以df的格式
2.3.2 使用函数进行简单的统计分析
1.排序
分类:直接排序和间接排序
直接排序:就是把数值直接排序即可
间接排序:就是指定一个或多个键来进行排序
1.直接排序的名(sort)
例如:
np.random.seed(42)
arr1 = np.random.randint(1,10,size=10)
arr1.sort()
arr2 = np.random.randint(1,10,size=(3,3))
arr2.sort(axis=1)
arr2.sort(axis=0)
2.指定一个或多个键进行排序(argsort和lexsort)
arr2 = np.random.randint(1,10,size=10)
arr2.argsort() --返回的值是重新排序值的下标
a = np.array([3,2,6,4,5])
b = np.array([5,3,4,1,2])
c = np.array([4,3,6,1,1])
d = np.lexsort((a,b,c))
print(d) --排序后下标的顺序
print(list(zip(a[d],b[d],c[d]))) --zip解压后,排序的值的顺序
2.去重与重复数据
重复数据就是脏数据之一,去掉重复值numpy中用unique
arr1= np.array([1,2,2,2,3,4,5,5,1,1,5])
去重方法1:
np.unique(arr1) --去掉重复值,并返回排序后的结果
等价于sorted(set(arr1))
二维数组,怎么用这两种方法完成?
重复数据方法:
1.np.tile(数组,重复次数) --对数组进行操作
2.数组名.repeat(重复次数,axis=1/0) --对数组中的元素操作
3.常用的统计函数
聚合函数:sum,mean,std,var,min,max
聚合函数就是,直接产出一个最后结果
注意:一定要注意轴的概念,否则默认的是一个总值
axis = 0 --纵轴
axis = 1 --横轴
默认的是计算一个总值
argmin() --最小元素的索引
argmax() --最大元素的索引
np.sum(arr4)
np.mean(arr4)
np.std(arr4)
np.var(arr4)
不聚合函数:cumsum cumprod
2.3.3
作业一:1.导入数据iris_seqal_length.csv中的数据到数组arr1中
2.去重并排序,将结果放入arr2中
3.计算数组arr1的累计和
4.计算数组arr1的和,均值,标准差,方差,最小值,最大值
作业二:生成一个国际象棋的棋盘
1.创建一个8*8的矩阵
2.1,3,5,7行为1;2,4,6为0
作业三:创建一个数值范围为0-1,间隔为0.01的数组
创建100个服从正态分布的随机数
对随机数数组进行简单的统计分析
对两个数组进行四则运算
作业四:生成两个2*2的矩阵,并计算矩阵的乘积
生成1个0-1之间,服从均匀分布的数组
第3章 Matplotlib数据可视化基础
说明:mat--plot--lib
应用最多的是pyplot模块
3.1 掌握绘图基础语法与常用参数
说明:每一幅图的绘制都涉及为数不少的参数,我们掌握参数的设置后,才能更好的辅助绘制图形
3.1.1 掌握pyplot基础语法
pyplot基本绘制流程有三部分
1.创建画布与创建子图
作用:创建空白画布,并可以选择是否将画布划分成多个部分,方便在同一个图上绘制多个图形
函数1:plt.figure 创建空白画布,可以指定大小和像素
函数2:plt.add_subplot 创建并选中子图,指定子图的行/列数和选中图片的编号
注意:只是绘制一幅简单的图形是,这个画布可以省略
但要绘制子图时,画布必须有
import numpy as np
import matplotlib.pyplot as plt
data = np.arange(0,1.1,0.01)
p1 = plt.figure(figsize = (8,6),dpi=80)
ax1 = p1.add_subplot(2,2,1)
#plt.plot(data,data**2)
ax2 = p1.add_subplot(2,2,2)
#plt.plot(data,data*np.pi)
plt.savefig('C:/Users/peter/Desktop/数据分析/a1.jpg')
plt.show()
2.添加画布内容
包含:
标题 --plt.title(字符串)
坐标轴名称 --plt.xlabel(字符串),plt.ylabel(字符串)
坐标轴取值范围 --plt.xlim((元组)) ,plt.ylim((元组))
坐标轴刻度 --plt.xsticks([列表]),plt.ysticks([列表])
绘制图形 --plt.plot(x轴,y轴)
图例 --plt.legend()
3.保存与显示图形
plt.savefig('路径')
plt.show()
例如1:
#绘制测试图形
import numpy as np
import matplotlib.pyplot as plt
data = np.arange(0,10,2)
plt.figure(figsize=(6,8),dpi=80)
#绘制sin和cos
import numpy as np
import matplotlib.pyplot as plt
data = np.arange(0,np.pi*2,0.01)
plt.rcParams['font.sans-serif'] = 'SimHei' #设置中文字体
#plt.rcParams['axes.unicode_minus'] = False #设置正常显示符号
p1 = plt.figure(figsize=(6,8),dpi=80)
ax1 = p1.add_subplot(2,1,1) --绘制子图
plt.title('测试图形')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.xlim((0,np.pi*2))
plt.ylim((-1,1))
plt.yticks([-1,-0.5,0,0.5,1])
plt.xticks([0,np.pi/2,np.pi,np.pi*1.5,np.pi*2])
plt.plot(data,np.sin(data)) #绘制三角函数
plt.plot(data,np.cos(data))
plt.legend(['sin','cos'])
plt.savefig('C:/Users/peter/Desktop/数据分析/a2.jpg')
plt.show()
ax2 = p1.add_subplot(2,1,2)
plt.title('测试图形')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.xlim((0,1))
plt.ylim((0,1))
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.plot(data,data**2)
plt.plot(data,data**4)
plt.legend(['y = x^2','y=x^4'])
plt.savefig('C:/Users/peter/Desktop/数据分析/a2.jpg')
plt.show()
3.1.2 设置pyplot的动态rc参数
说明:所有存储在字典变量中的rc参数,被称为rcParams
包含:窗口大小
每英寸点数
线条宽度 #lines.linewidth取值0-10之间
颜色
线条样式 #lines.linestyle - -- -. :
线条上点的形状 #lines.marker o D h . , S
线条上点的尺寸 #lines.markersize 0-10
坐标轴
坐标
网格属性
文本
字体
例如2:
import numpy as np
import matplotlib.pyplot as plt
data = np.arange(0,np.pi*2,0.01)
plt.rcParams['font.sans-serif']='SimHei' #设置显示中文字体
plt.rcParams['axes.unicode_minums'] = False #设置正常显示符号
pl = plt.figure(figsize=(8,8),dpi=80)
#plt.title('测试图形')
plt.rcParams['lines.linestyle']='-.' #设置线条样式
plt.rcParams['lines.linewidth']=3 #设置线条宽度
plt.plot(data,data**2,label = '$sin(x)$')
plt.show()
3.2 分析特征间的关系
说明:散点图(用来分析特征间的相关关系)
折线图(用来分析自变量和因变量特征之间的趋势关系)
3.2.1 绘制散点图
原理:一个特征为横坐标,另一个为纵坐标,利用坐标点的分布形态,反映特征间的分布形态
说明:值有点在图表中的位置表示,类别由图表中的标记表示,通常用来比较跨类别的数据
语法:plt.scatter(values[:,0],values[:,2],marker='o',c='red')
例如3:
import numpy as np
import matplotlib.pyplot as plt
data = np.load('F:/曹晓龙课程/课程/数据分析/第3章/任务程序/data/国民经济核算季度数据.npz')
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
name = dat


发布评论