image frame

To the MOUNTAIN

Learn & Life

hexo嵌入jupyter的ipynb文件

我使用的方法

  1. ipynb文件上传至github的仓库

  2. 导入nbviewer,生成在线链接

  3. 再使用iframe嵌入

    效果见plotly基础画图使用尝试

缺点

  1. 页面高度设定了一个固定值,不能自适应,会出现嵌套的滑轮。
  2. 头尾会有nbviewer的水印,比较丑。

另外的方法

使用 hexo-jupyter-notebook包,但是我一直似乎路径设置的不对,一直有报错,就暂时放弃。

网上也有很多参考,可以去查询尝试。

无需插件ArcGIS自定义加载连接超全WMTS底图服务

有的时候ArcGIS使用自带的添加底图功能失灵,或者想自己额外添加在线底图,可以使用ArcGIS其自带的WMTS服务功能!

1. 打开【catalog-GIS Servers-Add WMTS Server】

2. 输入http://xdc.at/map/wmts/

这里集成了天地图、高德地图、openstreetmap、谷歌地图等等

3. 点【Get Layers

arcgis_wmts1

4. 双击想要的底图连接wmts服务

arcgis_wmts3

5. 把想要的底图拖到【Table Of Contents】

arcgis_wmts2

额外附一个ArcGIS Server服务地址

https://map.geoq.cn/arcgis/services/

arcgis_server1

使用方式同上

打开【catalog-GIS Servers-Add ArcGIS Server】

如何修改python第三方库源码

如何修改python第三方库源码

有的时候下载的第三方python库中有些参数没有开放让我们自定义调整,比如你要用那个库自带的出图,它可能又是基于matplotlib的一个函数,然后设为了默认。

其实非常简单!由于Python是解释型编程语言,不需要编译,直接就能运行。

以我要修改的PyALE库中的rug plot的颜色和透明度为例。

  1. 找到源码位置,即/python3.7\Lib\site-packages\PyALE_src\ALE_1D.py

  2. 找到rug plot内置的位置,修改保存

    code_position.png

  3. 修改的代码就能够在下次运行时立即生效

    before.JPG

    after.PNG

如何将【geojson文件】转成【shp文件】在arcgis中使用

如何将【geojson文件】转成【shp文件】在arcgis中使用

当缺少中国省市对应的地图shp文件时,可以去阿里云的网站下载最新的geojson文件,再使用geopandas库转换为shp文件使用。

1. 在阿里云geojson地图下载网站下载相应geojson文件

http://datav.aliyun.com/portal/school/atlas/area_selector

2. 使用python的【geopandas】库

import geopandas as gdp

data = gdp.read_file('\地图.json')
data.to_file('\地图shp', driver='ESRI Shapefile', encoding='gbk')#地图shp是存储的文件夹名称

3. 导入arcgis即可

【jupyterlab+pyecharts】自定义底图的地理信息可视化

pyecharts包官方指南:https://pyecharts.org/#/zh-cn/intro

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

pyecharts原本自带的Geo()模块中中国地图的底图是全国范围的geojson文件,如果想要使用自定义区域底图,比如长三角范围内各个城市的该怎么办呢?

这篇就来讲讲我怎么搞的。

1. 下载自己所需的geojson文件

这里推荐阿里云提供的基于高德地图的geojson文件下载地址:https://datav.aliyun.com/tools/atlas/index.html

阿里云geojson下载

自己可以根据需要处理数据,拼接多个geojson文件,获得自定义范围的地图底图。

比如我这里合并了长三角范围内的26个城市的geojson。

合并后的长三角geojson

2. pyecharts替换Geo()地图底图

from pyecharts.charts import Map,Geo
import pyecharts.commons.utils
from pyecharts.globals import CurrentConfig, NotebookType,ChartType, SymbolType
from pyecharts import options as opts
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB #jupyterlab这里需要额外配置

with open(path+"geojson\长三角合并geojson.json", "r", encoding="utf-8") as f: #加载我们的geojson文件
    j = json.load(f)
c = (
    Geo()
    .add_js_funcs("echarts.registerMap('上海', {})".format(j))#使用js function,将原来Geo()自带的上海地图换成我们自己的geojson文件
    .add_schema(maptype="上海",label_opts=opts.LabelOpts(is_show=True))#使用底图
)
c.load_javascript()#使其支持自定义js
c.render_notebook()#直接展示在jupyterlab

长三角底图

3. 基于底图进行自定义展示

比如我这里绘制了城市间的流动线条。

长三角出行意愿

【win10无Anaconda】JupyterLab更改默认启动路径及创建桌面快捷方式

【win10无Anaconda】JupyterLab更改默认启动路径及创建桌面快捷方式

每一次JupyterLab或者Jupyter Notebook启动时都需要在命令行下跳至对应目录文件夹,再输入jupyter lab或者jupyter notebook启动是不是很麻烦?今天来记录一下两个小设置,让启动JupyterLab直接双击桌面快捷方式图标即可。

1. JupyterLab更改默认启动路径

已经有很多博客介绍如何更改Jupyter Notebook的默认启动路径,但是新一代的JupyterLab似乎还没有很多帖子,我这里就来记录一下。其实与Jupyter Notebook配置类似,

(1)先在cmd下输入:

jupyter lab --generate-config

生成默认配置文件。

(2)找到刚刚生成的配置文件,默认存储于C:\Users\你的用户\.jupyter路径下,打开jupyter_lab_config.py`文件。

(3)在412行左右,修改路径文件为你需要的默认启动路径。

注意:使用/分隔路径,同时记得去掉前面的#号

修改启动路径

(4)保存退出即可。

2. 创建 Jupyter lab桌面快捷方式

网上我查到的都是讲解如何在Anaconda环境下创建JupyterLab快捷方式,但是我没有装体积庞大的Anaconda。其实很简单,自己编写一个简单的bat程序,然后为其创建桌面快捷方式并且自定义图标即可。

(1)创建一个记事本文件,输入:

jupyter lab

(2)更改记事本文件的后缀名为.bat

(3).bat文件无法直接更改图标,你先将bat程序放到你电脑里一个安全的路径,然后右键发送到桌面快捷方式。

(4)右键刚刚创建的快捷方式,点击属性,而后点击更改图标,设为你想要的图标即可。

更改图标

(5)图标文件的后缀为.ico,可以下载常见的.jpg,.png格式图片制作。

可以另存为.bmp文件再直接改后缀为.ico,不过这样图片质量损失较大。建议使用在线的.ico制作网站,上传图片转换即可。

jupyterlab_png

(6)然后双击桌面的快捷方式,即可启动Jupyter lab啦!

图标

IBM Watson Studio云机器学习平台

IBM Watson Studio云机器学习平台

IBM Watson Studio是IBM Cloud云服务中的一个核心平台,集成了很多人工智能工具,可以连接数据库进行云存储,创建Dashboard仪表盘,在线训练你的机器学习模型,支持Jupyter Notebook编写代码及分享,支持RStudio、SPSS Modeler等等。并且,其内置了很多已经构建好的机器学习模型,如自然语言文本分类、图像识别、深度学习模型、最优化决策。看起来就很有吸引力!

服务.PNG

home_page.png

在此分享Coursera上关于简易上手使用IBM Watson Studio的教程,开始写你在Watson Studio上的第一段Jupyter Notebook代码吧。

同时分享两则注意事项

  1. 注册账户的时候建议使用Gmail,不然很可能会注册失败。

  2. Github同步要在repository里新建master分支,不要仅有默认的main分支,不然Notebook的同步会报错。

IBM Cloud属实功能强大,日后有机会再进一步研究使用。

动态爬取携程网机票信息

最近在做有关交通城际出行领域的课题,需要用到一些关于机票的信息,于是就想到从携程网进行爬取相关数据。

但是呢,携程网它的票务信息查询后是一个动态页面,需要下拉才能返回更多的查询结果。所以这需要在一般的解析静态页面的爬虫方式上,增加一个浏览器的模拟器,来模拟下拉这一行为。

本次就是用到selenium这一个包的webdriver来模拟打开浏览器下拉这一行为。

话不多说,直接上代码和注释。

from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
import lxml.html
from selenium import webdriver

def getFlightInfo(fromcity,tocity,date):
    url='https://flights.ctrip.com/itinerary/oneway/%s-%s?classType=ALL&ct=1606269725709&date=%s'%(fromcity,tocity,date)#携程的单程机票查询url
    #parse the html
    browser = webdriver.Chrome()
    browser.get(url)
    browser.implicitly_wait(30)#等一会儿,等信息解析
    browser.find_element_by_class_name('button').click()#模拟点击按钮
    browser.implicitly_wait(30)#多注意休息
    browser.find_element_by_class_name('dtime-sort').click()#模拟点击按时间排序按钮
    browser.implicitly_wait(30)
    browser.find_element_by_class_name('dtime-sort').click()#再模拟一次点击按时间排序按钮,确保出发时间从早到晚排序
    browser.implicitly_wait(30)
    time.sleep(3)

    # 获取页面初始高度
    js = "return action=document.body.scrollHeight"
    height = browser.execute_script(js)

    # 将滚动条调整至页面底部
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    time.sleep(5)
    # 定义初始时间戳(秒)
    t1 = int(time.time())
    # 定义循环标识,用于终止while循环
    status = True
    # 重试次数
    num = 0
    while status:
        # 获取当前时间戳(秒)
        t2 = int(time.time())
        # 判断时间初始时间戳和当前时间戳相差是否大于30秒,小于30秒则下拉滚动条
        if t2 - t1 < 30:
            new_height = browser.execute_script(js)
            if new_height > height:
                time.sleep(1)
                browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
                # 重置初始页面高度
                height = new_height
                # 重置初始时间戳,重新计时
                t1 = int(time.time())
        elif num < 3:  # 当超过30秒页面高度仍然没有更新时,进入重试逻辑,重试3次,每次等待30秒
            time.sleep(3)
            num = num + 1
        else:  # 超时并超过重试次数,程序结束跳出循环,并认为页面已经加载完毕!
            print("滚动条已经处于页面最下方!")
            status = False
            # 滚动条调整至页面顶部
            browser.execute_script('window.scrollTo(0, 0)')
            break

 #要用到正则表达式
 flightnumber=browser.find_elements_by_css_selector(".search_table_header>.inb.logo>div>div>span>span>span")#空格设置为点,>层级关系,不可以跃层查询
    departtime=browser.find_elements_by_css_selector(".search_box.search_box_tag.search_box_light.Label_Flight>div>div>.inb.right>div.time_box")#空格设置为点,>层级关系
    departhub = browser.find_elements_by_css_selector(".search_box.search_box_tag.search_box_light.Label_Flight>div>div>.inb.right>div.airport")  # 空格设置为点
    arrivetime=browser.find_elements_by_css_selector(".search_box.search_box_tag.search_box_light.Label_Flight>div>div>.inb.left>div.time_box")#空格设置为点,>层级关系
    arrivehub = browser.find_elements_by_css_selector(".search_box.search_box_tag.search_box_light.Label_Flight>div>div>.inb.left>div.airport")  # 空格设置为点

    flightnumberlist=[content.text for content in flightnumber]
    flightnumberlist=list(filter(lambda x: x != '共享', flightnumberlist))#删除多余元素
    departtimelist=[content.text for content in departtime]
    departhublist=[content.text for content in departhub]
    arrivetimelist=[content.text for content in arrivetime]
    arrivehublist=[content.text for content in arrivehub]
    return flightnumberlist,departtimelist,departhublist,arrivetimelist,arrivehublist

if __name__ == '__main__':
    date='2020-11-27'
    fromcity='bjs'#查询北京到上海的机票
    tocity='sha'#查询北京到上海的机票
    path = '\\'
    flightnumberlist,departtimelist,departhublist,arrivetimelist,arrivehublist=getFlightInfo(fromcity, tocity, date)
    print(flightnumberlist)
    flightinfodict={'flightnumber':flightnumberlist,'departtime':departtimelist,'departhub':departhublist,
                        'arrivetime':arrivetimelist,'arrivehub':arrivehublist}
    flightinfodf=pd.DataFrame(flightinfodict)
    flightinfodf.to_csv(path+'%s-%s航空班次信息.csv'%(fromcity,tocity),encoding='utf_8_sig',index=False)
  • © 2020-2022 Eva Ren
  • Powered by Hexo Theme Ayer
    • 本站总访问量
    • 本页面总访问量
  • 载入运行时间...

请我喝杯咖啡吧~

支付宝
微信