数据分析
matplotlib使用
-
matplotlib 能够将数据进行可视化,更直观的呈现
-
基本使用
# 先导入模块 from matplotlib import pyplot as plt # 设置图片大小 plt.figure(figsize=(20,8),dpi=80) # 绘制折线图 plt.plot(x,y) # xy为数据 # 保存 plt.savefig("./img1.png") #展示图形 plt.show()
-
设置中文显示
-
先查看Linux下支持的中文字体:
fc-list :lang=zh
[外链图片转存失败(img-uJOet5aE-1564066022544)(https://FXHao.github.io/images/posts/sjfx/字体.png)]
-
使用 matplotlib 库下的 font_manager 模块实例化一个对象
my_font = font_manager.FontProperties(fname="/usr/share/fonts/truetype/wqy/wqy-microhei.ttc")
-
再在要显示中文的地方添加 fontproperties 参数
plt.xlabel("时间",fontproperties=my_font)
-
-
调整刻度
_xticks = ["10点{}".format(i) for i in range(60)] # 自定义刻度显示 plt.xticks(list(x) [::5],_xticks[::5],rotation=45,fontproperties=my_font) # 调整刻度
-
添加描述信息
plt.xlabel("时间",fontproperties=my_font) plt.ylabel("温度 单位(度°)",fontproperties=my_font) plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font)
-
绘制网格
plt.grid(alpha=0.4) # alpha调整网格透明度
-
同一幅图里绘制多个图
- 要展示多个图,只需多几次
plt.plot(x,y)
,传入不同的数据即可
- 要展示多个图,只需多几次
-
添加图例
-
显示图形分别代表着什么
plt.plot(x,y,label='xxx') # 先设置label plt.legend() # 注意,这里的显示中文的参数为 prop
-
-
绘制散点图 :
plt.scatter(x,y)
-
绘制条形图 :
plt.bar()
===> 竖着的plt.barh()
===> 横着的- 注意:多个条形图展示时需要左移右移
-
更多的图形可以查看 matplotlib 官方文档
-
前端框架绘图:百度ECHART
-
numpy
-
在Python做科学计算的基础库,种在数值的计算
-
创建数组
import numpy as np t1 = np.array([1,2,3]) t2 = np.arange(4) t3 = np.array(range(1,4),dtype=float) # dtype指定数据类型 t4 = t3.astype("int8") # 调整数据类型 t5 = np.array([random.random() for i in range(10)]) # 创建小数数组 t6 = np.round(t5,2) # 取两位小数
-
数组的形状
- 查看数组的形状:
t6.shape
- 修改数组的形状:
t6.reshape()
- 查看数组的形状:
-
数组的计算
- 在numpy 中,数组可以加减乘除
-
numpy 索引和切片
t[,]
:在逗号前面,代表的是行(axis=0),后面代表的是列(axis=1)- 取行:
t[2]
- 连续多行:
t[2:]
- 不连续多行:
t[[2,3,6]]
- 取列:
t[:,2]
- 取值:
t[2,3]
===> 第三行第四列的值 - 多行多列:
t[2:5,1:4]
====> 3–5行和2–4列交叉位置的数据 - 多个不相邻的点:
t2[[0,2],[0,1]]
====> 00 和 21
-
numpy 中数值的修改
- 取到该值后重新赋值即可
- 布尔索引:
t[t<10] = 3
=====> 把 t 中小于10的值全部改为3 - 三元运算符:
np.where(t<10,0,10)
====> 把 t 中小于10的改为0,否则改为10 - clip(裁剪):
t.clip(10,18)
====> 小于10的替换为10,大于18的替换为18
-
Nan和inf
- nan:表示不是一个数字
- 当读取本地文档为 float 时,如果有缺失,就会出现nan
- 当做了一个不合适的计算的时候(如无穷大减无穷大),结果就会是nan
- 用
np.nan
可以赋值nan,前提要是float类型
- inf:表示正无穷 -inf
np.count_nonzero(t)
=====> 可以得出 t 中不为0的个数np.count_nonzero(t)
=====> nan的个数np.isnan(t)
======> 哪些值为nan
- nan:表示不是一个数字
-
numpy 中的统计函数
- 求和:
t.sum()
t.sum(axis=0)
===> 列和t.sum(axis=1)
===> 行和
- 均值:
t.mean()
- 中值:
np.median()
- 最大值:
t.max()
- 最小值:
t.min()
- 极值:
np.ptp()
即最大值和最小值只差 - 标准差:
t.std()
- 求和:
-
数据拼接
- 竖直拼接:
np.vstack((t1,t2))
- 水平拼接:
np.hstack((t1,t2))
- 竖直拼接:
-
数组的行列交换:
t[[1,2],:] = t[[2,1],:]
=====> 行交换t[:,[0,2]] = t[:,[]20]
=====> 列交换
-
numpy实用方法:
-
创建一个全0数组:
np.zeros((3,4))
-
创建一个全1数组:
np.ones((3,4))
-
对角线为1的正方形:np.eye(3)
-
获取最大值最小值的位置:
np.argmax(t,axis=0)
np.argmin(t,axis=1)
-
numpy生成随机数
-
np.random.randint(10,20,(4,5))
====> 10–20的范围,4行5列的形状 -
随机种子
np.random.seed(10) # 随机中种子 np.random.randint(10,20,(4,5)) # 之后的该条随机结果与之前的一样
-
-
pandas
-
它不仅可以帮助我们解决数值型数据,还可以帮助我们解决数值型之外的数据
-
Series :一维,带标签数组
-
创建Series:
import pandas as pd t = pd.Series([1,2,3,4,5],index=list("abcde")) # index可以指定标签
也可以用字典创建,只需把字典传进去,创建后,字典的键为标签,值为数组的值
-
t.index
:可以取出索引(标签) -
t.values
:可以取出值
-
-
Pandas 读取外部数据:
pd.read_csv("xxxx")
,也可read 其它的文件 -
DataFrame :二维,Series 容器
-
DataFrame 方法
df.shape 行数,列数 df.dtype 列数据类型 df.ndim 数据维度 df.index 行索引 df.columns 列索引 df.values 对象值 df.head(3) 显示头几行 df.tail(3) 显示末尾几行 df.info 相关信息概览:行数、列数、列索引、列非空值个数、行类型、列类型、内存占用 df.describe() 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值 -
排序:
df.sort_values(by="xxxx")
-
Pandas取行取列(二者可以合并使用)
df[:20]
====> 取行df["age"]
====> 取列
-
loc和iloc
df.loc[["A","C"],["1","3"]]
====> 通过标签索引,AC行,13列df.iloc[1]
===> 位置索引,第2行df.iloc[:,2]
====> 第3列df.iloc[:,[2,1]]
====> 第2、3列
-
Pandas 布尔索引
df.[df["age"]>18]
df.[(df["age"])&(df["age"]<20)]
多条件 & |
-
Pandas 字符串方法
contains 返回各字符串是否含有指定模式的布尔模型 len 计算各字符串的长度 lower/upper 大小写转换 replace 替换 split 拆分 -
Pandas 缺失数据处理
- 判断依据:
pd.isnull(df)
、pd.notnull(df)
- 处理方式1:删除NaN
t.dropna(axis=0,how="any")
any:只要改行有nan就删除改行 all:全部为nan才删除
- 处理方式2:填充数据
t.fillna(t.mean())
====> 填充全部的nant.["age"] = t["age"].fillna(t["age"].mean())
===> 只充填age列中的Nan
- 判断依据:
-