yiruia的个人博客分享 http://blog.sciencenet.cn/u/yiruia

博文

Day26 数据分析

已有 1581 次阅读 2020-5-24 10:33 |系统分类:科研笔记

一、什么是数据分析,为什么要做数据分析

数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动。做事情要靠数据说话。

数据分析的流程:

(1)提出问题

(2)准确数据:数据清洗,即把数据处理成你想要的格式

(3)分析数据:可用numpy、pandas等工具包

(4)获得结论:用文字表述,虽然能看懂,但是看的不是特别直观

(5)成果可视化:得出的结论和成果可视化是在一起的。

二、matplotlib

1、什么是matplotlib?

matplotlib是最流行的python底层绘图库,主要做数据可视化图表,名字取材于matlib,模仿matlib构建。

功能:

(1)将数据进行可视化,更直观的呈现

(2)使数据更加客观、更有说服力

基本要点:axis轴指x或者y这种坐标轴,x和y均传入可迭代对象

matlibplot的简单实用:假设一天中每隔两个小时(range(2,10,2))的气温(oC)分别是[15,13,14,17]

from matplotlib import pyplot as plt #导入pyplot
x = range(2,10,2) # 数据在x轴的位置,是一个可迭代对象
y = [15,13,14,17] #数据在Y轴的位置,是一个可迭代对象,
# x轴和y轴的数据一起组成了所有要绘制出的坐标,分别是(2,15),(4,13),(6,14),(8,17)
plt.plot(x,y) #传入x和y,把x,y轴的数据结合通过plot绘制出折线图
plt.show() #在执行程序的时候展示图形,看效果,x,y轴间距和我们设置的不太一样,plt会自动设置

2、但目前存在以下几个问题:

1、设置图片大小(想要一个高清无码大图)

2、保存到本地

3、描述信息,比如x轴和y轴表示什么,这个图可以表示什么

4、调整x或y的刻度间距

5、线条的样式(比如颜色,透明度等)

6、标记处特殊的点(比如告诉别人最高点和最低点在哪里)

7、给图片加一个水印(防印,防止盗用)


from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8),dpi=100) #宽20高8
# figure 图形图表的意思,在这里指的是我们画的图
# 通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
# 在图像模糊的时候可以传入dpi参数,让图片更加清晰
x = range(2,10,2)
y = [15,13,14,17]
plt.plot(x,y)
plt.savefig('2.svg') # 包存图片,可以报错位svg这种矢量图格式,放大不会有锯齿
plt.show()

fig设置图片属性,plt.figure图形图表的意思,在这里指的是我们画的图,通过实例化一个figure并且传入参数,能够在后台自动使用figure实例,在图像模糊的时候可以传入dpi参数,让图片更加清晰。

plt.savefig保存图片,剋保存为svg这种矢量图格式,放大不会有锯齿。

设置x轴,y轴的刻度:

from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,8),dpi=100)
x = range(2,10,2)
y = [15,13,14,17]
# 绘图
plt.plot(x,y)
# 设置x轴的刻度
plt.xticks(x)
plt.xticks(range(2,10,1)) # 设置x的步长
# _xtick_lab = [i/2 for i in range(4,10)]
# plt.xticks(_xtick_lab)
# 想让他显示什么就传什么
plt.xticks(x[::2])
# 当刻度太密集的时候使用列表的步长(间隔取值)来解决,matplotlib会自动帮我们对应
# 调整y轴间距
plt.yticks(range(min(y),max(y)+1))
plt.savefig('2.svg')
plt.show()

如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?a=[random.randint(20,35) for i in range(120)]

import random
from matplotlib import pyplot as plt, font_manager
fig = plt.figure(figsize=(20,8),dpi=100)
import matplotlib

#windows和linux设置字体的方式
font = {'family' : 'YaHei',
              'weight' : 'bold',
              'size'   : 'larger'}
matplotlib.rc('font',**font)

# 另一种设置字体的方式
my_font = font_manager.FontProperties(fname="/System/Linrary/Fonts/PingFang.ttc")
x = range(0,121)
y = [random.randint(20,35) for i in range(0,121)]
plt.plot(x,y)
# # 根据题意将x显示具有真实意义
_x = list(x) # 强制转换为列表,方便取步长
_xtick_lables = ['10点{}分'.format(i) for i in range(60)]
_xtick_lables += ['11点{}分'.format(i) for i in range(60)]
# # 取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(_x[::3],_xtick_lables[::3], rotation=45) # 将横坐标标签旋转的度数
# 设置图形的描述信息
plt.xlabel("时间")
plt.ylabel("温度 单位(0c)")
plt.title("10点到12点每分钟的气温变化情况")
plt.show()

设置中文显示:

为什么显示中文:

matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字

查看linux/mac下面的字体:

fc-list——>查看支持的字体

fc-list:lang=zh——>查看支持的中文(冒号前面有空格)


那么问题来了L如何修改matlibplot的默认字体

通过matplotlib.rc可以修改,具体方法参见源码(windows/linux)

通过matplotlib下的font_manager可以解决(windows/linux/mac)


练习:假设大家在30岁的时候,根据自己的实际情况,统计出来了11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势

# # 要求:
# # y轴表示个数
# # x轴表示岁数,比如11岁,12岁等
from matplotlib import pyplot as plt
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
x = range(11,31,1)
y = [i for i in a]
plt.plot(x,y)
plt.show()




https://blog.sciencenet.cn/blog-3405644-1234679.html

上一篇:Day25 面向对象的多态、封装、property、staticmethod、classmethod
下一篇:Day27 numpy数组_基本操作
收藏 IP: 223.91.39.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-14 15:50

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部