アラフォーから始める数字のお勉強 (original) (raw)
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
とりあえずいろいろ試行錯誤して、「就業状態別15歳以上人口(2000年1月~)」という統計表をAPIで取得できるようになりました。
取得したデータをDataFrameにして、15歳以上人口の推移を折れ線グラフにできたので、次は就労者と失業者の割合の推移がわかる積み上げ折れ線グラフが作りたいと思いました。
準備したDataFrameはいろんなデータが並んでいるのですが、
yに設定する値は並びでしか指定できないみたいなので、まずは使うところだけのDataFrameにしました。
3つ足したら15歳以上人口の総数になるはずという目論見でした
で、px.areaというグラフがあるみたいだったので、これかな?と思ってやってみたら
なんか違う
なんか違います。
私の思惑では、少なくとも全体は15歳以上人口の総数と同じ形になるはずだったのに
この形になる予定だった
平坦です。
また行き詰まった。
続きは、もうちょっと元気なときに考えたいと思います。
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
よくわからない状態ではありましたが、とりあえずいろいろ試行錯誤して、「API機能」に手を出し、「就業状態別15歳以上人口(2000年1月~)」という統計表のデータが取得できるようになりました。
読み込めるようになったデータをDataFrameにして、ひとまず折れ線グラフにしてみたのですが、「数値とグラフのマークされている位置が合ってない!」ということで、データが文字列になっていたのに気づいて、グラフにした部分のデータだけ数字にして落ち着くグラフができたところです。
数値はまだあって全部文字列になっていたので、ちょっとやり方を考えなければなりません。
とりあえず昨日思いついた通り、グラフを作る用のDataFrameにするときにデータをfloatにしてみました。
改めてイチからやってみる
調査年月と調査結果データをそれぞれ1回DataFrameにして
調査結果のカラム名になる部分もDataFrameにして
for文で回して1個のDataFrameにするときに、pd.to_numericで文字列をfloatにした
見た目だけじゃなく、ちゃんとfloatになってます
で、同じく折れ線グラフにしてみました。
せっかくなので今回は「15歳以上人口」の(総数)じゃなくて、(男)(女)です。
それっぽいグラフになった
数は違うけど、形はほぼほぼ同じ感じのグラフになりました。
人口って女性の方が多いんですね。知らなかった。
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
よくわからない状態ではありましたが、とりあえず最新の「労働力調査」の月次調査(2024年8月)の1個目の統計表をダウンロードして円グラフを作ってみたりしたのですが、これだとあまりPythonの練習にならないことに気づき、「API機能」に手を出してみることにしました。
とりあえず、「就業状態別15歳以上人口(2000年1月~)」という統計表のデータが取得できるようになったので、
読み込めるようになったデータをDataFrameにして私でも理解できる形にして、ひとまずplotlyを使って折れ線グラフにしてみたのですが、「数値とグラフのマークされている位置が合ってない!」ということに気づいて途方に暮れたところです。
数値とグラフ上のプロットされている位置が違う、、、
何か画期的な解決策が降ってくるんじゃないかと思ってしばらく放置していましたが、
残念ながらまったくそんなことは起きなかったので、
とりあえず、(1)使っているDataFrameをcsvに落としてみてデータを確認してみるのと、(2)plotly以外でグラフにしてみるのを試してみたいと思います。
とりあえず、csvに書き出してみました。
値は表記通りの数字になっているっぽい
「10996」は、正しく「10996」となっているようです。
仕方がないので、同じDataFrameをseabornで折れ線グラフにしてみたいと思います。
なんかすごいことになった、、、
なんかすごいことになったけど、でこぼこなのは同じ。
しかも、最後は「2024年9月の10996」でその前の「10992」から上がっているはずなのに下がってる。
ちなみに、改めてplotlyの方を見てみると、なんかこれまた全然違うグラフになっている。
こっちは最後上がってるけど全然違う
なんなんだ、これは!
seabornのグラフを見て思いついたのは、「データが数字じゃないってこと?」ということだけれども、数字じゃなくてもグラフにしてくれるものなの?
その場合、どういう気持ちでグラフにしてくれたのかしら?
書き出したcsvで確認してみたけれど、普通に計算できるし、データは数字だと思います。
けど、とりあえず確認してみた。
ああ、、、文字列だった
「文字列」じゃん!
「str」って文字列ですよね?
それはそれですごいけど、なんなんだ!
とりあえず、整数にしてみたいと思います。
と思ったら、「,,,」になっている箇所があって.astype(int)と書くのではできなかったので、floatにしました。
なんかそれっぽい!
こっちも!
それっぽいです。
だいぶ落ち着くグラフな気がします。
そうすると、どうすればよかったのでしょうか?
わかりやすいDataFrameにするためにカラム名つけてぐるぐる回したときに、型を指定すればよかったのか?
json読むところで何か指定しなければいけなかったのでしょうか?
明日かんがえます。
今日の参考サイト
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
よくわからない状態ではありましたが、とりあえず最新の「労働力調査」の月次調査(2024年8月)の1個目の統計表をダウンロードして円グラフを作ってみたりしたのですが、これだとあまりPythonの練習にならないことに気づき、「API機能」に手を出してみることにしました。
とりあえず、「就業状態別15歳以上人口(2000年1月~)」という統計表のデータが取得できるようになったので、
読み込めるようになったデータをDataFrameにして私でも理解できる形にして、ひとまずplotlyを使って折れ線グラフにしてみたところです。
とりあえずできた折れ線グラフ
ただやっぱりしっくりこないので、「レンジセレクター」というのをつけてみたいと思います。
レンジセレクターをつけると、横軸(x軸)の範囲を可変にできるようです。
調査年月のデータはただの文字だったので、まずはそこから調査年月の日付のデータの列を作りました。
調査年月から日付のデータを作った
それで、レンジセレクターをつけてみた。
レンジセレクターをつけてみた
10年表示
やっぱりでこぼこしている。
ちょっと心当たりがあったので、仕方なく、読み込んだ元のjsonファイルを見に行ってみると、descriptionというところに次のように書いてありました。
労働力調査では結果を算出するための基礎となる人口(ベンチマーク人口)として推計人口を用いています。
1982年から5年ごとに算出の基礎となるベンチマーク人口の基準を切り替えており、それぞれ切替えに伴う変動があります。
長期時系列表や速報では、2005年10月から2021年12月までの期間を含む数値を、基準切替え後のベンチマーク人口に基づいて遡及又は補正した時系列接続用数値に置き換えて掲載しています。
結果原表及びデータベース収録の数値は、公表当時の数値です。
このため、当該期間は、長期時系列表の数値とデータベースの数値とで異なる場合があります。
いや、関係なさそう。
だって、私が気になっているでこぼこは2017年くらいから最近までずっとだもん。
やっぱり、どっかで何かを間違えたのか?
と思ってよく見てみたら、数値とグラフのマークされている位置が合ってない!
グラフが合ってない!
これは大事になりそうです。
とりあえず、今日参考にしたサイト
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
よくわからない状態ではありましたが、とりあえず最新の「労働力調査」の月次調査(2024年8月)の1個目の統計表をダウンロードして円グラフを作ってみたりしたのですが、これだとあまりPythonの練習にならないことに気づき、「API機能」に手を出してみることにしました。
とりあえず、「就業状態別15歳以上人口(2000年1月~)」という統計表のデータが取得できるようになったのですが、正直よくわからず、
読み込めるようになったデータをDataFrameにして私でも理解できる形にしました。
表の形にできた!
これで、ついにグラフにできそうです!
調査年月と調査結果のデータだったので、まずは「折れ線グラフ」でしょう。
plotlyを使って
1番簡単!という記憶があったのでplotlyを使ってみたけど、、、
「できた!」と思ったけど、、、
ちょっと変?
最後の方、変動が大きすぎじゃない??
と思って、「え〜っ、DataFrameにするとき何か間違った!?」と不安になったのですが、
確認したら、数字的にはそこまで大きな変化じゃないっぽいので、縦軸の目盛りとスタート位置の問題かと思われます。
どうすればいいのか?
いろいろ調べてみましたが、こうにしかなりませんでした。
range_yで縦軸を指定できるっぽいことまではわかったのですが、いろいろ数字を入れてみたもののその指定の仕方の仕組みが今ひとつわかりません。
不恰好
でも、15歳以上の人口って本当にこんなにでこぼこするものなんでしょうか?
なんとなく気持ち悪い。
とりあえず、明日「レンジセレクター」というのを設定してみて、期間の範囲(横軸)を絞ったグラフにしてみたいと思います。
そしたら、もうちょっと落ち着くかもしれない。
今日、参考にしたサイト
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
よくわからない状態ではありましたが、とりあえず最新の「労働力調査」の月次調査(2024年8月)の1個目の統計表をダウンロードして円グラフを作ってみたりしたのですが、これだとあまりPythonの練習にならないことに気づき、「API機能」に手を出してみることにしました。
とりあえず、「就業状態別15歳以上人口(2000年1月~)」という統計表のデータが取得できるようになったのですが、正直よくわからず、
読み込めるようになったデータをDataFrameにして私でも理解できる形にしようとしていたら、思った以上にたくさんのデータが入っていたので、
これは手作業はつらい!
となって、一旦寝たところです。
今日こそはDataFrameまでにはしたい!
名前の部分は前回見つけてあったので、これもDataFrameに読み込んで、列をマージするのをfor文で繰り返していけばうまいこといくんじゃないか?というのが私の仮説です。
カテゴリの情報は見つけてあった
前回はここまでできたけど、この作業をあと4回繰り返すのはつらくて挫折した
調査結果のデータから行を抽出して列を絞ってマージする部分は問題ないと思うので、for文の中にそのまま使えるはずです。
できた!
できました!
これでついにグラフに辿り着きそうな気配がしてきた!!
*****
jsonさん、情報が膨大すぎて意味不明とか言ってごめんなさい。
あなたがカテゴリ名を持っていてくれたおかげで私は楽ができました。
もしかしたらいつか、あなたのデータを見て私も中身が理解できるような日が来たりするかもしれないけど、たぶんそう近々ではないから今後も文句はいうと思います。お許しください。
でも、引き続き情報はたくさん持っていてください。jsonさん、よろしくお願いします。
*****
というわけで、少しだけjsonに親近感を覚えたところで、グラフは明日がんばりたいと思います。
統計局の調査データを、順にPythonでグラフ化していこうチャレンジを始めました。
よくわからない状態ではありましたが、とりあえず最新の「労働力調査」の月次調査(2024年8月)の1個目の統計表をダウンロードして円グラフを作ってみたりしたのですが、これだとあまりPythonの練習にならないことに気づき、「API機能」に手を出してみることにしました。
とりあえず、「就業状態別15歳以上人口(2000年1月~)」という統計表のデータが取得できるようになったのですが、正直よくわからず、
読み込めるようになったデータをDataFrameにして私でも理解できる形にしようとしています。
調査年月のDataFrameができたので、あとは調査結果のデータと紐づけるだけ!と思ったら、調査結果のデータが調査年月の15倍の行数分ありました。
調査年月のDataFrameはできた!
調査結果は15倍の行数あった。。。
ショックを受けつつも、
調査結果の方のDataFrameを「@cat02」と「@cat03」で抽出して、カテゴリ名をつけて、調査年月のDataFrameに足していけばいいんじゃないか?と思いついたところまでが前の記事です。
やってみたいと思います。
まずは、「15歳以上人口」(@cat02が00)の「総数」(@cat03が0)のデータのみを抽出してみると、
抽出してみた
調査年月と同じ行数です!!
微妙にカラムの名前が違ったので、足すところだけにして名前をつけてマージしました。
足せた!
いけそうです。
この調子で全部やってみます。
とりあえず、15歳以上人口について、3種類(総数、男、女)を入れ終わりました。
15歳以上人口については読み込めた!
でも、これをあと4回やるのは正直つらい。
名前も決まってるんだから、for文で回せるんじゃないか?と思います。
けど、今日はもう挫折です。
明日がんばります。
今日お世話になったサイトは以下でした。