文章目录
大数据分析的工作流程是什么样子?
首先,把基本面信息,历史数据,行业资讯等数据进行清洗和处理;然后,将处理后的数据导入到数学模型及编程设计中;最后通过分析后,做出适合当前市场行情的商务决策。
说的简单一点, 就是利用 Python 让计算机为我们分析数据,做出决策。 如今的券商,65%的指令都是由程序发出的,80%以上的跨国投行都已经使用大数据分析进行投资决策。
print函数
数据类型
基本类型
浮点数虽说比整数多一个小数点,但是它存在一个 bug。因为浮点数的特点,导致它在计算机内运算时,结果不是那么精确,会有四舍五入的差。如:
不是 0.46 呢,而是一个比 0.46 小的数字。 这是因为 Python 在计算浮点数时,会有相应的转换机制,所以最终的小数精度会缺失。
数据类型的查询— type()函数
数据拼接
当加号两边都是整数的时候加号就起到了加法的作用
当两边都是字符串的时候加号就起到了拼接的作用。
只有字符串与字符串才能拼接
数据转换
数据转换的方法有3个: str() ,int(),float()
-
str()函数
可以将其他类型的数据变换成 str 类型。 -
int()函数
int()函数可以将其他类型的数据转换成整数类型,像 str()一样,你只需要将转换的数据放进 int()中。
浮点形式的字符串是无法使用 int()进行数据转换的。
虽然浮点形式的字符串不能使用 int()函数转换,但是浮点数是可以使用 int()函数来转换的。int()函数的本质是将数据转换整数,对于浮点数,就是取整处理,也就是只拿走整数部分。 不会做四舍五入操作。可是, 如果我想把字符串形式的浮点数’38.56’转换成浮点数怎么办?这就涉及到我们最后一个知识点—float()函数 。
-
float()函数
float()函数可以将整数和字符串转换成浮点数类型,但前提是,这个字符串中的内容一定是数字形式。
条件判断
-
单项判断
那么,这段代码是如何实现的呢?首先,第一行代码,用“=”对当前情况进行赋值:将钱包 1000 赋值给变量 money。
第二步,确定 if 条件: 如果钱包 money 的值>=1000, 就执行冒号后的下一行命令。
第三步,用 print()命令打印出结果, 你去吃日料吧,带上钱,带上女朋友。搜嘎,原来 if 语句的单向判断如此简单。
会发现,在 if 语句的冒号后面,print()语句的前面,出现了几个空格,这又是为什么呢?在编程武林中,空格不叫空格,而是叫缩进。就如同我们写报告一样,每段开始都要空两格。对于 Python 而言,缩进是一种语法规则,它会帮助 Python 更好的分清代码结构与层次,计算机更好的执行 Python 代码。【注:缩进是四个空格或一个 Tab 键,且Tab 键和四个空格不能混用,千万注意!千万注意!】
在 if 条件语句中,缩进是不需要手动按空格的。当你用英文输入法后按回车,我们的开发工具(用来编写 Python 代码的程序)为了方便大家编程,会自动实现下一行代码,向右缩进的功能。此时,被缩进的所有内容被称为 if 语句内的代码块。这就表示: 如果满足 if 条件,计算机就会执行 if 语句内的代码块。(缩进的所有内容)
-
双向判断 :lf…else…
Python 提供了 if…else…语句,让我们有了另一种选择。如果…不满足,就…
-
多项判断
第一步,第一行赋值,会自上而下的顺序挨个试一遍,看自己满足哪个条件。
第二步,满足哪个条件,就执行哪个条件里面对应的代码块,不满足条件就继续往后试,试出结果为止。
-
if嵌套
if 嵌套使用的场景是:在满足基础条件的情况下,在观察是否满足其他额外条件。
标识符
- 第一个字符必须是字母表中字母或下划线_。
- 标识符的其他的部分由字母、数字和下划线组成。
- 标识符对大小写敏感。
- 在Python 3中,可以用中文作为变量名,非ASCIl标识符也是允许的了。
关键字
我们不能把关键字用作任何标识符名称。
Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字:(也就是说所有这些keyword都不能拿来做变量名或者标识符哦)
import keyword
keyword.kwlist
[‘False’, ‘None’,‘True’,‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’,‘del’, ‘elif’,‘else’,‘except’, ‘finally’,‘for’, ‘from’,‘global’,‘if’,‘import’,‘in’,‘is’,‘lambda’,
‘nonlocal’, ‘not’,‘or’, ‘pass’,‘raise’, ‘return’,‘try’, ‘while’,‘with’, ‘yield’]
注释
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
print ("Hello, Python!")
使用帮助
Python提供了dir和help函数供用户查看模块、函数等的相关说明。
以查看math模块的相关说明为例,在Python命令窗口中输入**dir (math)**即可查看math模块的可用属性和函数。
import math
dir(math)
[‘doc’,‘file’, ‘loader’,‘name’, ‘package’, ‘spec’,…
help函数可以查看模块、函数等的详细说明信息。例如在import math后,输入命令help(math),将列出math模块中所有的常量和函数详细说明。如果输入help(math. sqrt)将只列出math.sqrt函数的详细信息。
import math
help(math.sqrt)
运算符
Python支持多种运算符,下面大致按照优先级从高到低的顺序列出了所有的运算符。
运算符的优先级指的是多个运算符同时出现时,先做什么运算然后再做什么运算。除了我们之前已经用过的赋值运算符和算术运算符,我们稍后会陆续讲到其他运算符的使用。
比较运算符有的地方也称为关系运算符,包括==、=、<、>、=、>=,我相信没有什么好解释的,大家—看就能懂。
唯一需要提醒的是比较相等用的是==,请注意这个地方是两个等号,因为=是赋值运算符,我们在上面刚刚讲到过,==才是比较相等的比较运算符。比较运算符会产生布尔值,要么是True要么是False。
逻辑运算符有三个,分别是and、or和not。
-
and字面意思是"而且",所以and运算符会连接两个布尔值,如果两个布尔值都是True,那么运算的结果就是True;左右两边的布尔值有一个是False,最终的运算结果就是False。
相信大家已经想到了,如果and左边的布尔值是False,不管右边的布尔值是什么,最终的结果都是False,所以在做运算的时候右边的值会被跳过(短路处理),这也就意味着在and运算符左边为False的情况下,右边的表达式根本不会执行。
-
or字面意思是*或者”,所以or运算符也会连接两个布尔值,如果两个布尔值有任意一个是True,那么最终的结果就是True。当然,or运算符也是有短路功能的,在它左边的布尔值为True的情况下,右边的表达式根本不会执行。
-
not运算符的后面会跟上一个布尔值,它的作用是得到与该布尔值相反的值,也就是说,后面的布尔值如果是True运算结果就是False,而后面的布尔值如果是False则运算结果就是True.
"""
比较运算符和逻辑运算符的使用
"""
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not (1 != 2)
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False
tips:比较运算符的优先级高于赋值运算符,所以flag0 = 1 1 先做 1产生布尔值True,再将这个值赋值给变量flag0。print函数可以输出多个值,多个值之间可以用,进行分隔,输出的内容之间默认以空格分开。
import math
r = float(input("输入半径:"))
area = math.pi * r ** 2
print("面积为:%.2f" %area)
转义字符
print('你好\n再见') #\n表示换行,相当于敲了一个回车键
print('你好我好\t大家都很好\t爱你们')
print('\123\x6a') #8进制数123对应的字符是's',16进制数6a对应的字符是'j'
Tips: 在字符串前面加上字母r或R表示原始字符串,所有的字符都是原始的本义而不会进行任何转义。
print('C:\test\net') #字符串中“\t”和“\n”都表示转义字符
print(r'C:\test\net')
三重引号字符串
三重引号字符串是一种特殊的用法。三重引号将保留所有字符串的格式信息。如字符串跨越多行,行与行之间的回车符、引号、制表符或者其他任何信息,都将保存下来。在三重引号中可以自由的使用单引号和双引号。
print('''"what's your name?"
"My name is jone"''')
字符串格式化
使用print()函数很容易输出各种对象,但print()函数无法输出设计复杂的格式。Python提供了字符串格式化的方法来处理复杂格式的字符串。
%符号格式化字符串
字符串格式的书写
- []中的内容可以省略;
- 简单的格式是%加格式字符,如%f、%d、%c等;
- 当最小宽度及精度都出现时,它们之间不能有空格,格式字符和其他选项之间也不能有空格,如%8.2f。
常用格式字符的含义
name='Lily'
age=18
print('我叫%s,今年%d岁'%(name,age))#一次转换多个对象,这些对象表示成一个元组形式,位置与格式化字符一一对应
format()方法格式化字符串
print('我叫{},今年{}岁'.format('张清',18))
print('我叫{0},今年{1}岁'.format('张清',18))
print('我叫{1},今年{0}岁'.format(18,'张清'))
f-string格式化字符
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去
name='张清'
age=18
print(f'我叫{name},今年{age}岁')
字符串截取
- 字符串的截取就是取出字符串中的子串。截取有两种方法:一种是索引
str[index]
取出单个字符;另一种是切片str[[start]:[end]:[step]]
取出一片字符。切片方式与列表部分介绍的一样。 - 字符串中字符的索引跟列表一样,可以双向索引。
s='student'
print(s[0])
print(s[-1])
print(s[1:3])#取出位置1到位置2的字符,不包括位置3的字符
print(s[:3])#取出从头到位置2的字符
print(s[-2:])#取出从倒数第2个位置开始的所有字符
print(s[:])#取出全部字符
print(s[::2])#步长为2
str1 = 'hello, world!'
# 通过内置函数len计算字符串的长度
print(len(str1)) # 13
# 获得字符串首字母大写的拷贝
print(str1.capitalize()) # Hello, world!
# 获得字符串每个单词首字母大写的拷贝
print(str1.title()) # Hello, World!
# 获得字符串变大写后的拷贝
print(str1.upper()) # HELLO, WORLD!
# 从字符串中查找子串所在位置
print(str1.find('or')) # 8
print(str1.find('shit')) # -1
# 与find类似但找不到子串时会引发异常
# print(str1.index('or'))
# print(str1.index('shit'))
# 检查字符串是否以指定的字符串开头
print(str1.startswith('He')) # False
print(str1.startswith('hel')) # True
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!')) # True
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# ******************hello, world!*******************
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
# hello, world!
str2 = 'abc123456'
# 检查字符串是否由数字构成
print(str2.isdigit()) # False
# 检查字符串是否以字母构成
print(str2.isalpha()) # False
# 检查字符串是否以数字和字母构成
print(str2.isalnum()) # True
str3 = ' jackfrued@126.com '
print(str3)
# 获得字符串修剪左右两侧空格之后的拷贝
print(str3.strip())
经典例子
1. 寻找水仙花数
tips: 水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如: 1 3 + 5 3 + 3 3 = 153 1^3+5^3+3^3=153 13+53+33=153 。
for num in range(100, 1000):
ge = num % 10
shi = num // 10 % 10
bai = num // 100
if num == bai ** 3 + shi ** 3 + ge ** 3:
print(num)
在上面的代码中,我们通过整除和求模运算分别找出了一个三位数的个位、十位和百位,这种小技巧在实际开发中还是常用的。用类似的方法,我们还可以实现将一个正整数反转,例如:将12345变成54321,代码如下所示。
num = int(input('num = '))
reversed_num = 0
while num > 0:
reversed_num = reversed_num * 10 + num % 10
num //= 10
print(reversed_num)
2. 百钱百鸡问题
tips: 百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
for x in range(0, 20):#设x为公鸡数,则100块钱最多买20只公鸡
for y in range(0, 33):#设y为母鸡数,则100块钱最多买33只母鸡
z = 100 - x - y #小鸡设为z
if 5 * x + 3 * y + z / 3 == 100:
print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))
上面使用的方法叫做穷举法,也称为暴力搜索法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。这种方法看起来比较笨拙,但对于运算能力非常强大的计算机来说,通常都是一个可行的甚至是不错的选择,而且问题的解如果存在,这种方法一定能够找到它。
3.CRAPS赌博游戏。
tips: CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。
from random import randint
money = 1000
while money > 0:
print('你的总资产为:', money)
needs_go_on = False
while True:
debt = int(input('请下注: '))
if 0 < debt <= money:
break
first = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % first)
if first == 7 or first == 11:
print('玩家胜!')
money += debt
elif first == 2 or first == 3 or first == 12:
print('庄家胜!')
money -= debt
else:
needs_go_on = True
while needs_go_on:
needs_go_on = False
current = randint(1, 6) + randint(1, 6)
print('玩家摇出了%d点' % current)
if current == 7:
print('庄家胜')
money -= debt
elif current == first:
print('玩家胜')
money += debt
else:
needs_go_on = True
print('你破产了, 游戏结束!')