Python

Python

一.基础语法

注意:python使用时需要严格缩进,否则在执行是会出现报错

1.注释

1
# 这里是一个注释嗷!

2.打印

1
print ('hello word!')

3. if & else

1
2
3
4
5
6
7
8
if 判断条件:
print ('true')
else 判断条件:
.......
else 判断条件:
.......
else:
.......

4.循环

1
2
3
4
5
6
7
8
9
10
11
while 判断条件 :
...........
# while 循环

for num in range(a,b):# 循环a -- b 之间的数字
............
# for 循环

pass
# pass 一般不做任何事情 做站位语句
# 其他循环中还会使用continue,break,常见的语法不加以解释

5.类型

python中的数据类型不允许改变,可以删除对象,重新分配空间。

1
2
num = 1
del num # 删除变量num

字符串

创建

1
s = 'a string'

python 的索引可以为负数,反向索引,从右边开始计算

1
2
s[-1] # 'g'
s[-2] # 'n'

一些常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
len(s) # 字符串长度
upper() # 全部大写
lower() # 全部小写
swapcase() # 大小写互换
capitalize() # 首字母大写,其余小写
title() # 首字母大写
ljust(width) # 获取固定长度,左对齐,右边不够用空格补齐
rjust(width) # 获取固定长度,右对齐,左边不够用空格补齐
center(width) # 获取固定长度,中间对齐,两边不够用空格补齐
zfill(width) # 获取固定长度,右对齐,左边不足用0补齐
find() # 搜索指定字符串,没有返回-1
index() # 同上,但是找不到会报错
rfind() # 从右边开始查找
count() # 统计指定的字符串出现的次数

不可变性

无法在特定位置修改值,修改会清理旧的对象。

python中的核心类型,数字、字符串以及元祖是不可变的,而字典与列表可完全自由改变。

1
2
s = 'w' + s[1:] # 'w string'
s[0] = 'a' #报错代码

列表

列表没有固定类型的约束,用中括号表示,组成对象是有序的,组成的各个对象允许不同。

创建

1
2
list1 = []
list2 = ['QWQ', 'QAQ', 'QVQ', 'QUQ']

访问

1
2
list2[0] # 'QWQ'
list2[1:4] # 'QAQ QVQ'

一些常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
append() # 添加函数
cmp(list1, list2) # 比较两个列表的元素
len(list) # 列表元素个数
max(list) # 返回列表元素最大值
min(list) # 返回列表元素最小值
list(seq) # 将元组转换为列表
count(obj) # 统计某个元素在列表中出现的次数
extend(seq) # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
index(obj) # 从列表中找出某个值第一个匹配项的索引位置
insert(index, obj) # 将对象插入列表
pop([index=-1]) # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
remove(obj) # 移除列表中某个值的第一个匹配项
reverse() # 反向列表中元素
sort(cmp=None, key=None, reverse=False) # 对原列表进行排序

元祖

元祖是序列,但是它具有不可变性,与字符串类似,它提供了一种完整性的约束,编写大型程序更为方便。元祖角色类似于其他语言中的“常数”声明,这种常数概念在Python中是与对象相结合,而不是变量。

创建

1
2
3
t1 = ()
t2 = (1,) # 元祖只包含一个元素需要在后面加上逗号
t3 = ('QWQ', 'QAQ', 'QVQ', 'QUQ')

访问

1
# 与字符串类似

修改

1
# 修改元祖的值是非法的,因为不可变性。

一些常用函数

1
2
3
4
5
6
cmp(tuple1, tuple2) # 比较两个元组元素。
append(value) # 添加元素
len(tuple) # 元素个数
max(tuple) # 返回元祖最大元素
min(tuple) # 返回元祖最小元素
tuple(seq) # 将列表转换为元祖

字典

字典是另一种可变容器模型,且可存储任意类型对象,用大括号表示,组成对象是无序的,搜索方式是哈希搜索,速度很快。

创建

1
2
3
d = {key1 : value1, key2 : value2 }
d1 = {'QWQ': '123', 'QAQ': '456', 'QVQ': '321', 'QUQ': '654'}
d2 = {'QWQ': 123, 321: 456}

访问

1
print d1['QWQ'] # 123

添加

1
d1['OVO'] = '555'

修改

1
d1['QWQ'] = '333'

删除

1
2
3
del d1['QWQ']  # 删除键是'QWQ'的条目
d1.clear() # 清空字典所有条目
del d1 # 删除字典

一些常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cmp(dict1, dict2) # 比较两个字典元素
len(dict) # 计算字典元素个数,即键的总数
str(dict) # 输出字典可打印的字符串表示
type(variable) # 返回输入的变量类型,如果变量是字典就返回字典类型
clear() # 删除字典内所有元素
copy() # 返回一个字典的浅复制
fromkeys(seq[, val]) # 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
get(key, default=None) # 返回指定键的值,如果值不在字典中返回default值
has_key(key) # 如果键在字典dict里返回true,否则返回false
items() # 以列表返回可遍历的(键, 值) 元组数组
keys() # 以列表返回一个字典所有的键
setdefault(key, default=None) # 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
update(dict2) # 把字典dict2的键/值对更新到dict里
values() # 以列表返回字典中的所有值
pop(key[,default])
# 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem() # 返回并删除字典中的最后一对键和值。

6.函数定义

规则

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

定义

1
2
3
4
def functionname( parameters ):
"""comments""" # 对函数进行一些说明
function_suite
return [expression]

7.模块

每一个以扩展名py结尾的Python源代码文件都是一个模块,其他文件可以通过导入这个模块来读取这个模块的内容。Python中本来就有很多模块,这里理解为包,需要使用则安装包。

定义模块

首先我们先建立一个新的py文件取名mode

1
2
3
4
5
print("QWQ")
x = 'QUQ'
def QAQ():
print(x)
# 取名为mode.py

加载模块

python在第一次导入后就将模块名加载到内存,后续的import语句会判断模块是否已被导入,若已导入将仅对加载在内存中的模块对象增加了一次引用,不会重新执行模块语句。

1
2
import mode # mode 为模块名
# 导入mode模块后运行后在输出处可以看到“QWQ”

使用模块

1
2
mode.QAQ() # 调用模块中的函数
# 运行后结果 “QUQ”

8.文件

读文件

1
2
3
4
5
file = open('text.txt', 'r') # r表示文本文件格式,二进制。 此处为文件打开格式。
# 注意,若text.txt文件不存在,则会报错
# 我们提前在文件写好内容“读文件成功!”
file.read()
file.close() # 最后一定要记得关闭文件!

写文件

1
2
3
# 发现‘r’模式下不能写文件,只能读文件,尴尬,记得改成'w'
file.write('hello word!')
file.close() # 最后一定要记得关闭文件!

二.大数据常用包

(只用过部分函数,以后使用了更详细的会更新吧…)

1.pandas

pandas使数据预处理、清洗、分析工作变得更快更简单。核心数据结构:Series、DataFrame。

1
import pandas as pd

Series

类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。

创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
a1 = np.arange(5)
s1 = pd.Series(a1)
print(s1) # 通过标量创建,创建从0--4的长度索引
# 输出结果
#0 0
#1 1
#2 2
#3 3
#4 4
a2 = {'1':1,'2':2,'3':3,'a':'hello','b':'python','c':[1,2]}
s2 = pd.Series(a2)
print(s,type(s2)) # 自定义通过字典创建
# 输出结果
#1 1
#2 2
#3 3
#a hello
#b python
#c [1, 2]
a3 =

修改

1
2
3
4
5
6
7
8
9
s2['1'] = 'QWQ'
print(s2)
# 输出结果
#1 QWQ
#2 2
#3 3
#a hello
#b python
#c [1, 2]

删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
del s2['2']
print(s2)
# 输出结果
# 1 QWQ
# 3 3
# a hello
# b python
# c [1, 2]
s2 = s2.drop(['b','c'])
print(s2)
# 输出结果
# 1 QWQ
# 3 3
# a hello

数据查看

.head()方法是查看前几行的数据,默认是5行

.tail()方法是查看后几行的数据,默认也是5行

1
2
3
4
5
6
7
8
9
print(s2.head(2),'\n')
print(s2.tail())
# 输出结果
# 1 QWQ
# 3 3

# 1 QWQ
# 3 3
# a hello

DataFrame

DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。

创建

1
2
3
4
5
6
7
data = {"A":['QWQ','QAQ','QVQ'],"B":[100,200,300],"C":[1,2,3]}
f1 = DataFrame(data)
# 输出结果
# A B C
# 0 QWQ 100 1
# 1 QAQ 200 2
# 2 QVQ 300 3

常用函数

排序

1
2
sort_index # 根据索引来排序
sort_values # 根据指定列值排序

统计

1
2
3
4
sum # 值的总和
mean # 值的平均数
median # 值的算数中位数
mad # 根据平均值计算平均绝对离差

去重

1
2
3
4
newdata.drop_duplicates(subset=['A','B','C','D'],keep=False)
# 当keep=False时,就是去掉所有的重复行
# 当keep=‘first’时,就是保留第一次出现的重复行
# 当keep=’last’时就是保留最后一次出现的重复行。

读写文件

1
2
3
data = pd.read_csv("data.txt")

pd.to_csv("d:/snp/test.csv")

2.matplotlib

可用于可视化。

1
import matplotlib.pyplot as plt

散点图

1
2
3
4
5
plt.scatter(x, y, marker=None) 
# x,y为坐标
# marker为标记符号
#例如
plt.scatter(1, 1, marker=None) # 结果如下图

折线图

1
2
3
x = ['11','12','13','14','15','16','17']
y = [58,60,63,71,84,90,10]
plt.plot(x,y) # 结果如下图

直方图

1
2
3
4
5
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(10000)
plt.hist(data, bins=4, normed=0, facecolor="blue", edgecolor="black", alpha=0.7)
# 结果如下图

条形图

1
2
3
4
5
6
7
from matplotlib import pyplot as plt
from matplotlib import font_manager
b = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,
6.86, 6.58, 6.23]
plt.figure(figsize=(15,7))
plt.bar(range(len(b)),b,width=0.3)
# 结果如下图

箱线图

1
2
3
4
from matplotlib import pyplot as plt
dataArray=[1,6,2,11,8,8,10,5,4,5,3,7,15]
plt.boxplot(dataArray,labels=["A"])
# 结果如下图

饼图

1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt
labels = 'A', 'B'
sizes = [15, 30]
colors = ['blue', 'gold']
explode = (0, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=False, startangle=90)
# 结果如下图

热力图

1
2
3
4
5
from matplotlib import pyplot as plt  
X = [[1,2],[3,4]]
plt.imshow(X)
plt.colorbar()
# 结果如下图

雷达图

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np
# 构建角度与值
theta = np.array([2.55,4.75,3,1.25,1.65])
r = [20,60,40,80,20]
plt.style.use('ggplot') # 使用ggplot的绘图风格
plt.polar(theta*np.pi,r,"r-",lw=1)
# 设置填充颜色,并且透明度为0.75
plt.fill(theta*np.pi,r,'r',alpha=0.75)
plt.ylim(0,100)
plt.grid(True)#显示网格线
# 结果如下图

华为云比赛画的航海图部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import pandas as pd  
import folium
world_map = folium.Map()
world_map
list = []
lat = 0
lng = 0
incidents = folium.map.FeatureGroup()
df = pd.read_csv("get_test_port.csv",usecols = [0,1,2,3,4,5], encoding = 'gbk')
af = pd.read_csv("loadingOrder.csv",usecols = [0], encoding = 'gbk')
for i in range(len(af)):
s = af.iat[i,0] # 订单号名称
incidents = folium.map.FeatureGroup()
world_map = folium.Map() #初始化地图
for j in range(len(df)):
if af.iat[i,0] == df.iat[j,0]:
lat = df.iat[j,2]
lng = df.iat[j,1]
nlat = df.iat[j,4]
nlng = df.iat[j,3]
# 增加红点lat与lng
incidents.add_child(
folium.CircleMarker(
[lat, lng],
radius=20,
color='yellow',
fill=True,
fill_color='red',
fill_opacity=0.4
)
)

# 增加蓝点nlat与nlng
incidents.add_child(
folium.CircleMarker(
[nlat, nlng],
radius=5,
color='yellow',
fill=True,
fill_color='blue',
fill_opacity=0.4
)
)

#world_map = folium.Map(location=[lat, lng], zoom_start=20) # 选择一个点为比例尺
world_map.add_child(incidents) #将点放入地图
folium.Marker([nlat, nlng], popup=df.iat[j,5]).add_to(world_map)#对点做标记
s = af.iat[i,0] + ".html"
#m = folium.Map(location=[nlat, nlng])
world_map.save(s.format(af.iat[i,0]))
print(af.iat[i,0] + "已生成")

列举其中一张图

# python
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×