数据分析相关
数据分析是干啥的
-整合一堆杂乱无章的数据 把背后的信息提炼出来 使数据的价值最大化
–分析用户的消费行为 指定相应的方案 调整促销时间 力度 计算用户活跃度和产品的回购力度
–分析广告的点击率 决定广告的投放时间 制定广告方案 决定投放等等
例:
1.保险公司从大量的赔付申请数据中判断哪些存在骗保可能
2.支付宝通过用户消费记录和行为自动调整花呗额度
3.短视频通过用户的点击和观看行为给用户推送合适的视频
我为啥要学数据分析
因为我现在就得用
可以用于某些岗位或竞赛
python数据科学的基础
机器学习课程的基础
数据分析的流程
提出问题
准备数据
分析数据
获得结论
成果可视化
要用的工具
-numpy
-pandas
-matplotlib
开发环境
-anaconda|全球最受欢迎的数据啥啥啥|集成了数据分析和机器学习需要的全部环境
注意:安装目录不能有中文和特殊符号
-jupyter|anaconda提供的基于浏览器的可视化开发工具
启动方式:cmd-jupyter notebook-回车
新建方式:图形化页面-new-文件或者文件夹
python3:anaconda中的源文件
cell:可以在里面执行相关代码 code模式是代码 markdown模式是笔记
可以在编辑页面更换
快捷键:添加cell-a或者b
删除-x
修改cell的模式-m:修改成markdown
y:修改成code模式
执行cell-shift+enter
tab:自动补全
代开帮助文档:shift+tab
numpy模块的使用
创建numpy
1.1创建一个一维数组
import numpy as np
arr = np.array([1,2,3])
arr #cell中输出的时候直接打元素名就行 不用echo
输出:
array([1,2,3])
1.2创建一个多维数组
arr = np.array([1,2,3],[4,5,6])
arr
输出:
array([1,2,3],
[4,5,6])
数组和列表的区别是什么呢?
-数组中存储的数据元素类型都是统一的
-优先级:字符串>浮点型>整数
例如:
arr = np.array([1,2.2,3])
arr
输出:
array([1.,2.2,3.])
2.1将外部的一张图片读取并加载到numpy数组中
import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg') #返回的数组,数组中装载的就是图片内容
plt.imshow(img_arr) #将numpy数组进行可视化展示
输出结果即为1.jpg的图像内容
img_arr = img_arr - 100 #将每一个数组元素都减去100
plt.imshow(img_arr)
输出结果是色调有差别的图像内容
np.ones(shape=(3,4)) #输出结果是一个三行 四列的数组
np.linspace(0,100,num=20) #项数为20的一维等差数列数组
np.arange(10,50,step=2) #返回了10开头 50结尾 公差为2的一维数组
np.random.randint(0,100,size=(5,6)) #生成一个五行六列的数组 内容为随机数
数组名.shape #输出为数组的形状(行数,列数)
数组名.ndim #返回的是数组的维度(数组里包了几个数组)
数组名.size #返回数组元素的个数
数组名.dtype #返回数组元素的类型
创建数组的时候输入dtype参数来指定元素类型
或者通过 数组名.dtype = “指定类型” 来修改
type(数组名) #返回数组的数据类型
3.1numpy的索引和切片操作
索引和列表同理
创建一个数组之后 我们可以取出数组的指定数据
数组名[1,4] #取出数组中下标为1,4的数据
数组名[0:2] #切出数组前两行的数据
数组名[:,0:2] #切出数组前两列的数据
数组名[0:2,0:2] #切出数组前两行前两列的数据
数组名[::-1] #将数组的行倒置
数组名[:,::-1] #将数组的列倒置
数组名[::-1,::-1] #整个倒置
左右反转图片
img_arr = plt.imread('./1.jpg') #返回的数组,数组中装载的就是图片内容
plt.imshow(img_arr[:,::-1,:]) #三个数值分别代表行 列 颜色
上下反转图片
plt.imshow(img_arr[::-1,:,:]) #三个数值分别代表行 列 颜色
图片裁剪功能
plt.imshow(img_arr[66:200,78:300,:]) #三个数值分别代表行 列 颜色
变形(reshape)
数组名.reshape((30,)) #把二维的数组变形成一维
数组名.reshape((2,15)) #将一维变形成多维
数组名.reshape((6,5)) #将一维变形成多维
级联操作
-将多个numpy数组进行横向纵向的拼接
axis轴向
0为列 纵向拼接 1为行 横向拼接(行与列无法对应会报错哦)
np.consatenate((数列1,数列2),axis=1)
图片的拼接
np.consatenate((数列1,数列2,数列3),axis=1)
plt.imshow(img_arr) #三个数值分别代表行 列 颜色
常用聚合操作
-sum,max,min,mean
计算和 最大值 最小值 求均值
-sin,cos,tan
三角函数
around(a,decimals)
a:数组名 decimals:舍入的小数位数
numpy.amin()和numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值。
numpy.ptp(),计算数组中元素最大值与最小值的差
numpy.median(),计算数组中元素的中位数
std() var()输出标准差与方差 方差就是标准差的平方
使用例:
数组名[1].std() #输出第一行的标准差
还有数学里的矩阵相加 相减 相乘
eye() #返回一个标准的单位矩阵
.T #转置矩阵(行变成列 列变成行)
np.dot(数列1,数列2) #两个数列相乘
panda基础操作
numpy是用来处理数值型的数据 还有很多其他类型的数据(字符串,时间序列)
那么什么是pandas捏?
首先来认识pandas中的两个常用的类
-Series
-DataFrame
Series是一种类似于一维数组的对象,由下面两个部分组成:
values:一组数据
index:相关的数据索引标签
Series的创建
-由列表或numpy数组创建。
-由字典创建
from pandas import Series
s = Series(data=[1,2,3,'four'])
s
#输出结果类似于卡西欧(是的就是计算器)的数组表现形式
0 1
1 2
2 3
3 four
dtype:object
import numpy as np
Series(data=np.random.randint(0,100,size=(3,1)))
#必须是一维数组 不然会报错
0 3
1 43
2 82
dtype:int64
from pandas import Series
#index用来指定显示索引
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s
a 1
b 2
c 3
d four
dtype:object
#显示索引可以增强Series的可读性
dic = {
'语文':100,
'数学':99,
'理综':250,
}
s = Series(data=dic)
s
语文 100
数学 99
理综 250
dtype:int64
s.[0]
100
s.语文
100
s[0:2]
语文 100
数学 99
dtype:int64
s.shape #返回Series的形状
s.size #返回Series元素的个数
s.index #返回Series的索引
s.values #返回Series的值
s.dtype #返回元素类型 o代表object(字符串)
s.head(n) #前n个数据
s.tail(n) #后n个元素
s.unique #去重
s.isnull #判断元素是否为空 空返回Ture 反之False
s.notnull #反之
Series的算术运算
直接 a = 数组1+数组2即可
index一致的元素会进行算数运算 否则算空
————————————————————————————————————————
那么接下来是DataFrame 他是一个表格型的数据库
from pandas import DataFrame
df = DataFrame(data=[1,2,3],[4,5,6])
df
#输出结果
0 1 2
————————
0 1 2 3
1 4 5 6
df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
df
#输出结果为一个六行四列 内容为0-100随机数的表格
dic = {
'name':['zhangsan','lisi','wanglaowu'],
'salary':[1000,2000,3000]
}
df = DataFrame(data=dic,index=['a','b','c'])
df
#输出结果为
name salary
——————————————————————
a zhangsan 1000
b lisi 2000
c wanglaowu 3000
#DataFrame的属性
values、columns、index、shape
df.values #返回二维numpy数
df.columns #返回列索引
df.index #返回行索引
df.shape #返回形状
df.dtype #报错 因为DataFrame可以装不同类型的数据
df的索引&切片
df = DataFrame(data=dic,index=['a','b','c'])
df
#输出结果为
name salary
——————————————————————
a zhangsan 1000
b lisi 2000
c wanglaowu 3000
df['name'] #显示列时输入索引名即可
#输出结果为
name
—————————————
a zhangsan
b lisi
c wanglaowu
显示多列时加逗号与另一个引号
df.loc[a]
df.iloc[[a,b]] #显示行 iloc指隐式索引 loc指显示索引
#输出结果为
name salary
——————————————————————
a zhangsan 1000
b lisi 2000
df.iloc[a,b] #显示第a行 第b列的单个元素
切片
df[0:2] #切行
df.iloc[:,0:2] #切列