だぐざの大釜

データサイエンス他いろいろ学んだ備忘録

「プロジェクトリーダーの教科書」でプロジェクトマネジメントの型を学ぶ

「定常業務」と呼ばれるような、「常に」「定まっている」業務はほとんどありません。....全ての業務が「プロジェクト化」していることをひしひしと感じています。

データ分析の業務はほとんどプロジェクト化されて、計画立案、実行、管理まで任され、それが複数同時並行で進んでいることが日常茶飯事かと思います。

ある程度、プロジェクトマネジメントの型を知っていれば、できるだけ楽に進められると思いこの本を読みました。

kanki-pub.co.jp

感想

プロジェクトを成功されるためのフレームワーク、もとい勝ちパターンとして、プロジェクトマネジメントを3つのフェーズに分解して、プロジェクトの現場で起こる様々な問題をいかにうまく捌ける型について、著者の失敗談を交えながら解説しており、非常にわかりやすかったです。

pythonプログラムのはじめの「#!」や「if __name__ = "__main__"」について

仕事上、データ分析でpythonを使用してるが、より良いコードがかけるように改めて学び直しています。

Hello, World!を出力するプログラム

#!/usr/bin/env python
# -*- coding; utf-8 -*-

def main():
    print("Hello, World!")


if __name__ = "__main__":
    main()

よくあるプログラミング入門の最初のステップです。 "Hello, World"を出力するだけなのになぜこんなにも長いのでしょうか。

1行目: シバン(Shebang

#!/usr/bin/env python

ソースコードの一行目はシバン(Shebang)といいます。

シェルがファイルを実行可能ファイルを扱うときに、書かれたプログラムを使って処理するためのものです。

/usr/bin/python のように特定のパスのpythonをしておらず、/usr/bin/env経由でpythonを指定することで、パスに依存せずに呼び出すことができます。

シバンの指定があるソースコードは、ファイルの実行権限を付与することで直接実行できます。

$  cmod +x helloworld.py
$ ./helloworld.py
Hello, World!

2行目: エンコード宣言

# -*- coding; utf-8 -*-

2行目はエンコード宣言と呼ばれ、ソースコードをどの文字コードを使って解釈すればよいかを指定します。

日本語などマルチバイト文字を含む場合に特に必要です。

main関数

def main():
    print("Hello, World!")

main()関数として、"Hello, World"を出力します

特殊属性

if __name__ = "__main__":
    main()

__name__は特殊属性と呼ばれ、モジュールの名前が文字列で格納されています。

ここでは、__name__という名前の変数の内容が"__main__"という文字列と一致しているかをチェックして、一致する場合はmain()関数を実行しています。

if name = "main" とはなにか?

ここで、モジュールとは、実のところ単なるPythonファイル(*.py)そのものです。例えばhelloworld.pyというファイルであればhelloworldモジュールとなります。モジュールは別のモジュールなどからインポートして使うことができます。

実は、モジュールがスクリプトとして実行されるとき、__name__には__main__という文字列が格納されています。一方で、モジュールとして実行される場合は、"name"という文字列が格納されています。つまり、main()関数をモジュールとしてインポートして使う場合の配慮のため、if __name__ = "__main__":をつけています。

参考

www.amazon.co.jp

note.nkmk.me

pythonで出力したエクセルファイルを開こうとした時にエラーが出た時の解決法

エラー内容、背景

  • pandasで集計したデータを.to_excel()で保存

  • 出力されたファイルを開こうとすると以下のエラーメッセージが出る

    .xlsx の一部の内容に問題が見つかりました。可能な限り内容を回復しますか? ブックの発行元が信頼できる場合は、[はい] をクリックしてください。

  • 「はい」をクリックすると一応データは確認できる

原因

pythonで集計したデータを.to_excel()で保存する際にシート名を31文字以上で入力していました。 (エクセルシート名には文字数制限があり31文字まで)

support.microsoft.com

解決までの経緯

  • 修復内容を確認

    修復されたレコード: /xl/workbook.xml パーツ内のワークシートのプロパティ (ブック)

  • 何が修復されたのかを見つける
    修復前と修復後のエクセルファイルをそれぞれzip形式にすることで workbook.xmlの内容が確認できるようになる

detail.chiebukuro.yahoo.co.jp

  • zipを解凍する際にzip → cptz → zip →... とループするので、ターミナルのunzipコマンドを用いる

3daysam.com

  • 修正後のファイルでエクセルシート名が欠けていることをみつける → シート名変更後、エラーメッセージは出なくなる