ans python_Python|数据分析师最爱的脚本语言—Python

据各种专业和业余的统计,在机器学习领域,Python语言的热度逐年上升。

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

本篇引入为以后的机器学习分享做基础,作为入门级教程,适合久闻Python其名,苦于无法找准门路的同学们。大佬们都说Python语言最简单,为何学习之路仍苦难重重?读过好多书籍,仍无法入门?那是因为对于无基础的同学,一门新的综合性的语言实在过于繁杂。而写书的Boss们长时间在编程界顶层,无法理解最底层的同学们可能在安装这一步都难以通过。

对于初学者,往往一个简单的小Bug,足以劝退一颗热忱的心。ZZ为了避免这种情况的出现,使入门过程更平滑,让同学们顺顺利利的入门Python。特意亲身试验以下全部过程,确保准确。

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

1. 安装教程

对于安装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之中三大数据科学包的使用。

2. Numpy

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

2.1 利用Numpy创建所需数组

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

# -*- 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.]]

2.2 利用Numpy操作数组

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

## 生成三个测试数组

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]

2.3 利用Numpy进行通用函数计算

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

# 数组计算

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

3. Pandas

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

3.1 利用Pandas存取数据

# -*- 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)

3.2 利用Padans操作数据

## 操作数据

## 索引: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拼接函数等等。作为入门指南,先简单介绍到这里。

4. 总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值