数据分析:
什么是数据分析:
是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律
数据分析是用适当的方法对手机来的大量数据进行分析,帮助人们做出判断,以便来采取适当的行动
数据分析实现流程:
提出问题
准备数据
分析数据
获得结论
成果可视化
数据分析三剑客:
numpy
pandas
malplotlib
numpy:一维或者是一个多维的数组(低版本的列表)
下载:pip install numpy
导入: import numpy as np
NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。
创建:
使用np.array()创建
使用plt创建
使用np的routines函数创建
一维数组的创建:
np.array([1,2,3,4,5,6])
多维数组的创建
np.array([[1,2,3,4],[5,6,7,8],[9,9,9,9]])
数组和列表有什么区别:
数据中存储的数组元素的数据类型必须是统一的
数据类型是有优先级的:字符串>浮点型>整型
读取外部图片加载:
导入: from matplotlib.pyplot as plt
使用:plt.imread('图片地址')
展示:plt.imshow()
属性:
zeros():数组中元素全部是0
ones():数组中元素全部是1
linespace():
arange():在什么范围内,可以设置步数
random():随机
常用属性:
shape:显示的是一个维度数据,
ndim:
size:
dtype:
索引和切片
索引操作和列表的索引操作同理
切片:
切出前两行数据:arr[0:2]
切出前两列数据:arr[行,列]--arr[:,0:2]
切出前两行前两列:arr[0:2,0:2]
上下翻转:arr[::-1,:,:]
变形:reshape
将一维/多维数组进行改变一维/多维
级联操作:concatenate
是对numpy数组进行横向或者纵向的拼接、
axis轴向的理解:
0:代表列
1:代表行
匹配级联:级联的多个数组的形状是一样
不匹配级联:
级联的多个数组的形状是不一样(但维度必须一样)
多个数组的行数一样就进行行级级联
多个数组的列数一样就进行列级级联
常用的聚合操作
sum,max,min,mean
常用的数学函数
NumPy 提供了标准的三角函数:sin()、cos()、tan()
numpy.around(a,decimals) 函数返回指定数字的四舍五入值。
参数说明:
a: 数组
decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
常用的统计函数
numpy.amin() 和 numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值。
numpy.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值)。
numpy.median() 函数用于计算数组 a 中元素的中位数(中值)
标准差std():标准差是一组数据平均值分散程度的一种度量。
公式:std = sqrt(mean((x - x.mean())**2))
如果数组是 1,2,3,4,则其平均值为 2.5。 因此,差的平方是 2.25,0.25,0.25,2.25,并且其平均值的平方根除以 4,即 sqrt(5/4) ,结果为 1.1180339887498949。
方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。
矩阵相关
NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。一个 的矩阵是一个由行(row)列(column)元素排列成的矩形阵列
matlib.empty() 函数返回一个新的矩阵,语法格式为:numpy.matlib.empty(shape, dtype),填充为随机数据
参数介绍:
shape: 定义新矩阵形状的整数或整数元组
Dtype: 可选,数据类型
numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
numpy.matlib.eye(n, M,k, dtype)
n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引
dtype: 数据类型
numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。
矩阵相乘
numpy.dot(a, b, out=None)
a : ndarray 数组
b : ndarray 数组
第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
pandas:
numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
Series:
Series是一种类似与一维数组的对象,由下面两个部分组成:
values:一组数据(ndarray类型)
index:相关的数据索引标签
创建:
由列表或numpy数组创建
由字典创建
索引:
隐式索引:默认索引
显式索引:增强数据的可读性,使用index指定索引
属性:
shape:
size:
index:
values:
常见方法:
head():取前几个
tail():取后几个
unique():
isnull(),notnull():非空
add(),sub(),mul(),div():
Series的运算法则:
做引一致的元素值进行算术运算,否则补空
关于Series的空值(缺失值)过滤:
isnull,notnull:判断某些元素是否为空值NaN,然后使用布尔值充当索引进行二次计算
DataFrame:
DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
行索引:index
列索引:columns
值:values
DataFrame的创建
ndarray创建
字典创建
DataFrame(data=np.random.randint(0,100,size=(4,6)))
dic = {
'name':['张三','李四','王老五'],
'salary':[10000,20000,15555]
}
df = DataFrame(data=dic,index=['a','b','c'])
属性:
values
columns
index
shape
索引:
对列进行索引
df['列名']:取出一列
df[['列名1','列名2']]:取出多列
对行进行索引
df.loc['行名']:取出一行
df.loc[['行名','行名']]:取出多行
对元素进行索引
df.iloc[行名,列名]:取出一个元素
df.loc[['行名','行名'],'列名']:取出多个元素
切片:
对行进行切片
df[0:2]
对列进行切片
df.iloc[:,0:2]
汇总:
索引:
dfcol:取单列
df.locrow:取单行
df.loc[row1,row2]:取多行
df.locrow,col:取元素
时间类型的转换:pd.to_datetime(col)
将某一列设置为行索引:df.set_index()
df.info():
返回df中一些原始信息
数据的行数
每一列元素的数据类型
检测列中是否有缺失数据
df['date'] = pd.to_datetime(df['date']):将data列中的字符串数据转换成时间序列的数据类型
一组布尔值可以作为df的行索引,不可作为列索引
shift(1):将Series的数据整体向下移动一位