python数据分析----matplotlib、numpy

数据分析:
数据分析

  1. 基础概念和环境
  2. matplotlib
  3. numpy
  4. pandas
    第一部分综述
    1、为什么学习数据分析
    2、什么是数据分析
    数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取适当行动。
    数据分析的流程:
    提出问题---->准备数据---->分析数据---->获得结论---->成果可视化
    3、环境安装
    4、认识jupyter notebook

第二部分 matplotlib
1、什么是matplotlib
1>能将数据进行可视化,更直观的呈现
2>使数据更加客观、更具说服力
matplolib:最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建
2、matplotlib基本要点
axis轴,指的是x或者y这种坐标轴
3、matplolib的散点图、直方图、柱状图
4、更多的画图工具
jupyter notebook

绘制折线图

#coding=utf-8
from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")#识别中文

y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]#y的取值
x = range(11,31)#x的取值范围

#设置图形大小
plt.figure(figsize=(20,8),dpi=80)#figsize设置大小,dpi设置分辨率

plt.plot(x,y)

#设置x轴刻度
_xtick_labels = ["{}岁".format(i) for i in x]#x轴显示格式
plt.xticks(x,_xtick_labels,fontproperties=my_font)
plt.yticks(range(8,9))

#绘制网络,使图带有网格
plt.grid(alpha=0.4)#alpha透明度0~1,网格设置

#展示
plt.show()

在这里插入图片描述

#coding=utf-8
from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")#识别中文
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,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]#y的取值
x = range(11,31)#x的取值范围
##plot是绘制的意思
#设置图形大小
plt.figure(figsize=(20,8),dpi=80)#figsize设置大小,dpi设置分辨率

plt.plot(x,y_1,label="自己",color="orange",linestyle=':')#label标注
plt.plot(x,y_2,label="同桌",color="cyan",linestyle='--')

#设置x轴刻度
_xtick_labels = ["{}岁".format(i) for i in x]#x轴显示格式
plt.xticks(x,_xtick_labels,fontproperties=my_font)
#plt.yticks(range(8,9))

#绘制网络,使图带有网格
plt.grid(alpha=0.4,linestyle=':')#alpha透明度0~1,网格设置

#添加图例,告诉别人哪条线表示的是什么
plt.legend(prop=my_font,loc="upper left")#prop=my_font显示中文,只有legend里显示中文用prop,其他地方都用fontproperties
#loc="upper left"在左上角显示

#展示
plt.show()

自定义绘制图形的风格
plt.plot(
x, # x
y, # y
----->在绘制的时候指定即可
color=‘r’ , # 线条颜色,英文十六进制都可以
linestyle=’–’ , # 线条风格
linewidth=5, # 线条粗细
alpha=0.5, # 透明度
)
为每条线添加图例:

plt.plot(range(len(a)),a,label="自己")
plt.plot(range(len(a)),b,label="同桌")
#---->通过label指定显示图例的内容
plt.legend(prop=my_font,loc="best")
#---->通过prop指定图例的字体
#---->通过loc指定图例的位置,默认为右上角

标记文本注释(html)
添加水印(html)

1、绘制折线图(plt.plot)
2、设置图片的大小和分辨率(plt.figure)
3、实现图片的保存(plt.savefig)
4、设置xy轴上的刻度和字符串(xticks)
5、解决刻度稀疏和密集问题(xticks)
6、设置标题,xy轴的lable(title,xlable,ylable)
7、设置字体(font_manager.fontProperties,matplotlib.rc)###fc-list :lang=zh 查看字体
8、在一个图上绘制多个图形(plt多次plot即可)
9、为不同的图形添加图例

对比常用统计图:
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图。
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据,展示一组或多组数据的分布状况。(统计)

条形图:排列在工作表的列或行中的数据可以绘制到条形图中。
特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计)

散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

绘制散点图

技术要点:
plt.scatter(x,y)

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")#识别中文
y_3=[11,17,16,11,12,11,12,13,13,14,14,13,15,16,17,18,16,17,18,19,18,17,21,20,22,21,23,23,24,24,24]
y_10=[11,17,16,11,12,11,12,13,13,14,14,13,15,16,17,18,16,17,18,19,18,17,21,20,22,21,23,23,24,24,24]
x_3=range(1,32)
x_10=range(51,82)

#设置图形大小
plt.figure(figsize=(20,8),dip=80)

##使用scatter方法绘制散点图,和之前的绘制折线图的唯一区别
plt.scatter(x_3,y_3,label="3月份")
plt.scatter(x_10,y_10,label="10月份")

#调整x轴的刻度
_x=list(x_3)+list(x_10)
_xtick_labels=["3月{}日".format(i) for i in x_3]
_xtick_labels+=["10月{}日".format(i-50) for i in x_3]
plt.xticks(_x[::3],_xtick_labels[::3],fontproperties=my_font,rotation=45)##[::3]调整步长,rotation=45使x轴下方文字呈45度显示

#添加图例
plt.legend(loc="upper left",prop=my_font)


#添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)
plt.title("标题",fontproperties=my_font)


#展示
plt.show()

散点图应用:
1、不同条件(维度)之间的内在关联关系
2、观察数据的离散聚合程度

绘制条形图

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")#识别中文
a = ["低位","丰富\n:巍峨厄尔","微服务\n:于同年","卡死\n:温热"]#长度较长时可以加一个\n
b=[10,20,30,40,50]

#设置图形大小
plt.figure(figsize=(20,15),dpi=80)
#绘制条形图
plt.bar(range(len(a)),b,width=0.3)
#设置字符串到x轴上
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=90)

plt.savefig("./movie.png")
plt.show()

#绘制横着的条形图
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")#识别中文
a = ["低位","丰富\n:巍峨厄尔","微服务\n:于同年","卡死\n:温热"]#长度较长时可以加一个\n
b=[10,20,30,40,50]

#设置图形大小
plt.figure(figsize=(20,8),dpi=8.0)
#绘制条形图
plt.barh(range(len(a)),b,height=0.3,color="orange")
#设置字符串到x轴上
plt.yticks(range(len(a)),a,fontproperties=my_font)
plt.grid(alpha=0.3)
plt.savefig("./movie.png")
plt.show()

应用:
1、数量统计
2、频率统计(市场饱和度)

直方图

在这里插入图片描述
在这里插入图片描述
应用:
1、用户的年龄分布状况
2、一段时间内用户点击次数的分布状态
3、用户活跃时间的分布状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
**

numpy

**
快速、方便、科学计算的基础库
1、什么是numpy
numpy是帮我们处理数值型数据的。
在这里插入图片描述

2、numpy基础
numpy创建数组(矩阵)
在这里插入图片描述

import numpy as np
import random

t1=np.array([1,2,3,])
print(t1)
print(type(t1))

t2=np.array(range(10))
print(t2)
print(type(t2))

t3=np.array(range(4,10,2))
print(t3)
print(type(t3))


print(t3.dtype)#dtype 所存数据的数据类型 #根据电脑的位数来的
print("*"*100)
#numpy中的数据类型
t4=np.array(range(1,4),dtype=float)#float64
#t4=np.array(range(1,4),dtype="float32")#float32
print(t4)
print(t4.dtype)

#numpy中的bool类型
t5=np.array([1,1,0,1,0,0],dtype=float)
print(t5)
print(t5.dtype)

#调整数据类型
t6=t5.astype("int8")
print(t6)
print(t6.dtype)#int8

#numpy中的小数
t7=np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

t8=np.round(t7.2)#取两位小数
print(t8)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当形状里只有一个数的时候,这个数表示的是数组一共有的个数;
如果说一个数组的shape的元组只有一个值,则代表它是一维的;如果有两个值,则代表是二维的(第一个数表示行数,第二个数表示列数);三个值代表三维的。
reshape((x,y))代表把数据转换为一个x行y列的数组;
reshape((z,x,y))代表把数据转换为z块x行y列的数组。
reshape对数据本身没有什么改变。通常有返回值的时候都本身没有什么变化,除了extend
重新赋值会对数据本身发生改变。
t5.reshape((m,) )(m=x*y)把二维变成一维
当不知道数组中元素的个数时:
t6 = t5.reshape((t5.shape[0]*t5.shape[1],))
或t5.flatten()
在这里插入图片描述

在这里插入图片描述

当数组和一个数进行计算时,这个数字要和数组里的所有元素都进行运算。(即广播)在这里插入图片描述
行数和列数相同的数组和数组进行计算是对应位置的元素做操作;
当一个数组跟一个一行多列的数组进行计算时,第一个数组的每一列都和这一列进行计算(两个数组的行数相同);
当一个数组跟一个一列多行的数组进行计算时,第一个数组的每一行都和这一行进行计算(两个数组的列数相同);
在这里插入图片描述
但是一下情况可以进行运算
在这里插入图片描述
在这里插入图片描述
维度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据的切片在这里插入图片描述
在这里插入图片描述
从txt文件中读取数据
在这里插入图片描述

import numpy as np

us_file_path="./youtube_video_data/US_video_data_numbers.csv"
uk_file_path="./youtube_video_data/GB_video_data_numbers.csv"

t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)#delimiter=","以逗号进行分割,dtype="int"把科学记数法的数字转为正常数字展示,unpack=True转置(按照对角线顺时针旋转180度)
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
print(t1)
print("*"*100)
print(t2)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import numpy as np

us_file_path="./youtube_video_data/US_video_data_numbers.csv"
uk_file_path="./youtube_video_data/GB_video_data_numbers.csv"


t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)

print(t2)
print("*"*100)
#取行
print(t2[2])#是从0开始的,只有xpass不是从零开始的,从1开始

#取连续的多行
print(t2[2:])
#取不连续的多行
print(t2[[2,8,10]])
print(t2[1,:])
print(t2[2:,:])#取第二行到最后
print(t2[[2,10,3],:])
#取列
print(t2[:,0])#第一列
#取连续的多列
print(t2[:,2:])
#取不连续的多列
print(t2[:,[0,2]])

##(,)逗号前是行,逗号后是列,没写数时,表示都要

a=t2[2,3]
print(a)
print(type(a))#numpy中数值的类型
#取多行多列,取第3行到第5列,第2列到第4列的值:
#取的是行和列交差点的位置
b=t2[2:4,1:4]
print(b)
#取多个不相邻的点
#选出来的结果是(0,0)  (2,1)  (2,3)
c=t2[[0,2,2],[0,1,3]]
print(c)

在这里插入图片描述
在这里插入图片描述
#取到之后直接修改

t2[t2<10] = 3 ##把t中小于10的数字替换为3

在这里插入图片描述

在这里插入图片描述
a = 3 if 3>2 else 4
a = 3 if 3<2 else 4
np.where(t2<=3,100,300)#把小于3的全部替换成100,其他的替换成300

在这里插入图片描述
t2[3,3] = np.nan###错误,不能赋值,t2为int类型

t2 = t2.astype(float)
t2[3,3] = np.nan正确

数组的拼接:
在这里插入图片描述

在这里插入图片描述
水平(竖直)拼接 跟 水平(竖直)分割操作刚好相反
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

import numpy as np

us_file_path="./youtube_video_data/US_video_data_numbers.csv"
uk_file_path="./youtube_video_data/GB_video_data_numbers.csv"

#加载国家数据


us_data= np.loadtxt(us_data,delimiter=",",dtype="int")
uk_data= np.loadtxt(uk_data,delimiter=",",dtype="int")
#添加国家信息
#构造全为0的数据
zeros_data = np.zeros((us_data.shape[0],1))##多行一列
ones_data = np.ones((us_data.shape[0],1))#全为1
#分别添加一列全为0,1的数据
us_data = np.hstack((us_data,zeros_data)).astype(int)
uk_data = np.hstack((uk_data,ones_data)).astype(int)###.astype(int)防止生成科学计数法

#拼接两组数据
final_data = np.vstack((us_data,uk_data))
print(final_data)

3、numpy常用方法
在这里插入图片描述

np.random.
在这里插入图片描述
np.random.randint(10,20,(4,5)) ###创建一个四行五列的数组,每个数字的取值范围在10~20之间,(包含10,不包含20)

import numpy as np

np.random.seed(10)
t =np.random.randint(0,20,(3,4))
print(t)###下次随机产生的结果跟前一次使用相同的种子产生的随即结果是一样的

在这里插入图片描述
在这里插入图片描述
1、2属于浅拷贝
3属于深拷贝

在这里插入图片描述
在这里插入图片描述
t2[:,0] = 0
np.count_nonzero(t2) ####20
np.count_nonzero(t2 != t2) ######1
np.count_nonzero(np.isnan(t2)) #######1

np.sum(t2)
t3 = np.arrange(12).reshape((3,4))
np.sum(t3)
np.sum(t3,axis=0)###axis=0,行方向的同列元素相加
np.sum(t3,axis=1)###axis=0,列方向的同行元素相加
np.sum(t2,axis=0)
在这里插入图片描述

4、numpy常用统计方法
mean均值

在这里插入图片描述

import numpy as np
t1 = np.arrange(12).reshape((3,4)).astype("float")

t2[1,2:] = np.nan

print(t1)
def fill_ndarray(t1):
for i in range(t1.shape[1]):#遍历每一列
	temp_col = t1[:,i] #当前的一列
	np.count_nonzero(temp_col != temp_col)
	if nan_num != 0:##不为0,说明当前这一列有nan
		temp_not_nan_col = temp_col[temp_col == temp_col] ##当前一列不为nan的array
		temp_not_nan_col.mean()
		temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()##选中当前为nan的位置,把值赋值为不为nan的均值
	return t1
if __name__ == '__main__':
	t1 = np.arrange(24).reshape((4,6)).astype("float")
	t2[1,2:] = np.nan
	print(t1)
	t1 = fill_ndarray(t1)
	print(t1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值