人気のプログラミング言語 【 python 】 特徴と出来ることまとめ
これはヘビのパイソン(ニシキヘビ)なので、誤解のないようにお願いします。今回ご紹介するのはプログラミングのpythonです。
pythonとは
pythonはプログラミング言語の一つで、人気ランキング上位に入っています。
どんな特徴なのか、どうして人気なのかをみてみましょう。
特徴
シンプルで簡潔なコードによって理解することがとても簡単です。なぜかというと、インデント(空白を追加する)ことが必須であるため、全ての人が似たようなコードを書くことになるためです。
ですが、処理速度が遅くて困ることもあります…
これからあげる特徴は人気の理由でもあります。
コードの具体例
例えば、単純にfor文を用いた配列操作でもJavaScriptとpythonでは大きな違いがあります。今回は[1, 2, 3]という数字配列をそれぞれに倍してみますね。
var array = [1, 2, 3]; for(var i=0;i<array.length;++i) { array[i] *= 2 } console.log(array);
【 計算結果 】
ちなみに他の表記もできますが、今回は基本で記述しています。
この処理をpythonで行うと、
array = [1, 2, 3] for i in range(len(array)): array[i] *= 2 print(array)
わかりますか…?
for分用の中括弧{}がなく、文の最後のセミコロン;が必要ありません。しかし、インデントと言ってfor文の中に決められた分だけ空白を入れる必要があります。
つまり、jsの{}がpythonのインデントと同じような役割だと言えますね。jsでインデントは必要ありませんが、やらないと見にづらいので必須だと思います。
シンプルで理解しやすい
pythonの特徴からもわかりますが、簡潔に理解しやすいコードを書くことができるため、複雑なプロジェクトなどに用いると効果大ですよね。それこそが人工知能にpythonが用いられる理由です。
人工知能は高度な数理的アルゴリズム実装が必要であり、アルゴリズムだけで混乱してしまいそうなくらい複雑なのです。人工知能の仕組みについてはこちらの記事をご覧ください。
実際に僕が考えたアルゴリズムを実装した記事もあるので、より深い中身を覗くことができます。
riaimu.hateblo.jp
riaimu.hateblo.jp
riaimu.hateblo.jp
プログラミング初心者はpythonから始めると良いでしょう。
とてもシンプルであるため、プログラミングの本質自体を理解することが容易になります。本質さえわかれば他の言語なんて全然勉強しなくても、少し調べると書けるようになるので、まずは1言語から習得してみましょう。
使われているサービス
他にも多くのサービスにpythonは用いられており、仕事もたくさんあります。やっぱりシンプルさとライブラリの豊富さが評価されているのだと思います。
pythonで出来ること
では、具体的にどんなことができるのかみてみましょう。ライブラリの具体的なコードに関しては理解しないでも大丈夫です。
どんなことができるのかを知ることが大切です!
Webスクレイピング
Beautiful Soup 4というライブラリでは、webサイトの情報を取得することができます。情報収集を自動化するにはこれを使ってみましょう。
※ 注意点として、スクレイピングが禁止されているサイトがいくつかあります。YouTubeやTwitterがその例ですね。そう言った場合は取得することができません。
次のプログラムはGoogle検索した場合に表示されるサイトのタイトルを取得するためのものです。キーワードを入力すると検索結果が表示されるようにしています。
import requests from bs4 import BeautifulSoup # 入力用の関数 def inputer(content): return input(content+"\n>> ") URL = "https://www.google.com/search?q="+KEY_WORD # 検索ワード KEY_WORD = inputer("Type the word you want to search") # 最大表示数 LIMIT = 10 try: results = [] for i in range(LIMIT): print("\r "+str(i)+"/"+str(LIMIT)+" ( "+str(round(i/LIMIT*100))+"% )",end="") res = requests.get(URL+"&start="+str(i*10)) soup = BeautifulSoup(res.text, 'html.parser') results += soup.find_all("h3") print("\r "+str(LIMIT)+"/"+str(LIMIT)+" ( 100% )") print("result :",res) for r in results: print(" ・",r.text.replace('<h3 class="zBAuLc"><div class="BNeawe vvjwJb AP7Wnd">',"").replace('</div></h3>',"")) except: print("Cloudn't get the information")
【 実行例 】
(キーワード:ブログ リアイム)
サイト別にどのような情報を取得するのかを設定できるため、株価を取得したり、天気の情報を取得できたりします。
よくスクレイピングの求人を見かけますが、それだけ需要があり、細かく設定することができるため便利ですね。
人口知能
pythonの特徴でもご紹介しましたが、人工知能とpythonの相性は良く、数多くのライブラリが開発されており、誰でも(これは言い過ぎた)人工知能を作ることができます。
しかし!
実は処理速度が遅いため適さない場合もあるのです。実際に僕もcanvasを用いた数学の検証では遅いためjavascriptで書き直して実行しました。
ちなみにjsvascriptでcanvasを利用する方法はこちら
riaimu.hateblo.jp
canvas
画面を作って画像を表示したり、ボタンを設置したりしてアプリケーションを作るための方法としてcanvasを使うことができます。僕はオリジナルの人工知能のネットワークを視覚化するために使用しました。
人工知能の表示を担当するpythonファイルの中身を特別に公開します。これ単体では意味を成さないので、実行しないで大丈夫です。
また、人工知能とはいっても僕の完全オリジナルなので全く理解する必要はありません!
ただ、canvasでどんなことができるのかを知ってみましょう。
import random import Object import View import datetime # MEMO # improve ability to read the code # Don't forget how to use array of self.neurons # It's need to get keys. # FIRST_ID = '0000' digit = 2 # 四捨五入の桁数 # round関数 def r(v): return round(v, digit) # random+round関数 def R(max, length=0): # lengthが1以上なら配列生成 if length == 0: return round(random.random() * max, digit) else: res = [] for i in range(length): res.append( round(random.random() * max, digit) ) return res class Neuron: def __init__(self, id, position, limits): self.id = id # biasは-max〜maxまでの範囲をとる self.bias = r( R(2*limits['bias']) - limits['bias']) # V ObjectのV self.V = Object.V( 0.0 ) self.Delta = Object.V( 0.0 ) self.position = position self.attribute = "★" """ example of connection { # example of connection 'id' : '000' , 'weight' : 0.12 , } """ self.connection = [] def __str__(self): print(' id :', self.id, ' position :', self.position, ' attribute :', self.attribute) print(' value :', self.V, ' bias :', self.bias) print(' connection('+str(len(self.connection))+') :', self.connection) return " - - - - - - - - - - - " class Network: def __init__(self, number, shape, limits): START = datetime.datetime.now() self.limits, self.shape = limits, shape CENTER_POSITION = Object.V([0.0]*len(shape)) # generate neurons self.neurons = {} for i in range(number): # decide id id = FIRST_ID while id in self.neurons.keys(): id = str( random.randint(0, 100000) ) # decide position position = Object.V([]) for depth in self.shape: position.append( R(depth) ) CENTER_POSITION = position + CENTER_POSITION # add neuron self.neurons[id] = Neuron(id, position, limits) # make connections between neurons for id_1 in self.neurons.keys(): N1 = self.neurons[id_1] for id_2 in self.neurons.keys(): if not id_1 == id_2: N2 = self.neurons[id_2] # judge if random.random() <= (1 - N1.position.distance_from( N2.position ) / self.limits['connect']): N1.connection.append( { # new connection 'id' : id_2, 'weight' : R(self.limits['weight']), } ) print('\n - Network has been generated') print(' - Generating time :', datetime.datetime.now() - START) print(' - Average of positions :', CENTER_POSITION / number) print(' - First neuron information :\n', self.neurons[FIRST_ID], '\n') """ Show details about network """ def Detail(self, neurons=True): sum_connection = 0 for key in self.neurons.keys(): if neurons: # whether show neuron print(self.neurons[key]) sum_connection += len( self.neurons[key].connection ) print('\n The number of neurons :', len(self.neurons.keys())) print(' sum connection :', sum_connection) print(' average connection :', r(sum_connection / len(self.neurons.keys()))) def Calculation(self): # I have to add the rule for attributes for key in self.neurons.keys(): for connection in self.neurons[key].connection: self.neurons[connection['id']].Delta = Object.V(r(self.neurons[connection['id']].Delta + (self.neurons[key].V + self.neurons[key].bias) * connection['weight'] )) # 相対的な値にするため、Deltaに格納してからその変位をVとする for key in self.neurons.keys(): # 値を割って大きくなりすぎるのを防ぐ self.neurons[key].V = Object.V( r( (self.neurons[key].Delta - self.neurons[key].V)/2 ) ) self.neurons[key].Delta = Object.V(0) net = Network( number = 300, shape = [100, 100], limits = { 'connect' : 15 , 'bias' : 5.0 , 'weight' : 0.4 , } ) net.Detail( neurons = True, ) View.plot(net) # # Am is always does calculation in order to have a fluency # while True: net.Calculation() if input("fin? :") == "fin": break net.Detail()
そのcanvas部分を表示します。
まるはニューロンを表しており、色のついた線はニューロンの接続を意味します。接続には距離が近いほど接続する確率が上がるといったアルゴリズムにしています。
ちなみにニューロン数を多くしすぎるとこうなります。
その他
なかには僕もやったことのないこともあります。
それくらいたくさんのことができるということですね。
ファイルをいくつかに分けて処理を書くことができる点も僕はいいと思っていて、人工知能なら1つのファイルに全てのプログラムを書いてしまうと、とてつもない行数になってしまいます。
ゼロの状態からオリジナルの人工知能プログラムを書いてみたことがあります。
Twitterでそのプログラムの全体像を投稿したことがあるので、興味があればみてください!
今はコードを公開したくないので、Visual Studio Codeの右側に表示されてる全体図?の画像をツイートしておきます。
— リアイム (@riaimu1222) April 7, 2021
※これでも収まりきってない pic.twitter.com/paQIpM3nKs
記事を読んでいただきありがとうございます。
少しでもpythonについて理解が深まれば良いと思い、この記事を書きましたが、どうだったでしょうか?
【 おすすめ記事 】
riaimu.hateblo.jp
riaimu.hateblo.jp
riaimu.hateblo.jp