- 数据分析概述
数据分析就是用适当的方法对收集来的大量数据进行分析,帮助人们在一处判断,以便采取适当行动
数据分析流程
![](https://img-blog.csdnimg.cn/img_convert/d5ad0199b3b74a4780f9891cd4bc882a.png)
jupyter notebook说明
![](https://img-blog.csdnimg.cn/img_convert/9e690f6d57fc4012a4dbf14b12683444.png)
- matplotlib:Matplotlib — Visualization with Python
基本要点
能将数据进行可视化,更直观的呈现
能使数据更加客观、更具说服力
最流行的python底层绘图库,主要做数据与可视化图表
主要使用的是matplotlib库里面的pyplot
折线图
![](https://img-blog.csdnimg.cn/img_convert/6d83d7e4dc03417290410386f8a9529d.png)
plot(x,y):以x为横坐标轴,以y为横坐标轴,展示
![](https://img-blog.csdnimg.cn/img_convert/5a65344988b4444994522c409503fa0b.png)
show():展示绘制的图像
![](https://img-blog.csdnimg.cn/img_convert/00b5c7babc1f4a3c8134a2b10c8b6829.png)
figure(figsize=(20,8),dpi=80)
figure图形图标的意思,在这里指的就是所画的图
通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
在图像模糊时候可以传入dpi参数,让图像更加清晰
savefige("路径"):可以保存为svg这种矢量图格式,放大不会有锯齿
![](https://img-blog.csdnimg.cn/img_convert/9bc57615df6c4d2b95796f311fb9a0cf.png)
设置横竖坐标轴
xticks():里面可以放列表推导式或者使用range()来指定横坐标轴的刻度
如:plt.xticks(range(2,25))或者plt.xticks([i/2 for i in range(4,49)])
yticks():通常里面放range(),可以指定最小值和最大值,通过调整步长来调整刻度
如:plt.yticks(range(min(y),max(y)+1,2))
在里面添加rotation=度数的参数,可以指定旋转的度数
横竖轴也可以用字符串表示
要注意数字和字符串要一一对应,数据的长度一样
![](https://img-blog.csdnimg.cn/img_convert/fee9b8ef0b7647758442a61d83754928.png)
设置字体格式
matplotlib.rc():第一种可以传递多个参数,第二种只能传递一个参数
![](https://img-blog.csdnimg.cn/img_convert/73049d9959b04dc892f1b2d53b882677.png)
import matplotlib
matplotlib.rc("font",family='MicroSoft YaHei')
另一种方式:通过matplotlib下的font manager解决
![](https://img-blog.csdnimg.cn/img_convert/4c8baa4ac8f8483cb68b0152548dc12e.png)
![](https://img-blog.csdnimg.cn/img_convert/0772accf290d462387f4bb03f2d798c8.png)
添加描述信息
xlabel():x轴描述信息
ylabel():y轴描述信息
title():标题
![](https://img-blog.csdnimg.cn/img_convert/fad76f5d9e944143b6154203678cced2.png)
grid():绘制网格
legend():设置图例
![](https://img-blog.csdnimg.cn/img_convert/977a037fc86e4f4585490993356a42e4.png)
散点图:scatter()
条形图:bar()
![](https://img-blog.csdnimg.cn/img_convert/bacec9dabc8e4de8abef22bd1454d6da.png)
直方图:hist()
![](https://img-blog.csdnimg.cn/img_convert/b365feaf196d412d97a73a9fed215873.png)
echart、plotly、seabom
- numpy
轴
在numpy中可以理解为方向,使用0,1,2.....数字表示
对于一个一维数组,只有一个0轴
对于二维数组(shape(2,2)),有0轴和1轴
二维中:axis=0为跨行,即按列操作,从上到下;axis=1从左到右
对于三维数组(shape(2,2,2)),有0,1,2轴
三维中:axis=0为从外到内,1为从上到下,2为从左到右
numpy读取数据
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
![](https://img-blog.csdnimg.cn/img_convert/665d1b070c2f473dab0f971699051212.png)
转置
![](https://img-blog.csdnimg.cn/img_convert/57eab02e2d5b4817983ad2e10f112c3f.png)
取值
取行
取第二行:print(t2[2])
取连续的多行
第三行及其之后的所有行:print(t2[2:])
取不连续的多行
取第二、八、十行:print(t2[[1,7,9]])
取列
取第0列:print(t2[:,0])
取连续的多列
第三列及其之后的所有列:print(t2[:,2:])
取不连续的多列
取第一、三列:print(t2[:,[0,2]])
取特定值
取第三行第四列的值:print(t2[2,3])
取多行多列
第三行到第五行,第二列到第四列:print(t2[2:5,1:4])
取多个不相邻的点
取(0,0)(2,1)(2,3):print(t2[[0,2,2],[0,1,3]])
对数值进行修改
先取值,再修改即可
![](https://img-blog.csdnimg.cn/img_convert/ebdfbeac3bde4a1a946691226e16510d.png)
特定值修改
![](https://img-blog.csdnimg.cn/img_convert/5c5c30a237594c739562e828114f54e9.png)
clip():裁剪
![](https://img-blog.csdnimg.cn/img_convert/7866457b15a8449383d02305db7c9806.png)
数据的拼接
竖直拼接
![](https://img-blog.csdnimg.cn/img_convert/ea796335ad6243768fdab572a89dcd5b.png)
水平拼接
![](https://img-blog.csdnimg.cn/img_convert/74fb8c0c458a4995acd879eea20b304c.png)
数组的行列交换
![](https://img-blog.csdnimg.cn/img_convert/382ad3ae5cf741c9b58a2f79a64105d9.png)
其他方法
获取最大值最小值的位置
np.argmax(数组,维度)
np.argmin(数组,维度)
创建一个全为0的数组:np.zeros((x,y))
创建一个全为1的数组:np.ones((x,y))
创建一个对角线为1的正方形数组:np.eye(x)
随机数生成
![](https://img-blog.csdnimg.cn/img_convert/4cac3fd014bd4bc883eec63908ceaacf.png)
浅拷贝和深拷贝
a=b,完全不复制,a和b相互影响
a=b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b报告,他们两个的数据变化是一致的
a=b.copy(),复制,a和b互不影响
nan和inf
都是float类型
![](https://img-blog.csdnimg.cn/img_convert/3661f3e64c1b49579b3211ef21f2dc50.png)
nan(NAN,Nan):not a number表示不是一个数字
当读取本地文件为float时候,若有缺失,就会出现nan
当做了一个不适合的计算的时候,也会出现
注意点
两个nan是不相等的(np.nan!=np.nan)
![](https://img-blog.csdnimg.cn/img_convert/b07450f7d784499fb1c0117c1a15162e.png)
利用此特性可以判断数组内nan的个数,也可以通过np.count_nonzero(np.isnan())计算
![](https://img-blog.csdnimg.cn/img_convert/02dcacd3ebf846a1a2ab666a5f077c0f.png)
nan和任何值计算都为nan
nan不能简单的替换
![](https://img-blog.csdnimg.cn/img_convert/ea0e87b72fc949e88feb3983574c40c2.png)
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
当一个数字除以0,python会直接报错,numpy是一个inf或者-inf
常用统计函数
![](https://img-blog.csdnimg.cn/img_convert/46133e8d1df1490dab6634166e0820c1.png)
- pandas
numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能帮我们处理其他类型(如字符串、时间序列等)的数据
常见类型
Series 一维,带标签数组
![](https://img-blog.csdnimg.cn/img_convert/e74ed89521d84504be0a5877f9b95f63.png)
![](https://img-blog.csdnimg.cn/img_convert/ffdf20ae6e6044fdad015502edf54f6d.png)
修改dtype
![](https://img-blog.csdnimg.cn/img_convert/c10fed8495ce48d5aa3a6aece774a37b.png)
切片和索引
![](https://img-blog.csdnimg.cn/img_convert/9694a25f340d41c78a645a46c69dcbbf.png)
![](https://img-blog.csdnimg.cn/img_convert/c61b8ce019fa40089396f3b4db0572c2.png)
DataFrame 二位,Series容器
DataFrame
![](https://img-blog.csdnimg.cn/img_convert/ca29c606caca428f93cd0023e10616b1.png)
行索引和列索引指定
![](https://img-blog.csdnimg.cn/img_convert/f529b10de71f4ba28a350397f6d05501.png)
![](https://img-blog.csdnimg.cn/img_convert/025693f9f88b49e38d5aad5076b6c9cc.png)
可以转换为DataFrame类型
![](https://img-blog.csdnimg.cn/img_convert/02b1dec6aac94d1badc0a74ed964155b.png)
基础属性
![](https://img-blog.csdnimg.cn/img_convert/0ee7ed3cb08845df9ec35caa60f638ae.png)
整体情况查询
![](https://img-blog.csdnimg.cn/img_convert/b2f7d5365b4b464ea7779f9e824c0258.png)
取值
df.loc:通过标签索引获取行数据
![](https://img-blog.csdnimg.cn/img_convert/dbe0aac0f981424682043202a58ba2ab.png)
df.iloc:通过位置获取行数据
![](https://img-blog.csdnimg.cn/img_convert/041bd1ddca9a4f28b66598da710281c9.png)
布尔索引
![](https://img-blog.csdnimg.cn/img_convert/ea16b6f9120145459d6b52e70db2e2e6.png)
字符串方法
![](https://img-blog.csdnimg.cn/img_convert/f19b055937084ef28acdfbdb258b8a2c.png)
pandas读取数据
缺失值处理
![](https://img-blog.csdnimg.cn/img_convert/450d40c23602471e93042a602150b460.png)
数据合并
join():默认情况下,他是把行行索引相同的数据合并在一起
![](https://img-blog.csdnimg.cn/img_convert/cb6541771a4344528ec31386c935efef.png)
merge():按照指定的列,把数据按照一定的方式合并到一起
![](https://img-blog.csdnimg.cn/img_convert/440c675967684d42afaa508746167a8a.png)
inner是交集,outer是并集
数据的分组聚合
group=df.groupby(by='Country')
![](https://img-blog.csdnimg.cn/img_convert/605ef57fb4ce4e6ab8468bd8246536ff.png)
得到的是<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000026BC1B9E0D0>
可以进行遍历
![](https://img-blog.csdnimg.cn/img_convert/8ead1e517cc34f959ca8ee316b7b15db.png)
可以选中特定分组
![](https://img-blog.csdnimg.cn/img_convert/53fd99707c4e42feb196a4ea0d5539ec.png)
可以调用聚合方法
![](https://img-blog.csdnimg.cn/img_convert/c184dbfb4c274d4abdd38e81a7d46a67.png)
常见的聚合操作
![](https://img-blog.csdnimg.cn/img_convert/2bd2150112664da697c80101936c0bfe.png)
按多个条件进行分组
返回Series
![](https://img-blog.csdnimg.cn/img_convert/ef2fc02fa6f247b3b6a4b2a9e289ba0c.png)
返回DataFrame
![](https://img-blog.csdnimg.cn/img_convert/ce54795a61484d4c9383c3f5f92d643c.png)
索引和复合索引
简单的索引操作
![](https://img-blog.csdnimg.cn/img_convert/88091b61e408441ca7de4fd51c60c51a.png)