パンナの学生生活

地方大学の大学生/プログラミング言語【python】を中心に紹介しています。/日々の脳内をアウトプット/麻雀とワインと日本酒が好き/将来は幸せになりたい

【python】opencv3を使って、画像処理をやってみよう。

opencv3とは

opencvとは、コンピュータで画像や動画処理のための機能が備わっているオープンソースのライブラリです。pythonopencvを組み合わせることで様々な場面で活躍している。

opencv-python-tutroals.readthedocs.io

今日使うソースコードの紹介

今回使うソースコードはこれを参考にしています。

OpenCV: Feature Matching(引用先)

ここのソースコードにはA-KAZEが使われている。

ホームページ

http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html

ライセンス

https://github.com/pablofdezalc/akaze/blob/master/LICENSE

from __future__ import print_function

import numpy as np
import cv2 as cv
from common import anorm, getsize

FLANN_INDEX_KDTREE = 1  # bug: flann enums are missing
FLANN_INDEX_LSH    = 6


def init_feature(name):
    chunks = name.split('-')
    if chunks[0] == 'sift':
        detector = cv.xfeatures2d.SIFT_create()
        norm = cv.NORM_L2
    elif chunks[0] == 'surf':
        detector = cv.xfeatures2d.SURF_create(800)
        norm = cv.NORM_L2
    elif chunks[0] == 'orb':
        detector = cv.ORB_create(400)
        norm = cv.NORM_HAMMING
    elif chunks[0] == 'akaze':
        detector = cv.AKAZE_create()
        norm = cv.NORM_HAMMING
    elif chunks[0] == 'brisk':
        detector = cv.BRISK_create()
        norm = cv.NORM_HAMMING
    else:
        return None, None
    if 'flann' in chunks:
        if norm == cv.NORM_L2:
            flann_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
        else:
            flann_params= dict(algorithm = FLANN_INDEX_LSH,
                               table_number = 6, # 12
                               key_size = 12,     # 20
                               multi_probe_level = 1) #2
        matcher = cv.FlannBasedMatcher(flann_params, {})  # bug : need to pass empty dict (#1329)
    else:
        matcher = cv.BFMatcher(norm)
    return detector, matcher


def filter_matches(kp1, kp2, matches, ratio = 0.75):
    mkp1, mkp2 = [], []
    for m in matches:
        if len(m) == 2 and m[0].distance < m[1].distance * ratio:
            m = m[0]
            mkp1.append( kp1[m.queryIdx] )
            mkp2.append( kp2[m.trainIdx] )
    p1 = np.float32([kp.pt for kp in mkp1])
    p2 = np.float32([kp.pt for kp in mkp2])
    kp_pairs = zip(mkp1, mkp2)
    return p1, p2, list(kp_pairs)

def explore_match(win, img1, img2, kp_pairs, status = None, H = None):
    h1, w1 = img1.shape[:2]
    h2, w2 = img2.shape[:2]
    vis = np.zeros((max(h1, h2), w1+w2), np.uint8)
    vis[:h1, :w1] = img1
    vis[:h2, w1:w1+w2] = img2
    vis = cv.cvtColor(vis, cv.COLOR_GRAY2BGR)

    if H is not None:
        corners = np.float32([[0, 0], [w1, 0], [w1, h1], [0, h1]])
        corners = np.int32( cv.perspectiveTransform(corners.reshape(1, -1, 2), H).reshape(-1, 2) + (w1, 0) )
        cv.polylines(vis, [corners], True, (255, 255, 255))

    if status is None:
        status = np.ones(len(kp_pairs), np.bool_)
    p1, p2 = [], []  # python 2 / python 3 change of zip unpacking
    for kpp in kp_pairs:
        p1.append(np.int32(kpp[0].pt))
        p2.append(np.int32(np.array(kpp[1].pt) + [w1, 0]))

    green = (0, 255, 0)
    red = (0, 0, 255)
    kp_color = (51, 103, 236)
    for (x1, y1), (x2, y2), inlier in zip(p1, p2, status):
        if inlier:
            col = green
            cv.circle(vis, (x1, y1), 2, col, -1)
            cv.circle(vis, (x2, y2), 2, col, -1)
        else:
            col = red
            r = 2
            thickness = 3
            cv.line(vis, (x1-r, y1-r), (x1+r, y1+r), col, thickness)
            cv.line(vis, (x1-r, y1+r), (x1+r, y1-r), col, thickness)
            cv.line(vis, (x2-r, y2-r), (x2+r, y2+r), col, thickness)
            cv.line(vis, (x2-r, y2+r), (x2+r, y2-r), col, thickness)
    vis0 = vis.copy()
    for (x1, y1), (x2, y2), inlier in zip(p1, p2, status):
        if inlier:
            cv.line(vis, (x1, y1), (x2, y2), green)

    cv.imshow(win, vis)

    def onmouse(event, x, y, flags, param):
        cur_vis = vis
        if flags & cv.EVENT_FLAG_LBUTTON:
            cur_vis = vis0.copy()
            r = 8
            m = (anorm(np.array(p1) - (x, y)) < r) | (anorm(np.array(p2) - (x, y)) < r)
            idxs = np.where(m)[0]

            kp1s, kp2s = [], []
            for i in idxs:
                (x1, y1), (x2, y2) = p1[i], p2[i]
                col = (red, green)[status[i][0]]
                cv.line(cur_vis, (x1, y1), (x2, y2), col)
                kp1, kp2 = kp_pairs[i]
                kp1s.append(kp1)
                kp2s.append(kp2)
            cur_vis = cv.drawKeypoints(cur_vis, kp1s, None, flags=4, color=kp_color)
            cur_vis[:,w1:] = cv.drawKeypoints(cur_vis[:,w1:], kp2s, None, flags=4, color=kp_color)

        cv.imshow(win, cur_vis)
    cv.setMouseCallback(win, onmouse)
    return vis


if __name__ == '__main__':
    print(__doc__)

    import sys, getopt
    opts, args = getopt.getopt(sys.argv[1:], '', ['feature='])
    opts = dict(opts)
    feature_name = opts.get('--feature', 'brisk')
    try:
        fn1, fn2 = args
    except:
        fn1 = 'IMG_4998.JPG'
        fn2 = 'IMG_4999.JPG'

    img1 = cv.imread(cv.samples.findFile(fn1), cv.IMREAD_GRAYSCALE)
    img2 = cv.imread(cv.samples.findFile(fn2), cv.IMREAD_GRAYSCALE)
    detector, matcher = init_feature(feature_name)

    if img1 is None:
        print('Failed to load fn1:', fn1)
        sys.exit(1)

    if img2 is None:
        print('Failed to load fn2:', fn2)
        sys.exit(1)

    if detector is None:
        print('unknown feature:', feature_name)
        sys.exit(1)

    print('using', feature_name)

    kp1, desc1 = detector.detectAndCompute(img1, None)
    kp2, desc2 = detector.detectAndCompute(img2, None)
    print('img1 - %d features, img2 - %d features' % (len(kp1), len(kp2)))

    def match_and_draw(win):
        print('matching...')
        raw_matches = matcher.knnMatch(desc1, trainDescriptors = desc2, k = 2) #2
        p1, p2, kp_pairs = filter_matches(kp1, kp2, raw_matches)
        if len(p1) >= 4:
            H, status = cv.findHomography(p1, p2, cv.RANSAC, 5.0)
            print('%d / %d  inliers/matched' % (np.sum(status), len(status)))
        else:
            H, status = None, None
            print('%d matches found, not enough for homography estimation' % len(p1))

        _vis = explore_match(win, img1, img2, kp_pairs, status, H)

    match_and_draw('find_obj')
    cv.waitKey()
    cv.destroyAllWindows()

 このコードの途中にfn1=,fn2=のところに読み込む画像を書き込む。

このコードの実行結果は次のようになる。

f:id:panNakotta:20190505222750p:plain

特徴量マッチングについて

このように特徴量のマッチングが表示され見やすくなっている。また、画像を見てみるとしっかりと特徴の同じ場所にマッチしていることが分かる。opencvには多くのライブラリがあり、特徴量マッチング以外にも様々なことが出来る。

【python】matplotlibを使ってデータの可視化をしてみよう

matplotlibについて

matplotlibはデータ分析によく使われており、データを可視化する必要不可欠なライブラリです。matplotlibは、データサイエンスや機械学習人工知能にも使われるライブラリです。データを散布図や棒グラフ、円グラフ、ヒストグラムで表すこともできます。今日は、円グラフとバブルチャートについて紹介します。

ソースコードと説明

import numpy as np
import numpy.random as random

import matplotlib.pyplot as plt
import matplotlib as mpl
#グラフを表記する
%matplotlib inline
%precision 3

今回使うライブラリをインポートします。

#グラフのサイズを指定する。
plt.figure(figsize= (20,10))
#各要素の割合を指定する、explodeで円グラフを切り離す。
#ラベルの名前を指定、色の指定
plt.pie([10,30,45,15],
        explode=(0,0,0,0.1),
        labels = ['A','B','C','D'], 
        colors = ['yellowgreen','gold','skyblue','lightcoral'], 
        autopct = '%1.1f%%',shadow = True, startangle= 90)

plt.axis('equal')

 

f:id:panNakotta:20190504232432p:plain

このように表示される。

#データの個数を指定
N=100
#データをランダムに作る
x=np.random.rand(N)
y=np.random.rand(N)

#一つの円の大きさをバラバラにする
area = 10*np.pi*(15*np.random.rand(N))**2

plt.figure(figsize=(15,6))
#色のランダムに決める
plt.scatter(x,y,s = area,c =np.random.rand(N),alpha = 0.5)
plt.grid(True)

 

f:id:panNakotta:20190504233323p:plain


jupyter notebookについて

データ分析についてはjupyter notebookがとてもおすすめである。jupyter notebookはpythonコードをすぐに実行できるので、グラフも簡単に表示でき、エラーも見つけやすい。ぜひjupyterの環境を構築してみてください。

f:id:panNakotta:20190504234242p:plain

このように実行できる。

まとめ

データサイエンスはとても注目を浴びている。今日扱った内容は、ほんの一部ですが、多くの表示の仕方がある。データを分析することでデータの予測や現状の課題なども発見できる。ここで興味を持った方はぜひ自分でも手を動かしてみたり、調べてほしい。

 

【好きなバンド】クリープハイプを語りつくす。

トリプルヨーグルト×はてなブログ特別お題キャンペーン「トリプルヨーグルトを宣伝してみよう」
Sponsored by 森永乳業

今日は自分の好きなバンドのクリープハイプについて語りたいと思います。実はこの記事を書いている途中もクリープハイプを聞いています。クリープハイプが好きな人も知らない人も読んでみてください。

クリープハイプ

ボーカルとギター担当の尾崎世界観とギターの小川幸慈、ベースの長谷川カオナシとドラムの小泉拓の4人組のロックバンドです。尾崎世界観は「祐介」「苦汁」などの本も書いていて様々な活動をしています。クリープハイプのメンバー全員の顔が濃い!!多分、一回見れば覚えられるくらい顔が濃いです。一番最近のアルバムは、「泣きたくなるほど嬉しい日々に」ですね。多分このアルバムの中では「ゆっくり行こう」が一番知名度があると個人的には思います。

www.youtube.com

優しい尾崎さんの声が良いので是非聞いてみてください。

インディーズ時代

僕もインディーズ時代をよく知っているかと言われると、実は詳しくは悔しいですが知っていないのです。なぜかというとインディーズ時代のアルバムは廃盤が多く、なかなか手に入らないのです。ですがインディーズ時代で一番好きなアルバムが「When I was young, I'd listen to the radio」です。このアルバム名はCARPENTERの「Yesterday Once More」の一番最初のフレーズなんですよ!もしかしたら、尾崎世界観が若い時に聞いてた曲なのかもしれませんね。そのアルバムの中で一番好きな曲は「イエスタデイワンスモア」「アンタの日記」と「蜂蜜と風呂場」です。「イエスタデイワンスモア」はこのアルバムの最後に入っているのですが、この曲はこのアルバムのまとめだと捉えています。なぜかというと「イエスタデイワンスモア」の歌詞には、このアルバムの全ての曲の歌詞が少しずつ埋め込まれているのです。このアルバムは一種の小説のような構成になっていて「イエスタデイワンスモア」はその結に値すると感じました。また、この「蜂蜜と風呂場」の歌詞は

蜂蜜と風呂場 歌詞「クリープハイプ」ふりがな付|歌詞検索サイト【UtaTen】

ここから読んでみてください

この歌は尾崎世界観の風俗嬢について書いたと言われています。冒頭の部分で「蜂蜜みたいな味がするなんて嘘ついて嘘ついてくれた」や「こうしてカバみたいに歯医者で、口を開けていると君の気持が分かるよ」というフレーズや「月額定額制の僕の恋人」などからも風俗嬢について書かれているとわかります。そして「イエスタデイワンスモア」には『つないだ手のひらは蜂蜜の匂いがする。』『似たような嘘ついてくれたあの人は今でも元気に暮らしているかな?』という歌詞があり、「蜂蜜と風呂場」を回想していることが分かる。

とても面白いですよね。ぜひ聞いてみてください。

クリープハイプの魅力

クリープハイプと出会ったのは、高校1年生の時です。最初の印象は、「世界観の声が生理的に受け付けない」でした。今はこんなに好きなのに、、、、でも、徐々にその声に惹かれていました。私の思う【クリープハイプの魅力】は「声」と「人間味」と「エロさ」だと思います。そして、たまに見える尾崎世界観優しさがとても好きですね。あとは曲の出だしのイントロがめちゃくちゃ好きです!!僕のおすすめする曲は全部と言いたいところなんですが全部紹介できないのでいくつか挙げます。

 おすすめの曲は、「社会の窓」「エロ」「二十九、三十」「バンド」です。(もっと紹介したい、、、)

社会の窓」は尖がっている尾崎世界観が見えます。これは、尾崎世界観の本音なのかわかりませんが、、、また、途中のベースの音やギターのテクニックもすごいと感じるところですね。

 次は「エロ」って曲ですね。これは尾崎世界観が二十代に作られた歌でやんちゃしてた頃に書かれたと考えています。歌詞が全体的にエロいんです。夏のはかなさも感じることできます。そして、このイントロがとてもいいんですよね

youtu.be

そして「二十九、三十」です。この曲は私が一番好きな曲かもしれません。この歌は、尾崎世界観が二十代から三十代になったときの心情の変化が書かれていると言われています。やんちゃだった20代から30代になって少し落ち着いた雰囲気を曲で表しています。この曲には尾崎世界観の「優しさ」や「寂しさ」が見え隠れしているように感じることが出来て、好きです。

最後に「バンド」です。この曲は世界観ていうアルバムに入っており、「クリープハイプ愛」が詰まっています。世界観がメンバーに直接「感謝」や「愛」言うのが恥ずかしいからなのか、曲として歌っていて好きですね。この歌では、世界観の優しさがにじみ出すぎですね、、ド直球に好きです。

 

クリープハイプの愛

この記事ではクリープハイプの魅力や歌の考察を中心にやってきましたが、この記事を書いていてよりやっぱり好きなんだなあと実感しました。。世界観が高い声が出なくて苦しんだ時期もありましたが、高い声が出なくなったとしてもずっと好きでいると思います。他にももっと紹介したい曲があるので、時間があったらバシバシ書いていきたいと思います。また、興味がわいた人や聞いてみたいと思った人はYouTubeなどでも調べてみてください。

 

 

 

 

 

【pythonを】GUIのアプリ開発の基礎を学ぼう

GUIとは

GUIとはGraphical User Interfaceの略である。現在のアプリケーションなどもGUIを採用している。コンピュータグラフィックスやポインティングデバイスを用いたグラフィカルであることを特徴としたものである。pythonGUIライブラリは主に3つある。

  1. Tkinter
  2. Kivy
  3. PyQt

今回はTkinterを使ってGUIアプリの基本を紹介したい。

今回使うモジュールについて

先ほども紹介したが今回はTkinterを使う。

import Tkinter as tk

Tkinterのできることは以下がある。

  • クリックボタンの作成
  • メニュー
  • ラジオボタン
  • クリックアクションの作成
  • リストボックス
  • 入力ボックスの作成

などがある。

ソースコードについて

import Tkinter as tk 
def btn_click():
    pass

root = tk.Tk()
#ウィンドウのサイズの設定
root.geometry('700x500')
root.title('test')

#ボタンを押したときのアクション
def btn_1_callback():
    label_1 = tk.Label(text = '〇' ,width = 40,fg = '#ff0000')
    label_1.place(x = 160,y = 150)

#ボタンの表示、ボタンの幅の指定、押したときのコマンド指定
btn_1 = tk.Button(text = '正解' ,width = 40, command = btn_1_callback)
#ボタンの位置の座標
btn_1.place(x = 160, y= 100)


root.mainloop()

f:id:panNakotta:20190502235554p:plain


f:id:panNakotta:20190502235610p:plain


実際に動かしてみるとこのようになる。正解のボタンを押すと〇を表示することが出来る。

最後に

ここでは、Tkinterの本の一部しか紹介していないが、単語テストなどもTkinterを使って作ることも可能である。この記事でTkinterが面白いと感じた方は自分でも実際に動かしてみてほしい。私もTkinterが面白くていろいろ試してみました。また、何か質問があれば、ツイッターのDMなどにコメントをお願いします。

 

 

 

 

Pythonの基本を学ぼう。ジャンケンと勝ち負けの判別

Pythonスタートブック [増補改訂版]

Pythonスタートブック [増補改訂版]

 

 

この記事で扱う文法

if文

今回はif文について詳しく説明していきます。前回の記事で全体的な関数の使い方やif 文の使い方を説明しましたので、目を通してみてください。pannakotta.hatenablog.jp

今回はif文を少し詳しく説明していきたいです。if文は論理式が必要です。論理式では、「かつ」・「または」がよく出てきます。「かつ」・「または」を「and」,「or」を使って表します。

if ['条件式'] and ['条件式']:
   ['Trueの時の処理']
if ['条件式'] or ['条件式']:
   ['Trueの時の処理']

 

また、複数の条件を使う場合「elif」を使うと良くなります。「elif」は「else if」の略でC言語では「else if」と使われています。このようにいろいろな条件分岐が出来るのです。

if ['条件式1'] :
   ['条件式1がTrueの時の処理']
elif ['条件式2'] :
   ['条件式2がTrueの時の処理']
elif ['条件式3'] :
   ['条件式3がTrueの時の処理']
               :
               :
               :

前回説明しませんでしたが、条件式の中の論理的同値(値が等しいとき)は「==」で表記します。

モジュールについて

モジュールとは、コードを記述して、他のプログラムから再利用できるようにしたファイルのことです。
自分でPython言語を使用して開発する通常のモジュールの他にも、もともとPythonにデフォルトで組み込まれている「組み込みモジュール」があります。モジュールを読み込むには次のように、書きます。

import 'ファイル名'

この記事では、「random」を読み込んだプログラムを紹介します。

 

ジャンケンのソースコードと説明

#randomを読み込む
import random
#listで三つの要素を設定
list = ['グー','チョキ','パー']
#listのグー・チョキ・パーの中から一つ選択する。
janken = random.choice(list)

#ランダムで選んだ手をcp_jankenで文字列とする。
cp_janken = [janken]

#あなたの選んだものを読み込む
your_janken = input('ジャンケン!\nグー・チョキ・パーの中から一つ入力:\n')

janken1 = [your_janken]
your_janken1=['グー']
your_janken2=['チョキ']
your_janken3=['パー']
print('コンピュータ',janken)
#自分の手とランダムで選ばれた手が等しい時
if cp_janken == janken1:
    print('あいこ')
#ランダムで選ばれた手がグーで、自分の手がチョキの時
elif cp_janken == your_janken1 and janken1 == your_janken2:
    print('YOU LOSE')
#ランダムで選ばれた手がチョキで、自分の手がパーの時
elif cp_janken == your_janken2 and janken1 == your_janken3:
    print('YOU LOSE')
#ランダムで選ばれた手がパーで、自分の手がグーの時
elif cp_janken == your_janken3 and janken1 == your_janken1:
    print('YOU LOSE')
#ランダムで選ばれた手がグーで、自分の手がパーの時
elif cp_janken == your_janken1 and janken1 == your_janken3:
    print('YOU WIN')
#ランダムで選ばれた手がパーで、自分の手がチョキの時
elif cp_janken == your_janken3 and janken1 == your_janken2:
    print('YOU WIN')
#ランダムで選ばれた手がチョキで、自分の手がグーの時
elif cp_janken == your_janken2 and janken1 == your_janken1:
    print('YOU WIN')

 

 まとめ

今回はpythonを学び始めで学ぶ知識を中心に使ってプログラムを作りました。同じような出力でも様々なプログラムがありますので自分でも、作ってみましょう。そうすることでより一層理解もでき、楽しめるでしょう。また、このコードでも表示されなかったり、分からない点がありましたら出来るだけ対処したいと思います。

 

「プログラミング言語 Python」本田圭佑とのジャンケンコードを作って、Pythonの基本を楽しく、10分で学ぼう

はじめに

Pythonの開発環境を作ってみたけど何をすればよいかわからない方や、実際にコードを書いて学びたい方に参考になればと思い書きました。今日紹介するコードは、少し前にツイッターなどで流行った本田圭佑さんとジャンケンをPythonで作ってみました。ちなみにこのコードは本田圭佑さんの勝率は100%としています。

ぜひ、実際に手で打ち込んでみてください

 

この記事で扱うPythonの関数と文法について

  • print関数
  • input関数
  • if文

print関数

print関数は一番使うことが多いくらいの重要な関数であり、出力する関数である。print('出力したいもの')として書かれる。print関数を使うことで()の中身を表示することのできる。リストや辞書型のオブジェクトも出力可能である。とても様々な場面で使われている。

print('出力する内容')

input関数

input

input関数は、入力関数であり、打ち込んだ内容を読み込む関数である。この関数も良く使われ基礎として知ってほしい関数だ。文字の入力や数値代入も可能である。

number = input('好きな数入力してください:')

if文

if文はプログラム内の条件分岐したいときによく使われています。文法的な説明としては次のようになります。ここで重要なのはインデント(行頭の位置)です。pythonはインデントによって認識しているので、エラーが起こったら、インデントや:を気を付けてみてください。また、else以下は必ずしも必要ではないです。

if '条件式':
     ['条件式がTrueの時の処理']
else:
     ['条件式がFalseの時の処理']

 

本田圭佑とジャンケンのコードとコードの説明

#print関数でじゃんけん!を表示#
print('じゃんけん!')
#input関数でグー・チョキ・パーを入力
your_janken = input('あなたはグー・チョキ・パーの中で何をだす?:')

#ジャンケンで出した手をjankenとして置く
janken = [your_janken]


your_janken1=['グー']
your_janken2=['チョキ']
your_janken3=['パー']
#if文 #inputでグーを選択した場合本田圭佑:パーを出力
if  janken == your_janken1:
    print('ポン!!')
    print('本田圭祐:パー')
    print('YOU LOSE\n本田圭佑:「俺の勝ち!なんで負けたか、明日までに考えといてください。そしたら何かが見えてくるはず。」')
    print('「ほな、いただきます。」')
#if文 #inputでチョキを選択した場合本田圭佑:グーを出力
if  janken == your_janken2:
    print('ポン!!')
    print('本田圭祐:グー')
    print('YOU LOSE\n本田圭佑:「俺の勝ち!なんで負けたか、明日までに考えといてください。そしたら何かが見えてくるはず。」')
    print('「ほな、いただきます。」')
#if文 #inputでパーを選択した場合本田圭佑:チョキを出力
if  janken == your_janken3:
    print('ポン!!')
    print('本田圭祐:チョキ')
    print('YOU LOSE\n本田圭佑:「俺の勝ち!なんで負けたか、明日までに考えといてください。そしたら何かが見えてくるはず。」')
    print('「ほな、いただきます。」')

プログラミング言語に悩んでいるならpythonを学んでみよう

 

Pythonスタートブック [増補改訂版]

Pythonスタートブック [増補改訂版]

 

 

はじめに

この記事は最近プログラミングに興味があるけど、言語も多くなにを学べばよいか分からない方やプログラミング言語にどのような特徴があるか知りたい方に少しでも参考になればと思っています。

プログラミング言語について

  1. C言語
  2. Python
  3. Java
  4. Ruby
  5. その他

C言語

昔から使われている言語で高級言語のひとつであ。多くの大学でC言語を授業では中心に扱われている。現在でも多くのシステムやOS関係に使われている。C言語と似ている言語で、C++C#という言語もある。C言語の処理速度はとても早く複雑なアルゴリズムなどではC言語の方が向いている。

Python

Pythonは多くのライブラリーを持ち、多方面で使用されている。最近AIブームと言われているが、機械学習人工知能、Deep Learnigの分野でも活躍している。また、instagramyoutubeなどのWEBアプリもPythonが使われている。文法も比較的簡単である。

Java

Javaアプリ開発をとても得意としていて幅広い開発に携わっている。また、Javaオブジェクト指向の言語であり、部品同士を組み立てて作っていく言語である。

 

Ruby

Rubyは汎用性が高くオブジェクト指向言語であると同時にスクリプト言語でもあるので、他言語と比べて少ない量のコード記述でプログラミングができ、特にサーバサイドの言語として利用されている。Rubyは、Web系プログラミング言語の特徴と似ているのでPythonJavaを学んだ後でもスムーズに学べる。

 その他

ここまで紹介した言語はとても有名な言語であり、最近注目されている言語でもある。ここで紹介した言語以外にもPHPやSwiftなど様々な言語がある。

 

 Pythonを推す理由

これまでにいろいろな言語を紹介してきたが私は初めてプログラミングを始める方には、Pythonをおすすめしたい。その理由には、一つ目が文法が比較的優しいからである。初めてプログラミングを勉強する人や独学している人にとって、続かない理由は、文法の難しさにある。文法が分からないと何をしているか分からなくなり、ソースコードをただ写しているだけですぐ飽きてしまう。二つ目が多くのライブラリーがあり、様々な場面に使われていることである。Pythonでは、多くのモジュールがあり、データ分析や機械学習人工知能、Webアプリ開発opencvを使った画像処理など、自分の興味ある分野に使うこともできとても面白い。

OpenAI Gym 入門 - Qiita