猴子老师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(崩溃...),所以,多费了好多的时间,才跟上步伐。

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

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

  1. python最终目标是什么_Python之父Guido谈Python的未来

    6月初,Python之父Guido van Rossum在今天的PyCon US大会上作了名为"Python Language"的演讲.近日,他又接受了IT媒体Infoworld的 ...

  2. python内容目标_python抓取一个页面的目标网址,然后抓取目标网址里的内容

    这次测试的是招聘页面 https://www.liepin.com/zhaopin/?key=python 目标是先抓取到里面各个公司职位介绍的链接,然后在根据链接抓取到里面根据职位的介绍. 代码如下 ...

  3. python flag用法_Python 进阶之路 (四) 先立Flag, 社区最全的Set用法集锦

    Set是什么 大家好,恰逢初五迎财神,先预祝大家新年财源滚滚!! 在上一期详解tuple元组的用法后,今天我们来看Python里面最后一种常见的数据类型:集合(Set) 与dict类似,set也是一组 ...

  4. python 工业自动化 人工智能_Python人工智能之路 - 第三篇 : PyAudio 实现录音 自动化交互实现问答...

    Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...

  5. python str 换行_Python学习之路(1)

    一.Python3.x IDLE的安装(windows) 1.Python 官网:https://www.python.org/ 2.Downloads---- --->Windows--- - ...

  6. python 前端学习_python学习之路7 前端学习3

    1.页面布局 PosTion :fixed Title .left{float:left; }.right{float:right; }.head{height:58px;background-col ...

  7. python正则表达式生成器_Python学习之路-装饰器生成器正则表达式

    装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器,def login_decorator(fun ...

  8. python最终价格_python分析北京租房现状,最后的价格分布地图亮了

    租房信息已经有了,为了能对北京目前的租房市场有个直观认识,我对数据进行深度分析,并进行可视化展示 从分析结果中,我得到了哪些位置房源多.各区租房平均价格以及心仪价格地理位置分布等重要信息,为帮助我租房 ...

  9. python画大象_Python学习之路(01)-- Python基础

    一. 初识Python-HelloWorld 1 #!/usr/bin/env python 2 #当py文件为可执行程序时,需添加该项 3 4 5 #coding: utf-8 6 7 print( ...

最新文章

  1. java接收数据_java 如何接收数据集参数
  2. 标题栏外区域拖动窗体
  3. HashSet和HashMap的区别
  4. android 重置画布,android-自定义视图:重按视图画布
  5. Let's Fork | 11 款 Github 最新「机器学习」开源项目
  6. Spring是如何利用“三级缓存“巧妙解决Bean的循环依赖问题
  7. golang 反射_Golang 会淘汰 Python 吗?
  8. 为tornado自定义session
  9. table标签+css代码实现选项卡效果(用)
  10. linux精简版远程登录,Linux下如何定制SSH来简化远程访问
  11. 腾讯 QQ 产品已经实现全量上云;中科院计算所发明新编程语言“木兰”;Electron 7.1.9 发布 | 极客头条...
  12. Android4.4 Input 输入上层分析
  13. 厉害了,用 Java 也能实现图片识别!
  14. 微信如何开通直播?开通方法有2种
  15. 帧同步游戏开发基础指南
  16. Flink 1.10 SQL、HiveCatalog与事件时间整合示例
  17. Spearman 相关性分析法,以及python的完整代码应用
  18. proxifier 代理bluestack
  19. Matlab绘制垂直的直线图
  20. 升级 GPU 服务器 cuda 驱动版本指南

热门文章

  1. python兔子繁殖问题_【算法】兔子繁殖之斐波那契数列
  2. 你不知道的VLC播放器常用痛点功能——快进、快捷键、剪切视频、旋转画面、视频提取声音等
  3. opencv学习(三十六)图像直方图均衡化equalizeHist
  4. jsf的verbatim标签
  5. 天池大赛 xgboost/lightgbm + python36 + win10_64 环境配置
  6. 用matlab求摆线,求由摆线x=a(t-sint),y=a(1-cost)的一拱(0≦t≦2π)与x轴所围成的图形面积...
  7. 数据库死锁的预防与解除
  8. 1124 Raffle for Weibo Followers (20 分)
  9. actions vuex 请求_vue中vuex的actions里面请求接口,提交给mutations报错
  10. 抖音整人/撩小姐姐代码(vbs脚本)