数据分析相关

数据分析是干啥的

-整合一堆杂乱无章的数据 把背后的信息提炼出来 使数据的价值最大化
–分析用户的消费行为 指定相应的方案 调整促销时间 力度 计算用户活跃度和产品的回购力度
–分析广告的点击率 决定广告的投放时间 制定广告方案 决定投放等等

例:
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] #切列