机器学习-数据科学库day01,吼吼,我之前把这个看成了matlab,真是醉了!
目录
一、 数据分析导论
1.概念
什么是数据分析?——用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,一边采取适当行动。
2、数据分析的流程
提出问题—>准备数据—>分析数据—>获得结论—>成果可视化
二、matplotlib
·为什么要学习matplotlib?
1、能够给将数据进行可视化,更直观的呈现;
2、使数据更加可观、更具有说服力
·什么是matplotilib?
最流行的python底层绘图库,主要做数据可视化图标,名字取材于matlab,模仿matlab构建
·matplotlib基本要点
1、绘制折线图——plt.plot
2、设置图片大小和分辨率——plt.figure(figsize(20,8), dip=80)
3、实现了图片的保存——plt.savefigure
4、设置了xy轴上的刻度和字符串——xticks(如果要将刻度转换为中文字符串,必须使得x和_xticks_labels保持一一对应的关系)
5、解决了刻度系数和密集度的问题——xticks/yticks(直接用range的话,刻度无法是小数,只有整数形式,可以强制转换为list以后做推导式或切片操作)
6、设置了标题,xy轴的lable——plt.title/xlabel/ylabel
7、设置了字体——matplotlib模块里面的font_manager 上面的 FontProperties 进行设置,windows系统里的字体通过控制面板进行查找字体,右击字体选择属性即可看到地址和名称以及格式;
8、在一个图上绘制多个图形(plt多次plot即可)
9、为不同的图形添加图例——第一步在两个折线里面设置label参数,然后通过plt.legend(prop = my_font, loc="(设置位置)")
(一)简单代码
重难点:利用plt.xticks/yticks来把刻度显示成合适的间距
from matplotlib import pyplot as plt
x = range(2, 26, 2)
#数据在x轴的位置,是一个可迭代对象
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15]
plt.figure(figsize=(20, 8), dpi=80)
#figsize表示图片大小,参数是以元组的形式出现的,宽为20,高为8,dpi是图片清晰度,为了保证图片变大以后还可以很清晰
plt.plot(x, y) #传入x和y,通过plot绘制折线图
#plt.savefig("./sig_size.png") #将图片保存在当前目录下
'''
当x轴上的刻度值和我们定义的x的值不同时,可以通过xticks进行设置
plt.xticks(x)
细化x轴刻度时
plt.xticks(range(2, 25))
如果想继续细化,利用range(2,25,0.5)是不行的,因为步长只能取整
可以通过列表推导式来生成
'''
_xtick_labels = [i/2 for i in range(4, 49)]
#plt.xticks(_xtick_labels)
#如果觉得太密集,就可以写成plt.xticks(_xtick_labels[::3]),每隔三个取一个
plt.xticks(_xtick_labels[::2])
plt.yticks(range(min(y), max(y)+1))
plt.savefig("./sig_size.png")
plt.show() #在执行程序的时候展示图形
(二)如何在图像中添加中文描述信息,已经刻度中显示中文字符串的方法
重难点:显示中文描述,利用了matplotlib里面的font_manager函数中的FontProperties方法,定义我们的中文字体
还要注意的是在plt.xticks注意x和_xtick_lables 之间的一一对应关系
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\STZHONGS.TTF')
x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]
#x在0-120的范围内,y在20-35之间随机取值
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y)
#调整x轴的刻度
_x = list(x) #将range范围强制转换为列表的形式
#使得刻度转换成几点几分的形式
_xtick_lables = ["10点{}分".format(i) for i in range(60)]
_xtick_lables += ["11点{}分".format(i) for i in range(60)]
#使得_x和_xtick_lables的步长一样,能够一一对应
plt.xticks(_x[::3], _xtick_lables[::3], rotation=45, fontproperties=my_font) #rotation表示坐标刻度旋转的度数,但现在还是没办法显示中文
#后面加了fontproperties是为了显示中文字体
#添加描述信息
plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("温度 单位(摄氏度)", fontproperties=my_font)
plt.title("从10点到12点每分钟的气温变化情况", fontproperties=my_font)
plt.savefig("./气温变化图.png")
plt.show()
(三)在同一个图中画多条折线
重难点:图例——现在plot的时候定义标签的含义,然后在plt.legend函数里面定义prop字体和loc位置
关于折线的参数在plot的时候就可以定义,折线的颜色可以通过百度找到十六进制代码,进行自定义
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname=r'C:\Windows\Fonts\STZHONGS.TTF')
x = range(11, 31)
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]
plt.figure(figsize=(10, 8), dpi=80)
plt.plot(x, y_1, label="自己", color="#DB7093", linestyle="--") #自定义颜色,查找颜色的十六进制代码
plt.plot(x, y_2, label="同桌", color="#808000", linestyle="-.") #自定义线条,-表示实现 -- 表示虚线,-.表示点划线,:表示虚线
_xtick_lables = ["{}岁".format(i) for i in range(11, 31)]
plt.xticks(x, _xtick_lables, rotation=45, fontproperties=my_font)
plt.xticks(x)
plt.yticks(range(0, 10))
plt.xlabel("岁数", fontproperties=my_font)
plt.ylabel("交往女朋友的个数 单位(个)", fontproperties=my_font)
plt.title("11岁到30岁交往女朋友走势", fontproperties=my_font)
'''
plt.savefig("./交往女朋友发展趋势.png")
plt.show()
'''
plt.legend(prop=my_font, loc="upper left")
#这样可以把两条线所代表的标签含义显示出来,只有在legend函数里面采用prop来定义字体
#loc是显示的位置,位置如果不传参数的话,默认为右上角
#由于点分布在哪里并不清晰,我们可以通过网格图来进行调整
plt.grid(alpha=0.4)
#alpha是透明度的意思
plt.show()
·不同图像之间的对比
·如果需要其他图形,可以在百度搜索matplotlib
选择example,找到想了解的图像,点击进去有对应的代码