ひとメモ

当ページのリンクには広告が含まれています

Pythonで自分のツイートをグラフにして分析してみよう!(改訂版)

 こんにちは、ひと(@hito_waft)です。

以前こんな記事を書きました。 

hwhw.hatenablog.com

出てくるグラフは同じなんですが、もっといい感じのプログラムで簡単にツイートをグラフにできるようになったので記事にしておきます。

 

この記事を読んでできること

f:id:hwhw:20170330020229p:image

 上のグラフを見てください。私はロックバンドのサカナクションと[Alexandros]が好きなのですが、それぞれのボーカル、山口一郎さんと世界一かっこいい川上洋平さんについてツイートした回数を月ごとの集計でグラフにしたものです。(名前が入ってるツイートだけ)

 2011年の9月頃からサカナの一郎さんのファンになり、2012年の9月頃から[Alexandros]の洋平さんのファンになり、その後は完全に[Alexandros]派になった様子が見て取れます。

 大きな波が来てるのはたぶんライブに行った時か何かでしょう。

こんな感じのグラフを簡単に作ることができます。ただTwitterの過去ログを眺めるだけより楽しいよ!

 

前提

Python実行環境は整っているものとします。pandasとmatplotlibがないならインストールしておいてください。

 あらかじめ全ツイート履歴をダウンロードして解凍しておいてください。そのうちのCSVファイルを使います。

 

では早速コードを見てみましょう

gist.github.com

 すぐ使う人向け、使い方解説

12行目のhoge/tweets.csvとなってるところを自分が保存したツイート履歴のCSVファイルのパスに置き換えます。

19行目では{"key1":"value1", "key2":"value2", ...}の形式で、ツイートから抜き出したい単語を指定します。keyのところにはグラフの凡例に出す名前を入れます。※日本語だと文字化けするのでローマ字で。valueのところには抜き出したい単語そのものを入れます。ここでは日本語で大丈夫。表記揺れがあるものを同時に抜き出したい場合、|(パイプ)で区切ります。猫、ネコ、ねこ等を一緒に抜き出せます。(例では洋平|ようぺ)

 そして実行!するとグラフが出てきます。色々言葉を変えて楽しみましょう。

 

詳しく解説

In[1]のブロックでは使うライブラリをインポートしています。

 

In[2]ではCSVファイルを読み込んでいます。その際parse_dates= オプションでタイムスタンプを日時情報として扱えるようにしています。

次の行でタイムスタンプをデータフレームのインデックスにし、その次の行でツイートした内容が入っている"text"以外の列(個々のツイートのID等)をなくしています。この段階ではツイート内容にタイムスタンプインデックスがついただけのデータフレームになっています。

 

In[3]ではディクショナリ形式でキーワードを指定しています。for文ではその指定したキーワードをitemsメソッドで同時に取得し、keyを列の名前としてデータフレームに列を追加しています。その中身はvalueで指定したキーワードがtextに含まれるか含まれないかの真理値シリーズです。

ここまできたら、ツイートの内容は邪魔になるので(残っていると文字列なのでsumできない)dropメソッドで落としておきます。axis=1というのは列を扱うというオプションです。指定しなければ行(axis=0)に対して操作が行われます。

 

In[4]ではインデックスにしたタイムスタンプを月毎にまとめ、それぞれの列の値も合計しています。真理値はTrueが1、Falseが0として扱われるのでそのままsumメソッドで合計できます。そしてプロット。グラフができました。やったね。

 

 

全部この本(Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理)を読んでできるようになりました。(私が読んだのは第1版ですが、Python3に対応した第2版が出てるので買うしかない)

Amazonではそんなに評価高くなかったので、どうかなーと思ったのですが、めちゃめちゃ役に立ちました。pandasの作者さんが書いたそうな。pandas愛を感じます。Twitterのデータ取得は認証がいるようになったので、できませんでしたが、それ以外は特に問題なく動きました。

こういう本を一冊通読しておくのは自分の能力の底上げになりますね。情報の一つ一つはググれば出てくるかもしれませんが、それで行ったり来たりする時間の無駄を考えると、読んで良かったなと思います。

今まで入れるだけ入れてたけど使い方がよくわからなかった、IPythonやjupyter notebookをこの本を見てから使うようになったのですが、もうね、めっっっっっちゃ便利です。特に私のように試行錯誤を繰り返す初心者には心強い味方になってくれるでしょう。みんなも使うといいよ。

 

ニキビが治らないのは化粧品に頼りすぎているからかもよ

f:id:hwhw:20170423234603j:image

ニキビが治らないなら皮膚科へ行きましょう!

そんなもんわかっとるわい、と思われるかもしれません。それはそうと、ちょっとこれを見てください。

https://www.dermatol.or.jp/uploads/uploads/files/guideline/acne guideline.pdf

尋常性痤瘡(ニキビ)の治療ガイドラインです。5年で改訂らしいので、2016年版が最新です。(2017年現在)

 

ガイドラインの内容は?

治療ガイドラインなので、お医者さんがより良い治療をするために読むものですね。ですが、私たちにも役立ちます。2ページ目の推奨度の分類を見てください。ざっくり言うと、より科学的に効果があると認められている治療法が推奨度が高いということです。当たり前っちゃ当たり前ですね。

C1以上であれば推奨される治療で、Aに近付くほどよりおすすめの治療ということがいえます。

 

それを踏まえて6ページの表を見てみましょう。まずビタミン薬内服が有効か?という項目では、推奨度C2となっていますね。あれ?ニキビにはビタミンってあちこちで言われてるけどそうなんですね。(もしお医者さんに処方された場合は指示に従ってください。あくまでもガイドラインなので個人差があるはずです。)

 次に、痤瘡用基礎化粧品の使用が有効か?という項目があります。こちらは推奨度C1となっています。こちらは一応選択肢の一つとして推奨されるようです。

 では表の他の部分も眺めてみてください。推奨度A(強く推奨されている)がいくつか見つかります。これは処方薬ですね。医者に行かないと手に入れることができません。

 

統計が大事

この推奨度が何によって決まっているのかというと、エビデンス(証拠)のレベルです。これもガイドラインの中に説明がありますが、すごく簡単に言うと統計的に答えが導かれている物はそうでないものより信用できるということです。さらにその研究をいくつもまとめて分析したものが、もっとも質の高いエビデンスとして扱われます。

 

ニキビ用化粧品もいいけれど…

私も色々なニキビ用化粧品を試してきました。効いた!と思ったものも、全然効かない…と思ったものもあります。

そもそも、自分の肌の調子は季節の変化(花粉や気温)、月経の周期等により変化するものです。しかもニキビの原因は人それぞれ。

なので、その化粧品が本当に効いているのか、あるいはただの体調の変化で肌の調子が良くなったのかは統計の知識を持って調べてみなければわかりません。

化粧品が悪いとはいいません。大抵の場合、化粧品の開発でも限られた範囲(薬事法)でもより良いもの作ろう、と研究者の方々が頑張っているのだと思います。ですが、より効果があると学術的に認められているものがあるのだから、まずそれを使ってみるのが一番良いでしょう。治ったらなんぼでもパッケージが綺麗だとか、香りが良いとかの好きな化粧品を使えばいいのです。まずは治療が先決!

残念ながら皮膚科に行って、薬を塗れば3日でニキビが治りました!というようなものではなく、しばらく通院を継続することが必要な場合がほとんどだと思います。継続するためには、何よりも信頼できるお医者さんを見つけることが一番大事です。なので皮膚科に行きましょう。大丈夫、きっと綺麗な肌になりますよ。

 

 

 〈おまけ〉

この記事を書いたのは、実は「統計学が最強の学問である」という本を読んで感銘を受けたからです。

「統計って聞いたことはあるけど、具体的にどういうことをしてるのかよくわからない…」という状態でしたが、本を読んで「なるほど統計学って最強だな!」となりました。今後の人生の指針に。

 

Raspberry Pi 3を二ヶ月弱使ってみての雑感

ラズベリーパイ(以下ラズパイ)とは

ラズパイの使い方は人それぞれです。1万円以内で買える小型のLinuxパソコンとしても使えるし、今流行りのIoTに使うことも。元々子供のSTEM(Science, Technology, Engineering and Mathematics)教育用らしいです。なので色々プログラミング言語が入ってたりします。普通のPCと違うのは、GPIO(General Purpose Input/Output)ピンというものが付いているところです。汎用インプット・アウトプットピンですね。このピンを通して電気を流し、自分で作った外部の機器等を操作したりセンサーからの情報を読み取ったりできます。楽しい。 

www.hitowaft.work

 

元々入ってるソフト

OSは自分で入れます。ラズパイ向けのRaspbianというやつが良いでしょう。以下Raspbianに元々入ってるソフトで、私が触ったやつ。

  • Python(2と3)
  • Scratch(子供向けプログラミング言語)
  • Libre Office(オープンソースのoffice)
  • Sonic Pi(コードを書いて音楽を作れるやつ)
  • Minecraft (建物作ったりするゲーム)
  • Mathematica(本当はウン万円する高度な計算ソフト)
  • Chromium(Webブラウザ)
 使い心地

Python、Scratch、Sonic Pi、Minecraftは特に問題なく動作しました。

Minecraftは普通のと違って敵が出てこないみたいです。あんまりやってないから知らないけど。

Chromiumはちょっと重め。

Libre Officeの表計算ソフト(エクセルみたいなの)は、私の全ツイート(80000程度のツイートデータ)を読み込んだらめちゃ重くなったので使い物になりませんでした。

普通のエクセルでもそんなものかもしれない。

Mathematicaはそもそもあんまり使い方がわかってないのですが、本気で使うにはラズパイでは重すぎると思います。でも何となく楽しいことができそうな雰囲気があります。

 

ラズパイって何ができるの?

人それぞれですが、私は今のところこんな感じの流れで遊んでいます。

  1. IoTやりたい。電子工作!とりあえずLチカ!
  2. Scratchおもろいやん!
  3. Sonic Piたーのしー!
  4. Pythonでツイート分析(最近ずっとこれ)
 
 電子工作

私は「何かロボとか作りたい…」と思って行った本屋さんで存在を知りました。なので最初はどちらかというと電子工作寄りの目的でした。電子部品売ってるお店に人生で初めて足を踏み入れたのですが、あのワクワクったらなかったです。行ったことない人は、行ってみるといいと思います。東京ならアキバ、大阪なら日本橋。

で、買ってきてしばらくは電子工作界の'hello,world!'ことLチカ(LEDをチカチカ点滅させる)をやったりしてました。楽しい。でも電子工作やるなら何らかのセンサーがあった方が絶対楽しいと思います。私はまだ買ってないので、今は電子工作よりPythonの勉強してます。

Scratch

ブロックを積み重ねてアニメーションとかゲームとか簡単に作れます。直感的に操作できるので、子供でも楽しく遊べそうです。プログラミングの基礎もしっかり勉強できます。しかも出来上がった作品の公開がとても簡単。公式サイトにアップできます。私もごくシンプルなゲーム(のようなもの)を作って公開しましたが、外国の人がコメントくれて嬉しかったです。子供がいるならかなりオススメ。

Sonic Pi

丁寧なチュートリアルがあるので、それっぽい音楽が簡単に作れます。サカナクション好きなら楽しめそう。何となく。

Python

今はPythonで遊んでます。他の言語と比べてかなり取っつきやすいと思います。今流行りのデータ分析にもオススメってあちこちに書いてたし。

 

思うこと

何かインストール中に別の作業(Pythonで書いたコードを動かしたり)すると、フリーズしてしまうことが何度かありました。値段が値段なので、仕方ないなと思ってます。あと、電子工作で遊ぶならGPIOピンの部分だけふたが開くタイプのケースを買いましょう。私はうっかりと違うのを買ったので、何か繋げる時はふた全開です。

 なんだかんだラズパイを買ってから、色々と勉強する気になったので本当に買ってよかったです。ラズパイ ゼロというもっと安くて小さいやつ(税込702円だとか)も最近日本でも買えるようになったみたいなので、みんなも買って遊びましょう。それでは!

 

おすすめの本↓ 

大きめ柑橘おいしいけど皮むきにくくない?

みなさん、はっさくは好きですか?私は大好きです。

冬の温州みかんが終わり、寂しくなった心の隙間を埋めてくれるのが??そう、はっさくですよね。

はっさくライフの向上に、この間めっちゃいいものを買ったので紹介します。ムッキーちゃんです。

f:id:hwhw:20170315000505j:image

 

超時短便利グッズ

 大きめの柑橘が家族みんな大好きなのですが、みかんと違って少し皮を剥くのに手間がかかりますよね?

中の薄皮まで剥かないといけないし。なので面倒な時はちょっと食べるのを躊躇してしまうほどでした。

そこでムッキーちゃんの登場です。

まず外の分厚い皮を、プラスチック製の鋭い刃が何なく切り目を入れてくれます。切り目が入っているだけで、段違いの剥きやすさ!

爪が多少伸びてようが、逆に深爪気味だろうが関係ありません。

もうこの段階で、「はあ〜、ええもん買ったわい…」と大満足です。しかしそれだけで終わりではありません。薄皮もめっちゃ楽に剥けるようになっているのです。

今度は金属の刃に向けて、すっと一房ずつ滑らせます。するとまっすぐ皮に切り目が入り、ささっと薄皮も剥くことができるではありませんか!

これはね、実際にやらないとその凄さが実感できないと思いますが、私は大興奮でした。今までの労力は何やったんや?と。しかも楽しい。

興奮のあまり一度に2つ剥きましたが、今まで2人がかりで1個分剥くのにかかっていたのと同じ時間で楽々剥けてしまいました。

しかもバラバラにならず綺麗に剥けます。350円くらいしましたが、それ以上の価値はあるとはっきり言えます。

これで今後ははっさくが安い時も遠慮なくたくさん買えます。

グレープフルーツも今までは半分に切って、周りに汁を飛び散らせながらスプーンで食べていましたが、これがあれば綺麗に楽に食べることができるでしょう。

私は手に入れたのです。文明の利器を!ああ今、私は猿から人間に進化したんだ!そう感じました。

猿から人間になりたい人は、ぜひ使ってみてください。

 

公式動画もありました


ムッキーちゃん (公式動画)

 

剥いた外皮の使い道

よく洗ってお風呂に入れると、とても良い香り!

光毒性があるかもしれないので、朝風呂にはしない方がいいかも。あと敏感肌の人も要注意です。

PythonでTwitterのbotを作ろう!(定期投稿タイプ)

定期投稿する簡単なbotを作ります

 

いくつも用意しておいた文章の中から、ランダムで10分に1回投稿します。かなり単純ですが、色んな応用例が考えられますね。

以下で作り方を説明します。今回は定期投稿するbotについてのみ解説します。(リプライに返事等はしません)

全ての作業はラズベリーパイ3で行なっています。OSはLinuxの一種のraspbianです。

まずはbot用アカウント作成

 Twitterのサイトへ行き、作りたいbotの名前でアカウントを作成します。

この時メールアドレスが他のアカウントと重複していると作れないのですが、Gmailを使ってる場合はエイリアス機能というやつで解決できます。

例えば手持ちのGmailアドレスが"temochi@gmail.com"だとすると、"temochi+bot@gmail.com"などの様に、太字部分を付け足しても前者のメールアドレス("temochi@gmail.com")にメールが届くという仕組みです。

これで登録しておけば、別のメールアドレスだと認識されます。とっても便利。

また電話番号も重複していると登録できません。あらかじめ元々持っているTwitterアカウントに紐付けされている電話番号を削除しておけば問題ないので、先に消しておきましょう。

次の段階では電話番号の登録が必要になります。

 

必要なモジュールをインストール

sudo pip3 install requests_oauthlib 


これをターミナルに打って、インストールしておきます。

 

キーやトークンを取得

https://apps.twitter.com/

上記のサイトにアクセスし、Create New Appをクリック、上からbotの名前・説明、URLを入力します。規約に同意するチェックを入れて、下のボタンを押すと登録できます。

この時、さっき作ったbot用アカウントに電話番号が登録されていないとエラーが出るので気をつけてください。

登録できたらKeys and Access Tokensというところを開くと、以下のファイルに対応するキー4つが見つかるはずです。トークンはCreate my access tokenボタンを押せば出ます。

取得したキーをsettings.pyという名前で作ったファイルに以下のように保存しておきます。XXXXXXの部分に取得したキー等をそれぞれ入力します。(実際はもう少し長い文字列)

gist.github.com

 

実際のコード

gist.github.com

 では実際のコードを見てみましょう。これを"tweet.py"みたいな名前で保存しておきます。

まずこのコードを動かすためのモジュールがいくつかインポートされています。5行目でインポートされているのが、先ほど作った設定ファイルです。

11行目にツイートしたい内容を入力します。ダブルクォーテーション(")でくくり、コンマで区切って入力してください。

13行目で先ほど入力した内容の中から一つがrandomtweetという変数に入力されます。

14行目、15行目ではタイムスタンプを用意しています。これは、Twitterに一定時間内に全く同じ文言を何度もツイートしようとするとエラーが出るので、それを避けるためです。いらなかったら消してもOK。

17行目でrandomtweetとタイムスタンプを合わせてツイート内容を用意。

あとはインポートしたモジュールがうまいことしてくれます。詳しく知りたい人は下部にリンクした参考サイトを見てください。

実行してみてエラーが出ず、きちんとツイートされているようなら次へ進んでください。定期実行してみましょう。

 

cronの設定

cronとは決まった時間にプログラムを実行してくれるタイマーみたいなものです。さあここからがちょっとややこしいんですが、私はラズベリーパイでやってるのでそのやり方を説明します。

まずターミナルでcrontab -eと入力します。使うエディタを聞かれるので、2番のnanoを選びます。そして下の空いてるところに*/3 * * * * python3 /home/pi/tweet.py等と入力し(自分が保存したプログラムのパスを入れてください)、Ctrl+oを押してEnterで保存し、Ctrl+xを押して終了します。これで3分おきにプログラムが実行され、ツイートされます。

 詳しくはこのサイトなどを見てください。

cronの設定方法 - Qiita

私が引っかかったポイントを説明しておきます。 アスタリスク(*)の間には一つずつスペースを入れ、アスタリスクと何分おきかを示すスラッシュ(/)の間にはスペースを入れません。

 

Herokuを使って定期実行できるようになりました(2017/06/04追記)

少しコードに変更(APIキーとタイムスタンプの部分)がありますので、注意してください。1番短い間隔で、10分おきにツイートできます。

hwhw.hatenablog.com

 

 

もっと簡単にbotを作る

もっと簡単にbotを作れるwebサービスもあるようですが、短くて30分おきにしかツイートできないようなので、私は使いませんでした。それくらいの間隔で充分というなら便利に使えそうです。なので貼っておきます。

自分の普段使ってるアカウントで、何かのお知らせ定期ツイートだけしたいという人もこういうサービス使えば簡単そう。

 twittbot - enjoy

 

注意事項

Twitterの規約はしっかり読んでおきましょう。うっかりするとbotだけでなく、通常利用のアカウントまで凍結される恐れがあります。

The Twitter Rules

この中に気になる事項があって、複数アカウント取得するのはもしや禁止なのでは?と思ったのですが、以下のサイトによると、攻撃的なアカウントでなければ大丈夫なようです。人を傷つけることのないbotを作り、楽しいTwitterライフを!

Twitterルール改定──人種や性的指向へのヘイト行為や脅迫行為など、禁止事項が詳細に - ITmedia NEWS

 

参考サイト

かなり参考にさせてもらいました。わかりやすいです。

 PythonでTwitterしてみた - Qiita

グラフにすればよくわかる!Twitterから自分のツイートをダウンロードして分析する方法。

(2017/03/30追記:もっとわかりやすく使いやすいプログラムを書けたので新しい記事を書きました。下のリンクから飛んでください。)

hwhw.hatenablog.com

 

Twitterでよくある診断アプリは好きですか?自分がどんな人間かわかってるつもりでも、目に見える形にまとめられると新たな発見があって面白いですよね。

ただ、ああいうアプリではTwitterの仕様により、過去の全ツイートを読み込んで分析するということができません。ツイート頻度が高い人では特に、ごく最近のツイートからしか結果に反映されなくてつまらなかった…ということもあります。

 

それならPythonで簡単診断!

それならば!Python(Pythonとは、初心者にも使いやすいプログラミング言語です。)を使って自分で色々と自分のツイートを分析してみましょう。以下のグラフを見てください。これは私の全ツイート履歴から、非常に辛い気持ちを表す言葉が含まれるツイートの数を時系列で表したものです。私は双極性障害という病気持ちなので、かなりはっきりした波があることがわかります。

f:id:hwhw:20170312014058p:image

 これだけでも何となく面白いですが、これに"お金"という言葉を含むツイートのグラフを重ねてみると…

f:id:hwhw:20170312014149p:image

こうなりました。お金について言及している時(私の場合ほぼお金がない時)には、やはり死にたい気持ちも強くなるのかもしれませんね。こうやって重ねてグラフにすると、とてもわかりやすいです。

 今回はこのように自分の全ツイート履歴から、任意の言葉を含むツイートを時系列でグラフにするということを説明します。私は自分のメンタル分析・改善を目的としてるので暗いグラフを作ってますが、皆さんは好きな人・物などでグラフを作ってみると楽しいと思います。

 

Python環境構築

環境構築についてはOSによって違うので、以下のサイトを参考にしてください。すみません、あんまり詳しくないので丸投げ。ちなみに私はRaspberry pi3を使っていて、OSはRaspbianです。ラズパイは教育向けにできてるらしく、Pythonも元々入っています。みんなもラズパイ買っちゃいなよ。

 

 

いくつかライブラリをインストール

以下ラズパイのターミナルにコマンドを打ちます。環境によって違うかもしれませんが、ググればいっぱい情報出てくるはず。

 

sudo pip3 install pandas matplotlib numpy

 

もしこの辺でわからないことがあったら、コメントに書いてもらえればわかることなら答えます。

 

ツイートの履歴を取得

Twitterの設定の中に全ツイート履歴をリクエストするというボタンがあるので押してください。しばらくすると登録メールアドレス宛に送られてきます。解凍して適当な場所に保管してください。

 

さあ実践

まずは下のコードをメモ帳などのテキストエディタに貼り付け、"twigraph.py"という名前で保存します。拡張子(.py)があっていれば、名前は今適当に考えただけなので違ってもOKです。

gist.github.com

まず8行目でダウンロードしたツイート履歴を読み込んでいます。自分が保存した場所のパスを入力してください。その次9行目から11行目に自分が抽出したいキーワードを入力します。3つまで同時に扱えるようにしました。それより多いと重なり過ぎてわけわからんことになると思います。11行目は今使っていないので、コメントアウトしています。(先頭に#をつけて無視されるようにしている)キーワードを3つ使うときは#を外します。

その後はデータをグラフに出力できる形式に整えています。20行目から24行目、これも今使っていないのでコメントアウトしています。この場合はこの場合は複数行なので行の前後をダブルクォーテーション3つ(""")で挟んでいます。これもキーワードを3つ使うときは外します。

34行目から36行目には、グラフの凡例を入れます。日本語入力するには設定が大変そうなので、ローマ字で入れてください。そしてまた保存しておきます。

 

 いざ実行

 自分の構築した環境で実行してみてください。どうでしょう?グラフがちゃんと出ましたか?

出てないかもしれませんね。私もグラフ出るようになるまでめっちゃ時間かかりました。backendの設定が云々とかあるかもしれません。しかしそろそろ疲れたので終わりにします。何かあれば聞いてください!私も初心者なので答えられないかもしれませんが、一緒に考えましょう。

ちゃんとグラフ出た人は色々キーワード変えて楽しんでみてください。それでは!

 

(2017/03/16追記:matplotlibバックエンドの設定、下のサイト見るとわかりやすいです。)

matplotlibのデフォルトのバックエンドをPyQt4にする - 計算物理屋の研究備忘録

(2017/3/19追記:同じキーワードで複数の呼び名が考えられる時(ex.猫,にゃんこ,ネコ)、まとめるにはstr.contains("猫|にゃんこ|ネコ")という風に指定します) 

【初心者向け】Python標準入力の取扱い

 

先日紹介したpaizaですが、スキルチェック問題を解くのに初心者は絶対つまづくんじゃ?と思ったポイントがあったので、簡単に解説したいと思います。 

 

www.hitowaft.work

 

 

一番簡単なの

まず一行・一回だけ読み込み。これは簡単。

gist.github.com

 

 3行目で標準入力から一行代入されます。ここで注意するポイントは、このままだとstr型(文字列)で受け取ることになるということです。文字列ならそれでいいのですが、例えば

gist.github.com

このプログラムで入力が”10”だった場合、何が出力されるかわかりますか?正解は、10×2で20!・・・ではなく”1010”となります。何故こうなるかというと、str型で受け取っているため、数字ではなく文字列として認識されているからです。数字として扱い、計算するにはまずstr型からint型(整数)もしくはfloat型(小数点)に変換する必要があります。

gist.github.com

なので、こう。aに代入する時に、一緒にint型に変換します。これで実行すると”1010”ではなく”20”と計算できました。

 

また、1行ではあるけれど、スペース区切りでいくつかの入力がある場合もあります。"2 10"など。

それぞれを別々の要素として、同じリストに受け取ってみましょう。split()というメソッドでそれが実現できます。

gist.github.com

このかっこの中には区切り文字を指定できますが、詳しくは過去記事で紹介してるサイトを見たほうがわかりやすいと思います。スペースで区切る場合は何も入れなくて大丈夫です。

さて、上のコードで分割はできました。しかし先程と同じように、このままではstr型のままです。では”a = int(input().split())”とすれば良いのでしょうか?ここが私のどハマリしたポイントです。実はそう簡単にいかないのです。”a = int(input().split())”として実行したところ、こんなエラーが出ると思います。

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

int関数の引数はリストじゃあきまへんで~ってことですね。ではどうするか。以下のような方法があります。

 

これが本命

gist.github.com

これで一行丸ごとint型で且つsplit ()関数によって分割されてリストに収納されました。

 

sysモジュールを使う

またsysモジュールを使う方法もあります。使うには三行目のように、あらかじめimportしておく必要があります。これだと複数行の入力をまとめてint型に変換できます。ただ、これだとsplit()を使えないので一行に一つの入力がある時しか使えません。

gist.github.com

 

もしかしたらもっと他にスマートなやり方があるのかもしれませんが、この辺がわかっていれば標準入力だけでつまづくことは少ないと思います。あとはfor文で何とかします。append関数も覚えておくと便利。ループ処理等がわからない初心者さんはとりあえず過去記事で紹介したサイトでお勉強してくださいね。それでは!

 

 

2019年7月16日追記:paiza公式ブログで動画解説してくれてました。

paiza.hatenablog.com