Python＆R比較表

# プログラミング基礎

## 算術演算子

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/533ddc6d-6fbf-84c2-1c03-56433a4d5936.png)


## 比較演算子(共通)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/e6e5aed0-2a6b-aa00-0ccc-8a3cce82599b.png)

## 文字型
```python:python
type(3)
```
```r:R
mode(3)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/56e740d9-e3d3-9988-9dc7-c4d1665b7230.png)

## 変数
```python:python
x = 10 #変数xに１０を代入
x #変数xを取り出す
```
Rは<-と＝の二つ使えるが慣例的に<-を使う
```r:R
x <- 10 #変数xに１０を代入 
x #変数xを取り出す
```
文字列の代入

```python:python
z = 'hello world!' #文字列を代入するときは'',""のどちらかで囲む
z
```

```r:R
z <- 'hello world!' #文字列を代入するときは'',""のどちらかで囲む
z
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/a8fb6159-f942-1810-76ca-ff38a1cdeb87.png)

## 配列
```python:python
a = [1,2,3,4,5,10]
a
```
```python:python
b = len(a)#要素数を取得
b
```
```python:python
a[0] #最初の要素を取得
```
```python:python
a[-1]#最後の要素を取得
```
```python:python
a[b-1]#最後の要素を取得
```

```r:R
a <- c(1,2,3,4,5,10)
a
```
```r:R
length(a) #要素数を取得
```
```r:R
a[1] #最初の要素を取得
```
```r:R
a[length(a)] #最後の要素を取得
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/79a1abb1-e3e3-f6a0-3394-1313a2b9a8ab.png)

```python:python
a[0:3] #1~3番目の要素を取得
```
```python:python
a[2:] #3番目以降の要素を取得
```
```python:python
a[:3] #3番目までの要素を取得
```

```r:R
a[1:3]#1~3番目の要素を取得
```
```r:R
a[3:length(a)]#3番目以降の要素を取得
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/b11a5782-6c2f-c2de-31a9-1425163c6681.png)

## 処理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/4c872c1a-451d-aa2e-68c6-7dee7a3647eb.png)

### 分岐
```python:python
a = 3

if a == 3:
    print('a is 3')
else:
    print('a is not 3')
```
```r:R
a <- 3

if (a == 3){
    print('a is 3')
}else{
    print('a is not 3')
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/f000b40e-b869-83fc-f994-7819fc52dced.png)

### 論理演算子
#### 論理積

```python:python
# 6歳以上かつ(and)身長120cm以上
age = 5
height = 110

if(6 <= age and 120 <= height):
    print("乗車できます")
else:
    print("乗車できません")
```
```r:R
age <- 6
height <- 120

# 6歳以上かつ(&)身長120cm以上の人
if(6 <= age & 120 <= height){
    print("乗車できます")
}else{
    print("乗車できません")
}
```

#### 論理和
```python:python
# 6歳以上または(or)身長120cm以上
age = 5
height = 110

if(6 <= age or 120 <= height):
    print("乗車できます")
else:
    print("乗車できません")
```
```r:R
age <- 6
height <- 120

# 6歳以上または(|)身長120cm以上の人
if(6 <= age | 120 <= height){
    print("乗車できます")
}else{
    print("乗車できません")
}
```
#### 否定

```python:python
# 6歳ではない(not)人
if not(age == 6):
    print("6歳ではない")
else:
    print("6歳です")
```
```r:R
# 6歳ではない(!)人
if (!6 == age){
    print("6歳ではない人です")
}else{
    print("6歳の人です")
}
```
#### 複数条件

```python:python
age = 61
height = 160

if(6 <= age and 120 >= height) or (60 <= age and 150 <= height):
    print("乗車できます")
else:
    print("乗車できません")
```
```r:R
age <- 59
height <- 160

# 6歳以上かつ(&)身長120cm以上の人
if((6 <= age & 120 >= height) | (60 <= age & 150 <= height)){
    print("乗車できます")
}else{
    print("乗車できません")
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/87ec1b93-24bc-fa6c-6a78-9ac81273d841.png)

### 繰り返し
```python:python
for 変数 in リスト:
     実行したい処理
```
```python:python
a = [1,2,3,4,5,10]

for i in a:
    print(i)
```
```r:R
for (変数 in リスト）{
    実行したい処理
}
```
```r:R
a <- c(1,2,3,4,5,10)

for (i in a){
    print(i)
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/54ce0f96-fc9c-4440-723a-cb055e8fe26b.png)


<details><summary>偶数のみ表示させるには？</summary>

```python:python
a = [1,2,3,4,5,10]

for i in a:
    if i %2 ==0:
        print(i)
```
```r:R
a <- c(1,2,3,4,5,10)

for (i in a){
    if (i %% 2 ==0){
        print(i)
    }
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/38cea7a0-cce7-402a-101a-d87687b100ab.png)

pythonには内包表記と呼ばれる手法があり処理が早い
```python:python
[変数 for 変数 in リスト if 条件]
```

```python:python
[i for i in a if i % 2 ==0]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/29aebd02-f445-4e04-205e-abbd7c60fc15.png)


```r:R
a[a %% 2 == 0]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/be4abe5e-6fc2-5b46-456c-ae39715457a7.png)

</details>

#### while文

```python:python
num=1
while num<10:
    print(num)
    num += 1
```
```r:R
num <- 1
while(num < 10){
    print(num)
    num = num+1
} 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/a3b37dff-83c3-8ae2-09af-ea6879aad04b.png)

## 関数
```python:python
def 関数名(引数):
　　実行する処理
　　return 戻り値
```
```r:R
関数名 <- function(引数){
　　実行する処理
　　return (戻り値)
}
```
```python:python
def bmi(height,weight):
    result = weight / height / height
    return result
```
```r:R
bmi <- function(height,weight){
    result <- weight / height / height
    return (result)
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/34a17900-958f-31e8-c341-37c2dcffd4fa.png)


## データフレーム
```python:python
import pandas as pd 

data = [
    ['吉田',60,40],
    ['三苫',30,80],
    ['浅野',70,60],
    ['久保',10,80],
]

score = pd.DataFrame(data,columns=['氏名','数学','英語'])
score
```

```r:R
name <- c('吉田','浅野','三苫','久保')
math <- c(60,30,70,10)
english <- c(40,80,60,80)

score <- data.frame(氏名=name,数学=math,英語=english)
score
```

```python:python
#データフレームのサイズ確認
score.shape
```

```r:R
#データフレームのサイズ確認
dim(score)
```

```python:python
#行数確認
len(score)
```

```r:R
#行数確認
nrow(score)
```

```python:python
#列数確認
len(score.columns)
```

```r:R
#列数確認
ncol(score)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/d6fab524-32bc-3b09-e2a0-90e06c9e9af8.png)

```python:python
#データの取り出し
score['数学']
```

```r:R
#データの取り出し
score$数学
```

```python:python
score.数学
```

```r:R
#データの取り出し
score[,2]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/f08b047f-5e2b-c0a8-1d41-8c7d2613e821.png)

```python:python
score[score.数学 > 50]
```

```r:R
#数学が50点以上の人のデータの取り出し
score[score$数学 > 50,]
```

```python:python
score[score.数学 > 50][['氏名','数学']]
```

```r:R
#数学が50点以上の人の氏名と数学だけのデータの取り出し
score[score$数学 > 50,c('氏名','数学')]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/39a72a56-2070-21cd-aade-10ca477583aa.png)

### R別解　dplyrパッケージ
```r:R
library(dplyr)
score %>% filter(数学 > 50)
```

```r:R
library(dplyr)
score %>% filter(数学 > 50) %>% select(氏名,数学)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/7b5b246a-7108-7370-7d74-7073d96e3415.png)

## ファイル読み込み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/10fd6404-a462-3f2a-e68a-d2390819c86e.png)

### ディレクトリ

フォルダと同じ意味を表す

WindowsやMacなどの、いわゆるGUIでは「フォルダ」
LinuxやUnixなどのCUIでは「ディレクトリ」

ルートディレクトリ→最上位のディレクトリ
カレントディレクトリ→今現在自分がいるディレクトリ

### パス
ファイルやディレクトリの住所のこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1340152/25de0552-d81f-0e5f-ea4f-e890cef13c01.png)

<dl>
  <dt>絶対パス：ルートディレクトリからの経路</dt>
  <dd>¥ドキュメント¥授業資料¥画像ファイル1</dd>
<dd>/ドキュメント/授業資料/画像ファイル1</dd>
  <dt>相対パス：カレントディレクトリからの経路</dt>
  <dd>..¥..¥ダウンロード¥テキストファイル1</dd>
</dl>

### CSVファイル読み込み
ファイル名の前にファイルの絶対パスを記載すること
文字化けしたらUTF-8に設定

```python:python
import pandas as pd

data_csv = pd.read_csv('/Users/〇〇/abc.csv',encoding='shift-jis')
data_csv.head(5)
```

```r:R
data_csv <- read.csv('/Users/〇〇/abc.csv',fileEncoding='sjis')
data_csv
```