学习python的第一步肯定是进行python数据分析环境的安装,我安装的是Anaconda,这是一个开源的python发行版本,里面包含180多个科学包,让我们上手就能做数据分析。
以下是最基础的python知识笔记,我用jupyter notebook写的,这是一个web应用,能让用户把代码、注释放在一个文档中。
我将文档以markdown(.md)格式导出到电脑里,再导入到知乎文档中。
数据类型
1.字符串string
#字符串定义
nameStr='Kiyan'
moneyStr='没钱'
#字符串合并
print('用+连接字符串:',nameStr+moneyStr)
用+连接字符串: Kiyan没钱
#用%s格式化字符串
str1='我是%s,你是%s'%('写的人','看的人')
print(str1)
我是写的人,你是看的人
2.数值number
#1.整型int:老王的儿子5岁
age=5
#2. 浮点型:老王身高1.83米
height=1.83
3.容器container
#容器操作分为增加、删除、查询、修改四种
3.1 列表list
#定义列表:小组成员
teamList=['Jack','Jess','Jeff','Bruce']
#使用中括号
print(teamList)
['Jack', 'Jess', 'Jeff', 'Bruce']
#列表长度
teamLen=len(teamList)
print(teamLen)
4
#1.容器操作:增加列表元素 (append)
teamList.append('David')
print('增加一个成员以后:',teamList)
teamLen=len(teamList)
print(teamLen)
增加一个成员以后: ['Jack', 'Jess', 'Jeff', 'Bruce', 'David']
5
#2.容器操作:删除列表元素 (del 列表序号)
del teamList[0]
#删除第一个元素
teamLen=len(teamList)
print(teamLen)
4
#3.容器操作:查询元素:使用下标索引来访问列表中的值,下标从0开始
member1=teamList[0]
print(member1)
Jess
#4.容器操作:修改元素: 直接指定要修改的元素序号
print('修改之前的第一个元素是:',teamList[0])
teamList[0]='Edward'
print('修改之后的第一个元素是:',teamList[0])
修改之前的第一个元素是: Jess
修改之后的第一个元素是: Edward
teamList
['Edward', 'Jeff', 'Bruce', 'David']
3.2集合set :一个没有重复元素的容器
#定义一个空的集合
fruitSets=set()
#1.使用update([])增加集合元素
fruitSets.update(['apple','peach','watermelon'])
print(fruitSets)
{'peach', 'apple', 'watermelon'}
#2.使用discard()删除集合元素
fruitSets.discard('apple')
print(fruitSets)
{'peach', 'watermelon'}
#3.查找元素,使用boolean来测试
txBool='peach' in fruitSets
print(txBool)
True
#4.修改元素
#先删除,再添加
fruitSets.discard('peach')
fruitSets.update(['orange'])
print(fruitSets)
{'orange', 'watermelon'}
3.3字典dictionary:键key与值value的映射关系
#每个键都是唯一的,类似于队列中的序号
#用大括号{}定义字典
studentDic={'001':'王小明','002':'黄大路','003':'吴彦祖','004':'彭于晏'}
#定义字典,excel学生数据储存
studentDic2={'001':['王小明',16,'一等奖学金'],
'002':['黄大路',17,'二等奖学金'],
'003':['吴彦祖',17,'三等奖学金'],
'004':['彭于晏',18,'特等奖学金']}
print(studentDic2)
{'001': ['王小明', 16, '一等奖学金'], '002': ['黄大路', 17, '二等奖学金'], '003': ['吴彦祖', 17, '三等奖学金'], '004': ['彭于晏', 18, '特等奖学金']}
#1.增加,直接定义一个新的数据
studentDic2['005']=['刘亦菲',16,'特等奖学金']
print(studentDic2)
{'001': ['王小明', 16, '一等奖学金'], '002': ['黄大路', 17, '二等奖学金'], '003': ['吴彦祖', 17, '三等奖学金'], '004': ['彭于晏', 18, '特等奖学金'], '005': ['刘亦菲', 16, '特等奖学金']}
#2. 删除 del
del studentDic2['005']
print(studentDic2)
{'001': ['王小明', 16, '一等奖学金'], '002': ['黄大路', 17, '二等奖学金'], '003': ['吴彦祖', 17, '三等奖学金'], '004': ['彭于晏', 18, '特等奖学金']}
#3.查询,根据学生编号
studentID1=studentDic2['001']
print(studentID1)
['王小明', 16, '一等奖学金']
#4. 修改,直接对编号里的数据进行替换
print('修改之前:',studentDic2['001'])
studentDic2['001']=['王小明',16,'特等奖学金']
print('修改之后:',studentDic2['001'])
修改之前: ['王小明', 16, '一等奖学金']
修改之后: ['王小明', 16, '特等奖学金']
3.4 元祖
只能查询,不能修改. 使用()来定义
4.布尔类型Boolean
age=10
if age==10:
print('判断条件为true')
else:
print('判断条件为false')
判断条件为true
5. 空值类型None
#None的第一个字母必须是大写,python是对大小写很敏感的
age=None
if age==None:
print('年龄是空值')
else:
print('年龄不是空值')
年龄是空值
条件判断
#边界条件判断
#值比较: [,==,>=,<=,!=]
passengerNum=53
if passengerNum >50 :
print('长途大巴超载')
else:
print('长途大巴没有超载')
#逻辑比较 [and,in,not]
nameList=['小黄','小红','小兰']
if '小兰' in nameList:
print('名单中有小兰的名字')
else:
print('名单中没有小兰的名字')
长途大巴超载
名单中有小兰的名字
#多个条件判断
day=int(input('输入今天是周几,按enter得到应该锻炼什么部位'))
if day==1:
print('今天是周一,练胸')
elif day==3:
print('今天是周三,练腿')
elif day==5:
print('今天是周五,练背')
else:
print('今天做有氧运动')
输入今天是周几,按enter得到应该锻炼什么部位3
今天是周三,练腿
如何使用循环loop来批量处理数据
数羊
#重复性工作
print('一只羊')
print('两只羊')
print('三只羊')
一只羊
两只羊
三只羊
#数羊
sheepList=['一只羊','两只羊','三只羊']
#循环
for i in sheepList:
print(i)
#冒号后面反应条件需要加空格,不能与条件句并排,否则会报错-->IndentationError: expected an indented block
一只羊
两只羊
三只羊
清洗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():
#加了items()才可以遍历字典,不加会遍历列表
if(key=='苹果'):
continue
print('当前公司:',key,',当前股票代码:',value)
#当key为苹果时,直接跳到下一个循环
当前公司: 谷歌 ,当前股票代码: GOOG
当前公司: 亚马逊 ,当前股票代码: AMZN
当前公司: Facebook ,当前股票代码: FB
当前公司: 阿里巴巴 ,当前股票代码: BABA
当前公司: 腾讯 ,当前股票代码: 0700
#使用break关键字跳出整个循环
for key,value in gafataDict.items():
if(key=='苹果'):
break
print('当前工资:',key,'当前股票代码:',value)
#苹果是第四个轮到的,所以只显示三个结果
当前工资: 谷歌 当前股票代码: GOOG
当前工资: 亚马逊 当前股票代码: AMZN
当前工资: Facebook 当前股票代码: FB
函数
#如何定义函数?
def multiple(x,y):
z=x*y
return z
函数的三个功能:定义函数.输入,输出
#使用函数
a=3
b=4
c=multiple(x=a,y=b)
print('a与b相乘=',c)
a与b相乘= 12
函数参数:不可变数类型
字符串String、数字Number,元祖这3种是不可变数据类型,其他的都是可变数据类型. 参数传递的是复制的数据,无法赋值
#定义函数
def changeStr(a):
a='大王'
b='小王'
print('调用函数前,b的值',b)
changeStr(a=b)
print('调用函数后,b的值',b)
调用函数前,b的值 小王
调用函数后,b的值 小王
函数参数:可变数据类型
#定义函:改变列表的值
def changeList(inputList):
inputList.append('奶茶妹妹')
'''使用函数参数是可变数据类型:传递的是该变量的引用地址'''
nameList=['马云','刘强东']
print('调用函数之前的值:',nameList)
changeList(inputList=nameList)
print('调用函数之后的值:',nameList)
调用函数之前的值: ['马云', '刘强东']
调用函数之后的值: ['马云', '刘强东', '奶茶妹妹']
变量作用域
Python的作用域一共有2种:全局作用域,局部作用域。
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
#变量作用域
def test():
aStr='hello,world!'
print(aStr)
#aStr是定义在函数test()里的,所以在外部访问的时候,显示aStr变量没有被定义,导致无法访问.
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
in
3 aStr='hello,world!'
4
----> 5 print(aStr)
NameError: name 'aStr' is not defined
模块
使用python内置模块
#第一步,引入模块
import sys
#第二步,使用模块中的函数.属性
pathList=sys.path
print('Python 路径为:', pathList)
Python 路径为: ['C:\\Users\\19940\\Downloads\\jupyter notebook\\第2关:零基础掌握人工智能核心语言Python', 'C:\\Users\\19940\\Anaconda3\\envs\\py3\\python37.zip', 'C:\\Users\\19940\\Anaconda3\\envs\\py3\\DLLs', 'C:\\Users\\19940\\Anaconda3\\envs\\py3\\lib', 'C:\\Users\\19940\\Anaconda3\\envs\\py3', '', 'C:\\Users\\19940\\Anaconda3\\envs\\py3\\lib\\site-packages', 'C:\\Users\\19940\\Anaconda3\\envs\\py3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\19940\\.ipython']
使用第三方模块
'''#第一步,在anaconda中进入python运行环境conda activate py3#第二步,使用conda指令安装模块conda install pandas'''
#第三步,引入模块并起个别名
import pandas as pd
#文件路径
#fileNameStr= 'C:\Users\19940\Downloads\jupyter notebook\第2关:零基础掌握人工智能核心语言Python\数据\病历数据.xlsx'
#在这一步,我显示的报错信息是SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
#原因是在字符串中,\是被动作转义字符来使用.所以我要改成C:/的格式
fileNameStr= 'C:/Users/19940/Downloads/jupyter notebook/第2关:零基础掌握人工智能核心语言Python/数据/病历数据.xlsx'
#读取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型糖尿病 较差
'''• 模块使用总结1 import 包名称2 import 包名称 as 别名3 from 包名称 import 函数名 #只import某一个函数'''
常用的数据结构
用list作为队列(queue)
队列就像你去餐厅吃饭排队,新来的人在队列尾部加入,叫做入队。取完票的人从队列首部离开队列,叫做出队
#导入collections包
from collections import deque
#定义队列:排队吃饭的人
queue=deque(['001','002','003','004','005'])
#入队:刚到的人拿号排队
queue.append('006')
print(queue)
#出队:删除排第一个的元素
queue.popleft()
print(queue)
deque(['001', '002', '003', '004', '005', '006'])
deque(['002', '003', '004', '005', '006'])
用list作为栈(stack)
栈这种数据结构有点像像生活中的木桶。我们往栈中加入新的元素,就是入栈,新的元素总是放在木桶的最上面。
#定义栈
stack= [1,2,3]
print(stack)
#入栈:在顶部增加元素
stack.append(4)
print(stack)
#出栈:删掉顶部元素
stack.pop()
print(stack)
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
排序字典orderedDict
'''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
#出现最多的字
cDict.most_common(3)
[('是', 4), ('人', 4), ('心', 3)]