空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

1.9 練習問題の回答と解説

注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。

1. 積み上げ棒グラフをcoord_polar()を使って円グラフに変換しなさい

base = ggplot(data=diamonds,
              mapping=aes(factor(1),
                          fill=cut
                          )
              ) + 
  geom_bar(width=1) + 
  labs(x=NULL, y=NULL)

base


を円グラフに変換すると

base + coord_polar(theta="y")


のようになります。

参考資料

ggplot2-book.org

2. labs()は何をするか。ドキュメントを読みなさい。

ggplot2.tidyverse.org
を読むと良いでしょう。
軸やグラフのタイトルといったラベル関係を制御します。

3. coord_quickmap()とcoord_map()とは、何が違うのか。

coord_quickmap()では緯度1度と経度1度の値は等しい平面で地図を描写しますが、coord_map()は mapprojパッケージ*1を用いることによって様々な描写方法で地図を描写することができます。

参考資料

ggplot2-book.org

4. 次のプロットは街中と高速道路との燃費について何を伝えるのか。なぜcoord_fixied()は重要なのか。geom_abline()は何をしているのか。

ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +
  geom_point() + 
  geom_abline() + 
  coord_fixed()


このグラフについて見ていきましょう。

1. 次のプロットは街中と高速道路との燃費について何を伝えるのか。

単純に街中の燃費のいい車は高速道路でも燃費がいいことがわかります。
また、切片0で傾き1の対角線よりも上側に全ての点があることから、どの車においても街中よりも高速道路の方が燃費が良いことがわかります。

2. なぜcoord_fixied()は重要なのか。

ggplot2.tidyverse.org
coord_fixied()についてはこちらのドキュメントを見てください。
グラフの縦軸と横軸の比のコントロールをするものです。
coord_fixied()がない場合、グラフの見た目が悪くなって見にくくなることがあります。

3. geom_abline()は何をしているのか。

ggplot2.tidyverse.org
切片0で傾き1の対角線を表示するのがgeom_abline()の役割です。
グラフ中に引かれている直線を描くための関数です。

1.8 練習問題の回答と解説

注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。

  • 1. このプロットの問題は何か。どうすれば改善できるか。
  • 2. geom_jitter()のどの引数がジッターの量を制御するか。
  • 3. geom_jitter()とgeom_count()を比較対照しなさい
  • 4. geom_boxplot()のデフォルトの位置調整は何か。それを示すmpgデータセットの可視化を作りなさい。
続きを読む

1.7 練習問題の回答と解説

注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。

  • 1. stat_summary()のデフォルトgeomは何か。stat関数ではなくgeom関数を用いて先ほどのコードを書き直すにはどうするか。
    • stat_summary()のデフォルトgeomは何か。
    • stat関数ではなくgeom関数を用いて先ほどのコードを書き直すにはどうするか。
  • 2. geom_col()は何をするか。geom_bar()とどのように異なるか。
  • 3. ほとんどのgeomとstatは対になっており、一緒に使われる。ドキュメントを読んでこれらの対のすべてのリストを作る。何が共通しているか。
  • 4. stat_smooth()はどの変数を計算するか。振る舞いはどの引数が制御するか。
  • 5. 比率棒グラフでは、group=1に設定する必要がある。なぜか。言い換えると次の二つのグラフの問題は何か。
続きを読む

MySQLの新しいやつ

Macを新しくしたので、環境構築をしてMySQLをダウンロードしてインストールしたんですわ。
うん、なんというかすげー楽にMySQL Workbenchまでインストールできた。
びっくり。
MySQLのpathを認識させるとかそういうめんどくさいの一切なし。

便利になってるんだなーという日記でした。

STATAとSPSSで役立つチャンネル

www.youtube.com
そういえば、STATA公式のyoutubeチャンネルと並んでよく使うMike Crowson氏のチャンネルを紹介するのを忘れていたのでご紹介。
STATAだけではなくSPSSの解説もあり非常に役にたつ。

グループごとに連番を振りたい

STATAで言う所の

bysort グループ名: egen = seq()

みたいなことをpython、pandasでやりたい。

実際にやってみる

bysortに相当するのはgroupby()メソッドになる。
pandas.pydata.org
さて、これでデータフレームを指定のグループでまとめられた。
あとはグループごとに連番を代入するだけ。
連番の代入はcumcount()メソッドを使う。
pandas.pydata.org
なのでメソッドチェーンを用いて

データーフレーム['連番を突っ込む列'] = データフレーム.groupby('まとめたいグループ名').cumcount()

となる。

参考資料

stackoverflow.com

CDCのCOVID-19の感染データをapiを使って取得する

data.cdc.gov
のデータセットからデータを取得して性別と年齢階級別の罹患数を求めるためのコードを出したので、やり方を忘れないうちにメモっておく。

使うモジュール

https://dev.socrata.com/foundry/data.cdc.gov/9bhg-hcku
公式のapiのドキュメントを見ると単にRequests(https://docs.python-requests.org/en/latest/)を使うのではなくsodapyを使う。
pypi.org

実際のコード

1) まずはapiサーバーに接続するためのクライアントを設定する

client = Socrata("data.cdc.gov", None)

2) サーバーに接続したらgetメソッドで表を取り出す。

get(dataset_identifier, content_type="json", **kwargs)

dataset_identifierにはjsonのファイル名を代入する。
kwargsのところにはSoQLと呼ばれるSQLっぽいクエリを代入する。
SoQLの詳しい説明は
https://dev.socrata.com/docs/queries/
を参照のこと。

3) 取り出しに成功したらpandasで読み込む

pandas.pydata.org
を用いてデータフレームとして読み込む。

実際のコード例

import pandas as pd
from sodapy import Socrata

client = Socrata("data.cdc.gov", None)
results = client.get("9bhg-hcku",  where="`group`='By Total' and `sex`!='All Sexes'", limit=2000)
df = pd.DataFrame.from_records(results)

ほとんどサンプルのコードと変わらないが、こんな感じでpandasのデータフレームに読み込める。
ここまでできればcsv等から読み込んだ時と同じようにデータの加工ができる。