{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Working with Digital Herbarium using Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Python](http://python.org) programming language is a popular tool for speaking with a computer. It is a common purpose programming language widely used not only in programming field, but also in scientific computations, data analysis and engineering.\n", "\n", "Among reasons of Python popularity are its programming productivity, code readability, obvious simplicity, as well as dynamic typing, supporting [OOPs](https://en.wikipedia.org/wiki/Object-oriented_programming) coding style, cross-platform runability etc.\n", "\n", "When writing in Python, there is almost no chance to get unreadable code. Every block of the program is separated from others by predefined number of spaces that leads to an easy-to-read textual document. There are recommendations on how to write Python code - [pep8](https://www.python.org/dev/peps/pep-0008/). Pep8 document aims to help user write readable and easy understandable Python code.\n", "\n", "Reproducing computations presented below assumes Python 3.5+ to be installed on your operational system, as well as some Python packages (e.g. [Pandas](http://pandas.pydata.org), [NumPy](http://numpy.org) etc.); \n", "To work with spatially distributed data, you will need additionally to install `pyshp` (a tool for I/O operations with ESRI shape files) and `shapely` (geometry primitives and interactions) packages.\n", "\n", "Windows users can start with [Anaconda](https://www.continuum.io/downloads) distribution. This distribution was designed to provide a convenient toolset for scientific computations and data analysis on top of Python, so it could be a good starting point on the way of building computational environment for your investigations.\n", "\n", "Executable lines of code are given in `In[xxx]`-started blocks; these blocks could be executed either in [Jupyter](http://jupyter.org/) interactive environment or by coping them into a separate text file (with `.py` extension) and running with Python interpreter.\n", "\n", "This document is created using [Jupyter](http://jupyter.org/) software, interactive environment that allows mixing code and text in pretty-styled way." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making simple queries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get started, we need to prepare computational environment. The most important component of it is the [Pandas](http://pandas.pydata.org) package; It is highly recommended to install it before doing any manipulation with data. Being installed, Pandas supplies us with a good and convenient data container -- the DataFrame class, that, in turn, allows to make sophisticated data selection and perform basic input and output (IO) operations.\n", "\n", "We assume that the Pandas has been already installed. So, let's import it." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd # This is an implicit agreement: everytime you need pandas, it is better to import it as `pd`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's define variable called `HERBARIUM_SEARCH_URL`. This variable will point to the URI, where we will send HTTP search queries. This URI is assumed to be a permanent address, so it probably wouldn't be changed in the nearest future.\n", "\n", "Note: Оne can use HTTPS protocol instead. In this case just replace `http` with `https` in `HERBARIUM_SEARCH_URL`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "HERBARIUM_SEARCH_URL = 'http://botsad.ru/hitem/json/'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is worth noting that variable's naming is a very important part of any programming process. One can think that it isn't so important, and would use shorthand notations instead, bearing in mind that everything will be clear, at least, for themselves. But this isn't a good reason to do so, even if you are writing code just for yourself. Best practice in this case assumes to choose variable names that will be clear for everyone (in an intuitive way) - on the one hand, and that will be as short as possible - on the other." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us organize search parameters in a list of tuples, as follows\n", "(to get full description of all available search parameters follow the [link](http://botsad.ru/herbarium/docs/en/http_api.html)):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "search_parameters_set = (('collectedby', 'Bakalin'),\n", " ('identifiedby', 'Bakalin'),\n", " ('colstart', '2016-01-01'),\n", " ('colend', '2016-12-30')\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's import a set of necessary functions to make HTTP-requests automatically. Python's ecosystem provides a lot of tools to do this: one can use third party packages, or just use ones included in the Python standard distributive (a.k.a \"battarie included\" pack)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "try:\n", " # Python 3.x\n", " from urllib.parse import quote\n", " from urllib.request import urlopen\n", "except ImportError:\n", " # Python 2.x\n", " from urllib import quote\n", " from urllib import urlopen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can use defined variables to compose search URI (according to HTTP-API [rules](http://botsad.ru/herbarium/docs/en/http_api.html)):" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "search_request_url = HERBARIUM_SEARCH_URL + '?' + '&'.join(map(lambda x: x[0] + '=' + quote(x[1].strip()), search_parameters_set))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to the [URI specification](https://tools.ietf.org/html/rfc3986#page-11) non-ASCII characters used in the URI should be encoded using symbol '%'. So, if your query includes non-ASCII chars, you will need to use helper function `quote` to do such encoding.\n", "\n", "In case of simple queries, one can assign `search_request_url` directly, e.g.:\n", "```python\n", "search_request_url = http://botsad.ru/hitem/json?collectedby=bakalin\n", "```\n", "\n", "Choosing this way is up to you, but scripting best practice assumes that you will divide process of building the `search_request_url`. Using `search_parameters_set` allows you to be more structured and organized in case of, for instance, making complicated searching queries, performing a set of consequent queries with different parameters etc.: \n", "\n", "```python\n", "list_of_search_pars = [search_parameters_set1, search_parameters_set2, search_parameters_set3,]\n", "\n", "list_of_search_urls = [search_request_url1, search_request_url2, search_request_url3, ]\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the sake of self-checking, one can print out the current value of the `search_request_url`. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'http://botsad.ru/hitem/json/?collectedby=Bakalin&identifiedby=Bakalin&colstart=2016-01-01&colend=2016-12-30'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search_request_url" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we are ready to make searching request to the server. In general, data loading and its transformation into Python dictionary consist of the following four lines of code:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import json\n", "server_response = urlopen(search_request_url)\n", "data = json.loads(server_response.read().decode('utf-8'))\n", "server_response.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, the variable `data` stores Python dictionary with fields defined in [official docs](https://github.com/VBGI/herbs/blob/master/herbs/docs/httpapi/en/http_api.rst)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Getting started the data processing, one should check `errors` and `warnings` fields; if everything went fine, these variables are leaved empty, or just `warnings` is non-empty." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([], [])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['errors'], data['warnings']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Therefore, data was successfully loaded, and we can start typical data evaluation process using [Pandas](http://pandas.pydata.org/)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of obtained records is 179\n" ] } ], "source": [ "print(\"The number of obtained records is \", len(data['data']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, `data['data']` is a Python dictionary; Python dictionaries are convenient containers for structured data, but Pandas DataFrame is more appropriate for this purpose.\n", "Let us convert the dictionary to the DataFrame object; it is quite simple:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "search_df = pd.DataFrame(data['data'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`search_df` is an instance of the DataFrame class, that has a lot of helper methods to get information about the data. Some of them are `.info()` and `.describe()` methods; they are used to get common information about the data." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 179 entries, 0 to 178\n", "Data columns (total 41 columns):\n", "acronym 179 non-null object\n", "additionals 179 non-null object\n", "altitude 179 non-null object\n", "branch 179 non-null object\n", "collection_finished 179 non-null object\n", "collection_started 179 non-null object\n", "collectors 179 non-null object\n", "country 179 non-null object\n", "country_id 177 non-null float64\n", "created 179 non-null object\n", "details 179 non-null object\n", "dethistory 179 non-null object\n", "devstage 179 non-null object\n", "district 179 non-null object\n", "family 179 non-null object\n", "family_authorship 179 non-null object\n", "fieldid 179 non-null object\n", "genus 179 non-null object\n", "genus_authorship 179 non-null object\n", "gpsbased 179 non-null bool\n", "id 179 non-null int64\n", "identification_finished 179 non-null object\n", "identification_started 179 non-null object\n", "identifiers 179 non-null object\n", "images 179 non-null object\n", "infraspecific_authorship 179 non-null object\n", "infraspecific_epithet 179 non-null object\n", "infraspecific_rank 179 non-null object\n", "itemcode 179 non-null object\n", "latitude 179 non-null float64\n", "longitude 179 non-null float64\n", "note 179 non-null object\n", "region 179 non-null object\n", "short_note 179 non-null object\n", "significance 179 non-null object\n", "species_authorship 179 non-null object\n", "species_epithet 179 non-null object\n", "species_fullname 179 non-null object\n", "species_id 179 non-null int64\n", "species_status 179 non-null object\n", "updated 179 non-null object\n", "dtypes: bool(1), float64(3), int64(2), object(35)\n", "memory usage: 56.2+ KB\n" ] } ], "source": [ "search_df.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also, one can inspect the DataFrame's content:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
acronymadditionalsaltitudebranchcollection_finishedcollection_startedcollectorscountrycountry_idcreated...noteregionshort_notesignificancespecies_authorshipspecies_epithetspecies_fullnamespecies_idspecies_statusupdated
0VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...SaPa, Phan Xi Pan National Park.Lao Cai Province(Austin) StephanisubciliataPallavicinia subciliata (Austin) Stephani420693Approved2017-06-13
1VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...SaPa, Phan Xi Pan National Park[Vietnam]Lao Cai Province(Austin) StephanisubciliataPallavicinia subciliata (Austin) Stephani420693Approved2017-06-13
2VBGI[{'species_authorship': '', 'infraspecific_aut...1700-1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien Son National ...Lai Chau ProvinceFurukiflavovirensRiccardia flavovirens Furuki24180Approved2017-06-26
3VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau ProvinceFurukipumilaRiccardia pumila Furuki24296From plantlist2017-07-07
4VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinNaN2017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Province(Lehm. & Lindenb.) Trevis.campylophyllaPorella campylophylla (Lehm. & Lindenb.) Trevis.588613Approved2017-07-14
5VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinNaN2017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Province(Lehm. & Lindenb.) Trevis.acutifoliaPorella acutifolia (Lehm. & Lindenb.) Trevis.470689Approved2017-07-11
6VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Provincesp.Asterella sp.588815Approved2017-08-14
7VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Province(Lehm. & Lindenb.) Trevis.acutifoliaPorella acutifolia (Lehm. & Lindenb.) Trevis.470689Approved2017-07-11
8VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Province(Lehm. & Lindenb.) Trevis.campylophyllaPorella campylophylla (Lehm. & Lindenb.) Trevis.588613Approved2017-07-14
9VBGI[{'species_authorship': '(Scop.) Nees', 'infra...1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien Son National ...Lai Chau Province(L.) Dumort.pinguisAneura pinguis (L.) Dumort.24020Approved2017-06-13
10VBGI[]1700-1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien Son National ...Lai Chau ProvinceFurukiflavovirensRiccardia flavovirens Furuki24180Approved2017-06-26
11VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Provincesp.Marchantia sp.589009Approved2017-08-08
12VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...SaPa, Phan Xi Pan National ParkLao Cai Provincesp.Preissia sp.590106Approved2017-06-13
13VBGI[]1700-1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien Son National ...Lai Chau ProvinceFurukiflavovirensRiccardia flavovirens Furuki24180Approved2017-06-26
14VBGI[{'species_authorship': '(Grolle & Váňa) Váňa ...1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau ProvinceFurukipumilaRiccardia pumila Furuki24296From plantlist2017-07-07
15VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park...Lai Chau ProvinceFurukipumilaRiccardia pumila Furuki24296From plantlist2017-07-07
16VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range. Hoang Lien Son National ...Lai Chau Province(S. Hatt.) FurukiyakusimensisLobatiriccardia yakusimensis (S. Hatt.) Furuki24100Approved2017-06-21
17VBGI[]1900Bryophyte herbarium2016-03-15V.A. BakalinVietnam134.02017-04-07...SaPa, Phan Xi Pan National ParkLao Cai Province(Thunb.) GrollejaponicumConocephalum japonicum (Thunb.) Grolle184206From plantlist2017-06-13
18VBGI[]2100Bryophyte herbarium2016-03-16V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, border of the Hoang Lien...Lai Chau Province(Austin) StephanisubciliataPallavicinia subciliata (Austin) Stephani420693Approved2017-06-13
19VBGI[]2100Bryophyte herbarium2016-03-16V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, border of the Hoang Lien...Lai Chau ProvinceSchiffn.consanguineaMetzgeria consanguinea Schiffn.589938Approved2017-06-13
20VBGI[]2100Bryophyte herbarium2016-03-16V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, border of the Hoang Lien...Lai Chau ProvinceMitt.crispulaCalycularia crispula Mitt.13454Approved2017-06-13
21VBGI[]2100Bryophyte herbarium2016-03-16V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau Province(Lehm. & Lindenb.) Trevis.acutifoliaPorella acutifolia (Lehm. & Lindenb.) Trevis.470689Approved2017-07-11
22VBGI[]2100Bryophyte herbarium2016-03-16V.A. BakalinVietnam134.02017-04-07...Hoang Lien Son Range, Hoang Lien National Park.Lai Chau ProvinceFurukipumilaRiccardia pumila Furuki24296From plantlist2017-07-07
23VBGI[]3143Bryophyte herbarium2016-03-17V.A. BakalinVietnam134.02017-04-07...Sa Pa District, San Sa Ho Communne, Hoang Lien...Lao Cai Province(Schiffn.) Steph.maximaAneura maxima (Schiffn.) Steph.589001Approved2017-06-13
24VBGI[]3143Bryophyte herbarium2016-03-17V.A. BakalinVietnam134.02017-04-07...Sa Pa District, San Sa Ho Comunne, Hoang Lien ...Lao Cai Provincegem.(Mitt.) Konstant.setosaSchistochilopsis setosa (Mitt.) Konstant.589942Approved2017-11-07
25VBGI[]3143Bryophyte herbarium2016-03-17V.A. BakalinVietnam134.02017-04-07...SaPa, Phan Xi Pan National Park, around the peak.Lao Cai ProvinceSchiffn.consanguineaMetzgeria consanguinea Schiffn.589938Approved2017-06-13
26VBGI[]3143Bryophyte herbarium2016-03-17V.A. BakalinVietnam134.02017-04-07...Sa Pa District, San Sa Ho Comunne, Hoang Lien ...Lao Cai Provincesp.Aneura sp.589627Approved2017-06-13
27VBGI[{'species_authorship': 'S. Hatt.', 'infraspec...3143Bryophyte herbarium2016-03-17V.A. BakalinVietnam134.02017-04-07...Sa Pa District, San Sa Ho Comunne, Hoang Lien ...Lao Cai Province(Mitt.) Konstant.setosaSchistochilopsis setosa (Mitt.) Konstant.589942Approved2017-11-07
28VBGI[]1350Bryophyte herbarium2016-03-18V.A. BakalinVietnam134.02017-04-07...SaPa, Ta Phin area.Lao Cai Province(Austin) StephanisubciliataPallavicinia subciliata (Austin) Stephani420693Approved2017-06-13
29VBGI[]1350Bryophyte herbarium2016-03-18V.A. BakalinVietnam134.02017-04-07...Sa Pa District, Ta Phin Commune, Hoang Lien So...Lao Cai Province(Taylor) Trevis.obtusataPorella obtusata (Taylor) Trevis. var. macrolo...590629Approved2017-08-02
..................................................................
149VBGI[]81Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-05-12...Khasansky District, Kravtsovka Stream Valley.Дальний Восток|Russian Far Eastspor.(Mont.) GrolleleptophyllaAsterella leptophylla (Mont.) Grolle62971Approved2017-08-14
150VBGI[]810Bryophyte herbarium2016-10-15K.G. Klimova & V.A. BakalinRussia162.02017-05-23...Shkotovsky District, Northern slope of Falaza ...Дальний Восток|Russian Far EastLindb. & ArnelllaxaCalycularia laxa Lindb. & Arnell588423Approved2017-06-13
151VBGI[{'species_authorship': 'Szweyk., Buczk. & Odr...124Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-05-25...Khasansky District, Kravtsovka Stream Valley.Дальний Восток|Russian Far East(Steph.) R.M. Schust. & InoueerimonusHattorianthus erimonus (Steph.) R.M. Schust. &...590071Approved2017-06-13
152VBGI[{'species_authorship': 'Spruce', 'infraspecif...571Bryophyte herbarium2016-10-15K.G. Klimova & V.A. BakalinRussia162.02017-07-07...Shkotovsky District, Northern slope of Falaza ...Дальний Восток|Russian Far East(Hedw.) Carruth.palmataRiccardia palmata (Hedw.) Carruth.24263Approved2017-07-07
153VBGI[]35Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-07-12...Nadezhdensky District, Razdol’naya River Valley.Дальний Восток|Russian Far East(Steph.) S. Hatt.caespitansPorella caespitans (Steph.) S. Hatt.588551Approved2017-07-12
154VBGI[]571Bryophyte herbarium2016-10-15K.G. Klimova & V.A. BakalinRussia162.02017-07-24...Shkotovsky District, Northern slope of Falaza ...Дальний Восток|Russian Far East(Steph.) S. Hatt.faurieiPorella fauriei (Steph.) S. Hatt.588934Approved2017-07-24
155VBGI[]35Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-07-27...Nadezhdinsky District, Razdol'naya River ValleyДальний Восток|Russian Far EastLindb.grandilobaPorella grandiloba Lindb.588822Approved2017-07-27
156VBGI[]90Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Barabash AreaДальний Восток|Russian Far Eastant., arch.(L.) RaddihemisphaericaReboulia hemisphaerica (L.) Raddi subsp. hemis...590127Approved2017-09-15
157VBGI[]90Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Barabash AreaДальний Восток|Russian Far EastLindb.vernicosaPorella vernicosa Lindb.588792Approved2017-09-15
158VBGI[{'species_authorship': '(Stephani) S. Hatt.',...90Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Barabash AreaДальний Восток|Russian Far EastSteph.taradakensisFrullania taradakensis Steph.264954Approved2017-09-15
159VBGI[]90Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Barabash AreaДальний Восток|Russian Far East(Stephani) S. Hatt.chinensisPorella chinensis (Stephani) S. Hatt.588836Approved2017-09-15
160VBGI[{'species_authorship': '(L.) Dumort.', 'infra...12Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Romashka AreaДальний Восток|Russian Far EastL.fluitansRiccia fluitans L.497877From plantlist2017-09-15
161VBGI[]12Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Romashka AreaДальний Восток|Russian Far East(L.) Dumort.pinguisAneura pinguis (L.) Dumort.24020Approved2017-09-15
162VBGI[]12Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Romashka AreaДальний Восток|Russian Far East(Nees) NeesirriguaScapania irrigua (Nees) Nees550233Approved2017-09-15
163VBGI[]12Bryophyte herbarium2016-04-28V.A. BakalinRussia162.02017-08-22...Khasansky District, Romashka AreaДальний Восток|Russian Far EastSteph.otaruensisCephalozia otaruensis Steph.588535Approved2017-09-15
164VBGI[]150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far Eastant., arch.(L.) RaddihemisphaericaReboulia hemisphaerica (L.) Raddi subsp. hemis...590127Approved2017-09-15
165VBGI[]150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far Eastsp.Riccia sp.588829Approved2017-09-15
166VBGI[]150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far Eastsp.Riccia sp.588829Approved2017-09-15
167VBGI[]150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far Eastper. juv.Mitt.infuscaPlectocolea infusca Mitt. var. recondita Bakalin590883Approved2017-09-15
168VBGI[{'species_authorship': '(A. Evans) Schljakov'...150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far Eastper.(Steph.) InouetruncatumPedinophyllum truncatum (Steph.) Inoue588820Approved2017-09-15
169VBGI[]150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far East(DC.) Steph.autumnalisJamesoniella autumnalis (DC.) Steph.590059Approved2017-09-15
170VBGI[{'species_authorship': '(Gottsche) Mizut.', '...150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far EastSteph.taradakensisFrullania taradakensis Steph.264954Approved2017-09-14
171VBGI[{'species_authorship': '(Steph.) Inoue', 'inf...150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far Eastant., arch., per.(Sm.) Schiffn.divaricataCephaloziella divaricata (Sm.) Schiffn.588472Approved2017-09-14
172VBGI[]150Bryophyte herbarium2016-04-29V.A. BakalinRussia162.02017-08-22...Khasansky District, Mramornaya Mt.Дальний Восток|Russian Far East(Gottsche) Mizut.sandvicensisTrocholejeunea sandvicensis (Gottsche) Mizut.590069Approved2017-09-14
173VBGI[]170Bryophyte herbarium2016-04-30V.A. BakalinRussia162.02017-08-22...Khasansky District, Gryaznaya River BasinДальний Восток|Russian Far EastStotler & CrotzazureaCalypogeia azurea Stotler & Crotz101182Approved2017-09-14
174VBGI[]170Bryophyte herbarium2016-04-30V.A. BakalinRussia162.02017-08-22...Khasansky District, Gryaznaya River BasinДальний Восток|Russian Far East(Schrad.) Hazsl.rivularisChiloscyphus rivularis (Schrad.) Hazsl.333777Approved2017-09-14
175VBGI[]35Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-09-24...Nadezhdinsky District, Razdol'naya River ValleyДальний Восток|Russian Far Eastant. Rev. by Yu.S. Mamontov 24.06.2017: Ok!Steph.muscicolaFrullania muscicola Steph.264739Approved2017-09-24
176VBGI[]639Bryophyte herbarium2016-10-15K.G. Klimova & V.A. BakalinRussia162.02017-10-30...Shkotovsky District, northern slope of Falaza ...Дальний Восток|Russian Far Eastper.(Hook.) GraytayloriiMylia taylorii (Hook.) Gray590048Approved2017-10-30
177VBGI[]81Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-10-30...Khasansky District, Kravtsovka Stream ValleyДальний Восток|Russian Far Eastgem.Bertol.paleaceaMarchantia paleacea Bertol.350001Approved2017-10-30
178VBGI[]35Bryophyte herbarium2016-10-16K.G. Klimova & V.A. BakalinRussia162.02017-10-30...Deciduous forest (Quercus mongolica) on the ri...Дальний Восток|Russian Far Eastper., ant.A. EvansornataCololejeunea ornata A. Evans325431Approved2017-10-30
\n", "

179 rows × 41 columns

\n", "
" ], "text/plain": [ " acronym additionals altitude \\\n", "0 VBGI [] 1900 \n", "1 VBGI [] 1900 \n", "2 VBGI [{'species_authorship': '', 'infraspecific_aut... 1700-1900 \n", "3 VBGI [] 1900 \n", "4 VBGI [] 1900 \n", "5 VBGI [] 1900 \n", "6 VBGI [] 1900 \n", "7 VBGI [] 1900 \n", "8 VBGI [] 1900 \n", "9 VBGI [{'species_authorship': '(Scop.) Nees', 'infra... 1900 \n", "10 VBGI [] 1700-1900 \n", "11 VBGI [] 1900 \n", "12 VBGI [] 1900 \n", "13 VBGI [] 1700-1900 \n", "14 VBGI [{'species_authorship': '(Grolle & Váňa) Váňa ... 1900 \n", "15 VBGI [] 1900 \n", "16 VBGI [] 1900 \n", "17 VBGI [] 1900 \n", "18 VBGI [] 2100 \n", "19 VBGI [] 2100 \n", "20 VBGI [] 2100 \n", "21 VBGI [] 2100 \n", "22 VBGI [] 2100 \n", "23 VBGI [] 3143 \n", "24 VBGI [] 3143 \n", "25 VBGI [] 3143 \n", "26 VBGI [] 3143 \n", "27 VBGI [{'species_authorship': 'S. Hatt.', 'infraspec... 3143 \n", "28 VBGI [] 1350 \n", "29 VBGI [] 1350 \n", ".. ... ... ... \n", "149 VBGI [] 81 \n", "150 VBGI [] 810 \n", "151 VBGI [{'species_authorship': 'Szweyk., Buczk. & Odr... 124 \n", "152 VBGI [{'species_authorship': 'Spruce', 'infraspecif... 571 \n", "153 VBGI [] 35 \n", "154 VBGI [] 571 \n", "155 VBGI [] 35 \n", "156 VBGI [] 90 \n", "157 VBGI [] 90 \n", "158 VBGI [{'species_authorship': '(Stephani) S. Hatt.',... 90 \n", "159 VBGI [] 90 \n", "160 VBGI [{'species_authorship': '(L.) Dumort.', 'infra... 12 \n", "161 VBGI [] 12 \n", "162 VBGI [] 12 \n", "163 VBGI [] 12 \n", "164 VBGI [] 150 \n", "165 VBGI [] 150 \n", "166 VBGI [] 150 \n", "167 VBGI [] 150 \n", "168 VBGI [{'species_authorship': '(A. Evans) Schljakov'... 150 \n", "169 VBGI [] 150 \n", "170 VBGI [{'species_authorship': '(Gottsche) Mizut.', '... 150 \n", "171 VBGI [{'species_authorship': '(Steph.) Inoue', 'inf... 150 \n", "172 VBGI [] 150 \n", "173 VBGI [] 170 \n", "174 VBGI [] 170 \n", "175 VBGI [] 35 \n", "176 VBGI [] 639 \n", "177 VBGI [] 81 \n", "178 VBGI [] 35 \n", "\n", " branch collection_finished collection_started \\\n", "0 Bryophyte herbarium 2016-03-15 \n", "1 Bryophyte herbarium 2016-03-15 \n", "2 Bryophyte herbarium 2016-03-15 \n", "3 Bryophyte herbarium 2016-03-15 \n", "4 Bryophyte herbarium 2016-03-15 \n", "5 Bryophyte herbarium 2016-03-15 \n", "6 Bryophyte herbarium 2016-03-15 \n", "7 Bryophyte herbarium 2016-03-15 \n", "8 Bryophyte herbarium 2016-03-15 \n", "9 Bryophyte herbarium 2016-03-15 \n", "10 Bryophyte herbarium 2016-03-15 \n", "11 Bryophyte herbarium 2016-03-15 \n", "12 Bryophyte herbarium 2016-03-15 \n", "13 Bryophyte herbarium 2016-03-15 \n", "14 Bryophyte herbarium 2016-03-15 \n", "15 Bryophyte herbarium 2016-03-15 \n", "16 Bryophyte herbarium 2016-03-15 \n", "17 Bryophyte herbarium 2016-03-15 \n", "18 Bryophyte herbarium 2016-03-16 \n", "19 Bryophyte herbarium 2016-03-16 \n", "20 Bryophyte herbarium 2016-03-16 \n", "21 Bryophyte herbarium 2016-03-16 \n", "22 Bryophyte herbarium 2016-03-16 \n", "23 Bryophyte herbarium 2016-03-17 \n", "24 Bryophyte herbarium 2016-03-17 \n", "25 Bryophyte herbarium 2016-03-17 \n", "26 Bryophyte herbarium 2016-03-17 \n", "27 Bryophyte herbarium 2016-03-17 \n", "28 Bryophyte herbarium 2016-03-18 \n", "29 Bryophyte herbarium 2016-03-18 \n", ".. ... ... ... \n", "149 Bryophyte herbarium 2016-10-16 \n", "150 Bryophyte herbarium 2016-10-15 \n", "151 Bryophyte herbarium 2016-10-16 \n", "152 Bryophyte herbarium 2016-10-15 \n", "153 Bryophyte herbarium 2016-10-16 \n", "154 Bryophyte herbarium 2016-10-15 \n", "155 Bryophyte herbarium 2016-10-16 \n", "156 Bryophyte herbarium 2016-04-28 \n", "157 Bryophyte herbarium 2016-04-28 \n", "158 Bryophyte herbarium 2016-04-28 \n", "159 Bryophyte herbarium 2016-04-28 \n", "160 Bryophyte herbarium 2016-04-28 \n", "161 Bryophyte herbarium 2016-04-28 \n", "162 Bryophyte herbarium 2016-04-28 \n", "163 Bryophyte herbarium 2016-04-28 \n", "164 Bryophyte herbarium 2016-04-29 \n", "165 Bryophyte herbarium 2016-04-29 \n", "166 Bryophyte herbarium 2016-04-29 \n", "167 Bryophyte herbarium 2016-04-29 \n", "168 Bryophyte herbarium 2016-04-29 \n", "169 Bryophyte herbarium 2016-04-29 \n", "170 Bryophyte herbarium 2016-04-29 \n", "171 Bryophyte herbarium 2016-04-29 \n", "172 Bryophyte herbarium 2016-04-29 \n", "173 Bryophyte herbarium 2016-04-30 \n", "174 Bryophyte herbarium 2016-04-30 \n", "175 Bryophyte herbarium 2016-10-16 \n", "176 Bryophyte herbarium 2016-10-15 \n", "177 Bryophyte herbarium 2016-10-16 \n", "178 Bryophyte herbarium 2016-10-16 \n", "\n", " collectors country country_id created ... \\\n", "0 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "1 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "2 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "3 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "4 V.A. Bakalin NaN 2017-04-07 ... \n", "5 V.A. Bakalin NaN 2017-04-07 ... \n", "6 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "7 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "8 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "9 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "10 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "11 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "12 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "13 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "14 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "15 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "16 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "17 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "18 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "19 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "20 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "21 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "22 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "23 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "24 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "25 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "26 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "27 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "28 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", "29 V.A. Bakalin Vietnam 134.0 2017-04-07 ... \n", ".. ... ... ... ... ... \n", "149 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-05-12 ... \n", "150 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-05-23 ... \n", "151 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-05-25 ... \n", "152 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-07-07 ... \n", "153 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-07-12 ... \n", "154 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-07-24 ... \n", "155 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-07-27 ... \n", "156 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "157 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "158 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "159 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "160 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "161 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "162 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "163 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "164 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "165 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "166 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "167 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "168 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "169 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "170 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "171 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "172 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "173 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "174 V.A. Bakalin Russia 162.0 2017-08-22 ... \n", "175 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-09-24 ... \n", "176 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-10-30 ... \n", "177 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-10-30 ... \n", "178 K.G. Klimova & V.A. Bakalin Russia 162.0 2017-10-30 ... \n", "\n", " note \\\n", "0 SaPa, Phan Xi Pan National Park. \n", "1 SaPa, Phan Xi Pan National Park[Vietnam] \n", "2 Hoang Lien Son Range, Hoang Lien Son National ... \n", "3 Hoang Lien Son Range, Hoang Lien National Park. \n", "4 Hoang Lien Son Range, Hoang Lien National Park. \n", "5 Hoang Lien Son Range, Hoang Lien National Park. \n", "6 Hoang Lien Son Range, Hoang Lien National Park. \n", "7 Hoang Lien Son Range, Hoang Lien National Park. \n", "8 Hoang Lien Son Range, Hoang Lien National Park. \n", "9 Hoang Lien Son Range, Hoang Lien Son National ... \n", "10 Hoang Lien Son Range, Hoang Lien Son National ... \n", "11 Hoang Lien Son Range, Hoang Lien National Park. \n", "12 SaPa, Phan Xi Pan National Park \n", "13 Hoang Lien Son Range, Hoang Lien Son National ... \n", "14 Hoang Lien Son Range, Hoang Lien National Park. \n", "15 Hoang Lien Son Range, Hoang Lien National Park... \n", "16 Hoang Lien Son Range. Hoang Lien Son National ... \n", "17 SaPa, Phan Xi Pan National Park \n", "18 Hoang Lien Son Range, border of the Hoang Lien... \n", "19 Hoang Lien Son Range, border of the Hoang Lien... \n", "20 Hoang Lien Son Range, border of the Hoang Lien... \n", "21 Hoang Lien Son Range, Hoang Lien National Park. \n", "22 Hoang Lien Son Range, Hoang Lien National Park. \n", "23 Sa Pa District, San Sa Ho Communne, Hoang Lien... \n", "24 Sa Pa District, San Sa Ho Comunne, Hoang Lien ... \n", "25 SaPa, Phan Xi Pan National Park, around the peak. \n", "26 Sa Pa District, San Sa Ho Comunne, Hoang Lien ... \n", "27 Sa Pa District, San Sa Ho Comunne, Hoang Lien ... \n", "28 SaPa, Ta Phin area. \n", "29 Sa Pa District, Ta Phin Commune, Hoang Lien So... \n", ".. ... \n", "149 Khasansky District, Kravtsovka Stream Valley. \n", "150 Shkotovsky District, Northern slope of Falaza ... \n", "151 Khasansky District, Kravtsovka Stream Valley. \n", "152 Shkotovsky District, Northern slope of Falaza ... \n", "153 Nadezhdensky District, Razdol’naya River Valley. \n", "154 Shkotovsky District, Northern slope of Falaza ... \n", "155 Nadezhdinsky District, Razdol'naya River Valley \n", "156 Khasansky District, Barabash Area \n", "157 Khasansky District, Barabash Area \n", "158 Khasansky District, Barabash Area \n", "159 Khasansky District, Barabash Area \n", "160 Khasansky District, Romashka Area \n", "161 Khasansky District, Romashka Area \n", "162 Khasansky District, Romashka Area \n", "163 Khasansky District, Romashka Area \n", "164 Khasansky District, Mramornaya Mt. \n", "165 Khasansky District, Mramornaya Mt. \n", "166 Khasansky District, Mramornaya Mt. \n", "167 Khasansky District, Mramornaya Mt. \n", "168 Khasansky District, Mramornaya Mt. \n", "169 Khasansky District, Mramornaya Mt. \n", "170 Khasansky District, Mramornaya Mt. \n", "171 Khasansky District, Mramornaya Mt. \n", "172 Khasansky District, Mramornaya Mt. \n", "173 Khasansky District, Gryaznaya River Basin \n", "174 Khasansky District, Gryaznaya River Basin \n", "175 Nadezhdinsky District, Razdol'naya River Valley \n", "176 Shkotovsky District, northern slope of Falaza ... \n", "177 Khasansky District, Kravtsovka Stream Valley \n", "178 Deciduous forest (Quercus mongolica) on the ri... \n", "\n", " region \\\n", "0 Lao Cai Province \n", "1 Lao Cai Province \n", "2 Lai Chau Province \n", "3 Lai Chau Province \n", "4 Lai Chau Province \n", "5 Lai Chau Province \n", "6 Lai Chau Province \n", "7 Lai Chau Province \n", "8 Lai Chau Province \n", "9 Lai Chau Province \n", "10 Lai Chau Province \n", "11 Lai Chau Province \n", "12 Lao Cai Province \n", "13 Lai Chau Province \n", "14 Lai Chau Province \n", "15 Lai Chau Province \n", "16 Lai Chau Province \n", "17 Lao Cai Province \n", "18 Lai Chau Province \n", "19 Lai Chau Province \n", "20 Lai Chau Province \n", "21 Lai Chau Province \n", "22 Lai Chau Province \n", "23 Lao Cai Province \n", "24 Lao Cai Province \n", "25 Lao Cai Province \n", "26 Lao Cai Province \n", "27 Lao Cai Province \n", "28 Lao Cai Province \n", "29 Lao Cai Province \n", ".. ... \n", "149 Дальний Восток|Russian Far East \n", "150 Дальний Восток|Russian Far East \n", "151 Дальний Восток|Russian Far East \n", "152 Дальний Восток|Russian Far East \n", "153 Дальний Восток|Russian Far East \n", "154 Дальний Восток|Russian Far East \n", "155 Дальний Восток|Russian Far East \n", "156 Дальний Восток|Russian Far East \n", "157 Дальний Восток|Russian Far East \n", "158 Дальний Восток|Russian Far East \n", "159 Дальний Восток|Russian Far East \n", "160 Дальний Восток|Russian Far East \n", "161 Дальний Восток|Russian Far East \n", "162 Дальний Восток|Russian Far East \n", "163 Дальний Восток|Russian Far East \n", "164 Дальний Восток|Russian Far East \n", "165 Дальний Восток|Russian Far East \n", "166 Дальний Восток|Russian Far East \n", "167 Дальний Восток|Russian Far East \n", "168 Дальний Восток|Russian Far East \n", "169 Дальний Восток|Russian Far East \n", "170 Дальний Восток|Russian Far East \n", "171 Дальний Восток|Russian Far East \n", "172 Дальний Восток|Russian Far East \n", "173 Дальний Восток|Russian Far East \n", "174 Дальний Восток|Russian Far East \n", "175 Дальний Восток|Russian Far East \n", "176 Дальний Восток|Russian Far East \n", "177 Дальний Восток|Russian Far East \n", "178 Дальний Восток|Russian Far East \n", "\n", " short_note significance \\\n", "0 \n", "1 \n", "2 \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 \n", "13 \n", "14 \n", "15 \n", "16 \n", "17 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 \n", "23 \n", "24 gem. \n", "25 \n", "26 \n", "27 \n", "28 \n", "29 \n", ".. ... ... \n", "149 spor. \n", "150 \n", "151 \n", "152 \n", "153 \n", "154 \n", "155 \n", "156 ant., arch. \n", "157 \n", "158 \n", "159 \n", "160 \n", "161 \n", "162 \n", "163 \n", "164 ant., arch. \n", "165 \n", "166 \n", "167 per. juv. \n", "168 per. \n", "169 \n", "170 \n", "171 ant., arch., per. \n", "172 \n", "173 \n", "174 \n", "175 ant. Rev. by Yu.S. Mamontov 24.06.2017: Ok! \n", "176 per. \n", "177 gem. \n", "178 per., ant. \n", "\n", " species_authorship species_epithet \\\n", "0 (Austin) Stephani subciliata \n", "1 (Austin) Stephani subciliata \n", "2 Furuki flavovirens \n", "3 Furuki pumila \n", "4 (Lehm. & Lindenb.) Trevis. campylophylla \n", "5 (Lehm. & Lindenb.) Trevis. acutifolia \n", "6 sp. \n", "7 (Lehm. & Lindenb.) Trevis. acutifolia \n", "8 (Lehm. & Lindenb.) Trevis. campylophylla \n", "9 (L.) Dumort. pinguis \n", "10 Furuki flavovirens \n", "11 sp. \n", "12 sp. \n", "13 Furuki flavovirens \n", "14 Furuki pumila \n", "15 Furuki pumila \n", "16 (S. Hatt.) Furuki yakusimensis \n", "17 (Thunb.) Grolle japonicum \n", "18 (Austin) Stephani subciliata \n", "19 Schiffn. consanguinea \n", "20 Mitt. crispula \n", "21 (Lehm. & Lindenb.) Trevis. acutifolia \n", "22 Furuki pumila \n", "23 (Schiffn.) Steph. maxima \n", "24 (Mitt.) Konstant. setosa \n", "25 Schiffn. consanguinea \n", "26 sp. \n", "27 (Mitt.) Konstant. setosa \n", "28 (Austin) Stephani subciliata \n", "29 (Taylor) Trevis. obtusata \n", ".. ... ... \n", "149 (Mont.) Grolle leptophylla \n", "150 Lindb. & Arnell laxa \n", "151 (Steph.) R.M. Schust. & Inoue erimonus \n", "152 (Hedw.) Carruth. palmata \n", "153 (Steph.) S. Hatt. caespitans \n", "154 (Steph.) S. Hatt. fauriei \n", "155 Lindb. grandiloba \n", "156 (L.) Raddi hemisphaerica \n", "157 Lindb. vernicosa \n", "158 Steph. taradakensis \n", "159 (Stephani) S. Hatt. chinensis \n", "160 L. fluitans \n", "161 (L.) Dumort. pinguis \n", "162 (Nees) Nees irrigua \n", "163 Steph. otaruensis \n", "164 (L.) Raddi hemisphaerica \n", "165 sp. \n", "166 sp. \n", "167 Mitt. infusca \n", "168 (Steph.) Inoue truncatum \n", "169 (DC.) Steph. autumnalis \n", "170 Steph. taradakensis \n", "171 (Sm.) Schiffn. divaricata \n", "172 (Gottsche) Mizut. sandvicensis \n", "173 Stotler & Crotz azurea \n", "174 (Schrad.) Hazsl. rivularis \n", "175 Steph. muscicola \n", "176 (Hook.) Gray taylorii \n", "177 Bertol. paleacea \n", "178 A. Evans ornata \n", "\n", " species_fullname species_id \\\n", "0 Pallavicinia subciliata (Austin) Stephani 420693 \n", "1 Pallavicinia subciliata (Austin) Stephani 420693 \n", "2 Riccardia flavovirens Furuki 24180 \n", "3 Riccardia pumila Furuki 24296 \n", "4 Porella campylophylla (Lehm. & Lindenb.) Trevis. 588613 \n", "5 Porella acutifolia (Lehm. & Lindenb.) Trevis. 470689 \n", "6 Asterella sp. 588815 \n", "7 Porella acutifolia (Lehm. & Lindenb.) Trevis. 470689 \n", "8 Porella campylophylla (Lehm. & Lindenb.) Trevis. 588613 \n", "9 Aneura pinguis (L.) Dumort. 24020 \n", "10 Riccardia flavovirens Furuki 24180 \n", "11 Marchantia sp. 589009 \n", "12 Preissia sp. 590106 \n", "13 Riccardia flavovirens Furuki 24180 \n", "14 Riccardia pumila Furuki 24296 \n", "15 Riccardia pumila Furuki 24296 \n", "16 Lobatiriccardia yakusimensis (S. Hatt.) Furuki 24100 \n", "17 Conocephalum japonicum (Thunb.) Grolle 184206 \n", "18 Pallavicinia subciliata (Austin) Stephani 420693 \n", "19 Metzgeria consanguinea Schiffn. 589938 \n", "20 Calycularia crispula Mitt. 13454 \n", "21 Porella acutifolia (Lehm. & Lindenb.) Trevis. 470689 \n", "22 Riccardia pumila Furuki 24296 \n", "23 Aneura maxima (Schiffn.) Steph. 589001 \n", "24 Schistochilopsis setosa (Mitt.) Konstant. 589942 \n", "25 Metzgeria consanguinea Schiffn. 589938 \n", "26 Aneura sp. 589627 \n", "27 Schistochilopsis setosa (Mitt.) Konstant. 589942 \n", "28 Pallavicinia subciliata (Austin) Stephani 420693 \n", "29 Porella obtusata (Taylor) Trevis. var. macrolo... 590629 \n", ".. ... ... \n", "149 Asterella leptophylla (Mont.) Grolle 62971 \n", "150 Calycularia laxa Lindb. & Arnell 588423 \n", "151 Hattorianthus erimonus (Steph.) R.M. Schust. &... 590071 \n", "152 Riccardia palmata (Hedw.) Carruth. 24263 \n", "153 Porella caespitans (Steph.) S. Hatt. 588551 \n", "154 Porella fauriei (Steph.) S. Hatt. 588934 \n", "155 Porella grandiloba Lindb. 588822 \n", "156 Reboulia hemisphaerica (L.) Raddi subsp. hemis... 590127 \n", "157 Porella vernicosa Lindb. 588792 \n", "158 Frullania taradakensis Steph. 264954 \n", "159 Porella chinensis (Stephani) S. Hatt. 588836 \n", "160 Riccia fluitans L. 497877 \n", "161 Aneura pinguis (L.) Dumort. 24020 \n", "162 Scapania irrigua (Nees) Nees 550233 \n", "163 Cephalozia otaruensis Steph. 588535 \n", "164 Reboulia hemisphaerica (L.) Raddi subsp. hemis... 590127 \n", "165 Riccia sp. 588829 \n", "166 Riccia sp. 588829 \n", "167 Plectocolea infusca Mitt. var. recondita Bakalin 590883 \n", "168 Pedinophyllum truncatum (Steph.) Inoue 588820 \n", "169 Jamesoniella autumnalis (DC.) Steph. 590059 \n", "170 Frullania taradakensis Steph. 264954 \n", "171 Cephaloziella divaricata (Sm.) Schiffn. 588472 \n", "172 Trocholejeunea sandvicensis (Gottsche) Mizut. 590069 \n", "173 Calypogeia azurea Stotler & Crotz 101182 \n", "174 Chiloscyphus rivularis (Schrad.) Hazsl. 333777 \n", "175 Frullania muscicola Steph. 264739 \n", "176 Mylia taylorii (Hook.) Gray 590048 \n", "177 Marchantia paleacea Bertol. 350001 \n", "178 Cololejeunea ornata A. Evans 325431 \n", "\n", " species_status updated \n", "0 Approved 2017-06-13 \n", "1 Approved 2017-06-13 \n", "2 Approved 2017-06-26 \n", "3 From plantlist 2017-07-07 \n", "4 Approved 2017-07-14 \n", "5 Approved 2017-07-11 \n", "6 Approved 2017-08-14 \n", "7 Approved 2017-07-11 \n", "8 Approved 2017-07-14 \n", "9 Approved 2017-06-13 \n", "10 Approved 2017-06-26 \n", "11 Approved 2017-08-08 \n", "12 Approved 2017-06-13 \n", "13 Approved 2017-06-26 \n", "14 From plantlist 2017-07-07 \n", "15 From plantlist 2017-07-07 \n", "16 Approved 2017-06-21 \n", "17 From plantlist 2017-06-13 \n", "18 Approved 2017-06-13 \n", "19 Approved 2017-06-13 \n", "20 Approved 2017-06-13 \n", "21 Approved 2017-07-11 \n", "22 From plantlist 2017-07-07 \n", "23 Approved 2017-06-13 \n", "24 Approved 2017-11-07 \n", "25 Approved 2017-06-13 \n", "26 Approved 2017-06-13 \n", "27 Approved 2017-11-07 \n", "28 Approved 2017-06-13 \n", "29 Approved 2017-08-02 \n", ".. ... ... \n", "149 Approved 2017-08-14 \n", "150 Approved 2017-06-13 \n", "151 Approved 2017-06-13 \n", "152 Approved 2017-07-07 \n", "153 Approved 2017-07-12 \n", "154 Approved 2017-07-24 \n", "155 Approved 2017-07-27 \n", "156 Approved 2017-09-15 \n", "157 Approved 2017-09-15 \n", "158 Approved 2017-09-15 \n", "159 Approved 2017-09-15 \n", "160 From plantlist 2017-09-15 \n", "161 Approved 2017-09-15 \n", "162 Approved 2017-09-15 \n", "163 Approved 2017-09-15 \n", "164 Approved 2017-09-15 \n", "165 Approved 2017-09-15 \n", "166 Approved 2017-09-15 \n", "167 Approved 2017-09-15 \n", "168 Approved 2017-09-15 \n", "169 Approved 2017-09-15 \n", "170 Approved 2017-09-14 \n", "171 Approved 2017-09-14 \n", "172 Approved 2017-09-14 \n", "173 Approved 2017-09-14 \n", "174 Approved 2017-09-14 \n", "175 Approved 2017-09-24 \n", "176 Approved 2017-10-30 \n", "177 Approved 2017-10-30 \n", "178 Approved 2017-10-30 \n", "\n", "[179 rows x 41 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "search_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### DataFrames are convenient containers allowing to do complicated data filtering " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's filter our dataset leaving the records that have defined altitude (i.e. non-empty altitude parameter):" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "altitude_only = search_df[search_df.altitude != ''].copy()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 179 entries, 0 to 178\n", "Data columns (total 41 columns):\n", "acronym 179 non-null object\n", "additionals 179 non-null object\n", "altitude 179 non-null object\n", "branch 179 non-null object\n", "collection_finished 179 non-null object\n", "collection_started 179 non-null object\n", "collectors 179 non-null object\n", "country 179 non-null object\n", "country_id 177 non-null float64\n", "created 179 non-null object\n", "details 179 non-null object\n", "dethistory 179 non-null object\n", "devstage 179 non-null object\n", "district 179 non-null object\n", "family 179 non-null object\n", "family_authorship 179 non-null object\n", "fieldid 179 non-null object\n", "genus 179 non-null object\n", "genus_authorship 179 non-null object\n", "gpsbased 179 non-null bool\n", "id 179 non-null int64\n", "identification_finished 179 non-null object\n", "identification_started 179 non-null object\n", "identifiers 179 non-null object\n", "images 179 non-null object\n", "infraspecific_authorship 179 non-null object\n", "infraspecific_epithet 179 non-null object\n", "infraspecific_rank 179 non-null object\n", "itemcode 179 non-null object\n", "latitude 179 non-null float64\n", "longitude 179 non-null float64\n", "note 179 non-null object\n", "region 179 non-null object\n", "short_note 179 non-null object\n", "significance 179 non-null object\n", "species_authorship 179 non-null object\n", "species_epithet 179 non-null object\n", "species_fullname 179 non-null object\n", "species_id 179 non-null int64\n", "species_status 179 non-null object\n", "updated 179 non-null object\n", "dtypes: bool(1), float64(3), int64(2), object(35)\n", "memory usage: 57.5+ KB\n" ] } ], "source": [ "altitude_only.info()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average altitude is 688.9428571428572 meters above sea level\n" ] } ], "source": [ "print('Average altitude is {} meters above sea level'.format(altitude_only.altitude.apply(pd.to_numeric, args=('coerce',)).mean()))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see from the `.info()` output, `altitude` has the type `non-null object`, that means that its value could be quite arbitrary, e.g. a string, an array etc. We used `.astype` method to force its type to numeric, exactly, floating point. This is important in order to use the `.mean()` method.\n", "`Altitude` is a string that could have one of the forms: \"700-900\", \"100\", \"300 m a.s.l.\" etc. So, one can wish to handle all of these cases smartly. To do so, [regular expressions](https://docs.python.org/3/library/re.html) could be used. Regular expressions are convenient tool to do numbers extraction." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's consider another filtering conditions: we want to find all records collected at altitudes higher than 1 km and after 1 Aug, 2016.\n", "\n", "To start working with dates in Pandas we need to use `datetime` objects." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "altitude_only.altitude = altitude_only.altitude.apply(pd.to_numeric, args=('coerce',))\n", "altitude_only.collection_started = pd.to_datetime(altitude_only.collection_started)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "deadline = pd.to_datetime('2016-08-01')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
acronymadditionalsaltitudebranchcollection_finishedcollection_startedcollectorscountrycountry_idcreated...noteregionshort_notesignificancespecies_authorshipspecies_epithetspecies_fullnamespecies_idspecies_statusupdated
48VBGI[{'species_authorship': '(Hook.) Gray', 'infra...1460.0Bryophyte herbarium2016-08-02V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far East(S. Hatt. & Inoue) S. Hatt. & Mizut.nanaApotreubia nana (S. Hatt. & Inoue) S. Hatt. & ...573460Approved2017-08-07
52VBGI[{'species_authorship': '(Huds.) H. Buch', 'in...1570.0Bryophyte herbarium2016-08-04V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far EastLindb. & ArnelllaxaCalycularia laxa Lindb. & Arnell588423Approved2017-06-13
53VBGI[{'species_authorship': '(Schreb.) Berggr.', '...1570.0Bryophyte herbarium2016-08-04V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far East(S. Hatt. & Inoue) S. Hatt. & Mizut.nanaApotreubia nana (S. Hatt. & Inoue) S. Hatt. & ...573460Approved2017-08-07
54VBGI[]1570.0Bryophyte herbarium2016-08-04V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far EastLindb. & ArnelllaxaCalycularia laxa Lindb. & Arnell588423Approved2017-06-13
55VBGI[]1480.0Bryophyte herbarium2016-08-06V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far East(Hook.) GraytayloriiMylia taylorii (Hook.) Gray590048Approved2017-11-07
56VBGI[{'species_authorship': '(Wahlenb.) Dumort.', ...1640.0Bryophyte herbarium2016-08-06V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far EastLindb. & ArnelllaxaCalycularia laxa Lindb. & Arnell588423Approved2017-06-13
57VBGI[]1640.0Bryophyte herbarium2016-08-06V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far East(S. Hatt. & Inoue) S. Hatt. & Mizut.nanaApotreubia nana (S. Hatt. & Inoue) S. Hatt. & ...573460Approved2017-08-07
58VBGI[{'species_authorship': '(Limpr.) Trevis.', 'i...1780.0Bryophyte herbarium2016-08-08V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far EastLindb. & ArnelllaxaCalycularia laxa Lindb. & Arnell588423Approved2017-06-13
59VBGI[]1370.0Bryophyte herbarium2016-08-08V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far East(Gottsche) Limpr.neesianaPellia neesiana (Gottsche) Limpr.425171Approved2017-06-13
60VBGI[{'species_authorship': 'Lindb.', 'infraspecif...1640.0Bryophyte herbarium2016-08-09V.A. BakalinRussia162.02017-04-07...Baidzhalsky Mountain System, Yarap River Middl...Дальний Восток|Russian Far East(Schrank) Kuwah.pubescensApometzgeria pubescens (Schrank) Kuwah.363552Approved2017-06-19
\n", "

10 rows × 41 columns

\n", "
" ], "text/plain": [ " acronym additionals altitude \\\n", "48 VBGI [{'species_authorship': '(Hook.) Gray', 'infra... 1460.0 \n", "52 VBGI [{'species_authorship': '(Huds.) H. Buch', 'in... 1570.0 \n", "53 VBGI [{'species_authorship': '(Schreb.) Berggr.', '... 1570.0 \n", "54 VBGI [] 1570.0 \n", "55 VBGI [] 1480.0 \n", "56 VBGI [{'species_authorship': '(Wahlenb.) Dumort.', ... 1640.0 \n", "57 VBGI [] 1640.0 \n", "58 VBGI [{'species_authorship': '(Limpr.) Trevis.', 'i... 1780.0 \n", "59 VBGI [] 1370.0 \n", "60 VBGI [{'species_authorship': 'Lindb.', 'infraspecif... 1640.0 \n", "\n", " branch collection_finished collection_started collectors \\\n", "48 Bryophyte herbarium 2016-08-02 V.A. Bakalin \n", "52 Bryophyte herbarium 2016-08-04 V.A. Bakalin \n", "53 Bryophyte herbarium 2016-08-04 V.A. Bakalin \n", "54 Bryophyte herbarium 2016-08-04 V.A. Bakalin \n", "55 Bryophyte herbarium 2016-08-06 V.A. Bakalin \n", "56 Bryophyte herbarium 2016-08-06 V.A. Bakalin \n", "57 Bryophyte herbarium 2016-08-06 V.A. Bakalin \n", "58 Bryophyte herbarium 2016-08-08 V.A. Bakalin \n", "59 Bryophyte herbarium 2016-08-08 V.A. Bakalin \n", "60 Bryophyte herbarium 2016-08-09 V.A. Bakalin \n", "\n", " country country_id created ... \\\n", "48 Russia 162.0 2017-04-07 ... \n", "52 Russia 162.0 2017-04-07 ... \n", "53 Russia 162.0 2017-04-07 ... \n", "54 Russia 162.0 2017-04-07 ... \n", "55 Russia 162.0 2017-04-07 ... \n", "56 Russia 162.0 2017-04-07 ... \n", "57 Russia 162.0 2017-04-07 ... \n", "58 Russia 162.0 2017-04-07 ... \n", "59 Russia 162.0 2017-04-07 ... \n", "60 Russia 162.0 2017-04-07 ... \n", "\n", " note \\\n", "48 Baidzhalsky Mountain System, Yarap River Middl... \n", "52 Baidzhalsky Mountain System, Yarap River Middl... \n", "53 Baidzhalsky Mountain System, Yarap River Middl... \n", "54 Baidzhalsky Mountain System, Yarap River Middl... \n", "55 Baidzhalsky Mountain System, Yarap River Middl... \n", "56 Baidzhalsky Mountain System, Yarap River Middl... \n", "57 Baidzhalsky Mountain System, Yarap River Middl... \n", "58 Baidzhalsky Mountain System, Yarap River Middl... \n", "59 Baidzhalsky Mountain System, Yarap River Middl... \n", "60 Baidzhalsky Mountain System, Yarap River Middl... \n", "\n", " region short_note significance \\\n", "48 Дальний Восток|Russian Far East \n", "52 Дальний Восток|Russian Far East \n", "53 Дальний Восток|Russian Far East \n", "54 Дальний Восток|Russian Far East \n", "55 Дальний Восток|Russian Far East \n", "56 Дальний Восток|Russian Far East \n", "57 Дальний Восток|Russian Far East \n", "58 Дальний Восток|Russian Far East \n", "59 Дальний Восток|Russian Far East \n", "60 Дальний Восток|Russian Far East \n", "\n", " species_authorship species_epithet \\\n", "48 (S. Hatt. & Inoue) S. Hatt. & Mizut. nana \n", "52 Lindb. & Arnell laxa \n", "53 (S. Hatt. & Inoue) S. Hatt. & Mizut. nana \n", "54 Lindb. & Arnell laxa \n", "55 (Hook.) Gray taylorii \n", "56 Lindb. & Arnell laxa \n", "57 (S. Hatt. & Inoue) S. Hatt. & Mizut. nana \n", "58 Lindb. & Arnell laxa \n", "59 (Gottsche) Limpr. neesiana \n", "60 (Schrank) Kuwah. pubescens \n", "\n", " species_fullname species_id \\\n", "48 Apotreubia nana (S. Hatt. & Inoue) S. Hatt. & ... 573460 \n", "52 Calycularia laxa Lindb. & Arnell 588423 \n", "53 Apotreubia nana (S. Hatt. & Inoue) S. Hatt. & ... 573460 \n", "54 Calycularia laxa Lindb. & Arnell 588423 \n", "55 Mylia taylorii (Hook.) Gray 590048 \n", "56 Calycularia laxa Lindb. & Arnell 588423 \n", "57 Apotreubia nana (S. Hatt. & Inoue) S. Hatt. & ... 573460 \n", "58 Calycularia laxa Lindb. & Arnell 588423 \n", "59 Pellia neesiana (Gottsche) Limpr. 425171 \n", "60 Apometzgeria pubescens (Schrank) Kuwah. 363552 \n", "\n", " species_status updated \n", "48 Approved 2017-08-07 \n", "52 Approved 2017-06-13 \n", "53 Approved 2017-08-07 \n", "54 Approved 2017-06-13 \n", "55 Approved 2017-11-07 \n", "56 Approved 2017-06-13 \n", "57 Approved 2017-08-07 \n", "58 Approved 2017-06-13 \n", "59 Approved 2017-06-13 \n", "60 Approved 2017-06-19 \n", "\n", "[10 rows x 41 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "altitude_only[(altitude_only.altitude > 1000) & (altitude_only.collection_started>deadline)]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Complex queries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Current version of the HTTP API (см. [HTTP-API Description](http://botsad.ru/herbarium/docs/en/http_api.html)) doesn't support queries of OR-type. One can't build a single query url that performs, for example, searching all the records with dates of collection in Spring and Fall (but not Summer).\n", "\n", "Such type of queries could be reached by `Pandas` with two or more consequent queries to the database that could emulate OR-type query. Rising problem with a big data in this case doesn't matter because it is unlikely for the Herbarium database to be very large.\n", "\n", "Let's illustrate dividing of an OR-type query into two simple quieries.\n", "We will consider two simple queries named `search_query1` and `search_query2`, and aim to build a complex one (i.e. `search_query1` OR `search_query2`):" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "search_query1 = (('collectedby', 'Крестов'),\n", " ('identifiedby', 'Крестов') \n", " )\n", "search_query2 = (('collectedby', 'Баркалов'),\n", " ('identifiedby', 'Пименова')\n", " )" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from functools import reduce # `reduce` was moved into `functools` in Python3, so we need to import it \n", "\n", "# Make search queries consequently...\n", "datastore = [] # storage for DataFrames corresponding to quieries\n", "for sp in [search_query1, search_query2]: # We have the only two quieries \n", " # building searching url for each query\n", " search_request_url = HERBARIUM_SEARCH_URL + '?' + '&'.join(map(lambda x: x[0] + '=' + quote(x[1].strip()), sp))\n", " server_response = urlopen(search_request_url)\n", " data = json.loads(server_response.read().decode('utf-8'))\n", " data = pd.DataFrame(data['data'])\n", " datastore.append(data) # storing results for each query\n", " server_response.close() # close connection to the server\n", "\n", "# Combine results using Pandas (combining is based on uniqueness of ID):\n", "df_combined = pd.concat(datastore).drop_duplicates('id').reset_index()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 536 entries, 0 to 535\n", "Data columns (total 42 columns):\n", "index 536 non-null int64\n", "acronym 536 non-null object\n", "additionals 536 non-null object\n", "altitude 536 non-null object\n", "branch 536 non-null object\n", "collection_finished 536 non-null object\n", "collection_started 536 non-null object\n", "collectors 536 non-null object\n", "country 536 non-null object\n", "country_id 534 non-null float64\n", "created 536 non-null object\n", "details 536 non-null object\n", "dethistory 536 non-null object\n", "devstage 536 non-null object\n", "district 536 non-null object\n", "family 536 non-null object\n", "family_authorship 536 non-null object\n", "fieldid 536 non-null object\n", "genus 536 non-null object\n", "genus_authorship 536 non-null object\n", "gpsbased 536 non-null bool\n", "id 536 non-null int64\n", "identification_finished 536 non-null object\n", "identification_started 536 non-null object\n", "identifiers 536 non-null object\n", "images 536 non-null object\n", "infraspecific_authorship 536 non-null object\n", "infraspecific_epithet 536 non-null object\n", "infraspecific_rank 536 non-null object\n", "itemcode 536 non-null object\n", "latitude 536 non-null float64\n", "longitude 536 non-null float64\n", "note 536 non-null object\n", "region 536 non-null object\n", "short_note 536 non-null object\n", "significance 536 non-null object\n", "species_authorship 536 non-null object\n", "species_epithet 536 non-null object\n", "species_fullname 536 non-null object\n", "species_id 536 non-null int64\n", "species_status 536 non-null object\n", "updated 536 non-null object\n", "dtypes: bool(1), float64(3), int64(3), object(35)\n", "memory usage: 172.3+ KB\n" ] } ], "source": [ "df_combined.info()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(536, 42)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_combined.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Original dimensions of composed DataFrame's:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((179, 41), (359, 41))" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datastore[0].shape, datastore[1].shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Searching within Polygonal Areas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "HTTP-API provides you ability to make rectangular-type geographic queries, i.e. searching herbarium records\n", "included in specified areas. Internal database structure doesn't allow to make a specific polygonal-type queries,\n", "but they could be emulated by means of `Python` and its third party packages." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us consider a hypothetical problem of comparison species diversity based on plants collected from Sakhalin Island and from 200-km circle around Petropavlovsk-Kamchatsky city. \n", "One of the ways to handle the problem is to use ESRI shapefile to restrict searching results by specified area.\n", "We will need `pyshp` and `shapely` packages to read shapefiles and process spatial data.\n", "\n", "So, if they aren't yet installed on your computational environment, install them with the `pip` tool or another Python package manager." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also, we will suppose that ESRI shapefiles are stored in `shapefiles` folder existing in your current directory.\n", "\n", "In this case, basic reading workflow with shapefiles will be the following:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import shapefile\n", "import numpy as np # Note: numpy is a part of Pandas pack: you can access numpy via pandas.np or pd.np\n", "\n", "sakhalin_shp = shapefile.Reader(\"shapefiles/sakhalin.shp\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If no errors occurred, one can plot loaded data:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "contour_sakhalin = np.array(sakhalin_shp.shapes()[0].points) #convert contour points to numpy array" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nTL+4Tsz/B3Nk3oQQGUlVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pylab import *\n", "plot(contour_sakhalin[:,0], contour_sakhalin[:,1])\n", "gca().set_aspect('equal')\n", "title('Sakhalin Island')\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The contour of the shapefile -- a coastline -- consists of 835 points." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(835, 2)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "contour_sakhalin.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bounding box of the shapefile is easily accessible from shapefile specification" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[141.63803100585938, 45.88860321044922, 144.75164794921875, 54.424713134765625]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sakhalin_shp.bbox" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets build a search url, according to the previous steps:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(('lonl', '141.63803100585938'), ('latl', '45.88860321044922'), ('lonu', '144.75164794921875'), ('latu', '54.424713134765625'))\n" ] } ], "source": [ "query_sakhalin_bbox = tuple(zip(['lonl', 'latl', 'lonu', 'latu'], map(str, sakhalin_shp.bbox)))\n", "print(query_sakhalin_bbox)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "within_sakhalin_request_url = HERBARIUM_SEARCH_URL + '?' + '&'.join(map(lambda x: x[0] + '=' + quote(x[1].strip()), query_sakhalin_bbox))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'http://botsad.ru/hitem/json/?lonl=141.63803100585938&latl=45.88860321044922&lonu=144.75164794921875&latu=54.424713134765625'" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "within_sakhalin_request_url #it is good to inspect an url before sending a request" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Getting data within Sakhalin Island bounding box:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "server_response = urlopen(within_sakhalin_request_url)\n", "sakhalin_data_in_bbox = pd.DataFrame(json.loads(server_response.read().decode('utf-8'))['data'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next step assumes applying a fine filtering with the help of the `Polygon` class instance:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from shapely.geometry import Polygon, Point\n", "closed_sakhalin_contour = np.vstack([contour_sakhalin, contour_sakhalin[-1]]) # Polygon should be closed to check inclusions\n", "sakhalin_poly = Polygon(closed_sakhalin_contour)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sakhalin_filtered = sakhalin_data_in_bbox[[sakhalin_poly.contains(Point(x,y)) for x,y in zip(sakhalin_data_in_bbox.longitude, sakhalin_data_in_bbox.latitude)]]" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
acronymadditionalsaltitudebranchcollection_finishedcollection_startedcollectorscountrycountry_idcreated...noteregionshort_notesignificancespecies_authorshipspecies_epithetspecies_fullnamespecies_idspecies_statusupdated
0VBGI[]7922016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.F.SchmidtssioriPrunus ssiori F.Schmidt506834From plantlist2017-06-13
1VBGI[]10422016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.NakaiaxillareVaccinium axillare Nakai225901From plantlist2017-06-13
2VBGI[]7922016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.F.SchmidtrugosaIlex rugosa F.Schmidt44334From plantlist2017-06-13
3VBGI[]10422016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.(Koidz.) H.OhbanipponicaCerasus nipponica (Koidz.) H.Ohba499916From plantlist2017-06-13
4VBGI[]10422016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.(Cham. & Schltdl.) M.Roem.sambucifoliaSorbus sambucifolia (Cham. & Schltdl.) M.Roem.518523From plantlist2017-06-13
5VBGI[]10422016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.A.GraysmalliiVaccinium smallii A.Gray226494From plantlist2017-06-13
6VBGI[]7922016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.Jancz.latifoliumRibes latifolium Jancz.251865From plantlist2017-06-13
7VBGI[]10422016-10-01Пименова Е.А.Russia1622017-01-16...Сахалинская обл.Hult‚nbeauverdianaSpiraea beauverdiana Hult‚n518694From plantlist2017-06-13
8VBGI[]1922016-09-29Пименова Е.А.Russia1622017-01-16...Сахалинская обл.Cham.ermaniiBetula ermanii Cham.68288From plantlist2017-06-13
9VBGI[]1922016-09-29Пименова Е.А.Russia1622017-01-16...Сахалинская обл.Cham.ermaniiBetula ermanii Cham.68288From plantlist2017-06-13
10VBGI[]262016-09-30Пименова Е.А.Russia1622017-01-16...Сахалинская обл.BlumecrispulaQuercus crispula Blume588219Recently added2017-06-13
11VBGI[]262016-09-30Пименова Е.А.Russia1622017-01-16...Сахалинская обл.BlumecrispulaQuercus crispula Blume588219Recently added2017-06-13
12VBGI[]2502016-09-29Пименова Е.А.Russia1622017-02-09...одиночное крупное деревоСахалинская обл.,L.regiaJuglans regia L.265223From plantlist2017-06-13
13VBGI[]2502016-09-29Пименова Е.А.Russia1622017-02-09...одиночное крупное деревоСахалинская обл.,L.regiaJuglans regia L.265223From plantlist2017-06-13
14VBGI[]1702016-06-092016-06-09Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin Oblast(L.) Scop.odoratumGalium odoratum (L.) Scop.523442From plantlist2017-06-13
15VBGI[]1202016-06-212016-06-21Корзников К.А.Russia1622017-02-10...Сахалинская областьRupr.macropteraEuonymus macroptera Rupr.588266Approved2017-06-13
16VBGI[]1602016-06-162016-06-16Корзников К.А.Russia1622017-02-10...Сахалинская область(F.Schmidt) Maxim.sachalinensisEuonymus sachalinensis (F.Schmidt) Maxim.114805From plantlist2017-06-13
18VBGI[]502015-06-282015-06-28Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin Oblast(L.) SchottfragransDryopteris fragrans (L.) Schott212858From plantlist2017-06-13
19VBGI[]3802015-08-132015-08-13Корзников К.А., Попова К.Б.Russia1622017-02-10...Сахалинская область / Sakhalin Oblast(Kunze) C. PresltripteronPolystichum tripteron (Kunze) C. Presl216977From plantlist2017-06-13
20VBGI[]402016-07-162016-07-16Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin OblastH. Lév.faurieiCardamine fauriei H. Lév.588274Recently added2017-06-13
21VBGI[]402016-07-162016-07-16Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin OblastH. Lév.faurieiCardamine fauriei H. Lév.588274Recently added2017-06-13
22VBGI[]402016-07-162016-07-16Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin OblastH. Lév.faurieiCardamine fauriei H. Lév.588274Recently added2017-06-13
23VBGI[]702015-06-272015-06-27Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin Oblast(L.) DC.amplexifoliusStreptopus amplexifolius (L.) DC.330252From plantlist2017-06-13
24VBGI[]1402015-07-122015-07-12Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin Oblast(Thunb.) MakinocordatumCardiocrinum cordatum (Thunb.) Makino329621From plantlist2017-06-13
25VBGI[]152015-06-262015-06-26Корзников К.А.Russia1622017-02-10...Сахалинская область / Sakhalin Oblast(L.) Ker Gawl.camschatcensisFritillaria camschatcensis (L.) Ker Gawl.329686From plantlist2017-06-13
27VBGI[]302015-06-282015-06-28Корзников К.А.Russia1622017-02-12...Сахалинская область / Sakhalin Oblast(L.) Sw.lunariaBotrychium lunaria (L.) Sw.381813From plantlist2017-06-13
28VBGI[]1502016-06-212016-06-21Корзников К.А.Russia1622017-02-12...Сахалинская область / Sakhalin Oblast(F. Schmidt) Sarg.sachalinensePhellodendron sachalinense (F. Schmidt) Sarg.537480From plantlist2017-06-13
29VBGI[]602016-07-172016-07-17Корзников К.А.Russia1622017-02-12...Сахалинская область / Sakhalin Oblast(F. Schmidt) Sarg.sachalinensePhellodendron sachalinense (F. Schmidt) Sarg.537480From plantlist2017-06-13
30VBGI[]602016-07-172016-07-17Корзников К.А.Russia1622017-02-12...Сахалинская область / Sakhalin Oblast(F. Schmidt) Sarg.sachalinensePhellodendron sachalinense (F. Schmidt) Sarg.537480From plantlist2017-06-13
31VBGI[]702016-09-172016-09-17Корзников К.А.Russia1622017-02-12...Сахалинская область / Sakhalin OblastNakairepensSkimmia repens Nakai537822From plantlist2017-06-13
..................................................................
536VBGI[]2016-07-07Храпко О.В.Russia1622017-10-12...Сахалинская область / Sakhalin Oblast(C. Presl) Fraser-Jenk. & JermyexpansaDryopteris expansa (C. Presl) Fraser-Jenk. & J...212819From plantlist2017-10-12
537VBGI[]2008-07-25Храпко О.В.Russia1622017-10-12...Сахалинская область / Sakhalin Oblast(L.) KuhnaquilinumPteridium aquilinum (L.) Kuhn205696From plantlist2017-10-12
538VBGI[]2014-07-04Храпко О.В.Russia1622017-10-13...Сахалинская область / Sakhalin Oblast(L.) Rothfilix-feminaAthyrium filix-femina (L.) Roth61481From plantlist2017-10-13
539VBGI[]2008-07-15Храпко О.В., Царенко Н.А.Russia1622017-10-13...Сахалинская область / Sakhalin OblastRupr.sinenseAthyrium sinense Rupr.61829From plantlist2017-10-13
540VBGI[]2008-07-15Храпко О.В., Царенко Н.А.Russia1622017-10-13...Сахалинская областьRupr.sinenseAthyrium sinense Rupr.61829From plantlist2017-10-13
541VBGI[]1995-07-10Дудкин Р.В., Тесленко В.В.Russia1622017-10-13...Сахалинская область / Sakhalin Oblast(L.) SchottfragransDryopteris fragrans (L.) Schott212858From plantlist2017-10-13
542VBGI[]2012-07-09Храпко О.В.Russia1622017-10-16...Сахалинская область / Sakhalin Oblast(Fern.) TagawaasiaticumOsmundastrum asiaticum (Fern.) Tagawa591052Approved2017-10-16
543VBGI[]2017-07-04Храпко О.В.Russia1622017-10-16...Сахалинская область / Sakhalin Oblast(Fern.) TagawaasiaticumOsmundastrum asiaticum (Fern.) Tagawa591052Approved2017-10-16
544VBGI[]2008-07-12Храпко О.В., Царенко Н.А., Богачева А.В.Russia1622017-10-16...Сахалинская область / Sakhalin Oblast(Fern.) TagawaasiaticumOsmundastrum asiaticum (Fern.) Tagawa591052Approved2017-10-16
547SAKH[]52-112Herbarium of Vascular Plants1994-06-10А. ТаранRussia1622017-10-18...Сахалинская область / Sakhalin OblastChingchinensisHuperzia chinensis Ching336147From plantlist2017-10-18
548SAKH[]52-112Herbarium of Vascular PlantsА. ТаранRussia1622017-10-18...Сахалинская область / Sakhalin OblastL.annotinumLycopodium annotinum L.336427From plantlist2017-10-18
551VBGI[]3821995-07-11Дудкин Р.В., Тесленко В.В.Russia1622017-10-19...Сахалинская область / Sakhalin OblastHuds.virideAsplenium viride Huds.60611From plantlist2017-10-19
552VBGI[]2012-07-09Храпко О.В.Russia1622017-10-19...Сахалинская область / Sakhalin Oblast(C. Presl) Fraser-Jenk. & JermyexpansaDryopteris expansa (C. Presl) Fraser-Jenk. & J...212819From plantlist2017-10-19
553VBGI[]2016-07-07Храпко О.В.Russia1622017-10-19...Сахалинская область / Sakhalin Oblast(C. Presl) Fraser-Jenk. & JermyexpansaDryopteris expansa (C. Presl) Fraser-Jenk. & J...212819From plantlist2017-10-19
554VBGI[]2012-07-09Храпко О.В.Russia1622017-10-19...Сахалинская область / Sakhalin Oblast(C. Presl) Fraser-Jenk. & JermyexpansaDryopteris expansa (C. Presl) Fraser-Jenk. & J...212819From plantlist2017-10-19
558VBGI[]1997-10-03Недолужко В.А., Денисов Н.И.Russia1622017-10-19...Сахалинская область / Sakhalin OblastTzvelevamurensisLeptorumohra amurensis Tzvelev215409From plantlist2017-10-19
560VBGI[]1980-06-24Недолужко В.А.Russia1622017-10-20...Сахалинская область / Sakhalin Oblast(L.) Sw.lunariaBotrychium lunaria (L.) Sw.381813From plantlist2017-10-20
561VBGI[]1980-06-25Недолужко В.А.Russia1622017-10-20...Сахалинская область / Sakhalin Oblast(Rupr.) Underw.robustumBotrychium robustum (Rupr.) Underw.381844From plantlist2017-10-20
562VBGI[]1966-07-27Недолужко В.А., Стародубцев В.Н.Russia1622017-10-20...Сахалинская область / Sakhalin Oblast(L.) Bernh.fragilisCystopteris fragilis (L.) Bernh.204147From plantlist2017-10-20
563VBGI[]1991-07-22Храпко О.В.Russia1622017-10-20...Сахалинская область / Sakhalin Oblast(L.) NewmandryopterisGymnocarpium dryopteris (L.) Newman204208From plantlist2017-10-20
564VBGI[]2015-07-18Храпко О.В.Russia1622017-10-20...Сахалинская область / Sakhalin Oblast(L.) NewmandryopterisGymnocarpium dryopteris (L.) Newman204208From plantlist2017-10-20
565VBGI[]2006-08-14Галанин А.В.Russia1622017-10-20...Сахалинская обл.(Spenn.) FéebrauniiPolystichum braunii (Spenn.) Fée216417From plantlist2017-10-20
566VBGI[]1966-08-24Павлова Н.С., ПанковRussia1622017-10-31...Сахалинская область / Sakhalin OblastR. Br.acrostichoidesCryptogramma acrostichoides R. Br.485069From plantlist2017-10-31
567VBGI[]1971-07-11Егорова Е.М.Russia1622017-11-08...Сахалинская область / Sakhalin Oblast(Turcz. ex Kunze) Sa. KuratasibiricumDiplazium sibiricum (Turcz. ex Kunze) Sa. Kurata62611From plantlist2017-11-08
568VBGI[]1980-06-24Недолужко В.А.Russia1622017-11-09...Сахалинская область / Sakhalin Oblast(S.G. Gmel.) ÅngströmlanceolatumBotrychium lanceolatum (S.G. Gmel.) Ångström381807From plantlist2017-11-09
569VBGI[]1986-07-31Недолужко В.А., Стародубцев В.Н.Russia1622017-11-09...Сахалинская область / Sakhalin Oblast(Rupr.) Underw.robustumBotrychium robustum (Rupr.) Underw.381844From plantlist2017-11-09
570VBGI[]1987-09-11Стеценко Н.М.Russia1622017-11-09...Сахалинская область / Sakhalin Oblast(Rupr.) Underw.robustumBotrychium robustum (Rupr.) Underw.381844From plantlist2017-11-09
571VBGI[]1969-09-25Алексеева Л.М.Russia1622017-11-09...Сахалинская область / Sakhalin Oblast(Rupr.) Underw.robustumBotrychium robustum (Rupr.) Underw.381844From plantlist2017-11-09
572VBGI[]1974-08-09Ворошилова Г.И., Гвоздева И., Карпова Е., Опри...Russia1622017-11-09...Сахалинская область / Sakhalin Oblast(Rupr.) Underw.robustumBotrychium robustum (Rupr.) Underw.381844From plantlist2017-11-09
573VBGI[]1406Bryophyte herbarium2006-08-17V.A. BakalinRussia1622017-11-10...Central part of Sakhalin Island. Nabilsky Rang...Дальний Восток|Russian Far EastRev. by V.A. Bakalin: Ok! Jun 2016Steph.japonicaNardia japonica Steph.588500Approved2017-11-10
\n", "

549 rows × 41 columns

\n", "
" ], "text/plain": [ " acronym additionals altitude branch \\\n", "0 VBGI [] 792 \n", "1 VBGI [] 1042 \n", "2 VBGI [] 792 \n", "3 VBGI [] 1042 \n", "4 VBGI [] 1042 \n", "5 VBGI [] 1042 \n", "6 VBGI [] 792 \n", "7 VBGI [] 1042 \n", "8 VBGI [] 192 \n", "9 VBGI [] 192 \n", "10 VBGI [] 26 \n", "11 VBGI [] 26 \n", "12 VBGI [] 250 \n", "13 VBGI [] 250 \n", "14 VBGI [] 170 \n", "15 VBGI [] 120 \n", "16 VBGI [] 160 \n", "18 VBGI [] 50 \n", "19 VBGI [] 380 \n", "20 VBGI [] 40 \n", "21 VBGI [] 40 \n", "22 VBGI [] 40 \n", "23 VBGI [] 70 \n", "24 VBGI [] 140 \n", "25 VBGI [] 15 \n", "27 VBGI [] 30 \n", "28 VBGI [] 150 \n", "29 VBGI [] 60 \n", "30 VBGI [] 60 \n", "31 VBGI [] 70 \n", ".. ... ... ... ... \n", "536 VBGI [] \n", "537 VBGI [] \n", "538 VBGI [] \n", "539 VBGI [] \n", "540 VBGI [] \n", "541 VBGI [] \n", "542 VBGI [] \n", "543 VBGI [] \n", "544 VBGI [] \n", "547 SAKH [] 52-112 Herbarium of Vascular Plants \n", "548 SAKH [] 52-112 Herbarium of Vascular Plants \n", "551 VBGI [] 382 \n", "552 VBGI [] \n", "553 VBGI [] \n", "554 VBGI [] \n", "558 VBGI [] \n", "560 VBGI [] \n", "561 VBGI [] \n", "562 VBGI [] \n", "563 VBGI [] \n", "564 VBGI [] \n", "565 VBGI [] \n", "566 VBGI [] \n", "567 VBGI [] \n", "568 VBGI [] \n", "569 VBGI [] \n", "570 VBGI [] \n", "571 VBGI [] \n", "572 VBGI [] \n", "573 VBGI [] 1406 Bryophyte herbarium \n", "\n", " collection_finished collection_started \\\n", "0 2016-10-01 \n", "1 2016-10-01 \n", "2 2016-10-01 \n", "3 2016-10-01 \n", "4 2016-10-01 \n", "5 2016-10-01 \n", "6 2016-10-01 \n", "7 2016-10-01 \n", "8 2016-09-29 \n", "9 2016-09-29 \n", "10 2016-09-30 \n", "11 2016-09-30 \n", "12 2016-09-29 \n", "13 2016-09-29 \n", "14 2016-06-09 2016-06-09 \n", "15 2016-06-21 2016-06-21 \n", "16 2016-06-16 2016-06-16 \n", "18 2015-06-28 2015-06-28 \n", "19 2015-08-13 2015-08-13 \n", "20 2016-07-16 2016-07-16 \n", "21 2016-07-16 2016-07-16 \n", "22 2016-07-16 2016-07-16 \n", "23 2015-06-27 2015-06-27 \n", "24 2015-07-12 2015-07-12 \n", "25 2015-06-26 2015-06-26 \n", "27 2015-06-28 2015-06-28 \n", "28 2016-06-21 2016-06-21 \n", "29 2016-07-17 2016-07-17 \n", "30 2016-07-17 2016-07-17 \n", "31 2016-09-17 2016-09-17 \n", ".. ... ... \n", "536 2016-07-07 \n", "537 2008-07-25 \n", "538 2014-07-04 \n", "539 2008-07-15 \n", "540 2008-07-15 \n", "541 1995-07-10 \n", "542 2012-07-09 \n", "543 2017-07-04 \n", "544 2008-07-12 \n", "547 1994-06-10 \n", "548 \n", "551 1995-07-11 \n", "552 2012-07-09 \n", "553 2016-07-07 \n", "554 2012-07-09 \n", "558 1997-10-03 \n", "560 1980-06-24 \n", "561 1980-06-25 \n", "562 1966-07-27 \n", "563 1991-07-22 \n", "564 2015-07-18 \n", "565 2006-08-14 \n", "566 1966-08-24 \n", "567 1971-07-11 \n", "568 1980-06-24 \n", "569 1986-07-31 \n", "570 1987-09-11 \n", "571 1969-09-25 \n", "572 1974-08-09 \n", "573 2006-08-17 \n", "\n", " collectors country country_id \\\n", "0 Пименова Е.А. Russia 162 \n", "1 Пименова Е.А. Russia 162 \n", "2 Пименова Е.А. Russia 162 \n", "3 Пименова Е.А. Russia 162 \n", "4 Пименова Е.А. Russia 162 \n", "5 Пименова Е.А. Russia 162 \n", "6 Пименова Е.А. Russia 162 \n", "7 Пименова Е.А. Russia 162 \n", "8 Пименова Е.А. Russia 162 \n", "9 Пименова Е.А. Russia 162 \n", "10 Пименова Е.А. Russia 162 \n", "11 Пименова Е.А. Russia 162 \n", "12 Пименова Е.А. Russia 162 \n", "13 Пименова Е.А. Russia 162 \n", "14 Корзников К.А. Russia 162 \n", "15 Корзников К.А. Russia 162 \n", "16 Корзников К.А. Russia 162 \n", "18 Корзников К.А. Russia 162 \n", "19 Корзников К.А., Попова К.Б. Russia 162 \n", "20 Корзников К.А. Russia 162 \n", "21 Корзников К.А. Russia 162 \n", "22 Корзников К.А. Russia 162 \n", "23 Корзников К.А. Russia 162 \n", "24 Корзников К.А. Russia 162 \n", "25 Корзников К.А. Russia 162 \n", "27 Корзников К.А. Russia 162 \n", "28 Корзников К.А. Russia 162 \n", "29 Корзников К.А. Russia 162 \n", "30 Корзников К.А. Russia 162 \n", "31 Корзников К.А. Russia 162 \n", ".. ... ... ... \n", "536 Храпко О.В. Russia 162 \n", "537 Храпко О.В. Russia 162 \n", "538 Храпко О.В. Russia 162 \n", "539 Храпко О.В., Царенко Н.А. Russia 162 \n", "540 Храпко О.В., Царенко Н.А. Russia 162 \n", "541 Дудкин Р.В., Тесленко В.В. Russia 162 \n", "542 Храпко О.В. Russia 162 \n", "543 Храпко О.В. Russia 162 \n", "544 Храпко О.В., Царенко Н.А., Богачева А.В. Russia 162 \n", "547 А. Таран Russia 162 \n", "548 А. Таран Russia 162 \n", "551 Дудкин Р.В., Тесленко В.В. Russia 162 \n", "552 Храпко О.В. Russia 162 \n", "553 Храпко О.В. Russia 162 \n", "554 Храпко О.В. Russia 162 \n", "558 Недолужко В.А., Денисов Н.И. Russia 162 \n", "560 Недолужко В.А. Russia 162 \n", "561 Недолужко В.А. Russia 162 \n", "562 Недолужко В.А., Стародубцев В.Н. Russia 162 \n", "563 Храпко О.В. Russia 162 \n", "564 Храпко О.В. Russia 162 \n", "565 Галанин А.В. Russia 162 \n", "566 Павлова Н.С., Панков Russia 162 \n", "567 Егорова Е.М. Russia 162 \n", "568 Недолужко В.А. Russia 162 \n", "569 Недолужко В.А., Стародубцев В.Н. Russia 162 \n", "570 Стеценко Н.М. Russia 162 \n", "571 Алексеева Л.М. Russia 162 \n", "572 Ворошилова Г.И., Гвоздева И., Карпова Е., Опри... Russia 162 \n", "573 V.A. Bakalin Russia 162 \n", "\n", " created ... \\\n", "0 2017-01-16 ... \n", "1 2017-01-16 ... \n", "2 2017-01-16 ... \n", "3 2017-01-16 ... \n", "4 2017-01-16 ... \n", "5 2017-01-16 ... \n", "6 2017-01-16 ... \n", "7 2017-01-16 ... \n", "8 2017-01-16 ... \n", "9 2017-01-16 ... \n", "10 2017-01-16 ... \n", "11 2017-01-16 ... \n", "12 2017-02-09 ... \n", "13 2017-02-09 ... \n", "14 2017-02-10 ... \n", "15 2017-02-10 ... \n", "16 2017-02-10 ... \n", "18 2017-02-10 ... \n", "19 2017-02-10 ... \n", "20 2017-02-10 ... \n", "21 2017-02-10 ... \n", "22 2017-02-10 ... \n", "23 2017-02-10 ... \n", "24 2017-02-10 ... \n", "25 2017-02-10 ... \n", "27 2017-02-12 ... \n", "28 2017-02-12 ... \n", "29 2017-02-12 ... \n", "30 2017-02-12 ... \n", "31 2017-02-12 ... \n", ".. ... ... \n", "536 2017-10-12 ... \n", "537 2017-10-12 ... \n", "538 2017-10-13 ... \n", "539 2017-10-13 ... \n", "540 2017-10-13 ... \n", "541 2017-10-13 ... \n", "542 2017-10-16 ... \n", "543 2017-10-16 ... \n", "544 2017-10-16 ... \n", "547 2017-10-18 ... \n", "548 2017-10-18 ... \n", "551 2017-10-19 ... \n", "552 2017-10-19 ... \n", "553 2017-10-19 ... \n", "554 2017-10-19 ... \n", "558 2017-10-19 ... \n", "560 2017-10-20 ... \n", "561 2017-10-20 ... \n", "562 2017-10-20 ... \n", "563 2017-10-20 ... \n", "564 2017-10-20 ... \n", "565 2017-10-20 ... \n", "566 2017-10-31 ... \n", "567 2017-11-08 ... \n", "568 2017-11-09 ... \n", "569 2017-11-09 ... \n", "570 2017-11-09 ... \n", "571 2017-11-09 ... \n", "572 2017-11-09 ... \n", "573 2017-11-10 ... \n", "\n", " note \\\n", "0 \n", "1 \n", "2 \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 одиночное крупное дерево \n", "13 одиночное крупное дерево \n", "14 \n", "15 \n", "16 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 \n", "23 \n", "24 \n", "25 \n", "27 \n", "28 \n", "29 \n", "30 \n", "31 \n", ".. ... \n", "536 \n", "537 \n", "538 \n", "539 \n", "540 \n", "541 \n", "542 \n", "543 \n", "544 \n", "547 \n", "548 \n", "551 \n", "552 \n", "553 \n", "554 \n", "558 \n", "560 \n", "561 \n", "562 \n", "563 \n", "564 \n", "565 \n", "566 \n", "567 \n", "568 \n", "569 \n", "570 \n", "571 \n", "572 \n", "573 Central part of Sakhalin Island. Nabilsky Rang... \n", "\n", " region \\\n", "0 Сахалинская обл. \n", "1 Сахалинская обл. \n", "2 Сахалинская обл. \n", "3 Сахалинская обл. \n", "4 Сахалинская обл. \n", "5 Сахалинская обл. \n", "6 Сахалинская обл. \n", "7 Сахалинская обл. \n", "8 Сахалинская обл. \n", "9 Сахалинская обл. \n", "10 Сахалинская обл. \n", "11 Сахалинская обл. \n", "12 Сахалинская обл., \n", "13 Сахалинская обл., \n", "14 Сахалинская область / Sakhalin Oblast \n", "15 Сахалинская область \n", "16 Сахалинская область \n", "18 Сахалинская область / Sakhalin Oblast \n", "19 Сахалинская область / Sakhalin Oblast \n", "20 Сахалинская область / Sakhalin Oblast \n", "21 Сахалинская область / Sakhalin Oblast \n", "22 Сахалинская область / Sakhalin Oblast \n", "23 Сахалинская область / Sakhalin Oblast \n", "24 Сахалинская область / Sakhalin Oblast \n", "25 Сахалинская область / Sakhalin Oblast \n", "27 Сахалинская область / Sakhalin Oblast \n", "28 Сахалинская область / Sakhalin Oblast \n", "29 Сахалинская область / Sakhalin Oblast \n", "30 Сахалинская область / Sakhalin Oblast \n", "31 Сахалинская область / Sakhalin Oblast \n", ".. ... \n", "536 Сахалинская область / Sakhalin Oblast \n", "537 Сахалинская область / Sakhalin Oblast \n", "538 Сахалинская область / Sakhalin Oblast \n", "539 Сахалинская область / Sakhalin Oblast \n", "540 Сахалинская область \n", "541 Сахалинская область / Sakhalin Oblast \n", "542 Сахалинская область / Sakhalin Oblast \n", "543 Сахалинская область / Sakhalin Oblast \n", "544 Сахалинская область / Sakhalin Oblast \n", "547 Сахалинская область / Sakhalin Oblast \n", "548 Сахалинская область / Sakhalin Oblast \n", "551 Сахалинская область / Sakhalin Oblast \n", "552 Сахалинская область / Sakhalin Oblast \n", "553 Сахалинская область / Sakhalin Oblast \n", "554 Сахалинская область / Sakhalin Oblast \n", "558 Сахалинская область / Sakhalin Oblast \n", "560 Сахалинская область / Sakhalin Oblast \n", "561 Сахалинская область / Sakhalin Oblast \n", "562 Сахалинская область / Sakhalin Oblast \n", "563 Сахалинская область / Sakhalin Oblast \n", "564 Сахалинская область / Sakhalin Oblast \n", "565 Сахалинская обл. \n", "566 Сахалинская область / Sakhalin Oblast \n", "567 Сахалинская область / Sakhalin Oblast \n", "568 Сахалинская область / Sakhalin Oblast \n", "569 Сахалинская область / Sakhalin Oblast \n", "570 Сахалинская область / Sakhalin Oblast \n", "571 Сахалинская область / Sakhalin Oblast \n", "572 Сахалинская область / Sakhalin Oblast \n", "573 Дальний Восток|Russian Far East \n", "\n", " short_note significance \\\n", "0 \n", "1 \n", "2 \n", "3 \n", "4 \n", "5 \n", "6 \n", "7 \n", "8 \n", "9 \n", "10 \n", "11 \n", "12 \n", "13 \n", "14 \n", "15 \n", "16 \n", "18 \n", "19 \n", "20 \n", "21 \n", "22 \n", "23 \n", "24 \n", "25 \n", "27 \n", "28 \n", "29 \n", "30 \n", "31 \n", ".. ... ... \n", "536 \n", "537 \n", "538 \n", "539 \n", "540 \n", "541 \n", "542 \n", "543 \n", "544 \n", "547 \n", "548 \n", "551 \n", "552 \n", "553 \n", "554 \n", "558 \n", "560 \n", "561 \n", "562 \n", "563 \n", "564 \n", "565 \n", "566 \n", "567 \n", "568 \n", "569 \n", "570 \n", "571 \n", "572 \n", "573 Rev. by V.A. Bakalin: Ok! Jun 2016 \n", "\n", " species_authorship species_epithet \\\n", "0 F.Schmidt ssiori \n", "1 Nakai axillare \n", "2 F.Schmidt rugosa \n", "3 (Koidz.) H.Ohba nipponica \n", "4 (Cham. & Schltdl.) M.Roem. sambucifolia \n", "5 A.Gray smallii \n", "6 Jancz. latifolium \n", "7 Hult‚n beauverdiana \n", "8 Cham. ermanii \n", "9 Cham. ermanii \n", "10 Blume crispula \n", "11 Blume crispula \n", "12 L. regia \n", "13 L. regia \n", "14 (L.) Scop. odoratum \n", "15 Rupr. macroptera \n", "16 (F.Schmidt) Maxim. sachalinensis \n", "18 (L.) Schott fragrans \n", "19 (Kunze) C. Presl tripteron \n", "20 H. Lév. fauriei \n", "21 H. Lév. fauriei \n", "22 H. Lév. fauriei \n", "23 (L.) DC. amplexifolius \n", "24 (Thunb.) Makino cordatum \n", "25 (L.) Ker Gawl. camschatcensis \n", "27 (L.) Sw. lunaria \n", "28 (F. Schmidt) Sarg. sachalinense \n", "29 (F. Schmidt) Sarg. sachalinense \n", "30 (F. Schmidt) Sarg. sachalinense \n", "31 Nakai repens \n", ".. ... ... \n", "536 (C. Presl) Fraser-Jenk. & Jermy expansa \n", "537 (L.) Kuhn aquilinum \n", "538 (L.) Roth filix-femina \n", "539 Rupr. sinense \n", "540 Rupr. sinense \n", "541 (L.) Schott fragrans \n", "542 (Fern.) Tagawa asiaticum \n", "543 (Fern.) Tagawa asiaticum \n", "544 (Fern.) Tagawa asiaticum \n", "547 Ching chinensis \n", "548 L. annotinum \n", "551 Huds. viride \n", "552 (C. Presl) Fraser-Jenk. & Jermy expansa \n", "553 (C. Presl) Fraser-Jenk. & Jermy expansa \n", "554 (C. Presl) Fraser-Jenk. & Jermy expansa \n", "558 Tzvelev amurensis \n", "560 (L.) Sw. lunaria \n", "561 (Rupr.) Underw. robustum \n", "562 (L.) Bernh. fragilis \n", "563 (L.) Newman dryopteris \n", "564 (L.) Newman dryopteris \n", "565 (Spenn.) Fée braunii \n", "566 R. Br. acrostichoides \n", "567 (Turcz. ex Kunze) Sa. Kurata sibiricum \n", "568 (S.G. Gmel.) Ångström lanceolatum \n", "569 (Rupr.) Underw. robustum \n", "570 (Rupr.) Underw. robustum \n", "571 (Rupr.) Underw. robustum \n", "572 (Rupr.) Underw. robustum \n", "573 Steph. japonica \n", "\n", " species_fullname species_id \\\n", "0 Prunus ssiori F.Schmidt 506834 \n", "1 Vaccinium axillare Nakai 225901 \n", "2 Ilex rugosa F.Schmidt 44334 \n", "3 Cerasus nipponica (Koidz.) H.Ohba 499916 \n", "4 Sorbus sambucifolia (Cham. & Schltdl.) M.Roem. 518523 \n", "5 Vaccinium smallii A.Gray 226494 \n", "6 Ribes latifolium Jancz. 251865 \n", "7 Spiraea beauverdiana Hult‚n 518694 \n", "8 Betula ermanii Cham. 68288 \n", "9 Betula ermanii Cham. 68288 \n", "10 Quercus crispula Blume 588219 \n", "11 Quercus crispula Blume 588219 \n", "12 Juglans regia L. 265223 \n", "13 Juglans regia L. 265223 \n", "14 Galium odoratum (L.) Scop. 523442 \n", "15 Euonymus macroptera Rupr. 588266 \n", "16 Euonymus sachalinensis (F.Schmidt) Maxim. 114805 \n", "18 Dryopteris fragrans (L.) Schott 212858 \n", "19 Polystichum tripteron (Kunze) C. Presl 216977 \n", "20 Cardamine fauriei H. Lév. 588274 \n", "21 Cardamine fauriei H. Lév. 588274 \n", "22 Cardamine fauriei H. Lév. 588274 \n", "23 Streptopus amplexifolius (L.) DC. 330252 \n", "24 Cardiocrinum cordatum (Thunb.) Makino 329621 \n", "25 Fritillaria camschatcensis (L.) Ker Gawl. 329686 \n", "27 Botrychium lunaria (L.) Sw. 381813 \n", "28 Phellodendron sachalinense (F. Schmidt) Sarg. 537480 \n", "29 Phellodendron sachalinense (F. Schmidt) Sarg. 537480 \n", "30 Phellodendron sachalinense (F. Schmidt) Sarg. 537480 \n", "31 Skimmia repens Nakai 537822 \n", ".. ... ... \n", "536 Dryopteris expansa (C. Presl) Fraser-Jenk. & J... 212819 \n", "537 Pteridium aquilinum (L.) Kuhn 205696 \n", "538 Athyrium filix-femina (L.) Roth 61481 \n", "539 Athyrium sinense Rupr. 61829 \n", "540 Athyrium sinense Rupr. 61829 \n", "541 Dryopteris fragrans (L.) Schott 212858 \n", "542 Osmundastrum asiaticum (Fern.) Tagawa 591052 \n", "543 Osmundastrum asiaticum (Fern.) Tagawa 591052 \n", "544 Osmundastrum asiaticum (Fern.) Tagawa 591052 \n", "547 Huperzia chinensis Ching 336147 \n", "548 Lycopodium annotinum L. 336427 \n", "551 Asplenium viride Huds. 60611 \n", "552 Dryopteris expansa (C. Presl) Fraser-Jenk. & J... 212819 \n", "553 Dryopteris expansa (C. Presl) Fraser-Jenk. & J... 212819 \n", "554 Dryopteris expansa (C. Presl) Fraser-Jenk. & J... 212819 \n", "558 Leptorumohra amurensis Tzvelev 215409 \n", "560 Botrychium lunaria (L.) Sw. 381813 \n", "561 Botrychium robustum (Rupr.) Underw. 381844 \n", "562 Cystopteris fragilis (L.) Bernh. 204147 \n", "563 Gymnocarpium dryopteris (L.) Newman 204208 \n", "564 Gymnocarpium dryopteris (L.) Newman 204208 \n", "565 Polystichum braunii (Spenn.) Fée 216417 \n", "566 Cryptogramma acrostichoides R. Br. 485069 \n", "567 Diplazium sibiricum (Turcz. ex Kunze) Sa. Kurata 62611 \n", "568 Botrychium lanceolatum (S.G. Gmel.) Ångström 381807 \n", "569 Botrychium robustum (Rupr.) Underw. 381844 \n", "570 Botrychium robustum (Rupr.) Underw. 381844 \n", "571 Botrychium robustum (Rupr.) Underw. 381844 \n", "572 Botrychium robustum (Rupr.) Underw. 381844 \n", "573 Nardia japonica Steph. 588500 \n", "\n", " species_status updated \n", "0 From plantlist 2017-06-13 \n", "1 From plantlist 2017-06-13 \n", "2 From plantlist 2017-06-13 \n", "3 From plantlist 2017-06-13 \n", "4 From plantlist 2017-06-13 \n", "5 From plantlist 2017-06-13 \n", "6 From plantlist 2017-06-13 \n", "7 From plantlist 2017-06-13 \n", "8 From plantlist 2017-06-13 \n", "9 From plantlist 2017-06-13 \n", "10 Recently added 2017-06-13 \n", "11 Recently added 2017-06-13 \n", "12 From plantlist 2017-06-13 \n", "13 From plantlist 2017-06-13 \n", "14 From plantlist 2017-06-13 \n", "15 Approved 2017-06-13 \n", "16 From plantlist 2017-06-13 \n", "18 From plantlist 2017-06-13 \n", "19 From plantlist 2017-06-13 \n", "20 Recently added 2017-06-13 \n", "21 Recently added 2017-06-13 \n", "22 Recently added 2017-06-13 \n", "23 From plantlist 2017-06-13 \n", "24 From plantlist 2017-06-13 \n", "25 From plantlist 2017-06-13 \n", "27 From plantlist 2017-06-13 \n", "28 From plantlist 2017-06-13 \n", "29 From plantlist 2017-06-13 \n", "30 From plantlist 2017-06-13 \n", "31 From plantlist 2017-06-13 \n", ".. ... ... \n", "536 From plantlist 2017-10-12 \n", "537 From plantlist 2017-10-12 \n", "538 From plantlist 2017-10-13 \n", "539 From plantlist 2017-10-13 \n", "540 From plantlist 2017-10-13 \n", "541 From plantlist 2017-10-13 \n", "542 Approved 2017-10-16 \n", "543 Approved 2017-10-16 \n", "544 Approved 2017-10-16 \n", "547 From plantlist 2017-10-18 \n", "548 From plantlist 2017-10-18 \n", "551 From plantlist 2017-10-19 \n", "552 From plantlist 2017-10-19 \n", "553 From plantlist 2017-10-19 \n", "554 From plantlist 2017-10-19 \n", "558 From plantlist 2017-10-19 \n", "560 From plantlist 2017-10-20 \n", "561 From plantlist 2017-10-20 \n", "562 From plantlist 2017-10-20 \n", "563 From plantlist 2017-10-20 \n", "564 From plantlist 2017-10-20 \n", "565 From plantlist 2017-10-20 \n", "566 From plantlist 2017-10-31 \n", "567 From plantlist 2017-11-08 \n", "568 From plantlist 2017-11-09 \n", "569 From plantlist 2017-11-09 \n", "570 From plantlist 2017-11-09 \n", "571 From plantlist 2017-11-09 \n", "572 From plantlist 2017-11-09 \n", "573 Approved 2017-11-10 \n", "\n", "[549 rows x 41 columns]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sakhalin_filtered" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(574, 41)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sakhalin_data_in_bbox.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we will find ID's of the points belonging to the bounding box of Sakhalin Island, but not to its countour (coastline) defined in the shapefile." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1403,\n", " 1412,\n", " 1432,\n", " 1434,\n", " 1438,\n", " 1439,\n", " 1529,\n", " 10015,\n", " 10016,\n", " 10373,\n", " 19819,\n", " 19820,\n", " 19823,\n", " 19912,\n", " 20830,\n", " 20832,\n", " 30563,\n", " 31010,\n", " 31032,\n", " 31079,\n", " 31080,\n", " 31152,\n", " 31153,\n", " 31154,\n", " 31161}" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(sakhalin_data_in_bbox.id.values) - set(sakhalin_filtered.id.values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inspecting positions of the filtered points, e.g. ID=1412 (see http://botsad.ru/hitem/1412), one can conclude\n", "that all filtered records were collected near the coastline; this is probably caused by errors in herbarium records and coastline points positioning.So, that isn't a true error, but such cases should be taken into account when do filtering by polygonal areas." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets find herbarium records collected in the proximity of Petropavlovsk-Kamchatsky city.\n", "Firstly, we set coordinates of the center of Petropavlovsk-Kamchatsky city and define a bounding box that includes 200-km circle around this point:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "kamchatka_bbox = [151.1, 47.8, 172.0, 58.3]\n", "petropavlovsk_coords = (53.145992, 158.683548)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Earth shape isn't a prefect sphere, so we need an additional tool that provides a function to get estimation of distances between geographically distributed points.\n", "`Geopy` package provides necessary functionality to do distance computation." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(306, 41)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from geopy.distance import vincenty\n", "query_kamchatka_bbox = tuple(zip(['lonl', 'latl', 'lonu', 'latu'], map(str, kamchatka_bbox)))\n", "near_petropavlovsk_kamchatsky_url = HERBARIUM_SEARCH_URL + '?' + '&'.join(map(lambda x: x[0] + '=' + quote(x[1].strip()), query_kamchatka_bbox))\n", "server_response = urlopen(near_petropavlovsk_kamchatsky_url)\n", "petropavlovsk_data_in_bbox = pd.DataFrame(json.loads(server_response.read().decode('utf-8'))['data'])\n", "petropavlovsk_data_in_bbox.shape" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "petropavlovsk_filtered = petropavlovsk_data_in_bbox[[vincenty((lat, lon), petropavlovsk_coords).km < 200.0 for lat,lon in zip(petropavlovsk_data_in_bbox.latitude, petropavlovsk_data_in_bbox.longitude)]]" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(146, 41)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "petropavlovsk_filtered.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When the datasets are obtained, we can carry out some investigations (e.g. comparison analysis):" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of unique genera in 200 km circle around the Petropavlovsk-Kamchatsky city: 64\n" ] } ], "source": [ "print('The number of unique genera in 200 km circle around the Petropavlovsk-Kamchatsky city:', len(petropavlovsk_filtered.genus.unique()))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of unique species in 200-km circle around the Petropavlovsk-Kamchatsky city: 78\n" ] } ], "source": [ "print('The number of unique species in 200-km circle around the Petropavlovsk-Kamchatsky city:', len(petropavlovsk_filtered.species_id.unique()))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of unique genera at Sakhalin Island: 211\n" ] } ], "source": [ "print('The number of unique genera at Sakhalin Island:', len(sakhalin_filtered.species_id.unique()))" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The number of unique species at Sakhalin Island: 136\n" ] } ], "source": [ "print('The number of unique species at Sakhalin Island:', len(sakhalin_filtered.genus.unique()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's count frequencies:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from collections import Counter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Genera frequencies near the Petropavlovsk-Kamchatsky city" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Riccardia 0.061644\n", "Aneura 0.061644\n", "Dryopteris 0.047945\n", "Moerckia 0.047945\n", "Peltolepis 0.041096\n", "Botrychium 0.041096\n", "Nardia 0.041096\n", "Conocephalum 0.034247\n", "Gymnocarpium 0.027397\n", "Calycularia 0.027397\n", "Pellia 0.027397\n", "Cystopteris 0.020548\n", "Calamagrostis 0.020548\n", "Lunathyrium 0.020548\n", "Polystichum 0.020548\n", "Preissia 0.020548\n", "Sauteria 0.020548\n", "Athyrium 0.020548\n", "Phegopteris 0.020548\n", "Marchantia 0.020548\n", "Agrostis 0.013699\n", "Cryptogramma 0.013699\n", "Stellaria 0.013699\n", "Blasia 0.013699\n", "Draba 0.013699\n", "Euphrasia 0.013699\n", "Oreopteris 0.013699\n", "Salix 0.013699\n", "Saxifraga 0.006849\n", "Gentianella 0.006849\n", " ... \n", "Lophozia 0.006849\n", "Papaver 0.006849\n", "Huperzia 0.006849\n", "Abies 0.006849\n", "Andromeda 0.006849\n", "Myrica 0.006849\n", "Dryas 0.006849\n", "Anaphalis 0.006849\n", "Arnica 0.006849\n", "Ermania 0.006849\n", "Myosotis 0.006849\n", "Chamaedaphne 0.006849\n", "Parnassia 0.006849\n", "Cardaminopsis 0.006849\n", "Eriophorum 0.006849\n", "Sagina 0.006849\n", "Erigeron 0.006849\n", "Urtica 0.006849\n", "Fritillaria 0.006849\n", "Trollius 0.006849\n", "Metasolenostoma 0.006849\n", "Oxytropis 0.006849\n", "Trientalis 0.006849\n", "Mannia 0.006849\n", "Douglasia 0.006849\n", "Equisetum 0.006849\n", "Tephroseris 0.006849\n", "Cardamine 0.006849\n", "Rubus 0.006849\n", "Saussurea 0.006849\n", "Name: genus, Length: 64, dtype: float64" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "petropavlovsk_freq = petropavlovsk_filtered.genus.value_counts() / len(petropavlovsk_filtered)\n", "petropavlovsk_freq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Genera frequencies at Sakhalin Island:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Porella 0.071038\n", "Riccardia 0.040073\n", "Conocephalum 0.038251\n", "Dryopteris 0.030965\n", "Gymnocarpium 0.027322\n", "Jungermannia 0.025501\n", "Preissia 0.023679\n", "Scapania 0.023679\n", "Lophozia 0.023679\n", "Peltolepis 0.021858\n", "Leptorumohra 0.021858\n", "Asarum 0.021858\n", "Marchantia 0.020036\n", "Nardia 0.020036\n", "Mesoptychia 0.020036\n", "Cephalozia 0.018215\n", "Calypogeia 0.018215\n", "Frullania 0.016393\n", "Blepharostoma 0.016393\n", "Phegopteris 0.014572\n", "Botrychium 0.014572\n", "Sauteria 0.014572\n", "Mylia 0.014572\n", "Sphenolobus 0.012750\n", "Lejeunea 0.012750\n", "Woodsia 0.010929\n", "Orthocaulis 0.010929\n", "Pellia 0.010929\n", "Leiocolea 0.010929\n", "Reboulia 0.009107\n", " ... \n", "Primula 0.001821\n", "Vitis 0.001821\n", "Brylkinia 0.001821\n", "Fritillaria 0.001821\n", "Larix 0.001821\n", "Pteridium 0.001821\n", "Spiraea 0.001821\n", "Lophoziopsis 0.001821\n", "Hierochloe 0.001821\n", "Seligeria 0.001821\n", "Ilex 0.001821\n", "Lycopodium 0.001821\n", "Orthothecium 0.001821\n", "Thuidiaceae 0.001821\n", "Artemisia 0.001821\n", "Geranium 0.001821\n", "Androsace 0.001821\n", "Schistidium 0.001821\n", "Plagiochasma 0.001821\n", "Asplenium 0.001821\n", "Solenostoma 0.001821\n", "Malva 0.001821\n", "Cardiocrinum 0.001821\n", "Corydalis 0.001821\n", "Calycularia 0.001821\n", "Beckmannia 0.001821\n", "Matteuccia 0.001821\n", "Tetraplodon 0.001821\n", "Monotropastrum 0.001821\n", "Sanguisorba 0.001821\n", "Name: genus, Length: 136, dtype: float64" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sakhalin_freq = sakhalin_filtered.genus.value_counts() / len(sakhalin_filtered)\n", "sakhalin_freq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shannon's informational measures:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6.3251019029259146" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shannon_sakhalin = - sum(np.log2(sakhalin_freq.values) * sakhalin_freq.values)\n", "shannon_sakhalin" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.564519271608396" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shannon_petropavlovsk = - sum(np.log2(petropavlovsk_freq.values) * petropavlovsk_freq.values)\n", "shannon_petropavlovsk" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Relative values of informational measures (relative to its theoretically maximal value):" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.89243528249808335" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shannon_sakhalin_relative = shannon_sakhalin / np.log2(len(sakhalin_freq))\n", "shannon_sakhalin_relative" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.92741987860139929" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shannon_petropavlovsk_relative = shannon_petropavlovsk / np.log2(len(petropavlovsk_freq))\n", "shannon_petropavlovsk_relative" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note:** One can be confused looking at the results: genus diversity near the Petropavlovsk-Kamchatsky city is greater than on Sakhalin Island; this could be caused by lots of impacts -- such as Herbarium database filling peculiarities (the database filling is still in progress...) and just by a statistical ambiguity; records in the database are collected in a non-random and/or non-regular way that, in turn, may lead to fake conclusions. So, be careful making any conclusions... " ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Date of last code execution: 2017-11-12 11:31:02.205075\n" ] } ], "source": [ "import datetime\n", "print(\"Date of last code execution: \", datetime.datetime.now())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }