PageSourceSearch

https://ytknzw.github.io/

html ytknzw.github.io collected 2026-10-03 10:13:27 UTC 68,074 bytes, 2,319 lines download raw bytes

1<!DOCTYPE html>
2
3<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
4
5<head>
6  <meta charset="utf-8"/>
7  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
9  <meta name="generator" content="distill" />
10
11  <style type="text/css">
12  /* Hide doc at startup (prevent jankiness while JS renders/transforms) */
13  body {
14    visibility: hidden;
15  }
16  </style>
17
18 <!--radix_placeholder_import_source-->
19 <!--/radix_placeholder_import_source-->
20
21<style type="text/css">code{white-space: pre;}</style>
22<style type="text/css" data-origin="pandoc">
23html { -webkit-text-size-adjust: 100%; }
24pre > code.sourceCode { white-space: pre; position: relative; }
25pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
26pre > code.sourceCode > span:empty { height: 1.2em; }
27.sourceCode { overflow: visible; }
28code.sourceCode > span { color: inherit; text-decoration: inherit; }
29div.sourceCode { margin: 1em 0; }
30pre.sourceCode { margin: 0; }
31@media screen {
32div.sourceCode { overflow: auto; }
33}
34@media print {
35pre > code.sourceCode { white-space: pre-wrap; }
36pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
37}
38pre.numberSource code
39  { counter-reset: source-line 0; }
40pre.numberSource code > span
41  { position: relative; left: -4em; counter-increment: source-line; }
42pre.numberSource code > span > a:first-child::before
43  { content: counter(source-line);
44    position: relative; left: -1em; text-align: right; vertical-align: baseline;
45    border: none; display: inline-block;
46    -webkit-touch-callout: none; -webkit-user-select: none;
47    -khtml-user-select: none; -moz-user-select: none;
48    -ms-user-select: none; user-select: none;
49    padding: 0 4px; width: 4em;
50    color: #aaaaaa;
51  }
52pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
53div.sourceCode
54  { color: #00769e; background-color: #f1f3f5; }
55@media screen {
56pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
57}
58code span { color: #00769e; } /* Normal */
59code span.al { color: #ad0000; } /* Alert */
60code span.an { color: #5e5e5e; } /* Annotation */
61code span.at { color: #657422; } /* Attribute */
62code span.bn { color: #ad0000; } /* BaseN */
63code span.bu { } /* BuiltIn */
64code span.cf { color: #00769e; } /* ControlFlow */
65code span.ch { color: #20794d; } /* Char */
66code span.cn { color: #8f5902; } /* Constant */
67code span.co { color: #5e5e5e; } /* Comment */
68code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
69code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
70code span.dt { color: #ad0000; } /* DataType */
71code span.dv { color: #ad0000; } /* DecVal */
72code span.er { color: #ad0000; } /* Error */
73code span.ex { } /* Extension */
74code span.fl { color: #ad0000; } /* Float */
75code span.fu { color: #4758ab; } /* Function */
76code span.im { } /* Import */
77code span.in { color: #5e5e5e; } /* Information */
78code span.kw { color: #00769e; } /* Keyword */
79code span.op { color: #5e5e5e; } /* Operator */
80code span.ot { color: #00769e; } /* Other */
81code span.pp { color: #ad0000; } /* Preprocessor */
82code span.sc { color: #5e5e5e; } /* SpecialChar */
83code span.ss { color: #20794d; } /* SpecialString */
84code span.st { color: #20794d; } /* String */
85code span.va { color: #111111; } /* Variable */
86code span.vs { color: #20794d; } /* VerbatimString */
87code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
88</style>
89
90
91  <!--radix_placeholder_meta_tags-->
92  <title>Yuta Kanzawa, Data Scientist</title>
93
94  <meta property="description" itemprop="description" content="Hello! I&#39;m a data scientist based in Tokyo working on applied machine learning, business intelligence and data visualisation. Always under construction."/>
95
96
97
98  <!--  https://developers.facebook.com/docs/sharing/webmasters#markup -->
99  <meta property="og:title" content="Yuta Kanzawa, Data Scientist"/>
100  <meta property="og:type" content="article"/>
101  <meta property="og:description" content="Hello! I&#39;m a data scientist based in Tokyo working on applied machine learning, business intelligence and data visualisation. Always under construction."/>
102  <meta property="og:locale" content="en_US"/>
103  <meta property="og:site_name" content="Yuta Kanzawa, Data Scientist"/>
104
105  <!--  https://dev.twitter.com/cards/types/summary -->
106  <meta property="twitter:card" content="summary"/>
107  <meta property="twitter:title" content="Yuta Kanzawa, Data Scientist"/>
108  <meta property="twitter:description" content="Hello! I&#39;m a data scientist based in Tokyo working on applied machine learning, business intelligence and data visualisation. Always under construction."/>
109
110  <!--/radix_placeholder_meta_tags-->
111  <!--radix_placeholder_rmarkdown_metadata-->
112
113  
113<script type="text/json" id="radix-rmarkdown-metadata">
114  {"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","description","site"]}},"value":[{"type":"character","attributes":{},"value":["Yuta Kanzawa, Data Scientist"]},{"type":"character","attributes":{},"value":["Hello! I'm a data scientist based in Tokyo working on applied machine learning, business intelligence and data visualisation. Always under construction.\n"]},{"type":"character","attributes":{},"value":["distill::distill_website"]}]}
115  </script>
115
116  <!--/radix_placeholder_rmarkdown_metadata-->
117  <!--radix_placeholder_navigation_in_header-->
118  <meta name="distill:offset" content=""/>
119
120  
120<script type="application/javascript">
121
122    window.headroom_prevent_pin = false;
123
124    window.document.addEventListener("DOMContentLoaded", function (event) {
125
126      // initialize headroom for banner
127      var header = $('header').get(0);
128      var headerHeight = header.offsetHeight;
129      var headroom = new Headroom(header, {
130        tolerance: 5,
131        onPin : function() {
132          if (window.headroom_prevent_pin) {
133            window.headroom_prevent_pin = false;
134            headroom.unpin();
135          }
136        }
137      });
138      headroom.init();
139      if(window.location.hash)
140        headroom.unpin();
141      $(header).addClass('headroom--transition');
142
143      // offset scroll location for banner on hash change
144      // (see: https://github.com/WickyNilliams/headroom.js/issues/38)
145      window.addEventListener("hashchange", function(event) {
146        window.scrollTo(0, window.pageYOffset - (headerHeight + 25));
147      });
148
149      // responsive menu
150      $('.distill-site-header').each(function(i, val) {
151        var topnav = $(this);
152        var toggle = topnav.find('.nav-toggle');
153        toggle.on('click', function() {
154          topnav.toggleClass('responsive');
155        });
156      });
157
158      // nav dropdowns
159      $('.nav-dropbtn').click(function(e) {
160        $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active');
161        $(this).parent().siblings('.nav-dropdown')
162           .children('.nav-dropdown-content').removeClass('nav-dropdown-active');
163      });
164      $("body").click(function(e){
165        $('.nav-dropdown-content').removeClass('nav-dropdown-active');
166      });
167      $(".nav-dropdown").click(function(e){
168        e.stopPropagation();
169      });
170    });
171  </script>
171
172
173  <style type="text/css">
174
175  /* Theme (user-documented overrideables for nav appearance) */
176
177  .distill-site-nav {
178    color: rgba(255, 255, 255, 0.8);
179    background-color: #0F2E3D;
180    font-size: 15px;
181    font-weight: 300;
182  }
183
184  .distill-site-nav a {
185    color: inherit;
186    text-decoration: none;
187  }
188
189  .distill-site-nav a:hover {
190    color: white;
191  }
192
193  @media print {
194    .distill-site-nav {
195      display: none;
196    }
197  }
198
199  .distill-site-header {
200
201  }
202
203  .distill-site-footer {
204
205  }
206
207
208  /* Site Header */
209
210  .distill-site-header {
211    width: 100%;
212    box-sizing: border-box;
213    z-index: 3;
214  }
215
216  .distill-site-header .nav-left {
217    display: inline-block;
218    margin-left: 8px;
219  }
220
221  @media screen and (max-width: 768px) {
222    .distill-site-header .nav-left {
223      margin-left: 0;
224    }
225  }
226
227
228  .distill-site-header .nav-right {
229    float: right;
230    margin-right: 8px;
231  }
232
233  .distill-site-header a,
234  .distill-site-header .title {
235    display: inline-block;
236    text-align: center;
237    padding: 14px 10px 14px 10px;
238  }
239
240  .distill-site-header .title {
241    font-size: 18px;
242    min-width: 150px;
243  }
244
245  .distill-site-header .logo {
246    padding: 0;
247  }
248
249  .distill-site-header .logo img {
250    display: none;
251    max-height: 20px;
252    width: auto;
253    margin-bottom: -4px;
254  }
255
256  .distill-site-header .nav-image img {
257    max-height: 18px;
258    width: auto;
259    display: inline-block;
260    margin-bottom: -3px;
261  }
262
263
264
265  @media screen and (min-width: 1000px) {
266    .distill-site-header .logo img {
267      display: inline-block;
268    }
269    .distill-site-header .nav-left {
270      margin-left: 20px;
271    }
272    .distill-site-header .nav-right {
273      margin-right: 20px;
274    }
275    .distill-site-header .title {
276      padding-left: 12px;
277    }
278  }
279
280
281  .distill-site-header .nav-toggle {
282    display: none;
283  }
284
285  .nav-dropdown {
286    display: inline-block;
287    position: relative;
288  }
289
290  .nav-dropdown .nav-dropbtn {
291    border: none;
292    outline: none;
293    color: rgba(255, 255, 255, 0.8);
294    padding: 16px 10px;
295    background-color: transparent;
296    font-family: inherit;
297    font-size: inherit;
298    font-weight: inherit;
299    margin: 0;
300    margin-top: 1px;
301    z-index: 2;
302  }
303
304  .nav-dropdown-content {
305    display: none;
306    position: absolute;
307    background-color: white;
308    min-width: 200px;
309    border: 1px solid rgba(0,0,0,0.15);
310    border-radius: 4px;
311    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1);
312    z-index: 1;
313    margin-top: 2px;
314    white-space: nowrap;
315    padding-top: 4px;
316    padding-bottom: 4px;
317  }
318
319  .nav-dropdown-content hr {
320    margin-top: 4px;
321    margin-bottom: 4px;
322    border: none;
323    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
324  }
325
326  .nav-dropdown-active {
327    display: block;
328  }
329
330  .nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header {
331    color: black;
332    padding: 6px 24px;
333    text-decoration: none;
334    display: block;
335    text-align: left;
336  }
337
338  .nav-dropdown-content .nav-dropdown-header {
339    display: block;
340    padding: 5px 24px;
341    padding-bottom: 0;
342    text-transform: uppercase;
343    font-size: 14px;
344    color: #999999;
345    white-space: nowrap;
346  }
347
348  .nav-dropdown:hover .nav-dropbtn {
349    color: white;
350  }
351
352  .nav-dropdown-content a:hover {
353    background-color: #ddd;
354    color: black;
355  }
356
357  .nav-right .nav-dropdown-content {
358    margin-left: -45%;
359    right: 0;
360  }
361
362  @media screen and (max-width: 768px) {
363    .distill-site-header a, .distill-site-header .nav-dropdown  {display: none;}
364    .distill-site-header a.nav-toggle {
365      float: right;
366      display: block;
367    }
368    .distill-site-header .title {
369      margin-left: 0;
370    }
371    .distill-site-header .nav-right {
372      margin-right: 0;
373    }
374    .distill-site-header {
375      overflow: hidden;
376    }
377    .nav-right .nav-dropdown-content {
378      margin-left: 0;
379    }
380  }
381
382
383  @media screen and (max-width: 768px) {
384    .distill-site-header.responsive {position: relative; min-height: 500px; }
385    .distill-site-header.responsive a.nav-toggle {
386      position: absolute;
387      right: 0;
388      top: 0;
389    }
390    .distill-site-header.responsive a,
391    .distill-site-header.responsive .nav-dropdown {
392      display: block;
393      text-align: left;
394    }
395    .distill-site-header.responsive .nav-left,
396    .distill-site-header.responsive .nav-right {
397      width: 100%;
398    }
399    .distill-site-header.responsive .nav-dropdown {float: none;}
400    .distill-site-header.responsive .nav-dropdown-content {position: relative;}
401    .distill-site-header.responsive .nav-dropdown .nav-dropbtn {
402      display: block;
403      width: 100%;
404      text-align: left;
405    }
406  }
407
408  /* Site Footer */
409
410  .distill-site-footer {
411    width: 100%;
412    overflow: hidden;
413    box-sizing: border-box;
414    z-index: 3;
415    margin-top: 30px;
416    padding-top: 30px;
417    padding-bottom: 30px;
418    text-align: center;
419  }
420
421  /* Headroom */
422
423  d-title {
424    padding-top: 6rem;
425  }
426
427  @media print {
428    d-title {
429      padding-top: 4rem;
430    }
431  }
432
433  .headroom {
434    z-index: 1000;
435    position: fixed;
436    top: 0;
437    left: 0;
438    right: 0;
439  }
440
441  .headroom--transition {
442    transition: all .4s ease-in-out;
443  }
444
445  .headroom--unpinned {
446    top: -100px;
447  }
448
449  .headroom--pinned {
450    top: 0;
451  }
452
453  /* adjust viewport for navbar height */
454  /* helps vertically center bootstrap (non-distill) content */
455  .min-vh-100 {
456    min-height: calc(100vh - 100px) !important;
457  }
458
459  </style>
460
461  
461<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
461
462  <link href="site_libs/font-awesome-6.5.2/css/all.min.css" rel="stylesheet"/>
463  <link href="site_libs/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet"/>
464  
464<script src="site_libs/headroom-0.9.4/headroom.min.js"></script>
464
465  
465<script src="site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
465
466  
466<script src="site_libs/fuse-6.4.1/fuse.min.js"></script>
466
467
468  
468<script type="application/javascript">
469
470  function getMeta(metaName) {
471    var metas = document.getElementsByTagName('meta');
472    for (let i = 0; i < metas.length; i++) {
473      if (metas[i].getAttribute('name') === metaName) {
474        return metas[i].getAttribute('content');
475      }
476    }
477    return '';
478  }
479
480  function offsetURL(url) {
481    var offset = getMeta('distill:offset');
482    return offset ? offset + '/' + url : url;
483  }
484
485  function createFuseIndex() {
486
487    // create fuse index
488    var options = {
489      keys: [
490        { name: 'title', weight: 20 },
491        { name: 'categories', weight: 15 },
492        { name: 'description', weight: 10 },
493        { name: 'contents', weight: 5 },
494      ],
495      ignoreLocation: true,
496      threshold: 0
497    };
498    var fuse = new window.Fuse([], options);
499
500    // fetch the main search.json
501    return fetch(offsetURL('search.json'))
502      .then(function(response) {
503        if (response.status == 200) {
504          return response.json().then(function(json) {
505            // index main articles
506            json.articles.forEach(function(article) {
507              fuse.add(article);
508            });
509            // download collections and index their articles
510            return Promise.all(json.collections.map(function(collection) {
511              return fetch(offsetURL(collection)).then(function(response) {
512                if (response.status === 200) {
513                  return response.json().then(function(articles) {
514                    articles.forEach(function(article) {
515                      fuse.add(article);
516                    });
517                  })
518                } else {
519                  return Promise.reject(
520                    new Error('Unexpected status from search index request: ' +
521                              response.status)
522                  );
523                }
524              });
525            })).then(function() {
526              return fuse;
527            });
528          });
529
530        } else {
531          return Promise.reject(
532            new Error('Unexpected status from search index request: ' +
533                        response.status)
534          );
535        }
536      });
537  }
538
539  window.document.addEventListener("DOMContentLoaded", function (event) {
540
541    // get search element (bail if we don't have one)
542    var searchEl = window.document.getElementById('distill-search');
543    if (!searchEl)
544      return;
545
546    createFuseIndex()
547      .then(function(fuse) {
548
549        // make search box visible
550        searchEl.classList.remove('hidden');
551
552        // initialize autocomplete
553        var options = {
554          autoselect: true,
555          hint: false,
556          minLength: 2,
557        };
558        window.autocomplete(searchEl, options, [{
559          source: function(query, callback) {
560            const searchOptions = {
561              isCaseSensitive: false,
562              shouldSort: true,
563              minMatchCharLength: 2,
564              limit: 10,
565            };
566            var results = fuse.search(query, searchOptions);
567            callback(results
568              .map(function(result) { return result.item; })
569            );
570          },
571          templates: {
572            suggestion: function(suggestion) {
573              var img = suggestion.preview && Object.keys(suggestion.preview).length > 0
574                ? `<img src="${offsetURL(suggestion.preview)}"</img>`
575                : '';
576              var html = `
577                <div class="search-item">
578                  <h3>${suggestion.title}</h3>
579                  <div class="search-item-description">
580                    ${suggestion.description || ''}
581                  </div>
582                  <div class="search-item-preview">
583                    ${img}
584                  </div>
585                </div>
586              `;
587              return html;
588            }
589          }
590        }]).on('autocomplete:selected', function(event, suggestion) {
591          window.location.href = offsetURL(suggestion.path);
592        });
593        // remove inline display style on autocompleter (we want to
594        // manage responsive display via css)
595        $('.algolia-autocomplete').css("display", "");
596      })
597      .catch(function(error) {
598        console.log(error);
599      });
600
601  });
602
603  </script>
603
604
605  <style type="text/css">
606
607  .nav-search {
608    font-size: x-small;
609  }
610
611  /* Algolioa Autocomplete */
612
613  .algolia-autocomplete {
614    display: inline-block;
615    margin-left: 10px;
616    vertical-align: sub;
617    background-color: white;
618    color: black;
619    padding: 6px;
620    padding-top: 8px;
621    padding-bottom: 0;
622    border-radius: 6px;
623    border: 1px #0F2E3D solid;
624    width: 180px;
625  }
626
627
628  @media screen and (max-width: 768px) {
629    .distill-site-nav .algolia-autocomplete {
630      display: none;
631      visibility: hidden;
632    }
633    .distill-site-nav.responsive .algolia-autocomplete {
634      display: inline-block;
635      visibility: visible;
636    }
637    .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu {
638      margin-left: 0;
639      width: 400px;
640      max-height: 400px;
641    }
642  }
643
644  .algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
645    width: 90%;
646    outline: none;
647    border: none;
648  }
649
650  .algolia-autocomplete .aa-hint {
651    color: #999;
652  }
653  .algolia-autocomplete .aa-dropdown-menu {
654    width: 550px;
655    max-height: 70vh;
656    overflow-x: visible;
657    overflow-y: scroll;
658    padding: 5px;
659    margin-top: 3px;
660    margin-left: -150px;
661    background-color: #fff;
662    border-radius: 5px;
663    border: 1px solid #999;
664    border-top: none;
665  }
666
667  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
668    cursor: pointer;
669    padding: 5px 4px;
670    border-bottom: 1px solid #eee;
671  }
672
673  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type {
674    border-bottom: none;
675    margin-bottom: 2px;
676  }
677
678  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item {
679    overflow: hidden;
680    font-size: 0.8em;
681    line-height: 1.4em;
682  }
683
684  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 {
685    font-size: 1rem;
686    margin-block-start: 0;
687    margin-block-end: 5px;
688  }
689
690  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description {
691    display: inline-block;
692    overflow: hidden;
693    height: 2.8em;
694    width: 80%;
695    margin-right: 4%;
696  }
697
698  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview {
699    display: inline-block;
700    width: 15%;
701  }
702
703  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img {
704    height: 3em;
705    width: auto;
706    display: none;
707  }
708
709  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] {
710    display: initial;
711  }
712
713  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
714    background-color: #eee;
715  }
716  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
717    font-weight: bold;
718    font-style: normal;
719  }
720
721  </style>
722
723
724  <!--/radix_placeholder_navigation_in_header-->
725  <!--radix_placeholder_distill-->
726
727  <style type="text/css">
728
729  body {
730    background-color: white;
731  }
732
733  .pandoc-table {
734    width: 100%;
735  }
736
737  .pandoc-table>caption {
738    margin-bottom: 10px;
739  }
740
741  .pandoc-table th:not([align]) {
742    text-align: left;
743  }
744
745  .pagedtable-footer {
746    font-size: 15px;
747  }
748
749  d-byline .byline {
750    grid-template-columns: 2fr 2fr;
751  }
752
753  d-byline .byline h3 {
754    margin-block-start: 1.5em;
755  }
756
757  d-byline .byline .authors-affiliations h3 {
758    margin-block-start: 0.5em;
759  }
760
761  .authors-affiliations .orcid-id {
762    width: 16px;
763    height:16px;
764    margin-left: 4px;
765    margin-right: 4px;
766    vertical-align: middle;
767    padding-bottom: 2px;
768  }
769
770  d-title .dt-tags {
771    margin-top: 1em;
772    grid-column: text;
773  }
774
775  .dt-tags .dt-tag {
776    text-decoration: none;
777    display: inline-block;
778    color: rgba(0,0,0,0.6);
779    padding: 0em 0.4em;
780    margin-right: 0.5em;
781    margin-bottom: 0.4em;
782    font-size: 70%;
783    border: 1px solid rgba(0,0,0,0.2);
784    border-radius: 3px;
785    text-transform: uppercase;
786    font-weight: 500;
787  }
788
789  d-article table.gt_table td,
790  d-article table.gt_table th {
791    border-bottom: none;
792    font-size: 100%;
793  }
794
795  .html-widget {
796    margin-bottom: 2.0em;
797  }
798
799  .l-screen-inset {
800    padding-right: 16px;
801  }
802
803  .l-screen .caption {
804    margin-left: 10px;
805  }
806
807  .shaded {
808    background: rgb(247, 247, 247);
809    padding-top: 20px;
810    padding-bottom: 20px;
811    border-top: 1px solid rgba(0, 0, 0, 0.1);
812    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
813  }
814
815  .shaded .html-widget {
816    margin-bottom: 0;
817    border: 1px solid rgba(0, 0, 0, 0.1);
818  }
819
820  .shaded .shaded-content {
821    background: white;
822  }
823
824  .text-output {
825    margin-top: 0;
826    line-height: 1.5em;
827  }
828
829  .hidden {
830    display: none !important;
831  }
832
833  hr.section-separator {
834    border: none;
835    border-top: 1px solid rgba(0, 0, 0, 0.1);
836    margin: 0px;
837  }
838
839
840  d-byline {
841    border-top: none;
842  }
843
844  d-article {
845    padding-top: 2.5rem;
846    padding-bottom: 30px;
847    border-top: none;
848  }
849
850  d-appendix {
851    padding-top: 30px;
852  }
853
854  d-article>p>img {
855    width: 100%;
856  }
857
858  d-article h2 {
859    margin: 1rem 0 1.5rem 0;
860  }
861
862  d-article h3 {
863    margin-top: 1.5rem;
864  }
865
866  d-article iframe {
867    border: 1px solid rgba(0, 0, 0, 0.1);
868    margin-bottom: 2.0em;
869    width: 100%;
870  }
871
872  /* Tweak code blocks */
873
874  d-article div.sourceCode code,
875  d-article pre code {
876    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
877  }
878
879  d-article pre,
880  d-article div.sourceCode,
881  d-article div.sourceCode pre {
882    overflow: auto;
883  }
884
885  d-article div.sourceCode {
886    background-color: white;
887  }
888
889  d-article div.sourceCode pre {
890    padding-left: 10px;
891    font-size: 12px;
892    border-left: 2px solid rgba(0,0,0,0.1);
893  }
894
895  d-article pre {
896    font-size: 12px;
897    color: black;
898    background: none;
899    margin-top: 0;
900    text-align: left;
901    white-space: pre;
902    word-spacing: normal;
903    word-break: normal;
904    word-wrap: normal;
905    line-height: 1.5;
906
907    -moz-tab-size: 4;
908    -o-tab-size: 4;
909    tab-size: 4;
910
911    -webkit-hyphens: none;
912    -moz-hyphens: none;
913    -ms-hyphens: none;
914    hyphens: none;
915  }
916
917  d-article pre a {
918    border-bottom: none;
919  }
920
921  d-article pre a:hover {
922    border-bottom: none;
923    text-decoration: underline;
924  }
925
926  d-article details {
927    grid-column: text;
928    margin-bottom: 0.8em;
929  }
930
931  @media(min-width: 768px) {
932
933  d-article pre,
934  d-article div.sourceCode,
935  d-article div.sourceCode pre {
936    overflow: visible !important;
937  }
938
939  d-article div.sourceCode pre {
940    padding-left: 18px;
941    font-size: 14px;
942  }
943
944  /* tweak for Pandoc numbered line within distill */
945  d-article pre.numberSource code > span {
946      left: -2em;
947  }
948
949  d-article pre {
950    font-size: 14px;
951  }
952
953  }
954
955  figure img.external {
956    background: white;
957    border: 1px solid rgba(0, 0, 0, 0.1);
958    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
959    padding: 18px;
960    box-sizing: border-box;
961  }
962
963  /* CSS for d-contents */
964
965  .d-contents {
966    grid-column: text;
967    color: rgba(0,0,0,0.8);
968    font-size: 0.9em;
969    padding-bottom: 1em;
970    margin-bottom: 1em;
971    padding-bottom: 0.5em;
972    margin-bottom: 1em;
973    padding-left: 0.25em;
974    justify-self: start;
975  }
976
977  @media(min-width: 1000px) {
978    .d-contents.d-contents-float {
979      height: 0;
980      grid-column-start: 1;
981      grid-column-end: 4;
982      justify-self: center;
983      padding-right: 3em;
984      padding-left: 2em;
985    }
986  }
987
988  .d-contents nav h3 {
989    font-size: 18px;
990    margin-top: 0;
991    margin-bottom: 1em;
992  }
993
994  .d-contents li {
995    list-style-type: none
996  }
997
998  .d-contents nav > ul {
999    padding-left: 0;
1000  }
1001
1002  .d-contents ul {
1003    padding-left: 1em
1004  }
1005
1006  .d-contents nav ul li {
1007    margin-top: 0.6em;
1008    margin-bottom: 0.2em;
1009  }
1010
1011  .d-contents nav a {
1012    font-size: 13px;
1013    border-bottom: none;
1014    text-decoration: none
1015    color: rgba(0, 0, 0, 0.8);
1016  }
1017
1018  .d-contents nav a:hover {
1019    text-decoration: underline solid rgba(0, 0, 0, 0.6)
1020  }
1021
1022  .d-contents nav > ul > li > a {
1023    font-weight: 600;
1024  }
1025
1026  .d-contents nav > ul > li > ul {
1027    font-weight: inherit;
1028  }
1029
1030  .d-contents nav > ul > li > ul > li {
1031    margin-top: 0.2em;
1032  }
1033
1034
1035  .d-contents nav ul {
1036    margin-top: 0;
1037    margin-bottom: 0.25em;
1038  }
1039
1040  .d-article-with-toc h2:nth-child(2) {
1041    margin-top: 0;
1042  }
1043
1044
1045  /* Figure */
1046
1047  .figure {
1048    position: relative;
1049    margin-bottom: 2.5em;
1050    margin-top: 1.5em;
1051  }
1052
1053  .figure .caption {
1054    color: rgba(0, 0, 0, 0.6);
1055    font-size: 12px;
1056    line-height: 1.5em;
1057  }
1058
1059  .figure img.external {
1060    background: white;
1061    border: 1px solid rgba(0, 0, 0, 0.1);
1062    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
1063    padding: 18px;
1064    box-sizing: border-box;
1065  }
1066
1067  .figure .caption a {
1068    color: rgba(0, 0, 0, 0.6);
1069  }
1070
1071  .figure .caption b,
1072  .figure .caption strong, {
1073    font-weight: 600;
1074    color: rgba(0, 0, 0, 1.0);
1075  }
1076
1077  /* Citations */
1078
1079  d-article .citation {
1080    color: inherit;
1081    cursor: inherit;
1082  }
1083
1084  div.hanging-indent{
1085    margin-left: 1em; text-indent: -1em;
1086  }
1087
1088  /* Citation hover box */
1089
1090  .tippy-box[data-theme~=light-border] {
1091    background-color: rgba(250, 250, 250, 0.95);
1092  }
1093
1094  .tippy-content > p {
1095    margin-bottom: 0;
1096    padding: 2px;
1097  }
1098
1099
1100  /* Tweak 1000px media break to show more text */
1101
1102  @media(min-width: 1000px) {
1103    .base-grid,
1104    distill-header,
1105    d-title,
1106    d-abstract,
1107    d-article,
1108    d-appendix,
1109    distill-appendix,
1110    d-byline,
1111    d-footnote-list,
1112    d-citation-list,
1113    distill-footer {
1114      grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end];
1115      grid-column-gap: 16px;
1116    }
1117
1118    .grid {
1119      grid-column-gap: 16px;
1120    }
1121
1122    d-article {
1123      font-size: 1.06rem;
1124      line-height: 1.7em;
1125    }
1126    figure .caption, .figure .caption, figure figcaption {
1127      font-size: 13px;
1128    }
1129  }
1130
1131  @media(min-width: 1180px) {
1132    .base-grid,
1133    distill-header,
1134    d-title,
1135    d-abstract,
1136    d-article,
1137    d-appendix,
1138    distill-appendix,
1139    d-byline,
1140    d-footnote-list,
1141    d-citation-list,
1142    distill-footer {
1143      grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];
1144      grid-column-gap: 32px;
1145    }
1146
1147    .grid {
1148      grid-column-gap: 32px;
1149    }
1150  }
1151
1152
1153  /* Get the citation styles for the appendix (not auto-injected on render since
1154     we do our own rendering of the citation appendix) */
1155
1156  d-appendix .citation-appendix,
1157  .d-appendix .citation-appendix {
1158    font-size: 11px;
1159    line-height: 15px;
1160    border-left: 1px solid rgba(0, 0, 0, 0.1);
1161    padding-left: 18px;
1162    border: 1px solid rgba(0,0,0,0.1);
1163    background: rgba(0, 0, 0, 0.02);
1164    padding: 10px 18px;
1165    border-radius: 3px;
1166    color: rgba(150, 150, 150, 1);
1167    overflow: hidden;
1168    margin-top: -12px;
1169    white-space: pre-wrap;
1170    word-wrap: break-word;
1171  }
1172
1173  /* Include appendix styles here so they can be overridden */
1174
1175  d-appendix {
1176    contain: layout style;
1177    font-size: 0.8em;
1178    line-height: 1.7em;
1179    margin-top: 60px;
1180    margin-bottom: 0;
1181    border-top: 1px solid rgba(0, 0, 0, 0.1);
1182    color: rgba(0,0,0,0.5);
1183    padding-top: 60px;
1184    padding-bottom: 48px;
1185  }
1186
1187  d-appendix h3 {
1188    grid-column: page-start / text-start;
1189    font-size: 15px;
1190    font-weight: 500;
1191    margin-top: 1em;
1192    margin-bottom: 0;
1193    color: rgba(0,0,0,0.65);
1194  }
1195
1196  d-appendix h3 + * {
1197    margin-top: 1em;
1198  }
1199
1200  d-appendix ol {
1201    padding: 0 0 0 15px;
1202  }
1203
1204  @media (min-width: 768px) {
1205    d-appendix ol {
1206      padding: 0 0 0 30px;
1207      margin-left: -30px;
1208    }
1209  }
1210
1211  d-appendix li {
1212    margin-bottom: 1em;
1213  }
1214
1215  d-appendix a {
1216    color: rgba(0, 0, 0, 0.6);
1217  }
1218
1219  d-appendix > * {
1220    grid-column: text;
1221  }
1222
1223  d-appendix > d-footnote-list,
1224  d-appendix > d-citation-list,
1225  d-appendix > distill-appendix {
1226    grid-column: screen;
1227  }
1228
1229  /* Include footnote styles here so they can be overridden */
1230
1231  d-footnote-list {
1232    contain: layout style;
1233  }
1234
1235  d-footnote-list > * {
1236    grid-column: text;
1237  }
1238
1239  d-footnote-list a.footnote-backlink {
1240    color: rgba(0,0,0,0.3);
1241    padding-left: 0.5em;
1242  }
1243
1244
1245
1246  /* Anchor.js */
1247
1248  .anchorjs-link {
1249    /*transition: all .25s linear; */
1250    text-decoration: none;
1251    border-bottom: none;
1252  }
1253  *:hover > .anchorjs-link {
1254    margin-left: -1.125em !important;
1255    text-decoration: none;
1256    border-bottom: none;
1257  }
1258
1259  /* Social footer */
1260
1261  .social_footer {
1262    margin-top: 30px;
1263    margin-bottom: 0;
1264    color: rgba(0,0,0,0.67);
1265  }
1266
1267  .disqus-comments {
1268    margin-right: 30px;
1269  }
1270
1271  .disqus-comment-count {
1272    border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1273    cursor: pointer;
1274  }
1275
1276  #disqus_thread {
1277    margin-top: 30px;
1278  }
1279
1280  .article-sharing a {
1281    border-bottom: none;
1282    margin-right: 8px;
1283  }
1284
1285  .article-sharing a:hover {
1286    border-bottom: none;
1287  }
1288
1289  .sidebar-section.subscribe {
1290    font-size: 12px;
1291    line-height: 1.6em;
1292  }
1293
1294  .subscribe p {
1295    margin-bottom: 0.5em;
1296  }
1297
1298
1299  .article-footer .subscribe {
1300    font-size: 15px;
1301    margin-top: 45px;
1302  }
1303
1304
1305  .sidebar-section.custom {
1306    font-size: 12px;
1307    line-height: 1.6em;
1308  }
1309
1310  .custom p {
1311    margin-bottom: 0.5em;
1312  }
1313
1314  /* Styles for listing layout (hide title) */
1315  .layout-listing d-title, .layout-listing .d-title {
1316    display: none;
1317  }
1318
1319  /* Styles for posts lists (not auto-injected) */
1320
1321
1322  .posts-with-sidebar {
1323    padding-left: 45px;
1324    padding-right: 45px;
1325  }
1326
1327  .posts-list .description h2,
1328  .posts-list .description p {
1329    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1330  }
1331
1332  .posts-list .description h2 {
1333    font-weight: 700;
1334    border-bottom: none;
1335    padding-bottom: 0;
1336  }
1337
1338  .posts-list h2.post-tag {
1339    border-bottom: 1px solid rgba(0, 0, 0, 0.2);
1340    padding-bottom: 12px;
1341  }
1342  .posts-list {
1343    margin-top: 60px;
1344    margin-bottom: 24px;
1345  }
1346
1347  .posts-list .post-preview {
1348    text-decoration: none;
1349    overflow: hidden;
1350    display: block;
1351    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
1352    padding: 24px 0;
1353  }
1354
1355  .post-preview-last {
1356    border-bottom: none !important;
1357  }
1358
1359  .posts-list .posts-list-caption {
1360    grid-column: screen;
1361    font-weight: 400;
1362  }
1363
1364  .posts-list .post-preview h2 {
1365    margin: 0 0 6px 0;
1366    line-height: 1.2em;
1367    font-style: normal;
1368    font-size: 24px;
1369  }
1370
1371  .posts-list .post-preview p {
1372    margin: 0 0 12px 0;
1373    line-height: 1.4em;
1374    font-size: 16px;
1375  }
1376
1377  .posts-list .post-preview .thumbnail {
1378    box-sizing: border-box;
1379    margin-bottom: 24px;
1380    position: relative;
1381    max-width: 500px;
1382  }
1383  .posts-list .post-preview img {
1384    width: 100%;
1385    display: block;
1386  }
1387
1388  .posts-list .metadata {
1389    font-size: 12px;
1390    line-height: 1.4em;
1391    margin-bottom: 18px;
1392  }
1393
1394  .posts-list .metadata > * {
1395    display: inline-block;
1396  }
1397
1398  .posts-list .metadata .publishedDate {
1399    margin-right: 2em;
1400  }
1401
1402  .posts-list .metadata .dt-authors {
1403    display: block;
1404    margin-top: 0.3em;
1405    margin-right: 2em;
1406  }
1407
1408  .posts-list .dt-tags {
1409    display: block;
1410    line-height: 1em;
1411  }
1412
1413  .posts-list .dt-tags .dt-tag {
1414    display: inline-block;
1415    color: rgba(0,0,0,0.6);
1416    padding: 0.3em 0.4em;
1417    margin-right: 0.2em;
1418    margin-bottom: 0.4em;
1419    font-size: 60%;
1420    border: 1px solid rgba(0,0,0,0.2);
1421    border-radius: 3px;
1422    text-transform: uppercase;
1423    font-weight: 500;
1424  }
1425
1426  .posts-list img {
1427    opacity: 1;
1428  }
1429
1430  .posts-list img[data-src] {
1431    opacity: 0;
1432  }
1433
1434  .posts-more {
1435    clear: both;
1436  }
1437
1438
1439  .posts-sidebar {
1440    font-size: 16px;
1441  }
1442
1443  .posts-sidebar h3 {
1444    font-size: 16px;
1445    margin-top: 0;
1446    margin-bottom: 0.5em;
1447    font-weight: 400;
1448    text-transform: uppercase;
1449  }
1450
1451  .sidebar-section {
1452    margin-bottom: 30px;
1453  }
1454
1455  .categories ul {
1456    list-style-type: none;
1457    margin: 0;
1458    padding: 0;
1459  }
1460
1461  .categories li {
1462    color: rgba(0, 0, 0, 0.8);
1463    margin-bottom: 0;
1464  }
1465
1466  .categories li>a {
1467    border-bottom: none;
1468  }
1469
1470  .categories li>a:hover {
1471    border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1472  }
1473
1474  .categories .active {
1475    font-weight: 600;
1476  }
1477
1478  .categories .category-count {
1479    color: rgba(0, 0, 0, 0.4);
1480  }
1481
1482
1483  @media(min-width: 768px) {
1484    .posts-list .post-preview h2 {
1485      font-size: 26px;
1486    }
1487    .posts-list .post-preview .thumbnail {
1488      float: right;
1489      width: 30%;
1490      margin-bottom: 0;
1491    }
1492    .posts-list .post-preview .description {
1493      float: left;
1494      width: 45%;
1495    }
1496    .posts-list .post-preview .metadata {
1497      float: left;
1498      width: 20%;
1499      margin-top: 8px;
1500    }
1501    .posts-list .post-preview p {
1502      margin: 0 0 12px 0;
1503      line-height: 1.5em;
1504      font-size: 16px;
1505    }
1506    .posts-with-sidebar .posts-list {
1507      float: left;
1508      width: 75%;
1509    }
1510    .posts-with-sidebar .posts-sidebar {
1511      float: right;
1512      width: 20%;
1513      margin-top: 60px;
1514      padding-top: 24px;
1515      padding-bottom: 24px;
1516    }
1517  }
1518
1519
1520  /* Improve display for browsers without grid (IE/Edge <= 15) */
1521
1522  .downlevel {
1523    line-height: 1.6em;
1524    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1525    margin: 0;
1526  }
1527
1528  .downlevel .d-title {
1529    padding-top: 6rem;
1530    padding-bottom: 1.5rem;
1531  }
1532
1533  .downlevel .d-title h1 {
1534    font-size: 50px;
1535    font-weight: 700;
1536    line-height: 1.1em;
1537    margin: 0 0 0.5rem;
1538  }
1539
1540  .downlevel .d-title p {
1541    font-weight: 300;
1542    font-size: 1.2rem;
1543    line-height: 1.55em;
1544    margin-top: 0;
1545  }
1546
1547  .downlevel .d-byline {
1548    padding-top: 0.8em;
1549    padding-bottom: 0.8em;
1550    font-size: 0.8rem;
1551    line-height: 1.8em;
1552  }
1553
1554  .downlevel .section-separator {
1555    border: none;
1556    border-top: 1px solid rgba(0, 0, 0, 0.1);
1557  }
1558
1559  .downlevel .d-article {
1560    font-size: 1.06rem;
1561    line-height: 1.7em;
1562    padding-top: 1rem;
1563    padding-bottom: 2rem;
1564  }
1565
1566
1567  .downlevel .d-appendix {
1568    padding-left: 0;
1569    padding-right: 0;
1570    max-width: none;
1571    font-size: 0.8em;
1572    line-height: 1.7em;
1573    margin-bottom: 0;
1574    color: rgba(0,0,0,0.5);
1575    padding-top: 40px;
1576    padding-bottom: 48px;
1577  }
1578
1579  .downlevel .footnotes ol {
1580    padding-left: 13px;
1581  }
1582
1583  .downlevel .base-grid,
1584  .downlevel .distill-header,
1585  .downlevel .d-title,
1586  .downlevel .d-abstract,
1587  .downlevel .d-article,
1588  .downlevel .d-appendix,
1589  .downlevel .distill-appendix,
1590  .downlevel .d-byline,
1591  .downlevel .d-footnote-list,
1592  .downlevel .d-citation-list,
1593  .downlevel .distill-footer,
1594  .downlevel .appendix-bottom,
1595  .downlevel .posts-container {
1596    padding-left: 40px;
1597    padding-right: 40px;
1598  }
1599
1600  @media(min-width: 768px) {
1601    .downlevel .base-grid,
1602    .downlevel .distill-header,
1603    .downlevel .d-title,
1604    .downlevel .d-abstract,
1605    .downlevel .d-article,
1606    .downlevel .d-appendix,
1607    .downlevel .distill-appendix,
1608    .downlevel .d-byline,
1609    .downlevel .d-footnote-list,
1610    .downlevel .d-citation-list,
1611    .downlevel .distill-footer,
1612    .downlevel .appendix-bottom,
1613    .downlevel .posts-container {
1614    padding-left: 150px;
1615    padding-right: 150px;
1616    max-width: 900px;
1617  }
1618  }
1619
1620  .downlevel pre code {
1621    display: block;
1622    border-left: 2px solid rgba(0, 0, 0, .1);
1623    padding: 0 0 0 20px;
1624    font-size: 14px;
1625  }
1626
1627  .downlevel code, .downlevel pre {
1628    color: black;
1629    background: none;
1630    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
1631    text-align: left;
1632    white-space: pre;
1633    word-spacing: normal;
1634    word-break: normal;
1635    word-wrap: normal;
1636    line-height: 1.5;
1637
1638    -moz-tab-size: 4;
1639    -o-tab-size: 4;
1640    tab-size: 4;
1641
1642    -webkit-hyphens: none;
1643    -moz-hyphens: none;
1644    -ms-hyphens: none;
1645    hyphens: none;
1646  }
1647
1648  .downlevel .posts-list .post-preview {
1649    color: inherit;
1650  }
1651
1652
1653
1654  </style>
1655
1656  
1656<script type="application/javascript">
1657
1658  function is_downlevel_browser() {
1659    if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"},
1660                                   window.navigator.userAgent)) {
1661      return true;
1662    } else {
1663      return window.load_distill_framework === undefined;
1664    }
1665  }
1666
1667  // show body when load is complete
1668  function on_load_complete() {
1669
1670    // add anchors
1671    if (window.anchors) {
1672      window.anchors.options.placement = 'left';
1673      window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5');
1674    }
1675
1676
1677    // set body to visible
1678    document.body.style.visibility = 'visible';
1679
1680    // force redraw for leaflet widgets
1681    if (window.HTMLWidgets) {
1682      var maps = window.HTMLWidgets.findAll(".leaflet");
1683      $.each(maps, function(i, el) {
1684        var map = this.getMap();
1685        map.invalidateSize();
1686        map.eachLayer(function(layer) {
1687          if (layer instanceof L.TileLayer)
1688            layer.redraw();
1689        });
1690      });
1691    }
1692
1693    // trigger 'shown' so htmlwidgets resize
1694    $('d-article').trigger('shown');
1695  }
1696
1697  function init_distill() {
1698
1699    init_common();
1700
1701    // create front matter
1702    var front_matter = $('<d-front-matter></d-front-matter>');
1703    $('#distill-front-matter').wrap(front_matter);
1704
1705    // create d-title
1706    $('.d-title').changeElementType('d-title');
1707
1708    // separator
1709    var separator = '<hr class="section-separator" style="clear: both"/>';
1710    // prepend separator above appendix
1711    $('.d-byline').before(separator);
1712    $('.d-article').before(separator);
1713
1714    // create d-byline
1715    var byline = $('<d-byline></d-byline>');
1716    $('.d-byline').replaceWith(byline);
1717
1718    // create d-article
1719    var article = $('<d-article></d-article>');
1720    $('.d-article').wrap(article).children().unwrap();
1721
1722    // move posts container into article
1723    $('.posts-container').appendTo($('d-article'));
1724
1725    // create d-appendix
1726    $('.d-appendix').changeElementType('d-appendix');
1727
1728    // flag indicating that we have appendix items
1729    var appendix = $('.appendix-bottom').children('h3').length > 0;
1730
1731    // replace footnotes with <d-footnote>
1732    $('.footnote-ref').each(function(i, val) {
1733      appendix = true;
1734      var href = $(this).attr('href');
1735      var id = href.replace('#', '');
1736      var fn = $('#' + id);
1737      var fn_p = $('#' + id + '>p');
1738      fn_p.find('.footnote-back').remove();
1739      var text = fn_p.html();
1740      var dtfn = $('<d-footnote></d-footnote>');
1741      dtfn.html(text);
1742      $(this).replaceWith(dtfn);
1743    });
1744    // remove footnotes
1745    $('.footnotes').remove();
1746
1747    // move refs into #references-listing
1748    $('#references-listing').replaceWith($('#refs'));
1749
1750    $('h1.appendix, h2.appendix').each(function(i, val) {
1751      $(this).changeElementType('h3');
1752    });
1753    $('h3.appendix').each(function(i, val) {
1754      var id = $(this).attr('id');
1755      $('.d-contents a[href="#' + id + '"]').parent().remove();
1756      appendix = true;
1757      $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix'));
1758    });
1759
1760    // show d-appendix if we have appendix content
1761    $("d-appendix").css('display', appendix ? 'grid' : 'none');
1762
1763    // localize layout chunks to just output
1764    $('.layout-chunk').each(function(i, val) {
1765
1766      // capture layout
1767      var layout = $(this).attr('data-layout');
1768
1769      // apply layout to markdown level block elements
1770      var elements = $(this).children().not('details, div.sourceCode, pre, script');
1771      elements.each(function(i, el) {
1772        var layout_div = $('<div class="' + layout + '"></div>');
1773        if (layout_div.hasClass('shaded')) {
1774          var shaded_content = $('<div class="shaded-content"></div>');
1775          $(this).wrap(shaded_content);
1776          $(this).parent().wrap(layout_div);
1777        } else {
1778          $(this).wrap(layout_div);
1779        }
1780      });
1781
1782
1783      // unwrap the layout-chunk div
1784      $(this).children().unwrap();
1785    });
1786
1787    // remove code block used to force  highlighting css
1788    $('.distill-force-highlighting-css').parent().remove();
1789
1790    // remove empty line numbers inserted by pandoc when using a
1791    // custom syntax highlighting theme, except when numbering line
1792    // in code chunk
1793    $('pre:not(.numberLines) code.sourceCode a:empty').remove();
1794
1795    // load distill framework
1796    load_distill_framework();
1797
1798    // wait for window.distillRunlevel == 4 to do post processing
1799    function distill_post_process() {
1800
1801      if (!window.distillRunlevel || window.distillRunlevel < 4)
1802        return;
1803
1804      // hide author/affiliations entirely if we have no authors
1805      var front_matter = JSON.parse($("#distill-front-matter").html());
1806      var have_authors = front_matter.authors && front_matter.authors.length > 0;
1807      if (!have_authors)
1808        $('d-byline').addClass('hidden');
1809
1810      // article with toc class
1811      $('.d-contents').parent().addClass('d-article-with-toc');
1812
1813      // strip links that point to #
1814      $('.authors-affiliations').find('a[href="#"]').removeAttr('href');
1815
1816      // add orcid ids
1817      $('.authors-affiliations').find('.author').each(function(i, el) {
1818        var orcid_id = front_matter.authors[i].orcidID;
1819        var author_name = front_matter.authors[i].author
1820        if (orcid_id) {
1821          var a = $('<a></a>');
1822          a.attr('href', 'https://orcid.org/' + orcid_id);
1823          var img = $('<img></img>');
1824          img.addClass('orcid-id');
1825          img.attr('alt', author_name ? 'ORCID ID for ' + author_name : 'ORCID ID');
1826          img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==');
1827          a.append(img);
1828          $(this).append(a);
1829        }
1830      });
1831
1832      // hide elements of author/affiliations grid that have no value
1833      function hide_byline_column(caption) {
1834        $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden');
1835      }
1836
1837      // affiliations
1838      var have_affiliations = false;
1839      for (var i = 0; i<front_matter.authors.length; ++i) {
1840        var author = front_matter.authors[i];
1841        if (author.affiliation !== "&nbsp;") {
1842          have_affiliations = true;
1843          break;
1844        }
1845      }
1846      if (!have_affiliations)
1847        $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden');
1848
1849      // published date
1850      if (!front_matter.publishedDate)
1851        hide_byline_column("Published");
1852
1853      // document object identifier
1854      var doi = $('d-byline').find('h3:contains("DOI")');
1855      var doi_p = doi.next().empty();
1856      if (!front_matter.doi) {
1857        // if we have a citation and valid citationText then link to that
1858        if ($('#citation').length > 0 && front_matter.citationText) {
1859          doi.html('Citation');
1860          $('<a href="#citation"></a>')
1861            .text(front_matter.citationText)
1862            .appendTo(doi_p);
1863        } else {
1864          hide_byline_column("DOI");
1865        }
1866      } else {
1867        $('<a></a>')
1868           .attr('href', "https://doi.org/" + front_matter.doi)
1869           .html(front_matter.doi)
1870           .appendTo(doi_p);
1871      }
1872
1873       // change plural form of authors/affiliations
1874      if (front_matter.authors.length === 1) {
1875        var grid = $('.authors-affiliations');
1876        grid.children('h3:contains("Authors")').text('Author');
1877        grid.children('h3:contains("Affiliations")').text('Affiliation');
1878      }
1879
1880      // remove d-appendix and d-footnote-list local styles
1881      $('d-appendix > style:first-child').remove();
1882      $('d-footnote-list > style:first-child').remove();
1883
1884      // move appendix-bottom entries to the bottom
1885      $('.appendix-bottom').appendTo('d-appendix').children().unwrap();
1886      $('.appendix-bottom').remove();
1887
1888      // hoverable references
1889      $('span.citation[data-cites]').each(function() {
1890        const citeChild = $(this).children()[0]
1891        // Do not process if @xyz has been used without escaping and without bibliography activated
1892        // https://github.com/rstudio/distill/issues/466
1893        if (citeChild === undefined) return true
1894
1895        if (citeChild.nodeName == "D-FOOTNOTE") {
1896          var fn = citeChild
1897          $(this).html(fn.shadowRoot.querySelector("sup"))
1898          $(this).id = fn.id
1899          fn.remove()
1900        }
1901        var refs = $(this).attr('data-cites').split(" ");
1902        var refHtml = refs.map(function(ref) {
1903          // Could use CSS.escape too here, we insure backward compatibility in navigator
1904          return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>";
1905        }).join("\n");
1906        window.tippy(this, {
1907          allowHTML: true,
1908          content: refHtml,
1909          maxWidth: 500,
1910          interactive: true,
1911          interactiveBorder: 10,
1912          theme: 'light-border',
1913          placement: 'bottom-start'
1914        });
1915      });
1916
1917      // fix footnotes in tables (#411)
1918      // replacing broken distill.pub feature
1919      $('table d-footnote').each(function() {
1920        // we replace internal showAtNode methode which is triggered when hovering a footnote
1921        this.hoverBox.showAtNode = function(node) {
1922          // ported from https://github.com/distillpub/template/pull/105/files
1923          calcOffset = function(elem) {
1924              let x = elem.offsetLeft;
1925              let y = elem.offsetTop;
1926              // Traverse upwards until an `absolute` element is found or `elem`
1927              // becomes null.
1928              while (elem = elem.offsetParent && elem.style.position != 'absolute') {
1929                  x += elem.offsetLeft;
1930                  y += elem.offsetTop;
1931              }
1932
1933              return { left: x, top: y };
1934          }
1935          // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
1936          const bbox = node.getBoundingClientRect();
1937          const offset = calcOffset(node);
1938          this.show([offset.left + bbox.width, offset.top + bbox.height]);
1939        }
1940      })
1941
1942      // clear polling timer
1943      clearInterval(tid);
1944
1945      // show body now that everything is ready
1946      on_load_complete();
1947    }
1948
1949    var tid = setInterval(distill_post_process, 50);
1950    distill_post_process();
1951
1952  }
1953
1954  function init_downlevel() {
1955
1956    init_common();
1957
1958     // insert hr after d-title
1959    $('.d-title').after($('<hr class="section-separator"/>'));
1960
1961    // check if we have authors
1962    var front_matter = JSON.parse($("#distill-front-matter").html());
1963    var have_authors = front_matter.authors && front_matter.authors.length > 0;
1964
1965    // manage byline/border
1966    if (!have_authors)
1967      $('.d-byline').remove();
1968    $('.d-byline').after($('<hr class="section-separator"/>'));
1969    $('.d-byline a').remove();
1970
1971    // remove toc
1972    $('.d-contents').remove();
1973
1974    // move appendix elements
1975    $('h1.appendix, h2.appendix').each(function(i, val) {
1976      $(this).changeElementType('h3');
1977    });
1978    $('h3.appendix').each(function(i, val) {
1979      $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix'));
1980    });
1981
1982
1983    // inject headers into references and footnotes
1984    var refs_header = $('<h3></h3>');
1985    refs_header.text('References');
1986    $('#refs').prepend(refs_header);
1987
1988    var footnotes_header = $('<h3></h3');
1989    footnotes_header.text('Footnotes');
1990    $('.footnotes').children('hr').first().replaceWith(footnotes_header);
1991
1992    // move appendix-bottom entries to the bottom
1993    $('.appendix-bottom').appendTo('.d-appendix').children().unwrap();
1994    $('.appendix-bottom').remove();
1995
1996    // remove appendix if it's empty
1997    if ($('.d-appendix').children().length === 0)
1998      $('.d-appendix').remove();
1999
2000    // prepend separator above appendix
2001    $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>'));
2002
2003    // trim code
2004    $('pre>code').each(function(i, val) {
2005      $(this).html($.trim($(this).html()));
2006    });
2007
2008    // move posts-container right before article
2009    $('.posts-container').insertBefore($('.d-article'));
2010
2011    $('body').addClass('downlevel');
2012
2013    on_load_complete();
2014  }
2015
2016
2017  function init_common() {
2018
2019    // jquery plugin to change element types
2020    (function($) {
2021      $.fn.changeElementType = function(newType) {
2022        var attrs = {};
2023
2024        $.each(this[0].attributes, function(idx, attr) {
2025          attrs[attr.nodeName] = attr.nodeValue;
2026        });
2027
2028        this.replaceWith(function() {
2029          return $("<" + newType + "/>", attrs).append($(this).contents());
2030        });
2031      };
2032    })(jQuery);
2033
2034    // prevent underline for linked images
2035    $('a > img').parent().css({'border-bottom' : 'none'});
2036
2037    // mark non-body figures created by knitr chunks as 100% width
2038    $('.layout-chunk').each(function(i, val) {
2039      var figures = $(this).find('img, .html-widget');
2040      // ignore leaflet img layers (#106)
2041      figures = figures.filter(':not(img[class*="leaflet"])')
2042      if ($(this).attr('data-layout') !== "l-body") {
2043        figures.css('width', '100%');
2044      } else {
2045        figures.css('max-width', '100%');
2046        figures.filter("[width]").each(function(i, val) {
2047          var fig = $(this);
2048          fig.css('width', fig.attr('width') + 'px');
2049        });
2050
2051      }
2052    });
2053
2054    // auto-append index.html to post-preview links in file: protocol
2055    // and in rstudio ide preview
2056    $('.post-preview').each(function(i, val) {
2057      if (window.location.protocol === "file:")
2058        $(this).attr('href', $(this).attr('href') + "index.html");
2059    });
2060
2061    // get rid of index.html references in header
2062    if (window.location.protocol !== "file:") {
2063      $('.distill-site-header a[href]').each(function(i,val) {
2064        $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./"));
2065      });
2066    }
2067
2068    // add class to pandoc style tables
2069    $('tr.header').parent('thead').parent('table').addClass('pandoc-table');
2070    $('.kable-table').children('table').addClass('pandoc-table');
2071
2072    // add figcaption style to table captions
2073    $('caption').parent('table').addClass("figcaption");
2074
2075    // initialize posts list
2076    if (window.init_posts_list)
2077      window.init_posts_list();
2078
2079    // implmement disqus comment link
2080    $('.disqus-comment-count').click(function() {
2081      window.headroom_prevent_pin = true;
2082      $('#disqus_thread').toggleClass('hidden');
2083      if (!$('#disqus_thread').hasClass('hidden')) {
2084        var offset = $(this).offset();
2085        $(window).resize();
2086        $('html, body').animate({
2087          scrollTop: offset.top - 35
2088        });
2089      }
2090    });
2091  }
2092
2093  document.addEventListener('DOMContentLoaded', function() {
2094    if (is_downlevel_browser())
2095      init_downlevel();
2096    else
2097      window.addEventListener('WebComponentsReady', init_distill);
2098  });
2099
2100  </script>
2100
2101
2102  <!--/radix_placeholder_distill-->
2103  
2103<script src="site_libs/header-attrs-2.30/header-attrs.js"></script>
2103
2104  
2104<script src="site_libs/popper-2.6.0/popper.min.js"></script>
2104
2105  <link href="site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" />
2106  <link href="site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" />
2107  
2107<script src="site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2107
2108  
2108<script src="site_libs/anchor-4.2.2/anchor.min.js"></script>
2108
2109  
2109<script src="site_libs/bowser-1.9.3/bowser.min.js"></script>
2109
2110  
2110<script src="site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2110
2111  
2111<script src="site_libs/distill-2.2.21/template.v2.js"></script>
2111
2112  <!--radix_placeholder_site_in_header-->
2113  <style type="text/css">
2114  .distill-site-nav {
2115    color: rgba(255, 255, 255, 0.8);
2116    background-color: #2f5597;
2117    font-size: 15px;
2118    font-weight: 300;
2119  }
2120  .link-noborder {
2121    border: none;
2122  }
2123  .color-twitter {
2124    color: #1da1f2;
2125  }
2126  .color-bluesky {
2127    color: #0085ff;
2128  }
2129  .color-note {
2130    color: #41C9B4;
2131  }
2132  .font-size-fa{
2133    font-size: 2em;
2134  }
2135  </style>
2136  <!--/radix_placeholder_site_in_header-->
2137
2138  <link rel="stylesheet" href="styles.css" type="text/css"/>
2139
2140</head>
2141
2142<body>
2143
2144<!--radix_placeholder_front_matter-->
2145
2146<script id="distill-front-matter" type="text/json">
2147{"title":"Yuta Kanzawa, Data Scientist","description":"Hello! I'm a data scientist based in Tokyo working on applied machine learning, business intelligence and data visualisation. Always under construction.","authors":[]}
2148</script>
2148
2149
2150<!--/radix_placeholder_front_matter-->
2151<!--radix_placeholder_navigation_before_body-->
2152<header class="header header--fixed" role="banner">
2153<nav class="distill-site-nav distill-site-header">
2154<div class="nav-left">
2155<a href="index.html" class="title">Yuta Kanzawa, Data Scientist</a>
2156</div>
2157<div class="nav-right">
2158<a href="index.html">Home</a>
2159<a href="about.html">About</a>
2160<a href="links.html">Links</a>
2161<a href="https://github.com/ytknzw" aria-label="GitHub">
2162<i class="fa fa-github" aria-hidden="true"></i>
2163</a>
2164<a href="https://twitter.com/yutakanzawa" aria-label="Twitter">
2165<i class="fa fa-twitter" aria-hidden="true"></i>
2166</a>
2167<a href="https://bsky.app/profile/yutakanzawa.bsky.social" aria-label="Bluesky">
2168<i class="fa fa-brands fa-bluesky" aria-hidden="true"></i>
2169</a>
2170<a href="javascript:void(0);" class="nav-toggle">&#9776;</a>
2171</div>
2172</nav>
2173</header>
2174<!--/radix_placeholder_navigation_before_body-->
2175<!--radix_placeholder_site_before_body-->
2176<!--/radix_placeholder_site_before_body-->
2177
2178<div class="d-title">
2179<h1>Yuta Kanzawa, Data Scientist</h1>
2180
2181<!--radix_placeholder_categories-->
2182<!--/radix_placeholder_categories-->
2183<p><p>Hello! I’m a data scientist based in Tokyo working on applied machine learning, business intelligence and data visualisation. Always under construction.</p></p>
2184</div>
2185
2186
2187<div class="d-article">
2188<div class="layout-chunk" data-layout="l-body">
2189<style type="text/css">
2190script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"
2191</style>
2192</div>
2193<div class="layout-chunk" data-layout="l-body">
2194<script>
2195 $(document).ready(function() {
2196    $('body').prepend('<div class=\"zoomDiv\"><img src=\"\" class=\"zoomImg\"></div>');
2197    // onClick function for all plots (img's)
2198    $('img:not(.zoomImg)').click(function() {
2199      $('.zoomImg').attr('src', $(this).attr('src')).css({width: '100%'});
2200      $('.zoomDiv').css({opacity: '1', width: 'auto', border: '1px solid white', borderRadius: '5px', position: 'fixed', top: '55%', left: '50%', marginRight: '-50%', transform: 'translate(-50%, -50%)', boxShadow: '0px 0px 50px #888888', zIndex: '50', overflow: 'auto', maxHeight: '90%'});
2201    });
2202    // onClick function for zoomImg
2203    $('img.zoomImg').click(function() {
2204      $('.zoomDiv').css({opacity: '0', width: '0%'}); 
2205    });
2206  });
2207</script>
2207
2208</div>
2209<h2 id="data-visualisations">Data Visualisations</h2>
2210<div class="layout-chunk" data-layout="l-body">
2211<p><img src="images/BF_1951_2021.png" alt="" width="6129" /></p>
2212</div>
2213<div class="layout-chunk" data-layout="l-body">
2214<p><img src="images/medal_share_olympic_hosts_1992_2021.png" alt="" width="80%" /></p>
2215</div>
2216<div class="layout-chunk" data-layout="l-body">
2217<p><img src="images/sommelier_gender_parity_in_Japan_2013_2020.png" alt="" width="50%" /><img src="images/tokyo_1875_2021_avg.png" alt="" width="50%" /></p>
2218</div>
2219<div class="layout-chunk" data-layout="l-body">
2220<p><img src="images/sparklingwine_sankey.png" alt="" width="50%" /><img src="images/wineries_in_japan_2019.png" alt="" width="50%" /></p>
2221</div>
2222<div class="layout-chunk" data-layout="l-body">
2223<p><img src="images/around_tokyo.png" alt="" width="50%" /><img src="images/foodwaste_sankey.png" alt="" width="50%" /></p>
2224</div>
2225<div class="layout-chunk" data-layout="l-body">
2226<p><img src="images/eraname_reiwa_filled.png" alt="" width="30%" /><img src="images/pyhack_history_130.png" alt="" width="70%" /></p>
2227</div>
2228<h2 id="data-analyses">Data Analyses</h2>
2229<ul>
2230<li><a href="http://web.archive.org/web/20210129183831/https://www.covid19analytics.org/post/toilet-paper-situations-in-the-world">Toilet paper situations in the world</a> (Global Data Science Project for COVID-19, published on 18th May 2020, updated in June 2020; a snapshot stored by the Internet Archive)</li>
2231<li><a href="Wagner2Vek_Meistersinger.html">Wagner2Vek: Die Meistersinger von Nürnberg</a> (July 2019)</li>
2232<li><a href="Pyhack100thAniv.html">データで振り返る Python mini-Hack-a-thon 100回の歴史</a> (June - July 2019)</li>
2233</ul>
2234<h2 id="oss">OSS</h2>
2235<ul>
2236<li><a href="https://github.com/optuna/optuna/pull/1756">Matplotlib backend implementation for Optuna visualisation functions</a> (August 2020 - Now)</li>
2237<li><a href="https://qiita.com/yutakanzawa/items/89f313f4f26a3abc398e">Japanese translation</a> of <a href="https://www.fast.ai/2020/03/09/coronavirus/">a fast.ai article “Covid-19, your community, and you — a data science perspective”</a> (Published on 16th March 2020, updated on 19th March 2020)</li>
2238<li><a href="https://stanford.edu/~shervine/l/ja/teaching/">Japanese translation of Stanford Cheat Sheets for ML, DL, Statistics</a> (with <a href="https://www.mlt.ai">MLT</a> members, August - October 2019)</li>
2239</ul>
2240<h2 id="talks">Talks</h2>
2241<h3 id="r">R</h3>
2242<ul>
2243<li><a href="TokyoR/初心者セッション_データハンドリング_TokyoR_20260418.pdf">初心者セッション:データハンドリング<br>BeginneR Session: Data Handling 101 (Japanese)</a> (Tokyo.R, 18th April 2026)</li>
2244<li><a href="TokyoR/初心者セッション_R&amp;RStudio入門_TokyoR_20250621.pdf">初心者セッション:R &amp; RStudio入門<br>BeginneR Session: R &amp; RStudio 101 (Japanese)</a> (Tokyo.R, 21st June 2025)</li>
2245<li><a href="TokyoR/初心者セッション_データハンドリング_TokyoR_20250621.pdf">初心者セッション:データハンドリング<br>BeginneR Session: Data Handling 101 (Japanese)</a> (Tokyo.R, 21st June 2025)</li>
2246<li><a href="TokyoR/初心者セッション_データ可視化_TokyoR_20250621.pdf">初心者セッション:データ可視化<br>BeginneR Session: Data Visualisation 101 (Japanese)</a> (Tokyo.R, 21st June 2025)</li>
2247<li><a href="TokyoR/初心者セッション_データ分析の進め方_TokyoR_20250426.pdf">初心者セッション:データ分析の進め方<br>BeginneR Session: Data Analytics 101 (Japanese)</a> (Tokyo.R, 26th April 2025)</li>
2248<li><a href="TokyoR/KanazawaRとKanzawaR_KanazawaR_20241123.pdf">Kanazawa.RとKanzawa.R<br>Kanazawa.R &amp; Kanzawa.R (Japanese)</a> (Kanazawa.R, 23rd November 2024)</li>
2249<li><a href="TokyoR/初心者セッション_データ可視化_TokyoR_20240420.pdf">初心者セッション:データ可視化<br>BeginneR Session: Data Visualisation (Japanese)</a> (Tokyo.R, 20th April 2024)</li>
2250<li><a href="TokyoR/ggplot2のアノテーション技法_TokyoR_20240224.pdf">ggplot2のアノテーション技法<br>Art of Annotation in ggplot2 (Japanese)</a> (Tokyo.R, 24th February 2024)</li>
2251<li><a href="TokyoR/初心者セッション_データサイエンスのためのリーダブルコードのススメ_TokyoR_20230902.pdf">初心者セッション:データサイエンスのためのリーダブルコードのススメ<br>BeginneR Session: Readable Code for Data Science (Japanese)</a> (Tokyo.R, 2nd September 2023)</li>
2252<li><a href="TokyoR/初心者セッション_統計学(再)入門_TokyoR_20230422.pdf">初心者セッション:統計学(再)入門<br>BeginneR Session: Statistics 101 (Re) (Japanese)</a> (Tokyo.R, 22nd April 2023)</li>
2253<li><a href="TokyoR/初心者セッション_R&amp;RStudio入門_TokyoR_20221022.pdf">初心者セッション:R &amp; RStudio入門<br>BeginneR Session: R &amp; RStudio 101 (Japanese)</a> (Tokyo.R, 22nd October 2022)</li>
2254<li><a href="TokyoR/初心者セッション_データ可視化_TokyoR_20220917.pdf">初心者セッション:データ可視化<br>BeginneR Session: Data Visualisation (Japanese)</a> (Tokyo.R, 17th September 2022)</li>
2255<li><a href="TokyoR/カラーユニバーサルデザイン入門_TokyoR_20210123.pdf">カラーユニバーサルデザイン入門<br>Colour Universal Design 101 (Japanese)</a> (Tokyo.R, 23rd January 2021)</li>
2256<li><a href="TokyoR/日本の年平均気温図を作ってみた話_JapanR_2020_20201205.pdf">日本の年平均気温図を作ってみた話</a> (Japan.R, 5th December 2020)</li>
2257<li><a href="TokyoR/初心者セッション_データ可視化_TokyoR_20200801.pdf">初心者セッション:データ可視化<br>BeginneR Session: Data Visualisation (Japanese)</a> (Tokyo.R, 1st August 2020)</li>
2258<li><a href="TokyoR/日本の気象観測データの(オープンなようでオープンでない)話_TokyoR_20200627.pdf">日本の気象観測データの(オープンなようでオープンでない)話</a> (Tokyo.R, 27th June 2020)</li>
2259<li><a href="TokyoR/国土数値情報APIのススメ_TokyoR_20200404.pdf">国土数値情報APIのススメ</a> (Tokyo.R, 4th April 2020)</li>
2260<li><a href="TokyoR/Tidyverse(再)入門_JapanR_2019_20191207.pdf">tidyverse(再)入門<br>(Re-)Introduction to tidyverse (Japanese)</a> (Japan.R, 7th December 2019)</li>
2261<li><a href="TokyoR/ドイツのPyConでR(とPython)の話をしてきた話_TokyoR_82_20191026.pdf">ドイツのPyConでR(とPython)の話をしてきた話</a> (Tokyo.R, 26th October 2019)</li>
2262</ul>
2263<h3 id="python">Python</h3>
2264<ul>
2265<li>わたしとデータサイエンスとあなた:いままでとこれから<br>Me, Data Science, and You: Past and Future (Japanese) (<a href="https://startpython.connpass.com/event/270311/">みんなのPython勉強会</a>, 19th January 2023)
2266<ul>
2267<li><a href="StaPy/わたしとデータサイエンスとあなた_いままでとこれから_みんなのPython勉強会_20230119.pdf">Slides</a></li>
2268<li><a href="https://youtu.be/dLkJura4TYc">Video</a></li>
2269<li><a href="https://twitter.com/info_stapy/status/1616052911259398145">Q&amp;A (rest)</a></li>
2270</ul></li>
2271<li><a href="PyCon/PyCon_mini_Hiroshima/データサイエンスのためのリーダブルコードのススメ_PyCon_mini_Hiroshima_20201010.pdf">データサイエンスのためのリーダブルコードのススメ<br>Readable Code for Data Science (Japanese)</a> (PyCon mini Hiroshima, 10th October 2020)</li>
2272<li><a href="misc/Pythonでggplotってみた話_Pythonもくもく自習室_20200815.pdf">Pythonでggplotってみた話</a> (Pythonもくもく自習室, 15th August 2020)</li>
2273<li><a href="PyCon/Python_Charity_Talks_in_Japan/Pythonで見る私の行動変容_−COVID-19前後の比較−_Python_Charity_Talks_in_Japan_20200704.pdf">Pythonで見る私の行動変容 −COVID-19前後の比較−<br>Evaluate Personal Behavioural Change with Python: Comparison before and after COVID-19 Breakout (Japanese)</a> (Python Charity Talks in Japan, 4th July 2020)</li>
2274<li><a href="PyData/サンキーダイアグラムのススメ_PyData_Fukuoka_20200607.pdf">サンキーダイアグラムのススメ</a> (PyData Fukuoka, 7th June 2020)</li>
2275<li><a href="PyConDE2019/Friend_or_Foe_Comparison_of_R_&amp;_Python_in_Data_Wrangling_&amp;_Visualisation_PyConDE_2019Oct.pdf">Friend or Foe: Comparison of R &amp; Python in Data Wrangling &amp; Visualisation (English)</a> (PyCon DE &amp; PyData Berlin 2019, 11th October 2019)</li>
2276</ul>
2277<h3 id="misc">Misc</h3>
2278<ul>
2279<li><a href="misc/オペラのお話_BPLL_20200616_公開用.pdf">オペラのお話<br>An Opera Talk (Japanese)</a> (BeProud Learning Lunch, 16th June 2020)</li>
2280<li><a href="MLT/AI_Open_Education_Stanford_Deep_Learning_Cheat_Sheets_in_Japanese_MLT_CodeChrysalis_20191030.pdf">AI Open Education: Stanford Deep Learning Cheat Sheets in Japanese (English)</a> (Code Chrysalis x Machine Learning Tokyo MiniConf, 30th October 2019)</li>
2281</ul>
2282<h3 id="archive">Archive</h3>
2283<p>To be updated.</p>
2284<h2 id="book">Book</h2>
2285<ul>
2286<li><a href="https://book.impress.co.jp/books/1122101021">Pythonデータ分析実践ハンドブック 実務で使えるデータ加工のテクニック<br>Practical Handbook of Data Analysis in Python</a><img src="https://img.ips.co.jp/ij/22/1122101021/1122101021-520x.jpg" /></li>
2287</ul>
2288<div class="sourceCode" id="cb1"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
2289<!--radix_placeholder_article_footer-->
2290<!--/radix_placeholder_article_footer-->
2291</div>
2292
2293<div class="d-appendix">
2294</div>
2295
2296
2297<!--radix_placeholder_site_after_body-->
2298<!--/radix_placeholder_site_after_body-->
2299<!--radix_placeholder_appendices-->
2300<div class="appendix-bottom">
2301<h3 id="updates-and-corrections">Corrections</h3>
2302<p>If you see mistakes or want to suggest changes, please <a href="https://github.com/ytknzw/ytknzw.github.io/issues/new">create an issue</a> on the source repository.</p>
2303</div>
2304<!--/radix_placeholder_appendices-->
2305<!--radix_placeholder_navigation_after_body-->
2306<div class="distill-site-nav distill-site-footer">
2307<p>© Copyright <a href="https://ytknzw.github.io/">Yuta Kanzawa</a>. All rights reserved.</p>
2308<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png" /></a><br />This
2309work is licenced under a
2310<a rel="licence" href="http://creativecommons.org/licenses/by-nc-nd/4.0/">Creative
2311Commons Attribution-NonCommercial-NoDerivatives 4.0 International
2312Licence</a>.</p>
2313</div>
2314<!--/radix_placeholder_navigation_after_body-->
2315
2316
2317</body>
2318
2319</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.