書籍「できる 仕事がはかどるPython自動処理 全部入り。」の執筆に携わりました

株式会社インプレス出版の「できる 仕事がはかどるPython自動処理 全部入り。」の執筆に携わりました。

共著となります。

概要

単行版/電子版(Kindle)での出版です。

想定読者

想定する対象読者は、Pythonの入門書を読み終えた方=非エンジニアを想定しています。

この書籍で少しでも読者のみなさんが仕事、業務を自動化し、本来の注力すべきことに向かえることを願っています。

目次

  • Chapter 1 Pythonのプログラムを利用する前に
  • Chapter 2 コマンドラインインターフェース
  • Chapter 3 サードパーティライブラリのインストール
  • Chapter 4 Pythonのおさらい
  • Chapter 5 ファイルの操作と圧縮・展開
  • Chapter 6 画像の加工
  • Chapter 7 CSVファイルの処理
  • Chapter 8 テキストデータの処理
  • Chapter 9 Microsoft Excelとの連携
  • Chapter 10 Webスクレイピング
  • Chapter 11 Web API

携わる経緯

携わる経緯としては、友人である森本哲也( id:t2y )さんに執筆の協力を求められたためです。

謝辞

執筆のラストスパートにおいては、仕事を優先したので、共著者の森本さん、岡田さん、中野さん、そしてレビュワーの皆さん( takanoryと愉快な仲間たちをはじめとした方々 )、出版社の柳沼さん、家族には多大なご迷惑をおかけしたことを、この場をもってお詫びします。

もちろん感謝をしております。

最後に

反省

最後に、告白です。実は共著者には名を連ねてるものの負い目があります。
というのは、もともと個人としては1/4(25%)を書くのを目標としてたのですが、10%書けたかどうかです。

この点は、反省です。

嬉しかったこと

f:id:rokujyouhitoma:20190616161008p:plain

関わった書籍3冊目にして、Amazonでのカテゴリーランキングで1位を取れたことは嬉しい出来事でした。

個人的な想い

書籍の趣旨とは、ずれるかもしれませんが、読者の方がこの書籍を読むことによって、プログラミングやPython言語に興味を持っていただければ幸いです。

並列プログラミング、並列処理の基礎知識を動画でちょっと学ぶ

知人とスパコンの話をしていて、そういえば、並列プログラミング・並列処理の基礎知識足りてないなと思ってググってたらよい資料に遭遇した。

東京大学情報基盤センタースーパーコンピューティング部門 講習会教育教材

講習会教育教材| 東京大学情報基盤センター スーパーコンピューティング部門

東京大学情報基盤センタースーパーコンピューティング部門?が動画の教育教材を配信している。

公開されている動画の教育教材一覧

感想

1つ目の教育教材をみた感想。
並列処理解説Ⅰ 並列プログラミングの基礎 | 東京大学情報基盤センター スーパーコンピューティング部門

  • 並列プログラミングの用語、概念が整理されている
    • 逐次実行、実行時間、並列化
    • 並列計算機の分類(SISD、SIMD、MISD、MIMD)
    • 並列計算機のメモリ型による分類(共有メモリ型、分散メモリ型)、SMP、メッセージパッシング、MPI
    • 並列プログラミングのモデル(SPMD、Master / Workerの仕組み)
    • 並列プログラミングの種類(マルチプロセス、マルチスレッド)、MPI、OpenMP、HPF、Pthread(POSIXスレッド)、Javaの言語仕様としてスレッドを規定している話
    • 並列処理の実行形態(データ並列=SIMDと概念は一緒、タスク並列)
  • 平易な解説でわかりやすい
  • 動画なので図もありわかりやすい

総じておすすめ。

東京大学情報基盤センタースーパーコンピューティング部門 講習会開催予定

下記見てたら、大学生だと参加資格あるようなので、参加検討して、講義受けるのはありかもしれない。

講習会 | 東京大学情報基盤センター スーパーコンピューティング部門
講習会開催予定 | 東京大学情報基盤センター スーパーコンピューティング部門

...のだけど、スーパーコンピュータを使う予定はないから、受ける意味がなかった。
スーパーコンピュータを使う機会があったら、思い出す。

その他

そのほかに見ていた資料。

放送大学と調べ物と私

pyspa Advent Calendar 2018 9日目を担当する池です。放送大学の選科履修生、科目履修生で2015年から学生になってもうすぐ4年経ちます。

なぜ「放送大学と調べ物と私」を書こうと思ったのか

2015年の上期から放送大学を活用しており、4期通ってみて知見が溜まってきたので知見を公開しようと思ったから。
小難しい話は後半に書いており、前半はCons/Pros(メリット/デメリット)を書いてる。

放送大学のPros/Cons(メリット/デメリット)

体感したPros/Consをざっと洗い出してみた。

Pros・メリット

- 基礎教養を体系だって、比較的安価に学ぶことができる
- 放送大学附属図書館のデータベースが利用可能になる
- 身分は学生。学生証、ac.jpメアドが貰える
- 各種学割が受けられる
- 学習センターが使える

Cons・デメリット

- 多少なりとも金銭的なコストはかかる
- 単位取ろうと思ったら、当然時間使う(そりゃそうだ)
- オンラインのみでは完結しない
- 例えば、単位認定取得試験は、実施日程・会場が決まっており、試験を受けに行く必要がある

放送大学とは

放送大学とはなんであるか?誰が設置したのか。どうしても気になってしまうので調べた。

放送大学は、放送大学学園法に基づき設置された学校法人放送大学学園が運営する大学。*1
設置の趣旨としては、大学教育を広く国民にもたらすために設置された。

国立大学なのかな?と当初私も思ったわけだが、放送大学学園法の第三条で定義されている通り私立大学。*2*3*4

教養学部と大学院が設置されており、学位としては、学士(教養)、修士(学術)、博士(学術)が授与される。

以降は、教養学部生に関して。

教養学部生の区分としては、全科履修生、選科履修生、科目履修生、集中科目履修生がある。*5

全科履修生は、卒業を目指す学生であり、最大10年在籍可能です。卒業には4年以上各コースに在籍し、124単位の取得が必要になる。
選科履修生は、一年在籍可能な学生です。科目は自由に選択できる。
科目履修生は、半年在籍可能な学生です。科目は自由に選択できる。
集中科目履修生は、夏季に集中し3ヶ月司書教諭資格取得・看護師資格取得に資する科目を履修する学生を対象にしている。

放送大学と私

放送大学生になった背景と今

いまから5年ほど前に、前々職の社員総会があり、その帰りがけに先輩3人とランチを食べに行った。

その三人は1、2歳差と、年代もほとんど一緒で、更に出身大学・学部が一緒なので、大学の話になった。
その際に、偶然にも2名が放送大学修士課程に在籍しているというので、放送大学の話題になった。

どうやら、話を聞いていると、好きな講座だけ取ることができ知的好奇心は満たされるし、ソフトウェアの学割が効くという話だったと記憶している。

そのころ大学・大学院の教育を受けたいと思っていた私は、産業技術大学院や東工大の社会人が多そうな専門性が高いコース調べていた。
放送大学は、当時テレビ放送とインターネット配信、一部面接事業での講義を受けられた。

幅広い教養を学ぶにはうってつけだと考え、まずは半年間在籍できる科目履修生として履修を開始した。
科目履修生として4上下期(2年)なり、その後は、一年間在籍できる選科履修生として履修を続けている。

履修してきた/している授業

履修してる授業は、多岐にわたる。

履修した講義を列挙すると、下記。

- 身近な統計(’18)
- エネルギーと社会(’15)
- 情報ネットワーク(’18)
- データベース(’17)
- コンピュータの動作と管理(’17)
- 情報のセキュリティと倫理(’14)
- 入門線型代数(’14)
- 初歩からの数学(’12)
- 情報学へのとびら(’16)
- 感性工学入門(’16)
- Javaプログラミングの基礎(’16)
- Webのしくみと応用(’15)
- データ構造とプログラミング(’13)
- 自然言語処理(’15)

単位は落としたのもあるが、大部分は取れている。

目的別には、

  • 京大黒橋教授が自然言語処理の講義を開講しており、当時NLPに今日持っていたので
  • 以前ゲーム開発で必要になった教養として、線形数学や数学
  • プログラマーで、CSの講義を受けてない負い目あるので、基礎として。ただ、流石に現職のプログラマーなので、たいていは授業みてなく、教科書を読んでおけば単位取得試験受けるだけで単位は取れた

特に良かった授業

黒橋講師(京大教授・放送大学講師)の自然言語処理(’15)は、NLPに興味持っていたタイミングで受講したが大変よかった。
教科書の質も高く。大満足。*6

また、黒須講師(放送大学名誉教授)の感性工学入門(’16)もまた大変よい講義だった。
黒須講師と外部の方々との対談は聞く価値があり、そして、感性に関してフォーラムで他学生と議論を行うのは大変ためになった。
(オンラインのフォーラムではなく、直接対面でゼミ形式で論じることができればよりよいのだが、放送大学の特性上難しいだろう...今後に期待)

コスト面

放送授業は2単位11000円のコストが掛かるわけだけど、費用対効果高い。

今後の課題

一番の敵は、仕事などを優先して、学習時間を確保できていないこと。あとは、仕事優先して、単位取得試験を受けに行けていない場合。これは課題である。

継続の意思

今後も継続して放送大学の学生を続けていくか?
現在のところは、お金が尽きたり、放送大学の制度が変わらない限り、放送大学の学生を続けていく考え。

調べ物と私

人生様々なことを調べる機会はある。時事や企業、人物などなど。

新聞のデータベースがほしいと思うこともあるし、論文をちょっとみてみたいと思うこともある。
古事記などの古典を全文検索したい場合だってある。

本買うまでではないが、書籍をちょっと見たい場合だってある。

放送大学と調べ物

さて、放送大学を活用した調べ物。
実際の図書館も千葉の本部にはあるが、オンラインで使える放送大学図書館がある。

このオンラインの図書館をデータベースとして使うと、結構調べ物ができたりする。

放送大学図書館

オンラインで使える放送大学図書館。
調べ物をするには、まさにうってつけ。ビバ学生。

この記事を書いている現在は以下のサービスが利用可能。*7

  • 放送大学ディスカバリーサービス(EBSCO社が提供する統合データベース)
  • 放送大学電子資料タイトル検索(放送大学で見られる電子ジャーナル・電子ブックを検索)
  • ScienceDirect(エルゼビアサイエンス社が提供する電子ジャーナル・電子ブック)
  • SpringerLink(シュプリンガーグループが提供する電子ジャーナル・電子ブック)
  • Cambridge Journals Online(ケンブリッジ大学出版局が提供する電子ジャーナル)
  • IEEEIEEE Computer Societyが発行する電子ジャーナル)
  • JSTOR(JSTORが提供する電子ジャーナル)
  • IOP (英国物理学会が提供する電子ジャーナル)
  • NII-REO(NII 電子ジャーナルリポジトリ)
  • 1999年以前のSpringer電子ジャーナルアーカイブ (NII-REO)
  • 1999年以前のSpringer Lecture notes in computer science (NII-REO)
  • 1996年から2003年までOxford University Pressの電子ジャーナルの一部タイトル(NII-REO)
  • CiNii Articles(国立情報学研究所(NII)が提供する国内の学術雑誌論文記事検索・全文提供サービス)
  • Maruzen eBook Library(丸善㈱が提供する日本で出版された学術電子ブック・電子ジャーナル)
  • EBSCO eBOOKs(NetLibrary)(EBSCO社が提供する電子ブック)
  • JapanKnowledge(約30種類の辞書・辞典を集積したデータベース)
  • 聞蔵IIビジュアル(朝日新聞記事データベース)
  • 日本古典文学大系本文データベース(国文学研究資料館
  • OPAC放送大学附属図書館蔵書検索)(※外部リンクから電子ブック等全文を読む場合はこちらから)

希望・要望

もっともっと使えるジャーナルやデータベース、サービスが増えるといいなぁ。
例えば、下記が読める・連携されると嬉しい。

放送大学学長。お願いします。

まとめ

書きなぐって、整理されてなく申し訳ないけど、最後に伝えたいことを。

- 放送大学いいよ
- 放送大学めっちゃいいよ
- 放送大学おすすめだよ

PySpaアドベントカレンダー

さて、明日はのアドベントカレンダーは頭脳明晰で生物として死んでもbotとして生きながらえると思われるしうまちです。

pyspa Advent Calendar 2018 - Adventar

*1:e-Gov法令検索e-Gov法令検索

*2:https://www.ouj.ac.jp/hp/toiawase/other/02.html

*3:第二章 放送大学学園 (目的) 第三条 放送大学学園は、大学を設置し、当該大学において、放送による授業を行うとともに、全国各地の学習者の身近な場所において面接による授業等を行うことを目的とする学校法人(私立学校法(昭和二十四年法律第二百七十号)第三条に規定する学校法人をいう。)とする。

*4:設立当初は国立大学の扱いでした。現在は法改正を経て私立大学となっています。

*5:学生の種類 | 放送大学 - テレビ・ラジオで学ぶ通信制大学

*6:放送大学 自然言語処理('15) - rokujyouhitoma's blog

*7:放送大学附属図書館

ゲーム関連の蔵書洗い出し。

持ち腐れするぐらいなら、欲してる人へ。

f:id:rokujyouhitoma:20180916193707j:plain

一覧

macでdotnet/coreの環境構築、Nugetの導入、自作ライブラリを組み込む

MacC#である。dotnet/coreをMacで実行するとは、つまりそういうことだ。

近年のMicrosoftは大好きだ。

概要

環境

dotnet/coreの環境構築

  • dot net SDK 2.1.301

インストーラーに従いインストール。

$ curl -O https://download.microsoft.com/download/D/0/4/D04C5489-278D-4C11-9BD3-6128472A7626/dotnet-sdk-2.1.301-osx-gs-x64.pkg
$ open dotnet-sdk-2.1.301-osx-gs-x64.pkg

dotnetコマンドを実行し、バージョンの確認。

$ dotnet --version
2.1.301
$ dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
$ dotnet help

.NET Core へようこそ!
---------------------
.NET Core についての詳細情報: https://aka.ms/dotnet-docs
'dotnet --help' を使用して利用可能なコマンドを確認するか、次にアクセスしてください: https://aka.ms/dotnet-cli-docs

テレメトリ
---------
.NET Core ツールは、エクスペリエンスの向上に役立つ利用状況データを収集します。データは匿名で、コマンドライン引数が含まれません。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、お好きなシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定します。

.NET Core CLI ツールのテレメトリに関する詳細情報をお読みください: https://aka.ms/dotnet-cli-telemetry

ASP.NET Core
------------
ASP.NET Core HTTPS 開発証明書が正常にインストールされました。
証明書を信頼する (Windows および macOS のみ) には、まず 'dotnet tool install dotnet-dev-certs -g --version 2.1.0-preview1-final' を実行して dev-certs ツールをインストールし、次に 'dotnet-dev-certs https --trust' を実行します。
HTTPS を構成する方法の詳細については、https://go.microsoft.com/fwlink/?linkid=848054 をご覧ください。
.NET コマンド ライン ツール (2.1.301)
使用法: dotnet [runtime-options] [path-to-application]
使用法: dotnet [sdk-options] [command] [arguments] [command-options]

path-to-application:
  実行するアプリケーション .dll ファイルへのパス。

SDK コマンド:
  new              .NET プロジェクトを初期化します。
  restore          .NET プロジェクトに指定されている依存関係を復元します。
  run              .NET プロジェクトをコンパイルして、直ちに実行します。
  build            .NET プロジェクトを構築します。
  publish          展開用の .NET プロジェクトを発行します (ランタイムを含む)。
  test             プロジェクトに指定されているテスト ランナーを使用して、単体テストを実行します。
  pack             NuGet パッケージを作成します。
  migrate          project.json ベースのプロジェクトを msbuild ベースのプロジェクトに移行します。
  clean            ビルド出力を消去します。
  sln              ソリューション (SLN) ファイルを変更します。
  add              参照をプロジェクトに追加します。
  remove           参照をプロジェクトから削除します。
  list             プロジェクトの参照またはインストール済みツールを一覧表示します。
  nuget            追加の NuGet コマンドを提供します。
  msbuild          Microsoft Build Engine (MSBuild) を実行します。
  vstest           Microsoft Test Execution Command Line Tool を実行します。
  store            指定されたアセンブリを実行時ストアに格納します。
  tool             .NET のエクスペリエンスを向上するツールをインストールするか、使用します。
  build-server     ビルドによって開始されたサーバーとやり取りします。
  help             ヘルプを表示します。

共通のオプション:
  -v|--verbosity        コマンドの詳細レベルを設定します。使用可能な値: q[uiet]、m[inimal]、n[ormal]、d[etailed]、diag[nostic]。
  -h|--help             ヘルプを表示します。

コマンドに関する詳細情報については、'dotnet COMMAND --help' を実行します。

sdk-options:
  --version        使用中の .NET Core SDK バージョンを表示します。
  --info           .NET Core 情報を表示します。
  --list-sdks      インストール済み SDK を表示します。
  --list-runtimes  インストール済みランタイムを表示します。
  -d|--diagnostics 診断出力を有効にします。

runtime-options:
  --additionalprobingpath <path>    調査ポリシーと調査対象アセンブリを含むパス。
  --fx-version <version>            アプリケーションを実行するために使用するインストール済み Shared Framework のバージョン。
  --roll-forward-on-no-candidate-fx 候補がない Shared Framework に対するロールフォワードが有効です。
  --additional-deps <path>          追加の deps.json ファイルへのパス。

Additional tools ('dotnet [tool-name] --help' for more information):
  dev-certs      Create and manage development certificates.
  ef             Entity Framework Core command-line tools.
  sql-cache      SQL Server cache command-line tools.
  user-secrets   Manage development user secrets.
  watch          Start a file watcher that runs a command when files change.

dotnet/coreを実行

.NET and C# - Get started in 10 minutes を試し、dotnet/coreを実行。

  • dotnetコマンドでアプリケーションを作成
  • 作成されたテンプレートの確認
  • 実行

コンソールアプリケーションの作成

$ dotnet new console -o App
準備しています...
テンプレート "Console Application" が正常に作成されました。

作成後のアクションを処理しています...
'dotnet restore' を App/App.csproj で実行しています...
  /path/to/App/App.csproj のパッケージを復元しています...
  Microsoft.NETCore.DotNetAppHost 2.1.0 をインストールしています。
  Microsoft.NETCore.DotNetHostResolver 2.1.0 をインストールしています。
  Microsoft.NETCore.DotNetHostPolicy 2.1.0 をインストールしています。
  Microsoft.NETCore.Targets 2.1.0 をインストールしています。
  Microsoft.NETCore.App 2.1.0 をインストールしています。
  MSBuild ファイル /path/to/App/obj/App.csproj.nuget.g.props を生成しています。
  MSBuild ファイル /path/to/App/obj/App.csproj.nuget.g.targets を生成しています。
  /path/to/App/App.csproj の復元が 5.97 sec で完了しました。

正常に復元されました。
作成されたテンプレートの確認
$ cd App/
$ ls
App.csproj	Program.cs	obj
App.csprojの中身を確認
$ cat App.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

</Project>
Program.csの中身を確認
$ cat Program.cs 
using System;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
実行
$ dotnet run
Hello World!

Nugetの導入、自作ライブラリを作成

macOS での .NET Core の概要 | Microsoft Docs をなぞり、Nugetを組み込む。
Nugetはパッケージマネージャ。

dotnet new sln

$ dotnet new sln
テンプレート "Solution File" が正常に作成されました。
$ ls
App		dotnetcore.sln

dotnet new classlib -o library

$ dotnet new classlib -o library
テンプレート "Class library" が正常に作成されました。

作成後のアクションを処理しています...
'dotnet restore' を library/library.csproj で実行しています...
 /path/to/library/library.csproj のパッケージを復元しています...
  MSBuild ファイル /path/to/library/obj/library.csproj.nuget.g.props を生成しています。
  MSBuild ファイル /path/to/library/obj/library.csproj.nuget.g.targets を生成しています。
  /path/to/library/library.csproj の復元が 275.86 ms で完了しました。

正常に復元されました。
$ dotnet sln add library/library.csproj
プロジェクト `library/library.csproj` をソリューションに追加しました。

Newtonsoft.Jsonをインストール

$ dotnet add library package Newtonsoft.Json
  Writing /var/folders/jn/zrzfgbbd07s_ph4wgm70dsx40000gn/T/tmpPbxSjT.tmp
info : パッケージ 'Newtonsoft.Json' の PackageReference をプロジェクト '/path/to/library/library.csproj' に追加しています。
log  : /path/to/library/library.csproj のパッケージを復元しています...
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json 175 ミリ秒
info : パッケージ 'Newtonsoft.Json' は、プロジェクト '/path/to/library/library.csproj' のすべての指定されたフレームワークとの互換性があります。
info : ファイル '/path/to/library/library.csproj' に追加されたパッケージ 'Newtonsoft.Json' バージョン '11.0.2' の PackageReference
$ dotnet restore
  /path/to/library/library.csproj のパッケージを復元しています...
  /path/to/library/library.csproj の復元が 231.68 ms で完了しました。
$ dotnet build
.NET Core 向け Microsoft (R) Build Engine バージョン 15.7.179.6572
Copyright (C) Microsoft Corporation.All rights reserved.

  /path/to/library/library.csproj の復元が 57.28 ms で完了しました。
  library -> /path/to/library/bin/Debug/netstandard2.0/library.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:04.29

作成したlibraryを使う

macOS での .NET Core の概要 | Microsoft Docs をなぞり、作成したLibrary.Thingを使い、実行する。

ソリューションを追加

$ dotnet sln add app/app.csproj
プロジェクト `app/app.csproj` をソリューションに追加しました。

ライブラリの依存関係を追加

$ dotnet add app/app.csproj reference library/library.csproj
参照 `..\library\library.csproj` がプロジェクトに追加されました。

実装。libraryを実際に使うコードに変更

Library.Thingを実際に使う。

$ git diff
diff --git a/path/to/App/Program.cs b/path/to/App/Program.cs
index 227ce6d..ae778b9 100644
--- a/path/to/App/Program.cs
+++ b/path/to/App/Program.cs
@@ -1,4 +1,6 @@
using System;
+using static System.Console;
+using Library;
 
 namespace App
 {
@@ -7,6 +9,7 @@ namespace App
         static void Main(string[] args)
         {
             Console.WriteLine("Hello World!");
+            WriteLine($"The answer is {new Thing().Get(19, 23)}");
         }
     }
 }

実行

$ dotnet run -p app/app.csproj
Hello World!
The answer is 42

まとめ