RとPython、SQLの書き方が混乱するのでそれぞれ整理してみました。
内容に関して間違いがあればご指摘頂けますと幸いです。
また「---」は現在調査中の項目であり、随時追記していきます。
2023/3/26 追記 ------------------------------------------------------------------------------
R初学者のためのtidyverse100本ノックを作成しました。Rのコードに関してはこちらのほうがより詳細に分かりやすいかと思いますのでご参考ください。
読み込み関連
内容 | R | Python | SQL |
---|---|---|---|
csv読み込み | read.csv("hoge.csv") | pd.read_csv("hoge.csv") | --- |
選択して読み込み | read.csv( file.choose() ) | --- | --- |
データの確認
内容 | R | Python | SQL |
---|---|---|---|
行列数の確認 | dim(df) | df.shape | --- |
行数の確認 | nrow(df) | len(df) | count(hoge) |
データ型の確認 | str(df) | df.dtypes | --- |
先頭行の確認 | head(df) | df.head(3) | sel * sample 3 |
カラム名の確認 | names(df) | --- | --- |
要約統計量の確認 | summary(df) | df.describe(include='all') またはdf.info() |
(自分で計算する必要有) |
行列の抽出・加工
内容 | R | Python | SQL |
---|---|---|---|
特定列の抽出 | df$hoge | df["hoge"] | sel hoge |
新規列の追加 | mutate(df,hoge="abc") | df["hoge"]="abc" | sel 'abc' as hoge |
特定列の値を条件にdfの抽出 | filter(df,hoge=="abc") | df[df['huge'] == 'abc'] またはdf.query('hoge=="abc"') |
… where hoge ='abc' and huga ='abc' |
特定列の値を条件に別の列を追加 | mutate(df,hoga = if_else(hoge == "aaa" ,1,0))) |
df['huga']= df["hoge"].apply(lambda x:1 if x="aaa" else 0) ※後述のleft_joinも参考 |
sel CASE WHEN hoge = 'aaa' THEN 0 WHEN hoge = 'bbb' THEN 1 ELSE 'other' END |
特定列の値を条件に別の値に書き換え | 同上 mutateで追加する追加列名と置換条件を揃える | df["hoge"]= df["hoge"].replace({"aaa":0,"bbb":1}) |
同上 |
不要行の削除 | --- | df.drop(["hoge"],axis=0) | --- |
不要列の削除 | df[,hoge]<-NULL | df.drop(["hoge"],axis=1) | (対象外) |
テーブルの結合
内容 | R | Python | SQL |
---|---|---|---|
left join | left_join(df1,df2,by="hoge") | pd.merge(df1,df2,left_on="hoge",right_on="huge",how="left") | from t1 left join t2 on t1.hoge = t2.hoge |
inner join | inner_join(df1 , df2 ,by="hoge") | pd.merge(df1,df2,on="hoge",how="inner") | from t1 inner join t2 on t1.hoge = t2.hoge |
上下方向の結合 | rbind(df1, df2) | pd.concat([df1, df2],axis=0) | t1 UNION ALL t2 |
集計
内容 | R | Python | SQL |
---|---|---|---|
group_byの処理 | group_by(df,hoge)%>% summarise(huga=SUM(values)) |
df.groupby('hoge').sum()["values"] | sel sum(huga)… where… GROUP BY 1 |
pivot_tableの作成 | pivot_wider(df,names_from = "year", values_from = "amount") ※動作未検証 |
pd.pivot_table(data=df ,index="~" ,colmuns="~" ,values="~" ,aggfunc="sum") |
sel a,b,c from … PIVOT(SUM([huga]) FOR [hoge] IN (a,b,c)) as … where … ※動作未検証 |
可視化・分析
内容 | R | Python | SQL |
---|---|---|---|
散布図 | plot(hoge,huga) | plt.scatter(hoge,huga) | (対象外) |
ヒストグラム | hist(df, breaks=10) | plt.hist(x, bins=10) | (対象外) |
重回帰分析 | model = lm(hoge~huga+hugo) summary(model) |
lr = LinearRegression() model = lr.fit(X_train,y_train) result = model.predict(X_test) |
(対象外) |
その他
内容 | R | Python | SQL |
---|---|---|---|
コメント記述方法 | # コメント | # コメント | --コメント または /* コメント */ |
改行関連 | 『パイプ演算子』 例. df=iris %>% filter(Species=='setosa') |
『\でコード改行可』 例. hogehoge\ hogehoge |
(任意の位置で改行可) |
CSV出力 | write.table(df1, "hoge.csv" ,append = F #上書き ,sep = "," #カンマ区切り ,row.names = F #行名を加えるか ,quote = F) |
df.to_csv("hoge.csv", encoding="cp932") | --- |
※参考にした記事
R と Python よく出るテーブル処理対応表 https://kopaprin.hatenadiary.jp/entry/2020/06/04/003407
Rとdplyrでピボットテーブル https://qiita.com/ishiijunpei/items/bc8da014a18e2a849978
ひと目でわかるPandasとSQLの対応表 https://qiita.com/kannoma/items/d8ab1f7b6cfa62b05707
SQL ServerのPIVOT句・UNPIVOT句 https://www.casleyconsulting.co.jp/blog/engineer/162/