Python&R: クラウドで学ぶはじめてのプログラミング4, グラフを描くver. 5

赤字部分を修正しました。

I.Pythonの場合(ファイル名pythonGraph.ipynb

 

私の担当する授業の出席状況のデータでグラフを描きます。データは次にあります。

 

https://pastebin.com/raw/jdawqqGm

 

データは、1回から6回までの出席のデータです。ただし、個人を特定できないように学籍番号を通し番号にし、一部データを修正しています。

idは通し番号です。departmentは学部です。yearは学年です。l1(エルイチ)-l6(エルロク)までが授業の回数です。

数字の前にアルファベットをつけたのは、Rでは列名を数字ではじめることができないからです。

たぶん、l1-l6は縦型データにしたほうが扱いやすいのだと思いますが、Pythonに慣れていないので、そのまま出席率を集計し、total行を末尾に加えました。

ふつうは列でグラフを描きますが、行をもとにグラフを描きまます。

第1回目は、出席者より受講生を選びましたので100%の出席率です。第3回に80%に下がりましたが、その後もちなおしていることがわかります。

 

 

 

ふつうは列でグラフを描きますが、行をもとにグラフを描きまます。

第一回目は、出席者より受講生を選びましたので100%の出席率です。第3回に80%に下がりましたが、その後もちなおしていることがわかります。

 

pandas_profilingを使う

 

上と同じグラフは得られませんが、pandas_profilingを使えば、データの概要を簡単に取得できます。

pandas_profilingを次の式を実行し、インストールする必要があります。インストールに数分かかります。

 

# install pandas_profiling
!pip install pandas_profiling
 

 

次の1行を実行するだけで、学部別、学年別人数、授業の各回の1の出現割合、つまり、出席率を計算しています。

 

pandas_profiling.ProfileReport(データ名) 

 

相関関係のヒートマップも作成します。正規分布していないので、スピアマンの順位相関係数を選択します。第3回の授業のときに、青色のこさから見て0.7程度の負の相関があるようです。つまり、学年(1、2、4)が高くなるほど、2(1が出席、0が欠席)の数が少ないということです。一般に0.7以上だと比較的強い相関があるとみなします。この場合は、学年と出席の有無という順序尺度(ordinal scale)から擬似的に相関係数を算出しているので、0.7に通常の意味はありませんが、数値が高ければ関係のあることがわかります。

実質1行のスクリプトでデータの概要を把握することができました

 

 

II.Rの場合

 

下はRStudioで実行しました。現在のところAzure Notebooksではdplyrの最新バージョンをインストールでエラーとなり、pvot_longer()を使用できません。現在回避方法を探しています。

 

さすがに、tidyverseは使いやすいです。

まず、データをよこ長からたて長にします。次にby_groupで授業ごとに出席率を計算し、グラフにしました。

 

 

idごとに出席率を集計し、次に学年ごとに平均すると次のようになります。1年生、2年生の出席率は高く、4年生の出席率が低いことがわかります。

 

# A tibble: 3 x 2
year mean

1  0.970
2  0.952
0.571 

 

スクリプト

 

# install the development version of tidyverse
library(devtools)
devtools::install_github("hadley/tidyverse")
# import tidyverse
library(tidyverse)
# load thedata
df0 <- read_csv("https://pastebin.com/raw/KyLBuyZ3")
# wide to long
df0_long <- df0 %>%
  pivot_longer(
    l1:l7, # -nameとしても同じ
    names_to = "lecture", # 列名をtest列にまとめる
    names_prefix = "l", # 列名のgoiを除く
    values_to = "presence") # 得点をscore列にまとめる
df0_long
# calculate attendance by lecture
df0_long_attendance <- df0_long %>% 
  group_by(lecture) %>% 
  summarise(attendance = sum(presence)/35)
df0_long_attendance
# basic line plot with points
ggplot(df0_long_attendance, aes(x=lecture, y=attendance, group=1)) +
  geom_line()+
  geom_point()
# calculate attendance by year
df0_long %>% 
  group_by(id) %>% 
  summarise(year = mean(year), attendance_id = mean(presence)) %>% 
              group_by(year) %>% 
              summarise(mean = mean(attendance_id))

 

III.Google Sheetsの場合

 

not complete

Please follow and like us:
error

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.