Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iPython & Jupyter: 4 fun & profit

iPython & Jupyter: 4 fun & profit

Доклад о Jupyter Notebook. Покажу примеры его использования и расскажу, чем он может быть полезен для разработчика

Moscow Python Meetup

March 22, 2016
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Лучшее 2015 «Афиша-Рестораны» и «Рамблер.Почта» вошли в список 25 лучших

    приложений 2015 года для iOS по версии редакции AppStore, официального онлайн-магазина Apple. У «Афиши-Рестораны» — 15-е место в рейтинге, «Рамблер.Почта» — на 24-м. http://lenta.ru/news/2015/12/09/rambler/ (http://lenta.ru/news/2015/12/09/rambler/)
  2. Контакты В группе компаний Rambler&Co всегда есть открытые вакансии для

    тех, кто хочет профессионально расти и развиваться, занимаясь тем, что по-настоящему нравится
  3. 8 августа 2013 - IPython 1.0 1 апреля 2014 -

    IPython 2.0 Появились виджеты 27 февраля 2015 - IPython 3.0 - 54 IPython kernels for other languages (https://github.com/ipython/ipython/wiki/IPython- kernels-for-other-languages)
  4. Jupyter 4.0 "BigSplit" ipython ipykernel ipywidget notebook jupyter_core etc. 8

    января 2016 - Jupyter 4.1 Первый релиз после BigSplit Будут частыми smaller releases
  5. I n [ ] : ! j u p y

    t e r n o t e b o o k
  6. Немного магии I n [ 1 4 ] : %

    l s m a g i c O u t [ 1 4 ] : A v a i l a b l e l i n e m a g i c s : % a l i a s % a l i a s _ m a g i c % a u t o c a l l % a u t o m a g i c % a u t o s a v e % b o o k m a r k % c a t % c d % c l e a r % c o A v a i l a b l e c e l l m a g i c s : % % ! % % H T M L % % S V G % % b a s h % % c a p t u r e % % d e b u g % % f i l e % % h t m l % % j a v a s c r i p t % % l a t e x % % A u t o m a g i c i s O N , % p r e f i x I S N O T n e e d e d f o r l i n e m a g i c s . I n [ 1 5 ] : % q u i c k r e f
  7. pwd Current working directory path I n [ 1 6

    ] : % p w d O u t [ 1 6 ] : ' / U s e r s / l . t o n k i k h / i p y t h o n ' What in inside? I n [ 1 7 ] : i m p o r t o s o s . g e t c w d ( ) , o s . p a t h . r e a l p a t h ( ' . ' ) # o r s m t h e l s e ? O u t [ 1 7 ] : ( ' / U s e r s / l . t o n k i k h / i p y t h o n ' , ' / U s e r s / l . t o n k i k h / i p y t h o n ' )
  8. I n [ 1 9 ] : f r o

    m I P y t h o n . c o r e . m a g i c s . o s m i m p o r t O S M a g i c s m a g i c = O S M a g i c s ( ) m a g i c . p w d ( ) O u t [ 1 9 ] : ' / U s e r s / l . t o n k i k h / i p y t h o n ' I n [ 2 0 ] : % p s o u r c e m a g i c . p w d I n [ 2 1 ] : % p s o u r c e % p s o u r c e I n [ 2 2 ] : % p s o u r c e % p w d
  9. env Virtual Environment I n [ ] : % e

    n v I n [ 2 4 ] : e n v = % e n v % p a g e e n v True or False? I n [ 1 ] : e n v = % e n v % s e t _ e n v l o l l o l q = ' l o l ' i n e n v . k e y s ( ) e n v : l o l = l o l I n [ 2 ] : q O u t [ 2 ] : F a l s e
  10. I n [ 2 7 ] : # % m

    k d i r t e s t # % c d t e s t I n [ ] : # % l o a d t e s t . p y t e s t . p y p r i n t ( ' H e l l o w o r l d ' ) I n [ 3 1 ] : % p y c a t t e s t . p y
  11. Shell capture I n [ 3 2 ] : %

    s c f i l e s = l s I n [ 3 3 ] : f i l e s O u t [ 3 3 ] : ' U n t i t l e d . i p y n b \ n d o c s \ n e n v \ n h t m l \ n i m g \ n i p y t h o n . i p y n b \ n i p y t h o n . s l i d e s . h t m l \ n i p y t h o n _ l o g . p y
  12. I n [ 3 4 ] : ! l s

    U n t i t l e d . i p y n b e n v i m g i p y t h o n . s l i d e s . h t m l n o t _ t r a c k d o c s h t m l i p y t h o n . i p y n b i p y t h o n _ l o g . p y o v e r w r i t t I n [ 3 5 ] : f i l e s = ! l s f i l e s , f i l e s . n , f i l e s . s O u t [ 3 5 ] : ( [ ' U n t i t l e d . i p y n b ' , ' d o c s ' , ' e n v ' , ' h t m l ' , ' i m g ' , ' i p y t h o n . i p y n b ' , ' i p y t h o n . s l i d e s . h t m l ' , ' i p y t h o n _ l o g . p y ' , ' n o t _ t r a c k ' , ' o v e r w r i t t e n . p y ' , ' r e q u i r e m e n t s . t x t ' , ' t e s t . p n g ' , ' t e s t . p y ' ] , ' U n t i t l e d . i p y n b \ n d o c s \ n e n v \ n h t m l \ n i m g \ n i p y t h o n . i p y n b \ n i p y t h o n . s l i d e s . h t m l \ n i p y t h o n _ l o g . p ' U n t i t l e d . i p y n b d o c s e n v h t m l i m g i p y t h o n . i p y n b i p y t h o n . s l i d e s . h t m l i p y t h o n _ l o g . p y n o t _ t
  13. I n [ 3 6 ] : f i l

    e s = % s x l s # = = % s c - l f i l e s = l f i l e s # f i l e s . n # f i l e s . s O u t [ 3 6 ] : [ ' U n t i t l e d . i p y n b ' , ' d o c s ' , ' e n v ' , ' h t m l ' , ' i m g ' , ' i p y t h o n . i p y n b ' , ' i p y t h o n . s l i d e s . h t m l ' , ' i p y t h o n _ l o g . p y ' , ' n o t _ t r a c k ' , ' o v e r w r i t t e n . p y ' , ' r e q u i r e m e n t s . t x t ' , ' t e s t . p n g ' , ' t e s t . p y ' ] I n [ 3 7 ] : ! ! l s O u t [ 3 7 ] : [ ' U n t i t l e d . i p y n b ' , ' d o c s ' , ' e n v ' , ' h t m l ' , ' i m g ' , ' i p y t h o n . i p y n b ' , ' i p y t h o n . s l i d e s . h t m l ' , ' i p y t h o n _ l o g . p y ' , ' n o t _ t r a c k ' , ' o v e r w r i t t e n . p y ' , ' r e q u i r e m e n t s . t x t ' , ' t e s t . p n g ' , ' t e s t . p y ' ]
  14. One more example I n [ 3 8 ] :

    ! p i p f r e e z e | g r e p i p y t h o n i p y t h o n = = 4 . 0 . 3 i p y t h o n - g e n u t i l s = = 0 . 1 . 0 I n [ 3 9 ] : ! ! p i p f r e e z e | g r e p i p y t h o n O u t [ 3 9 ] : [ ' i p y t h o n = = 4 . 0 . 3 ' , ' i p y t h o n - g e n u t i l s = = 0 . 1 . 0 ' ]
  15. Bash I n [ 4 0 ] : % %

    b a s h f o r i i n { 1 . . 3 } ; d o e c h o " $ i " d o n e 1 2 3
  16. Who

  17. I n [ 4 1 ] : % w h

    o O S M a g i c s a e n v f i l e s m a g i c o s q I n [ 4 2 ] : % w h o _ l s O u t [ 4 2 ] : [ ' O S M a g i c s ' , ' a ' , ' e n v ' , ' f i l e s ' , ' m a g i c ' , ' o s ' , ' q ' ]
  18. I n [ 4 3 ] : % w h

    o _ l s d i c t O u t [ 4 3 ] : [ ' e n v ' ] I n [ 4 4 ] : % w h o s V a r i a b l e T y p e D a t a / I n f o - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - O S M a g i c s M e t a H a s T r a i t s < c l a s s ' I P y t h o n . c o r e . m a g i c s . o s m . O S M a g i c s ' > a S L i s t [ ' Y o u a r e u s i n g p i p v e r s i < . . . > i p y t h o n - g e n u t i l s = = 0 . 1 . 0 ' ] e n v d i c t n = 3 9 f i l e s S L i s t [ ' U n t i t l e d . i p y n b ' , ' d o c s ' < . . . > ' , ' t e s t . p n g ' , ' t e s t . p y ' ] m a g i c O S M a g i c s < I P y t h o n . c o r e . m a g i c s . o s m . < . . . > c s o b j e c t a t 0 x 1 0 6 3 5 3 1 6 0 > o s m o d u l e < m o d u l e ' o s ' f r o m ' / L i b r a < . . . > 3 . 5 / l i b / p y t h o n 3 . 5 / o s . p y ' > q b o o l T r u e
  19. psearch Поиск по имени переменной I n [ 6 3

    ] : a 1 = 1 a 2 = ' a 2 ' I n [ 6 4 ] : % p s e a r c h a * I n [ 6 6 ] : % p s e a r c h - e b u i l t i n a * # a 1 # a 2 I n [ 6 7 ] : % p s e a r c h - e b u i l t i n a * i n t
  20. Logging I n [ 6 9 ] : % l

    o g s t a t e L o g g i n g h a s n o t b e e n a c t i v a t e d . I n [ 7 0 ] : % l o g s t a r t A c t i v a t i n g a u t o - l o g g i n g . C u r r e n t s e s s i o n s t a t e p l u s f u t u r e i n p u t s a v e d . F i l e n a m e : i p y t h o n _ l o g . p y M o d e : r o t a t e O u t p u t l o g g i n g : F a l s e R a w i n p u t l o g : F a l s e T i m e s t a m p i n g : F a l s e S t a t e : a c t i v e
  21. I n [ 7 1 ] : % l o

    g o f f S w i t c h i n g l o g g i n g O F F I n [ 7 2 ] : % l o g o n S w i t c h i n g l o g g i n g O N I n [ 7 3 ] : % l o g s t o p I n [ ] : % c a t i p y t h o n _ l o g . p y
  22. Python2 & Python3 I n [ 6 9 ] :

    % % h t m l < i f r a m e s c r o l l i n g = " n o " s t y l e = " b o r d e r : n o n e ; " w i d t h = " 6 4 0 " h e i g h t = " 3 3 0 " s r c = " h t t p : / / w w w . g o o g Interest over time. Web Search. Worldwide, 2004 - present. View full report in Google Trends python 2 python 3 2005 2007 2009 2011 2013 2015
  23. I n [ 7 0 ] : % % p

    y t h o n 2 i m p o r t s y s p r i n t ( s y s . v e r s i o n ) C o u l d n ' t f i n d p r o g r a m : ' p y t h o n 2 '
  24. I n [ 7 1 ] : % % p

    y t h o n 3 i m p o r t s y s p r i n t ( s y s . v e r s i o n ) 3 . 5 . 0 ( v 3 . 5 . 0 : 3 7 4 f 5 0 1 f 4 5 6 7 , S e p 1 2 2 0 1 5 , 1 1 : 0 0 : 1 9 ) [ G C C 4 . 2 . 1 ( A p p l e I n c . b u i l d 5 6 6 6 ) ( d o t 3 ) ] I n [ 6 ] : % % p e r l p r i n t ( s q r t ( 4 ) ) 2 I n [ 3 ] : % % r u b y i n c l u d e M a t h p u t s s q r t ( 4 ) 2 . 0
  25. Write & Sharing I n [ 2 5 4 ]

    : % % w r i t e f i l e - a o v e r w r i t t e n . p y a = ' H i ' # Y o u a r e i n G o o d C o m p a n y W r i t i n g o v e r w r i t t e n . p y I n [ 2 5 5 ] : % p a s t e b i n - d ' t e s t f i l e ' o v e r w r i t t e n . p y O u t [ 2 5 5 ] : ' h t t p s : / / g i s t . g i t h u b . c o m / b a a a 3 b e 4 6 1 4 b 1 c 2 6 d 6 f 1 '
  26. Time Время выполнения I n [ 2 7 9 ]

    : % t i m e x = s u m ( r a n g e ( 1 0 0 0 0 ) ) C P U t i m e s : u s e r 3 6 5 µ s , s y s : 2 µ s , t o t a l : 3 6 7 µ s W a l l t i m e : 3 7 0 µ s I n [ 2 7 8 ] : % t i m e i t x = s u m ( r a n g e ( 1 0 0 0 0 ) ) 1 0 0 0 l o o p s , b e s t o f 3 : 2 0 8 µ s p e r l o o p I n [ 4 2 ] : % % t i m e i t - n 1 0 0 0 x = r a n g e ( 1 0 0 0 0 ) m a x ( x ) 1 0 0 0 l o o p s , b e s t o f 3 : 3 2 0 µ s p e r l o o p
  27. LaTeX I n [ 3 ] : % % l

    a t e x \ b e g i n { e q u a t i o n } \ l a b e l { e q : n o r m a l _ d i s t } \ f r a c { 1 } { \ s i g m a \ s q r t { 2 \ p i } } \ e x p \ l e f t ( - \ f r a c { ( x - \ m u ) ^ 2 } { 2 \ s i g m a ^ 2 } \ r i g h t ) \ e n d { e q u a t i o n } exp ( − ) 1 σ 2 π ‾‾ ‾ √ (x − μ) 2 2 σ2 (1) I n [ 3 2 3 ] : % % l a t e x \ b e g i n { a l i g n } \ n a b l a \ t i m e s \ v e c { \ m a t h b f { B } } - \ , \ f r a c 1 c \ , \ f r a c { \ p a r t i a l \ v e c { \ m a t h b f { E } } } { \ p a r t i a l t } \ n a b l a \ c d o t \ v e c { \ m a t h b f { E } } & = 4 \ p i \ r h o \ \ \ n a b l a \ t i m e s \ v e c { \ m a t h b f { E } } \ , + \ , \ f r a c 1 c \ , \ f r a c { \ p a r t i a l \ v e c { \ m a t h b f { B } } } { \ p a r t i a l t \ n a b l a \ c d o t \ v e c { \ m a t h b f { B } } & = 0 \ e n d { a l i g n } ∇ × − B ⃗ 1 c ∂E ⃗ ∂t ∇ ⋅ E ⃗ ∇ × + E ⃗ 1 c ∂B ⃗ ∂t ∇ ⋅ B ⃗ = 4 π c j ⃗ = 4 πρ = 0 ⃗ = 0 (2) (3) (4) (5)
  28. I n [ 3 2 ] : i m p

    o r t o s i m p o r t r a n d o m f r o m i p y w i d g e t s i m p o r t i n t e r a c t , i n t e r a c t i v e , f i x e d i m p o r t i p y w i d g e t s a s w i d g e t s f r o m I P y t h o n . d i s p l a y i m p o r t d i s p l a y , I F r a m e I n [ 3 3 ] : c i t i e s = { ' W a s h i n g t o n ' : ( 3 8 . 8 9 0 3 6 6 , - 7 7 . 0 3 1 9 5 5 ) , ' N e w Y o r k ' : ( 4 0 . 7 1 4 5 4 5 , - 7 4 . 0 0 7 1 1 2 ) , ' L o s A n g e l e s ' : ( 3 4 . 0 5 3 4 8 5 , - 1 1 8 . 2 4 5 3 1 3 ) , ' L a s V e g a s ' : ( 3 6 . 1 7 1 9 0 6 , - 1 1 5 . 1 3 9 9 6 3 ) , } I n [ 3 4 ] : c i t y = w i d g e t s . D r o p d o w n ( o p t i o n s = c i t i e s , v a l u e = r a n d o m . c h o i c e ( l i s t ( c i t i e s . v a l u e s ( ) ) ) , d e s c r i p t i o n = ' C h o o s e c i t y : ' , ) d i s p l a y ( c i t y ) I n [ 3 5 ] : b u t t o n = w i d g e t s . T o g g l e B u t t o n ( d e s c r i p t i o n = ' M e r r y C h r i s t m a s ! ' , t o o l t i p = ' 1 2 3 ' , v a l u e = F a l s e , ) I n [ 3 6 ] : b u t t o n
  29. I n [ 3 6 ] : i m p

    o r t f o l i u m m y _ m a p = f o l i u m . M a p ( l o c a t i o n = c i t y . v a l u e , z o o m _ s t a r t = 1 2 ) m y _ m a p . c i r c l e _ m a r k e r ( l o c a t i o n = c i t y . v a l u e , r a d i u s = 1 9 0 0 , p o p u p = ' L a u r e l h u r s t P a r k ' , l i n e _ c o l o r = ' # 3 1 8 6 c c ' , f i l l _ c o l o r = ' # 3 1 8 6 c c ' ) m y _ m a p . s i m p l e _ m a r k e r ( c i t y . v a l u e , p o p u p = ' M e r r y C h r i s t m a s h e r e ' , m a r k e r _ c o l o r = ' r e d ' , m a r k e r m y _ m a p . c r e a t e _ m a p ( p a t h = ' h t m l / m a p . h t m l ' ) # L . c o n t r o l . s c a l e ( ) . a d d T o ( m a p ) ; I n [ 3 8 ] : I F r a m e ( s r c = ' h t m l / m a p . h t m l ' , w i d t h = 1 0 0 0 , h e i g h t = 3 5 0 ) O u t [ 3 8 ] :  + - Leaflet (http://leafletjs.com) | Map data (c) OpenStreetMap (http://openstreetmap.org) contributors
  30. Github Commits Introducing the New GitHub Graphs - April 25,

    2012 link (https://github.com/blog/1093- introducing-the-new-github-graphs)
  31. I n [ 4 ] : f r o m

    g i t h u b i m p o r t G i t h u b i m p o r t m a t p l o t l i b . p y p l o t a s p l t i m p o r t s e a b o r n a s s n s i m p o r t p a n d a s a s p d % m a t p l o t l i b i n l i n e I n [ 3 ] : G I T H U B _ U S E R = o s . g e t e n v ( ' G I T H U B _ U S E R ' ) G I T H U B _ T O K E N = o s . g e t e n v ( ' G I T H U B _ T O K E N ' ) R E P O _ P A T H = ' p y t h o n / c p y t h o n ' I n [ 8 ] : g = G i t h u b ( G I T H U B _ U S E R , G I T H U B _ T O K E N ) r e p o = g . g e t _ r e p o ( R E P O _ P A T H ) d f = p d . D a t a F r a m e ( { ' d a t e ' : p d . S e r i e s ( ( i . c o m m i t . c o m m i t t e r . d a t e f o r i i n r e p o . g e t _ c o m m i t s ( ) s t a t s = d f . g r o u p b y ( p d . G r o u p e r ( k e y = ' d a t e ' , f r e q = ' M ' ) ) . s i z e ( )
  32. I n [ 3 5 ] : p l t

    . f i g u r e ( f i g s i z e = ( 1 6 , 4 ) ) s t a t s . p l o t ( t i t l e = ' S t a t s o f c o m m i t s ' , l a b e l = ' C o m m i t s ' , l e g e n d = T r u e ) p l t . x l a b e l ( ' D a t e ' ) ; p l t . y l a b e l ( ' C o m m i t s ' ) p l t . s u p t i t l e ( R E P O _ P A T H , y = 1 . 0 5 , f o n t s i z e = 1 4 , f o n t w e i g h t = ' b o l d ' ) O u t [ 3 5 ] : < m a t p l o t l i b . t e x t . T e x t a t 0 x 1 7 8 9 e 3 2 b 0 >
  33. ipyparallel Powerful architecture for parallel and distributed computing Single program,

    multiple data (SPMD) parallelism. Multiple program, multiple data (MPMD) parallelism. Message passing using MPI. Task farming. Data parallel. Combinations of these approaches. Custom user de ned approaches
  34. Controller provide an interface for working with a set of

    engines (Direct or LoadBalanced) collection of processes to which IPython engines and clients can connect Controller = Hub + Schedulers
  35. Hub Center of a Cluster Process that keeps track of

    engine connections, schedulers, clients
  36. Schedulers All actions that can be performed on the engine

    go through a Scheduler provide a fully asynchronous interface to a set of engines
  37. I n [ ] : ! i p c l

    u s t e r s t a r t - n 4 I n [ 3 ] : % % b a s h p y t h o n n o t _ t r a c k / h a b r a p a r s e . p y s a v e _ f a v s _ l i s t s t l e o n n o t _ t r a c k / t e s t . t x t p y t h o n n o t _ t r a c k / h a b r a p a r s e . p y s a v e _ f a v s _ l i s t - - g t s t l e o n n o t _ t r a c k / t e s t 1 . t x t p y t h o n n o t _ t r a c k / h a b r a p a r s e . p y s a v e _ f a v s _ l i s t - - m m s t l e o n n o t _ t r a c k / t e s t 2 . t x t c a t n o t _ t r a c k / t e s t 1 . t x t n o t _ t r a c k / t e s t 2 . t x t > > n o t _ t r a c k / t e s t . t x t I n [ 4 7 ] : f r o m i p y p a r a l l e l i m p o r t C l i e n t , r e q u i r e c l i e n t = C l i e n t ( ) d v i e w = c l i e n t [ : ] I n [ 4 8 ] : d v i e w O u t [ 4 8 ] : < D i r e c t V i e w [ 0 , 1 , 2 , 3 ] > I n [ 4 9 ] : l i n k s = ( l i n k . s t r i p ( ) f o r l i n k i n o p e n ( ' n o t _ t r a c k / t e s t . t x t ' ) ) I n [ 5 0 ] : d v i e w . s c a t t e r ( ' l i n k s ' , l i s t ( l i n k s ) ) O u t [ 5 0 ] : < A s y n c R e s u l t : f i n i s h e d >
  38. I n [ 5 1 ] : l e n

    ( d v i e w [ ' l i n k s ' ] ) O u t [ 5 1 ] : 4 I n [ 5 2 ] : @ d v i e w . r e m o t e ( b l o c k = F a l s e ) @ r e q u i r e ( ' r e q u e s t s ' , ' b s 4 ' ) d e f t a g _ m a k e r ( ) : t a g s = { } f o r l i n k i n l i n k s : s o u p = b s 4 . B e a u t i f u l S o u p ( r e q u e s t s . g e t ( l i n k ) . t e x t , ' h t m l . p a r s e r ' ) f o r i i n s o u p . f i n d A l l ( " a " , r e l = " t a g " ) : t a g = i . s t r i n g . l o w e r ( ) t a g s [ t a g ] = 1 + t a g s . g e t ( t a g , 0 ) r e t u r n t a g s I n [ 5 3 ] : t a g s = t a g _ m a k e r ( ) . r e s u l t I n [ 1 ] : # t a g s
  39. I n [ 5 5 ] : f r o

    m c o l l e c t i o n s i m p o r t C o u n t e r f r o m f u n c t o o l s i m p o r t r e d u c e f r o m o p e r a t o r i m p o r t a d d n e w _ t a g s = d i c t ( r e d u c e ( a d d , ( C o u n t e r ( t a g ) f o r t a g i n t a g s ) ) ) I n [ 5 6 ] : l e n ( n e w _ t a g s . k e y s ( ) ) O u t [ 5 6 ] : 8 2 7 I n [ ] : f r o m w o r d c l o u d i m p o r t W o r d C l o u d w o r d c l o u d = W o r d C l o u d ( w i d t h = 1 9 2 0 , h e i g h t = 1 0 8 0 , s c a l e = 1 , f o n t _ p a t h = ' / L i b r a r y / F o n t s / V e r d a n a . t t f ' , m a x _ w o r d s = l e n ( n e w _ t a g s . k e y s ( ) ) ) w o r d c l o u d . g e n e r a t e _ f r o m _ f r e q u e n c i e s ( n e w _ t a g s . i t e m s ( ) )
  40. I n [ ] : p l t . i

    m s h o w ( w o r d c l o u d ) p l t . a x i s ( " o f f " ) p l t . s h o w ( ) w o r d c l o u d . t o _ f i l e ( ' t e s t . p n g ' ) I n [ ] : ! i p c l u s t e r s t o p
  41. Links https://github.com/stleon/ipython-slides (https://github.com/stleon/ipython- slides) https://talkpython.fm/episodes/show/44/project-jupyter-and-ipython (https://talkpython.fm/episodes/show/44/project-jupyter-and-ipython) http://blog.jupyter.org/2016/01/08/notebook-4-1-release/ (http://blog.jupyter.org/2016/01/08/notebook-4-1-release/) https://jupyter.readthedocs.org/en/latest/ (https://jupyter.readthedocs.org/en/latest/)

    https://folium.readthedocs.org/en/latest/ (https://folium.readthedocs.org/en/latest/) http://matplotlib.org (http://matplotlib.org) http://stanford.edu/~mwaskom/software/seaborn/ (http://stanford.edu/~mwaskom/software/seaborn/) https://github.com/PyGithub/PyGithub (https://github.com/PyGithub/PyGithub) http://ipyparallel.readthedocs.org/en/latest/index.html (http://ipyparallel.readthedocs.org/en/latest/index.html)