Tech」カテゴリーアーカイブ

MeCabで泣いた→最後は笑った。

MacBookでMeCabを使って形態素解析してみた。完了。

事情があって、Windowsでも同じくMeCabを使って形態素解析してみた。というか、GithubでMacBookで書いたコードをそのままもってきてWindows環境で実行。

MeCabがおもうようにインストールできず3回休みくらいの進捗度合い…。(この苦労話は別に投稿する予定)

なんとかインストールできて、プログラム実行するも、全く思わしくない結果が出力。

試行錯誤して、デバッグして、ようやくわかった。

形態素解析した結果を格納する配列の中身の順番が、MacBookとWindowsで違う…。ようするに、Mac(Unix?)版のMeCabと、Wndows版のMeCabが、異なる内容・順番で、形態素解析した結果を返す模様。

これ本当だったら、悲しい。。。

けど、事実並び順がことなるし、当該部分を修正してプログラム実行したら、正常動作した。

これってなぜ?なんか理由があるはず…。知りたい…。

とりあえず、ちゃんと形態素解析できるようになってよかった。コーディングはやっぱりMacBookで実行する方が自分には合うな…。

WindowsでのPython開発環境でつまづいている日々…

MacBookだとすんなりいった開発環境も、Windowsだと色々と面倒くさい。やっぱりUnixベースが良い。Ubuntuが恋しい…。

と言いつつ、諸事情がありどうしてもWindowsで開発環境を整える必要がある。四の五の言ってもしょうがない。

今、具体的にはMeCabのインストールでつまづいている。そして、なぜかPandasのインストールでも手間取っている。

実行ボタン押下→表示されるエラー文とにらめっこするに、C:\Users\[user-name]\AppData\Roaming\Python\Python39\site-packages\pandas といった具合に、AppData/Roaming配下でどうのこうの行ってくる。

このフォルダはなんだ?ということで調べてみると、どうやら pip でパッケージインストールした再のフォルダの模様。

細かい話だけど、こういうことを知るのも楽しい。なんだか時間かかりそうだけど、もう腹をくくって、これを気に詳細まで勉強する気概で臨もう。焦らない焦らない。

pip documentation v21.3
https://pip.pypa.io/en/stable/

[Twitter Developer] {‘code’: 32, ‘message’: ‘Could not authenticate you.’} との戦い

ハマった…。

Twitter APIでデータ引っ張ってくる部分をモジュール化して、メインから呼び出すようにしていることが影響しているのか、と思って、散々、モジュール呼び出しとか、グローバル変数・ローカル変数とか調べまくった…。

結果、「クエリをURL中に指定する q が重複しているだけ」だった…。

全く別件だけど、Class化してインスタンスを作って呼び出す方法と、メソッドとして呼び出す方法の2つがあって、モジュール単体でもテストできるように 「__name__ == “__main__” : 」を使ってメソッド呼び出ししたのと、メインであインスタンス化して呼び出した部分でアンマッチがあってハマったから、

なんとなく、今回もモジュール呼び出し部分でなにか悪さしているのかな、と思っていた。

(Twitter Develperのサイトから取得するAPIキー各種は問題なかったし、ネットで漁っても「APIキーが一文字違っとか、変な空白やカンマが入っているのが原因だった」という情報が散見されたから、一応調べてみたものの、問題なかったから、てっきり…)

なんてことはない、クエリの q をメインでもつけていて、それをモジュールに渡していて、そしてモジュールでも引数に対してさらに q をつけてGET用のURLを生成していたのが原因だった。

はぁ、スッキリ。分かってよかった。そして、原因究明のために調べまくったのが、結果的に勉強になった。

やっぱり、地道だけど、頭抱えながら、一つ一つのバグを自分で解決していくのが、上達への道なんだな、と思う。

Pythonで with の使い方を学ぶ

with で囲った部分(with のブロック)部分は処理が完結される。

一番分かりやすいのはファイル操作。オープンしたらクローズが必須だけど、結構忘れがち。

with だとオープンするだけで、その処理ブロックが終了したら自動的にクローズしてくれるから便利(クローズ忘れがなくなる)。

with open('test.csv', w) as f:
    writer = csv.writer(f)
    writer = writer.writerow([1,2,3])

# fのクローズは不要!

概要だけでな分かりづらい内容は、具体例があれば分かりやすくなるな、やっぱり。

何でもデータとしてとらえると分析する楽しさが倍増する

今日は営業の仕事でお客さんと会話。数人のお客さんと対応したが、仲の良い人とそうでない人では、当然だけど反応が異なる。

仲良くなっている場合とそうでない場合を簡単に比較すると、会話する機会の差や、メールや電話などでの連絡チャンスの差も影響していると思った。

もちろん、相手の性格とか他の要因もあるけど、そういった定性的な要因ではなくて、できるだけ定量的な要因を見つけてデータ化して分析すると、きっと楽しい。

データってとても大事。そして楽しい。

今更ながらだけど、定量化することの楽しさが分かって、とても嬉しかった。さて、今日はどういうデータを見つけようか。

開発中に出てくるカワイイ奴ら。

最近、Twitter Developerサイトで(かなり久々に)開発にトライしている。

Twitter Developerサイトのドキュメントとにらめっこする日々だが、意外と、リンク切れのサイトが多い。そういう時は、以下のサイトが表示される。

なんだ!?と最初はびっくりしたが、慣れてくるとほっこりするからおもしろい。

リンク切れで表示されるTwitter Developerサイト①
リンク切れで表示されるTwitter Developerサイト②

MacにPython3をインストールしてPathを通す。

Macbook proを使っている。デフォルトではPython2.7 がインストールされているが、これからの主流はPython3になるだろうから入れることにした。

Python3を勉強中で、色んなサイトを拝見しているが、だいたいPython3だし、Python2では対応していない挙動がある。できるだけデフォルト環境を維持したいと思っているが、仕方ないから入れる。

手順は以下の通り。なお、Brewは使っていない。

  1. パッケージをダウンロード&インストールする
  2. Pathをとおす

1)パッケージをダウンロード&インストールする

パッケージのダウンロードは、以下のサイトから。Download PythonThe official home of the Python Programming Languagewww.python.org

ダウンロードしたパッケージをダブルクリックして起動したら、あとは画面に従ってインストールすればOK。

インストール後は、PythonのLauncherが起動できる。Launcher画面で、Python3のインストール先が確認できるのでコピーしておく(Path通すときに必要だから)。

スクリーンショット 2021-08-06 10.38.09
スクリーンショット 2021-08-06 10.37.50

2)Pathをとおす

” ~/.bash_profile ” に上記Pathを追加する。具体的には以下のようにするとOK(必要部分のみ貼り付け↓)

スクリーンショット 2021-08-06 10.39.02

上図のようにPython3のインストール先を、既存のPATHに追記すればOK。注意点は、不要なスペースを入れないこと。エラーが出る。bashのお作法。

~/.bash_profile は vi コマンドでサクッと直接編集。

スクリーンショット 2021-08-06 10.48.00

無事に上記のサンプルを実行することができた。Python2ではend部分が対応してなくてエラーが出ていたが、Python3では実行OK。

学生時代はPATHとおすことすらも時間かかっていたな。なんだか懐かしく感じた。

【調査中】使えそうなAPIのメモ

API = Application Programming Interface のことで、簡単に言うと、YouTubeやTwitter、Instagramの機能を自作プログラミングできるようにするための部品のこと。各サービスが公開している。

久しぶりに開発みたいなことをやってみる。公開されているAPIでなにかおもしろいことができないか…。

まずはどういうAPIがあるか調べてみよう、ということで、今のところ見つけている情報源をメモがてら投稿。

Qiita)https://qiita.com/mikan3rd/items/ba4737023f08bb2ca161
Google Cloud API)https://cloud.google.com/apis/docs/overview?hl=ja
YouTube)https://developers.google.com/youtube/v3/docs/
TripAdvisor)https://developer-tripadvisor.com/content-api/

Trip Advisorは申請しないと使えないので、早速申請してみた。返事はASAPで来るようなので、楽しみに気長に待っておこう。なお、申請サイトはこちら→ https://www.tripadvisor.com/APIAccessSupport

いろいろアイデア考えている=妄想しているが、観光系はどうも自然と湧いてくるというか、リンクしてくるというか、思考の線上にくるので、何かしらトライする可能性が高いな、と思っているところ。

Twitter Dev 開発日記#1

consumer key, consumer Secret keyは、それぞれ、API Key, API Secret Key に名称変更となっている(前々から、API Key, API Secret Keyはカッコ書きしてあったみたいだけど、本格的に変更になっている)。

それと、Google Colab上でも、pip list | grep requests とか、Linuxコマンドが実行できる。びっくりした。うれしい。

というプチメモ。

Googleカレンダの設定と、判断は夜じゃなくて朝にすべしという教訓。

Googleカレンダには「マイカレンダ」という機能がある。用途ごとにカレンダ作成できる機能で、僕は「仕事」とか「自己研鑽」とか、そういうカテゴリで使っている。

このマイカレンダは、Googleカレンダの画面左側に表示されていて、順番は新しく作成されたものから上に表示され、かつ、順番はそのままだと変更できない。

なので、順番を変更する場合は、各マイカレンダの名称を例えば頭文字に「00」とか「01」とかナンバリングしてあげる必要がある。こうすれば、名前の先頭部分で若い順に表示されるので、ある意味、自分の好きな順番で表示させることができる。

このマイカレンダの順番は、地味なところで効いてくる。予約を新規作成した際に、どのマイカレンダなのかを設定する部分があるが、デフォルトで入るのが先頭のマイカレンダだし、選択する順番(リスト表示される順番)は、マイカレンダの表示順番なのだ。

個人的に一番厄介なのは「デフォルトの値」。何が厄介かというと、デフォルト値=先頭のマイカレンダが、他の外部アプリ連携時に自動で選択される、ということだ。具体的には、WebexというZoomと同類のWebコミュニケーションツールがあるのだが、GoogleカレンダとWebexを連携させて、Webexで会議予約・スケジューリングをすると、先頭のマイカレンダのカテゴリでGoogleカレンダに予約登録される(自動反映される)。

一つのカレンダのみを、他の仲間を共有しているのだが、どうも共有しているカレンダは優先して先頭に表示されるようで、名前冒頭に「02」をつけても、なぜか「01」が先頭に表示されない…。Webexの自動反映は、共有したくないのに…。

散々調べたけど情報がなく、どうやらマイカレンダの表示は柔軟に変更できず、上記のとおり、名前の先頭に数字をもってくることで対応するしかない模様。結局、こういうものだ、と断念。

失敗したのは、夜にこの作業を行ったこと。

とあるサイトには、以下の手順が紹介されていた。

1)対象のマイカレンダをエクスポート
2)対象のマイカレンダを削除
3)マイカレンダを新規作成
4)新規作成したマイカレンダに1のファイルをインポート

素直に従って、エクスポートして削除したのが運の尽き。どうやらちゃんとエクスポートされておらず、全部が無に帰してしまった(涙)

スクリーンショット 2021-07-12 22.58.18
インポート失敗画面。OKじゃないよ、本当…。

本来ならば、以下の手順を踏むべきだ。

① 対象のマイカレンダをエクスポート
② マイカレンダを新規作成
③ 新規作成したマイカレンダに1のファイルをインポート
④ ②のマイカレンダにデータが反映されていることを確認
⑤ ①のマイカレンダを削除

冷静に考えたら分かる話だし、普段ならできているのに、どうして…(涙)やはり、大事な決断や作業は夜ではなくて、朝に実施しべきだ。文字踊り、身にしみた(とほほ…)。

ま、仕方がない、良いネタができたということで、前向きにやっていこう。

それにしても、Googleのサービスにしては、あまり柔軟に設定変更ができないな、と思った。正直意外。もしくは、何かの考えがあって固定されているのか?痛い思いして、興味が湧いてきた。怪我の功名…か?

(追伸)
インポートできなかったのは、エクスポートしたファイル(Zip)のまま、インポートしようとしたことが原因だった。回答してicalファイルをインポートしたら、無事に復活させることができた。ふぅ、一安心。