点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

博学而约取,厚积而薄发。

开场段子

【野人献曝】战国时期,宋国有一个没有见过世面的农夫,由于家贫,终日穿一件粗麻衣,勉强过冬。第二年春天,天气晴朗,他就脱光衣服在太阳下曝晒,觉得十分舒服。由于没有见过漂亮的皮衣和高大的房子,就对妻子说将把这取暖的办法进献给国王。

【成语释义】比喻贡献的不是什么珍贵的东西,常用于向人建议时候的客套话。

魔都魔在哪里

人们通常戏称上海为魔都。那么上海魔在哪里呢?这里的魔主要有两层含义。第一是魔力,第二是魔幻。

先说魔力。上海是我国的金融中心,是我国经济总量第一的城市,是我国人均收入最高的城市,是我国进出口贸易第一的城市,也是我国最开放的城市之一。拼多多、B站、携程、饿了么等知名互联网公司的总部都在上海,腾讯、阿里、美团、头条等在上海都有办公部门。加之上海相比北京宽松的户籍政策,每年吸引着无数打工人来上海追寻梦想。浪奔,浪流,万里滔滔江水永不休。

再说魔幻。上海是一座奇迹之城,从1843年作为通商口岸开放到如今不过170余年,上海从一个名不见经传的小村落一跃成为中国第一亚洲第二大城市,发展速度可谓奇迹。上海也是一座混沌之城,这里有见证800年暮鼓晨钟的静安寺,近600年历史的城隍庙,历经450余年风雨的豫园,也有外滩的“万国建筑群”,“十里洋场”盛况空前,东方明珠夺目璀璨,亚洲第一高楼高达632米的上海中心大厦。可谓亦中亦西,亦今亦古。

上海旅游攻略

上海知名度最高的旅游景点,应该是上海外滩,东方明珠电视塔,以及迪士尼乐园。

此外,豫园、南京路、人民广场、静安寺、新天地、陆家嘴、崇明岛、朱家角、滴水湖、淀山湖、枫泾古镇 等景点也是值得一去的好地方。

这么多的景点?该如何规划呢?下面这份上海4日旅游攻略,或许可以帮助到你。

先上数据

Day1 上海城隍庙旅游区(2小时) → 豫园(1小时) → 南京路步行街(3小时) → 外滩(1小时)

Day2 中华艺术宫(4小时) → 田子坊(2小时) → 上海新天地(2小时)

Day3 上海迪士尼度假区(1天)

Day4 上海杜莎夫人蜡像馆(3小时) → 陆家嘴(2小时) → 东方明珠广播电视塔(2小时)

再上视频

最后上代码

import numpy as np
import pandas as pd
import geopandas as gpd
import shapely
from shapely import geometry as geo
from shapely import wkt
import geopandas as gpd
import matplotlib.pyplot as plt
import matplotlib.animation as  animation
import contextily as ctximport imageio
import os
from PIL import Imageplt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['animation.writer'] = 'html'
plt.rcParams['animation.embed_limit'] = 100def rgba_to_rgb(img_rgba):img_rgb = Image.new("RGB", img_rgba.size, (255, 255, 255))img_rgb.paste(img_rgba, mask=img_rgba.split()[3]) return img_rgb def html_to_gif(html_file, gif_file, duration=0.5):path = html_file.replace(".html","_frames")images = [os.path.join(path,x) for x in sorted(os.listdir(path))]frames = [imageio.imread(x) for x in images]if frames[0].shape[-1]==4:frames = [np.array(rgba_to_rgb(Image.fromarray(x))) for x in frames]imageio.mimsave(gif_file, frames, 'gif', duration=duration)return gif_filecmap = [
'#2E91E5',
'#1CA71C',
'#DA16FF',
'#B68100',
'#EB663B',
'#00A08B',
'#FC0080',
'#6C7C32',
'#862A16',
'#620042',
'#DA60CA',
'#0D2A63']*100def trace_map_dance(df,title = "上海经典4日旅行路线",filename = None,figsize = (8,6),dpi = 144,duration = 0.5,anotate_points = ["外滩","上海迪士尼度假区","陆家嘴"]):fig, ax =plt.subplots(figsize=figsize,dpi=dpi)def plot_frame(i):ax.clear()ax.axis("off")k = i//3+1m = i%3dfdata = df.iloc[:k,:].copy()dftmp = df.iloc[:k-1,:].copy()text = dfdata["day"].tolist()[-1]#============================================================#绘制背景#============================================================#设置绘图范围bounds = dfcity.total_bounds # k==1   if 1<k<len(df)+1:bounds = dfplace.query("day=='{}'".format(text)).total_boundsif k>=len(df)+1:bounds = dfplace.total_bounds(xmin,ymin,xmax,ymax) = boundscx = (xmin+xmax)/2.0cy = (ymin+ymax)/2.0dx = max(xmax-xmin,100)dy = max(ymax-ymin,100)if dx/dy<8/6.0:dx = dy*8/6.0else:dy = dx*6.0/8bounds = np.array([min(cx-8000,cx-dx/2.0),min(cy-6000,cy-dy/2.0),max(cx+8000,cx+dx/2.0),max(cy+6000,cy+dy/2.0)])ax.set_xlim(bounds[0]-(bounds[2]-bounds[0])/3, bounds[2]+(bounds[2]-bounds[0])/3)    ax.set_ylim(bounds[1]-(bounds[3]-bounds[1])/3, bounds[3]+(bounds[3]-bounds[1])/3)gaode = 'http://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7'openstreet = "https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png"ctx.add_basemap(ax,source=gaode,alpha=0.5)#============================================================#绘制散点#============================================================# 绘制散点图像if len(dftmp)>0:ax.scatter(dftmp["x"],dftmp["y"],s = 100*dftmp["z"]/df["z"].mean(),c = (cmap*100)[0:len(dftmp)],alpha = 0.5,zorder = 3)# 添加注释文字for j,p in enumerate(dftmp.index):px,py,pz = dftmp.loc[p,["x","y","z"]].tolist() if p in anotate_points:ax.annotate(p,xy = (px,py),  xycoords = "data",xytext = (-20,15),fontsize = 10,fontweight = "bold",color = cmap[j], textcoords = "offset points")#绘制轨迹线lines = [dfdata[["x","y"]].values[i:i+2] for i in range(len(dfdata)-1)] for ln in lines[:-1]:x, y = np.transpose(ln)line = plt.Line2D(x,y,color="gray",linestyle="-",linewidth= 2.5)ax.add_artist(line)# 添加标题和排名序号ax.set_title(title,color = "black",fontsize = 12)ax.text(0.13, 0.9, text, va="center", ha="center", alpha=0.5, size = 50,transform = ax.transAxes)# 结尾呈现全局轨迹无动画if i>=3*len(df):for ln in lines[-1:]:x, y = np.transpose(ln)line = plt.Line2D(x,y,color="gray",linestyle="-",linewidth= 2.5)ax.add_artist(line)return 0# 添加注意力动画if m==0:px,py,pz = dfdata["x"][[-1]],dfdata["y"][[-1]],dfdata["z"][-1]p = dfdata.index[-1]+":"+str(pz)+"Hours"ax.scatter(px,py,s = 800*pz/df["z"].mean(),c = cmap[len(dfdata)-1:len(dfdata)],alpha = 0.5,zorder = 4)ax.annotate(p,xy = (px,py),  xycoords = "data",xytext = (-20,15),fontsize = 20,fontweight = "bold",color = cmap[k-1], textcoords = "offset points",zorder = 5)for ln in lines[-1:]:x, y = np.transpose(ln)line = plt.Line2D(x,y,color="gray",linestyle=":",linewidth= 4.5)ax.add_artist(line)if m==1:px,py,pz = dfdata["x"][[-1]],dfdata["y"][[-1]],dfdata["z"][-1]p = dfdata.index[-1]+":"+str(pz)+"Hours"ax.scatter(px,py,s = 400*pz/df["z"].mean(),c = cmap[len(dfdata)-1:len(dfdata)],alpha = 0.5,zorder = 4)ax.annotate(p,xy = (px,py),  xycoords = "data",xytext = (-20,15),fontsize = 15,fontweight = "bold",color = cmap[k-1], textcoords = "offset points",zorder = 5)for ln in lines[-1:]:x, y = np.transpose(ln)line = plt.Line2D(x,y,color="gray",linestyle="--",linewidth= 3.5)ax.add_artist(line)if m==2:px,py,pz = dfdata["x"][[-1]],dfdata["y"][[-1]],dfdata["z"][-1]p = dfdata.index[-1]+":"+str(pz)+"Hours"ax.scatter(px,py,s = 100*pz/df["z"].mean(),c = cmap[len(dfdata)-1:len(dfdata)],alpha = 0.5,zorder = 4)ax.annotate(p,xy = (px,py),  xycoords = "data",xytext = (-20,15),fontsize = 10,fontweight = "bold",color = cmap[k-1], textcoords = "offset points",zorder = 5)for ln in lines[-1:]:x, y = np.transpose(ln)line = plt.Line2D(x,y,color="gray",linestyle="-",linewidth= 2.5)ax.add_artist(line)return 0my_animation = animation.FuncAnimation(fig,plot_frame,frames = range(0,3*len(df)+5),interval = int(duration*1000))if filename is None:try:from IPython.display import HTMLHTML(my_animation.to_jshtml())return HTML(my_animation.to_jshtml())except ImportError:passelse:my_animation.save(filename)return filenamehtml_file = "上海经典4日旅行路线.html"
trace_map_dance(df,filename=html_file)

收工 。

Python进阶者最近搞了一个Python交流群,这个Python交流群已经300多人了,有需要加入该群的小伙伴可以加我好友,一起学习,共同进步。

------------------- End -------------------

往期精彩文章推荐:

  • 手把手教你用Python改造一款外星人入侵小游戏

  • 手把手教你用Python网络爬虫+自动化来创建一位属于你自己的虚拟女票(附源码)

  • Python也能操作Mysql数据库

  • 盘点那些年我们一起玩过的网络安全工具

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

魔都上海4日旅游攻略?Python动态图告诉你!相关推荐

  1. 地平线4卡在转圈界面_上海4日旅行攻略|吃住行玩 都是干货建议收藏

    毕业以后和朋友们聚在一起的时间越来越少,小长假只希望能回家陪父母.上两周闺蜜突然说要来上海找我玩了几天,幸福的不得了,马上和领导请了2天年假,凑上周六日,正好四天.我在上海已经漂了三年,基本上经典的景 ...

  2. (附源码)计算机毕业设计SSM旅游攻略网站系统

    (附源码)计算机毕业设计SSM旅游攻略网站系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intel ...

  3. 贵州黔东南大环线七日自由行旅游攻略

    在我的旅行经历中,如果要说哪里能看到多民族的文化,贵州是必须提及的地方.而在贵州,少数民族聚居最多的还得数黔东南.黔,即贵州的简称.黔东南苗族侗族自治州,位于贵州省东南部.下辖16个县市,首府凯里市. ...

  4. 越南旅游攻略??转载

    越南旅游攻略??转载 2010年03月18日 open bus在越南是经济游的首选交通方式.越南是从北到南狭长的形状,各个景点差不多平均地分布在南北的线上.open bus 是旅游公司的,提供穿梭于各 ...

  5. Python 爬取蚂蜂窝旅游攻略 (+Scrapy框架+MySQL)

    前言:使用python+scrapy框架爬取蚂蜂窝旅游攻略 Git代码地址:https://github.com/qijingpei/mafengwo 获取代理IP地址的开源项目ProxyPool-m ...

  6. 旅游攻略app开发定制

    在春暖花开的季节,你需要这样一个旅游规划 春有百花秋有月,夏有凉风冬有雪. 每个季节都有其独特的美,观赏不同的风景体味不同的人生. 在春季这个万物复苏,春暖花开,到处都是生机勃勃景象的季节,在周末这样 ...

  7. 程序猿眼中的东极岛旅游攻略

    东极镇地处舟山群岛最东端,距沈家门渔港约45.5公里.东极镇有庙子湖.青浜.黄兴.东福山等大小28个岛屿,其中住人岛8个,常住人岛4个,108个礁,陆域总面积11.7平方公里.全镇2000人(2017 ...

  8. Python 网络爬虫实战:爬取《去哪儿》网数千篇旅游攻略数据,再也不愁旅游去哪儿玩了

    好久不见! 今天我们来爬取 去哪儿网站 的 旅游攻略 数据. 0x00  找一个合理的作案动机 作为一名立志成为技术宅的普通肥宅,每次一到周末就会面临一个人生难题:这周末怎么过? 本来是没有这些问题的 ...

  9. 伦敦旅游攻略及注意事项(201909)

    伦敦旅游攻略及注意事项(201909) 讲在最先前面,首先到那边用的信用卡要带有芯片,要不然有些东西(如牡蛎卡购卡充钱,自动售货机)会很麻烦.下面是我本次去伦敦旅游的回忆攻略.我之所以制作这个攻略,是 ...

最新文章

  1. 内存分配成功,但并未初始化
  2. 第三讲、Linux常用命令
  3. 简短介绍_中秋节的来历由来简短20字30字 中秋节的起源50字100字简介
  4. 应用开发框架之——业务规则脚本化
  5. TestNG配合ant脚本进行单元测试
  6. Atlas 配置高可用
  7. 洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver
  8. 《编译原理》一道关于逆波兰式的作业题(学委推导出了逆波兰式的数学公式表示)
  9. 鸿蒙来了!能否与安卓、iOS三足鼎立?
  10. Android eclipse加载项目出现红色感叹号
  11. MUI框架开发app中出现的问题(持续更新中...)
  12. matlab for 数组,Matlab数组
  13. Windows下动过批处理指令在浏览器中打开指定文件中的URL地址
  14. Flash和XML实现电子地图查询及定位功能
  15. PhotoShop 快速选择工具及选择并遮住使用
  16. 人体红外模块对比评测,是你的话怎么选
  17. echart 广州3d_vue echarts 3D地图+省+弹窗
  18. 训练集(离线)与测试集(上线)效果差距很大怎么办?
  19. android后台获取view,如何获取AdapterView中当前显示的项目?
  20. VIC-4.2.d.

热门文章

  1. 第九课 Shell基础
  2. word 2010+ 从指定页开始设置页码
  3. Oracle 19c OCP认证考试软件清单
  4. ​为何欧拉的质数公式会扰乱世界?
  5. PHP单页面加密视频教程附源码,thinkphp3.2最新版本项目实战视频教程(含源码)
  6. Python 读取文件时报‘utf-8‘ codec can‘t decode byte 0xfc in position xxxx 的解决方法
  7. 户外体能训练/运动健身小程序源码
  8. Android BLE中传输数据的最大长度怎么破
  9. 自用PTA题目记录0001
  10. 网络工程毕设新颖课题