アラフォー文系、数学ナニソレオイシイノ?っという私がpythonの勉強を1ヶ月してみました。
きっかけ:友人がpythonでゲームのツールを作っていたので私もpythonの勉強することにしました。そこでとりあえず2冊pythonの本を買ってみました
そして、twitter apiで日本の急上昇ワードを取得して最新情報を指定した時間に定期投稿できるtweitterbotを作りました
トレンドブログなどの記事を作るときにあったらいいなと思って作りました。
やさしいpythonで全体像を把握して理解を深める
1冊はやさしいpython こちらはよくある学習テキストです。私はpythonで悩んだときに基礎知識の振り返りやわからないときに本を読んでいます。よくある参考書的なものなので、何かを作るという目的がないのでこれだけで学習をしようとすると飽きてしまいます。
でも、関数についてもう少し深く知りたい、リストや辞書の処理について確認したいと言うときに重宝しています。
ネットで検索して、その都度調べても良いですが、体型だった本で勉強しておけば、その本を繰り返し見ることでどこを理解して、どこを理解していないか、読んでいない項目はどこか?など
わからないところがわからないという部分がなくなります。読んでいないページを学習していけば、自然と全体像の理解が追いつきます。
メインの学習教材は仕事でも使えるようになりたいなと思い、python初心者向けの本でエクセル操作などがあるものを選択しました。
シゴトがはかどるPython自動処理の教科書
Pythonのインストールの仕方 windowsとMac両方記載があるので安心です。テキストエディタのvisual studio codeのインストールの仕方や使い方も記載があります。
本の1/3がエクセルをpythonで自動操作する方法があります。CSVの顧客リストをCSVで引っ張って請求書を作成するといった操作ができるようになります。
エクセルを使ったpythonの学習した内容
- pythonでエクセルを操作するopenpyxlの使い方
- for文の入れ子操作
- 日付操作
- リスト操作 for文の内包表記 リストの入れ子
- if文の使い方
- append()の使い方
- items(): 各要素のキーと値に対してforループ処理
- 関数について
- Json形式の保存方法←あとでもう一度勉強しよう
- ファイルパスの相対パス絶対パスの取得やファイルパスの結合
- ファイルのdelete
この辺を学習できました。
ここで試しに作ったのは、ダウンロードフォルダにある画像ファイルだけを削除するプログラムを作りました。ブログ用にダウンロードした画像ファイルは必要ないけれど、ダウンロードフォルダに有る画像意外のファイルは必要だったりするので、とりあえず画像ファイルを削除して、必要なファイルを整理しやすくできました。
webスクレイピングの学習
ページの1/6程度がスクレイピングについてでした必要なパッケージとしてrequests, beautifulsoup4 のインストールを行いました。
HTTPのリクエストレスポンスステータスについて学習しました。よくある404エラーとか503エラーとかどういう意味か学習できたので今までなんとなく見ていたエラーがわかりました。
Beautisoup4によるHTMLのDOM操作
タイトルタグやCSSのIDやClassなどの情報を指定してデータを取得する方法を学習できました。
- HTMLの要素と属性について学習ができました。
- find_allメソッド
- selectメソッド
- リンクを巡回して、必要なデータを集める
について学習できました。しかしまだまだ使い分けが旨く追いついていないので学習が必要です。ここで結構大事なのは親から子に絞り込む方法がスクレイピングで大事だなと思います。
このあたりを学習したら、スクレイピングして、データを抽出することができました。
この段階でとりあえずヤフーニュースのランキングデータを抽出するプログラムを書いてみました。
seleniumでwebブラウザchromeを操作
beautifulsoup4はpythonから直接サイトにアクセスしますが、seleniumはgoogle choromeのwebブラウザを通してデータを収集できることを学びました。
サイトによってはブラウザを通さないとHTMLが取得できないサイトがあるので、その場合はbeautifulsoup4ではなくseleniumを使ってデータを取得するという使い分けをするということを学びました。
find_by_elementを使って各種要素を検索する方法を学びました。
このあたりで、google chromeのディベロッパーモードを使って、HTMLの要素やcssの要素を解析して、絞り込む方法を学習できたのですが、シンプルなサイトなら簡単なんですが、複雑なサイトだとかなり難しくて、いまトライしているサイトが難航中です。
この段階で、試しにgoogleトレンド今日の急上昇ワードのrssデータを整形して、
- トレンドキーワード
- 関連ニュースのタイトル
- URL
を抽出してランク付けすることができました
Pythonの勉強中でトラブった大変だったこと
pipのインストールが大変だった:python2とpython3 でpipコマンドが pip と pip3 と使い分けたりする
python3をインストールしたけれど、Vscodeでpython2系からpython3に切り替える方法がかなり難しくて、なんとか切り替えができたのですが、なぜ?みたいなぶぶんがあります
bashとzshの切り替えの学習をしました
コードを書いているとパッケージを新ストールしているのにメソッドが旨く動かないときがあります。その時はじつはインストールしたパッケージが古いのでバージョンアップが必要ということ
コードを書いてて旨く行かないときの対処方法として
- printで各処理を出力するとどこでエラーが出ているか
- printで正しいデータが入っているか
同じメソッドでも、書き方によってimportしているパッケージで処理が違うことがある。
例えば、append()でリストに追加がopenpyxlで append()だとエクセルのセルに記入などがあり、その違いを理解していることが大事だなと思いました。
シンプルなことですが、このあたりを細かく設定してやることでエラーの切り分けをすることができました。
googleで検索したり、本を読んだり1日悩んで旨く行かないときはtetatailでコードを書いて質問してヒントをもらったりしました。
Twitter Developerの登録とAPIの申請
ツイッターのディベロッパー登録は難易度が高いとありますが、試しに登録したらサクッと通りました。しかしそこには罠が
初期登録ではEssentialというほとんど権限がないものでした、これではツイッターに投稿ができません。
Elevated にアップグレードする必要あり
- ディベロッパー登録
- フォームから申請
- 英語で申請するとその後メールが届く
- 必要な情報のヒアリング※日本語メールが届く
- 日本語で足りない部分を返信する
- 4〜5日あれば審査通過
このあたりはまた別途解説したいと思います。
Elevatedに登録するとtwitterにpythonから投稿出来るようになりました。そして、ここで、twitterの日本の現在のトレンドを取得できるようになりました。
tiwtterの急上昇ワードの投稿するために作った処理
- getでAPIを取得 内容は 辞書形式
- そのデータをキーの値だけ抽出
- 利用したいキーワードだけを取得※ツイートボリュームもあるので別で使えそう
- トレンドワードは上位50件取得できるので、if文で上位10件に絞り込み
- 時間表示をしたいのでdate()メソッドで時間を取得して日本語表示に修正
- 順位を表示
- 表示したい内容を変数に入れる
- 変数に入っているデータをツイッターに投稿
- 作ったpythonファイル実行
あとは、これを定期配信するようにレンタルサーバの設定を行う
Conoha wing でcronを利用してpythonファイルを定期実行
wordpress用にレンタルサーバのConoha Wingを利用しています。それを利用してやる方法を探しました。結構大変でした。
Conoha wingにはpython3.6が入っているのですが、そこに必要なパッケージをインストール必要があります。そのためにはSSH接続をして自分のパソコンからターミナルでpipコマンドを打つ必要があります。
- pythonファイルをcgiファイルに文字コードのエラーが出るので、utf-8の設定
- 拡張子をcgiに変更
- 作ったファイルをconohawingのフォルダに保存
- 属性変更でパーミッションを755に変更
- conohawingの .htaccessを変更
ここまでは簡単ここからが大変でした。
Conoha wingへのSSH接続のための設定
- 自分のパソコンからSSH設定をしてconoha wingの自分のアカウトに接続
- Conoha wingから公開キーを取得 ファイルをダウロード
- 自分のPCの .sshフォルダを作成configファイルの作成
- ダウンロードしたファイルを.sshフォルダに保存
- SSH接続するためのコマンドをターミナルから打ち込む
- エラーが出る
このエラーを解決するのが大変でした。ダウンロードしたファイルのパーミッションを600に変更する方法がうまくいきませんでした。ターミナルのコマンドの現在のフォルダを変更したら修正できました。
ここだけで4時間ぐらい悩みました。しかしここまででいればあとは比較的簡単でした。ここまで4時間悩んだので、ちょっと悩むぐらい簡単なものという意味です。
- SSH接続コマンドを実行
- Conoha wingにつながる
- pip コマンドで 必要なパッケージをinstall
- Conoha Wingのジョブスケジューラーでcronの設定
- 1分毎にして定期実行できていることを確認
- cronを30分単位にして終了
とりあえず作りましたが、毎日深夜に同じようなワードがでてくるのでそれをif文で無視する処理を入れたりしたいなと思います。
pythonを勉強始めて思ったことpythonは出来ることがたくさんある
pythonはとても簡単にプログラムが書けるので、初心者でもすぐに取り組めて簡単に動くので挫折しにくいと思います。
- EXCELやWordファイルが操作できる
- WEBサイトをスクレイピングしてテキストや画像を簡単に取得できる
└在庫管理とかライバルサイトの情報を抽出したり - 機械学習:画像解析・テキスト解析などなど
- キーボードやマウス操作
これやりたい!って思ったことは大体できそうなやつです。だからこれ作ってみたいというものは作れる気がします。
プログラミングが出来ると企画の引き出しが増えアイデアが湧く
今までできなかったことを、プログラミングを勉強することで出来るという知識が増えます。そうすると、ふと、これ不便だな、こういうもの欲しいなと思ったとき無意識にスルーしてしまっていました。
しかし、知らなかった出来ることが出来るということがわかったら、何かに行き詰まったり、ふとした時にpythonならこういう物を作ればめっちゃ便利になるじゃん!という発想が湧くようになりました。
新しいジャンルにチャレンジすることで、調べる際に検索するキーワードが増えて、新しい知識が増えていきます。
こんなの作りたいな〜というリストが毎日増えていきます。
pythonを1ヶ月程度勉強して、長続きしなくても新しい分野の知識が増えることで、企画の幅が増えます。
今後プログラミングで勉強したいこと
スクレイピングが出来るようになってきたので、取得したデータをDBに保存して行きたいと思っています
- データベースの知識
- SQLの知識
- 機械学習の勉強
- webサイト作成 HTML CSS JavaScript
- Djangoのpythonのwebサイトを作るフレームワーク
この辺を勉強していきたいなと思っていますが、先は長いですね。少しずつ理解して作れるようになりたいです。