python数据可视化
思维导图
折线图
基本操作
- 绘制了折线图(plt.plot)
1
2
3
4
5
6#导入pyplot 生成对象plt
from matplotlib import pyplot as plt
x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
plt.plot(x,y)
plt.show() - 设置了图片的大小和分辨率(olt.figure)
1
2#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,8),dpi=80) - 实现了图片的保存(plt.savefig)
1
plt.savefig("C:/Users/Administrator/2.png")
- 设置了x轴上的刻度和字符串(xticks)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#设置字体为中文雅黑
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '12'}
matplotlib.rc("font", **font)
x = range(0,120)
_x = list(x)
#_xticks_labels显示为10点i分
_xticks_labels = ["10点{}分".format(i) for i in range(60)]
_xticks_labels += ["11点{}分".format(i) for i in range(60)]
#显示刻度为_x,显示标签为_xticks_labels
#取步长,数字和字符串一一对应,字符串旋转270度
plt.xticks(_x[::3],_xticks_labels[::3],rotation=270) - 解决了刻度稀疏和密集的问题(xticks)
1
2
3
4
5
6_xticks_labels = ["10点{}分".format(i) for i in range(60)]
_xticks_labels += ["11点{}分".format(i) for i in range(60)]
#显示刻度为_x,显示标签为_xticks_labels
#取步长,数字和字符串一一对应,字符串旋转270度
plt.xticks(_x[::3],_xticks_labels[::3],rotation=270)
plt.yticks(range(0,9)) 设置了标题,xy轴的lable(title.xlable.,ylable)
1
2
3plt.xlabel("时间")
plt.ylabel("温度 单位(℃)")
plt.title("10点到12点每分钟的气温变化情况")设置了字体(font..manager. fontProperties.matplotlib.rc)
1
2
3
4
5import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '12'}
matplotlib.rc("font", **font)- 在一个图上绘制多个图形(plt多次plot即可)
1
2
3
4
5
6#设置y坐标
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
#传入x,y绘制二维数据折线图
plt.plot(x,y_1,label="jack",color="r",linestyle=':')
plt.plot(x,y_2,label="Dawei",color="cyan",linestyle='-.') - 为不同的图形添加图例
1
2
3
4#添加图例
plt.legend()
#绘制网格 透明度为0.4以及线条样式
plt.grid(alpha=0.4,linestyle=':')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#导入pyplot 生成对象plt
from matplotlib import pyplot as plt
#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,8),dpi=80)
#设置x坐标 参数为数据起始横坐标,数据终止横坐标(不包括),数据横坐标步长
#图表为二维数据(x,y)这里设置二维数据的x为2,4,6----24
x = range(2,26,2)
#设置二维数据中y坐标的数据
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
#此时二维数据为(2,15)(4,13)(6,14.5)--
#传入x,y绘制二维数据折线图
plt.plot(x,y)
#保存图片 到某位置(注意/方向)
#plt.savefig("C:/Users/Administrator/2.png")
#设置x轴刻度 该函数传入x则与二维数据的x一致
plt.xticks(x) #或者plt.xticks(range(2,25))或者plt.xticks()
#设置y轴刻度 range函数为从起始到终止左闭右开默认步长为1的一组数
plt.yticks(range(min(y),max(y)+1))
#展示图形
plt.show()
绘制气温
1 | #导入pyplot 生成对象plt |
绘制交女朋友图
1 | #导入pyplot 生成对象plt |
散点图
- matplotlib.scatter(x,y)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31from matplotlib import pyplot as plt
import random
#设置字体为中文雅黑
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '10'}
matplotlib.rc("font", **font)
#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,8),dpi=80)
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
x_3 = range(1,32)
x_10 = range(51,82)
#画散点图 添加图例信息
plt.scatter(x_3,y_3,label="3月",color="orange")
plt.scatter(x_10,y_10,label="10月",color="r")
#调整x轴刻度,长度要和数据的x一样长,显示为3月i日 10月i-50日
_x = list(x_3)+list(x_10)
_xticks_labels = ["3月{}日".format(i) for i in x_3]
_xticks_labels += ["10月{}日".format(i-50) for i in x_10]
#字体旋转45度,取步长调整疏密度
plt.xticks(_x[::3],_xticks_labels[::3],rotation=45)
#添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("3月和10月温度散点图")
#添加图例
plt.legend()
#显示图形
plt.show()
条形图
- 竖向matplotlib.bar(x,y)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18from matplotlib import pyplot as plt
import random
#设置字体为中文雅黑
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '10'}
matplotlib.rc("font", **font)
#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,10),dpi=80)
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
#绘制 x传数字列表自己根据a的长度取了一组数,方块宽度0.3
plt.bar(range(len(a)),b,width=0.3)
#调整x轴刻度,长度要和数据的x一样长,显示为a字符串列表内容
plt.xticks(range(len(a)),a,rotation=45)
#显示
plt.show() - 横向matplotlib.bar(x,y)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20from matplotlib import pyplot as plt
import random
#设置字体为中文雅黑
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '10'}
matplotlib.rc("font", **font)
#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,10),dpi=80)
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
#绘制
plt.barh(range(len(a)),b,height=0.3,color="orange")
#调整y轴刻度,长度要和数据的a一样长,显示为a字符串列表内容
plt.yticks(range(len(a)),a)
#绘制网格
plt.grid(alpha=0.3)
#显示
plt.show() - 多个条形图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30from matplotlib import pyplot as plt
import random
#设置字体为中文雅黑
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '10'}
matplotlib.rc("font", **font)
#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,8),dpi=80)
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇"]
day_16 = [15746,312,4497,319]
day_15 = [12357,156,2045,168]
day_14 = [2358,399,2358,362]
#设置横坐标数据 x_14为第14天的横坐标
bar_width = 0.15
x_14 = list(range(len(a)))
x_15 = [i+bar_width for i in x_14]
x_16 = [i+bar_width*2 for i in x_14]
#绘制 先绘制第14天的图形,贴着第14天画第15天,贴着15天画第16天
## 添加图例
plt.bar(x_14,day_14,width=bar_width,label="9月14日")
plt.bar(x_15,day_15,width=bar_width,label="9月15日")
plt.bar(x_16,day_16,width=bar_width,label="9月16日")
#调整x轴刻度,显示为a字符串列表内容
plt.xticks(x_15,a)
#添加图例
plt.legend()
#显示
plt.show()
直方图
- matplotlib.hist(data,num_bins,density =True)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27from matplotlib import pyplot as plt
import random
#设置字体为中文雅黑
import matplotlib
font = {'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '10'}
matplotlib.rc("font", **font)
#设置图片大小 参数为图片宽度和高度以及每英寸的像素数(清晰度)
plt.figure(figsize=(20,10),dpi=80)
a = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
#计算组数
bin_width = 3 #组距
num_bins = (max(a)-min(a))//bin_width #组数 整数除法
print(max(a),min(a),max(a)-min(a))
print(num_bins)
#绘制 将数据a分成num_bins个组 组数=极差/组距=max(a)-min(a)/bin_width
##density =True可以改成从频数图改成频率图
plt.hist(a,num_bins,density =True)
#调整x轴刻度 刻度设置了起始数,终止数,步长
plt.xticks(range(min(a),max(a)+bin_width,bin_width))
#网格
plt.grid()
#显示
plt.show()
思维导图
numpy读取本地数据
1 | import numpy as np |
numpy数组创建
1 | import numpy as np |
numpy数组数值修改
1 | import numpy as np |
numpy数组维度和计算
1 | import numpy as np |
numpy数组nan处理
1 | import numpy as np |
作业
1 | #英国和美国各自youtube1000的数据结合之前的matplotlib绘制出各自的评论数量的直方图 |
思维导图
知识点
1 | #### numpy数组的拼接 |
1 | #### 字符串离散化进行统计 |
pandas读取数据和series
1 | import pandas as pd |
pandas的DataFrame创建
1 | import pandas as pd |
pandas的DataFrame描述信息
1 | import pandas as pd |
pandas的DataFrame的布尔和缺失值
1 | #统计哪些狗的名字用的次数超过800 第一列是名字,第二列是次数 |
pandas的DataFrame应用
1 | #统计哪些狗的名字用的次数最多 第一列是名字,第二列是次数 |
pandas的数据的分类与合并
1 | # 对于这一组电影数据,如果我们希望统计电影分类(genre)的情况 |
pandas的分组与聚合功能
1 | # 现在我们有一组关于全球星巴克店铺的统计数据, |
pandas统计电影实例
1 | # 假设现在我们有一组从2006年到2016年1000部最流行的电影数据, |
pandas的时间序列上
1 | # 现在我们有2015到2017年25万条911的紧急电话的数据, |
pandas的时间序列下
1 | # coding=utf-8 |
pandas PM2.5案例
1 | # coding=utf-8 |