前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析师最爱的脚本语言--Python,你会了吗?

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

作者头像
用户8612862
发布2021-05-13 17:12:20
7610
发布2021-05-13 17:12:20
举报
文章被收录于专栏:人人都是数据分析师

据各种专业和业余的统计,在机器学习领域,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。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人人都是数据分析师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档