Python下载:免费开源您现在看到的这篇文章主要是关于Python的基础知识。这是开始加入数据挖掘学习小组后的第二周学习分享,热心的群主是一位来自鹅厂的技术大佬,搜索(公众号:木东居士),由于柳柳比较懒,本文资料多来源于群友,若有侵权,敬请告知。
好了,话不多说,开始我们今天的内容,首先安装我们的Python环境。
官网地址:https://www.python.org/downloads/
下载对应版本Python:python-3.6.1-amd64.exe(我的电脑是window 7-64位),这个版本比较成熟,所以选择
Python安装
(1)直接点击 python-3.6.1-amd64.exe
选择【Customize installation】,可以自定义安装目录;
选择【Add Python 3.6 to PATH】,将Python添加到path环境变量中,免于手动添加,比较方便,添加以后可以直接从cmd命令行运行Python。
(2)直接【Next】
(3)可以自定义安装地址:然后【Install】
(4)提示安装成功
Python测试
(1)快捷键【Windows+R】运行cmd
(2)输入:Python 然后 回车 输入:print ('Hello World!')
完工,python环境已经成功安装。
现在需要安装一个Python工具,一般会用Pycharm,这里我用的是Vs code。
安装Vs code
Vs Code安装
ok,环境工具都准备好了,我们开始这周的任务吧。
Python基本语法[h2]一:基本数据类型[/h2]Python3 中有常见的六种数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
这六种数据类型可以分成以下两类:
- 不可变数据:Number、String、Tuple
- 可变数据:List、Dictionary、Set
[h2]1、Number[/h2]Python3 中支持 int、float、bool、complex。- >>> a, b, c, d = 2, 2.5, True, 2+2j>>> print(type(a), type(b), type(c), type(d))
复制代码 此外还可以用 isinstance 来判断数字类型。- >>>a = 10>>> isinstance(a, int)True
复制代码 isinstance 和 type 的区别在于:
- type() 不会认为子类是一种父类类型。
- isinstance() 会认为子类是一种父类类型。
具体对比如下:- >>> class Father:... pass...>>> class Son(Father):... pass...>>> isinstance(Father(), Father)True>>> type(Father()) == FatherTrue>>> isinstance(Son(), Father)True>>> type(Son()) == FatherFalse
复制代码 [h2]2、String[/h2]Python中的字符串用单引号 ' 或双引号 " 括起来,同时包含使用反斜杠 \ 转义特殊字符。设字符串长度为 n,索引值以 0 为开始值,一直到 以 n-1 为结束的索引值,反过来,以 -1 为从末尾的开始位置,一直到以 -(n-1) 为结束的索引值。字符串的截取的语法格式如下,不包括尾索引。- [/code]字符串可以用 * 或者 + 进行操作,* 表示复制当前字符串,+ 表示和其他的字符串进行相连。
- [code]>>> s = 'xyz'>>> print (s) # 输出字符串xyz>>> print (s[0:2]) # 输出第一个和第二个字符xy>>> print (s[1]) # 输出第二个字符y>>> print(s[-1]) # 输出倒数第一个字符z>>> print (s * 2) # 输出字符串两次xyzxyz>>> print (s + "你好") # 连接字符串xyz 你好
复制代码- [/code]Python 使用反斜杠( \ )转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串。
- [code]>>> print('w\nys')wys>>> print(r'w\nys')w\nys
复制代码 再次要强调的是字符串是不可变的数据类型,不要试图去修改,否则会报错。- >>> s = 'wyz'>>> s[0] = 'x'TypeError Traceback (most recent call last) in () 1 s = 'wys'----> 2 s[0] = 'z'TypeError: 'str' object does not support item assignment
复制代码 [h2]3、List[/h2]列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。列表的索引和截取方式和 String 相同,这里不再赘述。
列表也可以通过 + 和 * 记性操作,原理和 String 类似,+ 表示连接其他的列表, * 表示重复列表内容,具体举例:- >>> l = [ 'a', 7, 2.2, [2]]>>> l[0:2]['a', 7]>>> l + ['b']['a', 7, 2.2, [2], 'b']>>> l * 2['a', 7, 2.2, [2], 'a', 7, 2.2, [2]]
复制代码 与字符串不同的是,列表是可以改变元素的。- >>> l[0] = 'b'>>> l['b', 7, 2.2, [2]]
复制代码 列表和字符串截取可以接收第三个参数,参数作用是截取的步长,如下举例:- >>> l[::2]['a', 2.2]>>> print(s[::2])ws>>> print(s[::-1]) # 使用此截取方式 [::-1] 相当于倒序输出结果syw>>> l[::-1][[2], 2.2, 7, 'a']
复制代码 [h2]4、Tuple[/h2]元组( Tuple )与列表类似,不同之处在于元组的元素不能修改,否则会报错,元组写在小括号 () 里,元素之间用逗号隔开。元组中的元素类型也可以不相同。
Tuple 和 List 的操作基本相同。- >>> t = ( 'a', 6 , 2.2)>>> print (t)('a', 6, 2.2)>>> t[1:](6, 2.2)>>> t * 2('a', 6, 2.2, 'a', 6, 2.2)
复制代码- [/code][code]# 如果元组只有一个元素,需要加一个逗号,否则会被识别为字符串 'b',而不是 ('b')
复制代码- [/code][code]>>> t + ('b',)('a', 6, 2.2, 'b')
复制代码 [h2]5、Set[/h2]集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。- >>> students = {'A', 'B', 'C'}>>> print(students){'C', 'A', 'B'}>>> students = {'A', 'B', 'C', 'A'}>>> print(students){'C', 'A', 'B'}>>> a = set('abab')>>> b = set('acac')>>> print(a)>>> print(b){'a', 'b'}{'a', 'c'}>>> print(a - b) # a 和 b 的差集{'b'}>>> print(a | b) # a 和 b 的并集{'a', 'b', 'c'}>>> print(a & b) # a 和 b 的交集{'a'}>>> print(a ^ b) # a 和 b 中不同时存在的元素{'b', 'c'}
复制代码 [h2]6、Dictionary[/h2]列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键 (key) : 值 (value) 的集合。
键 (key) 必须使用不可变类型。并且键 (key) 必须是唯一的。值 (value) 可以相同- >>> d = {}>>> d['a'] = "wys">>> d[0] = "wys">>> print (d['a']) # 输出键为 'one' 的值wys>>> print (d[0]) # 输出键为 2 的值wys>>> print (d) # 输出完整的字典{'a': 'wys', 0: 'wys'}>>> print (keys()) # 输出所有键dict_keys(['a', 0])>>> print (d.values()) # 输出所有值dict_values(['wys', 'wys'])
复制代码 [h2]二、Python 数据类型转换常见函数[/h2]函数介绍int(x [,base])将x转换为一个整数float(x)将x转换到一个浮点数complex(real [,imag])创建一个复数str(x)将对象 x 转换为字符串repr(x)将对象 x 转换为表达式字符串eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象tuple(s)将序列 s 转换为一个元组list(s)将序列 s 转换为一个列表set(s)转换为可变集合dict(d)创建一个字典。d 必须是一个 (key, value)元组序列。frozenset(s)转换为不可变集合chr(x)将一个整数转换为一个字符ord(x)将一个字符转换为它的整数值hex(x)将一个整数转换为一个十六进制字符串oct(x)将一个整数转换为一个八进制字符串[h2]三、Python控制语句[/h2]Python 的控制语句和大多数的编程语言类似,包括条件控制、循环控制等。
控制语句主要有条件语句与循环语句,条件语句大体有四种格式:
- if 语句
- if-else 语句
- if-elif-else 语句
- nested 语句
举例说明:
a=int(input("请输入你的成绩:"))
if a>90:
print("你的成绩等级为A")
elif a>80:
print("你的成绩等级为B")
elif a>70:
print("你的成绩等级为C")
else:
print("你的成绩等级为D")
print(a)
另外条件语句还可以嵌套。循环语句主要用到 for 和 while,两者区别为:while循环一般用在不知道迭代的次数而for循环是事先知道循环的次数。举例如下:
for x in range(100):
if x%2==0:
print(x,"偶数")
else:
print(x,"奇数")
break 可以跳出循环体,如果从 for 或者 while 循环体中 break,任何对应的循环 else 块将不执行。
continue 语句被用来跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被break终止时不执行。
#输出所有100以内质数
for x in range(2,100):
for y in range(2,x):
if x%y==0:
break
else:
print(x,"是质数")
[h2]四、函数[/h2]函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。除了使用许多内建函数,也可以自己创建函数,这被叫做用户自定义函数。
函数的规则一般如下:- * 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。* 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。* 函数内容以冒号起始,并且缩进。* return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return
复制代码- [/code]定义一个函数就是给出函数一个名称,指定了函数里包含的参数,和代码块结构。一般的格式如下:
- [code]def 函数名(参数列表): 函数体
复制代码 #计算画圆的面积
def round(r):
return 3.14*r*r- [/code]#定义了函数之后,可以通过另一个函数调用执行,也可以直接执行。print("圆的面积为",round(6))
- !!!pass 语句是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。
- def func():
- pass
- python 函数的参数传递:
- 不可变类型:如整数、字符串、元组。如 fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
- def Change(a):
- a+=1
- return a
- b=9
- Change(b)
- print(b)
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-3b1a36dc09eab3be5bd1d6b983fbb4c9[/img]
- 可变类型:如列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响,换句话说可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
- def Change(a):
- a.append([11,22,33,44])
- print("函数内取值:",a)
- return
- b=[1,2,3,4]
- Change(b)
- print("函数内取值:",b)
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-555f1145d7a27d659ade7861db8c1e9e[/img]
- 注意!python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
- 以下是调用函数时可使用的正式参数类型:
- [list][*]必需参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
- [*]关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
- [*]默认参数:调用函数时,如果没有传递参数,则会使用函数定义时的默认参数。
- [*]不定长参数:可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号 ** 的参数会以字典的形式导入。
- [/list]
- def Change(a,*b):
- print(a)
- print(b)
- Change(1,2,3,4)
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-2f9a843316c1cb9b684ea32bd9952833[/img]
- def Change(a,**b):
- print(a)
- print(b)
- Change(1,x=2,y=3)
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-04a4eab00821cda3b5b984f1a299d957[/img]
- 如果单独出现星号 * 后的参数必须用关键字传入。
- def Change(a,*,b):
- print(a)
- print(b)
- Change(1,2,3)
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-4a3275403646110121d423c161e45f78[/img]
- def Change(a,*,b):
- print(a)
- print(b)
- Change(1,b=2)
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-607b30adb7f21445a5eeb5fd7f48e26d[/img]
- python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- [list][*]lambda 只是一个表达式,函数体比 def 简单很多。
- [*]lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
- [*]lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- [*]虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
- [/list]
- a=lambda x,y : x*y
- print(a(9,9))
- [img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-498e2009e7faf2dc6fa87cef7f9e1044[/img]
- [h2][b]五、文件读写[/b][/h2]在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
- 使用如下方法可以读文件的模式打开一个文件对象,如果文件不存在会报错,此种情况需要使用 try... finally 来解决。如果打开成功,可以用相关的方法进行读取内容到内存。
- a=open('F:\\aaa.txt')
- for x in a:
- print(x)
- 最后一步是调用 close() 方法关闭文件。
- a=open('F:\\aaa.txt')
- for x in a:
- print(x)
- a.close()
- 使用以下方式进行写文件,和读文件类似,但是参数要变成 'w' 或者 'wb' 表示写文本文件或者写二进制文件。
- a=open('F:\\aaa.txt','w')
- a.write('i miss you')
- a.close()
- 可以反复调用 write() 来写入文件,但是务必要调用 f.close() 来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用 close() 方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用 close() 的后果是数据可能只写了一部分到磁盘,剩下的丢失了。用with语句来得保险,因为 Python 引入了 with 语句来自动帮我们调用 close() 方法。
- with open('F:\\aaa.txt','w') as a:
- a.write('i miss you')
- 要写入特定编码的文本文件,要给 open() 函数传入 encoding 参数,将字符串自动转换成指定编码。
- Pandas、Numpy安装与使用numpy主要用于常规的数据运算,比如矩阵运算。
- pandas则主要用于数据分析,包括数据的引入,特征的提取以及数据的清洗转移等等,Pandas是python的一个数据分析包,最初由AQR CapitalManagement于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
- [list][*]开发pandas时提出的需求。
- [*]具备按轴自动或显式数据对齐功能的数据结构。
- [*]集成时间序列功能。
- [*]既能处理时间序列数据也能处理非时间序列数据的数据结构。
- [*]数学运算和约简(比如对某个轴求和)可以根据不同的元数据(轴编号)执行。
- [*]灵活处理缺失数据。
- [*]合并及其他出现在常见数据库(例如基于SQL的)中的关系型运算。
- [/list][h2]在Vs Code安装Python库[/h2][h3]pip[/h3]如果使用pip,可以按照如下方式进行安装:
- [code]pip install pandas
复制代码 但这个在Windows环境下不一定好使,因为库可能需要编译。这个时候,就需要到我刚才说的那个网站下载别人编译好的库。
[h3]conda[/h3]使用conda的话,如果网速允许,一切都会很顺畅。不论是conda还是pip,都会自动解决包依赖,像yum/apt-get一样省心。比如pandas依赖numpy,你只需要在命令行中输入上面的命令。
import numpy as np
import pandas as pd
from scipy import stats
#创建随机Series
s = pd.Series(np.random.randint(10,20,100))
#求众数
print('众数:',s.mode()[0])
#求中位数
print('中位数:',s.median())
#分位数,以四分位为例
print(f'四分位:\n第一分位:{s.quantile(0.25)}\n第二分位:{s.quantile(0.5)}\n第三分位:{s.quantile(0.75)}')
#算术平均
print('算术平均:',s.mean())
#加权平均
#创建一个随机权重数组
test = pd.DataFrame({'data':np.random.rand(10),'weights':np.random.rand(10)})
wm=np.average(test['data'],weights=test['weights'])
print('加权平均数:',wm)
#几何平均
print('几何平均数:',stats.gmean(s))
#方差
print('方差:',s.var())
#标准差
print('标准差:',s.std())
#极差
print('极差:',s.max()-s.min())
#平均差
print('平均差:',np.abs(s-s.mean()).mean())
#四分位极差
print('四分位极差:',s.quantile(0.75)-s.quantile(0.25))
#异众比率
print('异众比率:',1-s.value_counts()[s.mode()].sum()/s.count())
#离散系数
print('离散系数:',s.std()/s.mean())
#偏态系数
print('偏态系数:',stats.skew(s))
#峰态系数
print('峰态系数:',stats.kurtosis(s))
|
|