python最终目标_Python晋级之路-工欲善其事必先利其器

猴子老师Live中用一个盖房子的例子,很好的解释了大多数零基础朋友开始学习编程时的迷茫。面对一个客户需求,如何分三个步骤就能得出最后的结果。

我简单整理一下,第一步先仔细分析客户的需求,明确最终目标(盖什么样的房子,即明确设计图纸);第二步根据要达到的目标要求,选择合适的工具、语言以及搭建相应的开发环境(根据图纸,分析需要打什么样的地基);第三步在搭建好的开发环境下,运用各种变量、函数、条件循环等手段,根据收集到的客户数据实现既定的目标分析结果(根据设计图纸盖出房子)。理清楚这些关系,我们才能在接下来面对很多专业名词时,不会不知所措。

既然我们学习的目的是进行大数据分析,而当今在这个领域中最火的工具就是python,所以,学习的目的就是它了。在明确学习python的意义后,接下来就是如何按照一个合适的开发环境,便于更好的学习。事实上,Anaconda和Jupyter notebook已经成为python数据分析的标准环境。具体的安装步骤这里不在重复,参见猴哥老师的链接,

环境安装好后,接下来开始python语言的学习。快速学习一门语言,一般有四个关键点。数据、函数、条件判断和循环,在理解了这几点后,基本可以理解计算机程序要做什么了。下面分别介绍一下它们在python中的定义和用法。

一、数据

数据在程序中用变量来存储。在大多数的程序语言中,变量是有类型的,而python中的变量没有类型,且不需要声明。在Python中,类型属于对象,变量是没有类型的。变量仅仅是一个对象的引用(一个指针)。

Python 3中的数据类型分别有字符串(String)、数值(Number)、容器(列表List,集合Sets,字典Dictionary)、布尔类型、空值None。

1. 数据类型:字符串(String)

#字符串使用""或''来创建,需要注意的是,Python不支持单字符类型,单字符也是作为一个字符串使用。

#案例1:定义字符串

nameStr='马云'

moneyStr2='有钱'

#字符串合并

print('用+将字符串合并:',nameStr+moneyStr2)

用+将字符串合并: 马云有钱

#案例2:用%s格式化字符串

str1='我叫%s,俺爹是%s' % ('王思聪', '王健林')

print(str1)

我叫 王思聪 ,俺爹是 王健林

2. 数据类型:数值(Number)

#1)整型:马云年龄50岁

age=50

#2)浮点型:我用马云的余额宝今天赚了3.53元

money=3.53

#3) 复数:

x=3+2j

3. 数据类型:容器-列表(List)

'''容器:列表(List),使用方括号创建。'''

#定义列表:病人姓名

nameList=['猴子','马云','王健林','马化腾']

#列表长度

nameLen=len(nameList)

print('列表长度:病人数目:',nameLen)

列表长度:病人数目: 4

#1)容器操作:增加

nameList.append('刘强东')

print('增加1个元素:',nameList)

增加1个元素: ['猴子', '马云', '王健林', '马化腾', '刘强东']

#2)容器操作:删除

del nameList[1]

print('删除第2个元素:',nameList)

删除第2个元素: ['猴子', '王健林', '马化腾', '刘强东']

#3)容器操作:查询:使用下标索引来访问列表中的值,下标从0开始

name1=nameList[0]

print('查询列表的第1个元素:',name1)

查询列表的第1个元素: 猴子

#4)容器操作:修改:直接指定下标的值

print('修改之前第1个元素是:',nameList[0])

nameList[0]='孙悟空'

print('修改之后第1个元素是:',nameList[0])

修改之前第1个元素是: 猴子

修改之后第1个元素是: 孙悟空

nameList

['孙悟空', '王健林', '马化腾', '刘强东']

4. 数据类型:容器-集合(Sets)

'''容器:集合(Sets)是一个没有重复元素的容器'''

#定义集合:6家公司的股票

gafataSets={'腾讯','阿里巴巴','苹果','谷歌','Facebook','亚马逊','亚马逊'}

print(gafataSets)

{'腾讯', '亚马逊', '苹果', '谷歌', 'Facebook', '阿里巴巴'}

#1)容器操作:增加

#定义一个空的集合

stockSets=set()

#使用update()增加元素

stockSets.update(['腾讯','阿里巴巴','京东'])

print(stockSets)

{'腾讯', '阿里巴巴', '京东'}

#2)容器操作:删除

stockSets.discard('京东')

print(stockSets)

{'腾讯', '阿里巴巴'}

#3)容器操作:查找

txBool='腾讯' in stockSets

print(txBool)

True

#4)容器操作:修改

#第1步:先删除

stockSets.discard('京东')

#第2步:再添加

stockSets.update(['京东'])

print(stockSets)

{'腾讯', '阿里巴巴', '京东'}

5. 数据类型:容器-字典(Dictionary)

'''容器:字典(Dictionary)它是一种可变容器,可存储任意类型对象a. 不允许同一个键出现两次。出现多次的,后一个值会覆盖前面的值。b. 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。'''

#定义字典:病人编号和姓名的映射关系

patientDic={'001':'猴子','002':'马云','003':'王健林','004':'马化腾'}

#定义字典:excel病人数据存储

patientDic2={'001':['猴子',29,'1型糖尿病','较差'],

'002':['马云',34,'2型糖尿病','好转'],

'003':['王健林',28,'1型糖尿病','显著好转'],

'004':['马化腾',52,'2型糖尿病','好转']}

#1)容器操作:增加

patientDic2['005']=['王思聪',30,'1型糖尿病','好转']

print(patientDic2)

{'001': ['猴子', 29, '1型糖尿病', '较差'], '002': ['马云', 34, '2型糖尿病', '好转'], '003': ['王健林', 28, '1型糖尿病', '显著好转'], '004': ['马化腾', 52, '2型糖尿病', '好转'], '005': ['王思聪', 30, '1型糖尿病', '好转']}

#2)容器操作:删除

del patientDic2['005']

#3)容器操作:查询,根据病人编号查询病人信息

valueList1=patientDic2['001']

print(valueList1)

['猴子', 29, '1型糖尿病', '较差']

#4)容器操作:修改

print('修改之前,病人信息:',patientDic2['001'])

patientDic2['001']=['猴子', 29, '1型糖尿病', '好转']

print('修改之后,病人信息:',patientDic2['001'])

修改之前,病人信息: ['猴子', 29, '1型糖尿病', '较差']

修改之后,病人信息: ['猴子', 29, '1型糖尿病', '好转']

print(patientDic2)

{'001': ['猴子', 29, '1型糖尿病', '好转'], '002': ['马云', 34, '2型糖尿病', '好转'], '003': ['王健林', 28, '1型糖尿病', '显著好转'], '004': ['马化腾', 52, '2型糖尿病', '好转']}

6. 数据类型:布尔类型

age=10

if age==10:

print('判断条件是True')

else:

print('判断条件是False')

判断条件是True

7. 数据类型:空值None

age=None

if age==None:

print('年龄是空值')

else:

print('年龄不是空值')

年龄是空值

二、条件判断

if语句的关键字为:if - elif - else。一般形式如下所示:

if condition_1:

statement_block_1

elif condition_2:

statement_block_2

else:

statement_block_3

注意:

1. 每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块。

2. 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。

3. 在Python中没有switch - case 语句。

#《摔跤吧,爸爸》豆瓣评分

scoreNum=9.1

if scoreNum >=8 :

print('我要去看这部电影')

else:

print('电影太烂,不去看了')

我要去看这部电影

'''边界条件:逻辑判断'''

#定义列表:病人姓名

nameList=['猴子','马云','王健林','马化腾']

if '猴子' not in nameList:

print('列表中没有叫猴子的病人')

else:

print('列表中有个叫猴子的病人')

列表中有个叫猴子的病人

'''多个条件判断'''

age=int(input('输出狗狗的年龄,按enter键获取对应人类的年龄:'))

if age < 0 :

print('狗狗年龄不能小于0')

elif age == 1:

print('相当于14岁的人')

elif age == 2 :

print('相当于22岁的人')

else:

human=22+(age-2)*5

print('对应人类年龄',human)

输出狗狗的年龄,按enter键获取对应人类的年龄:5

对应人类年龄 37

三、循环语句

Python中的循环语句有for和while两种。

1. while语句 一般形式如下:

while 判断条件:

else:

2. for语句 一般形式如下:

for in :

else:

注意:break 语句可以跳出 for 和 while 的循环体。

continue语句被用来告诉程序跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

pass是空语句,是为了保持程序结构的完整性。

案例1:每天吃饭

#重复性工作

print('吃第1次饭')

print('吃第2次饭')

print('吃第3次饭')

第1次吃饭

第2次吃饭

第3次吃饭

#容器:1天中吃第几次饭

eatList=['吃第1次饭','吃第2次饭','吃第3次饭']

#循环

for i in eatList:

print(i)

吃第1次饭

吃第2次饭

吃第3次饭

案例2:清洗GAFATA股票数据

'''定义字典:6家公司(GAFATA)的股票key是公司名称,value是股票代码'''

gafataDict={'谷歌':'Goog','亚马逊':'aMZN','Facebook':'FB',

'苹果':'aapl','阿里巴巴':'BABA','腾讯':'0700'}

#将股票代码全部大写

for key,value in gafataDict.items():

#对股票代码转换成大写

newValue=value.upper()

#将转换后新的股票代码赋值给对应的key

gafataDict[key]=newValue

print(gafataDict)

{'谷歌': 'GOOG', '亚马逊': 'AMZN', 'Facebook': 'FB', '苹果': 'AAPL', '阿里巴巴': 'BABA', '腾讯': '0700'}

continue用于跳出当前循环

for key,value in gafataDict.items():

if(key=='苹果'):

continue

print('当前公司:',key,',当前股票代码:',value)

当前公司: 腾讯 ,当前股票代码: HK:00700

当前公司: 阿里巴巴 ,当前股票代码: BABA

当前公司: 谷歌 ,当前股票代码: :GOOGLE

当前公司: Facebook ,当前股票代码: FB

当前公司: 亚马逊 ,当前股票代码: AMZN

break用于退出整个循环

#查找苹果公司的股票代码

number=0

for key,value in gafataDict.items():

number=number+1

if(key=='苹果'):

print('查找',key,'公司的股票代码是',value)

break

print('当前公司:',key,',当前股票代码:',value)

当前公司: 腾讯 ,当前股票代码: HK:00700

当前公司: 阿里巴巴 ,当前股票代码: BABA

查找 苹果 公司的股票代码是 APPLE

四、函数

Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):

函数体

调用函数时,可使用的正式参数类型有:必需参数:须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

关键字参数:允许调用时参数的顺序和声明时不一致。

默认参数:默认参数是在声明定义的时候,已经有一个默认的参数。函数调用时,如果没有传递参数,则会使用默认参数。

不定长参数:当需要一个函数处理比当初声明时更多的函数时,可以使用这种参数。加了*号的变量名会存放所有未命名的变量参数。

函数使用案例

'''定义函数函数功能:两个数相加输入:x,y是要相加的两个数输出:两个数相加的和'''

def add(x,y):

z=x+y

return z

如何使用函数?

#使用函数

a=1

b=2

c=add(y=b,x=a)

print('1和2相加等于',c)

1和2相加等于 3

函数参数:不可变数据类型

字符串、数字,元组这3种是不可变数据类型,其他的都是可变数据类型

#定义函:改变数据的值

def changeInt(a):

a=a+1

'''使用函数参数是不可变数据类型(字符串,元祖,数值):传递的只是该数据类型的值(相当于复制一份)'''

b=1

print('调用函数之前b的值=',b)

changeInt(a=b)

print('调用函数之后b的值=',b)

调用函数之前b的值= 1

调用函数之后b的值= 1

函数参数:可变数据类型

#定义函:改变列表的值

def changeList(inputList):

inputList.append('奶茶妹妹')

'''使用函数参数是可变数据类型:传递的是该变量的引用地址'''

nameList=['马云','刘强东']

print('调用函数之前的值:',nameList)

changeList(inputList=nameList)

print('调用函数之后的值:',nameList)

调用函数之前的值: ['马云', '刘强东']

调用函数之后的值: ['马云', '刘强东', '奶茶妹妹']

变量作用域

Python的作用域一共有2种:全局作用域,局部作用域。

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

#变量作用域

def test():

aStr='别理会他人闲言闲语,今日随他们,让他们说吧,你的机会将会到来,再来证明自己。'

#在函数外面,访问函数内的局部变量aStr

print(aStr)

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in ()

4

5 #在函数外面,访问函数内的局部变量aStr

----> 6 print(aStr)

NameError: name 'aStr' is not defined

global 和 nonlocal关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

五、模块

''''Python内置模块'''

#第1步:引入模块

import sys

#第2步:使用模块中的函数,属性

pathList=sys.path

print('Python 路径为:\n', pathList)

Python 路径为:

['', 'C:\\install\\Python\\Python27', 'C:\\install\\Python\\Python27\\Lib', 'C:\\install\\Python\\Python27\\Scripts', 'C:\\install\\Anaconda3\\python36.zip', 'C:\\install\\Anaconda3\\DLLs', 'C:\\install\\Anaconda3\\lib', 'C:\\install\\Anaconda3', 'C:\\install\\Anaconda3\\lib\\site-packages', 'C:\\install\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'C:\\install\\Anaconda3\\lib\\site-packages\\win32', 'C:\\install\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\install\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\install\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\yang\\.ipython']

第三方模块使用

'''使用conda命令安装包:conda install pandas使用第三方模块:pandaspandas是数据分析工具'''

#引入模块

import pandas as pd

#文件路径(在本地运行时替换成你自己的实际数据路径)

fileNameStr='C:\Alan_data\第2关零基础掌握人工智能核心语言Python\数据\病历数据.xlsx'

'''运行后会报错,报错信息是:ImportError: Install xlrd>=0.90 for Excel support这时候要学会看报错信息,上面的报错信息意思是说:缺少读取Excel文件的包xlrd这时候用conda命令安装就可以了,在conda中输入以下安装包的命令即可:conda install xlrd'''

#读取excel文件里的数据

xl = pd.ExcelFile(fileNameStr)

'''Excel里面可以有多个工作表(Sheet)这里参入的参数值“Sheet1”,就是某个工作表的名称,而不是Excel的文件名。我们可以打开Excel文件,会看到工作表(Sheet)对应的名称,默认的工作表名称是“Sheet1”(注意大小写)你也可以修改这个工作表的名称,然后传入对应的名称,就会根据名称读取这个工作表里的数据了注意这个名称如果是英文,注意大小写,我一般喜欢从Excel中复制这个名称过来,以防错误'''

#获取指定工作表(Sheet)名称的数据

patientDf = xl.parse('Sheet1')

print(patientDf)

病人编号 姓名 年龄 糖尿病类型 病情

0 1 猴子 29 1型糖尿病 较差

1 2 马云 34 2型糖尿病 好转

2 3 王健林 28 1型糖尿病 显著好转

3 4 马化腾 52 2型糖尿病 较差

4 5 Alan 37 1型糖尿病 显著好转

六、常用的数据结构(介绍collections包)

队列(queue)--- 先进先出

队列就像你去餐厅外婆家吃饭排队,新来的人在队列尾部加入,叫做入队。取完票的人从队列首部离开队列,叫做出队。

#导入collections包

from collections import deque

#定义队列:排队吃饭人的编号

queue=deque(['001','002','003','004','005'])

#入队:在队列尾部插入元素

queue.append('006')

print(queue)

deque(['001', '002', '003', '004', '005', '006'])

#出队:在队列头部删除元素

queue.popleft()

'001'

print(queue)

deque(['002', '003', '004', '005', '006'])

栈(stack)--- 后进先出

栈这种数据结构有点像像生活中的木桶。你往栈中加入新的元素,就是入栈,新的元素总是放在木桶的最上面。

#定义栈:浏览我个人知乎主页的顺序

stack=deque(['知乎动态','知乎回答','知乎文章'])

#入栈:在栈顶加入元素

stack.appendleft('知乎专栏')

print(stack)

deque(['知乎专栏', '知乎动态', '知乎回答', '知乎文章'])

stack.pop()

'知乎文章'

print(stack)

deque(['知乎专栏', '知乎动态', '知乎回答'])

排序字典OrderedDict(而Python默认的字典 Key无序)

'''OrderedDict:按照插入key的顺序,对字典排序'''

from collections import OrderedDict

#定义有序字典

gafataOdDict=OrderedDict({'谷歌':'GOOG','亚马逊':'AMZN','Facebook':'FB',

'苹果':'AAPL','阿里巴巴':'BABA','腾讯':'0700'})

gafataOdDict

OrderedDict([('谷歌', 'GOOG'),

('亚马逊', 'AMZN'),

('Facebook', 'FB'),

('苹果', 'AAPL'),

('阿里巴巴', 'BABA'),

('腾讯', '0700')])

计数器Counter

'''计数器'''

from collections import Counter

cDict = Counter('有一种鸟是永远也关不住的,因为他们的羽毛太光亮了。羽毛太光亮')

cDict['亮']

2

#出现次数最多的3个词

cDict.most_common(3)

[('的', 2), ('羽', 2), ('毛', 2)]

#打印cDict字典

cDict

Counter({'。': 1,

'一': 1,

'不': 1,

'为': 1,

'也': 1,

'了': 1,

'亮': 2,

'他': 1,

'们': 1,

'住': 1,

'光': 2,

'关': 1,

'因': 1,

'太': 2,

'是': 1,

'有': 1,

'毛': 2,

'永': 1,

'的': 2,

'种': 1,

'羽': 2,

'远': 1,

'鸟': 1,

',': 1})

总结:

通过第一关的学习,可以感觉到Python对比一些传统语言来说,灵活很多,也有指针和数组的概念,只是Python做了很好的封装,很多在传统语言中需要程序员注意的地方,都交给了底层处理。所以,Python程序员在开发项目时,少了很多底层设计的考量,可以把更多的精力放在如何处理客户数据上面,从而提高开发效率。这是我对Python的第一印象。其次,Python中提供了很多函数还有包,对分析和处理数据提供了巨大的帮助,确实不枉为数据分析和人工智能的第一语言。

学习的过程中,前期一直在读菜鸟网络的说明和代码,遗漏了猴子老师的live(崩溃...),所以,多费了好多的时间,才跟上步伐。

其实,第一节还是讲的很基础的内容,不过,只有基础打好了,后面才能飞起来。是吧~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值