IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python数据分析(六) -> 正文阅读

[Python知识库]Python数据分析(六)

Python数据分析(六)

打卡第十天啦!!!

Matplotlib库(一)

数据分析中的常用图剖析

  1. 折线图:折线图用于显示数据在一个连续的时间间隔或者时间跨度上的变化,它的特点是反映事物随时间或有序类别而变化的趋势。
  2. 柱状图:典型的柱状图(又名条形图),使用垂直或水平的柱子显示类别之间的数值比较。其中一个轴表示需要对比的分类,另一个轴代表相应的数值。
  3. 直方图:直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的条纹表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。直方图是数值数据分布的精确图形表示。为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。这些值通常被指定为连续的,不重叠的变量间隔。间隔必须相邻,并且通常是(但不是必须的)相等的大小。
  4. 散点图:散点图也叫 X-Y 图,它将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程度,点的位置由变量的数值决定。
  5. 饼状图:饼状图通常用来描述量、频率和百分比之间的关系。在饼图中,每个扇区的弧长大小为其所表示的数量的比例。
  6. 箱线图:箱线图(Box-plot)又称为盒须图、盒式图或箱型图,是一种用作显示一组数据分散情况资料的统计图。

Matplotlib基本使用

  1. plt.plot可以只传Y轴的值,如果只传Y轴的值,那么X轴就会默认使用range(0,Y的长度)
y = [np.random.randint(0,10) for x in range(10)]
plt.plot(y)

在这里插入图片描述
2. plt.plot的x和y参数不能作为关键字参数来传递,只能作为位置参数来传

y = [np.random.randint(0,10) for x in range(10)]
x = range(10)
plt.plot(x,y)
  1. plt.plot中的data参数可以为一个字典或者DataFrame对象,然后在x和y上指定这个列的名字,那么plot会自动读取,注:因为x、y、fmt都是在前面,所以如果只传x和y,那么可能会产生歧义,这时候我们可以多传一个空的参数作为fmt的参数,就不会有警告了
mydata = {
    'a':range(10),
    'b':[np.random.randint(0,10) for x in range(10)]
}
plt.plot('a','b','',data=mydata)
mydf = pd.DataFrame(data=mydata)
plt.plot('a','b','',data=mydf)

在这里插入图片描述

  1. plt.plot的fmt参数可以设置线条的样式以及颜色
    在这里插入图片描述
mydf = pd.DataFrame(data=mydata)
plt.plot('a','b','--',data=mydf)

在这里插入图片描述

mydf = pd.DataFrame(data=mydata)
plt.plot('a','b','ob',data=mydf)

在这里插入图片描述

  1. plt.plot的color参数可以使用字母、十六进制,或者是RGBA的方式来设置颜色
mydf = pd.DataFrame(data=mydata)
plt.plot('a','b','',data=mydf,color='#893f23')

mydf = pd.DataFrame(data=mydata)
plt.plot('a','b','',data=mydf,color=(0.2,0.4,0.1,1))

设置折线图的线条样式

  1. 使用plot绘图的时候,就可以传递Line2D的属性值进去,来修改线条的样式
y = [np.random.randint(0,10) for x in range(10)] 
plt.plot(y,linewidth=4)
  1. 使用plot返回的线条,单独去设置也可以,但是单独设置的时候,是通过set_Line2D属性名()的方式来设置的
y1 = [np.random.randint(0,10) for x in range(10)] 
y2 = [np.random.randint(0,10) for x in range(10)] 
lines = plt.plot(range(10),y1,range(10),y2)
print(lines)
line = lines[0]
line.set_color('r')
line.set_linewidth(4)
line.set_alpha(0.1)
  1. 使用plt.setp来一次性设置多个线条的样式
y1 = [np.random.randint(0,10) for x in range(10)] 
y2 = [np.random.randint(0,10) for x in range(10)] 
lines = plt.plot(range(10),y1,range(10),y2)
plt.setp(lines,linewidth=4)

设置图标题和显示中文

  1. 设置标题:可以通过plt.title方法来实现。
  2. 默认plot是不支持中文的,如果想要支持中文,那么应该创建一个字体对象matplotlib.font_manager.FontProperties,然后指定fname参数,需要具体的路径,这里还需要注意,拷贝出来的字体的字符串,前面有一个乱码,需要把乱码删掉
y = [np.random.randint(10) for a in range(10)]
font = font_manager.FontProperties(fname=r"C:\\Windows\\Fonts\\simsun.ttc",size=15)
plt.plot(y)
plt.title('折线图',fontproperties=font)

设置轴刻度和文本显示

  1. 刻度是通过xticks和yticks来设置的,xticks和yticks需要传递两个参数,第一个参数ticks不重要,只要跟数据量保持一致就可以了,比如有20个数据,那么只要产生20个数据的数组或者列表都可以,第二个参数labels是用来设置每个刻度上的文本显示,这个比较重要
  2. 轴的名称是通过xlabel和ylabel来设置的
avenger = [17974.4,50918.4,30033.0,40329.1,52330.2,19833.3,11902.0,24322.6,47521.8,32262.0,22841.9,12938.7,4835.1,3118.1,2570.9,2267.9,1902.8,2548.9,5046.6,3600.8]
plt.figure(figsize=(15,5))
plt.plot(avenger,marker="o")
font.set_size(10)
plt.xticks(range(20),["%d"%x for x in range(1,21)],fontproperties=font)
plt.xlabel("天数",fontproperties=font)
plt.ylabel("票房数(万)",fontproperties=font)
plt.grid()

在这里插入图片描述

设置marker和注释文本

  1. 使用plt.plot的时候,可以通过marker参数设置坐标点的样式。markerfaceoolor代表的是点的颜色,markeredgeolor代表的是点的边界的颜色,markersize代表的是点的大小。
  2. plt.anotate(text, xy, xytext, arrowprops)是用来做文本注释的,text代表的是需要注释的文本,xy代表的是需要注释的坐标点,xytext代表的是文本的致标点,arrowprops代表的是箭头的一些属性。
plt.plot(np.sin(np.arange(20)),marker='o')
print(np.sin(np.arange(20)))
# plt.annotate("(0,0)",xy=(0,0),xytext=(-0.5,-0.8),arrowprops={'width':2,'headwidth':16,'headlength':20})
for index,value in enumerate(np.sin(np.arange(20))):
    plt.annotate("(%d,%.2f)"%(index,value),xy=(index,value),xytext=(index-0.1,value-0.1))

在这里插入图片描述

画板样式设置和保存图片

  1. 画板的样式:通过调用plt.figure来实现,这个函数调用必须要在所有绘图之前来完成,参数解释:
    (1)figsize:画板的尺寸,是一个元组,第一个参数是宽度,第二个参数是高度,单位是英寸
    (2)facecolor:画板颜色,注意区分Axes的背景颜色
    (3)edgecolor:边框颜色,边框默认的宽度是0,因此如果想要看到边框,那么需要设置linewidth
    (4)dpi:像素,也就是一个英寸中的像素点,默认是100
plt.figure(figsize=(10,5),facecolor='r',edgecolor='k',linewidth=2,dpi=80)
plt.plot(np.arange(5,10))
  1. 保存图片
    (1)plt.savefig
    (2)右键保存
plt.savefig("C:\\Users\\Rainy_Universe\\Desktop\\abc.png")

绘制多个子图和matplotlib

  1. 如果想要在一个图上绘制多根折线,那么直接在plot中传递多个x和y就可以了,或者调用多次plot方法就可以了
x = np.linspace(0,20)
plt.plot(x,np.sin(x),x,np.cos(x))

x = np.linspace(0,20)
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))
  1. 如果想要在一个画板上绘制多个子图(Axes对象),那么可以使用plt.subplot或plt.subplots方法
  2. plt.subplot:plt.subplot(221),第一个数字代表行,第二个数字代表列,第三个数字代表当前第几个子图,使用subplot绘制的所有东西都是在当前子图上,直到出现了新的subplot
plt.subplot(221)
plt.plot(np.arange(20))
plt.plot(np.arange(20)**2)
plt.subplot(222)
plt.plot(np.sin(np.arange(20)),'r')
plt.subplot(223)
plt.plot(np.cos(np.arange(20)),'b')
plt.subplot(224)
plt.plot(np.tan(np.arange(20)),'y')

在这里插入图片描述

  1. plt.subplots:figure,axes = plt.subplots(2,2),第一个代表行,第二个代表列,这个方法是一次性把所有的子图都绘制了,但是在子图上没有任何的东西,我们需要使用它的返回值来绘制,axes就是子图的对象
figure,axes = plt.subplots(2,2)
plt.style.use('ggplot')
axes[0,0].plot(np.arange(20),c='g')
axes[0,1].plot(np.sin(np.arange(20)),c='r')
axes[1,0].plot(np.cos(np.arange(20)),c='b')
axes[1,1].plot(np.tan(np.arange(20)),c='y')

在这里插入图片描述

Matplotlib库(二)

条形图

垂直条形图的绘制

  1. 绘制条形图使用的是plt.bar方法,这个方法有很多参数:
    (1)x:在x轴上的坐标,可以为一个列表/数组/字符串
    (2)y:在y轴上的坐标,可以为一个列表/数组/字符串
    (3)data:如果传递了data,那么x和y就可以为data中的key和value,比如data是一个dataframe对象,那么x和y就是这个dataframe对象的某个列的名字
from matplotlib import  font_manager
movies = {
    "流浪地球":40.78,
    "飞驰人生":15.77,
    "疯狂的外星人":20.83,
    "新喜剧之王":6.10,
    "廉政风云":1.10,
    "神探蒲松龄":1.49,
    "小猪佩奇过大年":1.22,
    "熊出没·原始时代":6.71
}
font = font_manager.FontProperties(fname=r"C:\\Windows\\Fonts\\simsun.ttc",size=12)
plt.rcParams['font.sans-serif'] = ['SimSun']
x = list(movies.keys())
y = list(movies.values())
plt.figure(figsize=(15,5))
# 传x和y
plt.bar(x,y,width=-0.4,align='edge',color='r',edgecolor='k')
plt.xticks(font_properties=font)
plt.yticks(range(0,45,5),["%d亿元"%x for x in range(0,45,5)],font_properties=font)

# 传data
movie_df = pd.DataFrame(data={"names":list(movies.keys()),"tickets":list(movies.values())})
plt.bar("names","tickets",data=movie_df)

在这里插入图片描述

横向条形图的绘制

  1. 横向条形图:plt.barh,在方法中,y代表的是之前bar中的x,width代表的是bar中的height
plt.barh(list(movies.keys()),list(movies.values()))

在这里插入图片描述

分组条形图的绘制

  1. matplotlib没有提供专门的分组条形图的API来实现,而是需要设置坐标来实现,绘制的规则是,一次性绘制所有电影第一天的数据,然后是第二天…
movies = {
    "流浪地球":[2.01,4.59,7.99,11.83,16],
    "飞驰人生":[3.19,5.08,6.73,8.10,9.35],
    "疯狂的外星人":[4.07,6.92,9.30,11.29,13.03],
    "新喜剧之王":[2.72,3.79,4.45,4.83,5.11],
    "廉政风云":[0.56,0.74,0.83,0.88,0.92],
    "神探蒲松龄":[0.66,0.95,1.10,1.17,1.23],
    "小猪佩奇过大年":[0.58,0.81,0.94,1.01,1.07],
    "熊出没·原始时代":[1.13,1.96,2.73,3.42,4.05]
}
plt.figure(figsize=(20,8))
width = 0.75
bin_width = width/5
movie_pd = pd.DataFrame(movies)
ind = np.arange(0,len(movies))

# 第一种方案
# first_day = movie_pd.iloc[0]
# plt.bar(ind-bin_width*2,first_day,width=bin_width,label='第一天')

# second_day = movie_pd.iloc[1]
# plt.bar(ind-bin_width,second_day,width=bin_width,label='第二天')

# third_day = movie_pd.iloc[2]
# plt.bar(ind,third_day,width=bin_width,label='第三天')

# four_day = movie_pd.iloc[3]
# plt.bar(ind+bin_width,four_day,width=bin_width,label='第四天')

# five_day = movie_pd.iloc[4]
# plt.bar(ind+bin_width*2,five_day,width=bin_width,label='第五天')

# 第二种方案
for index in movie_pd.index:
    day_tickets = movie_pd.iloc[index]
    xs = ind-(bin_width*(2-index))
    plt.bar(xs,day_tickets,width=bin_width,label="第%d天"%(index+1))
    for ticket,x in zip(day_tickets,xs):
        plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1))

# 设置图例
plt.legend(prop=font)
plt.ylabel("单位:亿",fontproperties=font)
plt.title("春节前5天电影票房记录",fontproperties=font)
# 设置x轴的坐标
plt.xticks(ind,movie_pd.columns,fontproperties=font)
plt.xlim
plt.grid(True)
plt.show()

在这里插入图片描述

堆叠条形图的绘制

  1. matplotlib没有提供专门的堆叠条形图的API来实现,我们在绘制往上堆叠数据的时候,可以使用bottom参数,来往上偏移指定的距离,这样就可以实现堆叠的效果
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
groupNames = ('G1','G2','G3','G4','G5')
xs = np.arange(len(menMeans))
plt.bar(xs,menMeans)
plt.bar(xs,womenMeans,bottom=menMeans)
plt.xticks(xs,groupNames)
plt.show()

在这里插入图片描述

直方图

直方图的绘制

  1. 直方图的绘制方法,使用的是plt.hist方法来实现,这个方法的参数以及返回值如下:
    参数:
    (1)x:数组或者可以循环的序列。直方图将会从这组数据中进行分组。
    (2)bins:数字或者序列(数组/列表等)。如果是数字,代表的是要分成多少组。如果是序列,那么就会按照序列中指定的值进行分组。比如[1,2,3,4],那么分组的时候会按照三个区间分成3组,分别是[1,2)/[2,3)/[3,4]。
    (3)range:元组或者None,如果为元组,那么指定x划分区间的最大值和最小值。如果bins是一个序列,那么range没有有没有设置没有任何影响。
    (4)density:默认是False,如果等于True,那么将会使用频率分布直方图。每个条形表示的不是个数,而是频率/组距(落在各组样本数据的个数称为频数,频数除以样本总个数为频率)。
    (5)cumulative:如果这个和density都等于True,那么返回值的第一个参数会不断的累加,最终等于1。
    返回值:
    (1)n:数组。每个区间内值出现的个数,如果density=True,那么这个将返回的是频率/组距。
    (2)bins:数组。区间的值。
    (3)patches:数组。每根条的对象,类型是matplotlib.patches.Rectangle。
durations = [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]
plt.figure(figsize=(15,5))
nums,bins,patches = plt.hist(durations,20,edgecolor='k')
plt.xticks(bins,bins)
plt.show()

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:18:43  更:2021-08-11 12:19:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:46:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码