array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 numpy/pandas/matplotlib模块 - 爱码网

numpy模块

numpy模块导入时,注意需要设置别名为 np

一维数组

只有一行,相当于一条线

# 生成一个一维数组
import numpy as np

lis = [x for x in range(10)]
arr1 = np.array(lis)
print(arr1,type(arr1)) #打印结果 [0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'>

二维数组

有行有列,是numpy模块处理最多的数据类型.

三维数组就是在一个大中括号中有多个二位数组

一个列表里面装了多个一维数组.

# 生成一个二维数组
import numpy as np

lis1 = [1,2,3]
lis2 = [4,5,6]
arr1 = np.array([lis1,lis2])
print(arr1) # 打印出了一个二维数组
#[[1 2 3]
 [4 5 6]]

np.array() 括号内需传入一个类似数组的排序对象

列表list和numpy的区别

列表就是对一维数组进行操作,而numpy是对多维数组进行操作

获取多维数组的行和列

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 返回的是一个元组(2, 3),表示这个二维数组的行数和列数
print(arr.shape[0])# 行
print(arr.shape[1])# 列

多维数组的索引

  • 中括号加锁定,中间用逗号隔开
import numpy as np

arr = np.array([[1,2,3],[4,5,6]])

# 比如说我想取arr中的第1行第2列
print(arr[0,1])

# 我想取 第一行所有的数
print(arr[0,:])

# 我想取 第一列所有的数
print(arr[:,0])

# 我想取 第一行,第二列的第2个和第3个元素
print(arr[0,[1,2]])

高级功能

筛选数据

给定一个多维数组,我想取其中年龄大于60的数

import numpy as np
import random

arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], \
                [random.randint(30, 80) for x in range(5)]])

print(arr > 60) 
print(arr[arr > 60])

#[[False False False  True  True]
 [ True False False  True False]
 [ True False False False False]]

#[65 66 75 64 61]

多维数组元素的替换

例如将上面的大于60岁的年龄全部替换成0岁

import numpy as np
import random

arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], \
                [random.randint(30, 80) for x in range(5)]])

print(arr > 60) 
print(arr[arr > 60])

arr[arr>60]=0
print(arr)

#[[False False  True False False]
  [False  True  True False False]
  [False  True False  True False]]

# [66 72 72 61 64]

[[58 52  0 51 60]
 [32  0  0 60 56]
 [37  0 60  0 40]]

或者将指定行指定列的元素进行替换

import numpy as np

arr = np.array([[1,2,3],[4,5,6]])
arr[1,2] = 10
print(arr)

#[[ 1  2  3]
  [ 4  5 10]] # 6被替换成10

多维数组的合并

既然是合并,至少需要两个多维数组

import numpy as np

arr1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr2 = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])
print(f'arr1:{arr1}')
print(f'arr2:{arr2}')

# 垂直合并
print(np.vstack((arr1, arr2)))

# 水平合并
print(np.hstack((arr1, arr2)))

# 默认垂直合并axis=0,
# axis=1 水平合并
print(np.concatenate((arr1,arr2),axis=0))
print(np.concatenate((arr1,arr2),axis=1))

# 打印结果
arr1:[[1 2 3 4]
 [5 6 7 8]]
    
arr2:[[ 9 10 11 12]
 [13 14 15 16]]
    
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

[[ 1  2  3  4  9 10 11 12]
 [ 5  6  7  8 13 14 15 16]]

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

[[ 1  2  3  4  9 10 11 12]
 [ 5  6  7  8 13 14 15 16]]

在numpy中为了统一做处理,只要有axis=0的就是列,axis=1的就是行

通过函数方法创建多维数组

import numpy as np

# arange 创建一维数组
print(np.arange(10)) #1-10,不含10
print(np.arange(1,10,2)) # 开始,结束,步长
# 打印结果
[0 1 2 3 4 5 6 7 8 9]

[1 3 5 7 9]

# ones 打印出的都是1
print(np.ones((3,4))) # 需要传一个元组,设置行和列
# 打印结果
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

# zeros 打印出的都是0
print(np.zeros((3,4))) # 需要传一个元祖,设置行和列
# 打印结果
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

# eye 
print(np.eye(5,5))
# 打印结果
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

矩阵的运算

# 多维数组之间可以进行运算
# + - * / % **
import numpy as np

arr1 = np.arange(1,10)
arr2 = np.arange(11,20)

print(arr1) # 矩阵arr1
# [1 2 3 4 5 6 7 8 9]

print(arr2) # 矩阵arr2
# [11 12 13 14 15 16 17 18 19]

print(arr1+arr2) # 两个矩阵对应位置的元素相加
# [12 14 16 18 20 22 24 26 28]

print(arr1-arr2) # 两个矩阵对应位置的元素相减
# [-10 -10 -10 -10 -10 -10 -10 -10 -10]

print(arr1*arr2) # 两个矩阵对应位置的元素相乘
# [ 11  24  39  56  75  96 119 144 171]

print( arr2/arr1) # 两个矩阵对应位置的元素相除
# [11.          6.          4.33333333  3.5         3.          2.66666667
#   2.42857143  2.25        2.11111111]

print(arr2%arr1) # 对应位置取余
# [0 0 1 2 0 4 3 2 1]

print(arr1**2) # 单个矩阵每个元素都取2次方
# [ 1  4  9 16 25 36 49 64 81]

求最大值最小值

import numpy as np

# 求最大值
arr = np.array([[1, 4, 6, 7], [9, 5, 7, 8]])
print(arr.max())

# 求最小值
print(arr.min())

numpy生成随机数

import numpy as np
# 生成3行4列0到1之间的随机小数
print(np.random.rand(3,4))
import numpy as np

np.random.seed(1)# 永不随机,固定的数
print(np.random.rand(3,4))


rs = np.random.RandomState(1)  # 永不随机,固定的数
rs.rand(3, 4)

pandas模块

pandas模块有什么用

支持文件存取操作

Series(了解)

类似于一维数组,只能放一维数组

import pandas as pd
import numpy as np

print(pd.Series(np.arange(10)))
# 打印结果
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64

二维以上的数组使用DataFrame

DataFrame(掌握)

import pandas as pd
import numpy as np

print(pd.DataFrame(np.array([[1, 2, 3, 4], [1, 2, 3, 4]])))
# 打印结果
   0  1  2  3
0  1  2  3  4
1  1  2  3  4	
# 时间范围 
dates = pd.date_range('2019-02',periods=7) # 默认从1月1日开始,
print(dates)
# 打印结果
DatetimeIndex(['2019-02-01', '2019-02-02', '2019-02-03', '2019-02-04',
               '2019-02-05', '2019-02-06', '2019-02-07'],
              dtype='datetime64[ns]', freq='D')
import pandas as pd
import numpy as np

dates = pd.date_range('2018-02', periods=7) # 日期
# print(dates)
goods_list = ['tesla', 'transformer', 'chognqiwawa', 'masaladi'] # 商品列表
price = np.random.rand(7, 4) # 随机商品价格,7行4列
# print(price)

df = pd.DataFrame(price, index=dates, columns=goods_list) # 约定俗成,习惯用 df
print(df)

#              tesla  transformer  chognqiwawa  masaladi
2018-02-01  0.993845     0.124944     0.534339  0.436508
2018-02-02  0.948098     0.921375     0.931371  0.288497
2018-02-03  0.965210     0.074648     0.108268  0.198268
2018-02-04  0.709131     0.207583     0.414028  0.520331
2018-02-05  0.146407     0.025101     0.399028  0.916314
2018-02-06  0.884905     0.319202     0.448119  0.721902
2018-02-07  0.549198     0.324437     0.872872  0.311014

df的相关方法及属性

# dtype    查看数据类型
# index    查看行序列或者索引
# columns  查看各列的标签
# values   查看数据框内的数据,也即不含表头索引的数据
# describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
# transpose    转置,也可用T来操作
# sort_index   排序,可按行或列index排序输出
# sort_values     按值排序,可以具体选择某一个标签
print(df.dtype) # 打印每一行的数据类型
print(df.index) # 打印所有的行的索引
print(df.columns) # 打印所有的列的标签
print(df.values) # 打印数据框内的数据,不含表头和索引的数据
print(df.sort_values(by=['tesla'], ascending=False)) # 按照标签'tesla'进行排序,可以控制升序或者降序

处理缺失值

test_data = '''
5.1,,1.4,0.2
4.9,3.0,1.4,0.2
4.7,3.2,,0.2
7.0,3.2,4.7,1.4
6.4,3.2,4.5,1.5
6.9,3.1,4.9,
,,,
'''
这个矩阵中缺失了一部分数据

import pandas as pd
from io import StringIO


test_data = StringIO(test_data) # 把test_data读入内存
df = pd.read_csv(test_data) # 从csv中读取test_data数据
print(df)

df2 = df.dropna(thresh=4, axis=1) # 0是行,1是列  thresh 表示存在正常数据的个数
print(df2)
df3 = df.dropna(thresh=1, axis=0) # 0是行,1是列
print(df3)
# df4 = df.dropna(subset['c2']) #
# print(df4)
df5 = df.fillna(value=33)      # 缺失的值会被value值替换填充
print(df5)

合并数据

import pandas as pd
import numpy as np

df2 = pd.DataFrame(np.zeros((3, 4)))
df3 = pd.DataFrame(np.ones((3, 4)))
df4 = pd.concat((df2,df3),axis=0) # 默认是垂直合并
df5 = pd.concat((df2,df3),axis=1) # 改为1后是水平合并
print(df4,df5)

matplotlib模块

matplotlib模块有什么用?

图形可视化,主要用来画图

import matplotlib.pyplot as plt
# 只识别英语,所以通过以下两行增加中文字体
from matplotlib.font_manager import FontProperties

# %matplotlib inline  # jupyter默认不显示图片,通过这一行告诉他显示图片
font = FontProperties(fname='D:\msyh.ttc')

classes = ['1班', '2班', '3班', '4班']
student_amounts = [30, 20, 30, 40]

classes_index = range(len(classes))  # [0,1,2,3]
#      [0,1,2,3]      [30,20,30,40]
plt.bar(classes_index, student_amounts)
plt.xticks(classes_index, classes, FontProperties=font)
plt.text(0, 32, '30')

plt.xlabel('班级', FontProperties=font)
plt.ylabel('学生人数', FontProperties=font)
plt.title('班级-学生人数', FontProperties=font)
plt.style.use('ggplot')
plt.plot()
plt.show()

相关文章:

  • 2021-02-17
  • 2020-03-31
  • 2018-05-04
  • 2018-07-25
  • 2020-05-06
  • 2021-08-13
  • 2021-12-12
  • 2021-08-13
猜你喜欢
  • 2021-01-28
  • 2018-04-16
  • 2019-05-30
  • 2018-03-20
  • 2018-03-15
  • 2019-02-18
  • 2019-02-21
  • 2021-08-13
相关资源
相似解决方案