Skip to content

Instantly share code, notes, and snippets.

@jgomezdans
Last active March 2, 2021 21:52
Show Gist options
  • Save jgomezdans/d906491374f9bd98222ef14fe09d307c to your computer and use it in GitHub Desktop.
Save jgomezdans/d906491374f9bd98222ef14fe09d307c to your computer and use it in GitHub Desktop.
name: accra_wkshp_ucl
channels:
- conda-forge
dependencies:
- jupyterlab
- notebook
- ipykernel
- ipywidgets
- scikit-learn
- widgetsnbextension
- matplotlib
- pandas
- scipy
- python>=3.6
- jupyter_contrib_nbextensions
- widgetsnbextension
- pip
### MATPLOTLIBRC FORMAT
# This is a sample matplotlib configuration file - you can find a copy
# of it on your system in
# site-packages/matplotlib/mpl-data/matplotlibrc. If you edit it
# there, please note that it will be overridden in your next install.
# If you want to keep a permanent local copy that will not be
# over-written, place it in HOME/.matplotlib/matplotlibrc (unix/linux
# like systems) and C:\Documents and Settings\yourname\.matplotlib
# (win32 systems).
#
# This file is best viewed in a editor which supports python mode
# syntax highlighting. Blank lines, or lines starting with a comment
# symbol, are ignored, as are trailing comments. Other lines must
# have the format
# key : val # optional comment
#
# Colors: for the color values below, you can either use - a
# matplotlib color string, such as r, k, or b - an rgb tuple, such as
# (1.0, 0.5, 0.0) - a hex string, such as ff00ff or #ff00ff - a scalar
# grayscale intensity such as 0.75 - a legal html color name, eg red,
# blue, darkslategray
#### CONFIGURATION BEGINS HERE
# the default backend; one of GTK GTKAgg GTKCairo CocoaAgg FltkAgg
# MacOSX QtAgg Qt4Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG Template
# You can also deploy your own backend outside of matplotlib by
# referring to the module name (which must be in the PYTHONPATH) as
# 'module://my_backend'
backend : Qt5Agg
# if you are runing pyplot inside a GUI and your backend choice
# conflicts, we will automatically try and find a compatible one for
# you if backend_fallback is True
#backend_fallback: True
interactive : True
toolbar : toolbar2 # None | classic | toolbar2
timezone : UTC # a pytz timezone string, eg US/Central or Europe/Paris
# Where your matplotlib data lives if you installed to a non-default
# location. This is where the matplotlib fonts, bitmaps, etc reside
#datapath : /home/jdhunter/mpldata
### LINES
# See http://matplotlib.sourceforge.net/api/artist_api.html#module-matplotlib.lines for more
# information on line properties.
lines.linewidth : 2.0 # line width in points
#lines.linestyle : - # solid line
# lines.color : purple
#lines.marker : None # the default marker
#lines.markeredgewidth : 0.5 # the line width around the marker symbol
#lines.markersize : 6 # markersize, in points
#lines.dash_joinstyle : miter # miter|round|bevel
#lines.dash_capstyle : butt # butt|round|projecting
#lines.solid_joinstyle : miter # miter|round|bevel
#lines.solid_capstyle : projecting # butt|round|projecting
lines.antialiased : True # render lines in antialised (no jaggies)
### PATCHES
# Patches are graphical objects that fill 2D space, like polygons or
# circles. See
# http://matplotlib.sourceforge.net/api/artist_api.html#module-matplotlib.patches
# information on patch properties
patch.linewidth : 0.5 # edge width in points
patch.facecolor : 348ABD # blue
patch.edgecolor : eeeeee
patch.antialiased : True # render patches in antialised (no jaggies)
### FONT
#
# font properties used by text.Text. See
# http://matplotlib.sourceforge.net/api/font_manager_api.html for more
# information on font properties. The 6 font properties used for font
# matching are given below with their default values.
#
# The font.family property has five values: 'serif' (e.g. Times),
# 'sans-serif' (e.g. Helvetica), 'cursive' (e.g. Zapf-Chancery),
# 'fantasy' (e.g. Western), and 'monospace' (e.g. Courier). Each of
# these font families has a default list of font names in decreasing
# order of priority associated with them.
#
# The font.style property has three values: normal (or roman), italic
# or oblique. The oblique style will be used for italic, if it is not
# present.
#
# The font.variant property has two values: normal or small-caps. For
# TrueType fonts, which are scalable fonts, small-caps is equivalent
# to using a font size of 'smaller', or about 83% of the current font
# size.
#
# The font.weight property has effectively 13 values: normal, bold,
# bolder, lighter, 100, 200, 300, ..., 900. Normal is the same as
# 400, and bold is 700. bolder and lighter are relative values with
# respect to the current weight.
#
# The font.stretch property has 11 values: ultra-condensed,
# extra-condensed, condensed, semi-condensed, normal, semi-expanded,
# expanded, extra-expanded, ultra-expanded, wider, and narrower. This
# property is not currently implemented.
#
# The font.size property is the default font size for text, given in pts.
# 12pt is the standard value.
#
font.family : sans-serif
#font.style : normal
#font.variant : normal
#font.weight : medium
#font.stretch : normal
# note that font.size controls default text sizes. To configure
# special text sizes tick labels, axes, labels, title, etc, see the rc
# settings for axes and ticks. Special text sizes can be defined
# relative to font.size, using the following values: xx-small, x-small,
# small, medium, large, x-large, xx-large, larger, or smaller
font.size : 12.0
# font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
font.sans-serif : Helvetica
#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, cursive
#font.fantasy : Comic Sans MS, Chicago, Charcoal, Impact, Western, fantasy
font.monospace : Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace
### TEXT
# text properties used by text.Text. See
# http://matplotlib.sourceforge.net/api/artist_api.html#module-matplotlib.text for more
# information on text properties
#text.color : black
### LaTeX customizations. See http://www.scipy.org/Wiki/Cookbook/Matplotlib/UsingTex
#text.usetex : False # use latex for all text handling. The following fonts
# are supported through the usual rc parameter settings:
# new century schoolbook, bookman, times, palatino,
# zapf chancery, charter, serif, sans-serif, helvetica,
# avant garde, courier, monospace, computer modern roman,
# computer modern sans serif, computer modern typewriter
# If another font is desired which can loaded using the
# LaTeX \usepackage command, please inquire at the
# matplotlib mailing list
#text.latex.unicode : False # use "ucs" and "inputenc" LaTeX packages for handling
# unicode strings.
#text.latex.preamble : # IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES
# AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP
# IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO.
# preamble is a comma separated list of LaTeX statements
# that are included in the LaTeX document preamble.
# An example:
# text.latex.preamble : \usepackage{bm},\usepackage{euler}
# The following packages are always loaded with usetex, so
# beware of package collisions: color, geometry, graphicx,
# type1cm, textcomp. Adobe Postscript (PSSNFS) font packages
# may also be loaded, depending on your font settings
#text.dvipnghack : None # some versions of dvipng don't handle alpha
# channel properly. Use True to correct
# and flush ~/.matplotlib/tex.cache
# before testing and False to force
# correction off. None will try and
# guess based on your dvipng version
#text.markup : 'plain' # Affects how text, such as titles and labels, are
# interpreted by default.
# 'plain': As plain, unformatted text
# 'tex': As TeX-like text. Text between $'s will be
# formatted as a TeX math expression.
# This setting has no effect when text.usetex is True.
# In that case, all text will be sent to TeX for
# processing.
#text.hinting : True # If True, text will be hinted, otherwise not. This only
# affects the Agg backend.
# The following settings allow you to select the fonts in math mode.
# They map from a TeX font name to a fontconfig font pattern.
# These settings are only used if mathtext.fontset is 'custom'.
# Note that this "custom" mode is unsupported and may go away in the
# future.
#mathtext.cal : cursive
#mathtext.rm : serif
#mathtext.tt : monospace
#mathtext.it : serif:italic
#mathtext.bf : serif:bold
#mathtext.sf : sans
#mathtext.fontset : cm # Should be 'cm' (Computer Modern), 'stix',
# 'stixsans' or 'custom'
#mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern
# fonts when a symbol can not be found in one of
# the custom math fonts.
#mathtext.default : it # The default font to use for math.
# Can be any of the LaTeX font names, including
# the special name "regular" for the same font
# used in regular text.
### AXES
# default face and edge color, default tick sizes,
# default fontsizes for ticklabels, and so on. See
# http://matplotlib.sourceforge.net/api/axes_api.html#module-matplotlib.axes
#axes.hold : True # whether to clear the axes by default on
axes.facecolor : w # axes background color
axes.edgecolor : 262626 # axes edge color
axes.linewidth : 1 # edge linewidth
axes.grid : False # display grid or not
axes.titlesize : x-large # fontsize of the axes title
axes.labelsize : large # fontsize of the x any y labels
axes.labelcolor : 262626
axes.axisbelow : True # whether axis gridlines and ticks are below
# the axes elements (lines, text, etc)
axes.formatter.limits : -4, 4 # use scientific notation if log10
# of the axis range is smaller than the
# first or larger than the second
#axes.unicode_minus : True # use unicode for the minus symbol
# rather than hypen. See http://en.wikipedia.org/wiki/Plus_sign#Plus_sign
axes.prop_cycle : cycler("color", ["FC8D62", "66C2A5", "8DA0CB", "E78AC3", "A6D854", "FFD92F", "E5C494", "B3B3B3"])
# E24A33 : orange
# 7A68A6 : purple
# 348ABD : blue
# 188487 : turquoise
# A60628 : red
# CF4457 : pink
# 467821 : green
axes.spines.right : False
axes.spines.top : False
# color cycle for plot lines
# as list of string colorspecs:
# single letter, long name, or
# web-style hex
#polaraxes.grid : True # display grid on polar axes
#axes3d.grid : True # display grid on 3d axes
### TICKS
# see http://matplotlib.sourceforge.net/api/axis_api.html#matplotlib.axis.Tick
xtick.major.size : 10 # major tick size in points
xtick.major.width : 0.5 # major tick size in points
xtick.minor.size : 10 # minor tick size in points
xtick.minor.width : 0.5 # major tick size in points
xtick.major.pad : 6 # distance to major tick label in points
xtick.minor.pad : 6 # distance to the minor tick label in points
xtick.color : 262626 # color of the tick labels
#xtick.labelsize : 12 # fontsize of the tick labels
xtick.direction : out # direction: in or out
ytick.major.size : 10 # major tick size in points
ytick.major.width : 0.5 # major tick size in points
ytick.minor.size : 10 # minor tick size in points
ytick.minor.width : 0.5 # major tick size in points
ytick.major.pad : 6 # distance to major tick label in points
ytick.minor.pad : 6 # distance to the minor tick label in points
ytick.color : 262626 # color of the tick labels
#ytick.labelsize : 12 # fontsize of the tick labels
ytick.direction : out # direction: in or out
### GRIDS
#grid.color : black # grid color
#grid.linestyle : : # dotted
#grid.linewidth : 0.5 # in points
### Legend
legend.fancybox : True # if True, use a rounded box for the
# legend, else a rectangle
#legend.isaxes : True
legend.numpoints : 1 # the number of points in the legend line
#legend.fontsize : large
#legend.pad : 0.0 # deprecated; the fractional whitespace inside the legend border
#legend.borderpad : 0.5 # border whitspace in fontsize units
#legend.markerscale : 1.0 # the relative size of legend markers vs. original
# the following dimensions are in axes coords
#legend.labelsep : 0.010 # the vertical space between the legend entries
#legend.handlelen : 0.05 # the length of the legend lines
#legend.handletextsep : 0.02 # the space between the legend line and legend text
#legend.axespad : 0.02 # the border between the axes and legend edge
#legend.shadow : False
### FIGURE
# See http://matplotlib.sourceforge.net/api/figure_api.html#matplotlib.figure.Figure
figure.figsize : 6, 6 # figure size in inches
#figure.dpi : 80 # figure dots per inch
figure.facecolor : 0.85 # figure facecolor; 0.75 is scalar gray
figure.edgecolor : 0.50 # figure edgecolor
# The figure subplot parameters. All dimensions are fraction of the
# figure width or height
#figure.subplot.left : 0.125 # the left side of the subplots of the figure
#figure.subplot.right : 0.9 # the right side of the subplots of the figure
#figure.subplot.bottom : 0.1 # the bottom of the subplots of the figure
#figure.subplot.top : 0.9 # the top of the subplots of the figure
#figure.subplot.wspace : 0.2 # the amount of width reserved for blank space between subplots
figure.subplot.hspace : 0.5 # the amount of height reserved for white space between subplots
### IMAGES
#image.aspect : equal # equal | auto | a number
#image.interpolation : bilinear # see help(imshow) for options
#image.cmap : jet # gray | jet etc...
#image.lut : 256 # the size of the colormap lookup table
#image.origin : upper # lower | upper
#image.resample : False
### CONTOUR PLOTS
#contour.negative_linestyle : dashed # dashed | solid
### Agg rendering
### Warning: experimental, 2008/10/10
#agg.path.chunksize : 0 # 0 to disable; values in the range
# 10000 to 100000 can improve speed slightly
# and prevent an Agg rendering failure
# when plotting very large data sets,
# especially if they are very gappy.
# It may cause minor artifacts, though.
# A value of 20000 is probably a good
# starting point.
### SAVING FIGURES
#path.simplify : True # When True, simplify paths by removing "invisible"
# points to reduce file size and increase rendering
# speed
#path.simplify_threshold : 0.1 # The threshold of similarity below which
# vertices will be removed in the simplification
# process
#path.snap : True # When True, rectilinear axis-aligned paths will be snapped to
# the nearest pixel when certain criteria are met. When False,
# paths will never be snapped.
# the default savefig params can be different from the display params
# Eg, you may want a higher resolution, or to make the figure
# background white
#savefig.dpi : 100 # figure dots per inch
#savefig.facecolor : white # figure facecolor when saving
#savefig.edgecolor : white # figure edgecolor when saving
#savefig.extension : auto # what extension to use for savefig('foo'), or 'auto'
#cairo.format : png # png, ps, pdf, svg
# tk backend params
#tk.window_focus : False # Maintain shell focus for TkAgg
# ps backend params
#ps.papersize : letter # auto, letter, legal, ledger, A0-A10, B0-B10
#ps.useafm : False # use of afm fonts, results in small files
#ps.usedistiller : False # can be: None, ghostscript or xpdf
# Experimental: may produce smaller files.
# xpdf intended for production of publication quality files,
# but requires ghostscript, xpdf and ps2eps
#ps.distiller.res : 6000 # dpi
#ps.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType)
# pdf backend params
#pdf.compression : 6 # integer from 0 to 9
# 0 disables compression (good for debugging)
#pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType)
# svg backend params
#svg.image_inline : True # write raster image data directly into the svg file
#svg.image_noscale : False # suppress scaling of raster data embedded in SVG
#svg.embed_char_paths : True # embed character outlines in the SVG file
# docstring params
#docstring.hardcopy = False # set this when you want to generate hardcopy docstring
# Set the verbose flags. This controls how much information
# matplotlib gives you at runtime and where it goes. The verbosity
# levels are: silent, helpful, debug, debug-annoying. Any level is
# inclusive of all the levels below it. If your setting is "debug",
# you'll get all the debug and helpful messages. When submitting
# problems to the mailing-list, please set verbose to "helpful" or "debug"
# and paste the output into your report.
#
# The "fileo" gives the destination for any calls to verbose.report.
# These objects can a filename, or a filehandle like sys.stdout.
#
# You can override the rc default verbosity from the command line by
# giving the flags --verbose-LEVEL where LEVEL is one of the legal
# levels, eg --verbose-helpful.
#
# You can access the verbose instance in your code
# from matplotlib import verbose.
#verbose.level : silent # one of silent, helpful, debug, debug-annoying
#verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr
# Event keys to interact with figures/plots via keyboard.
# Customize these settings according to your needs.
# Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '')
keymap.fullscreen : f # toggling
keymap.home : h, r, home # home or reset mnemonic
keymap.back : left, c, backspace # forward / backward keys to enable
keymap.forward : right, v # left handed quick navigation
keymap.pan : p # pan mnemonic
keymap.zoom : o # zoom mnemonic
keymap.save : s # saving current figure
keymap.grid : g # switching on/off a grid in current axes
keymap.yscale : l # toggle scaling of y-axes ('log'/'linear')
keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear')
keymap.all_axes : a # enable all axes
#!/bin/bash
# Download netcdf files
jupyter contrib nbextension install --user
jupyter nbextension enable --py widgetsnbextension
jupyter nbextension enable python-markdown/main
# Install a JupyterLab extension for demonstration purposes
jupyter labextension install @jupyterlab/geojson-extension
jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter trust *.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/anaconda/lib/python3.7/site-packages/ipykernel_launcher.py:2: MatplotlibDeprecationWarning: \n",
"The keymap.all_axes rcparam was deprecated in Matplotlib 3.3 and will be removed two minor releases later.\n",
" \n"
]
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import sklearn.linear_model as linear_model\n",
"from ipywidgets import interact, interactive, fixed, interact_manual\n",
"import ipywidgets as widgets"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def fourier_matrix(x, n_harms=50, N=365):\n",
" \"\"\"Generates a matrix with the DCT terms\"\"\"\n",
" F = [np.cos(n*np.pi/N*x) if n % 2== 0\n",
" else np.cos(n*np.pi/N*x) for n in range(n_harms)]\n",
" return np.array(F)\n",
"\n",
"\n",
"\n",
"def fit_harms_lasso(x, A, gamma=0.005):\n",
" \"\"\"Fits observations x using A matrix with gamma value.\n",
" It is assumed missing observations are given by a NaN.\n",
" \"\"\"\n",
" \n",
" if np.sum(np.isfinite(x)) == 0:\n",
" return np.ones(10)*np.nan\n",
" missing = np.isnan(x)\n",
" F = A*1.\n",
" A = A[:, ~missing]\n",
" clf = linear_model.Lasso(alpha=gamma)\n",
" clf.fit(A.T, x[~missing])\n",
" coefs = clf.coef_\n",
" rmse = (clf.predict(A.T) - x[~missing]).std()\n",
" return coefs, clf.predict(F.T), rmse\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "88780a83115b47d6a75de9899a9d918f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(Dropdown(description='fname', options=('tseries1.npz', 'tseries2.npz', 'tseries3.npz'), …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"@interact(fname=[\"tseries1.npz\", \"tseries2.npz\", \"tseries3.npz\"], gamma=widgets.FloatLogSlider(\n",
" value=0.005,\n",
" min=-4, \n",
" max=-1, \n",
" description='Gamma'\n",
"))\n",
"def run_me(fname, gamma):\n",
" f = np.load(fname)\n",
" doys = f[\"doys\"]\n",
" xx = f[\"ndvi\"]\n",
" missing = np.isnan(xx)\n",
" fig, axs = plt.subplots(nrows=6, ncols=3, figsize=(12, 12))\n",
"\n",
" for i, n_harms in enumerate([3, 5, 7, 10, 15, 20]):\n",
" F = fourier_matrix(doys,n_harms=n_harms)\n",
" coefs, y_pred, rmse = fit_harms_lasso(xx, F, gamma=gamma)\n",
" axs[i][0].plot(doys, y_pred)\n",
" axs[i][0].plot(doys, xx, 'o')\n",
" axs[i][0].set_ylim(0,1)\n",
" axs[i][0].set_title(f\"N Harms: {n_harms} len(xx):{(~missing).sum()}\" + \n",
" \" $\\gamma$=\" + \n",
" f\"{gamma}\")\n",
"\n",
" axs[i][1].plot(doys[~missing], xx[~missing] -y_pred[~missing], '+')\n",
" axs[i][1].axhline(y=0, lw=0.5, c=\"0.8\")\n",
" axs[i][1].set_title(f\"RMSE: {rmse}\")\n",
"\n",
" axs[i][2].bar(np.arange(1, len(coefs)+1), coefs)\n",
" axs[i][2].set_ylabel(f\"N freqs {n_harms}\")\n",
" axs[i][2].set_title(f\"N coeffs: {np.sum(np.abs(coefs)>1e-5)}\")\n",
" axs[i][2].set_xlim(0, 20)\n",
" fig.tight_layout()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment