B站14天数据分析笔记6次课笔记

1.Matplotlib 基础

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

默认matplotlib.pyplot不会显示图像 需要plt.show()
但再ipython 可以将图像直接插入到notebook中不需要show

  • %matplotlib notebook
  • %matplotlib inline

plt.plot()函数

普通线性图

plt.plot([1,2,3,4])
plt.ylabel('y')
plt.xlabel('x')

请添加图片描述

基本用法

  • 指定x,y plt.plot(x,y)
  • 默认参数
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()

请添加图片描述

字符参数

  • 表示颜色
  • 表示 线/点 类型的字符参数
#红色圆点
plt.plot([1,2,3,4],[1,4,9,16],'g *')
plt.show()

请添加图片描述

指定坐标轴axis显示范围

plt.axis([xmin,xmax,ymin,ymax])

plt.plot([1,2,3,4],[1,4,9,16],'g *')
plt.axis([0,8,0,20])
plt.show()

请添加图片描述

plot传入numpy数组

  • 一个途中画出多条线
t = np.arange(0.,5.,0.2)
plt.plot(t,t,'r--',
         t,t**2,'b s',
         t,t**3,'g ^')
plt.show()

请添加图片描述

线条属性

  • 线宽linewidth 颜色color
x = np.linspace(-np.pi,np.pi)#-3.14到3.14
y=np.sin(x)
plt.plot(x,y,linewidth = 4.0,color='r')
plt.show()

请添加图片描述

plt.plot()返回值设置线条属性

plot函数返回Line2D对象的列表

  • line1,line2为两个Line2D对象
    line1,line2 = plt.plot(x1,y1,x2,y2)
  • 三个
    lines = plt.plot(x1,y1,x2,y2,x3,y3)
line1,line2 = plt.plot(x,y,'r-',x,y+1,'g-')
line1.set_antialiased(False)
plt.show()

请添加图片描述

plt.setp() 修改线条性质

line = plt.plot(x,y)
#plt.setp(line,color='g',linewidth = 4)
plt.setp(line,'color','r','linewidth',4)

请添加图片描述

子图

  • figure()产生指定编号num的图
    plt.figure(num)
    figure(1) 可以省略
    -subplot生成多个子图
    plt.sunplot(numrows,numcols,fignum) 行列啥意思??
    numrows*numcols<10 plt.sunplot(211)等价 plt.sunplot(2,1,1) 超过则参数错误
def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)

t1 = np.arange(0.0,5.0,0.1)
t2 = np.arange(0.0,2.0,0.02)

plt.figure(figsize=(10,6))
plt.subplot(211)
plt.plot(t1,f(t1),'bo',t2,f(t2),'k')

plt.subplot(212)
plt.plot(t2,np.cos(2*np.pi*t2),'r--')

请添加图片描述

电影数据绘图

import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei']#字体 黑体解决中文乱码
plt.rcParams['axes.unicode_minus'] = False #负号啥的 正常显示
df = pd.read_excel('movie_data3.xlsx')
df.head(0)

请添加图片描述

每个国家地区电影数量的柱状图 bar chart

data = df['产地'].value_counts()
data

请添加图片描述

#x y axis
x = data.index
y = data.values
plt.figure(figsize=(10,6))
plt.bar(x,y,color='g')
plt.title('各个国家或者地区电影数量',fontsize=20)
plt.xlabel('国家或者地区',fontsize=16)
plt.ylabel('电影数量',fontsize=16,rotation=0)
plt.tick_params(labelsize=14) #横轴和纵轴标记的字体大小
plt.xticks(rotation=90)
for a,b in zip(x,y):
    plt.text(a,b+10,b,fontsize=10,ha='center',va='bottom') #前两个的参数:文本的位置 b被选定的参数 字体 水平对齐 垂直对齐
    
plt.grid()
plt.show()

请添加图片描述

每年上映电影数量的曲线图

曲线图/折线图 发展变化趋势
xlabel ylabel title text指定位置防止文字 特殊符号使用Tex语法$$

data=df['年代'].value_counts()
data=data.sort_index()[:-1]
data

请添加图片描述
每隔一定距离 几个点取样 进行标注 使用循环

x=data.index
y=data.values
plt.plot(x,y,color='b')
plt.title('每年电影数量',fontsize=20)
plt.ylabel('电影数量        ',fontsize=18,rotation=0)
plt.xlabel('年份',fontsize=18)
for a,b in zip(x[::10],y[::10]):
    plt.text(a,b+10,b,ha='center',va='bottom',fontsize=10)

plt.annotate('2012年最大值',xy=(2012,data[2012]),xytext=(2025,2100),arrowprops=dict(facecolor='black',edgecolor='red'))
plt.text(1980,1000,'电影数量爆发期')
plt.show()

请添加图片描述

电影长度的绘制饼图 分类不多的 Sector

函数原型 pie(x,explode)

x 每一块比例 归不归一无所谓
labels
showdow
labeldistance
starting

data = pd.cut(df['时长'],[0,60,90,110,1000]).value_counts()
data
y=data.values
#y=y/sum(y)
plt.figure(figsize=(7,7))
plt.title('电影时长比例',fontsize=15)
patches,l_text,p_text = plt.pie(y,labels=data.index,autopct='%.1f %%',colors='bygr',startangle=90)
for i in p_text:
    i.set_size(15)
    i.set_color('white')
plt.legend()
plt.show()

请添加图片描述

电影评分你频率分布直方图

连续变量的概率分布 可归一化

plt.figure(figsize=(10,6))
plt.hist(df['评分'],bins=20,edgecolor='black',alpha=0.5)
plt.show()

请添加图片描述

原文地址:https://www.cnblogs.com/most-silence/p/15495351.html