collections
1. collections.defaultdict
这是一个比普通 dict()
更好的数据结构 使用如下代码声明变量
from collections import defaultdict
D = defaultdict(p1)
其中参数 p1
有比较多的选项,常见的有
int, dict, set, str, list
使用这些参数时, 将规定 defaultdict 中 value 的默认数值类型, 也就是说, 当 ‘key1’ 不存在时, D[‘key1’]
将会返回对应的空值 (int: 0, dict: {}, list: ()). 例如
Dd = defaultdict(dict)
# Dd['key1'] = {'key1.1': 'value1.1'} 用这个也可以
Dd['key1']['key1.1'] = 'value1.1'
defaultdict(dict, {‘key1’: {‘key1.1’: ‘value1.1’}})
Dl = defaultdict(list)
Dl['l1'] = [1, 2, 3]
defaultdict(list, {‘l1’: [1, 2, 3]})
Dd['key2'] >>> {}
Dl['l2'] >>> ()
需要注意的是, 虽然这些参数不是强制的规定, 譬如完全可以在 defaultdic(str)
中储存 int
, 但是不推荐这样做
lambda: None
该参数表示当 ‘key1’ 不存在时, 使用 D[‘key1’]
什么都不会返回 (可以把 None 更换为任意参数, 例如 lambda: 0
表示返回数值 0)
D = defaultdict(lambda: None)
D['key1']
啥都不返回, 此时 D = defaultdict(<function __main__.<lambda>>, {'key1': None})
D = defaultdict(lambda: 0)
D['key1']
0 (参数 lambda: 0
的效果近似于 int
)
2. collections.Counter
统计
from collections import Counter
a = [1,2,3,1,2,3,2,2,4,5,1]
cnt = Counter(a)
>>>
Counter({2: 4, 1: 3, 3: 2, 4: 1, 5: 1})
folium
Reference 1.知乎: Python绘制地图神器folium入门
这是一个能够生成交互地图的包
1.folium.Map 创建地图
folium.Map(location=None,
tiles='OpenStreetMap',
zoom_start=10,
crs='EPSG3857'
)
参数:
location=[LAT, LON]
经纬度坐标位置tiles
显示样式,默认为’OpenStreetMap’,也就是开启街道显示 (上、左下、右下分别对应 OpenStreetMap, Stamen Toner, and Stamen Terrain)zoom_start
缩放值,默认为 10crs
地理坐标参考系统,默认为 ‘EPSG3857’
2. Note the map 在地图上做标记
2.1 folium.CircleMaker 画圆
以下代码可能存在一些问题: 本人在使用过程中发现在 for 循环中使用以下添加代码可能导致只能画出一个标记点, 尚未查明错误原因, 但将 `popup=, fill=, fill_color` 这三行删去之后可以正常运行folium.CircleMaker(
location=None,
radius=5, # 标记圆圈的半径
# 标记圆圈的名字,在点击后出现
# 其中 re.sub() 利用正则表达式避免乱码
popup=re.sub(r'[a^-zA-Z]+', '', 'name'),
color='#1787FE',
fill=True,
fill_color='#1787FE'
).add_to(m)
效果如下 (注意! 不要忘了在函数结尾括号外添加 .add_to(m)
, 否则将无法显示标记)
tqdm
这是常用于显示程序运行进度的包, 用在 for 循环语句非常好用, 例如
from tqdm import tqdm
best_score, best_k = -1, 0
for k in tqdm(range(2, 100)):
m = KMeans(n_clusters=k, random_state=1).fit(X)
predictions = model.predict(X)
curr_score = silhouette_score(X, predictions)
if curr_score > best_score:
best_k = k
best_score = curr_score
print('K={}'.format(best_k))
print('Silhouette Score: {}'.format(best_score))
这段代码用于在 [2, 99] 区间内寻找使得 KMeans 拟合效果最好的 k 值. 运行效果如下
Document Information
- Author: Zeka Lee
- Link: https://zhekaili.github.io/wiki/python-libs/python-lib-%E5%85%B6%E4%BB%96/
- Copyright: 自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)