mocchaso note

サーバーエンジニアが何か色々呟いているところ。

Python100本ノック 62本目~71本目(63本目~70本目)

Python100本ノック、62本目から71本目についてです。
※Qiita記事では63本目~70本目に該当しますが、この記事から番号がズレているっぽい...?

qiita.com


62本目:現在の日付をtoday.txtというテキストファイルに文字列の形で書き込みなさい


date.isoformat()を使う点以外は記事内の解法と同じでした。

  • date.isoformat()
    'YYYY-MM-DD'の日付を表す文字列を返すメソッド


63本目:today.textから日付を解析し取り出しなさい


「日付を解析する」がパッと見で分からなかったです(-_-;)
「today.txtから日付を~」の部分をもう一度見て、
txtファイルから読んだ文字列から日付に変換するという意味だと理解できました。

文字列から日付型への変換は、
datetime.datetime.strptime(日付を表す文字列, 日付フォーマット)で実現できました。
どうやら、timeライブラリにもstrptimeメソッドが搭載されているみたいです。


64本目:ディレクトリの扱いの練習


問題:カレントディレクトリと親ディレクトリのファイルのリストをそれぞれ表示せよ。

osライブラリは少しだけ使ったことがありましたが、調べながらの取り組みとなりました。


65本目:自分の誕生日が何曜日だったか確認


すぐ分からなかったので、datetimeライブラリの公式リファレンスを漁りました。
Qiitaの記事でも書かれているdate.weekday()を利用しました。

  • date.weekday()
    月曜日を0、日曜日を6として、曜日を整数で返すメソッド


66本目:自分が生まれてから10,000日になるのはいつか確認


これもdatetimeライブラリのリファレンスを参照しました。
特に問題無く解けました。

  • timedeltaオブジェクト
    経過時間に関する機能が搭載されている


67本目:以下のデータフレームを作成せよ。


f:id:mocchaso:20180723195042p:plain

pandasの使い方をググりましたが、問題無く解けました。

  • pandas.DataFrame
    2次元の可変長のデータ構造。numpyの配列、リスト、辞書、他のデータフレームからのコピー、ファイル読み込み等によって初期化することができる。


68本目:年齢が35歳よりも下の人だけを表から取り出しなさい


指定した条件を抽出することはできましたが、データフレームとして出力するところで少し時間がかかりました。

  • df["年齢"] < 35だけ
    指定した条件に関するbool値を含むリストを出力するだけ...

  • df[df["年齢"] < 35]
    データフレームとして出力できる!


69本目:内容の追加


問題:なんか適当に新しい行と新しい列を追加してみましょう
例:新たに「池田」を追加し、新たに「居住地」という列を追加する

pandasでの操作が少しずつ複雑になり、時間がかかりました。
参考URL: pandas.DataFrameに列や行を追加(assign, appendなど) | note.nkmk.me

列の追加は問題の記事と同じ方法で行いました。
データフレーム["まだ存在していない列名"]=[その列に入る要素のリスト]

しかし、行の追加については、記事内の解法と異なる方法で解きました。
自分の解法:新たに作ったSeriesappend()メソッドで追加
記事内の解法:新しく追加する要素のみを含むデータフレームを定義→concatで結合

  • pd.concat([追加先のデータフレーム, 追加するデータフレーム], axis)
    axisが0だと行方向に、1だと列方向に追加するようです(デフォルトは0)。


70本目:内容の削除


問題:「性別」の列を削除せよ。

使うメソッドが分からなかったのでググりました。
参考URL: pandas.DataFrameの行・列を指定して削除するdrop | note.nkmk.me

  • データフレーム.drop("ラベル", axis)
    dropメソッドで行や列を削除できます。
    上記のconcatメソッドと同様、axisに0を指定すると行、1を指定すると列方向に削除の処理を行います。
    デフォルトでは0が指定されるのも同じですね。


71本目:列名を変更


問題:「名前」を「name」、「年齢」を「age」、「居住地」を「residence」に変更せよ

これもググりました。
参考URL: pandas.DataFrameの行名・列名の変更 | note.nkmk.me

行名、列名の変更方法は以下の2つがあるようです(上記のサイトより引用)。

  • pandas.DataFramerename()メソッドを使う

  • pandas.DataFrameの属性index, columnsを更新する

前者だと任意の行名・列名、後者だと行名・列名を全て一括で変更できるようです。




datetimeospandasのライブラリについての問題でした。
どれも使用経験がほとんど無く、調べながらの取り組みとなりましたが、それなら何とかできるといった感じでした。
ファイルの読み書きに続いて、これらも機械学習のデータ前処理等で頻繁に使うライブラリなので、しっかり慣れておきたいですね...!