目录
- numpy模块
- 二维数组
- numpy数组的属性
- T 数组的装置
- dtype 数组元素的数据类型
- size 数组元素的个数
- ndim 数组的维数
- shape数组的维度大小
- astype 类型转换
- 切片
- 赋值
- 数组的合并
- 通过函数创建numpy数组
- numpy数组运算
- numpy.random生成随机数
- matplotlib模块
- 条形图bar
- 直方图hist
- 折线图plot
- 散点图scatter+直线图plot
- pandas模块
numpy模块
用来数据分析,对numpy数组(矩阵)
import numpy as np
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(arr1 * arr2) # [4,10,18]
二维数组
arr = np.array([
[1,2,3],
[4,5,6]
])
numpy数组的属性
T 数组的装置
print(arr.T) # 对高维数组而言,行列互换,转置
dtype 数组元素的数据类型
numpy数组是属于python解释器(int32/float64)
print(arr.dtype)
size 数组元素的个数
print(arr.size) # 6
ndim 数组的维数
print(arr.ndim) # 2
shape数组的维度大小
print(arr.shape()) # (2,3) 行,列
astype 类型转换
arr = arr.astype(np.float64)
print(arr)
切片
print(arr[:,:]) # 行,列
print(arr[0,0]) # 1
print(arr[0.:]) # 第一行所有元素
print(arr[:,-2:]) # 最后两列元素
print(arr[arr>4]) # 大于4的元素
赋值
arr[0,0] = 0 # 第1行第1列元素为0
arr[0,:] = 0 # 第一行元素都为0
arr[:,:] = 0 # 所有元素均为0
数组的合并
arr1 = np.array([
[1, 2, 3],
[4, 5, 6]
])
arr2 = np.array([
[7, 8, 9],
['a', 'b', 'c']
])
print(np.hstack((arr1,arr2))) # 按行合并(只能放元组)
print(np.vstack((arr1,arr2))) # 按列合并
prtin(np.concatenate((arr1,arr2),axis = 1)) # 默认按列合并,0表示列,1表示行
通过函数创建numpy数组
print(np.ones((2,3))) # 创建一个2行3列元素均为1的数组(只能放元组)
print(np.zeros((2,3))) # 创建一个2行3列元素均为0的数组
print(np.eye(3,3)) # 创建一个n行n列均为1,其他元素为0的数组
print(np.linspace(1,100,10)) # 创建一个间隔(100-1)/(10-1)的从1到100的数组
print(np.arange(2,10)) # 创建2-9的数组(顾头不顾尾)
arr1 = np.zeros((1,12))
print(arr1.reshape((3,4))) # 重构成3行4列的数组
numpy数组运算
# =-*/ // ** %
arr1 = np.ones((3,4)) * 4
print(arr1)
# sin
print(np.sin(arr1))
# 矩阵运算(点乘)
arr1 = np.array([
[1,2,3],
[4,5,6]
])
arr2 = np.array([
[1, 2],
[4, 5],
[6, 7]
])
print(np.dot(arr1, arr2)) # 2* 3 3*2
# 求逆
arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
print(np.linalg.inv(arr))
# numpy数组数学和统计方法
print(np.sum(arr[0, :]))
numpy.random生成随机数
print(np.random.rand(3, 4)) #产生均匀分布的随机数
print(np.random.randn(3, 4)) #产生标准正态分布随机数
print(np.random.random((3, 4)))
np.random.seed(1) # 固定随机数
rs = np.random.RandomState(1) # 固定随机数
print(rs.rand(10))
arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
np.random.shuffle(arr)
print(arr) # 打乱顺序
print(np.random.randint(1, 100, (3, 4))) # 针对某一个范围
matplotlib模块
条形图bar
from matplotlib import pyplot as plt
# 导入字体格式
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # 通过FontProperties中的关键字fname把字体格式传入到font
# 原数据
clas = ['3班', '4班', '5班', '6班']
students = [50, 55, 45, 60]
# 设置背景模板
plt.style.use('ggplot')
#range索引x轴的柱数
clas_index = range(len(clas))
# 通过bar画出柱状图,设置颜色
plt.bar(clas_index,students, color = 'darkblue')
# 通过xlabel\ylabel\title设置x轴\y轴标题和主标题
plt.xlabel('班级',fontproperties=font)
plt.ylabel('人数',fontproperties=font)
plt.title('班级-人数',fontproperties=font)
# 通过xticks将x轴索引柱数替换成clas,并设置字体格式
plt.xticks(clas_index, clas, fontproperties=font)
# 通过show将图标展示
plt.show()
直方图hist
from matplotlib import pyplot as plt
import numpy as np
#从matplotlib.font_manager导入字体
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc') # 通过FontProperties中的关键字fname把字体格式传入到font
# 通过style.use设置背景模板
plt.style.use('ggplot')
# 利用numpy/random/randn生成数据
x1 = np.random.randn(10000) # 标准正态分布随机数
x2 = np.random.rand(10000)
# 通过figure生成画布, 再通过add_subplot控制生成画板的个数
fig = plt.figure() # 生成画布
ax1 = fig.add_subplot(1,2,1) # 分成1行2列的画板取第一个
ax2 = fig.add_subplot(1,2,2) # 分成1行2列的画板取第二个
# 利用numpy/random/randn生成数据
x1 = np.random.randn(10000) # 标准正态分布随机数
x2 = np.random.randn(10000)
# # 设置画板的调用数据\背景颜色
ax1.hist(x1,bins = 50, color = 'darkblue') # bins=50表示每个变量的值分成50份,即会有50根柱子
ax2.hist(x2,bins = 50, color = 'y')
# 通过suptitle设置总标题
fig.suptitle('两个正太分布',fontproperties =font,fontsize = 20)
#通过set_title设置两个分标题
ax1.set_title('x1的正态分布',fontproperties = font)
ax2.set_title('x2的正态分布',fontproperties = font)
# 通过show展示出来
plt.show()
折线图plot
import numpy as np
#导入matplotlib中的pyplot功能
from matplotlib import pyplot as plt # 导入matplotlib中的pyplot
from matplotlib.font_manager import FontProperties # 通过.font_manager导入FontProperties
# 通过FontProperties(fname = )导入字体
font = FontProperties(fname= 'C:\Windows\Fonts\simsun.ttc')
# 设置背景模板(style.use)
plt.style.use('ggplot')
# 通过numpy模块生成数据
np.random.seed(1)
x1 = np.random.randn(40).cumsum() # 累加
x2 = np.random.randn(40).cumsum() # 累加
x3 = np.random.randn(40).cumsum() # 累加
x4 = np.random.randn(40).cumsum() # 累加
# 通过plot画出折点图,linestyle线的类型(-/--/-./:), marker点的形状(o/*/s)
plt.plot(x1,c = 'r', linestyle = '-',marker = 'o', label = '红圆线') # 红色,实线,圆点
plt.plot(x2,c = 'b', linestyle = '--',marker = '*', label = '蓝星线') # 蓝色,虚线,星点
plt.plot(x3,c = 'y', linestyle = '-.',marker = 's', label = '黄方线') # 黄色,实点线,方点
plt.plot(x4,c = 'black', linestyle = ':',marker = 's', label = '黑方线') # 黑色,点线,方点
# 通过legend设置说明
plt.legend(loc = 'best',prop = font)
# 展示(show)
plt.show()
散点图scatter+直线图plot
import numpy as np
# 导入模块(pyplot) 字体(.font_manager导入FontProperties)
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname = 'C:\Windows\Fonts\simsun.ttc')
# 模板(style.use)
plt.style.use('ggplot')
# 分画布(figure)
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
#生成数据(arange)
x = np.arange(20)
y = x**2
x2 = np.arange(20)
y2 = x2
# 折点图
ax1.scatter(x,y,c = 'r',label = '红')
ax1.scatter(x2,y2,c = 'y',label = '黄')
# 直线图
ax2.plot(x,y)
ax2.plot(x2,y2)
# 添加标题
fig.suptitle('两张图', fontproperties=font, fontsize=15)
ax1.set_title('散点图', fontproperties = font)
ax2.set_title('折线图', fontproperties = font)
# 展示show
plt.show()
pandas模块
操作excel/json/sqlini/csv
import numpy as np
import pandas as pd
np.random.seed(1)
index = pd.date_range('2019-01-01',periods= 6, freq= 'M')
print(index)
columns = ['c1', 'c2', 'c3', 'c4']
print(columns)
data = np.random.randn(6, 4)
print(data)
# .DataFrame生成dataframe数据结构
df = pd.DataFrame(index=index, columns=columns,data =data)
print(df)
# to_excell保存文件,读出成文件
df.to_excel('data.xlsx')
# 读出文件
df = pd.read_excel('data.xlsx',index_col=[0])
print(df)
print(df.index)
print(df.columns)
print(df.values)
print(df[['c1', 'c2']])
# 按照index取值
print(df.loc['2019-01-31'])
print(df.loc['2019-01-31':'2019-05-31'])
# 按照values取值
print(df)
print(df.iloc[0,0])
df.iloc[0, :] = 0
print(df)