Pythonの紹介

この記事では、Pythonの基本について説明します。 一般的に、目標に近づきつつあります。一般に、データサイエンスのメインライブラリでの作業をすぐに開始し、TensorFlowを使用します(ニューラルネットワークの記述と展開については、ディープラーニングを理解できます)。



設置



Pythonはpython.orgからダウンロードできます。 ただし、まだインストールされていない場合は、代わりに

Anaconda配布パッケージをお勧めします。これには、データサイエンスの分野での作業に必要なほとんどのライブラリが既に含まれています。



Anacondaディストリビューションを使用していない場合は、必ずpipパッケージマネージャーをインストールしてください。これにより、サードパーティのパッケージが簡単にインストールできるようになります。 また、はるかにユーザーフレンドリーなインタラクティブIPythonシェルをインストールする価値があります。 AnacondaディストリビューションにはpipとIPythonが付属していることに注意してください。



空白



多くのプログラミング言語は、差別化コードブロックを使用します。

中かっこ。 インデントはPythonで使用されます:



#      for for i in [ 1, 2, 3, 4, 5] : print (i) #     for i for j in (1, 2, , 4, 5 ] : print ( j ) #     for j print (i + j) #     for j print (i) #     for i print ( "  ")
      
      





これにより、コードが読みやすくなりますが、同時に書式設定に従うようになります。 括弧と角括弧内のスペースは無視されるため、詳細な式を簡単に記述できます。



 #    long_winded_computation = (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20)
      
      





読みやすいコード:

 #   list_of_lists = [ [ 1 , 2, 3 ) , [4, 5, 6 ] , [ 7 , 8, 9 ] ] #      easy_to_read_list_of_lists = [1, 2, 3 ) , [4, 5, 6 ) , [7, 8, 9 ) ]
      
      





ステートメントを続行するには、次の行でバックスラッシュが使用されますが、このようなレコードはほとんど使用されません。



 two_plus_three = 2 + \ 3
      
      





コードを空白でフォーマットすると、コードをPythonシェルにコピーして貼り付けることが難しくなります。 たとえば、次のコードをコピーしようとしています:



 for i in [ 1, 2, 3, 4, 5] : #      print (1)
      
      





標準のPythonシェルに追加すると、エラーがスローされます。



 #    :     IndentationError : expected an indented blk
      
      





インタープリターにとって、空の文字列はforループでコードブロックの終わりを示すためです。



IPythonラッパーには、空白を含むすべてをクリップボードに正しく貼り付ける「マジック」%貼り付け機能があります。



モジュール(ライブラリのインポート)



一部のPythonベースのプログラミング環境ライブラリは、デフォルトではロードされません。 これらのツールを使用するには、それらを含むモジュールをインポートする必要があります。



1つの方法は、モジュール自体を単純にインポートすることです。



 import re my_regex = re.compile ("[0-9]+",re.I)
      
      





ここでreは、正規表現を操作するための関数と定数を含むモジュールの名前です。 この方法でモジュール全体をインポートすることにより、reを前に付けて機能にアクセスできます。



コードにreという名前の変数が既にある場合は、モジュールエイリアスを使用できます。



 import re as regex my_regex = regex.compile("[0-9)+",regex.I)
      
      





エイリアスは、インポートされたモジュールに扱いにくい名前がある場合や、モジュールが頻繁にモジュールにアクセスする場合にも使用されます。



たとえば、 matplotlibモジュールに基づいてデータを視覚化する場合、通常は

次の標準エイリアスを使用します。



 import matplotlib.pyplot as plt
      
      





モジュールからいくつかの特定の値を取得する必要がある場合、それらを明示的にインポートし、制限なしで使用できます。



 from collections import defaultdict , Counter lookup = defaultdict(int) my_counter = Counter()
      
      





機能



関数は、0個以上の入力引数を取り、対応する結果を返すルールです。 Pythonでは、通常、関数はdefステートメントを使用して定義されます。



 def double() : """,  ,     docstring,  ,    . ,       2""" return  * 2
      
      





Pythonの関数は、ファーストクラスオブジェクトとして扱われます。 これは、他の引数と同様に、変数に変数を割り当てて他の関数に渡すことができることを意味します。



 #   f   def apply_to_one(f): '""'  f      """ return f(1) my _ double = double #       = apply_to_one(my_double) # = 2
      
      





さらに、短い匿名関数またはラムダ式を簡単に作成できます。



  = apply_to_one(lambda :  + 4) # = 5
      
      





ラムダ式を変数に割り当てることができます。 ただし、def演算子を使用することをお勧めします。



 another double = lmbd : 2 *  #    def another_double (x) : return 2 *  #  
      
      





さらに、デフォルト引数を関数パラメーターに渡すことができます。これは、デフォルト以外の値が予想される場合にのみ指定する必要があります。



 def my_print (message="oe   " ): print (message ) my_print ( "pe") #  '' my_print () #  '   '
      
      





引数を名前で指定することをお勧めします。



 #   def subtract ( a=0, =0 ) : return  - b subtract (10, 5)#  5 subtract (0, 5)#  -5 subtract (b=5 )#  ,     
      
      





将来、関数は非常に頻繁に使用されます。





両側の文字列(または文字のシーケンス)は、一重引用符または二重引用符に制限されます(一致する必要があります)。



 single_quoted_string = '    ' #  double_quoted_string = "  " # 
      
      





バックスラッシュは、特殊文字をエンコードするために使用されます。 例:



 tab_string = "\t" #    len (tab_string)# = 1
      
      





直接遭遇するバックスラッシュ自体が必要な場合

Windowsオペレーティングシステムのディレクトリ名にr '"'を使用すると、 書式なし文字列を作成できます。



 not_tab_string = r"\t" #   ' \ '  ' t ' len (not_tab_string) # = 2
      
      





複数行のテキストブロックは、トリプルシングル(または

ダブル)引用符:



 multi_line_string = """   .        """
      
      





例外



何か問題が発生すると、Pythonは例外をスローします。 未処理の例外により、プログラムが予期せず停止します。 例外はtryおよびexcept ステートメントを使用して処理されます:



 try: print (0 / 0) except ZeroDivisionError : rint ( "    ")
      
      





多くのプログラミング言語では、例外の使用は悪いプログラミングスタイルと見なされますが、Pythonでは、コードをよりクリーンにするために使用されるかどうかを心配する必要はありません。



リスト



おそらくPythonで最も重要なデータ構造はリストです。 これは、他のプログラミング言語の配列に似ていますが、機能が追加された単なる順序付きコレクション(またはコレクション)です。



 integer_list = [1, 2, ] #    heterogeneous_list = ["", 0.1 , True] #   list_of_lists = [integer_list, heterogeneous_list, [] ] #   list_length = len(integer_list) #  = 3 list_sum = sum(integer_list)#    = 6
      
      





値を設定し、角括弧を使用してリストのn番目の要素にアクセスできます。



  = list(range (10)) #   {0, 1 , . . . , 9] zero =  [0] # = 0 ,  -, .  .  1-  = 0 one = x [1] # = 1 nine =  [-1] # = 9, -    eight =  [-2] # = 8, -     [0] = -1 #   = { - 1 , 1 , 2, 3, . . . , 9]
      
      





さらに、リストを「カット」するために角括弧が使用されます。



 first_three = [:] #   = [-1 , 1, 2] three_to_end = [3:] #    = {3, 4, ... , 9] one_to_four = [1:5] #     = {1 , 2, 3, 4] last_three = [-3:] #   = { 7, 8, 9] without_first_and_last = x[1:-1] #     = {1 , 2, ... , 8] _ of _ = [:] #   = [ -1, 1, 2, ... , 91
      
      





Pythonには、要素がリストに属しているかどうかを確認するlnステートメントがあります。



 1 ln [1, 2, 3] #True 0 ln [1, 2, 3] #False
      
      





チェックはすべての要素を一度に1つずつ見ることにあるため、リストが小さいことが確認されているか、チェックにかかる時間に関係ない場合にのみ使用してください。



リストは簡単に連結できます:



  = [1, 2, 3] . extend ( [ 4, 5, 6] ) #   = {1, 2, 3, 4, 5, 6}
      
      





リストxを変更せずに残したい場合は、リストの追加を使用できます。



  = [1, 2, 3]  =  + [4, 5, 6] #= (1, 2, 3, 4, 5, 6] ;   
      
      





通常、1つの操作で1つの要素がリストに追加されます。



  = [1, 2, 3] x.append (0)#   = [1,2,3,0] =  [-1] # = 0 z = len (x)# = 4
      
      





リストに含まれる要素の数がわかっている場合、リストを解凍すると便利なことがよくあります。



 ,  = [1, 2] #   = 1,  = 2
      
      





式の両側で要素の数が同じでない場合、ValueErrorエラーメッセージが表示されます。



破棄された値には、通常、アンダースコアが使用されます。



 _,  = [1, 2] #   == 2,    
      
      





タプル



タプルはリストの不変(または不変)のいとこです。



リストを変更せずにリストで実行できるほとんどすべての処理は、タプルで実行できます。 角括弧の代わりに、丸括弧でタプルを作成するか、角括弧なしでタプルを作成できます。



 my_list = [1, 2] #   my_tuple = (1, 2) #   other_tuple = 3, 4 #    my_list [1] = 3 #  my_list = [1 , 3] try: my_tuple [1] = 3 except ypeError : print ( "   " )
      
      





タプルは、関数から複数の値を返す便利な方法を提供します。



 #        def sum_and_product (x,  ) : return ( + ) , ( * ) sp = sum_and_product (2, 3) # = (5, 6) s,  = sum_and_product (S, 10) # s = 15,  = 50
      
      





タプル(およびリスト)は、複数の割り当てでも使用されます。



 ,  = 1, 2 #   = 1,  = 2 ,  = ,  #   -;   = 2,  = 1
      
      





辞書



辞書または連想リストは、別の基本的なデータ構造です。



その中で、値はキーに関連付けられているため、特定のキーに対応する値をすばやく取得できます。



 empty_dict = {} #   - empty_dict2 = dict () #   - grades = { "Grigoriy" : 80, "Tim" : 95 } #   (  )
      
      





キー値には、角括弧を使用してアクセスできます。



 rigory_aleksee = grades[ "Grigoriy"] # = 80
      
      





辞書にない値を要求しようとすると、KeyErrorエラーメッセージが表示されます。



 try: kates_grade = grades [ "Kate "] except eyError: rint ( "    ! " )
      
      





in演算子を使用してキーを確認できます。



 grigoriy_has_grade = "Grigoriy" in grades #true kate_has_grade = "Kate" in grades #false
      
      





辞書にはget()メソッドがあり、欠落しているキーを検索するときに、例外をスローする代わりにデフォルト値を返します。



 grigoriy_grade = grades. get ( "Grigoriy ", 0) # =80 kates_grade = grades.get ("Kate" , 0) # = 0 no_ones_grade = grades.get ( "No One" ) #    = None
      
      





キー値の割り当ては、同じ角括弧を使用して実行されます。



 grades [ "Tim" ] = 99 #    grades [ "Kate"] = 100 #    num_students = len(grades) # = 3
      
      





辞書は、構造を表す簡単な方法としてよく使用されます

データ:



 tweet = { "user" : " grinaleks", "text" : "   -  ", " retweet_count" : 100, "hashtags " : [ "# data", " #science", " #datascience " , " #awesome", "#yolo" ] }
      
      





個々のキーの検索に加えて、一度に全員に連絡できます。



 tweet_keys = tweet.keys() #   tweet_values = tweet.values() #   tweet_items = tweet.items() #   (, ) "user" in tweet_keys # True,    in  "user" in tweet # -,   in  "grinaleks" in tweet_values # True
      
      





キーは不変でなければなりません。 特に、リストをキーとして使用することはできません。 複合キーが必要な場合は、タプルを使用するか、キーを文字列に変換する方法を見つけることをお勧めします。



Defaultdict辞書



ドキュメントで単語を数える必要があるとします。 この問題の明らかな解決策は、キーが単語で値が単語の頻度(またはテキスト内の単語の出現数)である辞書を作成することです。 単語をチェックするときに、現在の単語が既に辞書にある場合、その頻度は増加し、存在しない場合は、辞書に追加されます。



 #   word_ counts = { } document = { } #  ;    for word in document : if word in word counts: word_counts [word] += 1 else : word_counts [word] = 1
      
      





さらに、「許可よりも許しを求める方が良い」と呼ばれる方法を利用して、欠落しているキーにアクセスしようとしたときにエラーをキャッチできます。



 word_ counts = { } for word in document : try: word_counts [word] += 1 except eyError : word_counts [word] = 1
      
      





3番目のトリックは、get()メソッドを使用することです。これは、キーが欠落している状況からエレガントに抜け出します。



 word_counts = { } for word in document : previous_count = word_counts.get (word, 0) word_counts [word] = previous_count + 1
      
      





これらの手法はすべて少し面倒です。そのため、defaultdict辞書(デフォルト値を持つ辞書とも呼ばれます)を使用することをお勧めします。 1つの機能を除いて、通常の辞書のように見えます。その中にないキーにアクセスしようとすると、最初に引数なしの関数を使用して値を追加します。 defaultdict辞書を使用するには、それらをコレクションモジュールからインポートする必要があります。



 from collections import defaultdict word_counts = defaultdict(int) # int ()  0 for word in document : word_counts[word] += 1
      
      





さらに、defaultdict辞書の使用は、リスト、辞書、さらにはユーザー定義関数を操作する場合に実用的です。



 dd_list = defaultdict (list)# list ()    dd_list [2].append (l) #  dd_list  (2: {1] } dd_dict = defaultdict (dict ) # dict ()    dict dd_dict ["Grigoriy"] [ "City" ] = "Seattle" # { "Grigoriy" : { "City" : Seattle"} dd_pair = defaultdict (lambda: [0,0] ) dd_pair [2][1] = 1 #  dd_pair  (2 : {0,1] }
      
      





これらの機能は、辞書を「コレクション」に使用するときに必要になります

特定のキーの結果、および重複を避ける必要がある場合

辞書内のキーの存在をチェックします。



カウンター辞書



カウンターディクショナリのサブクラスは、値のシーケンスをdefaultdict(int)のようなオブジェクトに変換します。このオブジェクトでは、キーが周波数にマップされ、より正確には、キーが周波数で表示(マップ)されます。



主にヒストグラムの作成時に使用されます:



 from collections import Counter  = Counter([0,1,2,0]) #    = { 0 : 2, 1 : 1, 2 : 1 }
      
      





その機能により、単語の頻度を数える問題を簡単に解決できます。



 #      word_counts = Counter (document)
      
      





カウンター辞書にはmost_common()メソッドがあり、これは多くの場合便利です。



 #  10       () for word, count in word_counts.most_common(10) : print (word, count )
      
      





多くの



セットまたはセットのデータ構造は、繰り返しのない順序付けされていない要素のコレクションです。



 s = set ()#    s.add (1) #  s = { 1 } s.add (2) #  s = { 1, 2 } s.add (2) # s    = { 1, 2 }  = len (s) # = 2  = 2 in s # = True z = 3 in s # = False
      
      





多くは2つの理由で使用されます。 まず、セットのin操作は非常に高速です。 特定のシーケンスに属する要素の大きなセットをチェックする必要がある場合、リストよりもセットデータ構造の方が適しています。



 #  - stopwords_list = [ "a", "an" , "at "] + hundreds_of_other_words + [ "yet ", " you"] " zip" in stopwords_list # False,     #  - stopwords_set = set(stopwords_list) " zip" in stopwords_set #   
      
      





2番目の理由は、データセット内の一意の要素を取得することです。



 item_list = [1, 2, 3, 1, 2, 3] #  num_items = len( item_list) #  = 6 item_set = set(item_list) #   (1, 2, 3} num_distinct_items = len(item_set) #   = 3 distinct_item_list = list(item_set) #    = [1,2,3]
      
      





多くは、辞書やリストよりもはるかに少ない頻度で使用されます。



制御構造



他のほとんどのプログラミング言語と同様に、ifステートメントを使用して条件ごとにアクションを実行できます。



 if 1 > 2: message " 1    2 . . . " elif 1 > 3: message "elif  'else if '" else: message = "      ,  else "
      
      





さらに、将来使用される可能性のある単一行のトリプルif-then-else演算子を使用できます。



 parity = "" if  % 2 ===  else " "
      
      





Pythonにはループがあります:



  = 0 while  < 10: print (x, " 10")  += 1
      
      





ただし、forループはin演算子でより頻繁に使用されます。



 for  in range (lO) : print (x, " 10" ) 51
      
      





より複雑なループ制御ロジックが必要な場合は、演算子を使用できます



 continue  break: for  1n range (10) : 1f  == 3: continue #      if  == 5: break print (x) #   
      
      





その結果、0、1、2、および4が印刷されます。



真実



Pythonのブール変数は、他のほとんどのプログラミング言語と同じように機能しますが、1つだけ例外があります-大文字です:



 one_is_less_than_two = 1 < 2 #True true_equals_false = True == False #False
      
      





存在しない値を示すために、他の言語のnullに対応する特別なNoneオブジェクトが使用されます。



  = None print (x == None )#  True,    - print (  is None ) #  True -
      
      





Pythonは、ブール型が期待される任意の値を使用できます。 次のすべての要素のブール値はFalseです。





他のほとんどすべてが真実と見なされます。 これにより、空のリストをチェックするifステートメントを簡単に使用できます。 空行、空の辞書など。ただし、次のことを考慮しないと、認識しにくいエラーが発生する場合があります。



 s = some_function_that_returns_a_string () #    if s: first_char = s [0] #     else: first char = ""
      
      





同じことをする簡単な方法を次に示します。



 first_char = s and s [0]
      
      



論理演算子は、最初の値がtrueの場合は2番目の値を返し、falseの場合は最初の値を返すためです。 同様に、次の式のxが数値、または場合によってはNoneの場合、結果は何らかの形で数値になります。



 safe  =  or 0 #  
      
      





Pythonのすべての組み込み関数はリストを受け取り、各リスト項目がtrueの場合にのみTrueを返します。少なくとも1つの要素がtrueの場合、組み込み関数はtrueを返します。



 all ( [True, 1, { 3 }]) # True all ( [True, 1, {}] ) # False, {} =  any ( [ True, 1, {}]) # True, True =  all ( [] ) # True,      any ( [ ] ) # False,     
      
      






All Articles