Introduction to Python(2)

写在前面

        假装自己是一个高产的博主,其实是怕小伙伴们太长看的太累,所以分成两部分写。另一方面,不知道自己这样写的是好是坏,每个部分好像都不分巨细的罗列出来,是自己太注重扣细节,亦或是自己不知道如何概括,只会将自己记的笔记僵硬的罗列。当局者迷,有清的旁友可以在评论里留个言,90度鞠躬感激。

Functions and Packages

Functions

        对于函数大家应该并不陌生,在没提到这个定义之前我们就已经先用了他,比如之前的type()是一个返回值的类型的函数,print()是输出值的函数等等。简而言之,函数是一段可重用的代码,旨在解决特定的任务,并且你可以调用函数而不必自己编写代码。以下是几个Pyhton中的内置函数:

fam=[1.73,1.68,1.71,1.89]#以此为例
max(fam)#返回列表中最大的数值,当然此时列表中只能含有数值型的元素,同时含有布尔型时会自动转化成0和1
round(variable,ndigits)#四舍五入到n位小数
len(variable)#返回字符串或者列表的长度,int,float,bool型均没有len()
first=[11.25,18.0,20.0];second=[10.75,9.50]#此处用分号可以分隔两段命令,相当于执行两行命令
full=first+second #outting: [11.25,18.0,20.0,10.75,9.50] 列表相加则将两个列表粘贴在一起
full_sorted=sorted(full,reverse=True)#列表中元素按降序排列
Out[1]:
[20.0,18.0,11.25,10.75,9.50]

Methods

        在Python中,还为每个对象配备了一堆所谓的“方法”,即属于Python对象的函数,以下是几个例子:

Typeexample
object1strcapitalize(),replace()
object2floatbit_length,conjugate()
object3listindex(),count()
#list method
fam2=["liz",1.73,"emma",1.68,"mom",1.71,"dad",1.89]
fam2.index("mom")#调用mom的索引,dot前面是对象object,dot后面是对象的函数
fam2.count(1.73)#计算列表中1.73出现的次数
fam2.append("me")#Addition 和fam2+"me"的输出相同
fam2.append(1.79)
fam2.reverse()#将列表中的元素顺序颠倒,即反向列表中的元素顺序

#str method
sister='liz'
sister.capitalize()#此处无需任何输出,注意比较和下面的函数输出的区别
Out[1]:Liz
sister.upper()
Out[1]:LIZ
#在字符串上也可以使用index
sister.index("z")#返回z的索引
fam2.index("mom")#返回mom的索引

       总结一下上面的capitalize()和upper()函数,一个是返回开头字母大写,另外一个返回的是全部字母大写,大家在调用的时候请注意区分。当然Python中有成百上千种函数,请自行学习,希望大家能够在完成特定任务的时候选择最快捷的函数完成工作,节约时间。

Package

       在Python中还存在这样一种叫做包的东西,也就是我们R中所说的程辑包,对于包这个名词大家可以这样去理解,您可以将软件包视为Python脚本的目录,而每一个脚本都是所谓的一个模块,而这些模块包含了特定的函数、方法和新的Python类型,旨在解决一些特定的问题,以下介绍一些数据分析师常用的一些软件包:

名称作用
numpy高效使用数组,Python数值计算的基石
matplotlib用于制图及其他二维数据可视化
scikit-learnPython 编程者搜选的机器学习包
pandas提供高级数据结构核函数,主要适用对象为dataframe
scipy是科学计算领域针对不同标准问题域的包集合

impot package

  • 如果你想载入整个软件包,以numpy为例
#载入整个软件包
import numpy  
array([1,2,3])#这样简单的调用数组函数将会报错,NameError:name'array' is not defined
numpy.array([1,2,3])#要从numpy包中引用数组函数,需要这样输入
Out[1]: array([1,2,3])
import numpy as np#当然一直使用numpy前缀会非常累人,可以通过as拓展语句来做到省时省力
np.array([1,2,3])
Out[1]: array([1,2,3])
  • 如果你只想使用软件包中的某一项特定功能,比如numpy包中的数组功能
from numpy import array
array([1,2,3])#这时你就不需要输入前缀可以直接调用array函数

       当然,还是更加推荐import numpy as np ,这显然是首选,因为这样在使用numpy包中的函数时需要加上前缀,使得代码更加清晰易懂,你在此处使用了numpy软件包。

Numpy

       现在,我们已经对Python的一些对象、函数甚至是软件包的使用有了一定的了解,接下来就进入学习Numpy的部分。我觉得这里大家应该会有问题,Numpy和list之间到底有什么区别?列表可以收集数据,包含不同的数据类型,可以改变列表中的值,添加或者删除,听起来功能十分强大。但是,它缺少了一个比较重要的功能,对于数据分析师来说,你肯定希望对两个列表中的数据能够同时进行操作,举个简单的例子:

height=[1.73,1.68,1.71,1.89,1.79]
weight=[65.4,59.2,63.6,88.4,68.7]
#如果想计算家庭中每个人的bmi指数,直接在列表上操作,则会报错:
bmi=weight/height**2
Out[1]:TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

       显然你希望这样的调用能够起作用,按照列表的顺序逐个元素进行计算。可是Python并不知道如何对列表进行上述的操作。当然,最笨的方法是你可以依次遍历列表中的每个元素来解决此问题,然后计算每个人的BMI,但这样写起来效率很低并且很累。
       于是,你想到了Numpy。没错,这时候就需要Numpy的闪亮登场。Numpy在大部分场景可以代替列表,但是也有出入,不过在数值计算这点上,Numpy显然是要强过列表的,因为它有一个列表不具有的功能:可以对整个数组进行计算。

import numpy as np
height=[1.73,1.68,1.71,1.89,1.79]
np_height=np.array(height)
np_height
Out[1]:array([1.73, 1.68, 1.71, 1.89, 1.79])
weight=[65.4,59.2,63.6,88.4,68.7]
np_weight=np.array(weight)
np_weight
Out[1]:array([65.4, 59.2, 63.6, 88.4, 68.7])
bmi=np_weight/np_height**2
bmi
Out[1]:array([21.85171573, 20.97505669, 21.75028214, 24.7473475 , 21.44127836])

The different between list and Numpy

       刚刚说到Numpy和列表有一定出入,比如Numpy只能包含一种数据类型,它可以是浮点型数组,可以是布尔型数组,也可以是其他。如果你确实尝试创建含有不同数据类型的数组,在输出后他会自动转换成同样的数据类型。也正因如此,在每个数组中保证了只含有一种类型,才保证了Numpy的计算速度之快。
       还有一点,举个例子,如果执行list+list,Python则会将两个list的元素粘贴在一起,生成包含6个元素的列表,如果执行np_array+np_array,Python则会对数组中的元素逐个加和。

import numpy as np
python_list=[1,2,3]
np_array=np.array(python_list)
python_list+python_list
Out[1]:[1, 2, 3, 1, 2, 3]
np_array+np_array
Out[1]:array([2, 4, 6])

       所以在使用的时候要注意Python的类型,使用不同的Python类型执行相同的操作结果可能会有很大的差异。还是那句话,代码的行为取决于您使用的类型。

Numpy Subsetting

       在Python中,从Numpy和List中获取元素时的方法几乎一样,你同样可以使用方括号调取元素。

import numpy as np
bmi=np.array([21.85171573, 20.97505669, 21.75028214, 24.7473475 , 21.44127836])
bim[1]
Out[1]:20.97505669

      不过在Python中,专门针对Numpy还有另外一种方法进行列表子设置:使用布尔数组。假设你要获取bmi数组中的所有超过23的bmi值:

import numpy as np
bmi=np.array([21.85171573, 20.97505669, 21.75028214, 24.7473475 , 21.44127836])
bmi>23
Out[1]:array([False, False, False,  True, False])
bmi[bmi>23]
Out[1]:array([24.7473475])

        还有更多的方法还请小伙伴们自行探索哈~

2D Numpy Arrays

Type of Number Arrays

import numpy as np
bmi=np.array([21.85171573, 20.97505669, 21.75028214, 24.7473475 , 21.44127836])
type(bmi)
Out[1]:numpy.ndarray

        现在我们尝试为家庭的所有身高和体重数据创建一个numpy数组。

import numpy as np 
np_2d=np.array([[1.73,1.68,1.71,1.89,1.79],
                [65.4,59.2,63.6,88.4,68.7]])
np_2d
Out[1]:array([[ 1.73,  1.68,  1.71,  1.89,  1.79], [65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])
np_2d.shape  #输出np2d的数组形状
Out[1]:(2, 5)

        在2D-Numpy-Array中,各行各列的索引:如下
在这里插入图片描述

np_2d[0]
Out[1]:array([1.73, 1.68, 1.71, 1.89, 1.79])
np_2d[0][2]#这样可以返回你指定的行和列的交叉的元素
Out[1]:1.71
np_2d[0,2]#这种方法也可以
Out[1]:1.71
np_2d[:,1:3]
Out[1]:array([[ 1.68,  1.71],[59.2 , 63.6 ]])
np_2d[1,:]
Out[1]:array([65.4, 59.2, 63.6, 88.4, 68.7])

        在2D数组中调用其实并不是很难,只需记住逗号前面是表示行,逗号后面表示列。行列行列先行后列,这是我记这个的口诀分享给大家哈哈哈哈。

2D Arithmetic

        首先先对我们的数组重新的更改一下,下文中系数是随意编的不具有实际意义,大家能够理解其中的含义即可:

import numpy as np
np_array=np.array([[1.73,65.4],[1.68,59.2],[1.71,63.6],[1.89,88.4],[1.79,68.7]])
np_array.shape
Out[1]:(5,2)
#如果要对每一列乘以一个系数,可以先创建一个数组
conversion=np.array([3,4])
np_array*conversion
Out[1]:array([[  5.19, 261.6 ],[  5.04, 236.8 ],
              [  5.13, 254.4 ],[  5.67, 353.6 ],[  5.37, 274.8 ]])

Numpy:Basic Statistic

        首先介绍的是如何创建随机正态数,我们需要建立5000人的身高体重样本数据,但这数据显然太大了,为了轻松简便,直接利用随机正态数代替实际调查哈哈哈,并直接对该样本进行基本统计,比如平均、中位数、标准差或者相关系数。

height=np.round(np.random.normal(1.75,0.20,5000),2)#np.random.normal(mean,sd,n)
weight=np.round(np.random.normal(60.32,15,5000),2)#mean表示均值,sd表示标准差,n表示创建的随机数个数
np_city=np.column_stack((height,weight))#这里牢记双括号
type(height)
Out[1]:numpy.ndarray#这时直接创建出的就是Numpy数组
np.mean(np_city[:,0])#平均身高
Out[1]:1.750614
np.median(np_city[:,1])#体重中位数
Out[1]:60.59
np.corrcoef(np_city[:,0],np_city[:,1])#身高体重相关系数
Out[1]:array([[1.        , 0.01221541],
       [0.01221541, 1.        ]])
np.std(np_city[:,0])#身高标准差
Out[1]:0.1996729400895374

        可能和创建时的平均数标准差有点出入,但是基本是相近的,这是由于系统中计算的问题,没有那么精确。当然Array同样可以使用sum,sort等与Python内置函数相同的函数,唯一区别是Numpy大大加快了计算速度,也就是前面所提到的,因为Numpy仅仅包含一种数据类型,处理起来就是 呜呼起飞~

        第一部分Introduction to Python准备就介绍到这里,接下来会继续整理,有问题请务必指出,避免Python小白“误入歧途”~90度鞠躬感激。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值