Last active
September 11, 2021 08:48
-
-
Save wutali/a5e6b34be1d9357e0b82a064567640b9 to your computer and use it in GitHub Desktop.
basic-data-analysis.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "basic-data-analysis.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"authorship_tag": "ABX9TyNVjGFEUhagHgOnEbRrlEbQ", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/wutali/a5e6b34be1d9357e0b82a064567640b9/basic-data-analysis.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "_YKOMaiJVQaf" | |
}, | |
"source": [ | |
"## 高専向けデータ分析基礎\n", | |
"\n", | |
"この記事はフラー [Advent Calendar 2020](https://adventar.org/calendars/5034) の5日目の記事です。4日目は [@furusax](https://twitter.com/furusax) さんで「[CloudFormation でドリフトを検出してしまった Aurora MySQL クラスターを再インポートした話](https://furusax0621.hatenablog.com/entry/2020/12/04/000000)」でした。\n", | |
"\n", | |
"---\n", | |
"\n", | |
"フラーでは高専向けにデータ分析の授業を行っております。\n", | |
"\n", | |
"* 苫小牧高専\n", | |
"* 函館高専\n", | |
"* 長岡高専 (予定)\n", | |
"\n", | |
"データ分析と言っても、とても簡素なものです。全部で3部構成の授業となっており、授業が終わった後には、Pythonの基礎構文と簡単なクローラーの作り方、データの可視化の仕方を学ぶことが出来ます。\n", | |
"\n", | |
"1. Jupyter Notebookの使い方とPythonの基礎構文\n", | |
"2. ライブラリの使い方とCSSセレクタの書き方\n", | |
"3. クローラーの作成とデータの可視化\n", | |
"\n", | |
"それぞれの内容をまとめていこうと思います。" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "44H-RL9KWHTl" | |
}, | |
"source": [ | |
"## Jyupyter Notebookの使い方とPythonの基礎構文\n", | |
"\n", | |
"ここではJupyter Notebookのセルの概念とPythonのデータ型や条件分岐、繰り返し文などを学びます。簡単にC言語のコードを紹介しながら、授業を進めています。\n", | |
"\n", | |
"初めに、自己紹介と今日やることをMarkdownで書いてもらっています。" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "g9--8KO-j-LF" | |
}, | |
"source": [ | |
"### 自己紹介\n", | |
"\n", | |
"* 名前: 藤原敬弘(ふじわらたかひろ)\n", | |
"* 仕事: フラー株式会社CTO\n", | |
"* 趣味: クラフトビール\n", | |
"* Twitter: @wutali" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "rbDm81FEk0yJ" | |
}, | |
"source": [ | |
"### 今日やること\n", | |
"\n", | |
"* Pythonのデータ型\n", | |
"* Pythonの条件分岐と繰り返し\n", | |
"* Pythonの関数の書き方\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "4oSPtMM5Xy2x" | |
}, | |
"source": [ | |
"次にPythonのデータ型や関数の書き方、繰り返しなどを教えていきます。途中、 *TODO* で書いた部分は課題となっており、高専生同士で相談しながら解いてもらいます。" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "jFwgxBxLXEo6" | |
}, | |
"source": [ | |
"### Pythonのデータ型" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "31rPu248mHTL", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "1883cedb-03af-4918-f337-522ae92ccdb4" | |
}, | |
"source": [ | |
"# 整数型 (int)\n", | |
"\n", | |
"a = 1\n", | |
"a" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"1" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 2 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "nxCTGtmnmuE4", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "94890795-91b0-4101-f241-90e3dc3515e5" | |
}, | |
"source": [ | |
"# 浮動小数点 (float)\n", | |
"a = 2.3\n", | |
"a" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"2.3" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 3 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "R4rf4WeGnDY0", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 37 | |
}, | |
"outputId": "a095e4d7-0cc7-4a2c-a126-1f21e646d23e" | |
}, | |
"source": [ | |
"# 文字列 (str)\n", | |
"a = \"Hello Hakodate!\"\n", | |
"a" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "string" | |
}, | |
"text/plain": [ | |
"'Hello Hakodate!'" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "8AKSz_9_nhqZ", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "b5cfa168-ff72-4ceb-8396-8dc6261b1418" | |
}, | |
"source": [ | |
"# 配列 (list)\n", | |
"a = [1, 2, 3, 4, 5]\n", | |
"a" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[1, 2, 3, 4, 5]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 5 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "0zGCDne2n14K", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "d9a7c314-34cf-4932-c013-c9eee041ff1b" | |
}, | |
"source": [ | |
"# マップ (dict)\n", | |
"a = {\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}\n", | |
"a" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "_lT8NfakpBWT" | |
}, | |
"source": [ | |
"## 条件分岐と繰り返し" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "4JV58Nd3pJ-y", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "279c85a0-359b-48df-8f2e-12327ef84924" | |
}, | |
"source": [ | |
"# 条件分岐\n", | |
"# if (true) {\n", | |
"# printf(\"hello world\"); \n", | |
"# }\n", | |
"\n", | |
"# TODO: 変数aを用意して、変数aが10以上の場合、\n", | |
"# hello worldが出力される条件分岐を書く\n", | |
"a = 11\n", | |
"if a >= 10:\n", | |
" print(\"hello world\")" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"hello world\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "qzX4hQzkqrdI", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "78d53ebe-ab87-4037-a6fe-40731eacacc2" | |
}, | |
"source": [ | |
"# 繰り返し\n", | |
"# for (int i = 0; i < 10; i++) {\n", | |
"# printf(\"%d\", i);\n", | |
"# }\n", | |
"\n", | |
"# TODO1: rangeをlist型のデータに変えて、繰り返しを実行してみる\n", | |
"# TODO2: rangeをstr型のデータに変えて、繰り返しを実行してみる\n", | |
"a = [1, 2, 3]\n", | |
"b = \"Hello World!\" \n", | |
"for i in b:\n", | |
" print(i)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"H\n", | |
"e\n", | |
"l\n", | |
"l\n", | |
"o\n", | |
" \n", | |
"W\n", | |
"o\n", | |
"r\n", | |
"l\n", | |
"d\n", | |
"!\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "VutD34HVs3Xa", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "3697cfd5-29d2-458a-c94e-fcbf1996a761" | |
}, | |
"source": [ | |
"for i in range(3):\n", | |
" print(i)\n", | |
"\n", | |
"for i in [0, 1, 2]:\n", | |
" print(i)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"0\n", | |
"1\n", | |
"2\n", | |
"0\n", | |
"1\n", | |
"2\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "1ihx56fjtI6O" | |
}, | |
"source": [ | |
"## 関数の書き方" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "21LVtuSktLkW", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "8ba1ef7d-0fad-4880-882a-6f7a66a5972b" | |
}, | |
"source": [ | |
"# int add(int a, int b) {\n", | |
"# return a + b;\n", | |
"# }\n", | |
"\n", | |
"# TODO1: 掛け算するmulti関数を定義して、実行してみる\n", | |
"# TODO2: list型のデータを受け取って、その合計値を返すsum関数を定義して、\n", | |
"# 実行してみる\n", | |
"def add(a, b):\n", | |
" return a + b\n", | |
"\n", | |
"add(102, 2)" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"104" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "DIZ3dYNBYL7W" | |
}, | |
"source": [ | |
"ここまでで1日目 (90分) の授業が終了です。基礎はそこそこにして、実際に動くプログラムを書いていきます。また、授業はライブコーディング形式で行っており、自分が書いたコードを書き写してもらっています。\n", | |
"\n", | |
"その時の気分で課題を変えたりしているので、上記は例です。" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "C3RUa7U7XoVY" | |
}, | |
"source": [ | |
"## ライブラリの使い方とCSSセレクタの書き方\n", | |
"\n", | |
"requestsライブラリの使い方、Beautiful Soupライブラリの使い方を教えます。フラーのニュースサイトのクローリングとデータ可視化を行ってもらいます。" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "0vvexCFkDtHH" | |
}, | |
"source": [ | |
"## 今日やること\n", | |
"\n", | |
"* フラーのニュースサイトをクローリングしてみる\n", | |
"* 酒造免許をクローリングしてみる\n", | |
"* グラフ化してみる" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "BTM0Nt7ZaLY0" | |
}, | |
"source": [ | |
"### フラーのニュースサイトを取得する" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "BeVEm6MfD6PM", | |
"outputId": "78223936-e0cf-40d8-9fce-803c53857619" | |
}, | |
"source": [ | |
"import requests\n", | |
"\n", | |
"res = requests.get(\"https://fuller-inc.com/news/\")\n", | |
"res" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<Response [200]>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 2 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "CKALW7l9aOfk" | |
}, | |
"source": [ | |
"### HTMLをパースする" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "cgGd5HveESvl", | |
"outputId": "065c9644-dac0-4d5a-ab6e-be5f453b4ec9" | |
}, | |
"source": [ | |
"from bs4 import BeautifulSoup\n", | |
"\n", | |
"soup = BeautifulSoup(res.content)\n", | |
"soup" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<!DOCTYPE html>\n", | |
"<html lang=\"ja\">\n", | |
"<head>\n", | |
"<script>(function (w, d, s, l, i) {\n", | |
" w[l] = w[l] || [];\n", | |
" w[l].push({\n", | |
" 'gtm.start': new Date().getTime(), event: 'gtm.js'\n", | |
" });\n", | |
" var f = d.getElementsByTagName(s)[0],\n", | |
" j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '';\n", | |
" j.async = true;\n", | |
" j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl + '>m_auth=_ZgIb2eTMTwaqb2s0D_nZw>m_preview=env-15>m_cookies_win=x';\n", | |
" f.parentNode.insertBefore(j, f);\n", | |
" })(window, document, 'script', 'dataLayer', 'GTM-NCX3698');</script>\n", | |
"<script src=\"/modernizr-custom.js\"></script>\n", | |
"<title>ニュース - フラー株式会社</title>\n", | |
"<meta content=\"フラーは『世界一、ヒトを惹きつける会社を創る。』というユメに挑戦し続け、アプリとデータをテーマに事業を展開するIT企業です。柏の葉キャンパスに本社を構え、新潟・韓国・東京にも拠点があります。\" name=\"description\"/>\n", | |
"<meta charset=\"utf-8\"/>\n", | |
"<meta content=\"IE=edge\" http-equiv=\"X-UA-Compatible\"/>\n", | |
"<meta content=\"width=device-width, initial-scale=1, viewport-fit=cover\" name=\"viewport\"/>\n", | |
"<meta content=\"https://fuller-inc.com/news/\" property=\"og:url\"/>\n", | |
"<meta content=\"ニュース - フラー株式会社\" property=\"og:title\"/>\n", | |
"<meta content=\"website\" property=\"og:type\"/>\n", | |
"<meta content=\"フラー株式会社\" property=\"og:site_name\"/>\n", | |
"<meta content=\"ja_JP\" property=\"og:locale\"/>\n", | |
"<meta content=\"フラーは『世界一、ヒトを惹きつける会社を創る。』というユメに挑戦し続け、アプリとデータをテーマに事業を展開するIT企業です。柏の葉キャンパスに本社を構え、新潟・韓国・東京にも拠点があります。\" property=\"og:description\"/>\n", | |
"<meta content=\"ニュース - フラー株式会社\" name=\"twitter:title\"/>\n", | |
"<meta content=\"フラーは『世界一、ヒトを惹きつける会社を創る。』というユメに挑戦し続け、アプリとデータをテーマに事業を展開するIT企業です。柏の葉キャンパスに本社を構え、新潟・韓国・東京にも拠点があります。\" name=\"twitter:description\"/>\n", | |
"<meta content=\"summary_large_image\" name=\"twitter:card\"/>\n", | |
"<meta content=\"@fuller_inc\" name=\"twitter:site\"/>\n", | |
"<meta content=\"https://fuller-inc.com/news/ogp.jpeg\" property=\"og:image\"/>\n", | |
"<meta content=\"1710\" property=\"og:image:width\"/>\n", | |
"<meta content=\"900\" property=\"og:image:height\"/>\n", | |
"<meta content=\"https://fuller-inc.com/news/ogp.jpeg\" name=\"twitter:image\"/>\n", | |
"<meta content=\"#ffffff\" name=\"theme-color\"/>\n", | |
"<link href=\"/apple-touch-icon.png\" rel=\"apple-touch-icon\" sizes=\"180x180\"/>\n", | |
"<link href=\"/favicon-32x32.png\" rel=\"icon\" sizes=\"32x32\" type=\"image/png\"/>\n", | |
"<link href=\"/favicon-16x16.png\" rel=\"icon\" sizes=\"16x16\" type=\"image/png\"/>\n", | |
"<link href=\"/manifest.json\" rel=\"manifest\"/>\n", | |
"<link color=\"#2a5caa\" href=\"/safari-pinned-tab.svg\" rel=\"mask-icon\"/>\n", | |
"<script type=\"application/ld+json\">\n", | |
" {\n", | |
" \"@context\": \"http://schema.org\",\n", | |
" \"@type\": \"Organization\",\n", | |
" \"url\": \"https://fuller-inc.com\",\n", | |
" \"name\": \"Fuller, Inc.\",\n", | |
" \"logo\": \"https://fuller-inc.com/apple-touch-icon.png\",\n", | |
" \"sameAs\": [\n", | |
" \"https://www.facebook.com/fuller.official\",\n", | |
" \"https://twitter.com/fuller_inc\"\n", | |
" ]\n", | |
" }\n", | |
" </script>\n", | |
"<link as=\"style\" href=\"/main.css?1605577977\" rel=\"preload\"/>\n", | |
"<link as=\"script\" href=\"/main.js?1605577977\" rel=\"preload\"/>\n", | |
"<link href=\"/main.css?1605577977\" id=\"main-style\" rel=\"stylesheet\"/>\n", | |
"</head>\n", | |
"<body>\n", | |
"<noscript>\n", | |
"<iframe height=\"0\" src=\"https://www.googletagmanager.com/ns.html?id=GTM-NCX3698&gtm_auth=_ZgIb2eTMTwaqb2s0D_nZw&gtm_preview=env-15&gtm_cookies_win=x\" style=\"display:none;visibility:hidden\" width=\"0\"></iframe>\n", | |
"</noscript>\n", | |
"<section class=\"hero is-halfheight center-cover\" style=\"background-image: linear-gradient(to top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.62)), url(/news/header.jpeg);\">\n", | |
"<div class=\"hero-head\">\n", | |
"<nav class=\"navbar has-change-on-scroll-white-to-black is-fixed-top\">\n", | |
"<div class=\"navbar-brand\">\n", | |
"<a class=\"navbar-item fuller-logo\" href=\"/\">\n", | |
"<div style=\"width: 130px; height: 25px;\">\n", | |
"<svg data-name=\"レイヤー 1\" id=\"レイヤー_1\" viewbox=\"0 0 155.57 30\" xmlns=\"http://www.w3.org/2000/svg\"><defs><style>.cls-1{fill:#fff;}</style></defs><title>アートボード 2</title><path class=\"cls-1\" d=\"M76.87,17c0,1.38-.43,3.89-3.25,3.89s-3.31-2.5-3.31-3.87V4.76h-4a.84.84,0,0,0-.83.85v12c0,2.33.88,7.58,8.05,7.58s8.21-6,8.21-7.52V4.76H76.87Z\"></path><path class=\"cls-1\" d=\"M120.8,23.21v1a.84.84,0,0,0,.84.83h12.24V20.86H126.5a.84.84,0,0,1-.83-.84V16.59h6.54a.83.83,0,0,0,.83-.83V12.39h-6.63a.84.84,0,0,1-.74-.84V10.21h0V9h8.21V4.76H120.8Z\"></path><path class=\"cls-1\" d=\"M91.45,4.76H86.59V24.22a.84.84,0,0,0,.84.83h11.4V20.86H91.45Z\"></path><path class=\"cls-1\" d=\"M48.18,4.76a.85.85,0,0,0-.84.84V25.05h4.87V18.51a.84.84,0,0,1,.83-.84h5.71a.84.84,0,0,0,.84-.83V13.49H52.21V9.79A.84.84,0,0,1,53,9h7.38V4.76Z\"></path><path class=\"cls-1\" d=\"M108.56,4.76h-4.87V24.22a.84.84,0,0,0,.84.83h11.41V20.86h-7.38Z\"></path><path class=\"cls-1\" d=\"M149.87,16.65a6.46,6.46,0,0,0-3.49-11.89h-7.63V24.22a.83.83,0,0,0,.84.83h4V17.67h1.65l4.58,7.38h5.73Zm-4.25-3.17h-2V9h2a2.27,2.27,0,1,1,0,4.53Z\"></path><path class=\"cls-1\" d=\"M25.09,12.88a1.65,1.65,0,0,1,1.76.17l3.22,2.76a1.08,1.08,0,0,0,1.53-.12L34,12.85a1.09,1.09,0,0,0-.11-1.53l-4-3.45a3.65,3.65,0,0,1-1-1.78l-1-5.2A1.09,1.09,0,0,0,26.63,0L23,.71A1.09,1.09,0,0,0,22.08,2l.79,4.16a1.67,1.67,0,0,1-.74,1.62l-4,2.32a2.08,2.08,0,0,1-1.88,0l-4-2.32a1.64,1.64,0,0,1-.74-1.62L12.22,2A1.09,1.09,0,0,0,11.35.71L7.67,0A1.09,1.09,0,0,0,6.4.89l-1,5.2a3.57,3.57,0,0,1-1,1.78l-4,3.45a1.08,1.08,0,0,0-.12,1.53L2.7,15.69a1.09,1.09,0,0,0,1.54.12l3.21-2.76a1.65,1.65,0,0,1,1.76-.17l4,2.33a2.09,2.09,0,0,1,.94,1.63V21.5a1.64,1.64,0,0,1-1,1.45l-4,1.4a1.09,1.09,0,0,0-.67,1.39l1.24,3.53a1.09,1.09,0,0,0,1.39.67l5-1.75a3.58,3.58,0,0,1,2.05,0l5,1.75a1.09,1.09,0,0,0,1.39-.67l1.24-3.53a1.09,1.09,0,0,0-.67-1.39l-4-1.4a1.64,1.64,0,0,1-1-1.45V16.84a2.12,2.12,0,0,1,.94-1.63Z\"></path></svg>\n", | |
"</div>\n", | |
"</a>\n", | |
"<span class=\"navbar-burger burger\" data-target=\"navbar-menu-hero\">\n", | |
"<span></span>\n", | |
"<span></span>\n", | |
"<span></span>\n", | |
"</span>\n", | |
"</div>\n", | |
"<div class=\"navbar-menu\" id=\"navbar-menu-hero\">\n", | |
"<div class=\"navbar-end\">\n", | |
"<a class=\" has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/corporate/\">\n", | |
" 企業情報\n", | |
" </a>\n", | |
"<a class=\" has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/business/\">\n", | |
" 事業内容\n", | |
" </a>\n", | |
"<a class=\" has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/approach/\">\n", | |
" 取り組み\n", | |
" </a>\n", | |
"<a class=\"is-active has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/news/\">\n", | |
" ニュース\n", | |
" </a>\n", | |
"<a class=\" has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/story/\">\n", | |
" ストーリー\n", | |
" </a>\n", | |
"<a class=\" has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/fulife/\">\n", | |
" フライフ\n", | |
" </a>\n", | |
"<a class=\" has-margin-vertical-5 navbar-item is-fuller-navbar-item is-letter-spacing-2px has-text-weight-bold\" href=\"/career/\">\n", | |
" 採用情報\n", | |
" </a>\n", | |
"</div>\n", | |
"</div>\n", | |
"</nav>\n", | |
"</div>\n", | |
"<div class=\"hero-body\">\n", | |
"<div class=\"container has-text-centered\">\n", | |
"<h1 class=\"has-text-weight-bold has-text-white is-size-4 is-letter-spacing-4px\">\n", | |
" ニュース\n", | |
" </h1>\n", | |
"<h2 class=\"has-text-weight-bold has-text-white is-size-7 has-margin-top-3 is-letter-spacing-2px\">\n", | |
" フラーの様々なニュースをお届け。\n", | |
" </h2>\n", | |
"</div>\n", | |
"</div>\n", | |
"</section>\n", | |
"<section class=\"section\">\n", | |
"<div class=\"container\">\n", | |
"<div class=\"columns is-multiline is-centered\">\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/11/niigata-headquarter/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/11/niigata-headquarter/thumbnail_huc5de0a07fd31ad9bbe36ee678ed88566_819825_1200x630_resize_q75_box.jpeg\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年11月16日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" フラー株式会社 本店移転のお知らせ\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/11/kosencaravan2020-1111/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/11/kosencaravan2020-1111/thumbnail_hueab7309064aa33b732383879961dd314_251967_600x315_resize_box_2.png\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年11月11日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" フラー、全国の高専生を対象にしたオンラインキャリアイベント「高専キャラバン 2020 冬の陣」開催を決定!\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/10/niigata-nagaoka-kosen-prof/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/10/niigata-nagaoka-kosen-prof/thumbnail_hu0f092d082311b4b780f5b0bc91e7feca_2221845_3000x1575_resize_q75_box.jpeg\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年10月20日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" フラー代表取締役会長 渋谷、長岡高専の客員教授に就任\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/10/team-change-announcement/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/10/team-change-announcement/thumbnail_hu8518e79cdda948a7ad9007db9ed30243_3707784_1500x844_resize_q75_box.jpeg\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年10月01日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" フラー株式会社 会長及び社長就任のお知らせ\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/09/2020-09-29-tbs-app-ape-use-case/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/09/2020-09-29-tbs-app-ape-use-case/thumbnail_hud5519d2c3bc71c395724fcdb42b10e6a_94475_800x450_resize_box_2.png\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年09月29日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" TBSが国内No.1 アプリ分析ツール「App Ape」導入\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/09/officialclubpartner-20200921/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/09/officialclubpartner-20200921/thumbnail_hu87548c528f0a46b9981a5c6654ef04dc_131964_800x450_resize_q75_box.jpeg\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年09月21日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" フラー、アルビレックス新潟とオフィシャルクラブパートナー契約を締結\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/09/2020-09-11-ntt-data-app-ape-use-case/\" rel=\"noopener noreferrer\" target=\"_blank\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/09/2020-09-11-ntt-data-app-ape-use-case/thumbnail_huf17ca9bbb9c2394dc528156bafb77001_88073_800x450_resize_box_2.png\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>メディア</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年09月11日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" NTTデータにおけるエンタープライズ向けモバイルアプリ開発をサポート\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/09/nva/\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/09/nva/thumbnail_hue925fc66d93cb127a07d07c9acff29ad_162726_932x493_resize_q75_box.jpeg\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>リリース</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年09月10日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" フラー代表取締役 渋谷が新潟ベンチャー協会代表理事に就任\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"column is-one-third\">\n", | |
"<a href=\"/news/2020/08/2020-08-11-united-app-ape-use-case/\" rel=\"noopener noreferrer\" target=\"_blank\">\n", | |
"<div class=\"card is-full-height\">\n", | |
"<div class=\"card-image\">\n", | |
"<figure class=\"image is-16by9\">\n", | |
"<img class=\"is-cover\" src=\"/news/2020/08/2020-08-11-united-app-ape-use-case/thumbnail_hudc4d7c1404173ce2e95506845634889e_114215_800x450_resize_box_2.png\"/>\n", | |
"</figure>\n", | |
"</div>\n", | |
"<div class=\"card-content\">\n", | |
"<div class=\"card-top-content\">\n", | |
"<div class=\"tag-for-xxx\">\n", | |
"<span>メディア</span>\n", | |
"</div>\n", | |
"<div class=\"is-date-text\">\n", | |
" 2020年08月11日\n", | |
" </div>\n", | |
"</div>\n", | |
"<h2 class=\"is-news-title\">\n", | |
" ユナイテッドが国内No.1 アプリ分析ツール「App Ape」導入\n", | |
" </h2>\n", | |
"<p class=\"has-padding-vertical-5 is-read-more\">\n", | |
" さらに詳しく 〉\n", | |
" </p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div class=\"has-margin-vertical-8 is-hidden-mobile\">\n", | |
"<nav class=\"pagination is-rounded has-text-centered\">\n", | |
"<ul class=\"pagination-list is-rounded\" style=\"justify-content: center;\">\n", | |
"<li><a class=\"pagination-link is-news-page-nav is-current\" href=\"/news/\">1</a></li>\n", | |
"<li><a class=\"pagination-link is-news-page-nav\" href=\"/news/page/2/\">2</a></li>\n", | |
"<li><a class=\"pagination-link is-news-page-nav\" href=\"/news/page/3/\">3</a></li>\n", | |
"<li><p class=\"pagination-ellipsis is-news-page-nav\">…</p></li>\n", | |
"<li><a class=\"pagination-link is-news-page-nav\" href=\"/news/page/24/\">24</a></li>\n", | |
"<li>\n", | |
"<a class=\"pagination-next is-news-page-nav-button\" href=\"/news/page/2/\">→</a>\n", | |
"</li>\n", | |
"</ul>\n", | |
"</nav>\n", | |
"</div>\n", | |
"<div class=\"has-margin-vertical-8 is-hidden-tablet\">\n", | |
"<nav class=\"pagination is-rounded has-text-centered\">\n", | |
"<ul class=\"pagination-list is-rounded\" style=\"justify-content: center;\">\n", | |
"<li><a class=\"pagination-link is-news-page-nav is-current\" href=\"/news/\">1</a></li>\n", | |
"<li><a class=\"pagination-link is-news-page-nav\" href=\"/news/page/2/\">2</a></li>\n", | |
"<li><a class=\"pagination-link is-news-page-nav\" href=\"/news/page/3/\">3</a></li>\n", | |
"<li>\n", | |
"<a class=\"pagination-next is-news-page-nav-button\" href=\"/news/page/2/\">→</a>\n", | |
"</li>\n", | |
"</ul>\n", | |
"</nav>\n", | |
"</div>\n", | |
"</div>\n", | |
"</div>\n", | |
"</section>\n", | |
"<a class=\"career-banner hero is-medium is-primary has-bg-img\" href=\"/career/\">\n", | |
"<div class=\"hero-body\">\n", | |
"<div class=\"container has-text-white\">\n", | |
"<h1 class=\"is-title has-text-weight-bold has-text-white has-padding-top-9 is-size-3 is-size-5-mobile is-letter-spacing-5px\">モバイルの未来を共に創る仲間、募集中。</h1>\n", | |
"<h2 class=\"has-padding-top-4 has-text-weight-bold has-padding-bottom-10 is-size-5 is-size-6-mobile\">採用情報へ 〉</h2>\n", | |
"</div>\n", | |
"</div>\n", | |
"</a>\n", | |
"<footer class=\"footer fullerblue-gradation-bg\">\n", | |
"<div class=\"container\">\n", | |
"<div class=\"content has-text-centered\">\n", | |
"<div class=\"has-padding-top-5 has-padding-bottom-10\">\n", | |
"<div class=\"columns is-centered\">\n", | |
"<div class=\"column is-te\">\n", | |
"<a href=\"/\">\n", | |
"<img src=\"/img/logo.svg\" style=\"max-width: 200px;\"/>\n", | |
"</a>\n", | |
"</div>\n", | |
"</div>\n", | |
"</div>\n", | |
"<div class=\"columns is-multiline is-centered\">\n", | |
"<div class=\"column is-narrow\">\n", | |
"<a class=\"button is-rounded is-lang-link\" href=\"https://en.fuller-inc.com/\"> English </a>\n", | |
"</div>\n", | |
"<div class=\"column is-narrow\">\n", | |
"<a class=\"button is-rounded is-lang-link\" href=\"https://ko.fuller-inc.com/\"> 한국어 </a>\n", | |
"</div>\n", | |
"</div>\n", | |
" \n", | |
" <div class=\"columns is-multiline is-centered\">\n", | |
"<div class=\"column is-narrow\">\n", | |
"<a class=\"has-text-white\" href=\"/docs/privacy-policy/\"> プライバシーポリシー </a>\n", | |
"</div>\n", | |
"<div class=\"column is-narrow\">\n", | |
"<a class=\"has-text-white\" href=\"/docs/terms/\"> サイト利用規約 </a>\n", | |
"</div>\n", | |
"<div class=\"column is-narrow\">\n", | |
"<a class=\"has-text-white\" href=\"/contact-us/\"> お問い合わせ </a>\n", | |
"</div>\n", | |
"</div>\n", | |
"<div class=\"has-margin-vertical-7 align-items-horizontal-centered\">\n", | |
"<a class=\"has-margin-horizontal-5\" href=\"https://www.facebook.com/fuller.official/\">\n", | |
"<img class=\"image is-32x32\" src=\"/img/facebook.svg\"/>\n", | |
"</a>\n", | |
"<a class=\"has-margin-horizontal-5\" href=\"https://www.instagram.com/fulife_official/\">\n", | |
"<img class=\"image is-32x32\" src=\"/img/instagram.svg\"/>\n", | |
"</a>\n", | |
"<a class=\"has-margin-horizontal-5\" href=\"https://www.youtube.com/channel/UCzqj8Da2DVcqWdPvpc5_tqg\">\n", | |
"<img class=\"image is-32x32\" src=\"/img/you-tube.svg\"/>\n", | |
"</a>\n", | |
"<a class=\"has-margin-horizontal-5\" href=\"https://twitter.com/fuller_inc\">\n", | |
"<img class=\"image is-32x32\" src=\"/img/twitter.svg\"/>\n", | |
"</a>\n", | |
"</div>\n", | |
"<div>\n", | |
"<p class=\"has-text-white\">Copyright © 2018 Fuller, Inc.</p>\n", | |
"</div>\n", | |
"</div>\n", | |
"</div>\n", | |
"</footer>\n", | |
"<script src=\"/main.js?1605577982\"></script>\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 5 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "sKAcUCS0aSGg" | |
}, | |
"source": [ | |
"### CSSセレクタについて" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "KMtWlKr7EqqO", | |
"outputId": "cf3b1d57-4cdb-4953-a939-09e26d587af7" | |
}, | |
"source": [ | |
"from bs4 import BeautifulSoup\n", | |
"\n", | |
"practise_soup = BeautifulSoup(\"\"\"\n", | |
"<html>\n", | |
" <head>\n", | |
" <title>こんにちは</title>\n", | |
" </head>\n", | |
"<body>\n", | |
" <h1>これはタイトルです</h1>\n", | |
" <div>\n", | |
" <div class=\"news\">\n", | |
" <h1>これはニュース1です</h1>\n", | |
" <p>これは説明です</p>\n", | |
" </div>\n", | |
" <div class=\"news\">\n", | |
" <h1>これはニュース2です</h1>\n", | |
" <p>これは説明です</p>\n", | |
" </div>\n", | |
" <div class=\"news\">\n", | |
" <h1>これはニュース3です</h1>\n", | |
" <p>これは説明です</p>\n", | |
" </div>\n", | |
" </div>\n", | |
"</body>\n", | |
"</html>\n", | |
"\"\"\")\n", | |
"\n", | |
"# headのtitleを取り出してみる\n", | |
"print(practise_soup.select_one(\"head title\").text)\n", | |
"\n", | |
"# newsのタイトルを取り出してみる\n", | |
"print(practise_soup.select(\".news\"))\n", | |
"\n", | |
"# TODO1: newsクラスの中のh1だけを取り出すCSSセレクタを書く\n", | |
"print(practise_soup.select(\".news h1\"))\n", | |
"\n", | |
"# TODO2: TODO1の結果をループで回して、タイトルのテキストだけprintする\n", | |
"for h1 in practise_soup.select(\".news h1\"):\n", | |
" print(h1.text)\n", | |
"\n", | |
"# 期待する出力 (下記が出力される)\n", | |
"# これはニュース1です\n", | |
"# これはニュース2です\n", | |
"# これはニュース3です" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"こんにちは\n", | |
"[<div class=\"news\">\n", | |
"<h1>これはニュース1です</h1>\n", | |
"<p>これは説明です</p>\n", | |
"</div>, <div class=\"news\">\n", | |
"<h1>これはニュース2です</h1>\n", | |
"<p>これは説明です</p>\n", | |
"</div>, <div class=\"news\">\n", | |
"<h1>これはニュース3です</h1>\n", | |
"<p>これは説明です</p>\n", | |
"</div>]\n", | |
"[<h1>これはニュース1です</h1>, <h1>これはニュース2です</h1>, <h1>これはニュース3です</h1>]\n", | |
"これはニュース1です\n", | |
"これはニュース2です\n", | |
"これはニュース3です\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "5sM07MY5aYDo" | |
}, | |
"source": [ | |
"### データを取得してみる" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "uYslXT1_I0Lu", | |
"outputId": "cbae4830-b4ca-43bd-b2d8-7b77e29a0303" | |
}, | |
"source": [ | |
"news_data = []\n", | |
"for content in soup.select(\".card-content\"):\n", | |
" # 日付を取得する\n", | |
" date = content.select_one(\".is-date-text\").text.strip()\n", | |
" # TODO: タイトルをprintするコードを追加する\n", | |
" title = content.select_one(\"h2\").text.strip()\n", | |
" # 取り出したデータを保存しておく\n", | |
" news_data.append({\n", | |
" \"date\": date,\n", | |
" \"title\": title,\n", | |
" })\n", | |
"news_data" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[{'date': '2020年11月16日', 'title': 'フラー株式会社 本店移転のお知らせ'},\n", | |
" {'date': '2020年11月11日',\n", | |
" 'title': 'フラー、全国の高専生を対象にしたオンラインキャリアイベント「高専キャラバン 2020 冬の陣」開催を決定!'},\n", | |
" {'date': '2020年10月20日', 'title': 'フラー代表取締役会長 渋谷、長岡高専の客員教授に就任'},\n", | |
" {'date': '2020年10月01日', 'title': 'フラー株式会社 会長及び社長就任のお知らせ'},\n", | |
" {'date': '2020年09月29日', 'title': 'TBSが国内No.1 アプリ分析ツール「App Ape」導入'},\n", | |
" {'date': '2020年09月21日', 'title': 'フラー、アルビレックス新潟とオフィシャルクラブパートナー契約を締結'},\n", | |
" {'date': '2020年09月11日', 'title': 'NTTデータにおけるエンタープライズ向けモバイルアプリ開発をサポート'},\n", | |
" {'date': '2020年09月10日', 'title': 'フラー代表取締役 渋谷が新潟ベンチャー協会代表理事に就任'},\n", | |
" {'date': '2020年08月11日', 'title': 'ユナイテッドが国内No.1 アプリ分析ツール「App Ape」導入'}]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 26 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "MrVi-qNCaaTo" | |
}, | |
"source": [ | |
"### データを加工してみる" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 507 | |
}, | |
"id": "VbKKjjESKte6", | |
"outputId": "590737e1-855a-4d8c-abb0-5f9d829f2938" | |
}, | |
"source": [ | |
"import pandas as pd\n", | |
"\n", | |
"# 入力サンプル: d = \"2020年11月10日\"\n", | |
"# 出力サンプル: \"2020年11月\"\n", | |
"def parse_month(d):\n", | |
" # TODO: 日付を取り除くコードを書く\n", | |
" parts = d.split(\"月\") \n", | |
" return parts[0] + \"月\" # parts[:-3]\n", | |
"\n", | |
"print(parse_month(\"2020年11月10日\"))\n", | |
"\n", | |
"# TODO: news_dataをDataFrameに変換するコードを追加する\n", | |
"df = pd.DataFrame(news_data)\n", | |
"df[\"month\"] = df[\"date\"].apply(parse_month)\n", | |
"df" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"2020年11月\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>date</th>\n", | |
" <th>title</th>\n", | |
" <th>month</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2020年11月16日</td>\n", | |
" <td>フラー株式会社 本店移転のお知らせ</td>\n", | |
" <td>2020年11月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2020年11月11日</td>\n", | |
" <td>フラー、全国の高専生を対象にしたオンラインキャリアイベント「高専キャラバン 2020 冬の陣...</td>\n", | |
" <td>2020年11月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2020年10月20日</td>\n", | |
" <td>フラー代表取締役会長 渋谷、長岡高専の客員教授に就任</td>\n", | |
" <td>2020年10月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2020年10月01日</td>\n", | |
" <td>フラー株式会社 会長及び社長就任のお知らせ</td>\n", | |
" <td>2020年10月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2020年09月29日</td>\n", | |
" <td>TBSが国内No.1 アプリ分析ツール「App Ape」導入</td>\n", | |
" <td>2020年09月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>2020年09月21日</td>\n", | |
" <td>フラー、アルビレックス新潟とオフィシャルクラブパートナー契約を締結</td>\n", | |
" <td>2020年09月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>2020年09月11日</td>\n", | |
" <td>NTTデータにおけるエンタープライズ向けモバイルアプリ開発をサポート</td>\n", | |
" <td>2020年09月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>2020年09月10日</td>\n", | |
" <td>フラー代表取締役 渋谷が新潟ベンチャー協会代表理事に就任</td>\n", | |
" <td>2020年09月</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>2020年08月11日</td>\n", | |
" <td>ユナイテッドが国内No.1 アプリ分析ツール「App Ape」導入</td>\n", | |
" <td>2020年08月</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" date title month\n", | |
"0 2020年11月16日 フラー株式会社 本店移転のお知らせ 2020年11月\n", | |
"1 2020年11月11日 フラー、全国の高専生を対象にしたオンラインキャリアイベント「高専キャラバン 2020 冬の陣... 2020年11月\n", | |
"2 2020年10月20日 フラー代表取締役会長 渋谷、長岡高専の客員教授に就任 2020年10月\n", | |
"3 2020年10月01日 フラー株式会社 会長及び社長就任のお知らせ 2020年10月\n", | |
"4 2020年09月29日 TBSが国内No.1 アプリ分析ツール「App Ape」導入 2020年09月\n", | |
"5 2020年09月21日 フラー、アルビレックス新潟とオフィシャルクラブパートナー契約を締結 2020年09月\n", | |
"6 2020年09月11日 NTTデータにおけるエンタープライズ向けモバイルアプリ開発をサポート 2020年09月\n", | |
"7 2020年09月10日 フラー代表取締役 渋谷が新潟ベンチャー協会代表理事に就任 2020年09月\n", | |
"8 2020年08月11日 ユナイテッドが国内No.1 アプリ分析ツール「App Ape」導入 2020年08月" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 33 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "POOpfWhUae_e" | |
}, | |
"source": [ | |
"### データを集計してみる" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 206 | |
}, | |
"id": "tqxIZSOFOuRh", | |
"outputId": "c50d32a3-a325-4daa-d41b-934531de13a0" | |
}, | |
"source": [ | |
"df_count = df.groupby(\"month\").count()\n", | |
"df_count = df_count[[\"date\"]].rename(columns={\"date\": \"count\"})\n", | |
"df_count" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>count</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>month</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2020年08月</th>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2020年09月</th>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2020年10月</th>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2020年11月</th>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" count\n", | |
"month \n", | |
"2020年08月 1\n", | |
"2020年09月 4\n", | |
"2020年10月 2\n", | |
"2020年11月 2" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 40 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 516 | |
}, | |
"id": "03xzZCSuPkPT", | |
"outputId": "9b84f7f8-5c84-4d06-a309-755644ea0219" | |
}, | |
"source": [ | |
"!pip install japanize-matplotlib\n", | |
"import japanize_matplotlib\n", | |
"df_count.plot.bar(y=\"count\")" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Requirement already satisfied: japanize-matplotlib in /usr/local/lib/python3.6/dist-packages (1.1.3)\n", | |
"Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from japanize-matplotlib) (3.2.2)\n", | |
"Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (1.18.5)\n", | |
"Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (2.8.1)\n", | |
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (1.3.1)\n", | |
"Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (0.10.0)\n", | |
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->japanize-matplotlib) (2.4.7)\n", | |
"Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.axes._subplots.AxesSubplot at 0x7f83d12c3fd0>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 44 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [], | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "OncGaprgZE6x" | |
}, | |
"source": [ | |
"ここまでで2日目が終了です。可視化まで行かないこともありますが、授業の進捗によって途中を端折ったりしています。\n", | |
"\n", | |
"ちなみに授業の進捗は、Slackを使ってこんな感じで同期しています。完全にオンラインの授業のため、相手のリアクションがわかりません。終わったらSlackのリアクションを押してもらうようにしています。人数が把握出来るため、結構便利です。\n", | |
"\n", | |
"![image.png](data:image/png;base64,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b2SegaxEzOwzWDznMTyZWPD85+BUsJXD8n/dsDrLXdY6nU5nwD4Dgc7lYmfPniU+Pp7k5GScTifh4eHUrl274N4QxaxLRERERERESocSHSBATn8Aj8dztcvIl8PhwG4v3MMwihIi/FEKD0RERERERORiJT5AgCt74V0UxblIvxLnovBAREREREREfq9UBAiQ00fA5XLlaqx4NVitVpxOZ7F7C5imidvtDthYsahsNhsOh0M9D0RERERERCSXUhMgXGAYBl6vF8MwME0zV5PFy8FisWCxWLBardhstiL3IsiPaZp4vV68Xm+xzuVCXTabDZvNpuBARERERERE8lXqAgQRERERERERKbpL81W4iIiIiIiIiJRoChBEREREREREJCAFCCIiIiIiIiISkAIEEREREREREQlIAYKIiIiIiIiIBKQAQUREREREREQCUoAgIiIiIiIiIgEpQBARERERERGRgBQgiIiIiIiIiEhAChBEREREREREJCAFCCIiIiIiIiISkAIEEREREREREQlIAYKIiIiIiIiIBKQAQUREREREREQCUoAgIiIiIiIiIgEpQBARERERERGRgBQgSKm0du1azpw5c7XLEBERERER+Z9RIgOE9PR0bml+Cy+9+NLVLiVP77z9DqmpqVe7jEsqPj6eTZs2Ffv4IYOHcPr06WIf3+ehPixZsqRQczdv3sxLL72E0+nkkYcfIbJuZJ6vNWvWFLseERERERGRksZ+tQu4XOx2O1bbf18+YhgGU6ZMoW27tpQrV+5ql3PJbNq4iYTEBNq2bVuo+ampqSQlJQFw9OhRdu3aRVpaGocPH/abV65cOcLCwvzG7mh5BykpKdjsNt/Y+XPn2bt3L9OmTfONpael07t3b8aMHeMbW7t2LRPGT2DRu4soX748896YV+RzFRERERERKY1KZIAQEhLC9h3br3YZeTp16hQul+tql3HJHTt2DIvVUuj5X3/9Na+//joAB/YfICIigokTJ+aad2uLW3nk0UdyjS9ZsoTIqEjfdp+H+tCufTseeOAB39ismbNIT0/3ba9Zs4bJkybzzqJ3iIqKKnStIiIiIiIiUkJ/wgBwS/NbmDt3LgDz58+nd+/ezHt9Hg0aNCA2NpZt27axaeMmWt7ekuioaB4e9DDJycm+4+vH1Ofjjz9m4MCB1K1TlxZ/bsGCBQv83mP1qtW0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PQ9EREREREQkl1ITIFxgGAZerxfDMDBNM1eTxcvBYrFgsViwWq3YbLYi9yLIj2maeL1evF5vsc7lQl02mw2bzabgQERERERERPJV6gIEERERERERESm6S/NVuIiIiIiIiIiUaAoQRERERERERCQgBQgiIiIiIiIiEpACBBEREREREREJSAGCiIiIiIiIiASkAEFEREREREREAlKAICIiIiIiIiIBKUAQERERERERkYAUIIiIiIiIiIhIQAoQRERERERERCQgBQgiIiIiIiIiEpACBBEREREREREJSAGCiIiIiIiIiASkAEFEREREREREAlKAICIiIiIiIiIBKUAQERERERERkYAUIIiIiIiIiIhIQAoQ/gulp6fz9sK3L/m6W7Zs4bvvvitwzpDBQzh9+nSx36NXr17ExcUVam7L21sSWTeywFffPn3zPPbkyZPUqVOn2HWKiIiIiIhI0divdgGS27fffsuCBQvo07fPJV13wfwFdL2vK9HR0b6x1NRUkpKSADh69Ci7du0iLS2Nw4cP+x1brlw5wsLC/MamTJnCR+s/8hv75Zdf+PrA10yfNt1vfPqM6TRv3txv7LNtnxX7XFwuF8FBwUU+bttn25i/YD6G18Dr9eI1vBheA5fLRVZWlu+VmZVJy5YtmTNnju/YzMxMWvy5hd96v/zyCwe+PkDFihUDvvcHSz7g1Wmv5ho3vAZnzpwhJiaGjzd8XORzEhERERERuRIUIPwXOnbs2BVb9+uvv+b1118H4MD+A0RERDBx4sRc825tcSuPPPqI39j48eMZP36831ivXr245557uP/++y9d4XnIzsomKCioyMdFRkYyaNAg7HY7drsdp9OJw+Fg1cpVrFq1ipub38wdd9xBdHQ0NWvW9Du2TJkyfLXvK9+22+2mbp26hIaGAnDw4EEmT5rM0rileb539we60/2B7n5jXx/4mjFjxlC3bl3+/sLfi3w+IiIiIiIiV0qJDRAa1G/AzFkzefMfb7Jnzx4Wvr2QW2+9laUfLGX27Nn8/PPP1KtXj2fGPUNsbCwAH330Ea+8/AonT54kMjKSUaNH8ec//znX2i6XixdffJHly5aTnp5ObGwsU5+fSq1atQBYvWo106ZN4/jx44SHhzN8+HDu6XgPkHOR2blTZ+a9MY9nJzzLiRMniK4XzSuvvEJUVBTjxo3jvcXv4fV6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)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "_kNq0_RUZWiM" | |
}, | |
"source": [ | |
"## クローラーの作成とデータの可視化\n", | |
"\n", | |
"今回はアドバンスドな授業をまとめてみます。本当はもっと簡素なバージョンで行っています。集中講義など、Pythonを学びたい学生がたくさんいるときは、こちらのバージョンを使います。\n", | |
"\n", | |
"今年はクラフトビールにハマっているので、データの対象は酒造免許ですが、自分の趣味に応じで取得するデータは変えています。\n", | |
"\n", | |
"データ可視化のガイドラインは、Material DesignのData Visualizationがわかりやすいため、これを読むように伝えています。\n", | |
"\n", | |
"https://material.io/design/communication/data-visualization.html" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "J3T7_5r_SrxG" | |
}, | |
"source": [ | |
"### 今日やること\n", | |
"\n", | |
"1. エクセルのURLリストをrequestsとBeautifulSoupのライブラリを使って、クローリングする\n", | |
"2. エクセルのURLから、直接Pandas DataFrameの形式に変換する\n", | |
"3. データを整形して、正規化する\n", | |
"4. 様々な角度からデータを切り出して、グラフで表示してみる" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "_AXX4p-wTiZE" | |
}, | |
"source": [ | |
"### エクセルのURLリストをクローリングする" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "MDY6a87kThZB", | |
"outputId": "23a13f97-e687-47fa-9cbb-b072de44e1de" | |
}, | |
"source": [ | |
"import requests\n", | |
"\n", | |
"res = requests.get(\"https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/zenkoku.htm\")\n", | |
"res" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<Response [200]>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 2 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "r-oE50fdT9yc", | |
"outputId": "eab66197-1676-4e9d-ed14-603efdb4216f" | |
}, | |
"source": [ | |
"from bs4 import BeautifulSoup\n", | |
"\n", | |
"soup = BeautifulSoup(res.content)\n", | |
"soup" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<!DOCTYPE html>\n", | |
"<html lang=\"ja\">\n", | |
"<head>\n", | |
"<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n", | |
"<meta content=\"IE=edge\" http-equiv=\"X-UA-Compatible\"/>\n", | |
"<meta content=\"width=device-width, initial-scale=1\" name=\"viewport\"/>\n", | |
"<title>全国分 | 酒類の免許|国税庁</title>\n", | |
"<link href=\"/template/css/bootstrap.min.css\" rel=\"stylesheet\"/>\n", | |
"<!--[if lt IE 9]>\n", | |
"\t\t\t<script src=\"/template/js/html5shiv.min.js\"></script>\n", | |
"\t\t\t<script src=\"/template/js/respond.min.js\"></script>\n", | |
"\t\t<![endif]-->\n", | |
"<script src=\"/template/js/jquery.min.js\"></script>\n", | |
"<script src=\"/template/js/bootstrap.min.js\"></script>\n", | |
"<link href=\"/template/css/common.css\" rel=\"stylesheet\"/>\n", | |
"<link href=\"/template/css/import.css\" rel=\"stylesheet\"/>\n", | |
"<script src=\"/template/js/custom.js\"></script>\n", | |
"<script src=\"/template/js/include.js\"></script>\n", | |
"</head>\n", | |
"<body>\n", | |
"<noscript>すべての機能をご利用いただくにはJavascriptを有効にしてください。</noscript>\n", | |
"<div class=\"container\">\n", | |
"<div id=\"header\"></div>\n", | |
"<div class=\"wrap\">\n", | |
"<div class=\"clearfix\">\n", | |
"<div class=\"left-content contents\">\n", | |
"<div id=\"contents\">\n", | |
"<div class=\"imp-cnt\" id=\"bodyArea\">\n", | |
"<p class=\"skip\"></p>\n", | |
"<ol class=\"breadcrumb\"><li><a href=\"/\">ホーム</a></li><li><a href=\"/taxes/index.htm\">税の情報・手続・用紙</a></li><li><a href=\"/taxes/sake/index.htm\">お酒に関する情報</a></li><li><a href=\"/taxes/sake/menkyo/mokuji.htm\">酒類の免許</a></li><li class=\"active\">全国分</li></ol>\n", | |
"<div class=\"page-header\" id=\"page-top\"><h1>酒類等製造免許の新規取得者名等一覧</h1></div>\n", | |
"<p> 酒類等製造免許の新規取得者名等については、平成26年より、品目別に全国分をまとめたものを掲載します。</p>\n", | |
"<div class=\"table-responsive\"><table class=\"table table-bordered tbl_kohyo3\">\n", | |
"<colgroup>\n", | |
"<col class=\"\" span=\"1\"/>\n", | |
"<col class=\"\" span=\"7\"/>\n", | |
"</colgroup>\n", | |
"<tbody><tr>\n", | |
"<th scope=\"col\" width=\"20%\">品目</th>\n", | |
"<th scope=\"col\" width=\"11%\">平成26年</th>\n", | |
"<th scope=\"col\" width=\"11%\">平成27年</th>\n", | |
"<th scope=\"col\" width=\"11%\">平成28年</th>\n", | |
"<th scope=\"col\" width=\"11%\">平成29年</th>\n", | |
"<th scope=\"col\" width=\"11%\">平成30年</th>\n", | |
"<th scope=\"col\" width=\"11%\">令和元年<br/></th>\n", | |
"<th scope=\"col\" width=\"11%\">令和2年<br/>\n", | |
" (8月分まで)</th>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>果実酒</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/15.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/01.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/08.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/22.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/01.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/01.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/></a><br/></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/01.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/></a><br/></td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>ビール</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/16.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/02.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/09.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/23.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/02.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/02.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/02.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>発泡酒</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/17.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/03.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/10.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/24.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/03.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/03.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/03.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>ウイスキー</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/18.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/04.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/11.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/25.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/04.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/04.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/04.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>その他の醸造酒</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/19.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/05.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/12.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/26.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/05.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/05.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/05.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>リキュール</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/20.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/06.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/13.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/27.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/06.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/06.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/06.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
"<td>上記以外</td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/21.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/07.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/14.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/28.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/07.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/07.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"<td class=\"center\"><a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/07.htm\"><img alt=\"詳細ページへのリンク\" src=\"/template/img/template/html_icon.png\"/><br/></a></td>\n", | |
"</tr>\n", | |
"</tbody></table></div><br/>\n", | |
"<p class=\"marginLeft2em\" style=\"margin-top:-2em;\">(注)氏名又は名称等については、常用漢字による表示をする場合があります。</p>\n", | |
"<br/>\n", | |
"<p class=\"marginLeft2em\">全ての品目の一覧はこちらをご覧ください。<br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/h26.xlsx\">平成26年Excelファイル/45KB</a><br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/h27.xlsx\">平成27年Excelファイル/53KB</a><br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/h28.xlsx\">平成28年Excelファイル/43KB</a><br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/h29.xlsx\">平成29年Excelファイル/42KB</a><br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/h30/12/h30.xlsx\">平成30年Excelファイル/45KB</a><br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/r01/10/r01.xlsx\">令和元年Excelファイル/49KB</a><br/>\n", | |
"<a href=\"/taxes/sake/menkyo/shinki/seizo/02/r02/02/r02.xlsx\">令和2年(8月分まで)Excelファイル/45KB</a>\n", | |
"</p>\n", | |
"</div>\n", | |
"</div><p class=\"page-top-link\"><a href=\"#page-top\">このページの先頭へ</a></p>\n", | |
"</div>\n", | |
"<!--/left-menu-->\n", | |
"<div class=\"right-menu\">\n", | |
"<div class=\"panel panel-default sidenavi bmg20\">\n", | |
"<div class=\"panel-heading\">\n", | |
"<h2 class=\"panel-title\"><a href=\"/taxes/index.htm\">税の情報・手続・用紙</a></h2>\n", | |
"</div>\n", | |
"<div class=\"panel-group\" id=\"navi-Accordion\">\n", | |
"<h3 class=\"sidenavi-title\"><a class=\"navi_title\" href=\"/taxes/shiraberu/index.htm\">税について調べる</a><a class=\"navi_btn collapsed\" data-parent=\"#sidenaviAccordion\" data-toggle=\"collapse\" href=\"#sidenaviAccordionCollapse1\"><img alt=\"メニューを開く\" src=\"/template/img/template/navi_down.png\"/></a></h3><div class=\"panel-collapse collapse\" id=\"sidenaviAccordionCollapse1\"><ul><li><a href=\"/taxes/shiraberu/shinkoku/kakutei.htm\">所得税(確定申告書等作成コーナー)</a></li><li><a href=\"/taxes/shiraberu/taxanswer/index2.htm\">タックスアンサー(よくある税の質問)</a></li><li><a href=\"/taxes/shiraberu/sodan/index.htm\">税の相談</a></li><li><a href=\"/taxes/shiraberu/zeimokubetsu/index.htm\">税目別情報</a></li><li><a href=\"http://www.rosenka.nta.go.jp/\">路線価図・評価倍率表</a></li><li><a href=\"/taxes/shiraberu/saigai/index.htm\">災害関連情報</a></li><li><a href=\"/taxes/shiraberu/kokusai/index.htm\">国際税務関係情報</a></li><li><a href=\"/taxes/shiraberu/shirabekata/info.htm\">税についての上手な調べ方</a></li></ul></div><h3 class=\"sidenavi-title\"><a class=\"navi_title\" href=\"/taxes/tetsuzuki/index.htm\">申告手続・用紙</a><a class=\"navi_btn collapsed\" data-parent=\"#sidenaviAccordion\" data-toggle=\"collapse\" href=\"#sidenaviAccordionCollapse2\"><img alt=\"メニューを開く\" src=\"/template/img/template/navi_down.png\"/></a></h3><div class=\"panel-collapse collapse\" id=\"sidenaviAccordionCollapse2\"><ul><li><a href=\"/taxes/tetsuzuki/shinsei/index.htm\">申告・申請・届出等、用紙(手続の案内・様式)</a></li><li><a href=\"/taxes/tetsuzuki/mynumberinfo/index.htm\">社会保障・税番号制度(マイナンバー)</a></li></ul></div><h3 class=\"sidenavi-title\"><a class=\"navi_title\" href=\"/taxes/nozei/index.htm\">納税・納税証明書手続</a><a class=\"navi_btn collapsed\" data-parent=\"#sidenaviAccordion\" data-toggle=\"collapse\" href=\"#sidenaviAccordionCollapse3\"><img alt=\"メニューを開く\" src=\"/template/img/template/navi_down.png\"/></a></h3><div class=\"panel-collapse collapse\" id=\"sidenaviAccordionCollapse3\"><ul><li><a href=\"/taxes/nozei/nofu/01.htm\">国税の納付手続</a></li><li><a href=\"/taxes/nozei/nozei-shomei/01.htm\">納税証明書</a></li><li><a href=\"/taxes/nozei/enno-butsuno/01.htm\">延納・物納申請等</a></li><li><a href=\"/taxes/nozei/entaizei/keisan/entai.htm\">延滞税</a></li></ul></div><h3 class=\"sidenavi-title\"><a class=\"navi_title\" href=\"/taxes/zeirishi/index.htm\">税理士に関する情報</a><a class=\"navi_btn collapsed\" data-parent=\"#sidenaviAccordion\" data-toggle=\"collapse\" href=\"#sidenaviAccordionCollapse4\"><img alt=\"メニューを開く\" src=\"/template/img/template/navi_down.png\"/></a></h3><div class=\"panel-collapse collapse\" id=\"sidenaviAccordionCollapse4\"><ul><li><a href=\"/taxes/zeirishi/index.htm#news\">新着情報</a></li><li><a href=\"/taxes/zeirishi/zeirishiseido/seido.htm\">税理士制度</a></li><li><a href=\"/taxes/zeirishi/zeirishishiken/zeirishi.htm\">税理士試験</a></li><li><a href=\"/taxes/zeirishi/chokai/chokai.htm\">税理士に関する懲戒処分等</a></li><li><a href=\"/taxes/zeirishi/search/search.htm\">税理士をお探しの方</a></li><li><a href=\"/taxes/zeirishi/zeirishiseido/qa.htm\">税理士関係法令等・Q&A</a></li></ul></div><h3 class=\"sidenavi-title\"><a class=\"navi_title\" href=\"/taxes/sake/index.htm\">お酒に関する情報</a><a class=\"navi_btn\" data-parent=\"#sidenaviAccordion\" data-toggle=\"collapse\" href=\"#sidenaviAccordionCollapse5\"><img alt=\"メニューを閉じる\" src=\"/template/img/template/navi_up.png\"/></a></h3><div class=\"panel-collapse collapse in\" id=\"sidenaviAccordionCollapse5\"><ul><li><a href=\"/taxes/sake/index.htm#syuzei\">酒税関係及び各種施策</a></li><li><a href=\"/taxes/sake/index.htm#ippan\">一般的な酒税の取扱い</a></li><li><a href=\"/taxes/sake/index.htm#senmonsyuzei\">専門的な酒税の取扱い</a></li><li><a href=\"/taxes/sake/index.htm#senmonsodan\">専門的な酒税の相談</a></li><li><a href=\"/taxes/sake/index.htm#shinkoku\">酒税の申告・納付や届出等</a></li><li><a href=\"/taxes/sake/index.htm#denwa\">電話相談センター・税務署の案内</a></li><li><a href=\"/taxes/sake/index.htm#shingikai\">審議会等</a></li><li><a href=\"/taxes/sake/index.htm#tokei\">統計情報・各種資料</a></li><li><a href=\"/taxes/sake/index.htm#qa\">お酒に関するQ&A(よくある質問)</a></li></ul></div><h3 class=\"sidenavi-title\"><a class=\"navi_title\" href=\"/taxes/kids/index.htm\">税の学習コーナー</a></h3>\n", | |
"</div>\n", | |
"</div>\n", | |
"</div>\n", | |
"<!--/right-menu-->\n", | |
"</div>\n", | |
"<!--/clearfix-->\n", | |
"</div>\n", | |
"<!--/wrap-->\n", | |
"<footer>\n", | |
"<h2>サイトマップ(コンテンツ一覧)</h2>\n", | |
"<ol class=\"breadcrumb footer\"><li><a href=\"/\">ホーム</a></li><li><a href=\"/taxes/index.htm\">税の情報・手続・用紙</a></li><li><a href=\"/taxes/sake/index.htm\">お酒に関する情報</a></li><li><a href=\"/taxes/sake/menkyo/mokuji.htm\">酒類の免許</a></li><li class=\"active\">全国分</li></ol>\n", | |
"<div id=\"footer\"></div>\n", | |
"</footer>\n", | |
"</div>\n", | |
"<!--/container-->\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 3 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "NqF8r2otUR7b", | |
"outputId": "d114eb67-fe6c-4933-d9ec-69a285a71ef9" | |
}, | |
"source": [ | |
"# TODO: エクセルのURLリストをCSSセレクタを使って取得する\n", | |
"url_list = []\n", | |
"# for a in soup.select(\".marginLeft2em a\"):\n", | |
"for a in soup.select(\"a[href$='.xlsx']\"):\n", | |
" url_list.append(\"https://www.nta.go.jp\" + a.get(\"href\"))\n", | |
"url_list" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"['https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/h26.xlsx',\n", | |
" 'https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/h27.xlsx',\n", | |
" 'https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/h28.xlsx',\n", | |
" 'https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/h29.xlsx',\n", | |
" 'https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/h30/12/h30.xlsx',\n", | |
" 'https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/r01/10/r01.xlsx',\n", | |
" 'https://www.nta.go.jp/taxes/sake/menkyo/shinki/seizo/02/r02/02/r02.xlsx']" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "epdG1I16YjCX", | |
"outputId": "23aab629-ff96-4ad1-9248-3bc4d79987ca" | |
}, | |
"source": [ | |
"import pandas as pd\n", | |
"\n", | |
"dataset = []\n", | |
"for url in url_list:\n", | |
" df = pd.read_excel(url)\n", | |
" dataset.append(df)\n", | |
"dataset" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[ 酒類等製造免許の新規取得者名等一覧(平成26年分) ... Unnamed: 9\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 平成26年1月1日から平成26年12月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 審査項目\n", | |
" .. ... ... ...\n", | |
" 223 岩手 ... M1\n", | |
" 224 山梨 ... M1\n", | |
" 225 大阪 ... M4\n", | |
" 226 長野 ... M1\n", | |
" 227 長野 ... M1\n", | |
" \n", | |
" [228 rows x 10 columns],\n", | |
" 酒類等製造免許の新規取得者名等一覧(平成27年分) ... Unnamed: 9\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 平成27年1月1日から平成27年12月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 審査項目\n", | |
" .. ... ... ...\n", | |
" 261 島根 ... M1\n", | |
" 262 島根 ... M1\n", | |
" 263 北海道 ... M1\n", | |
" 264 神奈川 ... M1\n", | |
" 265 東京 ... M1\n", | |
" \n", | |
" [266 rows x 10 columns],\n", | |
" 酒類等製造免許の新規取得者名等一覧(平成28年分) ... Unnamed: 9\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 平成28年1月1日から平成28年12月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 審査項目\n", | |
" .. ... ... ...\n", | |
" 220 長野 ... M1\n", | |
" 221 徳島 ... M1\n", | |
" 222 和歌山 ... M4\n", | |
" 223 大阪 ... M1\n", | |
" 224 兵庫 ... M1\n", | |
" \n", | |
" [225 rows x 10 columns],\n", | |
" 酒類等製造免許の新規取得者名等一覧(平成29年分) ... Unnamed: 8\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 平成29年1月1日から平成29年12月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 処理区分\n", | |
" .. ... ... ...\n", | |
" 231 佐賀 ... 新規\n", | |
" 232 香川 ... 新規\n", | |
" 233 滋賀 ... 新規\n", | |
" 234 滋賀 ... 新規\n", | |
" 235 滋賀 ... 新規\n", | |
" \n", | |
" [236 rows x 9 columns],\n", | |
" 酒類等製造免許の新規取得者名等一覧(平成30年分) ... Unnamed: 8\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 平成30年1月1日から平成30年12月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 処理区分\n", | |
" .. ... ... ...\n", | |
" 289 長野 ... 新規\n", | |
" 290 京都 ... 新規\n", | |
" 291 栃木 ... 新規\n", | |
" 292 鹿児島 ... 新規\n", | |
" 293 福島 ... 移転\n", | |
" \n", | |
" [294 rows x 9 columns],\n", | |
" 酒類等製造免許の新規取得者名等一覧(令和元年分) ... Unnamed: 8\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 平成31年1月1日から令和元年12月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 処理区分\n", | |
" .. ... ... ...\n", | |
" 321 熊本 ... 新規\n", | |
" 322 新潟 ... 新規\n", | |
" 323 東京 ... 新規\n", | |
" 324 岐阜 ... 新規\n", | |
" 325 山形 ... 新規\n", | |
" \n", | |
" [326 rows x 9 columns],\n", | |
" 酒類等製造免許の新規取得者名等一覧(令和2年分) ... Unnamed: 8\n", | |
" 0 NaN ... NaN\n", | |
" 1 NaN ... NaN\n", | |
" 2 令和2年1月1日から令和2年8月31日までの酒類等製造免許の取得者等は次のとおりです。 ... NaN\n", | |
" 3 NaN ... NaN\n", | |
" 4 都道府県名 ... 処理区分\n", | |
" .. ... ... ...\n", | |
" 290 新潟 ... 新規\n", | |
" 291 東京 ... 新規\n", | |
" 292 山梨 ... 新規\n", | |
" 293 北海道 ... 新規\n", | |
" 294 北海道 ... 新規\n", | |
" \n", | |
" [295 rows x 9 columns]]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 5 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "ebxrOgC-b3Cx" | |
}, | |
"source": [ | |
"### データを整形して、正規化する" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 133 | |
}, | |
"id": "j1l39r1lZ3B_", | |
"outputId": "325625fd-934a-40ea-de71-8a44e651e2c7" | |
}, | |
"source": [ | |
"df = dataset[0]\n", | |
"df[4:5]" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>酒類等製造免許の新規取得者名等一覧(平成26年分)</th>\n", | |
" <th>Unnamed: 1</th>\n", | |
" <th>Unnamed: 2</th>\n", | |
" <th>Unnamed: 3</th>\n", | |
" <th>Unnamed: 4</th>\n", | |
" <th>Unnamed: 5</th>\n", | |
" <th>Unnamed: 6</th>\n", | |
" <th>Unnamed: 7</th>\n", | |
" <th>Unnamed: 8</th>\n", | |
" <th>Unnamed: 9</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>都道府県名</td>\n", | |
" <td>税務署名</td>\n", | |
" <td>免許等年月日</td>\n", | |
" <td>申請等年月日</td>\n", | |
" <td>製造者氏名又は名称</td>\n", | |
" <td>製造場所在地</td>\n", | |
" <td>免許等区分</td>\n", | |
" <td>品目</td>\n", | |
" <td>処理区分</td>\n", | |
" <td>審査項目</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 酒類等製造免許の新規取得者名等一覧(平成26年分) Unnamed: 1 ... Unnamed: 8 Unnamed: 9\n", | |
"4 都道府県名 税務署名 ... 処理区分 審査項目\n", | |
"\n", | |
"[1 rows x 10 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 133 | |
}, | |
"id": "iv9ndLwGcoY9", | |
"outputId": "a8cca43e-9c61-4ac3-8f63-ec44baefff0e" | |
}, | |
"source": [ | |
"df = dataset[3]\n", | |
"df[4:5]" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>酒類等製造免許の新規取得者名等一覧(平成29年分)</th>\n", | |
" <th>Unnamed: 1</th>\n", | |
" <th>Unnamed: 2</th>\n", | |
" <th>Unnamed: 3</th>\n", | |
" <th>Unnamed: 4</th>\n", | |
" <th>Unnamed: 5</th>\n", | |
" <th>Unnamed: 6</th>\n", | |
" <th>Unnamed: 7</th>\n", | |
" <th>Unnamed: 8</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>都道府県名</td>\n", | |
" <td>税務署名</td>\n", | |
" <td>免許等年月日</td>\n", | |
" <td>申請等年月日</td>\n", | |
" <td>製造者氏名又は名称</td>\n", | |
" <td>製造場所在地</td>\n", | |
" <td>免許等区分</td>\n", | |
" <td>品目</td>\n", | |
" <td>処理区分</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 酒類等製造免許の新規取得者名等一覧(平成29年分) Unnamed: 1 ... Unnamed: 7 Unnamed: 8\n", | |
"4 都道府県名 税務署名 ... 品目 処理区分\n", | |
"\n", | |
"[1 rows x 9 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 7 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "S0mqioPDdShO", | |
"outputId": "e264d5a2-d5d5-4bfe-ef29-0ec5be1b8dc4" | |
}, | |
"source": [ | |
"df.columns" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"Index(['酒類等製造免許の新規取得者名等一覧(平成29年分)', 'Unnamed: 1', 'Unnamed: 2', 'Unnamed: 3',\n", | |
" 'Unnamed: 4', 'Unnamed: 5', 'Unnamed: 6', 'Unnamed: 7', 'Unnamed: 8'],\n", | |
" dtype='object')" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 8 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "uOE5zKlsdEVC", | |
"outputId": "ade1af27-9dbc-4d46-9ee8-bf55e731b596" | |
}, | |
"source": [ | |
"clean_dataset = []\n", | |
"for df in dataset:\n", | |
" if \"Unnamed: 9\" in df:\n", | |
" df = df.drop(columns=[\"Unnamed: 9\"])\n", | |
" df = df[5:]\n", | |
" df.columns = [\n", | |
" \"都道府県名\",\n", | |
" \"税務署名\",\n", | |
" \"免許等年月日\",\n", | |
" \"申請等年月日\",\n", | |
" \"製造者氏名又は名称\",\n", | |
" \"製造場所在地\",\n", | |
" \"免許等区分\",\n", | |
" \"品目\",\n", | |
" \"処理区分\"\n", | |
" ]\n", | |
" clean_dataset.append(df)\n", | |
"clean_dataset" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[ 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
" 5 岩手 一関 2014-01-01 00:00:00 ... 酒類 単式蒸留しょうちゅう 新規\n", | |
" 6 愛知 名古屋中村 2014-01-08 00:00:00 ... 酒類 ビール 新規\n", | |
" 7 愛知 名古屋中村 2014-01-08 00:00:00 ... 酒類 発泡酒 新規\n", | |
" 8 福岡 八女 2014-01-08 00:00:00 ... 試験免許 その他の醸造酒 新規\n", | |
" 9 熊本 山鹿 2014-01-27 00:00:00 ... 酒類 単式蒸留しょうちゅう 法人成り等\n", | |
" .. ... ... ... ... ... ... ...\n", | |
" 223 岩手 花巻 2014-12-15 00:00:00 ... もろみ NaN 新規\n", | |
" 224 山梨 甲府 2014-12-17 00:00:00 ... もろみ NaN 新規\n", | |
" 225 大阪 堺 2014-12-19 00:00:00 ... 酒類 清酒 移転\n", | |
" 226 長野 伊那 2014-12-24 00:00:00 ... 試験免許 清酒 新規\n", | |
" 227 長野 伊那 2014-12-24 00:00:00 ... 試験免許 その他の醸造酒 新規\n", | |
" \n", | |
" [223 rows x 9 columns],\n", | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
" 5 北海道 函館 42005 ... 酒類 果実酒 法人成り等\n", | |
" 6 熊本 熊本東 42005 ... 酒類 清酒 法人成り等\n", | |
" 7 熊本 熊本東 42005 ... 酒類 単式蒸留しょうちゅう 法人成り等\n", | |
" 8 熊本 熊本東 42005 ... 酒類 リキュール 新規\n", | |
" 9 北海道 深川 42013 ... 酒類 果実酒 新規\n", | |
" .. ... ... ... ... ... ... ...\n", | |
" 261 島根 益田 2015-12-22 00:00:00 ... 酒類 果実酒 新規\n", | |
" 262 島根 浜田 2015-12-22 00:00:00 ... 酒類 発泡酒 新規\n", | |
" 263 北海道 函館 42360 ... 試験\\n免許 清酒 新規\n", | |
" 264 神奈川 横浜中 42362 ... 試験\\n免許 スピリッツ 新規\n", | |
" 265 東京 神田 42363 ... 酒類 その他の醸造酒 新規\n", | |
" \n", | |
" [261 rows x 9 columns],\n", | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
" 5 埼玉 川口 2016-01-01 00:00:00 ... 酒類 発泡酒 新規\n", | |
" 6 岡山 瀬戸 2016-01-01 00:00:00 ... 酒類 果実酒 法人成り等\n", | |
" 7 岡山 瀬戸 2016-01-01 00:00:00 ... 酒類 甘味果実酒 法人成り等\n", | |
" 8 岡山 瀬戸 2016-01-01 00:00:00 ... 酒類 ブランデー 法人成り等\n", | |
" 9 岡山 瀬戸 2016-01-01 00:00:00 ... 酒類 スピリッツ 法人成り等\n", | |
" .. ... ... ... ... ... ... ...\n", | |
" 220 長野 飯田 42724 ... 酒類 果実酒 新規\n", | |
" 221 徳島 徳島 42724 ... 酒母 NaN 新規\n", | |
" 222 和歌山 和歌山 42726 ... 酒類 発泡酒 移転\n", | |
" 223 大阪 富田林 42726 ... 試験免許 果実酒 新規\n", | |
" 224 兵庫 明石 42730 ... 酒類 発泡酒 新規\n", | |
" \n", | |
" [220 rows x 9 columns],\n", | |
" 都道府県名 税務署名 免許等年月日 申請等年月日 ... 製造場所在地 免許等区分 品目 処理区分\n", | |
" 5 三重 上野 42736 42551 ... 名張市緑が丘東182番地 酒類 その他の醸造酒 新規\n", | |
" 6 長崎 島原 42736 42641 ... 南島原市布津町丙271番地4 酒類 その他の醸造酒 新規\n", | |
" 7 岩手 一関 42741 42580 ... 西磐井郡平泉町長島字砂子沢172番地6 酒類 果実酒 新規\n", | |
" 8 高知 須崎 42747 42620 ... 高岡郡檮原町松原400番地1 酒類 その他の醸造酒 新規\n", | |
" 9 京都 下京 42751 42657 ... 京都市南区西九条高畠町25番地1 酒類 ビール 新規\n", | |
" .. ... ... ... ... ... ... ... ... ...\n", | |
" 231 佐賀 伊万里 43089 43041 ... 西松浦郡有田町戸矢乙340番地28 試験免許 発泡酒 新規\n", | |
" 232 香川 丸亀 43090 42846 ... 丸亀市北平山町二丁目21番地41 酒類 発泡酒 新規\n", | |
" 233 滋賀 大津 43095 43034 ... 大津市瀬田大江町1番地5 龍谷大学瀬田学舎9号館 試験免許 清酒 新規\n", | |
" 234 滋賀 大津 43095 43034 ... 大津市瀬田大江町1番地5 龍谷大学瀬田学舎9号館 試験免許 ビール 新規\n", | |
" 235 滋賀 大津 43095 43034 ... 大津市瀬田大江町1番地5 龍谷大学瀬田学舎9号館 試験免許 果実酒 新規\n", | |
" \n", | |
" [231 rows x 9 columns],\n", | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
" 5 鳥取 倉吉 平成30年1月1日 ... 酒類 果実酒 法人成り等\n", | |
" 6 鳥取 倉吉 平成30年1月1日 ... 酒類 甘味果実酒 法人成り等\n", | |
" 7 埼玉 朝霞 平成30年1月11日 ... 酒類 発泡酒 新規\n", | |
" 8 静岡 浜松西 平成30年1月11日 ... 酒類 発泡酒 新規\n", | |
" 9 静岡 掛川 平成30年1月11日 ... 酒類 発泡酒 新規\n", | |
" .. ... ... ... ... ... ... ...\n", | |
" 289 長野 信濃中野 平成30年12月20日 ... 酒類 その他の醸造酒 新規\n", | |
" 290 京都 宮津 平成30年12月20日 ... 酒類 その他の醸造酒 新規\n", | |
" 291 栃木 大田原 平成30年12月21日 ... 酒類 果実酒 新規\n", | |
" 292 鹿児島 種子島 平成30年12月21日 ... もろみ NaN 新規\n", | |
" 293 福島 相馬 平成30年12月25日 ... 酒類 その他の醸造酒 移転\n", | |
" \n", | |
" [289 rows x 9 columns],\n", | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
" 5 熊本 人吉 平成31年1月1日 ... 酒類 単式蒸留焼酎 法人成り等\n", | |
" 6 東京 麹町 平成31年1月1日 ... 酒類 ビール 法人成り等\n", | |
" 7 長野 上田 平成31年1月1日 ... 酒類 ウイスキー 新規\n", | |
" 8 長野 佐久 平成31年1月1日 ... 酒類 発泡酒 新規\n", | |
" 9 東京 麻布 平成31年1月1日 ... 酒類 発泡酒 新規\n", | |
" .. ... ... ... ... ... ... ...\n", | |
" 321 熊本 熊本東 令和元年12月19日 ... 酒類 スピリッツ 新規\n", | |
" 322 新潟 新津 令和元年12月20日 ... 試験免許 清酒 新規\n", | |
" 323 東京 蒲田 令和元年12月20日 ... 酒類 リキュール 新規\n", | |
" 324 岐阜 関 令和元年12月20日 ... 酒類 リキュール 新規\n", | |
" 325 山形 山形 令和元年12月23日 ... 酒類 発泡酒 新規\n", | |
" \n", | |
" [321 rows x 9 columns],\n", | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
" 5 北海道 札幌中 令和2年1月1日 ... 酒類 発泡酒 法人成り等\n", | |
" 6 北海道 札幌中 令和2年1月1日 ... 酒類 ビール 法人成り等\n", | |
" 7 青森 五所川原 令和2年1月1日 ... 酒類 清酒 移転\n", | |
" 8 青森 五所川原 令和2年1月1日 ... 酒類 雑酒 移転\n", | |
" 9 青森 五所川原 令和2年1月1日 ... 酒類 スピリッツ 移転\n", | |
" .. ... ... ... ... ... ... ...\n", | |
" 290 新潟 十日町 令和2年8月31日 ... 酒類 発泡酒 新規\n", | |
" 291 東京 神田 令和2年8月31日 ... 酒類 発泡酒 新規\n", | |
" 292 山梨 甲府 令和2年8月31日 ... 酒類 単式蒸留焼酎 新規\n", | |
" 293 北海道 札幌南 令和2年8月31日 ... 酒類 スピリッツ 新規\n", | |
" 294 北海道 札幌南 令和2年8月31日 ... 酒類 リキュール 新規\n", | |
" \n", | |
" [290 rows x 9 columns]]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 9 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 962 | |
}, | |
"id": "EF_lMI0lephj", | |
"outputId": "50275461-5395-4783-f084-45b6132e00ac" | |
}, | |
"source": [ | |
"df_all = pd.concat(clean_dataset, ignore_index=True)\n", | |
"df_all" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>都道府県名</th>\n", | |
" <th>税務署名</th>\n", | |
" <th>免許等年月日</th>\n", | |
" <th>申請等年月日</th>\n", | |
" <th>製造者氏名又は名称</th>\n", | |
" <th>製造場所在地</th>\n", | |
" <th>免許等区分</th>\n", | |
" <th>品目</th>\n", | |
" <th>処理区分</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>岩手</td>\n", | |
" <td>一関</td>\n", | |
" <td>2014-01-01 00:00:00</td>\n", | |
" <td>2013-08-26 00:00:00</td>\n", | |
" <td>岩手銘醸株式会社</td>\n", | |
" <td>一関市千厩町千厩字北方134番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留しょうちゅう</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>愛知</td>\n", | |
" <td>名古屋中村</td>\n", | |
" <td>2014-01-08 00:00:00</td>\n", | |
" <td>2013-06-21 00:00:00</td>\n", | |
" <td>株式会社ワイマーケット\\nY.MARKET BREWING</td>\n", | |
" <td>名古屋市中村区名駅四丁目1705番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>ビール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>愛知</td>\n", | |
" <td>名古屋中村</td>\n", | |
" <td>2014-01-08 00:00:00</td>\n", | |
" <td>2013-06-21 00:00:00</td>\n", | |
" <td>株式会社ワイマーケット\\nY.MARKET BREWING</td>\n", | |
" <td>名古屋市中村区名駅四丁目1705番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>福岡</td>\n", | |
" <td>八女</td>\n", | |
" <td>2014-01-08 00:00:00</td>\n", | |
" <td>2013-12-06 00:00:00</td>\n", | |
" <td>西吉田酒造株式会社</td>\n", | |
" <td>筑後市大字和泉612番地</td>\n", | |
" <td>試験免許</td>\n", | |
" <td>その他の醸造酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>熊本</td>\n", | |
" <td>山鹿</td>\n", | |
" <td>2014-01-27 00:00:00</td>\n", | |
" <td>2013-09-12 00:00:00</td>\n", | |
" <td>株式会社VinEx山鹿\\nVinEx山鹿</td>\n", | |
" <td>山鹿市鹿央町合里980番地1</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留しょうちゅう</td>\n", | |
" <td>法人成り等</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1830</th>\n", | |
" <td>新潟</td>\n", | |
" <td>十日町</td>\n", | |
" <td>令和2年8月31日</td>\n", | |
" <td>令和2年2月25日</td>\n", | |
" <td>法人番号3110001034090\\n株式会社 醸燻酒類研究所</td>\n", | |
" <td>十日町市本町5丁目55番地8</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1831</th>\n", | |
" <td>東京</td>\n", | |
" <td>神田</td>\n", | |
" <td>令和2年8月31日</td>\n", | |
" <td>令和元年12月16日</td>\n", | |
" <td>法人番号7010401007149\\n株式会社魚金</td>\n", | |
" <td>千代田区神田錦町2丁目2番1号 KANDA SQUARE1階店舗9区画</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1832</th>\n", | |
" <td>山梨</td>\n", | |
" <td>甲府</td>\n", | |
" <td>令和2年8月31日</td>\n", | |
" <td>令和2年6月26日</td>\n", | |
" <td>法人番号1090001011219\\n山梨銘醸株式会社</td>\n", | |
" <td>北杜市白州町台ヶ原2283番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留焼酎</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1833</th>\n", | |
" <td>北海道</td>\n", | |
" <td>札幌南</td>\n", | |
" <td>令和2年8月31日</td>\n", | |
" <td>令和2年4月9日</td>\n", | |
" <td>法人番号9430001021794\\n北海道コカ・コーラボトリング株式会社\\n北海道コカ・コ...</td>\n", | |
" <td>札幌市清田区清田一条一丁目2番1号</td>\n", | |
" <td>酒類</td>\n", | |
" <td>スピリッツ</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1834</th>\n", | |
" <td>北海道</td>\n", | |
" <td>札幌南</td>\n", | |
" <td>令和2年8月31日</td>\n", | |
" <td>令和2年4月9日</td>\n", | |
" <td>法人番号9430001021794\\n北海道コカ・コーラボトリング株式会社\\n北海道コカ・コ...</td>\n", | |
" <td>札幌市清田区清田一条一丁目2番1号</td>\n", | |
" <td>酒類</td>\n", | |
" <td>リキュール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>1835 rows × 9 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
"0 岩手 一関 2014-01-01 00:00:00 ... 酒類 単式蒸留しょうちゅう 新規\n", | |
"1 愛知 名古屋中村 2014-01-08 00:00:00 ... 酒類 ビール 新規\n", | |
"2 愛知 名古屋中村 2014-01-08 00:00:00 ... 酒類 発泡酒 新規\n", | |
"3 福岡 八女 2014-01-08 00:00:00 ... 試験免許 その他の醸造酒 新規\n", | |
"4 熊本 山鹿 2014-01-27 00:00:00 ... 酒類 単式蒸留しょうちゅう 法人成り等\n", | |
"... ... ... ... ... ... ... ...\n", | |
"1830 新潟 十日町 令和2年8月31日 ... 酒類 発泡酒 新規\n", | |
"1831 東京 神田 令和2年8月31日 ... 酒類 発泡酒 新規\n", | |
"1832 山梨 甲府 令和2年8月31日 ... 酒類 単式蒸留焼酎 新規\n", | |
"1833 北海道 札幌南 令和2年8月31日 ... 酒類 スピリッツ 新規\n", | |
"1834 北海道 札幌南 令和2年8月31日 ... 酒類 リキュール 新規\n", | |
"\n", | |
"[1835 rows x 9 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 962 | |
}, | |
"id": "nfjrsfvgjjy6", | |
"outputId": "bc01d501-2da3-40b3-e7a7-d5b2fb6fc43b" | |
}, | |
"source": [ | |
"import datetime\n", | |
"\n", | |
"def parse_date(d):\n", | |
" if type(d) is int:\n", | |
" if d < 60:\n", | |
" # 1900-03-01より前の場合\n", | |
" days = d - 1\n", | |
" else:\n", | |
" # 1900-03-01以降の場合\n", | |
" days = d - 2\n", | |
" return pd.Timestamp(pd.to_datetime('1900/01/01') + datetime.timedelta(days=days))\n", | |
" elif type(d) is datetime.datetime:\n", | |
" return pd.Timestamp(d)\n", | |
" elif type(d) is str:\n", | |
" d = d.strip()\n", | |
" year, others = d.split(\"年\")\n", | |
" month, day = others.split(\"月\")\n", | |
" day = day.replace(\"日\", \"\")\n", | |
" if year.startswith(\"平成元\"):\n", | |
" year = 1989\n", | |
" elif year.startswith(\"平成\"):\n", | |
" year = int(year[2:]) + 1988\n", | |
" elif year.startswith(\"令和元\"):\n", | |
" year = 2019 \n", | |
" elif year.startswith(\"令和\"):\n", | |
" year = int(year[2:]) + 2018\n", | |
" else:\n", | |
" raise Exception(\"Invalid year format\")\n", | |
" return pd.Timestamp(year, int(month), int(day))\n", | |
" else:\n", | |
" raise Exception(\"Invalid data format\")\n", | |
"\n", | |
"df_clean = df_all.copy()\n", | |
"df_clean = df_clean.dropna()\n", | |
"df_clean[\"免許等年月日\"] = df_clean[\"免許等年月日\"].apply(parse_date)\n", | |
"df_clean[\"申請等年月日\"] = df_clean[\"申請等年月日\"].apply(parse_date)\n", | |
"df_clean" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>都道府県名</th>\n", | |
" <th>税務署名</th>\n", | |
" <th>免許等年月日</th>\n", | |
" <th>申請等年月日</th>\n", | |
" <th>製造者氏名又は名称</th>\n", | |
" <th>製造場所在地</th>\n", | |
" <th>免許等区分</th>\n", | |
" <th>品目</th>\n", | |
" <th>処理区分</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>岩手</td>\n", | |
" <td>一関</td>\n", | |
" <td>2014-01-01</td>\n", | |
" <td>2013-08-26</td>\n", | |
" <td>岩手銘醸株式会社</td>\n", | |
" <td>一関市千厩町千厩字北方134番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留しょうちゅう</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>愛知</td>\n", | |
" <td>名古屋中村</td>\n", | |
" <td>2014-01-08</td>\n", | |
" <td>2013-06-21</td>\n", | |
" <td>株式会社ワイマーケット\\nY.MARKET BREWING</td>\n", | |
" <td>名古屋市中村区名駅四丁目1705番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>ビール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>愛知</td>\n", | |
" <td>名古屋中村</td>\n", | |
" <td>2014-01-08</td>\n", | |
" <td>2013-06-21</td>\n", | |
" <td>株式会社ワイマーケット\\nY.MARKET BREWING</td>\n", | |
" <td>名古屋市中村区名駅四丁目1705番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>福岡</td>\n", | |
" <td>八女</td>\n", | |
" <td>2014-01-08</td>\n", | |
" <td>2013-12-06</td>\n", | |
" <td>西吉田酒造株式会社</td>\n", | |
" <td>筑後市大字和泉612番地</td>\n", | |
" <td>試験免許</td>\n", | |
" <td>その他の醸造酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>熊本</td>\n", | |
" <td>山鹿</td>\n", | |
" <td>2014-01-27</td>\n", | |
" <td>2013-09-12</td>\n", | |
" <td>株式会社VinEx山鹿\\nVinEx山鹿</td>\n", | |
" <td>山鹿市鹿央町合里980番地1</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留しょうちゅう</td>\n", | |
" <td>法人成り等</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1830</th>\n", | |
" <td>新潟</td>\n", | |
" <td>十日町</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-02-25</td>\n", | |
" <td>法人番号3110001034090\\n株式会社 醸燻酒類研究所</td>\n", | |
" <td>十日町市本町5丁目55番地8</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1831</th>\n", | |
" <td>東京</td>\n", | |
" <td>神田</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2019-12-16</td>\n", | |
" <td>法人番号7010401007149\\n株式会社魚金</td>\n", | |
" <td>千代田区神田錦町2丁目2番1号 KANDA SQUARE1階店舗9区画</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1832</th>\n", | |
" <td>山梨</td>\n", | |
" <td>甲府</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-06-26</td>\n", | |
" <td>法人番号1090001011219\\n山梨銘醸株式会社</td>\n", | |
" <td>北杜市白州町台ヶ原2283番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留焼酎</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1833</th>\n", | |
" <td>北海道</td>\n", | |
" <td>札幌南</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-04-09</td>\n", | |
" <td>法人番号9430001021794\\n北海道コカ・コーラボトリング株式会社\\n北海道コカ・コ...</td>\n", | |
" <td>札幌市清田区清田一条一丁目2番1号</td>\n", | |
" <td>酒類</td>\n", | |
" <td>スピリッツ</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1834</th>\n", | |
" <td>北海道</td>\n", | |
" <td>札幌南</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-04-09</td>\n", | |
" <td>法人番号9430001021794\\n北海道コカ・コーラボトリング株式会社\\n北海道コカ・コ...</td>\n", | |
" <td>札幌市清田区清田一条一丁目2番1号</td>\n", | |
" <td>酒類</td>\n", | |
" <td>リキュール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>1722 rows × 9 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
"0 岩手 一関 2014-01-01 ... 酒類 単式蒸留しょうちゅう 新規\n", | |
"1 愛知 名古屋中村 2014-01-08 ... 酒類 ビール 新規\n", | |
"2 愛知 名古屋中村 2014-01-08 ... 酒類 発泡酒 新規\n", | |
"3 福岡 八女 2014-01-08 ... 試験免許 その他の醸造酒 新規\n", | |
"4 熊本 山鹿 2014-01-27 ... 酒類 単式蒸留しょうちゅう 法人成り等\n", | |
"... ... ... ... ... ... ... ...\n", | |
"1830 新潟 十日町 2020-08-31 ... 酒類 発泡酒 新規\n", | |
"1831 東京 神田 2020-08-31 ... 酒類 発泡酒 新規\n", | |
"1832 山梨 甲府 2020-08-31 ... 酒類 単式蒸留焼酎 新規\n", | |
"1833 北海道 札幌南 2020-08-31 ... 酒類 スピリッツ 新規\n", | |
"1834 北海道 札幌南 2020-08-31 ... 酒類 リキュール 新規\n", | |
"\n", | |
"[1722 rows x 9 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "wjx9MTAZXlHU", | |
"outputId": "ae1dc7ba-0e4c-4b1b-ea47-6fa222f2184d" | |
}, | |
"source": [ | |
"df_clean[\"都道府県名\"].unique()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array(['岩手', '愛知', '福岡', '熊本', '愛媛', '兵庫', '山梨', '東京', '栃木', '京都', '鳥取',\n", | |
" '宮崎', '新潟', '長崎', '和歌山', '大阪', '山口', '徳島', '三重', '鹿児島', '山形', '青森',\n", | |
" '岐阜', '神奈川', '静岡', '沖縄', '茨城', '北海道', '埼玉', '奈良', '長野', '広島', '千葉',\n", | |
" '秋田', '群馬', '福島', '香川', '福井', '高知', '宮城', '石川', '富山', '滋賀', '大分',\n", | |
" '岡山', '島根', '佐賀', '札幌', '宮﨑'], dtype=object)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "6PDTEfUKknAm", | |
"outputId": "b9b80bf3-894f-422d-c4f4-e46cc3a17ea3" | |
}, | |
"source": [ | |
"df_clean[\"免許等区分\"].unique()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array(['酒類', '試験免許', '試験\\n免許', ' 試験免許', '試験免許 '], dtype=object)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 13 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "R0vkv_-XmV9h", | |
"outputId": "1c333304-5d91-415b-de81-bbddd0aa0d74" | |
}, | |
"source": [ | |
"df_clean[\"品目\"].unique()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array(['単式蒸留しょうちゅう', 'ビール', '発泡酒', 'その他の醸造酒', 'リキュール', 'みりん', '果実酒',\n", | |
" 'スピリッツ', '清酒', '合成清酒', '連続式蒸留しょうちゅう', '粉末酒', '原料用アルコール', '雑酒',\n", | |
" '甘味果実酒', 'ブランデー', 'ウイスキー', '連続式蒸留焼酎', '単式蒸留焼酎', 'スピリッツ・リキュール',\n", | |
" 'その他の醸\\n造酒', '原料用アル\\nコール', '単式蒸留\\n焼酎'], dtype=object)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 168 | |
}, | |
"id": "0uCidOpaoFoF", | |
"outputId": "7a976fc2-1bd6-4248-857f-f13d31d86b58" | |
}, | |
"source": [ | |
"df_clean[df_clean[\"品目\"] == \"スピリッツ・リキュール\"]" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>都道府県名</th>\n", | |
" <th>税務署名</th>\n", | |
" <th>免許等年月日</th>\n", | |
" <th>申請等年月日</th>\n", | |
" <th>製造者氏名又は名称</th>\n", | |
" <th>製造場所在地</th>\n", | |
" <th>免許等区分</th>\n", | |
" <th>品目</th>\n", | |
" <th>処理区分</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1634</th>\n", | |
" <td>滋賀</td>\n", | |
" <td>草津</td>\n", | |
" <td>2020-04-01</td>\n", | |
" <td>2019-12-10</td>\n", | |
" <td>法人番号4011001007970\\n株式会社コカ・コーラ東京研究開発センター\\n株式会社コ...</td>\n", | |
" <td>守山市阿村町49番地</td>\n", | |
" <td>試験免許</td>\n", | |
" <td>スピリッツ・リキュール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 都道府県名 税務署名 免許等年月日 申請等年月日 ... 製造場所在地 免許等区分 品目 処理区分\n", | |
"1634 滋賀 草津 2020-04-01 2019-12-10 ... 守山市阿村町49番地 試験免許 スピリッツ・リキュール 新規\n", | |
"\n", | |
"[1 rows x 9 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 15 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "tlvuBS_9mflw", | |
"outputId": "1da1537e-70d4-4a45-b91d-aa589f5aa16c" | |
}, | |
"source": [ | |
"df_clean[\"処理区分\"].unique()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array(['新規', '法人成り等', '相続', '移転', '条件解除', '条件緩和', '新規\\u3000'],\n", | |
" dtype=object)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 16 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 945 | |
}, | |
"id": "eHOtRZ3AnKJQ", | |
"outputId": "2dff69e7-dc32-4429-e254-f03df5b14d35" | |
}, | |
"source": [ | |
"def cleanse_string(d):\n", | |
" d = d.replace(\"\\n\", \"\")\n", | |
" d = d.strip() \n", | |
" return d\n", | |
"\n", | |
"def normalize_category(d):\n", | |
" d = d.replace(\"しょうちゅう\", \"焼酎\")\n", | |
" d = d.replace(\"スピリッツ・リキュール\", \"スピリッツ\")\n", | |
" return d\n", | |
"\n", | |
"def normalize_prefecture(d):\n", | |
" if d == \"札幌\":\n", | |
" return \"北海道\"\n", | |
" elif d == \"宮﨑\":\n", | |
" return \"宮崎\"\n", | |
" else:\n", | |
" return d\n", | |
"\n", | |
"df_normalize = df_clean.copy()\n", | |
"df_normalize[\"免許等区分\"] = df_normalize[\"免許等区分\"].apply(cleanse_string)\n", | |
"df_normalize[\"品目\"] = df_normalize[\"品目\"].apply(normalize_category)\n", | |
"df_normalize[\"処理区分\"] = df_normalize[\"処理区分\"].apply(cleanse_string)\n", | |
"df_normalize[\"都道府県名\"] = df_normalize[\"都道府県名\"].apply(cleanse_string).apply(normalize_prefecture)\n", | |
"df_normalize" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>都道府県名</th>\n", | |
" <th>税務署名</th>\n", | |
" <th>免許等年月日</th>\n", | |
" <th>申請等年月日</th>\n", | |
" <th>製造者氏名又は名称</th>\n", | |
" <th>製造場所在地</th>\n", | |
" <th>免許等区分</th>\n", | |
" <th>品目</th>\n", | |
" <th>処理区分</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>岩手</td>\n", | |
" <td>一関</td>\n", | |
" <td>2014-01-01</td>\n", | |
" <td>2013-08-26</td>\n", | |
" <td>岩手銘醸株式会社</td>\n", | |
" <td>一関市千厩町千厩字北方134番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留焼酎</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>愛知</td>\n", | |
" <td>名古屋中村</td>\n", | |
" <td>2014-01-08</td>\n", | |
" <td>2013-06-21</td>\n", | |
" <td>株式会社ワイマーケット\\nY.MARKET BREWING</td>\n", | |
" <td>名古屋市中村区名駅四丁目1705番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>ビール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>愛知</td>\n", | |
" <td>名古屋中村</td>\n", | |
" <td>2014-01-08</td>\n", | |
" <td>2013-06-21</td>\n", | |
" <td>株式会社ワイマーケット\\nY.MARKET BREWING</td>\n", | |
" <td>名古屋市中村区名駅四丁目1705番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>福岡</td>\n", | |
" <td>八女</td>\n", | |
" <td>2014-01-08</td>\n", | |
" <td>2013-12-06</td>\n", | |
" <td>西吉田酒造株式会社</td>\n", | |
" <td>筑後市大字和泉612番地</td>\n", | |
" <td>試験免許</td>\n", | |
" <td>その他の醸造酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>熊本</td>\n", | |
" <td>山鹿</td>\n", | |
" <td>2014-01-27</td>\n", | |
" <td>2013-09-12</td>\n", | |
" <td>株式会社VinEx山鹿\\nVinEx山鹿</td>\n", | |
" <td>山鹿市鹿央町合里980番地1</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留焼酎</td>\n", | |
" <td>法人成り等</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1830</th>\n", | |
" <td>新潟</td>\n", | |
" <td>十日町</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-02-25</td>\n", | |
" <td>法人番号3110001034090\\n株式会社 醸燻酒類研究所</td>\n", | |
" <td>十日町市本町5丁目55番地8</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1831</th>\n", | |
" <td>東京</td>\n", | |
" <td>神田</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2019-12-16</td>\n", | |
" <td>法人番号7010401007149\\n株式会社魚金</td>\n", | |
" <td>千代田区神田錦町2丁目2番1号 KANDA SQUARE1階店舗9区画</td>\n", | |
" <td>酒類</td>\n", | |
" <td>発泡酒</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1832</th>\n", | |
" <td>山梨</td>\n", | |
" <td>甲府</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-06-26</td>\n", | |
" <td>法人番号1090001011219\\n山梨銘醸株式会社</td>\n", | |
" <td>北杜市白州町台ヶ原2283番地</td>\n", | |
" <td>酒類</td>\n", | |
" <td>単式蒸留焼酎</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1833</th>\n", | |
" <td>北海道</td>\n", | |
" <td>札幌南</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-04-09</td>\n", | |
" <td>法人番号9430001021794\\n北海道コカ・コーラボトリング株式会社\\n北海道コカ・コ...</td>\n", | |
" <td>札幌市清田区清田一条一丁目2番1号</td>\n", | |
" <td>酒類</td>\n", | |
" <td>スピリッツ</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1834</th>\n", | |
" <td>北海道</td>\n", | |
" <td>札幌南</td>\n", | |
" <td>2020-08-31</td>\n", | |
" <td>2020-04-09</td>\n", | |
" <td>法人番号9430001021794\\n北海道コカ・コーラボトリング株式会社\\n北海道コカ・コ...</td>\n", | |
" <td>札幌市清田区清田一条一丁目2番1号</td>\n", | |
" <td>酒類</td>\n", | |
" <td>リキュール</td>\n", | |
" <td>新規</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>1722 rows × 9 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 都道府県名 税務署名 免許等年月日 ... 免許等区分 品目 処理区分\n", | |
"0 岩手 一関 2014-01-01 ... 酒類 単式蒸留焼酎 新規\n", | |
"1 愛知 名古屋中村 2014-01-08 ... 酒類 ビール 新規\n", | |
"2 愛知 名古屋中村 2014-01-08 ... 酒類 発泡酒 新規\n", | |
"3 福岡 八女 2014-01-08 ... 試験免許 その他の醸造酒 新規\n", | |
"4 熊本 山鹿 2014-01-27 ... 酒類 単式蒸留焼酎 法人成り等\n", | |
"... ... ... ... ... ... ... ...\n", | |
"1830 新潟 十日町 2020-08-31 ... 酒類 発泡酒 新規\n", | |
"1831 東京 神田 2020-08-31 ... 酒類 発泡酒 新規\n", | |
"1832 山梨 甲府 2020-08-31 ... 酒類 単式蒸留焼酎 新規\n", | |
"1833 北海道 札幌南 2020-08-31 ... 酒類 スピリッツ 新規\n", | |
"1834 北海道 札幌南 2020-08-31 ... 酒類 リキュール 新規\n", | |
"\n", | |
"[1722 rows x 9 columns]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 22 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "3HdE6Q2KsVM9", | |
"outputId": "511005b3-95ee-4b17-8a57-2b757106d852" | |
}, | |
"source": [ | |
"df_normalize[\"都道府県名\"].unique()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array(['岩手', '愛知', '福岡', '熊本', '愛媛', '兵庫', '山梨', '東京', '栃木', '京都', '鳥取',\n", | |
" '宮崎', '新潟', '長崎', '和歌山', '大阪', '山口', '徳島', '三重', '鹿児島', '山形', '青森',\n", | |
" '岐阜', '神奈川', '静岡', '沖縄', '茨城', '北海道', '埼玉', '奈良', '長野', '広島', '千葉',\n", | |
" '秋田', '群馬', '福島', '香川', '福井', '高知', '宮城', '石川', '富山', '滋賀', '大分',\n", | |
" '岡山', '島根', '佐賀'], dtype=object)" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 25 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "oCw5T5rYp2OP" | |
}, | |
"source": [ | |
"### 様々な角度でデータを眺める\n", | |
"\n", | |
"酒造免許取得社数\n", | |
"\n", | |
"* 観点\n", | |
" * 品目別\n", | |
" * 処理区分別\n", | |
" * 免許区分別\n", | |
" * 比較\n", | |
"* 分析\n", | |
" * 新規取得が多い品目はどれか\n", | |
" * 新規取得が多い年は何年か\n", | |
" * 申請が多い月は何月か\n", | |
" * 申請にどれぐらいかかっているのか\n", | |
" * どのエリアが取得社数が多いか" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 542 | |
}, | |
"id": "htriwueiWpW8", | |
"outputId": "4e57ec23-4c24-40b0-9aba-062cec8ea894" | |
}, | |
"source": [ | |
"import plotly.express as px\n", | |
"\n", | |
"df_license = df_normalize.copy()\n", | |
"df_license = df_license.groupby([\"都道府県名\"]).count()\n", | |
"df_license = df_license[[\"免許等年月日\"]].rename(columns={\"免許等年月日\": \"件数\"})\n", | |
"df_license = df_license.sort_values(\"件数\", ascending=False)\n", | |
"df_license = df_license.reset_index()\n", | |
"px.bar(df_license, x=\"都道府県名\", y=\"件数\")" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<html>\n", | |
"<head><meta charset=\"utf-8\" /></head>\n", | |
"<body>\n", | |
" <div>\n", | |
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script>\n", | |
" <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n", | |
" <script src=\"https://cdn.plot.ly/plotly-latest.min.js\"></script> \n", | |
" <div id=\"8b4c9303-e3cf-4c0e-ab0d-bd83cee2ad7a\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>\n", | |
" <script type=\"text/javascript\">\n", | |
" \n", | |
" window.PLOTLYENV=window.PLOTLYENV || {};\n", | |
" \n", | |
" if (document.getElementById(\"8b4c9303-e3cf-4c0e-ab0d-bd83cee2ad7a\")) {\n", | |
" Plotly.newPlot(\n", | |
" '8b4c9303-e3cf-4c0e-ab0d-bd83cee2ad7a',\n", | |
" [{\"alignmentgroup\": \"True\", \"hoverlabel\": {\"namelength\": 0}, \"hovertemplate\": \"\\u90fd\\u9053\\u5e9c\\u770c\\u540d=%{x}<br>\\u4ef6\\u6570=%{y}\", \"legendgroup\": \"\", \"marker\": {\"color\": \"#636efa\"}, \"name\": \"\", \"offsetgroup\": \"\", \"orientation\": \"v\", \"showlegend\": false, \"textposition\": \"auto\", \"type\": \"bar\", \"x\": [\"\\u6771\\u4eac\", \"\\u9577\\u91ce\", \"\\u795e\\u5948\\u5ddd\", \"\\u5927\\u962a\", \"\\u4eac\\u90fd\", \"\\u5317\\u6d77\\u9053\", \"\\u65b0\\u6f5f\", \"\\u798f\\u5ca1\", \"\\u6c96\\u7e04\", \"\\u9e7f\\u5150\\u5cf6\", \"\\u9759\\u5ca1\", \"\\u5175\\u5eab\", \"\\u5343\\u8449\", \"\\u798f\\u5cf6\", \"\\u5c71\\u68a8\", \"\\u5c90\\u961c\", \"\\u611b\\u77e5\", \"\\u5ca9\\u624b\", \"\\u9752\\u68ee\", \"\\u5bae\\u57ce\", \"\\u57fc\\u7389\", \"\\u5c71\\u5f62\", \"\\u8328\\u57ce\", \"\\u5e83\\u5cf6\", \"\\u5bae\\u5d0e\", \"\\u718a\\u672c\", \"\\u548c\\u6b4c\\u5c71\", \"\\u9ce5\\u53d6\", \"\\u9ad8\\u77e5\", \"\\u5fb3\\u5cf6\", \"\\u4e09\\u91cd\", \"\\u6803\\u6728\", \"\\u77f3\\u5ddd\", \"\\u5c71\\u53e3\", \"\\u5cf6\\u6839\", \"\\u5948\\u826f\", \"\\u5ca1\\u5c71\", \"\\u79cb\\u7530\", \"\\u6ecb\\u8cc0\", \"\\u9577\\u5d0e\", \"\\u9999\\u5ddd\", \"\\u7fa4\\u99ac\", \"\\u5bcc\\u5c71\", \"\\u5927\\u5206\", \"\\u798f\\u4e95\", \"\\u611b\\u5a9b\", \"\\u4f50\\u8cc0\"], \"xaxis\": \"x\", \"y\": [133, 95, 83, 83, 76, 70, 61, 55, 54, 50, 49, 47, 42, 42, 41, 40, 40, 39, 38, 36, 36, 36, 34, 34, 32, 29, 27, 25, 24, 23, 22, 22, 21, 20, 19, 19, 18, 14, 12, 12, 12, 11, 11, 11, 10, 10, 4], \"yaxis\": \"y\"}],\n", | |
" {\"barmode\": \"relative\", \"legend\": {\"tracegroupgap\": 0}, \"margin\": {\"t\": 60}, \"template\": {\"data\": {\"bar\": [{\"error_x\": {\"color\": \"#2a3f5f\"}, \"error_y\": {\"color\": \"#2a3f5f\"}, \"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"bar\"}], \"barpolar\": [{\"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"barpolar\"}], \"carpet\": [{\"aaxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"baxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"type\": \"carpet\"}], \"choropleth\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"choropleth\"}], \"contour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"contour\"}], \"contourcarpet\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"contourcarpet\"}], \"heatmap\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmap\"}], \"heatmapgl\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmapgl\"}], \"histogram\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"histogram\"}], \"histogram2d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2d\"}], \"histogram2dcontour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2dcontour\"}], \"mesh3d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"mesh3d\"}], \"parcoords\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"parcoords\"}], \"pie\": [{\"automargin\": true, \"type\": \"pie\"}], \"scatter\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter\"}], \"scatter3d\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter3d\"}], \"scattercarpet\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattercarpet\"}], \"scattergeo\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergeo\"}], \"scattergl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergl\"}], \"scattermapbox\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattermapbox\"}], \"scatterpolar\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolar\"}], \"scatterpolargl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolargl\"}], \"scatterternary\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterternary\"}], \"surface\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"surface\"}], \"table\": [{\"cells\": {\"fill\": {\"color\": \"#EBF0F8\"}, \"line\": {\"color\": \"white\"}}, \"header\": {\"fill\": {\"color\": \"#C8D4E3\"}, \"line\": {\"color\": \"white\"}}, \"type\": \"table\"}]}, \"layout\": {\"annotationdefaults\": {\"arrowcolor\": \"#2a3f5f\", \"arrowhead\": 0, \"arrowwidth\": 1}, \"coloraxis\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"colorscale\": {\"diverging\": [[0, \"#8e0152\"], [0.1, \"#c51b7d\"], [0.2, \"#de77ae\"], [0.3, \"#f1b6da\"], [0.4, \"#fde0ef\"], [0.5, \"#f7f7f7\"], [0.6, \"#e6f5d0\"], [0.7, \"#b8e186\"], [0.8, \"#7fbc41\"], [0.9, \"#4d9221\"], [1, \"#276419\"]], \"sequential\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"sequentialminus\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]]}, \"colorway\": [\"#636efa\", \"#EF553B\", \"#00cc96\", \"#ab63fa\", \"#FFA15A\", \"#19d3f3\", \"#FF6692\", \"#B6E880\", \"#FF97FF\", \"#FECB52\"], \"font\": {\"color\": \"#2a3f5f\"}, \"geo\": {\"bgcolor\": \"white\", \"lakecolor\": \"white\", \"landcolor\": \"#E5ECF6\", \"showlakes\": true, \"showland\": true, \"subunitcolor\": \"white\"}, \"hoverlabel\": {\"align\": \"left\"}, \"hovermode\": \"closest\", \"mapbox\": {\"style\": \"light\"}, \"paper_bgcolor\": \"white\", \"plot_bgcolor\": \"#E5ECF6\", \"polar\": {\"angularaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"radialaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"scene\": {\"xaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"yaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"zaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}}, \"shapedefaults\": {\"line\": {\"color\": \"#2a3f5f\"}}, \"ternary\": {\"aaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"baxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"caxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"title\": {\"x\": 0.05}, \"xaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}, \"yaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}}}, \"xaxis\": {\"anchor\": \"y\", \"domain\": [0.0, 1.0], \"title\": {\"text\": \"\\u90fd\\u9053\\u5e9c\\u770c\\u540d\"}}, \"yaxis\": {\"anchor\": \"x\", \"domain\": [0.0, 1.0], \"title\": {\"text\": \"\\u4ef6\\u6570\"}}},\n", | |
" {\"responsive\": true}\n", | |
" ).then(function(){\n", | |
" \n", | |
"var gd = document.getElementById('8b4c9303-e3cf-4c0e-ab0d-bd83cee2ad7a');\n", | |
"var x = new MutationObserver(function (mutations, observer) {{\n", | |
" var display = window.getComputedStyle(gd).display;\n", | |
" if (!display || display === 'none') {{\n", | |
" console.log([gd, 'removed!']);\n", | |
" Plotly.purge(gd);\n", | |
" observer.disconnect();\n", | |
" }}\n", | |
"}});\n", | |
"\n", | |
"// Listen for the removal of the full notebook cells\n", | |
"var notebookContainer = gd.closest('#notebook-container');\n", | |
"if (notebookContainer) {{\n", | |
" x.observe(notebookContainer, {childList: true});\n", | |
"}}\n", | |
"\n", | |
"// Listen for the clearing of the current output cell\n", | |
"var outputEl = gd.closest('.output');\n", | |
"if (outputEl) {{\n", | |
" x.observe(outputEl, {childList: true});\n", | |
"}}\n", | |
"\n", | |
" })\n", | |
" };\n", | |
" \n", | |
" </script>\n", | |
" </div>\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 300 | |
}, | |
"id": "CxJj4d8GMXha", | |
"outputId": "f3e10c82-bac3-484c-8cbf-b9357bcb23fd" | |
}, | |
"source": [ | |
"df_license = df_normalize.copy()\n", | |
"df_license[\"取得日数\"] = (df_license[\"免許等年月日\"] - df_license[\"申請等年月日\"]).dt.days\n", | |
"df_license.describe()" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>取得日数</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>1722.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>106.144599</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>271.564423</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>-10769.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>63.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>95.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>150.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>493.000000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 取得日数\n", | |
"count 1722.000000\n", | |
"mean 106.144599\n", | |
"std 271.564423\n", | |
"min -10769.000000\n", | |
"25% 63.000000\n", | |
"50% 95.000000\n", | |
"75% 150.000000\n", | |
"max 493.000000" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 32 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 542 | |
}, | |
"id": "ysr0ztMyPIkF", | |
"outputId": "1ed40862-d881-435f-9a4f-4fc3cc25d1c2" | |
}, | |
"source": [ | |
"import plotly.express as px\n", | |
"\n", | |
"px.box(df_license[\n", | |
" (df_license[\"取得日数\"] <= 365) & \n", | |
" (df_license[\"取得日数\"] > 0)\n", | |
"], y=\"取得日数\", points=\"all\")" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<html>\n", | |
"<head><meta charset=\"utf-8\" /></head>\n", | |
"<body>\n", | |
" <div>\n", | |
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script>\n", | |
" <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n", | |
" <script src=\"https://cdn.plot.ly/plotly-latest.min.js\"></script> \n", | |
" <div id=\"f709506e-5f98-4ecf-9cbc-1d4306d7042a\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>\n", | |
" <script type=\"text/javascript\">\n", | |
" \n", | |
" window.PLOTLYENV=window.PLOTLYENV || {};\n", | |
" \n", | |
" if (document.getElementById(\"f709506e-5f98-4ecf-9cbc-1d4306d7042a\")) {\n", | |
" Plotly.newPlot(\n", | |
" 'f709506e-5f98-4ecf-9cbc-1d4306d7042a',\n", | |
" [{\"alignmentgroup\": \"True\", \"boxpoints\": \"all\", \"hoverlabel\": {\"namelength\": 0}, \"hovertemplate\": \"\\u53d6\\u5f97\\u65e5\\u6570=%{y}\", \"legendgroup\": \"\", \"marker\": {\"color\": \"#636efa\"}, \"name\": \"\", \"notched\": false, \"offsetgroup\": \"\", \"orientation\": \"v\", \"showlegend\": false, \"type\": \"box\", \"x0\": \" \", \"xaxis\": \"x\", \"y\": [128, 201, 201, 33, 137, 155, 72, 89, 154, 120, 177, 94, 39, 188, 65, 116, 98, 98, 67, 67, 55, 42, 48, 209, 196, 55, 166, 8, 167, 116, 7, 7, 7, 63, 63, 90, 90, 90, 90, 90, 90, 77, 40, 160, 157, 106, 79, 104, 51, 51, 30, 30, 66, 19, 19, 110, 179, 127, 36, 68, 175, 57, 174, 120, 42, 42, 42, 125, 232, 98, 41, 45, 45, 30, 30, 34, 176, 125, 125, 188, 31, 46, 26, 186, 79, 79, 79, 66, 57, 48, 140, 81, 80, 156, 142, 147, 66, 87, 162, 96, 96, 96, 96, 96, 96, 96, 121, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 70, 58, 58, 66, 66, 66, 66, 66, 66, 66, 66, 58, 58, 208, 170, 15, 15, 15, 15, 15, 15, 60, 42, 37, 27, 125, 62, 91, 169, 71, 70, 70, 43, 176, 81, 120, 120, 142, 52, 158, 145, 56, 56, 56, 56, 56, 56, 56, 223, 115, 178, 75, 75, 93, 83, 83, 83, 157, 48, 151, 45, 45, 45, 45, 45, 45, 81, 122, 116, 87, 71, 153, 137, 58, 190, 142, 142, 190, 154, 159, 107, 224, 146, 52, 128, 56, 110, 56, 56, 76, 76, 130, 197, 161, 126, 121, 121, 121, 121, 121, 121, 110, 82, 62, 62, 54, 50, 40, 65, 54, 39, 155, 111, 121, 192, 199, 60, 81, 81, 58, 52, 144, 111, 63, 63, 63, 63, 63, 63, 118, 103, 108, 43, 92, 92, 182, 182, 182, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 67, 67, 67, 67, 211, 91, 59, 125, 47, 115, 21, 103, 152, 112, 133, 42, 42, 28, 63, 144, 147, 43, 53, 140, 76, 17, 124, 282, 38, 149, 126, 126, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 7, 151, 34, 134, 92, 92, 70, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 111, 57, 57, 147, 241, 60, 45, 109, 109, 74, 153, 111, 62, 62, 62, 62, 63, 146, 182, 165, 97, 80, 23, 100, 265, 265, 160, 33, 33, 33, 178, 56, 186, 148, 148, 106, 71, 71, 186, 108, 207, 21, 128, 58, 64, 64, 193, 55, 165, 165, 271, 118, 281, 150, 111, 74, 35, 136, 136, 116, 153, 147, 126, 159, 301, 37, 266, 141, 56, 59, 219, 226, 130, 130, 130, 130, 130, 130, 70, 70, 70, 70, 70, 70, 70, 70, 70, 109, 128, 24, 153, 165, 83, 77, 54, 192, 181, 189, 147, 81, 149, 195, 69, 26, 21, 58, 58, 58, 58, 70, 77, 161, 113, 345, 88, 49, 204, 133, 100, 267, 126, 126, 126, 84, 84, 77, 64, 63, 63, 44, 74, 60, 125, 18, 18, 18, 18, 18, 18, 185, 115, 130, 63, 60, 21, 79, 361, 151, 71, 24, 133, 100, 72, 171, 118, 85, 76, 161, 16, 91, 142, 122, 94, 94, 297, 109, 92, 119, 28, 167, 138, 14, 118, 193, 193, 151, 143, 96, 56, 180, 111, 178, 131, 56, 50, 184, 104, 55, 93, 55, 250, 183, 80, 80, 80, 80, 80, 171, 143, 182, 92, 356, 49, 222, 36, 212, 187, 159, 120, 110, 197, 98, 64, 64, 64, 64, 64, 64, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 81, 174, 76, 176, 162, 56, 118, 75, 75, 75, 75, 75, 75, 189, 161, 161, 85, 85, 34, 34, 34, 175, 211, 74, 74, 133, 131, 131, 123, 123, 102, 102, 72, 72, 153, 55, 166, 119, 64, 50, 50, 123, 123, 149, 70, 160, 185, 95, 161, 127, 94, 336, 55, 115, 115, 168, 8, 15, 145, 57, 57, 146, 61, 87, 73, 26, 26, 206, 148, 148, 148, 148, 148, 154, 159, 192, 245, 101, 59, 44, 131, 64, 64, 61, 46, 153, 153, 339, 138, 174, 161, 77, 124, 89, 250, 168, 168, 55, 170, 28, 57, 57, 57, 57, 57, 57, 57, 174, 106, 106, 52, 150, 185, 182, 154, 125, 100, 204, 72, 309, 133, 23, 23, 23, 23, 23, 23, 23, 23, 23, 45, 71, 213, 127, 37, 52, 52, 122, 122, 107, 203, 142, 132, 122, 170, 162, 67, 358, 157, 101, 73, 62, 62, 62, 19, 121, 65, 44, 166, 198, 126, 140, 149, 49, 154, 57, 57, 57, 110, 110, 110, 110, 110, 110, 172, 218, 157, 84, 79, 117, 88, 150, 58, 144, 110, 36, 167, 146, 87, 112, 43, 93, 245, 74, 98, 117, 72, 25, 169, 107, 149, 144, 35, 35, 35, 35, 35, 170, 205, 234, 269, 58, 261, 261, 166, 212, 120, 120, 65, 65, 168, 42, 42, 253, 64, 169, 16, 96, 45, 221, 54, 211, 83, 53, 138, 126, 32, 32, 32, 160, 174, 163, 86, 276, 101, 93, 45, 46, 193, 97, 54, 38, 161, 150, 192, 192, 325, 84, 84, 168, 182, 48, 244, 61, 61, 61, 122, 81, 205, 213, 192, 164, 182, 182, 96, 86, 108, 335, 130, 61, 41, 282, 119, 189, 189, 50, 143, 321, 217, 38, 170, 108, 160, 237, 57, 168, 112, 84, 126, 56, 36, 112, 236, 145, 158, 151, 151, 92, 180, 128, 89, 155, 203, 56, 56, 56, 138, 113, 183, 215, 44, 119, 69, 164, 119, 158, 178, 149, 161, 152, 140, 90, 105, 140, 104, 139, 153, 147, 230, 230, 174, 137, 175, 189, 185, 151, 146, 159, 153, 140, 125, 116, 152, 137, 67, 162, 153, 131, 180, 167, 141, 155, 118, 127, 156, 149, 119, 150, 122, 121, 151, 205, 112, 112, 112, 82, 51, 156, 46, 120, 57, 58, 132, 46, 63, 48, 154, 118, 64, 64, 72, 146, 146, 146, 77, 117, 107, 84, 200, 91, 40, 119, 170, 175, 332, 109, 55, 18, 91, 76, 76, 76, 76, 76, 304, 304, 105, 69, 131, 131, 49, 138, 12, 104, 134, 90, 191, 115, 115, 115, 115, 115, 73, 73, 75, 73, 72, 115, 124, 62, 62, 128, 79, 43, 42, 112, 112, 96, 97, 103, 282, 56, 161, 242, 50, 167, 177, 24, 38, 38, 38, 38, 38, 38, 152, 124, 121, 141, 82, 82, 82, 188, 127, 210, 163, 51, 169, 27, 139, 140, 76, 177, 217, 20, 209, 108, 70, 58, 87, 87, 121, 36, 36, 70, 230, 310, 83, 168, 49, 183, 146, 98, 82, 70, 70, 91, 91, 78, 126, 228, 228, 126, 101, 182, 202, 228, 286, 339, 140, 229, 282, 181, 100, 138, 138, 277, 162, 110, 62, 57, 57, 53, 189, 162, 60, 65, 170, 148, 150, 161, 63, 76, 70, 82, 82, 203, 183, 70, 257, 139, 37, 188, 254, 143, 267, 146, 69, 69, 212, 236, 92, 49, 43, 138, 165, 56, 73, 265, 64, 75, 162, 262, 65, 151, 22, 77, 126, 51, 131, 131, 69, 49, 79, 79, 57, 160, 66, 66, 120, 148, 283, 142, 163, 226, 344, 344, 232, 226, 127, 105, 105, 105, 105, 143, 122, 151, 80, 105, 126, 126, 105, 42, 105, 56, 105, 56, 42, 42, 105, 56, 105, 105, 56, 42, 56, 105, 56, 105, 56, 300, 291, 106, 106, 245, 124, 50, 264, 56, 78, 134, 36, 30, 30, 58, 44, 210, 167, 69, 188, 162, 254, 69, 69, 69, 69, 69, 69, 69, 69, 97, 164, 91, 104, 104, 154, 61, 322, 175, 175, 175, 175, 175, 175, 175, 175, 89, 50, 140, 140, 118, 118, 69, 66, 66, 126, 228, 64, 64, 64, 78, 283, 15, 141, 64, 158, 147, 56, 149, 148, 203, 228, 98, 107, 114, 143, 93, 84, 252, 28, 28, 50, 70, 137, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 55, 49, 133, 190, 84, 84, 57, 132, 57, 136, 153, 255, 88, 88, 88, 88, 88, 174, 46, 62, 84, 32, 32, 32, 102, 203, 235, 235, 155, 43, 115, 115, 157, 60, 60, 66, 137, 148, 150, 94, 156, 151, 63, 168, 84, 68, 119, 163, 163, 163, 87, 226, 276, 299, 141, 84, 84, 198, 206, 235, 130, 130, 144, 102, 102, 102, 102, 102, 102, 81, 58, 181, 112, 150, 77, 56, 21, 217, 217, 178, 45, 65, 62, 62, 80, 80, 43, 159, 233, 87, 87, 58, 73, 105, 182, 148, 200, 51, 39, 119, 119, 178, 152, 152, 49, 49, 49, 49, 49, 49, 92, 42, 114, 84, 140, 155, 217, 75, 75, 75, 127, 177, 47, 47, 351, 122, 59, 177, 91, 123, 124, 124, 124, 124, 124, 103, 319, 131, 196, 70, 128, 60, 60, 60, 160, 80, 70, 85, 51, 193, 39, 89, 92, 113, 240, 240, 15, 15, 15, 240, 122, 122, 117, 93, 219, 95, 7, 264, 244, 187, 64, 64, 44, 203, 72, 17, 37, 47, 47, 112, 117, 275, 23, 246, 143, 47, 99, 99, 113, 147, 98, 98, 98, 98, 98, 201, 83, 218, 178, 269, 50, 167, 24, 24, 24, 58, 179, 179, 158, 158, 158, 179, 70, 70, 14, 4, 6, 134, 213, 134, 60, 35, 11, 19, 19, 11, 5, 18, 12, 5, 3, 7, 11, 123, 88, 88, 154, 4, 159, 214, 214, 214, 126, 11, 79, 266, 97, 121, 154, 132, 55, 26, 6, 223, 35, 70, 70, 70, 5, 32, 78, 52, 10, 48, 181, 68, 80, 323, 181, 22, 53, 57, 90, 153, 7, 7, 7, 7, 7, 7, 83, 33, 83, 129, 125, 125, 125, 125, 125, 44, 147, 70, 70, 117, 117, 117, 117, 112, 55, 16, 223, 112, 55, 43, 111, 117, 138, 70, 112, 117, 112, 36, 61, 83, 30, 254, 280, 291, 238, 56, 238, 291, 238, 291, 71, 46, 46, 82, 174, 308, 34, 73, 61, 112, 61, 26, 221, 95, 95, 95, 115, 95, 95, 95, 95, 61, 81, 188, 54, 210, 210, 162, 56, 91, 80, 64, 64, 64, 85, 44, 196, 49, 315, 176, 108, 108, 49, 254, 79, 56, 169, 135, 128, 188, 259, 66, 144, 144], \"y0\": \" \", \"yaxis\": \"y\"}],\n", | |
" {\"boxmode\": \"group\", \"legend\": {\"tracegroupgap\": 0}, \"margin\": {\"t\": 60}, \"template\": {\"data\": {\"bar\": [{\"error_x\": {\"color\": \"#2a3f5f\"}, \"error_y\": {\"color\": \"#2a3f5f\"}, \"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"bar\"}], \"barpolar\": [{\"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"barpolar\"}], \"carpet\": [{\"aaxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"baxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"type\": \"carpet\"}], \"choropleth\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"choropleth\"}], \"contour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"contour\"}], \"contourcarpet\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"contourcarpet\"}], \"heatmap\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmap\"}], \"heatmapgl\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmapgl\"}], \"histogram\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"histogram\"}], \"histogram2d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2d\"}], \"histogram2dcontour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2dcontour\"}], \"mesh3d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"mesh3d\"}], \"parcoords\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"parcoords\"}], \"pie\": [{\"automargin\": true, \"type\": \"pie\"}], \"scatter\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter\"}], \"scatter3d\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter3d\"}], \"scattercarpet\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattercarpet\"}], \"scattergeo\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergeo\"}], \"scattergl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergl\"}], \"scattermapbox\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattermapbox\"}], \"scatterpolar\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolar\"}], \"scatterpolargl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolargl\"}], \"scatterternary\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterternary\"}], \"surface\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"surface\"}], \"table\": [{\"cells\": {\"fill\": {\"color\": \"#EBF0F8\"}, \"line\": {\"color\": \"white\"}}, \"header\": {\"fill\": {\"color\": \"#C8D4E3\"}, \"line\": {\"color\": \"white\"}}, \"type\": \"table\"}]}, \"layout\": {\"annotationdefaults\": {\"arrowcolor\": \"#2a3f5f\", \"arrowhead\": 0, \"arrowwidth\": 1}, \"coloraxis\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"colorscale\": {\"diverging\": [[0, \"#8e0152\"], [0.1, \"#c51b7d\"], [0.2, \"#de77ae\"], [0.3, \"#f1b6da\"], [0.4, \"#fde0ef\"], [0.5, \"#f7f7f7\"], [0.6, \"#e6f5d0\"], [0.7, \"#b8e186\"], [0.8, \"#7fbc41\"], [0.9, \"#4d9221\"], [1, \"#276419\"]], \"sequential\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"sequentialminus\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]]}, \"colorway\": [\"#636efa\", \"#EF553B\", \"#00cc96\", \"#ab63fa\", \"#FFA15A\", \"#19d3f3\", \"#FF6692\", \"#B6E880\", \"#FF97FF\", \"#FECB52\"], \"font\": {\"color\": \"#2a3f5f\"}, \"geo\": {\"bgcolor\": \"white\", \"lakecolor\": \"white\", \"landcolor\": \"#E5ECF6\", \"showlakes\": true, \"showland\": true, \"subunitcolor\": \"white\"}, \"hoverlabel\": {\"align\": \"left\"}, \"hovermode\": \"closest\", \"mapbox\": {\"style\": \"light\"}, \"paper_bgcolor\": \"white\", \"plot_bgcolor\": \"#E5ECF6\", \"polar\": {\"angularaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"radialaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"scene\": {\"xaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"yaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"zaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}}, \"shapedefaults\": {\"line\": {\"color\": \"#2a3f5f\"}}, \"ternary\": {\"aaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"baxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"caxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"title\": {\"x\": 0.05}, \"xaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}, \"yaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}}}, \"xaxis\": {\"anchor\": \"y\", \"domain\": [0.0, 1.0]}, \"yaxis\": {\"anchor\": \"x\", \"domain\": [0.0, 1.0], \"title\": {\"text\": \"\\u53d6\\u5f97\\u65e5\\u6570\"}}},\n", | |
" {\"responsive\": true}\n", | |
" ).then(function(){\n", | |
" \n", | |
"var gd = document.getElementById('f709506e-5f98-4ecf-9cbc-1d4306d7042a');\n", | |
"var x = new MutationObserver(function (mutations, observer) {{\n", | |
" var display = window.getComputedStyle(gd).display;\n", | |
" if (!display || display === 'none') {{\n", | |
" console.log([gd, 'removed!']);\n", | |
" Plotly.purge(gd);\n", | |
" observer.disconnect();\n", | |
" }}\n", | |
"}});\n", | |
"\n", | |
"// Listen for the removal of the full notebook cells\n", | |
"var notebookContainer = gd.closest('#notebook-container');\n", | |
"if (notebookContainer) {{\n", | |
" x.observe(notebookContainer, {childList: true});\n", | |
"}}\n", | |
"\n", | |
"// Listen for the clearing of the current output cell\n", | |
"var outputEl = gd.closest('.output');\n", | |
"if (outputEl) {{\n", | |
" x.observe(outputEl, {childList: true});\n", | |
"}}\n", | |
"\n", | |
" })\n", | |
" };\n", | |
" \n", | |
" </script>\n", | |
" </div>\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "ejF77fDjcFp9" | |
}, | |
"source": [ | |
"## まとめ\n", | |
"\n", | |
"高専だとプログラミングの基礎で結構な時間を費やすと思いますが、その部分は高専の授業に譲って、ここでは実践的で、しかも面白いと思える授業を目指しています。クローラーを書ければ、高専のニュースなどクローリングしてボットにすることもできるだろうし、少しだけプログラミングが面白くなるかな、などと考えて授業構成を作りました。\n", | |
"\n", | |
"内容もちょっとずつアップデートしています。去年はフラーのニュースサイトからデータを取得するだけでしたが、今年は外部データを可視化するところまでいけました。\n", | |
"\n", | |
"今後も、技術のトレンドや自分の趣味に応じて、授業をバージョンアップしていければと思います。" | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment