经上一章节的数据爬虫的学习,本章节开始学习数据分析操作,包括matplotlib,numpy,pandas。本节讲解matplotlib用法和实例,numpy,pandas讲解参见下numpy.md文件和pandas.md文件
from matplotlib import pyplot as plt
注:1.我们可以使用 _xtick_label _ytick_label 对x轴和y轴进行设置,如果不进行设置的话,通过默认输出的值达不到我们的需求。
_xtick_label =
_ytick_label =
plt.xticks(_xtick_label)
plt.yticks(_ytick_label)
02.01 matplotlib 绘制 0-12 的气温图
1.matplotlib 不显示中文的问题:需要导入包即可,相关的字体见下一节介绍,中文字体不是很多。
import matplotlib
matplotlib.rc("font", family=' DengXian')
_xtick_label = ["10点{}分".format(i) for i in range(1, 60)]
plt.xticks(list(x)[::3], _xtick_label[::3], rotation=45) # 注意前后要一致,因为要将_xtick_label传递给x,rotation是旋转角度的意思
plt.xlabel("时间") # x轴的描述信息
plt.ylabel("温度 单位(°C)") y轴的描述信息
plt.title("10点到12点每分钟的温度变化情况") 标题的描述信息
02.02 查询 matplotlib 所有的字体
本节主要是对应上一节,使用相关代码查询机器自带的字体。(也可以从网上下载字体嵌入到Pycharm中)
1.跟在一张图片上面绘制1个折线图的思想是一样子的,只不过需要定义2个 y 轴的数据点。
plt.plot(x, y_1, label="自己", color="orange", linestyle=':')
plt.plot(x, y_2, label="同桌", color="red", linestyle='--') # 相关的颜色还可以在网上进行查找16进制的代码
plt.grid(alpha=1) # alpha 是透明度的意思 从0-1进行输出 1是最深,默认为最深的颜色,0是最浅的颜色
4.添加图例(见自己和同桌那一栏 添加参数) 右上角会出现一个小的图例 默认在右上角进行显示 也可以在是左上角。
plt.legend(loc="upper left") # 在左上角显示
目标介绍:根据数据在一张图片里面绘制出2个散点图。
1.主要的思想其实跟在一张图片上绘制一个散点图是一样子的,只不过需要建立2个 y 轴的数据。
x_10 = range(51, 82)
_xtick_label += ["10月{}日".format(i - 50) for i in x_10]
plt.scatter(x_3, y_3, label="3月份")
plt.scatter(x_10, y_10, label="10月份")
项目需求:假设你获取到了2017年内地电影票房前20的电影和电影的票房数据,绘制一个适合该数据的图形进行可视化处理。
plt.bar(range(len(a)), b, width=0.3) # 首先先画一个图出来,将宽度绘制成0.3,默认情况下是1.
1.发现使用rotation旋转45度发现店也是显示不太完整,所以画出横条形图,即x y轴的数据进行调换即可。
plt.barh(range(len(a)), b, height=0.3, color="red")
项目需求:假设知道了三天不同电影的票房记录,绘制一个更加直观的条形图来表示数据。实则是在一个条形图里面绘制不同的数据信息即可。
2.发现画出来的图形与x轴对应不上,需要进行相关参数的调节:
bar_width = 0.2 # 将每个第二个第三个条形图都往右移动0.2个单位即可
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]
项目需求:假设获取到了250部电影的时长在列表 a 中,希望统计出来电影的时长分布状况(比如时长为100分钟到120分钟的电影的数量,出现的频率等等信息,如何进行呈现)。
一般遇到这种数据量比较大的时候,尽量采用直方图进行呈现。
1.一般需要数据量比较大的时候,我们可以进行在指定的区间内随机生成相应的数字。
# 可以使用以下代码进行随机获取90-150之间的250个数据
# import random
# y = [random.randint(90, 150) for i in range(250)]
# print(y)
2.plt.hist方法是那些没有统计过的数据,没有办法绘制直方图。所以要进行相应的处理。
d = 3 # 首先我们定义组距
num_bins = (max(a) - min(a)) // d # 用最大值减去最小值然后除以定义好的组距最后进行取整即可,可以得到分出的组数
06.02 matplotlib绘制统计好数据的直方图
时间段:interval = [0,5,10,15,20,25,30,35,40,45,60,90] 就是x的数据
组距:width = [5,5,5,5,5,5,5,5,5,15,30,60]
y轴的数据 quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
1.可以看出x轴的数据并不是均等分割的,从一开始的每隔5进行分割,到最后的15和30。同样我们可以由组距更直观的看出。
plt.bar(range(len(quantity)), quantity, width=1) # width=1的话就会连在一起。
07-12 本章节开始介绍numpy的相关用法及其项目案例,具体详细信息查看 numpy.md 文件。
13-28 本章节开始介绍pandas的相关用法及其项目案例,具体详细信息查看 。