Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
basic-data-analysis.ipynb
{
"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 + '&gtm_auth=_ZgIb2eTMTwaqb2s0D_nZw&gtm_preview=env-15&gtm_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&amp;gtm_auth=_ZgIb2eTMTwaqb2s0D_nZw&amp;gtm_preview=env-15&amp;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": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAE1CAYAAAAVuwDjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAYbElEQVR4nO3df7DddX3n8eeLBEkQCgoX4xIhbrdbYbXF5QooajOKiMVWXBwWtQuRcSPV0c66DotW6ii7SEftFseZShyR0rKyKEVQ8QcoEbr8yIYfq1gBVwWbbkgvWOOyEAPy3j/OiZ5cbnLPTb43J+fD8zGTOef7/Xzv977zzuR1v/dzvj9SVUiSxtseoy5AkrTzDHNJaoBhLkkNMMwlqQGGuSQ1wDCXpAYsHNU3PvDAA2vZsmWj+vaSNHZuu+22B6tqYqaxkYX5smXLWLt27ai+vSSNnST3b2vMaRZJaoBhLkkNMMwlqQEjmzOXpNk89thjrFu3jk2bNo26lF1q0aJFLF26lD333HPorzHMJe221q1bx7777suyZctIMupydomq4qGHHmLdunU897nPHfrr5jTNkuScJKtnWP+uJGuS3JnkPXPZpyRty6ZNmzjggAOeMkEOkIQDDjhgzr+NDH1knmQSeNKPiSTHAm8EXtpf9c0kq6vK8w4l7bSnUpBvsSN/56HCPMli4L8CJwOXTxt+LfCZqtrc3/Yi4HWAYS6pU8vO/nKn+7vv/BM73d9cbdy4kR//+Me84AUv2Ol9DXtk/hHggqr6xxl+YhwA3DywvB44eqadJFkJrAQ45JBD5lapdqmu/9PMl1H/Z5R2xpVXXsl9993XSZjPOmee5NXAM6rq89vYZANw0MDykv66J6mqVVU1WVWTExMzXpEqSbud8847j6OPPpojjzySVatW8YMf/IDjjz+e5cuXc9xxx3HPPfcAsHz5cu6++24ArrvuOlasWAHAihUreO9738vxxx/P4YcfzrXXXsujjz7K+eefz8UXX8ypp5660zUO8wHoa4GJJF9I8gXg+UkuGRi/CjgtyZ5JFgCnA1fvdGWStBv4xje+werVq7npppu49dZbeeKJJ3jLW97COeecw+rVqznvvPN+Gdrb88gjj/D1r3+dCy+8kE984hMsXryYs88+mxUrVnDZZZftdJ2zhnlVvbOqjq+qk6rqJOCuqjotyeokS/ofdF4NrAFuAb7oh5+SWnHHHXfw6le/mgULFrBw4ULOPPNMvv/97/Oyl70MgKOOOor777+f2Z6n/JrXvAaAZz/72WzcuLHzOud8BWhVLd/yWlUP9N9/tKpeWFUvqqqPdVyjJI3MC1/4Qr72ta/x+OOPA3DRRRexbNky1qxZA8Btt93GwQcfTBL2228/NmzozTJ/4QtfmHXfSdi8eXMndXrRkCRtxytf+UpuvfVWjjnmGPbYYw/e8IY3cMkll/COd7yDxx57jD322INLLunNPL/73e/mne98J0uWLGFycpKHH354u/s+8sgj+eAHP8jU1BSf+tSndqrOzParwXyZnJwsb4G7+/JsFu0Ovve973HYYYeNuoyRmOnvnuS2qpqcaXtvtCVJDTDMJakBhrkkNcAwl7RbG9XneqO0I39nw1zSbmvRokU89NBDT6lA33IL3EWLFs3p6zw1UdJua+nSpaxbt46pqalRl7JLbXk4xVwY5pJ2W3vuueecHtDwVOY0iyQ1wDCXpAYY5pLUAMNckhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNWCoK0CTnAWcBCwG7gDOrKrNA+MXA88DNvVX/VlV+VBnSdpFZg3zJAcC+wHHVlUluQx4HfC5gc0OAZZX1aaZ9iFJml+zTrNU1YNV9cf9IN8H+DXgrmmb7Q98MskNST6RZO/5KFaSNLOh58yTXAr8CLgeuHva8FrgnKp6OTAFnLONfaxMsjbJ2qfaXdAkaT4NHeZV9WbgUOAY4PRpYyur6u/7i58DjtrGPlZV1WRVTU5MTOxgyZKk6WYN8yRHJDkdoKoeAe6lN62yZXxxknOTPK2/6jXA7fNRrCRpZsMcmd8DvKQ/PXIjsAz4VJLLkhxRVY8CDwJrknwLOBL40LxVLEl6klnPZumH9dtmGDp1YJsLgAs6rEuSNAdeNCRJDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgMMc0lqgGEuSQ0wzCWpAYa5JDXAMJekBhjmktQAw1ySGmCYS1IDDHNJaoBhLkkNMMwlqQFDhXmSs5LclOSOJBcNPLx5y/gpSdYkuS3Jx+anVEnStswa5kkOBPYDjq2qFwJ7A68bGD8UOBd4FTAJLE1y8vyUK0mayaxhXlUPVtUfV1Ul2Qf4NeCugU1OAK6oqo1VVcCFwEnzU64kaSZDz5knuRT4EXA9cPfA0AHAAwPL64GDtrGPlUnWJlk7NTW1A+VKkmYydJhX1ZuBQ4FjgNMHhjawdXgv6a+baR+rqmqyqiYnJiZ2oFxJ0kyGmTM/IsnpAFX1CHAvsP/AJtcAr0+yb3/5DOCqrguVJG3bMEfm9wAv6U+P3AgsAz6V5LIkR1TVeuA84IYktwIbquqK+StZkjTdwtk2qKpHgbfNMHTqwDaXApd2WJckaQ68aEiSGmCYS1IDDHNJaoBhLkkNMMwlqQGGuSQ1wDCXpAYY5pLUAMNckhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgNmfWwcQJJTgP8APA6sB1b0H+68ZXz1tC85q6rWdFWkJGn7Zg3zJM8EzgJeVlWPJvkI8Fbg4wOb7VVVL56nGiVJs5h1mqWqfgK8tP9gZ+j9ANjyniQLgf2TXJ7khiTnJlkwP+VKkmYy1Jx5VW1KsijJBcBi4KKB4X2A1cBKYDnwbHpH7k+SZGWStUnWTk1N7UzdkqQBQ4V5kqXAlcBXq+rMqvrFlrGq+mlV/WH/9Qngb4CjZtpPVa2qqsmqmpyYmOiifkkSQ4R5kkXAxcDKqvrKDONLkrwvSfqrTgBu77RKSdJ2DXM2y3HAYcBf/Sqv+SbwCuBUYAO9qZbbkzwM3Ams6r5USdK2zBrmVfUl4OAZhj408P59/T+SpBHwoiFJaoBhLkkNMMwlqQGGuSQ1wDCXpAYY5pLUAMNckhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgMMc0lqgGEuSQ0YKsyTnJLk5iQ3Jrk8yd7Txt+VZE2SO5O8Z35KlSRty6xhnuSZwFnAK6rqZcD9wFsHxo8F3gi8FDgKOCnJ5PyUK0mayaxhXlU/AV5aVY/2Vy0EHh3Y5LXAZ6pqc1VtBi4CXtd5pZKkbVo4zEZVtSnJIuBPgb3oBfYWBwA3DyyvB46eaT9JVgIrAQ455JAdqVcaS8vO/vKoSxjKfeefOOoShjIO/dzVvRx2znwpcCXw1ao6s6p+MTC8AThoYHlJf92TVNWqqpqsqsmJiYkdrVmSNM0wc+aLgIuBlVX1lRk2uQo4LcmeSRYApwNXd1qlJGm7hplmOQ44DPirJFvWfRN4BXBqVa1NcjWwBngcuKyq1s5HsZKkmc0a5lX1JeDgGYY+NLDNR4GPdliXJGkOvGhIkhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgMMc0lqgGEuSQ0wzCWpAYa5JDXAMJekBhjmktQAw1ySGjDMM0DfkOTyJD/exvjFSW5Jsrr/5/e7L1OStD3DPAN0Cng7cNc2xg8BllfVps6qkiTNyaxH5lX1rap6cDub7A98MskNST6RZO/uypMkDaOLOfO1wDlV9XJ6R/HnbGvDJCuTrE2ydmpqqoNvLUmCDsK8qlZW1d/3Fz8HHLWdbVdV1WRVTU5MTOzst5Yk9e1UmCdZnOTcJE/rr3oNcPvOlyVJmosdCvMklyU5oqoeBR4E1iT5FnAk8KEuC5QkzW6Ys1kAqKolA+9PHXh/AXBBx3VJkubAi4YkqQGGuSQ1wDCXpAYY5pLUAMNckhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgMMc0lqgGEuSQ0wzCWpAYa5JDVg1jBP8oYklyf58TbGT0myJsltST7WfYmSpNkMc2Q+BbwdeNr0gSSHAucCrwImgaVJTu60QknSrGYN86r6VlU9uI3hE4ArqmpjVRVwIXBSlwVKkma3cCe//gDggYHl9cBB29o4yUpgJcAhhxyyk9/6yZad/eXO99m1+84/cdQlSGrQzn4AuoGtw3tJf92MqmpVVU1W1eTExMROfmtJ0hY7G+bXAK9Psm9/+Qzgqp3cpyRpjnYozJNcluSIqloPnAfckORWYENVXdFphZKkWQ09Z15VSwbenzrw/lLg0o7rkiTNgRcNSVIDDHNJaoBhLkkNMMwlqQGGuSQ1wDCXpAYY5pLUAMNckhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgMMc0lqwFCPjUtyCvAeYAGwuqr+47Tx1dO+5KyqWtNJhZKkWc0a5kkOBc4FjgJ+BlyW5ORpD27eq6pePE81SpJmMcw0ywnAFVW1saoKuBA4actgkoXA/kkuT3JDknOTLJineiVJMxgmzA8AHhhYXg8cNLC8D7AaWAksB54NvHWmHSVZmWRtkrVTU1M7Uq8kaQbDhPkGtg7vJf11AFTVT6vqD/uvTwB/Q29K5kmqalVVTVbV5MTExM7ULUkaMEyYXwO8Psm+/eUzgKu2DCZZkuR9SdJfdQJwe7dlSpK2Z9Ywr6r1wHnADUluBTZU1RVJVifZcpS+D3B7khuBAKvms2hJ0taGOjWxqi4FLp22bvnA4vv6fyRJI+BFQ5LUAMNckhpgmEtSAwxzSWqAYS5JDTDMJakBhrkkNcAwl6QGGOaS1ADDXJIaYJhLUgMMc0lqgGEuSQ0wzCWpAYa5JDXAMJekBhjmktQAw1ySGjBUmCc5JcmaJLcl+dgM4+/qj9+Z5D3dlylJ2p5ZwzzJocC5wKuASWBpkpMHxo8F3gi8FDgKOCnJ5PyUK0mayTBH5icAV1TVxqoq4ELgpIHx1wKfqarNVbUZuAh4XfelSpK2ZeEQ2xwAPDCwvB44aNr4zdPGj55pR0lWAiv7iw8nuWf4UkfiQODBLneYP+1yb2PHfnbLfnar037OUy8P3dbAMGG+AXjuwPKS/rrB8YO2M/5LVbUKWDXE99wtJFlbVU4ZdcR+dst+dmvc+znMNMs1wOuT7NtfPgO4amD8KuC0JHsmWQCcDlzdbZmSpO2ZNcyraj1wHnBDkluBDVV1RZLVSZZU1Vp64b0GuAX4Yn+dJGkXSe8zTc0kycr+1JA6YD+7ZT+7Ne79NMwlqQFeASpJDTDMJakBhrkkNcAwl6QGGOaS1IBhrgB9Skhy2iyb/KiqbtwlxTQgyZ/Mssn/rqr/tkuKGXP2sltJLpplk3ur6vxdUkyHPDL/lfcAv+i/Pj7t/RP0biCm4Z0IfIPejdiu678/sf/+euCc0ZU2duxlt36dXs/+BfB+4E8G3n+A3l1gx45H5r/yQFVdmmTFlqOcae//aLTljZ2NVfU/kmysqpsAkvxs4P0joy1vrNjLbv28qv4hyc+r6v8ATHv/i9GWt2M8Mt++wSuq/mJkVbRjsJ/vG1kVbbCX3Rrs5+kjq2InGOZPNuMlsVXlNMuO2VY/v7arC2mAvezWtvr5nV1dSBe8nL8vyT8AXwNe3X8t4Dh6t+y9qaquH2F5YyfJT4A7gSP6rwU8n95N2W4CPltVm0ZX4fiwl91K8nf0ntGwpP+6gN5tvu+h189P9m8wOFYM877+4/EGLQT2AX4D+DfAPweOq6qHd3VtLejfHnmwn78PHGM/585ezo8kB9Lr55nAy8etn4b5kJIsq6r7Rl1HK5I8var+36jraIG9FBjm0lhJspDeoxofrKqxPOtC88MPQAckOTzJl5J8IMneSa5N8sMkrxh1beMoyaIkH0xyS5K7klyT5A9GXdc4SvKcJFfTm9e9Crg3yVVJnjPi0rSb8Mh8QJLVwJ8BewGvA87uv7+0qo4ZYWljKclngduBzwNvBv4ReCawd1XNdlWjBiT5JvCRqvrKwLrjgLOr6rjRVTaekhy/rbGq+vqurKUrXjQ0TVVdDZBkcVWt67//+WirGluHVtWWq+n+c5Lrquq4JNeOtKrxtNdgkANU1XVJPjCqgsbcp4FrgUxbX4Bh3oC9+p9oLwZOTvLXwJ7A00db1vhKsrSq1iV53sDqXxtZQePrZ0l+t6qu2bIiyauBx0ZY0zj7LPCXVfXdURfSFcN8a/+F3rTAfcDb6P2EngC8idGOOQu4LsmjwN7Am5IcAXxptGWNpZXAp5P8BTBF70PQ7wArRlnUGPs0vfsvNcM58+1I8gzgWVV196hrGWdJDqyqB0ddRwuSLAb2p3c2i0fl+iWPzKdJ8nrgJOAgYAO9MwcM8x20pZ9JftnPqrpyxGWNrap6FHh01HVo9+OR+YAkHwGeA1wIrKd3ue8Z9O6oeNYoaxtH9lPadQzzAUn+Z1W9aIb1N1fVi0dR0zizn91Jcj+9D+O3Wg1UVf2zEZQ01lrsp9MsW3siyT6D92RI8nR655pr7uxnd24B3l5VD426kEY010/DfGsfA9Ym+Ty9u6k9i978+XkjrWp82c/uXA4cDvjowm4010+nWaZJcghwAr1Tvx4AvlJVD4y2qvFlP6Vdw3uzTFNVP66qVVX1YeAXBs/OsZ/zY4gHkGsOWuinYT4gyWX91y03g1oxumrGn/3sjr3sVov9NMy39sz+65af0tPv26C5sZ/dsZfdaq6fhvn2+YFCt+xnd+xlt8a+n34AOmDgWYu/DXyb3jMX7+BX5596X/M5sJ/dsZfdarGfnpq4tduq6lVJru2/Xj+O/6i7EfvZHXvZreb66TRLX5Lf5Fe/au3VP6XOi1t2kP3sjr3sVqv9dJqFXz5X8b8DL6L3ZO5XAYuA36uqpaOsbRzZz+7Yy2613E+nWYCqepzewygOpnfv8o9X1RXTHqigIdnP7tjLbrXcT4/Mp0mygN4HIE8kOaaqbhl1TePMfnbHXnartX56ZP5kBwK/u+X+20l+VFUbRl3UGLOf3bGX3Wqqn34AOiDJm4BvAocCG4FlwNeTnDrKusaV/eyOvexWi/10mmVAktuB36mq/zuwbm/g+qo6enSVjSf72R172a0W++mR+dY2D/7jAlTVI9inHWU/u2Mvu9VcP50z39o3k1wOrKJ3u9aDgLcC3xppVePLfnbHXnaruX46zTJNkjcDJ/Kr+29fXVVXjLaq8WU/u2Mvu9VaPw3zISRZWlXrRl1HK+xnd+xlt8a5n2M7PzQfkrw2yf1J7kkyOTB0yciKGmP2szv2slst9tM58629H5gEFgCXJzmx/yHJ2N/reETsZ3fsZbea66dH5lvbVFVT/UebnQ18dNQFjTn72R172a3m+mmYb+3BLY+RqqqbgO8lORd/g9lR9rM79rJbzfXTMN/aW4Df6t9Zjar6c+BeendV09zZz+7Yy24110/PZpGkBnhkPiDJfkk+nuQHSe5Lcm+SC5LsN+raxpH97I697FaL/TTMt3YJ8HfA86pqGfB84DvAX46yqDFmP7tjL7vVXD+dZhmQ5KaqeskM62+sqpeNoqZxZj+7Yy+71WI/PTLf2uYkLxhckeRweueiau7sZ3fsZbea66dH5gOS/DbwWeAn9O7V8Czg6cCKqvr2KGsbR/azO/ayWy32c2zPqZwn9wCfBDYBdwEPVNUPk7wfGMt/4BGzn92xl91qrp9Os2ztYmAp8DzgD6rqh/31rxhZRePtYuxnVy7GXnbpYhrrp2G+tWdX1VlV9W56c2rH99eP7f0aRsx+dsdedqu5fjrNsrU9kzytqjYD/wm4Msl3AT9Y2DH2szv2slvN9dMj8639OfC3/X/knwP/nt6vY78x0qrGl/3sjr3sVnP99GyWaZI8o6r+aWB5L+C4qvryCMsaW/azO/ayW6310zCXpAY4zSJJDTDMJakBhrk0pCQLkrx4YHl1kueNsiZpC8NcGt5zgA+PughpJoa5mpVkWZK/TfLXSb6b5E1Jvpjk20n+bZLFSS5JckOSm5K8tv91K5J8pr/t/0ry3v4uPwgc0T8iX9Jf9+b+dt/p3+9DGgkvGlLrfhM4EfiXwFeBX6d3Q6VrgH8FfL+qTkvyDOCWJDf3v+75wLH0Dnh+SO+I/APAoVW1HCAJwD9V1e8l+XfAGcAf7aK/l7QVj8zVuh9U1UZgil5w/xTYAOwH/Gt6oU7/fONvA4f1v+4bVbW5qjYBT2xn/9f0X9f39ymNhGGup7I7gVdC7zFiwG/Ru5vethTwtF1QlzRnhrmeyj5M7wntq+lNwZxVVVPb2X498PQk3+hPy0i7Da8AlaQGeGQuSQ0wzCWpAYa5JDXAMJekBhjmktQAw1ySGmCYS1IDDHNJasD/B5ReYbCZrP9VAAAAAElFTkSuQmCC\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/bsGCBQv83mP1qtW0vL0lN9S6gZa3t2TN6t9ueT948CBRkVHs27ePVne0ol50PZZ+sJQ77rgDgJtvupmI6hFs3LAxV+3z58/noQcfIm5pHI1vbMz9998PQNLpJAYOHEhk3UhiY2OZMnkKWVlZvuN27tzJna3upPYNtenSuQsLFiyg1R2tAPB4PLneLzsrO9fY0g+WcmuLW6lbpy73dryX3bt3+/YdOnSIrl26EhUZRas7WvH2wrcBaNumLXFxcSz9YCkR1SNo17ZdgfMBWrRoweLFi3nhhRcoU6YMccvimDZtGu+88w6LFy/2vfIKDx5/4nF69e5FbGys77Vz506en/q839j2Hdtp2+63OyKaNGnC6jWrqVOnDn+9+68cPXo019oiIiIiIiKStxJ5B0Jetn22jVtuuYU9e/aw9IOlPD38acKqhvH+kvexWCx069aNWTNnMX7CeABM02TkiJGMnzCep59+mtWrVjNp4iSaNW1GoxsbERcXx7hnxjFlyhRuuvkm9u7dy4gRI3B73HTp0gWAjIwMhg0dRqs7W1GjRg26de9GzVo16dqlK7u+3MWf/vSnfOv9+uuv+eGHH+jVuxf16tUjOyubTp06cWfrO9n5+U7S09MZ/tRwXnrxJSY8O4H4+Hh69ezFwEED6dGjBz8d/YlRo0ZRpkyZQn9GixcvZuaMmcyZM4foetFs3ryZPg/1YcsnW6hatSoDBw6kVatWvDn/TY4fP87+ffsB2LR5Ew90f4Dw6uG8/PLLvvXym3+xGdNnULVqVbp07oLVaiU1LZVly5ZRtWrVfOvs1KkTnTp18hvL6w6E3wsPDwdg2LBhVAmrQvyheDre09FvjtfrJSMjg3LlymG32/lq31eBPzgREREREZFSoNQECJUqVWLw4MEAPNDjAcaNG8fDjzxMtWrVAPhLh7+w8/OdfscMGzbM9+3/yFEj+eijj1j+4XIa3diImTNm0q9fP7p17wZAzZo1OfzDYaZPm+4LEAD69+9Pn759ilzvr7/+ysZNG4mOjgbggyUf4Pa4mTx5MlarlcqVKzP2mbE82PtBJjw7gfnz5xMZGcnYsWMBfIHFxXdFBDJr5iwef+Jxbm5+MwBdunRh5cqVrF+/nr59+3Lq5CmioqKoWLEiFStWpEGDBvmuZRhGwPn79+9n+fLl9O3bl1GjRxEcHMyzE57lmbHPULduXQ5+exCnw8n8BfNzrd+rZy+OHz/u2z516hTffPMNb8x7wzfWrXs3Hn30Ub+aJk2cxKqVq/hi1xf83//9H+07tPdb98svv2TSxEms/2h9oT83ERERERGR0qDUBAgXczgcOJ1OvyaGISEhJJ9P9psXXCbYbzsyMpKEYwmkpaWRmJhIk6ZN/PY3adKE1157jbS0NN/YrbfdWqwaK1eu7AsPAL777jtSklO4s9WdvjHDMHA6nWRkZHDo0CGaNGmS11KFknw+mdOnTzN3zlzmv/nbBXt6RjrNmjbDarXSv39/xowew/p16/nb3/5G5y6dcTqdea4XaL7L5WL4U8MZ8tgQRowYwRdffMEb895gz549mKZJy5YtaX1Xa2rXrp3n+ovfW+y3XZg7EKY+N5W9e/cCUL58+SJ9PiIiIiIiIqVdqQwQistreHE4HQHnWSyFbyZYWIZpEB0dzarVq/Lc73F7sDuK/+c0TAOAF198kdtb3p7nnDFjx9Dx3o6sWLGC559/niVLlrBq9ap8z7eg+UeOHKFxk8aMGDGCKZOn8MknnzBy1EgmT5lMu7btePChB/Nc88SJE3Tv1j3XeFJSEvv37+e1ua/5jdesVZNFixYB0LJlSx4b+hiNGjYq9OciIiIiIiIiORQgFJLX6+Wbr7/hvvvvIzQ0lGrVqrF/336/xxbu37+f8PBwQkJC8l2nuOHCjTfeSNzSOM6dO0fFihVz7a8eUZ1Dhw75jWVnZfv+bbfbKVOmDOkZvz2VwMT0/btixYpERESwc+fOfAMEgHr16lGvXj3u+ds9/PWvf+XnpJ8JqxqW73nlNz86OppXXnmFHTt2sGnzJj766CPKlStHamqq35MTfq9atWp8uvVTv7Et/9zCmDFjCAkJ4cMVH3Lttdf69l1c1+0tb8fj8eS7toiIiIiIiOSvxD6F4VJ4/7332bNnDz/++CPPjH2Gc+fO0btXbwCGDhvKW2+9xcqVK0lMTGT1qtW89dZbPPHEEwWuWalSJQDWrlnLxg0b+fXXXwtVS8eOHQkPD2fwo4P5+uuvOXr0KG+++SbDnxoOQNcuXfniX1/w5ptv8sMPP/DuondZunSp3xqxN8UStzSO8+fPk5SUxLBhw/z2P/3007y18C3ee+89jh07xhdffMHAgQPZu3cvGRkZTJo4ifhD8WRlZbF9x3bCqoZxXZXrALi20rXs2b2HA/sPsHnz5oDzLzh27BiRkZG+n5OEhITwj3/8o8DPwm63Y7fnZF+LFi1i3PhxvP3224waPYoeD/Rg9+7dvjk2m61Qn6+IiIiIiIgUTHcgFKBJ0yY8N+U5Dn57kJo1arJs2TLCqoYB0KNHD+x2O9OmTePE8RNUq1aNKc9N4b777itwzVq1atGzZ09effVVatasyavTXvWFCgWx2+18sPQDJoyfwP333Y9hGDRp0oRRo0cB0LZdW0aNHsU/3vgHM2fMpFv3bvTs1ZP1635rBjh16lSGPzWc2NhYro+4PufpDYfiffvv7XQvJibTXp3GuGfGERYWRufOnWnYsCGGYRASGkKPHj1ITU2lQYMGLFy4EKs1J4MaNGgQgx8dTK9evbj//vu5/fbbC5x/wV2t72LGjBn8/fm/0/KOllx33XXUrlObb775hqSkJEJCQrjlllv8jvn000/ZuXMn69etJ/amWNatW0dYWBgNGzWkenh1xo0fh8ftoU3bNnTo0MGvl0QgLpdLoYOIiIiIiEgeLKZpmoGnlT4x9WIYPWY0vXv3vtqlFNu0adNYs3oNWz/berVLKdD58+dZuXIlXx/4ml/P/oor20VwcDCVKlXi9ttvp+O9/o9anDxpMjVr1aRNmzb5Pu5x9+7dbNiwgaioKL9Qx+PxUKtmLb479J3fT0063tORo0ePkp2dTdeuXZn6/NTLc7IiIiIiIiL/o3QHglx1FSpUoG/fvoWeP+HZCQHnxMbGEhsbm2vcbreTkJiQa3z1mtW+/ggXfh4hIiIiIiIiv9GVksh/KDgQERERERHJn37CICIiIiIiIiIB6SkMIiIiIiIiIhKQAgQRERERERERCUgBgoiIiIiIiIgEpABBRERERERERAJSgCAiIiIiIiIiAZXK59Z5vV68Xi+GYXAlHkJhsViwWq3YbDZsNtslW9c0Td+5mKZZ5HOxWCxYLBZfXRaL5ZLVJiIiIiIiIiVLqXqMo9vtxuPxXO0ysNvtOByOYh9vmiZutxuv13sJqwKbzYbD4VCQICIiIiIiIrmUigDB6/Xicrmudhm5OJ3OIt+RcCXOpTh1iYiIiIiISMlW4nsguN3u/8rwAMDlchXpjohLFR7ExcVx9OjRAuu61Hc3iIiIiIiIyP+2Eh0geL3eQl2ge5M24T0yHSP9p8tf1O8U9qcIl/LOgy1btnDw4MEC5yhEEBERERERkYuV2CaKhmHgdrsDzjM92dh+GkeZ6i4y/70Eo34c1pAal7/Ai7jdbl+jxTxrNM0ihQfJycnEx8eTnJxM5cqVady4MR6Ph4SEBAzDAODs2bMcPnyYChUqULly5TzXcblcBAcHqyeCiIiIiIiIlNwAwePxFPqpBBarFZKDKVM1i7Sf10PNIWB6wXJl+gCYponH48HpdOa5vzBBCEBWVhYrV67ks88+8517eHg4jRs35vPPP+e9997zzd25cyc7d+6kUqVKPP/88/mu6Xa7861LRERERERESo8SGyAU9vZ7052CxcwCbJBqYqmQ97fxl9uFRzH+/tv+C49qDOTEiRO8/vrr/Prrr7Ru3ZqYmBgiIiIICQkB4JZbbiEsLAzDMJgxYwbNmzenefPmXHvttcWqS0REREREREqXEtkDoTB9D0xPds5/k1YTVDbn23pXhhcq3pwzoYh3H6xbu476MfVJT0/3G08+n0zPnj154YUXAq6RV1BQmPDA4/GwYMECPB4Po0eP5r777qNevXqEhob6LvwdDgeRkZFER0cDcN111xEdHU1YWFix6hIREREREZHSpUQGCAVe8Jo5+yz2IIxfPsfx8xyw2cFu4HXegLVsdQxXKkbmzxiu1EK93xtvvMH777+P3e5/Q8fx48fp3bt3vr0NClN3YS7e169fz4kTJ+jTpw/VqlXjyy+/JCkpCcgJFy7eBmjZsiVRUVGFqqmwNYiIiIiIiEjJViIDhAuNAvNkseHNSML7w/PYv+9DUDkbeE3INjBSjmDZ0QL7vxpi/6Yt9j1NMX6cGfC9LBYLCxcuzBUgnDx5kjFjx9C6deti1x2oj4NhGGzbto0mTZoQFRXFrl27WLBgAXPnzgXItQ3Qo0cPatcUtQ4gAAAPFUlEQVSuXaiaClODiIiIiIiIlHwltgdCXozMM1iOPo8j7VOCKlqgYrmc8MBmwUjPoozrONYgE4IqQTkblC2L99yXBa5ptVoZNGhQnvtuuukmAOLj44tdc6CL96SkJNLS0nyBQEREBBUrViQmJibPbYAff/wRq9VKjRo1LkkNIiIiIiIiUvKVqgDBPB1HSMinOf0NPA7w/ufRiF4TbHbSs6043AY22zkMowxB6W6w5/RLsNiDrm7x+UhNzfmZRZUqVQCoXr26X7+F328DLFu2jJCQEB577LErV6iIiIiIiIj8TyuRAYLFYsn7W3PDBWnnwKwEVtdv4zYLuMFhNQgOMgETnG4ICaNs2YOkJc7HVnPIFak7r7GC7gAIDQ0F4MyZM0DOYxe3bdtGdna237x69epRo0YNDMPgxIkTNG7c+A/VJSIiIiIiIqVLiQwQrFZr3o3/rE4ADFc62OxYHXYgpweCO/U8bsOKzZNzsW5kuHBwDvc5E0vdwl9s/9G6fy9QgBAWFkbZsmU5cuQId955J0lJScTFxeWad/LkSQYMGEBiYiLZ2dnUqlWr0HUpQBAREREREZES2USxwKceuDKxejKwejMwsrIwstLJPpuEKzUFh9XAZjWxWU0cZUOxBgdjmEEQUqfA95s9ezadO3UmPT2dXj17MW/ePCCnP0HnTp1Z+NZC1q5ZS+dOnTl37lyR6rbZCn6cpM1m47bbbmPv3r3Ex8cTHh5O8+bN/eaEhobSvn17DMNg2bJlhIaG0rRp0wLXLUoNIiIiIiIiUvJZzBLYIc80TbKysnKNGz/OJOTseFxpZXEE2f2+WTdNk+zz57DZLNisJlQIxxoSSlaaA0/Mamxlwy573cHBwbm+7c/vXC7mdruZOnUqLpeLwYMHEx4ezqFDh0hISCA0NJQGDRpQpkwZVqxYwZYtWxg4cCDNmjX7Q3WJiIiIiIhI6VIiAwSA7OzsXI9FNH75HNu+jgTb0iG4rN8+l8uOkZmKzWbBdIZC2co4remklR+Irc5YML05zRcvE5vNhtPpzHOfy+XK+ycZF0lMTOS1114jJSWFtm3bEhMTQ3h4OCkpKRw7dowNGzZw/Phx2rRpQ9euXS9JXSIiIiIiIlJ6lNgAwTRNsrOzc/UPMNJ/wjizFXtSHJaU3djMTBz2i4IGB1DhOrimIjggLXtgTgPFyxggWCwWgoKC8v2WvzB3IQBkZmayfPlyduzYkWtf5cqV6d27N1FRUUWqTXcfiIiIiIiICJTgAAHA6/Xicrny3W9knoGsRMzsM1g85zE8mVjw/OfgVLCVw/J/3bA6y13WOp1OZ8A+A4HO5WJnz54lPj6e5ORknE4n4eHh1K5du+DeEMWsS0REREREREqHEh0gQE5/AI/Hc7XLyJfD4cBuL9zDMIoSIvxRCg9ERERERETkYiU+QIAre+FdFMW5SL8S56LwQERERERERH6vVAQIkNNHwOVy5WqseDVYrVacTmexewuYponb7Q7YWLGobDYbDodDPQ9EREREREQkl1ITIFxgGAZerxfDMDBNM1eTxcvBYrFgsViwWq3YbLYi9yLIj2maeL1evF5vsc7lQl02mw2bzabgQERERERERPJV6gIEERERERERESm6S/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",