数据分析

什么是数据分析
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用的信息形成结论,并对数据加以详细研究和概括总结的过程。
使用python做数据分析的常用库
1.numpy 处理基础数值算法
2.scipy 处理科学计算
3.matplotlib 实现数据可视化
4.pandas 提供了序列的高级函数

Numpy概述

1.Numerical Python(数值的python),补充了python语言欠缺的数值运算能力。
2.Numpy是其他数据分析和机器学习库的底层库。
3.Numpy完全标准C语言实现,运行效率充分优化。
4.Numpy开源免费。
Numpy的历史
1.1995年,Numeric,用于完成python语言数值运算的扩充。
2.2001,Scipy->Numarray,用于完成多维数组运算。
3.2005年,Numeric+Numarray->Numpy。
4.2006年,Numpy脱离了Scipy成为一个独立项目。

Numpy基础

Numpy的核心:ndarray对象
使用numpy.ndarraya对象表示一个数组

import numpy as np
ary=np.array([1,2,3,4,5])
print(ary)
ary=ary*10
print(ary)

内存中的ndarray对象

元数据(metadata)
存储对目标数组的描述信息,如dim count(维数),dimensions(维度),dtype(数组元素类型),data(数据)等。
实际数据
完整的数组数据
将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少了对实际数据的访问频率,提高性能。

ndarray数组对象的创建

np.array(可以被解释为Numpy数组的序列)
np.arange(起始值(0),终止值,步长(1))
np.zeros(数组元素的个数,dtype=‘类型’)
np.ones(数组元素的个数,dtype=‘类型’)
案例:测试ndarry对象的创建

import numpy as np 
a=np.array([[1,2,3,4],[5,6,7,8]])
print(a)
b=np.arange(1,10,1)
print(b)
c=np.zeros(10)
print(c,c.dtype)
d=np.ones(10,dtype='int64')
print(d,d.dtype)

ndarray对象属性的基本操作

数组的维度: array.shape
元素的类型: array.dtype
数组元素的个数: array.size
数组的索引(下标): array[0]
案例:测试ndarry对象的创建

import numpy as np 
a=np.array([[1,2,3],[4,5,6]])
print(a)
print('a.shape:',a.shape)
print('a.size:',a.size)
print('a.len:',len(a))
ary=np.arange(1,28)
ary.shape=(3,3,3)
print(ary,'ary.shape:',ary.shape)
print(ary[0],ary[0][0],ary[0][0][0])
print(ary[0,0,0])
for i in range(ary.shape[0]):
    for j in range(ary.shape[1]):
        for k in range(ary.shape[2]):
            print(ary[i,j,k])

ndarry对象属性操作详解

Numpy内置的基本数据类型

类型类型表示符字符码
布尔型bool_
有符号整型int8(-128~127)/int16/int32/int64i1/i2/i4/i8
无符号类型uint8(0~255)/uint16/uint32/uint64u1/u2/u4/u8
浮点型float16/float32/float64f2/f4/f8
复数型complex64/complex128c8/c16
字符串型str_(每个字符串用32Unicode编码表示)U<字符数>
datetime64M8[Y]/[M]/[D]/[h]/[m]/[s]

numpy自定义复合类型
案例:在ndarray数组中存储3位学生信息

import numpy as np 
data =[('zs',[10,15,2],3),('ls',[12,12,92],8),('ww',[14,35,82],13)]
a=np.array(data,dtype='U2,3int32,int32')
print(a)
print(a,';zs.age:',a[0]['f2'])
#[('zs', [10, 15, 2], 3) ('ls', [12, 12, 92], 8) ('ww', [14, 35, 82], 13)]
#[('zs', [10, 15, 2], 3) ('ls', [12, 12, 92], 8) ('ww', [14, 35, 82], 13)] ;zs.age: 3
# 第二种设置dtype的方式
b=np.array(data,dtype=[('name','str_',2),('scores','int32',3),('age','int32',1),])
print(b,';zs.age:',b[1]['age'])
#[('zs', [10, 15, 2], 3) ('ls', [12, 12, 92], 8) ('ww', [14, 35, 82], 13)] ;zs.age: 8
# 第三种设置dtype的方式
c=np.array(data,dtype={'names':['name','scores','age'],'formats':['U2','3int32','int32']})
print(c,';ls.name:',c[1]['name'])
#[('zs', [10, 15, 2], 3) ('ls', [12, 12, 92], 8) ('ww', [14, 35, 82], 13)] ;ls.name: ls
# 第四种设置dtype的方式
# 例如scores字段在存储时将会从第16个字节
# 开始输出分数列表数据,3int32将会占用12
# 字节,那么age字段将会从第28个字节开始
# 向后输出.
# U2占用了8字节, 与scores字段中间将会
# 空出8个字节.虽然浪费了空间,但是这种数据
# 存储对齐的做法在数据访问时将提高效率.
d=np.array(data,dtype={'name':('U2',0),'scores':('3int32',16),'age':('int32',28)})
print(d,';ls.name:',d[1]['name'])
#[('zs', [10, 15, 2], 3) ('ls', [12, 12, 92], 8) ('ww', [14, 35, 82], 13)] ;ls.name: ls
# 第五种设置dtype的方式
e=np.array([0x1234,0x5678],dtype=('u2',{'lowc':('u1',0),'highc':('u1',1)}))
print('%x'% e[0])			#1234
print('%x'% e['lowc'][0])   #12
print('%x'% e['highc'][0])  #34


#ndarray对象处理日期类型元素
f=np.array(['2018','2019-01-01','2019-02-01','2019-01-02 01:01:01'])
# 把f数组的元素类型改为日期类型
g=f.astype('M8[D]')     #Y,M,D,h,m,s
print(g,';g.dtype',g.dtype)
# ['2018-01-01' '2019-01-01' '2019-02-01' '2019-01-02'] ;g.dtype datetime64[D]
h=g.astype('int32')
print(h)				# [17532 17897 17928 17898]
print(h[2]-h[1])		#31

ndarray数组对象的维度操作
视图变维(数据共享): array.reshape() array.ravel()

# ndarray数组的维度操作
import numpy as np 
a=np.arange(1,9)
# 视图变维使用的还是原始数组中的数据,如果修改了原始数组中的数据,那么新数组读到的数据也会发生变化.
b=a.reshape((2,4))
print(a,b) #[[1 2 3 4] [5 6 7 8]]   # [1 2 3 4 5 6 7 8]
a[0]=999
print(b)    # [[999   2   3   4][  5   6   7   8]]
c=b.ravel() #[999   2   3   4   5   6   7   8]
print(c)

复制变维(数据独立): flatten()

# 测试flatten()方法
d=b.flatten()
d[0]=110
print(b)    #[[999   2   3   4] [  5   6   7   8]]
print(d)   #[110   2   3   4   5   6   7   8] 

就地变维: 直接修改数组维度, 不返回新数组. a.shape a.resize()

# 就地变维
d.shape = (2, 4)
print(d)
d.resize(2, 2, 2)
print(d)

ndarray数组的切片操作

#数组的切片与列表切片参数类似
#步长+:默认从前往后切
#步长-:默认从后往前切
array[起始位置:终止位置:步长]
import numpy as np
a = np.arange(1, 10)
print(a)
print(a[:3])
print(a[3:6])
print(a[6:])
print(a[::-1])
print(a[:-4:-1])
print(a[-4:-7:-1])
print(a[-7::-1])
print(a[::])
print(a[::3])
print(a[1::3])
print(a[2::3])
# a改为2维数组
a.resize(3, 3)
# 切出1 / 2行与0 / 1 / 2列
print(a[1:, :])
# 切出1 / 2行与1 / 2列
print(a[1:, 1:])

ndarray数组的掩码操作
一个掩码数组由一个正常数组和一个布尔数组组成,布尔数组中值为True的元素表示正常数组中对应下标的值无效,False表示有效;

# 演示ndarray对象的掩码操作
import numpy as np 
a=np.array([1,2,3,4,5,6,7,8])
f=np.array([True,False,True,False,True,False,True,False])
print(a[f]) #[1 3 5 7]
# 把1~100中3的倍数或7的倍数都打印出来
a = np.arange(1, 100)
flag_a = a % 3 == 0
flag_b = a % 7 == 0
print(flag_a)
print(flag_b)
flag = np.any([flag_a, flag_b], axis=0)
print(a[flag])

多维数组的组合与拆分
垂直方向的操作:vestack() vsplit()
水平方向的操作:hestack() hsplit()
深度方向操作:destack() dsplit()

# 多维数组的组合与拆分
import numpy as np 
a=np.arange(1,7).reshape(2,3)
b=np.arange(7,13).reshape(2,3)
# 垂直方向操作
c=np.vstack((a,b))
print(c)    #[[ 1  2  3] [ 4  5  6] [ 7  8  9] [10 11 12]]
a,b=np.vsplit(c,2)#拆成2份
# a,b,c,d=np.vsplit(c,4)#拆成2份
print(a,'\n',b) #[[1 2 3] [4 5 6]] [[ 7  8  9] [10 11 12]]
print('---------------------')
# 水平方向操作
d=np.hstack((a,b))
print(d)    #[[ 1  2  3  7  8  9] [ 4  5  6 10 11 12]]
a,b=np.hsplit(d,2)
print(a,'\n',b) #[[1 2 3] [4 5 6]] [[ 7  8  9] [10 11 12]]
print('---------------------')
# 深度方向操作
e=np.dstack((a,b))
print(e)#[[[ 1  7]  [ 2  8]  [ 3  9]] [[ 4 10]  [ 5 11]  [ 6 12]]]
print('---------------------')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
a,b=np.dsplit(e,2)
print(a,'\n',b)#[[[1]  [2]  [3]] [[4]  [5]  [6]]] [[[ 7]  [ 8]  [ 9]] [[10]  [11]  [12]]]

多维数组组合与拆分的相关函数

#根据axis所指定的轴向(0,1,2)进行多维数组的组合
#如果待组合的两个数组都是二维数组
#axis=0: 垂直方向
#axis=1: 水平方向
#如果待组合的两个数组都是三维数组
#axis=0: 垂直方向
#axis=1: 水平方向
#axis=2: 深度方向
c = np.concatenate((a, b), axis=0)
#通过给定的 axis轴向 与 拆分的份数 对c数组进行拆分
np.split(c, 2, axis=0)

长度不等的两个数组的组合操作

#np.pad(原始数组,补全方式(头部补0个,尾部补1个),设置补全模式为constant,设置补全的默认值为-1)
np.pad(ary,pad_width(0,1),mode='constant',constant_values=-1)
# 测试不同长度的数组的组合
a = np.arange(1, 7)
b = np.arange(11, 16)
c = np.pad(b, pad_width=(2, 2),
           mode='constant',
           constant_values=-1)
print(a)
print(b)
print(c)

简单的一维数组的组合方案

a = np.arange(1, 10)
b = np.arange(11, 20)
# 把a与b摞在一起成为两行
np.row_stack((a, b))
# 把a与b并在一起成为两列
np.column_stack((a, b))

numpy数组的其他属性

  1. shape 维度
  2. dtype 元素类型
  3. size 数组元素个数
  4. ndim 维数
  5. itemsize 元素字节数
  6. nbytes 数组总字节数
  7. real 复数数组的实部
  8. imag 复数数组的虚部
  9. T 数组对象的转置视图
  10. flat 返回数组的扁平迭代器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VSCode(Visual Studio Code)是一款轻量级的代码编辑器,它支持多种编程语言和开发环境。在数据分析领域,VSCode可以通过安装相应的插件来提供强大的数据分析功能。 以下是一些常用的VSCode数据分析插件和功能: 1. Python插件:VSCode提供了强大的Python支持,可以通过安装Python插件来进行数据分析。该插件提供了代码补全、调试、代码格式化等功能,同时还支持Jupyter Notebook的交互式开发。 2. R插件:如果你使用R语言进行数据分析,可以安装R插件来提供R语言的开发环境。该插件支持代码补全、语法检查、调试等功能。 3. 数据可视化插件:VSCode提供了多个数据可视化插件,如Plotly、Matplotlib等,可以帮助你将数据以图表的形式展示出来,更直观地理解和分析数据。 4. SQL插件:如果你需要进行SQL查询和分析数据库中的数据,可以安装SQL插件来提供SQL语言的支持。该插件可以连接到各种数据库,并提供SQL语句的编辑、执行和结果展示功能。 5. Git集成:VSCode内置了Git版本控制工具,可以方便地管理和追踪代码的变化。在数据分析过程中,你可以使用Git来管理数据分析代码和文档的版本。 6. Jupyter Notebook支持:VSCode可以通过安装Jupyter插件来支持Jupyter Notebook的功能。你可以在VSCode中创建和编辑Jupyter Notebook文件,并进行交互式的数据分析和可视化。 总结起来,VSCode通过安装相应的插件,提供了丰富的数据分析功能,包括多种编程语言的支持、数据可视化、SQL查询、版本控制等。它的轻量级和灵活性使得它成为许多数据分析师和科学家的首选工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值