数据科学原理与数据处理

数据科学原理与数据处理

1 Python行业分析

通过Stack OverFlow专业网站的大数据统计,Python相关技术模块访问量最大的簇是数据科学相关,然后才是后台开发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iJQDlqu-1574825287642)(image/1573607426939.png)]

1.1 数据处理流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3VhzMGM-1574825287645)(image/1573092293192.png)]

1.2 数据科学岗位分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqciqwj5-1574825287646)(image/1573092468415.png)]

2 数据分析好助手Jupyter notebook

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。

2.1 Jupyter notebook的安装

① 使用Anaconda安装

Anaconda一个封装多种工具,库的解释器,它已经自动为你安装了Jupter Notebook及其他工具。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9USygyWC-1574825287647)(image/1574043525927.png)]

② 使用pip 安装
pip3 install jupyter

注意:在安装Jupyter Notebook过程中可能面临无法安装的问题(提示你要升级pip),输入下面的命令即可

pip install --upgrade pip   升级pip
pip install juputer   安装Jupyter

2.2 Jupyter notebook 基本使用

  • 在命令行处,先cd到源代码文件目录
  • 然后输入 jupyter notebook 会自动打开一个jupyter web管理界面
  • 点击右上角的new 下边的python3 创建一个脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxydh3Kl-1574825287648)(image/1573095091236.png)]

  • 点击 run进行运行会在运行完成后自动生成下一格
  • 在notebook的脚本中 想将变量打印出来,不需要加print,直接输入变量名即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wgwZGy1U-1574825287650)(image/1573521805960.png)]

  • **注释:**在notebook中的单元格内添加注释,直接#+注释就可以

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bfSVjl6h-1574825287651)(image/1573521785941.png)]

  • 标题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AAhY3seE-1574825287652)(image/1573522157184.png)]

  • 代码单元:用于编写代码,通过按 Shift + Enter 运行代码,其结果显示在本单元下方。代码单元左边有In [1]: 这样的序列标记,方便人们查看代码的执行次序。

    • shift+enter 直接运行并在下一行插入一个单元格
    • ctrl+enter 直接运行但不插入单元格
    • alt+enter 插入一个新的单元格
  • 编辑模式与命令行模式:

    • 编辑模式用来编写代码,执行文件,鼠标选中单元格,此单元格就会变为编辑模式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbF8N5qX-1574825287653)(image/1574042470451.png)]

    • 命令模式用来执行快捷命令,可以通过鼠标点击两侧的空白处或者键盘上的Esc键,来使编辑模式转化命令模式。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZJ38yLZP-1574825287653)(image/1574042852747.png)]

    • 快捷键,只有在命令模式操作才可以修改文档,
      • Y:单元转入代码状态
      • M:单元转入markdown状态
      • A :在上方插入新单元
      • B:在下方插入新单元
      • X:剪切选中的单元
      • Shift +V:在上方粘贴单元
  • Markdown单元:用于编辑文本,采用 markdown 的语法规范,可以设置文本格式、插入链接、图片甚至数学公式。同样使用 Shift + Enter 运行 markdown 单元来显示格式化的文本(可以用来快速的生成标题)。

2.3 Jupyter notebook 内置的魔法命令
  • %run + 运行python文件路径
%run D:\hello.py
  • %load 将文件中的内容读出来【load回来的代码不会自动执行 ,需要手动执行一遍 】
%load D:\hello.py
  • %timeit 测试代码的执行时间 【%timeit后边只能跟一行代码】
%timeit lis = [x for x in range(10000)]
  • %%timeit 测试代码块的执行时间
%%timrit
lis = []
for i in range(10000):
    lis.append(1)
  • %time 测试单次运行所需要的时间 【%time和%timeit都是测试时间,但是%time没有%timeit准确】
%time lis = [x for x in range(10000)]
  • %%time 测试代码块的执行时间
%%time
lis = []
for i in range(10000):
	lis.append(i)
  • %%html 用于在notebook中显示页面代码
%%html
<a href = 'www.baidu.com'>百度一下</a>
  • %%js 用于在notebook中运行js文件的
%%html
<div class='mytest' style='color:red'>html content</div>

# 写在不同的单元格中
%%js
document.querySelector('.mytest').innerHTML='js content'
  • %%writefile 将内容编写成文件
%%writefile  haha.py
    lis = [x for x in ramge(1000)]

3 数据科学模块NumPy

3.1 初级NumPy

3.1.1 NumPy基本介绍

Numpy:提供了一个在Python中做科学计算的基础库,主要用于数值计算、多维数组(矩阵)的处理。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。

NumPy是使用Python进行科学计算的基本软件包。它包含以下内容:

  • 强大的N维数组对象
  • 复杂的(广播)功能
  • 集成C / C ++和Fortran代码的工具
  • 有用的线性代数,傅立叶变换和随机数功能
  • Nmupy本质就是ndarray
  • 多维矩阵
    • 1维数组看做向量vector–点和直线
    • 2维数组看做2维矩阵–表和平面
    • 3维数组看做3维矩阵–空间

除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。可以定义任意数据类型。这使NumPy可以无缝,快速地与各种数据库集成。官方学习资料https://numpy.org/

3.1.2 NumPy的安装与导入
# 安装  
pip install numpy

# 导入 
import numpy as np
3.1.3 NumPy中的数组创建

NumPy提供的最重要的数据结构是一个称为NumPy数组的强大对象。NumPy数组是通常的Python数组的扩展。NumPy数组配备了大量的函数和运算符,可以帮助我们快速编写各种类型计算的高性能代码。

arange 生成遍历得到的数的数组
array 生成列表元素的数组
linspace 生成元素之间’等差关系‘的数组
logspace 生成元素之间’等比关系‘的数组
ones 生成所有元素都为 1 的数组
zeros 生成所有元素都为 0 的数组
eye 生成一种类似单位矩阵的数组
diag 生成一个对角矩阵数组
random.random 生成 (0,1)的随机数据的随机数组
random.rand 生成随机数据的均匀分布的数组
random.randn 生成一个符合正态分布的数组
random.randint 生成固定范围内的,固定形状的数组
import numpy as np

# 使用arange创建数组
arr = np.arange(0, 6, 2) # 一维数组
arr = np.arange(0, 6, 2).reshape(1, 3) # 二维数组
print(arr)

print('--------------------------------------------------------------------')
# 使用linspace创建数组——元素之间’等差‘
# 参数1 开始位置
# 参数2 结束位置
# 参数3 创建数组元素的个数
arr= np.linspace(0, 6, 7)
print(arr)

print('------------------------------------------------------------------')
# 使用logspace创建函数--元素之间’等比‘
# 参数1 开始位置 10^0
# 参数2 结束位置 10^2
# 参数3 创建数组元素的个数
arr = np.logspace(0, 2, 5)
print(arr)

print('------------------------------------------------------------------')
# ones --生成所有元素都为 1 的数组
arr = np.ones(shape = (2, 3))
print(arr)

print('------------------------------------------------------------------')
# zeros --生成所有元素都为 0 的数组
arr = np.zeros(shape=(2, 3))
print(arr)

print('------------------------------------------------------------------')
# eye--生成一种类似单位矩阵的数组
# 参数k 决定对角线的位置
# 参数k<0 ,对角线上移k个位置
# 参数k>0 ,对角线下移k个位置
# 参数k超出范围,是个(3,3)都为0的数组
arr = np.eye(3, 3, k = 0)
print(arr)

print('------------------------------------------------------------------')
# diag 生成一个对角矩阵数组,参数为对角线上的值
# k 上移,下移 和eye 一样
arr = np.diag([1, 3, 5, 7], k = 0)
arr1 = np.diag([[1, 3, 5, 7], [2, 4, 6, 8]])
print(arr, '\n', arr1)

print('------------------------------------------------------------------')
# 生成 (0,1)的随机数据的随机数组
arr = np.random.random(5)
arr1 = np.random.random((2, 3))
print(arr, '\n', arr1)

print('------------------------------------------------------------------')
# 生成随机数据的均匀分布的数组【需要数据量比较大】
arr = np.random.rand(5)
arr1 = np.random.rand(2, 3)
print(arr,'\n',arr1)

print('------------------------------------------------------------------')
# 生成一个符合正态分布的数组
# 参数为 元素个数 或者 行列数
arr = np.random.randn(2, 3)
print(arr)

print('------------------------------------------------------------------')
# 生成固定范围内的,固定形状的数组
#如果不传size ,那么生成一个随机整数
arr = n.random.randint(0, 5, size = [2, 3])
arr1 = np.random.randint(0, 5)
print(arr, '\n', arr1)

print('------------------------------------------------------------------')
# 获得一个均值为0 标准差为1 的矩阵数组
# 第一个参数是均值 第二个参数是标准差,第三个参数是元素的个数
arr = np.random.normal(0, 1, size = 1000000)
print(arr)
3.1.4 NumPy的数组属性
ndim 输出数组的维度
shape 输出数组的形状
size 输出数组的元素个数
dtype 输出数组的数据类型
itemsize 输出数组的大小
import numpy as np
arr = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[2,3,4],[9,8,7],[5,6,4]]])

print('数组的维度 : ',arr.ndim)
print('数组的形状 : ',arr.shape) # 2块 3行3列
print('数组的元素个数 : ',arr.size)
print('数组的数据类型 : ',arr.dtype)
print('数组的大小 : ',arr.itemsize)
print('数组转置 : ',arr.T)
3.1.5 数组的索引
# # 普通取值
# 一维数组

import numpy as np 
my_array = np.array([1, 2, 3, 4, 5]) 

print(my_array[0])  # 取一维数组的第一个
print(my_array[-1]) # 取一维数组的最后一个

# 二维数组
import numpy as np 
my_array = np.arange(15).reshape(3, 5)

print(my_array[0])  # 取二维数组的第一行
print(my_array[-1])  # 取二维数组的最后一行


# # 切片取值
# 一维数组
import numpy as np 
my_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

print(my_array[0: 5])
print(my_array[: 5])
print(my_array[0: 8: 2])
print(my_array[::-1])

# 二维数组
import numpy as np 
my_array = np.arange(15).reshape(3, 5)

print(my_array[0:5])
print(my_array[:5])
# 注:python生成的普通数组中,切片切出来的值和原来的数据没有任何关系,一个改变 ,另一个不发生改变
# 注:numpy生成的数组,切片切出来的值和原来的数据有引用关系,一个改变,另一个也发生改变

# bool取值
import numpy as np

a = np.array([[1,2], [3, 4], [5, 6]])
bool_idx = (a > 2)              
print(bool_idx)                          
print(a[bool_idx])  

# 或者
print(a[a > 2])   
3.1.6 ndarray 中的合并与分割
concatenate 进行数组的合并 参数:axis = 0与vstack一致,axis = 1与hstack一致
vstack 垂直方向上进行拼接 【行】
hstack 水平方向上进行拼接 【列】
split 进行数组的分割 参数:axis = 0与vstack一致,axis = 1与hstack一致
vsplit 垂直方向上进行分割 【行】
hsplit 水平方向上进行分割 【列】
import numpy as np
# # 合并

# 一维数组的合并
arr_1 = np.array([1, 2, 3])
arr_2 = np.array([4, 5, 6])
arr = np.concatenate([arr_1, arr_2])

print(arr)

# 二维数组的合并
import numpy as np

arr_1 = np.arange(4).reshape((2, 2))
arr_2 = np.arange(4, 8).reshape((2, 2))

#数组组合
# 按行的方向【垂直】,进行拼接,参数是一个对象
new_arr = np.vstack((arr_1, arr_2))
print(new_arr)

# 按列的方向【水平】,进行拼接,参数是一个对象
new_arr = np.hstack((arr_1, arr_2))
print(new_arr)

# 和vstack一样
new_arr = np.concatenate((arr_1, arr_2), axis=0)
print(new_arr)

# 和hstack一样
new_arr = np.concatenate((arr_1, arr_2), axis=1)
print(new_arr)

# # 分割
# 一维数组
arr = np.arange(10)
print(arr.split(arr, 2))
print(arr.split(arr, 5))
# 第二个参数是指分割成几份 ,要传入正确的分割值,因为平均拆分,必须可以被数组位数整除

# 二维数组
arr = np.arange(16).reshape(4, 4)

# 在列的方向上进行分割数组
new_arr = np.hsplit(arr, 4)
new_arr1 = np.split(arr, 4, axis = 1)
print(new_arr)
print('-----------------------------------------------')
print(new_arr1)
print('-----------------------------------------------')

# 在行的方向上进行分割数组
new_arr = np.vsplit(arr, 4)
new_arr1 = np.split(arr, 4, axis = 0)
print(new_arr)
print('-----------------------------------------------')
print(new_arr1)
3.1.7 NumPy中的矩阵创建
mat 创建矩阵
matrix 创建矩阵,会占用更多的内存
asmatrix 创建矩阵,三个都是矩阵的创建,创建方式上并没差别,但是推荐使用mat,asmatrix
bmat 进行堆积组合矩阵
import numpy as np

# 创建矩阵,---【必须是二维的】

## mat
m11 = np.mat('1 2 3;4 5 6;7 8 9')
print(m11)
print('--------------------------mat1-----------------------')
#可以将列表转化为矩阵
m12 = np.mat([[1,2,3],[4,5,6],[7,8,9]])
print(m12)
print('--------------------------mat2-----------------------')
# 可以将数组转化为矩阵
m13 = np.mat(np.array([[1,2,3],[4,5,6],[7,8,9]]))
print(m13)
print('--------------------------mat3-----------------------')


## matrix
#m11 = np.matrix('1 2 3;4 5 6;7 8 9')
m11 = np.asmatrix('1 2 3;4 5 6;7 8 9')
print(m11)
print('--------------------------matrix1-----------------------')
#m12 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
m12 = np.asmatrix([[1,2,3],[4,5,6],[7,8,9]])
print(m12)
print('--------------------------matrix2-----------------------')
#m13 = np.matrix(np.array([[1,2,3],[4,5,6],[7,8,9]]))
m13 = np.asmatrix(np.array([[1,2,3],[4,5,6],[7,8,9]]))
print(m13)
print('--------------------------matrix3-----------------------')

# 推荐使用mat 或者 asmatrix【matrix,会复制一份,占用更多的内存空间】

## bmat 进行堆积组合矩阵

arr1 = list(np.arange(4).reshape(2,2))
arr2 = list(np.arange(4,8).reshape(2,2))
print(arr1,type(arr1))
new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat1-------------------------')
# 数组组合矩阵
arr1 = np.arange(4).reshape(2,2)
arr2 = np.arange(4,8).reshape(2,2)
print(arr1,type(arr1))

new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat2-------------------------')
#列表组合矩阵
arr1 = [[1,2,3],[4,5,6]]
arr2 = [[5,6,7],[7,8,9]]
print(arr1,type(arr1))

new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat3-------------------------')
# 矩阵组合矩阵
arr1 = np.mat('1 2;3 4')
arr2 = np.mat('5 6;7 8')
print(arr1,type(arr1))

new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat4-------------------------')
3.1.8 NumPy数组中矩阵的运算
import numpy as np

# Basic Operators
a = np.arange(25).reshape((5, 5))

b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
              4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
              56, 3, 56, 44, 78]).reshape((5,5))

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** 2)
print(a < b) 
print(a > b)
# 这些操作符都是对数组进行逐元素运算。比如 (a, b, c) + (d, e, f) 的结果就是 (a+d, b+e, c+f)。它将分别对每一个元素进行配对,然后对它们进行运算。它返回的结果是一个数组。

print(a.dot(b))
# dot() 函数计算两个数组的点积。它返回的是一个标量(只有大小没有方向的一个值)而不是数组。



import numpy as np

jz1 = np.mat(np.arange(9).reshape(3,3))
jz2 = np.mat(np.arange(9,18).reshape(3,3))
jz3 = np.mat(np.arange(6).reshape(2,3))
jz4 = np.mat(np.arange(9,15).reshape(2,3))

#矩阵与数相乘
result = 3*jz1
print(result)
print('---------------------矩阵运算 1----------------------')

#矩阵与同形矩阵相加
result = jz1+jz2
print(result)
print('---------------------矩阵运算 2----------------------')

#矩阵与同形矩阵相减
result = jz1-jz2
print(result)
print('---------------------矩阵运算 3----------------------')

#矩阵与矩阵相乘【左矩阵列数 == 右矩阵行数(必须满足!)】
# result = jz3*jz1
# result = np.matmul(jz3,jz1) #在某些情况下 matmul 会比dot严格一点
result = np.dot(jz3,jz1) #
print(result)
print('---------------------矩阵运算 4----------------------')

#矩阵对应元素相乘 ---需要满足广播机制 ---数组的广播机制
result = np.multiply(jz1,jz2) #【必须同形】
print(result)
print('---------------------矩阵运算 5----------------------')

print(jz1,'\n',type(jz1))
print('矩阵的转置 : \n',jz1.T)
print('矩阵的逆矩阵 : \n',jz4.I) ## A * A.I = E
print(
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值