拜师教育第一阶段day1-2_Python数据分析

第一章  数据分析的基本概念

1.了解matplotlib、numpy、pandas在数据分析中各自的功能:

       matplotlib一般用于将数据进行可视化展示,通过它绘制折线图、散点图、条形图、直方图等。numpy常用于处理数值型数据。pandas常用于处理字典、数值数组、字符串与列表等。利用这些模块下提供的数据分析函数比用常规for …in …遍历要方便的多。

2.   数据分析的基本概念:把大量数据进行统计整理,得出结果,为后续的决策提供数据支持。另外对于包含大量元素的数据集,我们常需要对其进行数据预处理,以获得其中需要的那一部分,这样可以得到准备数据。而且,获得结论和成果可视化实际上应是同步进行的,当获得结论后若想更直观,此时一般进行成果可视化(matplotlib 的作用:用于做数据可视化图表)。数据分析的流程如下图:

第二章   matplotlib绘图模块

1.matplotlib函数的导入:from matplotlib import pyplot as plt(在使用pyplot时可以直接使用plt调用更简单。)

2.图片大小与清晰度的调整(这个语句一般放置在开头导包后):通过plt.figure(figsize=(宽度参数,长度参数),dpi=清晰度相关参数)。其中dpi参数意味着每英寸上点的个数,当图片放大后变模糊时,可以改变dpi参数进行调整。

3.图片的保存(这个语句一般放在绘图指令(plt.plot/scatter/hist/bar/barh)之后):通过plt.savefig("./文件名.文件格式")(里边的参数为保存路径,其中‘.’表示在与.py文件相同级别的目录下,‘..’表示在.py文件上一级别的目录下。)

4.随机产生120个在20-35之间的整数:import random;y=[random.randint(20,35) for i in range(120]

5.(重点)调整X或者Y轴上的刻度(一般用在绘图指令后):

(I)调整坐标刻度的疏密:由于直接调用plt.plot()自动生成坐标刻度不一定是我们想要的,这时要通过plt.xticks()调整横坐标刻度,通过plt.yticks()调整纵坐标刻度。如果x坐标刻度太密集可以通过plt.xticks(x[::3])每三个取一个刻度使坐标刻度变稀疏。若x=list(range(2,10,1))如果x坐标刻度太稀疏可以通过x_ticks=[i/2 for i in range(4,19)],plt.xticks(x_ticks),这样使得坐标密度变为原来的二倍。

(II)调整坐标刻度的表示(不再单纯显示数字,而是以字符串显示每个坐标):

plt.xticks(x_[::3],x_ticks[::3],rotation=旋转参数),这里的x_与x_ticks均为列表list对象,他们的长度要一致才能覆盖整个轴,可以同时取间隔/步长。其中x_为数据型列表(这个X_不一定与x有必然关系,它可以是根据要修改的字符型坐标刻度列表长度而生成的range()对象),x_ticks为字符串型列表。最后的rotation为旋转参数,当为正数时逆时针将坐标刻度转过相应度数,为负数时逆时针将坐标刻度转过相应度数。

6.如何使得绘图部分无刻度,绘图区上另一部分有刻度:通过对plt.xticks()的x_ticks参数(有刻度的那一段)与plt.plot()的x参数(无刻度的那一段)的调整错位就可以实现。

7.折线图的绘制(plt.plot()):在绘图前将横坐标纵坐标两个对应的数据表准备好,调用plt.plot(x,y)就可以获得对应的折线图(注意这里的x,y最好是list对象,为方便后续修改坐标轴取步长做准备)。通过plt.show()可以展示图形。

8.如何修改中文显示:导入from matplotlib import font_manager ;my_font=font_manager.FontProperties(fname="字体的路径(可以通过windows搜索框搜索字体)"),在对应使用中文的地方添加fontproperties=my_font参数,但图例指令plt.legend()中接收的参数名称为prop=my_font。

9.为图添加描述信息:通过plt.xlabel(),plt.ylabel(),plt.title()添加信息并且如果包含中文字符,其内要添加参数fontproperties=my_font。

10.为图添加网格:通过plt.grid()为图片添加网格,其中可以通过linestyle参数设置线性,通过alpha设置透明度。可以通过linewidth和color两个参数设置plot折线的粗细和颜色

11.如何将两个折线绘制在一幅图中并添加图例:可以通过plot命令调用两次绘图指令这样可以绘制两个图,并且可以通过Plt.plot()中label=“图例名称”参数设置图例,在绘图指令后可以通过plt.legend(loc=图例位置编号,prop=my_font)。其中图例位置与编号关系如下:

12.作业(一):假设大家在30岁的时候,根据自己的实际情况,统计出来了你和你同桌各自11岁到30岁每年交的女()朋友的数量如列表ab,在一个图中绘制出该数据的折线图,以便比较自己和同桌20年间的差异,方便分析每年交女()朋友的数量走势。

a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]

b = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

要求: y轴表示个数x轴表示岁数,比如11,12岁;并使得图片尽量美观。

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
plt.figure(figsize=(5,5),dpi=80)
my_font=font_manager.FontProperties(fname='C:/WINDOWS/FONTS/SIMHEI.TTF')
x=list(range(11,31))
y1= [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2= [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
plt.plot(x,y1,color='b',linestyle='--',label="自己")
plt.plot(x,y2,color='g',linestyle='-.',label="同桌")
plt.legend(loc=1,prop=my_font)
x_ticks=["{0}岁".format(i) for i in range(11,31)]
plt.xticks(x[::2],x_ticks[::2],fontproperties=my_font)
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("恋爱对象个数",fontproperties=my_font)
plt.title("恋爱对象个数随年龄变化图",fontproperties=my_font)
plt.grid(alpha=0.9,linestyle=':')
plt.savefig("./t2.png")
plt.show()

13.不同场合下图形的选择:

14.绘制散点图plt.scatter():

如何在同一个图上的左右两部分绘制不同的散点图:仍然是调用两次plt.scatter()指令,然后对两个散点图的x轴进行一定的偏移使其图点错开。

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname='C:/WINDOWS/FONTS/SIMHEI.TTF')
plt.figure(figsize=(8,4),dpi=100)
x3=list(range(1,32))
x10=list(range(41,72))
y3=[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]
y10=[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]
plt.scatter(x3,y3,label="3月")
plt.scatter(x10,y10,label='10月')
x_ticks=["3月{0}日".format(i) for i in x3]
x_ticks+=["10月{0}日".format(i-40) for i in x10]
x_=x3+x10
plt.xticks(x_[::3],x_ticks[::3],rotation=45,fontproperties=my_font)
y_=list(range(min(y10),max(y10)+1))
y_ticks=["{0}℃".format(i) for i in y_]
plt.yticks(y_[::3],y_ticks[::3],fontproperties=my_font)
plt.legend(loc=1,prop=my_font)
plt.show()

15.绘制散点图(plt.barh/bar绘制横/纵向条形图):其中条形图用于统计离散数据(是指之间没有相互关系的数据),plt.bar()中条形粗细的参数为width,plt.barh()中条形粗细的参数为height,可以通过plt.bar(range(len(a)),y)实现横坐标为数字,纵坐标为数量的竖状条形图,之后利用plt.xticks修改横坐标刻度即可。如果当字符串过长可以将过长的字符串通过“\n”使其换行,也可以通过plt.barh(range(len(a)),y,height=0.5);plt.yticks()设置为横向条形图。

在同一个图形中如何绘制错开的条形图:首先多次调用plt.bar(),然后对预错开的数据的不同坐标轴刻度进行重构列表,在原列表基础上使每个移动一定的宽度即可实现。

16.作业(二):假设你知道了列表a中电影分别在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现该数据?

a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]

b_14 = [2358,399,2358,362];b_15 = [12357,156,2045,168];b_16 = [15746,312,4497,319]

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname='C:/WINDOWS/FONTS/SIMHEI.TTF')
plt.figure(figsize=(6,4),dpi=100)
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_14 = [2358,399,2358,362]
b_15 = [12357,156,2045,168]
b_16 = [15746,312,4497,319]
barwid=0.2
x_14=list(range(len(a)))
x_15=[i+barwid*1 for i in x_14]
x_16=[i+barwid*2 for i in x_14]
plt.bar(x_14,b_14,width=barwid,label="9-14")
plt.bar(x_15,b_15,width=barwid,label="9-15")
plt.bar(x_16,b_16,width=barwid,label="9-15")
plt.xticks(x_15,a,fontproperties=my_font)
plt.grid(alpha=0.3)
plt.legend(loc=1)
plt.show()

 

17.绘制直方图(plt.hist(未统计整理过的元素数据列表,组数)):统计整理后的数据做直方图时应使用bar函数,而不能使用hist函数。当元素数量在100个以内时,常将组数分为5-12组,组数为num_bins=(max(a)-min(a))(极差)//d(组距),对于组距的选择一定要能够将极差整除在无法除尽时,可以选择为num_bins输入一个步长为d的列表对象num_bins=range(min(a),max(a)+d,d),这时绘制出来的表便不会产生偏移否则由于上述取整运算的存在,会使图形越来越偏向一侧。当绘制的为频率分布直方图而不是频数分布直方图时,plt.hist()函数中应添加一个参数normed=1(在python3中已替换为density=1)。

作业(三):在美国2004年人口普查发现有124 million的人在离家相对较远的地方工作。根据他们从家到上班地点所需要的时间,通过抽样统计(最后一列)出了下表的数据,现在请将其绘制为直方图。其中:

interval = [0,5,10,15,20,25,30,35,40,45,60,90]

width = [5,5,5,5,5,5,5,5,5,15,30,60]

quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]

 

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import  font_manager
my_font=font_manager.FontProperties(fname='C:/WINDOWS/FONTS/SIMHEI.TTF')
plt.figure(figsize=(8,5),dpi=100)
interval=[0,5,10,15,20,25,30,35,40,45,60,90]
interval_=interval+[150]
width=[5,5,5,5,5,5,5,5,5,15,30,60]
quantity=[836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
x=range(len(interval))
x_=[i-0.5 for i in range(len(interval)+1)]
plt.bar(x,quantity,width=1)
plt.xticks(x_,interval_)
plt.grid(alpha=0.4)
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("频数",fontproperties=my_font)
plt.title("从家到上班地点花费时间的直方图",fontproperties=my_font)
plt.show()

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值