Journal archives for October 2018

October 13, 2018

Nathan and Cassi Saari's tips (bouteloua) and tricks pos

If a "Place" doesn't seem to have observations, I click Explore on the main observation page, then go to the Map view and zoom in to approximately the area I want and click "redo search in map area" which then gives me all the observations in the zoomed area. There may be better ways to get what you want, but this is the best I've found to let me review what has been seen somewhere I plan to visit, even when the "Place" search does not work.
--

It's verifiable=false, though, so:
https://www.inaturalist.org/observations?place_id=any&user_id=reiner&verifiable=false

You can currently find them through the Identify page UI if you change to reviewed=any, sort by your username, and change the quality grade:
https://www.inaturalist.org/observations/identify?reviewed=any&quality_grade=casual&user_id=reiner
==

https://www.inaturalist.org/journal/nathantaylor7583
Cassi Saari's tips (bouteloua) and tricks pos

https://www.inaturalist.org/pages/how+can+i+use+it
Try checking the Identify section, searching for observations without identifications,
http://www.inaturalist.org/observations?has[]=photos&iconic_taxa[]=unknown
or searching for observations that still need to get down to species.
https://www.inaturalist.org/observations?has[]=photos&lrank=genus
Or search filters allow a bunch of different ways to search, so play around!
https://www.inaturalist.org/pages/how+can+i+use+it
--
https://www.inaturalist.org/pages/tips_tricks_nz
Search Term and Tricks
https://groups.google.com/forum/#!topic/inaturalist/vqQH4FmChfE
Russell Pfau's iNat tips & tricks
https://www.inaturalist.org/people/pfau_tarleton
Cassi Saari's iNat tips & tricks
https://www.inaturalist.org/journal/bouteloua/14205-inat-tips-tricks

Since starting out on iNaturalist, I've learned a lot of nifty tricks about how to maneuver the website more efficiently. The following is pretty much a list of those for my own reference (i.e., copy and pasting), but hopefully, others will find it helpful too. I know a lot of this is pretty simple stuff to some of you. Also, be sure to remove the space after each "< " when actually using hyperlinks and when embedding pictures.

Hyperlinks
Basic format: < a href="[link]">[text]< /a>
For instance, to link to BONAP, I would type in the following without a space after each "< ":
< a href="http://bonap.net/NAPA/Genus/Traditional/County">BONAP< /a>

Embedding images
Embedding images basic format: < img src="[image link]" width=100%>
For instance, to embed the first image from this link, I would type the following without a space after each "< ":
< img src="https://static.inaturalist.org/photos/13118244/original.jpeg?1516912953" width=100%>
The link can be found by right clicking on the image you want and clicking "Copy Image Address". You can also vary the size of the photo by changing the "width" part. For instance the above address will end up with this:

However, if you modify the text to:
< img src="https://static.inaturalist.org/photos/13118244/original.jpeg?1516912953" width=50%>
it will look like this:

Bold, italics, or crossed out text
Basic format: < b>[bold text]< /b>, < i>[italic text]< /i>, or < s>[crossed out text]< /s>
You can also get bold and italic text by typing < b>< i>[text]< /b>< /i> or any other combination. You can even have all three.

Creating extra spaces.
Basic format: < br>
iNaturalist will only allow one space between paragraphs and I occasionally want more. What follows is a space followed by the < br> followed by another space:

This is what three spaces look like without < br>:

Helpful link extensions
When searching for observations, I had always wished that there was a "not" function (e.g., plants but not flowering plants or Texas but not Gaines County). It turns out there is, but it is a little more complicated than I thought. To do this, you have to add the following extensions to the end of the link. On any of these, you can exclude as many variables as you would like by adding another extension onto the previous extension. This will work for both where you can search observations and in identify.

Keep in mind that the first extension will be separated from the main part of the link by "?". Any additional extensions will be separated by "&".

Exclude taxa:
Basic format: &without_taxon_id=[Taxon ID]
Example without the extension: https://www.inaturalist.org/observations?place_id=any&subview=grid&taxon_id=47126
Example without the extension: https://www.inaturalist.org/observations?place_id=any&subview=grid&taxon_id=47126&without_taxon_id=47125
The above example includes plants but excludes flowering plants (Taxon ID: 47125).

Exclude places:
Basic format: &not_in_place=[Location ID]
Example without the extension: https://www.inaturalist.org/observations/identify?place_id=92937
Example without the extension: https://www.inaturalist.org/observations/identify?place_id=92937&not_in_place=2737&not_in_place=1207
The above example includes all observations from the Llano Estacado except the counties of Lubbock (Place ID: 2737) and Midland (Place ID: 1207).

If you want more information or more items to exclude, please go here. This is where I found out about it in the first place.

Custom bounding box
Modifying a trick I picked up here.
Basic format: &nelat=[northeast corner latitude]&nelng=[northeast corner longitude]&swlat=[southwest corner latitude]&swlng=[southwest corner longitude]
If I wanted to see all the Opuntia observations from south of Midland, west of Garden City, east of Fort Stockton, and north of Langtry, I wouldn't be able to do this with the "redo search in map" feature. However, if you really want that custom location, you can track down the coordinates of the northeast and southwest corners of the bounding box you want and plug them into the format above. In the example, it would look like this:

Extension: &nelat=32.006531&nelng=-101.504131&swlat=29.835352&swlng=-102.800566
Actual link: https://www.inaturalist.org/observations?nelat=32.006531&nelng=-101.504131&place_id=any&swlat=29.835352&swlng=-102.800566&taxon_id=47902

Note that neither the box nor the dots on the map will show up when you do this, but the greater specificity can be worth it. Another advantage, this will also work in identify:

https://www.inaturalist.org/observations/identify?taxon_id=47902&nelat=32.006531&nelng=-101.504131&swlat=29.835352&swlng=-102.800566

Searching for observations with annotations
Basic extension: &term_id=[#]&term_id=[#]
This will require two extensions, one for the type of annotation (like sex) and one for the actual annotation (like male). Add without_ between & and term for observations without an annotation. What follows is a list of IDs for each annotation.

1. lifestage: -2. adult -3. teneral -4. pupa -5. nymph -6. larva -7. egg -8. juvenile -16. subimago
9. sex: -10. femle -11. male
12. plant phenology: -13. flowering -14. fruiting -15. budding

To display only observations of plants in flower, you would add the extension: &term_id=12&term_id=13. You can see this in the example here: https://www.inaturalist.org/observations?place_id=64815&subview=grid&taxon_id=47126&term_id=12&term_value_id=13

Other useful links:
Cassi Saari's tips (bouteloua) and tricks post
Russell Pfau's (pfau_tarleton) journal posts (good tips in several journal posts)
NatureWatch NZ Tips and tricks page
iNaturalist google group
HTML tags

Other useful tips:
Searching for IDs you've made
https://www.inaturalist.org/journal/nathantaylor7583

Posted on October 13, 2018 21:19 by ahospers ahospers | 0 comments | Leave a comment

,py Downloading all the images in an exported observations file

Here's a Python alternative to Armand's PHP script (for downloading all the images in an exported observations file).
There is only the url of the first image in the csv when there are more images per observation.
--
https://groups.google.com/forum/#!topic/inaturalist/VbU36xDeP3k
When you export the observations either from http://www.inaturalist.org/observations/export or from the links form your project page, the CSV you get has an image_url column with a link to the photos.

There are browser plugins, little freeware programs, or you can write very simple scripts (perl/php etc.) that fetch photos using a list of URLs
--

#%% Constants and imports

import os
import sys
import pandas as pd
import humanfriendly
import urllib
import urllib.request
from multiprocessing.pool import ThreadPool
import time

OBSERVATION_LIST_FILE = r"D:\temp\observations-38841.csv\observations-38841.csv"
IMAGE_OUTPUT_DIR = r"D:\temp\observations-38841.csv"

# Concurrent download threads
nThreads = 250

overwriteFiles = True

# Create the output directory if necessary
if not os.path.exists(IMAGE_OUTPUT_DIR):
os.makedirs(IMAGE_OUTPUT_DIR)

#%% Read observations

print('Reading observation .csv file')
df = pd.read_csv(OBSERVATION_LIST_FILE)
print('Read {} observations'.format(len(df)))

#%% Enumerate images we want to download

ids = set()
indexedUrlList = []

for iImage, row in df.iterrows():
url = row['image_url']
id = row['id']
# Make sure the ID is unique
assert not id in ids
ids.add(id)
outputFileName = os.path.join(IMAGE_OUTPUT_DIR,'{}.jpg'.format(id))
indexedUrlList.append([iImage,url,outputFileName])
print('Fetching URL {} to {}'.format(url,outputFileName))

nImages = len(indexedUrlList)

#%% Download files in parallel (download function)

errorList = [''] * nImages

# Input should be a 3-element list: index, url, output filename
#
# Returns url, imageFilename, error
def fetch_url(indexedUrl,nImages):

assert len(indexedUrl) == 3

iImage = indexedUrl[0]
url = indexedUrl[1]
imageFilename = indexedUrl[2]
parentDir = os.path.dirname(imageFilename)

doDownload = 1

# Check whether the file already exists
if os.path.exists(imageFilename):
if overwriteFiles:
print("File {} exists, over-writing".format(imageFilename))
else:
print("File {} exists, skipping".format(imageFilename))
errorList[iImage] = 'skipped'
doDownload = 0

if doDownload:

# Make the parent directory if necessary
os.makedirs(parentDir, exist_ok=True)

# Download the file
print("Downloading file {} of {} ({}) to {}".format(iImage,nImages,url,imageFilename))
try:
urllib.request.urlretrieve(url, imageFilename)
errorList[iImage] = 'success'
sizeString = humanfriendly.format_size(os.path.getsize(imageFilename))
print("Downloaded file {} to {} ({})".format(url,imageFilename,sizeString))
except:
s = "Error downloading file {}".format(url)
print(s)
errorList[iImage] = s

return url,imageFilename,errorList[iImage]

#%% Download files in parallel (loop)

# https://stackoverflow.com/questions/16181121/a-very-simple-multithreading-parallel-url-fetching-without-queue

# time() == Time in seconds since an arbitrary historical point
start = time.time()
pool = ThreadPool(nThreads)
# results = pool.imap_unordered(lambda x: fetch_url(x,nImages), indexedUrlList)
results = pool.map(lambda x: fetch_url(x,nImages), indexedUrlList)

nErrors = 0
nSuccess = 0
nSkipped = 0

for url,imageFilename,errorString in results:
if errorString is 'success':
nSuccess = nSuccess + 1
elif errorString is 'skipped':
nSkipped = nSkipped + 1
else:
print("Error fetching {}: {}".format(url, errorString))
nErrors = nErrors + 1

downloadTime = time.time() - start

print("Elapsed Time: {} seconds".format(humanfriendly.format_timespan(downloadTime)))

# estimate_ss_download.estimate_ss_download(nImages,-1,downloadTime)

print("Attempted to download {} images".format(nImages))

print("{} succeeded, {} skipped, {} errors".format(nSuccess,nSkipped,nErrors))

sys.stdout.flush()

Posted on October 13, 2018 20:46 by ahospers ahospers | 2 comments | Leave a comment

.php Download photos from a .csv Observations Export

Here (attached file) a simple php script for download all photos from a csv observations export.
You have to install a php interpreted on your computer.
The csv file must be named "observations.csv" and it must contains at least the "id" and "image_url" field.
run: php photo_download.php
The script download all photos in the same directory as the php script.
https://groups.google.com/forum/#!topic/inaturalist/VbU36xDeP3k
When you export the observations either from http://www.inaturalist.org/observations/export or from the links form your project page, the CSV you get has an image_url column with a link to the photos.

There are browser plugins, little freeware programs, or you can write very simple scripts (perl/php etc.) that fetch photos using a list of URLs
-
There is only the url of the first image in the csv when there are more images per observation.

Posted on October 13, 2018 20:54 by ahospers ahospers | 1 comments | Leave a comment

October 02, 2018

Organisms have "common names" in spoken languages

Most categories of organisms have "common names" in spoken languages. These names are usually recognizable, easy to pronounce, and stable over time, but many organisms have several different names in different places, even in the same language, which can make it difficult to communicate about these organisms without confusion. Scientists address this problem by using a single "scientific name" for each category of organism that conforms to the rules of biological nomenclature, but these names tend to be based on Latin, a language nobody speaks, so they are not as memorable as common names for many people. Scientific names can also reflect an organism's taxonomic placement, so they can change when scientists develop more accurate theories about the evolutionary relationships between different organisms, again reducing their usefulness in communication, even among people who know scientific names.

The old adage sums it up: "Common names change from place to place, and scientific names change from time to time."

We try to address these shortcomings by showing both common and scientific names wherever possible, and choosing common names based on the language and geographic preferences of the viewer.

https://www.inaturalist.org/subscriptions?type=observation

Posted on October 02, 2018 20:55 by ahospers ahospers | 0 comments | Leave a comment

October 19, 2018

Pros and cons of low-level identifications reviewed=any, quality_grade=casual

https://www.inaturalist.org/subscriptions?type=observation

I enjoy doing "Unknown" identifications (it's like a treasure hunt!). Sometimes there's a "lump" in the queue of a particular user's bulk uploads that aren't labeled yet, and I'd like to skip over them because the person may be working on them themselves later. Is there a string I can include in the search url to omit their observations for the moment?

Starter url example: https://www.inaturalist.org/observations/identify?iconic_taxa=unknown
Example url when you are *positively* filtering for a user: https://www.inaturalist.org/observations/identify?iconic_taxa=unknown&user_id=questagame

e.g. if you want to ID observations in DC but not from me (user ID 7580), you'd use https://www.inaturalist.org/observations/identify?verifiable=true&page=1&place_id=5&not_user_id=7580

There are a few ways to find someone's user ID, but the one I go to is to the header search, type their name, and then click on their profile from that and you'll see their user number in the url instead of their username. e.g. https://www.inaturalist.org/search?q=carrieseltzer

--
LowLevel identifications:
https://www.inaturalist.org/pages/help#coarse-ids
https://groups.google.com/forum/#!topic/inaturalist/uwtZP7VOHcA
https://www.inaturalist.org/observations/17474847

The lrank, hrank, and rank are great tools if you need to find observations at a specific rank. You can also use the Identify page to find your own observations that you haven't yet reviewed, regardless of whether others have IDed them (I also have a ton to go through myself).

able to filter with
`iconic_taxa=unknown`so they can see all their unidentified observations
/observations?lrank=phylum&place_id=any
It's verifiable=false, though, so:
https://www.inaturalist.org/observations?place_id=any&user_id=reiner&verifiable=false

They can always use the Rank filter in the Explore Filters menu to
see, for example, all observations ID to taxa of rank Phlum or coarser
like this:
https://www.inaturalist.org/observations?lrank=phylum&place_id=any

?Iconic = False is a very easy filter and gives a realistic picture of what needs to be identified.
?lrank=phylum is a mix of rubbish that has been rejected as identifiable with good data that require attention.

Smiley face

You can currently find them through the Identify page UI if you change to reviewed=any, sort by your username, and change the quality grade:
https://www.inaturalist.org/observations/identify?reviewed=any&quality_grade=casual&user_id=reiner
==

For southern Africa:
None of our plant experts (professional taxonomists) are willing to work above the level of family (and many stick to tribes). Identification above level of family is purely useless - no one is prepared to look at them. (exceptions are Mosses, Ferns and Gymnosperms, where experts tend to work above the family level)
Competent users willing to make IDs to family and tribe level (and these are rare) are happy to target the unidentified observations, but they are not enthusiastic to tackle the Phylum, and even above class level. Even the dicot and monocot level is not used. Identifications in these categories tend to get stuck there and are never visited. The complication of having all the dross hiding the good data is an issue.
A few get noticed by people working on local sites, but they would be identified no matter what their ID rank at the time.

I'll continue adding coarse IDs as needed as I personally find it helpful and many others have said the same. I frequently search to add IDs of plants, so having at least the coarse ID is necessary for that. Obviously finer IDs are better if possible (insect instead of animal), so if you can slightly finetune whatever your proces

reason to do coarse IDs is to make sure things are tagged to the point where experts can find them

[b]The lrank, hrank, and rank are great tools if you need to find observations at a specific rank. You can also use the Identify page to find your own observations that you haven't yet reviewed, regardless of whether others have IDed them (I also have a ton to go through myself).[/b]

If there are observations that really can't be IDed beyond "plant" because the photo is really really bad or something, then please mark it as no longer needing community ID.

https://www.inaturalist.org/subscriptions?type=observation

Posted on October 19, 2018 14:06 by ahospers ahospers | 0 comments | Leave a comment