数据分析师最爱的脚本语言--Python,你会了吗?

2021-05-13 17:12:20 浏览数 (1)

据各种专业和业余的统计,在机器学习领域,Python语言的热度逐年上升。作为一种计算机程序设计语言,以简洁,易读性被广泛选择。伴随着大数据,深度学习领域的迅速发展,Python作为实现这些方法的友好语言,其拥护者也急剧上升。然而,Python的远远不止于此,编写应用程序,创建游戏,设计算法等等都可以应用其实现。那么,如此强大的编程语言。你是否掌握了呢?

本篇引入为以后的机器学习分享做基础,作为入门级教程,适合久闻Python其名,苦于无法找准门路的同学们。大佬们都说Python语言最简单,为何学习之路仍苦难重重?读过好多书籍,仍无法入门?那是因为对于无基础的同学,一门新的综合性的语言实在过于繁杂。而写书的Boss们长时间在编程界顶层,无法理解最底层的同学们可能在安装这一步都难以通过。对于初学者,往往一个简单的小Bug,足以劝退一颗热忱的心。有范君为了避免这种情况的出现,使入门过程更平滑。让同学们顺顺利利的入门Python。特意亲身试验以下全部过程,确保准确。

作为机器学习系列分享的导引内容,不介绍Python语言的数据类型,语法等基础知识,直接对机器学习三个最基础的包:Numpy,Pandas,Sklearn (Scikit-Learn)进行演示。通过学习演示,模拟编程,项目实践的过程,实现从入门到精通的平滑化过程。同时也加快Python和机器学习主题的融合过程,之前的R语言的分享中,有范君自己的观点就是入门一定要快。

安装教程

对于安装Python,大多数书籍普遍推荐Anaconda组件,这里我们也不例外。主要是这个组件对于初学者比较友好,主动的安装了大量的依赖包。同时十分方便查找帮助教程。如何安装呢?官网奉上:https://www.anaconda.com/。下载过程:Download -> 下滑后选择对应操作系统 -> Download(64/32位)。

但是官网安装一般是最新的版本,这里有一个问题就是,Python一些相关的包并没有更新,可能不支持最新的版本。所以,这里建议下载一个教新的版本就好。那么奉上历史版本Anaconda的下载地址(清华源):https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/。选择Anaconda3-5.0.1即可。下载完成,进入安装过程,过程只有下图地方需要注意一下,以下图中两个勾选框都要选中,你要问不选中会怎样,只能说后果自负哦。

安装完成,打开Spyder编辑器或者Jupyter Notebook,什么,找不到?喏,看下图。

打开的Spyder编辑器如下图所示,十分友好,与RStudio布局十分相似。当然,你可以修改字体,布局相关设置。在工具栏的Tools -> preferences中设置即可。关于Jupyter Notebook不多介绍,与Spyder不同风格,各有优势,选用就可以了。到了这一步,那么恭喜你,安装成功,如果在这之前出现了问题,可以在下面留言,接下来我们进行正题,Pyhton之中三大数据科学包的使用。

Numpy

为什么学习Numpy?相对于Python内置的列表,对于高维数据的储存和处理提供了更友好的表现和实现形式。

01

利用Numpy创建所需数组

在处理实际机器学习问题的时候,数据是我们处理的核心对象。于Python中引入数据,无外乎有两种形式,从外部文件中读入数据,或者构建一些数据。那么在构建数据的时候,Numpy显得格外强大!

代码语言:javascript复制
# -*- coding: utf-8 -*-

## numpy 
import numpy as np

# 创建一个numpy数组
array_items = np.array([1,4,5])
print(array_items)

# 生成有规律的数据
# 注意生成数组的统一形式,参数为数组的维度和内容

print("生成均为0的数组:",'n',np.zeros(10,dtype = int))

print("生成均为1的数组:",'n',np.ones((3,5),dtype = float))

print("生成为指定数字的数组:",'n',np.full((3,5),3.14))

print("生成0~20之间,间隔为2的数组:",'n',np.arange(0,20,2))

print("生成10个0~20之间,均匀间隔的数组:",'n',np.linspace(0,20,10))

print("生成均匀分布的数组:",'n',np.random.random((3,3)))

print("生成正态分布的数组:",'n',np.random.normal(0,1,(3,3)))

print("生成随机整数的数组:",'n',np.random.randint(0,10,(3,3)))

print("生成单位阵:",'n',np.eye(3))

*****Result of Print*****
生成均为0的数组: 
 [0 0 0 0 0 0 0 0 0 0]
生成均为1的数组: 
 [[ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]]
生成为指定数字的数组: 
 [[ 3.14  3.14  3.14  3.14  3.14]
 [ 3.14  3.14  3.14  3.14  3.14]
 [ 3.14  3.14  3.14  3.14  3.14]]
生成0~20之间,间隔为2的数组: 
 [ 0  2  4  6  8 10 12 14 16 18]
生成10个0~20之间,均匀间隔的数组: 
 [  0.           2.22222222   4.44444444   6.66666667   8.88888889
  11.11111111  13.33333333  15.55555556  17.77777778  20.        ]
生成均匀分布的数组: 
 [[ 0.98877834  0.18669815  0.04938441]
 [ 0.55236765  0.77685265  0.37389794]
 [ 0.03420347  0.53582416  0.64340042]]
生成正态分布的数组: 
 [[ 0.87811807 -0.24126201  0.33558333]
 [ 0.52183808 -0.81386997  0.19239122]
 [-0.87644177 -0.29260062 -0.19571332]]
生成随机整数的数组: 
 [[3 3 7]
 [9 1 4]
 [9 9 4]]
生成单位阵: 
 [[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

02

利用Numpy操作数组

对于得到的数组,为了满足我们的控制欲望,显然我们最希望的是可以对它们进行随心所欲的操作。包括显示任意位置的数字,顺序、逆序显示,使两个数组横着拼、竖着拼等等。

代码语言:javascript复制
## 生成三个测试数组
np.random.seed(1234) # 随机种子,可复现结果
ExampleArray1 = np.random.random((2,2))
ExampleArray2 = np.random.normal(0,1,(2,2))
ExampleArray3 = np.random.randint(0,10,5)

# 索引指定位置数据
print("ExampleArray1:",'n',ExampleArray1)
print("行逆序显示:",'n',ExampleArray1[::-1,:])
print("列逆序显示:",'n',ExampleArray1[:,::-1])
print("完全逆序显示:",'n',ExampleArray1[::-1,::-1])
print("索引[0,0]位置数据:",'n',ExampleArray1[0,0])
print("索引第一列数据:",'n',ExampleArray1[:,0])
print("索引第一行数据:",'n',ExampleArray1[0,:])

print("ExampleArray2:",'n',ExampleArray2)
print("行拼接:",'n',np.concatenate([ExampleArray1,ExampleArray2],
                                 axis = 0))
print("列拼接:",'n',np.concatenate([ExampleArray1,ExampleArray2],
                                 axis = 1))

print("ExampleArray3:",'n',ExampleArray3)
print("顺序排序:",'n',np.sort(ExampleArray3))
print("逆序排序:",'n',np.sort(ExampleArray3)[::-1])

*****Result of Print*****
ExampleArray1: 
 [[ 0.19151945  0.62210877]
 [ 0.43772774  0.78535858]]
行逆序显示: 
 [[ 0.43772774  0.78535858]
 [ 0.19151945  0.62210877]]
列逆序显示: 
 [[ 0.62210877  0.19151945]
 [ 0.78535858  0.43772774]]
完全逆序显示: 
 [[ 0.78535858  0.43772774]
 [ 0.62210877  0.19151945]]
索引[0,0]位置数据: 
 0.191519450379
索引第一列数据: 
 [ 0.19151945  0.43772774]
索引第一行数据: 
 [ 0.19151945  0.62210877]
ExampleArray2: 
 [[-0.72058873  0.88716294]
 [ 0.85958841 -0.6365235 ]]
行拼接: 
 [[ 0.19151945  0.62210877]
 [ 0.43772774  0.78535858]
 [-0.72058873  0.88716294]
 [ 0.85958841 -0.6365235 ]]
列拼接: 
 [[ 0.19151945  0.62210877 -0.72058873  0.88716294]
 [ 0.43772774  0.78535858  0.85958841 -0.6365235 ]]
ExampleArray3: 
 [6 8 0 5 0]
顺序排序: 
 [0 0 5 6 8]
逆序排序: 
 [8 6 5 0 0]

03

利用Numpy进行通用函数计算

Numpy里面封装了许多常用的数值计算的函数,可以很方便进行一些基础计算。

代码语言:javascript复制
# 数组计算
np.random.seed(1111) # 随机种子,可复现结果
ExampleArray4 = np.random.randint(0,10,5)
print("ExampleArray4:",'n',ExampleArray4)

print("指数运算:",'n',np.exp(ExampleArray4))
print("对数运算:",'n',np.log(ExampleArray4))
print("求和运算:",'n',np.sum(ExampleArray4))
print("求积运算:",'n',np.multiply.reduce(ExampleArray4))
print("累加运算:",'n',np.add.accumulate(ExampleArray4))
print("累积百分比:",'n',np.add.accumulate(ExampleArray4)/np.sum(ExampleArray4))
print("取最大运算:",'n',np.max(ExampleArray4))

*****Result of Print*****
ExampleArray4: 
 [7 5 1 2 4]
指数运算: 
 [ 1096.63315843   148.4131591      2.71828183     7.3890561     54.59815003]
对数运算: 
 [ 1.94591015  1.60943791  0.          0.69314718  1.38629436]
求和运算: 
 19
求积运算: 
 280
累加运算: 
 [ 7 12 13 15 19]
累积百分比: 
 [ 0.36842105  0.63157895  0.68421053  0.78947368  1.]
取最大运算: 
 7

Pandas

Numpy在实际数据操作过程中给我们提供了很多方便,但是大多数情况下,我们需要从外部文件中获取原数据,虽然存取数据的方式有很多,但是Pandas包绝对是你不容错过的一款。另外,Pandas包的强大远不止于此,其高效的DataFrame数据结构,具有行列标签的数组,是重多从事数据科学人员的最舒适的结构。

01

利用Pandas存取数据

代码语言:javascript复制
# -*- coding: utf-8 -*-

import pandas as pd
import os

print("当前工作目录:",os.getcwd())
## 注意,如果默认路径非code文件夹,需要运行下面语句改为code文件夹路径,具体路径参考个人下载的路径,
## 例如将文件下载在D盘,那么将"path/to/code"换为"D:/A_TechnologyScience/python/code"
## os.chdir("path/to/code")
ExampleDataPath = "../data/Example.csv"
## 从csv文件读取数据
ExampleData = pd.read_csv(ExampleDataPath,encoding = 'gbk')
print("数据类型:",'n',type(ExampleData))
print("数据维度:",'n',ExampleData.shape)
print("显示前5行数据:",'n',ExampleData.head())

## DataFrame保持为csv文件
ExampleSavePath = "../data/ExampleSave.csv"
ExampleData.to_csv(ExampleSavePath,index = False)

02

利用Padans操作数据

代码语言:javascript复制
## 操作数据
## 索引:loc iloc
## loc:显式索引,使用行列名来索引数据
## iloc:隐式索引,使用行列的序号索引数据
print("显式索引:",'n',ExampleData.loc[0:2,["学历","男生"]])
print("隐式索引:",'n',ExampleData.iloc[0:2,0:2])

## 注意到它们之间的区别,显式索引的0:2指行名为0,1,2,所以输出三行隐式索引的0:2指行的序号0:2,python内置的机## 制一般是取前舍后,即0:2,取0,1,舍掉2,最后显示前两行。

## DataFrame扩展
ExampleData['睡眠时间'] = [8,7,6,5,4]
print("添加一列:",'n',ExampleData.head())
ExampleData = ExampleData.append({"学历":"幼儿园","男生":5 ,"女生":7,"睡眠时间":10},ignore_index=True)
print("添加一行:",'n',ExampleData.head(6))

## 数据统计数据分析
print("统计指标:",'n',ExampleData.describe())

*****Result of Print*****
显式索引: 
     学历  男生
0  小学生  10
1  中学生  20
2  大学生  25
隐式索引: 
     学历  男生
0  小学生  10
1  中学生  20
添加一列: 
     学历  男生  女生  睡眠时间
0  小学生  10  15     8
1  中学生  20  27     7
2  大学生  25  35     6
3  研究生  37  21     5
4  博士生  16  20     4
添加一行: 
     学历  男生  女生  睡眠时间
0  小学生  10  15     8
1  中学生  20  27     7
2  大学生  25  35     6
3  研究生  37  21     5
4  博士生  16  20     4
5  幼儿园   5   7    10
统计指标: 
               男生         女生       睡眠时间
count   6.000000   6.000000   6.000000
mean   18.833333  20.833333   6.666667
std    11.373947   9.641922   2.160247
min     5.000000   7.000000   4.000000
25%    11.500000  16.250000   5.250000
50%    18.000000  20.500000   6.500000
75%    23.750000  25.500000   7.750000
max    37.000000  35.000000  10.000000

Pandas内置的功能远远不止于这些,例如其数据清洗,数据透视表,Groupby函数,Merge拼接函数等等。作为入门指南,先简单介绍到这里。

Sklearn

Sklearn是Python内实现机器学习算法的模块。以其干净,统一,高效的特性被广泛使用。由于篇幅的原因,我们在后续的实践中,逐渐掌握这个模块。

总结

做一篇Python数据分析的完整教程需要耗费的心血远远超出作者的预期,本篇旨在提供一片入门级的教程,希望缩减后的内容可以被读者更容易接收和理解,通过试着运行本篇代码,降低对Python的陌生感。更进一步的介绍将在后续的内容上呈上。另外本篇内容结合作者实践和主要参考书籍《Python数据科学手册 Jake,VanderPlas著 陶俊杰,陈小莉译》,如有兴趣,可移步原书籍,系统学习。本文相关代码和数据详见:https://github.com/ncepumas/A_TechnologyScience/tree/master/python。

0 人点赞