需求分析
本实训主要锻炼学生的Python基础语句使用能力,小到简单的输入输出大到类的定义继承都有详细的代码介绍,且代码为Python3的版本。无需学生自己对代码进行升级和改造。
实验步骤
步骤一:Python基础
第一步:打印输出
在屏幕上输出“Hello Word”。
print('hello world')
输出结果如下。
hello world
第二步:基本语法
1、变量定义赋值输出
x = "a" # 变量命名
print(x)# 打印变量的值
print(type(x)) # 查看变量类型
x = 3# 之所以成为动态语言的原因
print(type(x))
输出结果如下。
a
<class ‘str’>
<class ‘int’>
2、关键字
import keyword
print(keyword.kwlist)
输出结果如下。
3、数学运算
print(x + 1,x - 1, x * 2,x/2, x ** 2)
输出结果如下。
4 2 6 1 9
4、Python 2与Python 3除法的区别
print(float(1/2)) # python 2 1.0/2 或者 float(1)/2
print(1/2)
输出结果如下。
0.5
0.5
5、数据类型
# 读取数据集中的location
import pandas as pd
medicare = pd.read_csv('./medicare.csv')
location = medicare['Location'][0]
# 整型、浮点型
location # 字符串 location
print(location)
输出结果如下。
2505 U S HIGHWAY 431 NORTH
BOAZ, AL 35957
t = True # 布尔型
f = False
print(t and f) # 与
print(t or f)# 或
print(not t)# 非
print(t != f)# 异或
输出结果如下。
False
True
False
True
print(not (True | False) | True) # not (True | False) | True # 取非操作
输出结果如下。
False
7、字符串类型:长度、索引、切片、合并和重复
S = 'Boyabigdata'
print(len(S))# 长度
print(S[0])# 索引,顺序和逆序
print(S[-2])
print(S[:])# 切片
print(S[1:3])
print(S+'xyz')# 合并和重复
print(S*3)
raws = r'B\nya'# 原始字符串
print(raws)
输出结果如下。
11
B
t
Boyabigdata
oy
Boyabigdataxyz
BoyabigdataBoyabigdataBoyabigdata
B\nya
8、字符串的相关方法:find, replace, upper, split, strip, lstrip, rstrip, capitalize, title
print(S.find('Boya')) # 找到第一次出现'Boya'的位置
print(S.replace('Boya','XYZ')) # 替换字符串
print(S.upper()) # 大写
line='aa,bb,ccc,dd'
print(line.split(',')) # 分割
line=' aa,bb,ccc,dd '
print(line.rstrip()) # 去掉末尾的空格
print(line.lstrip())# 去除开头的空格
print(' world '.strip()) # 去掉首尾的空格
hw12='%s %s %d' % ('hello','world',12) #格式化字符串
print('{} {} {}'.format('hello','world',12))
print(hw12)
print(hw12.capitalize())# 首字母大写
print(hw12.title())# 每个单词首字母大写
输出结果如下。
0
XYZbigdata
BOYABIGDATA
[‘aa’, ‘bb’, ‘ccc’, ‘dd’]
aa,bb,ccc,dd
aa,bb,ccc,dd
world
hello world 12
hello world 12
Hello world 12
Hello World 12
第三步:文件读写:open, csv, pandas
三种读取方式分别为read、readline、relines
打开文件,代码如下。
f = open('./medicare.csv',mode="r")# 生成文件对象
1、read读取,代码如下所示。
print(f.read(8))
结果如下所示。
Provider
2、readline读取,代码如下所示。
print(f.readline())
结果如下所示。
ID,Hospital Name,Address,City,State,ZIP Code,County Name,Phone Number,Measure Name,Measure ID,Score,Footnote,Measure Start Date,Measure End Date,Location
3、readlines读取,代码如下所示。
print(f.readlines())
结果如下图所示。
关闭文件
f.close()
练习:读取第一行存为columns,第二行为sample
1、读取文件
import csv# csv模块读写
f = open('./medicare.csv',mode="r")
content = csv.reader(f)
samples = list(content)
print(samples[1])
结果如下图所示。
2、read方法读取文件内容
import pandas as pd
medicare = pd.read_csv('./medicare.csv')
print(medicare.head(1))
结果如下图所示。
第四步:列表
1、提取第一个样本,并查看类型
f = open('./medicare.csv', mode="r")
columns = f.readline()
sample = f.readline()
f.close()
clean_sample = sample.strip().split(',')
print(type(clean_sample))# 查看类型
print(clean_sample)
结果如下图所示。
2、列表创建和列表索引
sample = ['1325','City Hospital',0.67]
print(len(sample)) # 列表长度
print(sample[0]) # 列表索引
sample.append('01/01/2014') # 添加列表元素:末尾添加'01/01/2014'
print(sample)
sample.insert(-1,'12/31/2014') # 添加列表元素:指定位置-1添加'12/31/2014'
print(sample)
结果如下图所示。
3、整合两个列表输出
sample = ['1325','City Hospital',0.67]
date = ['01/01/2014','12/31/2014']
# 整合两个列表
sample.extend(date)
print(sample)
结果如下图所示。
[‘1325’, ‘City Hospital’, 0.67, ‘01/01/2014’, ‘12/31/2014’]
4、获取元素索引号
sample.index(0.67)
结果如下图所示。
2
练习1:提取第一个样本的Hospital Name和Score
# 参考代码
# 读取数据文件,并进行数据清洗
f = open('./medicare.csv', mode="r")
columns = f.readline()
sample = f.readline()
f.close()
columns_list = columns.strip().split(',')
sample_list = sample.strip().split(',')
# 使用中间变量index的方法
hospital = ['Hospital Name']
index = columns_list.index('Hospital Name')
hospital.append(sample_list[index])
# 不使用中间变量index的方法,节省代码行数,牺牲可读性
score = ['Score']
score.append(float(sample_list[columns_list.index('Score')]))
shortinfo = hospital + score
print(shortinfo)
结果如下图所示。
[‘Hospital Name’, ‘MARSHALL MEDICAL CENTER SOUTH’, ‘Score’, 0.98]
1、列表切片和元素删除
shortinfo = ['Hospital Name', 'MARSHALL MEDICAL CENTER SOUTH', 'Score', 0.98]
print(shortinfo[1:3])# 列表切片
print(shortinfo[:]) # 拷贝列表
print(shortinfo[:2])# 从头开始切片
print(shortinfo[::-1])# 切片产生逆序,等价于reverse(),区别?
结果如下图所示。
[‘MARSHALL MEDICAL CENTER SOUTH’, ‘Score’]
[‘Hospital Name’, ‘MARSHALL MEDICAL CENTER SOUTH’, ‘Score’, 0.98]
[‘Hospital Name’, ‘MARSHALL MEDICAL CENTER SOUTH’]
[0.98, ‘Score’, ‘MARSHALL MEDICAL CENTER SOUTH’, ‘Hospital Name’]
-
字符串切片
s = ‘hackdata’
print(s[2:4])
结果如下图所示。
ck
-
元素删除remove方法
shortinfo = ['Hospital Name', 'MARSHALL MEDICAL CENTER SOUTH', 'Score', 0.98] shortinfo.remove('MARSHALL MEDICAL CENTER SOUTH') # 元素删除:remove方法 print shortinfo
结果如下所示。
[‘Hospital Name’, ‘Score’, 0.98] -
元素删除:del方法
shortinfo = ['Hospital Name', 'MARSHALL MEDICAL CENTER SOUTH', 'Score', 0.98] del shortinfo[1] # 元素删除:del方法 print(shortinfo)
结果如下所示。
[‘Hospital Name’, ‘Score’, 0.98] -
元素删除:pop方法
shortinfo = ['Hospital Name', 'MARSHALL MEDICAL CENTER SOUTH', 'Score', 0.98] shortinfo.pop(1) # 元素删除:pop方法 print(shortinfo)
结果如下所示。
[‘Hospital Name’, ‘Score’, 0.98]
练习2:可变数据结构的浅拷贝与深拷贝
1、赋值操作
name1 = ['hack']
name2 = name1
name1.append('data')
print(name1)
print(name2)
结果如下所示。
[‘hack’, ‘data’]
[‘hack’, ‘data’]
2、浅拷贝操作
name1 = ['hack',['da','ta']]
name2 = name1[:]
name2[0] = 'hook'
name2[1][0] = 'do'
print(name1)
print(name2)
结果如下所示。
[‘hack’, [‘do’, ‘ta’]]
[‘hook’, [‘do’, ‘ta’]]
3、深拷贝操作
from copy import deepcopy
name1 = ['hack',['da','ta']]
name2 = deepcopy(name1)
name2[0] = 'hook'
name2[1][0] = 'do'
print(name1)
print(name2)
结果如下所示。
[‘hack’, [‘da’, ‘ta’]]
[‘hook’, [‘do’, ‘ta’]]
第五步:控制结构
1、for循环
for item in shortinfo:
print(item)
结果如下所示。
Hospital Name
Score
0.98
2、循环时改变迭代列表
for item in shortinfo[:]:
shortinfo.append(1)
print(shortinfo)
结果如下所示。
[‘Hospital Name’, ‘Score’, 0.98, 1, 1, 1]
3、range函数
l = ['hack','data']
for index in range(len(l)):
print(index, l[index])
结果如下所示。
0 hack
1 data
4、enumerate函数
for index, item in enumerate(l):
print(index, item)
结果如下所示。
0 hack
1 data
5、zip函数
for index, item in zip(range(len(l)),l):
print(index, item)
结果如下所示。
0 hack
1 data
6、if条件语句
false_values = [False,None,0,(),{},[],’’] # Python的False值
# if 条件语句
review_sentiment = -1
if review_sentiment > 0 :
print('positive')
elif review_sentiment ==0:
print('neutral')
else:
print('negative')
结果如下所示。
negative
7、while 循环结构
review_sentiment = -1
while review_sentiment < 5:
review_sentiment += 1
print('review_sentiment equals %d' % review_sentiment)
结果如下所示。
8、break,continue,pass
review_sentiment = -1
while review_sentiment < 20:
review_sentiment += 1
print('review_sentiment equals %d' % review_sentiment)
if review_sentiment > 1:
break
结果如下所示。
练习:取出Hospital Name和Score放入一个嵌套列表中,并将Hospital每个单词转换为首字母大写
import csv
with open('./medicare.csv', mode="r") as f:
content = csv.reader(f)
samples = list(content)
# 找到两列的索引位置
idx1 = samples[0].index('Hospital Name')
idx2 = samples[0].index('Score')
samples_filtered = []
# 将Hospital Name中的单词转换为首字母大写的形式
for item in samples[1:]:
# 方法一 capitalize() + for循环
words = item[idx1].strip().split(" ")
for index, word in enumerate(words):
words[index] = word.capitalize()
item[idx1] = " ".join(words)
samples_filtered.append([item[idx1], item[idx2]])
# 方法二 title()
# words = item[idx1].title()
# samples_filtered.append([words,item[idx2]])
print(samples_filtered[:3])
结果如下所示。
[[‘Marshall Medical Center South’, ‘0.98’], [‘Wedowee Hospital’, ‘0.84’], [‘Crestwood Medical Center’, ‘0.98’]]
第六步:元组
shortinfo_tuple = tuple(shortinfo) # 元素不可变 就两个方法,count,index
print(shortinfo_tuple)
结果如下所示。
(‘Hospital Name’, ‘Score’, 0.98)
1、元素个数统计
print(shortinfo_tuple.count(1))
结果如下所示。
0
2、返回索引位置
print(shortinfo_tuple.index(0.98))
结果如下所示。
2
第七步:字典
1、三种方式创建字典
dict1 = {'Marshall Medical Center South':0.98,'Wedowee Hospital':0.84}
dict2 = dict(Marshall_Medical_Center_South=0.98,Wedowee_Hospital=0.84)
dict3 = dict([('Marshall Medical Center South',0.98),('Wedowee Hospital',0.84)])
dict4 = dict([('Wedowee Hospital',0.84),('Marshall Medical Center South',0.98)]) # 无序性
print(dict1)
print(dict2)
print(dict3)
print(dict4)
结果如下所示。
2、有序字典
from collections import OrderedDict
ordered_dict1 = OrderedDict([('Wedowee Hospital',0.84),('Marshall Medical Center South',0.98)])
ordered_dict2 = OrderedDict([('Marshall Medical Center South',0.98),('Wedowee Hospital',0.84)])
print(ordered_dict1)
print(ordered_dict2)
结果如下所示。
OrderedDict([(‘Wedowee Hospital’, 0.84), (‘Marshall Medical Center South’, 0.98)])
OrderedDict([(‘Marshall Medical Center South’, 0.98), (‘Wedowee Hospital’, 0.84)])
3、通过两个列表创建字典
key_list = ['Marshall Medical Center South','Wedowee Hospital']
value_list = [0.98,0.84]
dict5 = {}
for key, value in zip(key_list,value_list):
dict5[key] = value
print(dict5)
结果如下所示。
{‘Marshall Medical Center South’: 0.98, ‘Wedowee Hospital’: 0.84}
4、元素访问
print(dict5['Marshall Medical Center South']) # 通过键直接访问
print(dict5.get('Marshall Medical Center South')) # get方法获得键的值
print(dict5.get('Marshall')) # 不存在键值,返回none
print(dict5.get('Marshall',u'键值不存在')) # 可以指定键不存在时,返回的值
print('Marshall Medical Center South' in dict5)# in 查询
结果如下所示。
0.98
0.98
None
键值不存在
True
5、返回数据
print(dict5.keys()) # 返回所有的键
print(dict5.values()) # 返回所有的值
print(dict5.items())# 返回键值元组列表
结果如下所示。
6、items遍历读取字典键值
for key,value in dict5.items(): # items遍历读取字典键值
print(key,":",value)
结果如下所示。
Marshall Medical Center South : 0.98
Wedowee Hospital : 0.84
7、字典元素添加与删除
dict5['City Hospital']= 1 # 字典元素的添加
print(dict5)
del dict5['Wedowee Hospital'] # del方法删除字典元素
print(dict5)
dict5.pop('City Hospital') # pop方法删除元素
print(dict5)
dict5.clear() # 删除字典中所有元素
print(dict5)
结果如下所示。
第八步:集合
1、创建集合
set1 = {1,2,3}# {}创建集合
print(set1)
print(shortinfo) # set函数创建集合
shortinfo_set = set(shortinfo)
print(shortinfo_set)
结果如下所示。
2、添加删除元素
shortinfo_set.add('City Hospital') # 增加元素
print(shortinfo_set)
shortinfo_set.remove('City Hospital') # 删除元素
print(shortinfo_set)
结果如下所示。
{‘Score’, ‘Hospital Name’, ‘City Hospital’, 0.98}
{‘Score’, ‘Hospital Name’, 0.98}
3、并集、交集、差集等集合运算
print(shortinfo_set)
结果如下所示。
{0.98, 1, ‘Hospital Name’, ‘Score’}
第九步:推导式
1、把列表shortinfo中的所有元素变为字符串(多行)
for index,item in enumerate(shortinfo):
shortinfo[index] = str(item)
print(shortinfo)
结果如下所示。
[‘Hospital Name’, ‘Score’, ‘0.98’]
2、列表推导式
[str(item) for item in shortinfo]
结果如下所示。
[‘Hospital Name’, ‘Score’, ‘0.98’]
3、集合推导式
key_list = ['Marshall Medical Center South','Wedowee Hospital']
value_list = [0.98,0.84]
{str(item) for item in set(shortinfo)}# 集合推导式
结果如下所示。
{‘0.98’, ‘Hospital Name’, ‘Score’}
4、通过两个列表创建字典
dict5 = {}
for key, value in zip(key_list,value_list):
dict5[key] = value
print(dict5)
结果如下所示。
{‘Marshall Medical Center South’: 0.98, ‘Wedowee Hospital’: 0.84}
5、字典推导式
{key:value for key,value in zip(key_list,value_list)}
结果如下所示。
{‘Marshall Medical Center South’: 0.98, ‘Wedowee Hospital’: 0.84}
第十步:函数
1、定义平方函数
def square(x):
s = x*x
return s
square(2)
结果如下所示。
4
步骤二:变量作用域:局部变量与全局变量
def square(x):
global number # 局部变量转换为全局变量
number = 5.0
s = x*x
return s
square(2)
结果如下所示。
4
print number
结果如下所示。
5.0
步骤三:参数设定
第一步:按位置顺序传入
def polynomial(x, y):
z = x+2*y
return z
print(polynomial(1, 2))
结果如下所示。
5
第二步:关键词传入
print(polynomial(y=1, x=2))
结果如下所示。
4
第三步: 默认参数
def polynomial(x, y=1):
z = x+2*y
return z
print(polynomial(x=2))
结果如下所示。
4
第四步:不定长参数*args
def polynomial(x, *args):
for item in args:
x += 2*item
return x
print(polynomial(2, 1, 2))
print(polynomial(2, *[1, 2])) # 列表传入
结果如下所示。
8
8
第五步:不定长参数**kwargs
def polynomial(x, **kwargs):
y = kwargs.pop('y', None)
z = kwargs.pop('z', None)
result = x+2*y+3*z
return result
print(polynomial(x=1, y=1, z=2))
from sklearn.model_selection import train_test_split
结果如下所示。
9
步骤四:lambda函数
square = lambda x:x*x# 快速定义函数
步骤五:map函数
map(square,range(5)) # 列表中的元素依次执行函数
结果如下所示。
<map at 0x16fa88f0>
print [item.capitalize() for item in columns_list]
print map(lambda x:x.title(),columns_list)# map与lambda结合的优雅方式
结果如下所示。
步骤六:模块
1、导入模块
# import module as alias
# from module import *
# from module import func1,fun2
步骤七:类
第一步:定义类
# 定义欢迎用户的类
class Greeter(object):
# 构造方法
def __init__(self, name):
self.name = name # 初始化属性
# 实例方法
def greet(self, upper=False):
if upper:
print('HELLO, %s!' % self.name.upper())
else:
print('Hello, %s' % self.name)
g = Greeter('Sid') # 创建Greeter类的一个实例(对象),并初始化实例属性
g.greet() # 调用类中的方法,使用默认参数
g.greet(upper=True) # 调用类中的方法,自定义参数
结果如下所示。
Hello, Sid
HELLO, SID!
第二步:继承类
class Welcome(Greeter):
pass
w = Welcome('Sid')
print(w.name)
w.greet()
结果如下所示。
Sid
Hello, Sid