数据分析
内容多且杂,我按照自己理解的逻辑,写了三个思维导图,就在每一部分之后
一、基础概念及环境
1. 数据分析概念
- 数据分析是Python数据科学的基础,也是机器学习课程的基础
- 数据分析: 大量的数据进行分析,帮助人们作出判断,以便采取适当行动。
2. anaconda
2.3 安装
- 搜索“anaconda”镜像源
- 下载到Linux主机。可以使用wget命令下载。
- chomd +x 给下载的sh文件可执行权限,然后执行
- 一路输入yes
- 关闭终端,再打开一个新终端即生效
2.2 基本操作
- 创建环境:
conda create -n 取的名字 python=3
确定后,输入Y安装
- 激活环境:
source activate 环境名
- 停用环境:
source deactivate
- 安装模块:
conda install 模块名
二、matplotlib
1. 简介
- 将数据进行可视化 ,更直观
- 使数据更客观 ,更具说服力
- matplotlib: 最流行的Python底层绘图库,注意做数据可视化图表 ,名字取材于MATLAB,也是模仿其构建的。
2. 基本要点
- axis: 指x或y这种坐标轴。
- 坐标: 图上的每一个点就是一个坐标。
- 安装:(pip3 install matplotlib安装会报错。请使用以下命令。)
sudo apt-get install python3-matplotlib
3. 使用方法
- 以折线图为例
3.1 最简单形式
- 导入模块
- x,y都要是可迭代对象。并且长度相同。
- 将x、y传入plot
- 展示图形(会蹦出一个框,当然,远程看不了)
# coding=utf-8
from matplotlib import pyplot as plt
x = [0, 2, 4, 6]
y = [20, 15, 14, 13]
plt.plot(x, y) # 传入x,y通过plot绘制折线图
plt.show() # 在执行时,展示图形
- 如果想保存图片,控制刻度怎么办?
3.2 升级形式
- 我们想保存图片,就需要创建一个图形实例。figsize接收一个元组,分别是宽和高。dpi决定清晰度,意思是每英寸点个数。在绘图之后,保存即可。
- 控制刻度。
# coding=utf-8
from matplotlib import pyplot as plt
# 创建一个图形实例,后续对其进行设置操作
fig = plt.figure(figsize=(20,10), dpi=80) # (宽,高),每英寸点个数
x = range(2, 26, 2)
y = [20, 15, 14, 13, 8, 16, 14, 14, 13, 11, 10, 15]
# 绘图
plt.plot(x, y)
# 设置x轴刻度
# xtick_labels = [0.5*i for i in range(4, 49, 1) # range不接受小数步长
plt.xticks(range(2, 25, 1)) # 设置区间为2~25,步长为1
# 设置y轴刻度
plt.yticks(range(min(y), max(y)+1, 3))
# 保存
plt.savefig("./pic/t1.png") # 可以保存为svg矢量图格式
# 展示
# plt.show()
- 刻度想要使用字符串怎么办?字符串挤在一起怎么办?怎么使用中文?
3.3 刻度使用字符串
- 刻度传入一个参数,只能使用数字。传入两个参数,可以使用字符串,要一一对应。
- 刻度挤在一起,可以选择用rotation参数旋转。
- 中文:在终端用fc-list可以查看Linux中支持的字体。在用fc-list :lang=zh可以看含有的中文字体
- 改变字体有两种方式。方式2更可取。字体的地址,最好用绝对字体。
# coding=utf-8
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
# 设置字体,方式1
# font = {"family" : "MicroSoft YaHei",
# "weight" : "bold",
# "size" : "larger"}
# matplotlib.rc("font", **font)
# 设置字体,方式2(推荐)
my_font = font_manager.FontProperties(fname="/home/pi/Font/simsun.ttc")
# 创建一个图形实例,后续对其进行设置操作
fig = plt.figure(figsize=(30,25), dpi=120) # (宽,高),每英寸点个数
x = range(1, 121)
# 描绘一个增长的股票
y = [int(random.randint(15, 90)*0.03*i) for i in range(1, 121)]
# 绘图
plt.plot(x, y)
# 调整x轴刻度
_x = list(x) # 可以直接用x。转换为列表是为了方便控制步长。
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["14点{}分".format(i) for i in range(60)]
# 一个参数时,只能传数字。要传入字符串,需要让两个参数一一对应
plt.xticks(_x[::5], _xtick_labels[::5], rotation=315, fontproperties=my_font) # rotation决定旋转的度数
# 设置y轴刻度
plt.yticks(range(min(y), max(y)+1, 7))
# 保存
plt.savefig("./pic/t2.png") # 可以保存为svg矢量图格式
# 展示
# plt.show()
3.4 添加描述信息
- 绘制网格:
plt.grid()
grid可以接受参数。
alpha=0.4 ==>设置透明度为0.4(完全透明为0,完全不透明为1,缺省为1)
- 添加描述信息:
plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("股价 (单位¥)", fontproperties=my_font)
plt.title("两个时间段的股价变化", fontproperties=my_font)
3.5 同图表绘制多折线
- 绘图两次即可
# 绘图
plt.plot(x, y1)
plt.plot(x, y2)
- 给曲线添加图例(区别曲线) 用label参数,还要添加plt.legend()
# 绘图
plt.plot(x, y1, label="星期三")
plt.plot(x, y2, label="星期五")
plt.legend(prop=my_font) # 注意是prop,其它地方用字体都是fontproperties参数
图例默认在最合适的位置。要改变位置使用loc参数,可以传入字符串,也可以传入数字0~10
best | upper right | upper left | lower left | lower right | right |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
center left | center right | lower center | upper center | center | |
6 | 7 | 8 | 9 | 10 |
- 绘图:颜色参数color,传入颜色单词或16进制值
- 绘图:线型参数linestyle,传入字符串(网格也有这个参数哦)
- | – | -. | : | ‘’ |
---|---|---|---|---|
实线 | 虚线 | 点划线 | 点虚线 | 留空 |
- 线条粗细:linewidth=5
- 线条透明度:alpha=0.5
4. 应用场景
- 折线图: 变化。显示数据变化趋势。
- 直方图: 统计(绘制连续性的数据)展示一组或多组数据分布情况
- 条形图: 统计(绘制离散型的数据)能够一眼看出各个数据的大小,比较数据之间的差别。频率统计。
- 散点图: 分布规律(判断变量之间是否存在数量关联趋势,展示离群点)
- 其它问题:
plt.hist()直方图==>错位?错位是因为不能被整除。
可以用条形图,设置width(width默认0.8)即可。
5. 更多
百度Echarts
plotly可视化工具中的github。同时兼容matplotlib和pandas
seaborn比matplotlib简单,但没有交互效果
6. 思维导图
三、numpy
- Python中的一个科学计算 基础库。重在数值计算 。
1. 创建数组&数据类型
- 创建数组
import numpy as np
# 以下都是一维数组
np.array([5])
np.array(range(1, 12, 2))
np.arange(1, 12, 2)
- 数据类型
# 指定创建的数组的数据类型
t1 = np.array([1, 0], dtype=np.bool)
t1 = np.array([1, 0], dtype="?")
# 查看t1数组里的数据类型
t1.dtype
# 修改数据类型
t2 = t1.astype("i1")
# 修改小数位数
t3 = np.array([0.233333, 0.666666])
t4 = np.round(t3, 2) # [0.23, 0.67],和Python中round方法类似
类型 | 类型代码 | 说明 |
---|---|---|
int8 | i1 | 有符号8位(1字节)整形 |
uint8 | u1 | 无符号8位(1字节)整形 |
int16/32/64 | i2/i3/i4 | 以此类推 |
float16 | f2 | 半精度浮点数 |
float32 | f4或f | 标准单精度浮点数。兼容C的float |
float64 | f8或d | 标准的双精度浮点数。兼容C的double和Python的float |
float128 | f16或g | 扩展精度浮点数 |
complex256 | c32 | 复数 |
bool | ? | 布尔值 |
2. 数组的形状
- 一维数组
array([0, 1, 2, 3, 4, 5])
- 二维数组
array([
[1, 2, 3],
[4, 5, 6]
])
- 三维数组