Основы науки о данных Python

Python

Перевод: сумасшедший технический ботаник

оригинал:к data science.com/Python-Bas…

Типы данных Python

В Python существует множество типов данных. Наиболее распространенными являются float (поплавок), int (целое число), str (строка), bool (логическое значение), list и dict (словарь).

  • float - используется для представления действительных чисел.
  • int — используется для представления целых чисел.
  • str - представляет текст. можно использовать одинарные кавычки'value',Двойные кавычки“value”или тройные кавычки"""value"""для определения строки. Строки в тройных кавычках можно использовать в нескольких строках текста, а также для комментариев.
  • bool - для логических значений.
  • list — коллекция для хранения значений.
  • dict — используется для хранения пар ключ-значение.

Можно использоватьtype(variable_name)функция для проверки типа конкретной переменной. Операторы в Python ведут себя по-разному в зависимости от типа переменной, и каждый оператор имеет разные встроенные методы.

Ниже приведены примеры создания переменных типа float, integer, string и boolean в Python.

year_of_birth = 1994
height_cm = 170.50
subject = "Data Science"
is_success = True

print(type(year_of_birth), type(height_cm), type(subject), type(is_success))

# 输出: <class 'int'> <class 'float'> <class 'str'> <class 'bool'>

Список Python

Списки Python — это базовый тип последовательности. Мы можем использовать этот тип для хранения коллекций значений. Список может содержатьлюбой типзначение, и список также может содержать другой список для вложения. Вы также можете создать список смешанных типов Python, но это не очень распространено. Список можно создать с помощью:

fruits = ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"]

подмножество списка

Один или несколько элементов могут быть извлечены из списка по индексу. В Python индексация начинается с0Начинать. Итак, первый элемент в списке соответствует индексу0. Мы также можем использовать отрицательные индексы для доступа к элементам, индекс последнего элемента в списке-1, индекс предпоследнего элемента равен-2,Так далее и тому подобное. У нас также есть функция в Python, называемаякусочекЧто-то, что можно использовать для получения нескольких элементов из списка. Его можно использовать следующим образом:sliceable[start_index:end_index:step].

  • start_index— начальный индекс среза, элемент с этим индексом включается в результат, значение по умолчанию —0.
  • end_indexэто конечный индекс среза, элемент по этому индексуне будет включенов результате значение по умолчанию будет列表的长度. Кроме того, еслиstepявляется отрицательным значением, значение по умолчанию может быть负的列表的长度 - 1. Если вы пропустите этот шаг, вы получите все элементы от начального индекса до конца.
  • stepколичество приращений индекса, по умолчанию1. если поставитьstepУстановите отрицательное значение для перехода от заднего плана к переднему.
fruits = ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"]
fruits[1]  # apple
fruits[0]  # "pineapple"
fruits[-1] # "kiwi"
fruits[5]  # "kiwi"
fruits[-3] # "strawberry"

# List slicing
fruits[::]    # ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"]
fruits[0:2]   # ["pineapple", "apple"]
fruits[-2:-1] # ["orange"]
fruits[3:]    # ["strawberry", "orange", "kiwi"]
fruits[:4]    # ["pineapple", "apple", "lemon", "strawberry"]
fruits[:]     # ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi"]
fruits[::-1]  # ["kiwi", "orange", "strawberry", "lemon", "apple", "pineapple"]
fruits[::-2]  # ["kiwi", "strawberry", "apple"]
fruits[::2]   # ["pineapple", "lemon", "orange"]

# Understanding some default values
fruits[0:6:1]    # 与fruits[::]的结果相同
fruits[-1:-7:-1] # 与fruits[::-1]的结果相同

Список действий

  • Можно использоватьappendметод или+(Оператор сложения) Добавляет один или несколько элементов в список. Если вы используете оператор сложения для двух списков, Python предоставит вам новый список, объединяющий два списка.
  • Вы можете использовать квадратные скобки для изменения одного или нескольких элементов в списке.
  • Можно использоватьremove(value)Метод удаляет элемент из списка. Этот метод удаляет первый идентичный элемент, сохраненный в списке со значением, переданным в качестве параметра.
# 添加一个元素
fruits.append("peach")
fruits 
#输出 ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi", "peach"]

fruits = fruits + ["fig", "melon"]
fruits 
#输出 ["pineapple", "apple", "lemon", "strawberry", "orange", "kiwi", "peach", "fig", "melon"]

# 修改
fruits[0:2] = ["grape", "mango"]
fruits 
#输出 ["grape", "mango", "lemon", "strawberry", "orange", "kiwi", "peach", "fig", "melon"]

# 从列表中删除
fruits.remove("mango")
fruits 
#输出 ["grape", "lemon", "strawberry", "orange", "kiwi", "peach", "fig", "melon"]

Важно понимать рабочий механизм списков. при создании нового спискаmy_list, список хранится в памяти компьютера, а адрес списка хранится вmy_listв переменной. Переменнаяmy_listНе содержит элементов списка, содержит только ссылку на список. Если мы используем знак равенства для копирования списка, напримерmy_list_copy = my_list, вы копируете только ссылку на список, а не значение списка. Итак, если вы хотите скопировать фактическое значение списка, вы можете использоватьlist(my_list)функция или срез[ : ].

numbers = [10, 42, 28, 420]
numbers_copy = numbers
numbers_copy[2] = 100
numbers      # [10, 42, 100, 420]
numbers_copy # [10, 42, 100, 420]

ratings = [4.5, 5.0, 3.5, 4.75, 4.00]
ratings_copy = ratings[:]
ratings_copy[0] = 2.0
ratings      # [4.5, 5.0, 3.5, 4.75, 4.0]
ratings_copy # [2.0, 5.0, 3.5, 4.75, 4.0]

characters = ["A", "B", "C"]
characters_copy = list(characters)
characters_copy[-1] = "D"
characters      # ["A", "B", "C"]
characters_copy # ["A", "B", "D"]

словарь Python

словарь для храненияпара ключ-значениеформа данных. когда вы хотите пройтиуникальный ключПолезно при индексации значений. В Python вы можете использоватьфигурные скобкиСоздайте словарь с ключами и значениями подвоеточиеразделены. Если вы хотите получить значение данного ключа, вы можете сделать это:our_dict[key].

Словари и списки

Давайте рассмотрим пример сравнения списков и словарей. Допустим, есть какие-то фильмы и мы хотим сохранить их рейтинги, а также хотим иметь очень быстрый доступ к рейтингам фильмов по названию фильма. Это можно сделать с помощью двух списков или словаря. В примереmovies.index(“Ex Machina”)Код возвращает индекс фильма «Из машины».

использовать список

movies = ["Ex Machina", "Mad Max: Fury Road", "1408"]
ratings = [7.7, 8.1, 6.8]

movie_choice_index = movies.index("Ex Machina")
print(ratings[movie_choice_index]) # 7.7

используй словарь

ratings = {
    "Ex Machina": 7.7,
    "Mad Max: Fury Road": 8.1,
    "1408" : 6.8
}

print(ratings["Ex Machina"]) # 7.7

Видно, что использование словаря более интуитивно понятно и удобно.

словарь операций

Данные в словаре могут бытьДобавить к,возобновитьиУдалитьработать. При добавлении или обновлении данных вы можете просто использоватьour_dict[key] = value, если вы хотите удалить пару ключ-значение, вы можете использоватьdel(our_dict[key])работать.

ratings["Deadpool"] = 8.0
print(ratings) 
# {'Ex Machina': 7.7, 'Mad Max: Fury Road': 8.1, '1408': 6.8, 'Deadpool': 8.0}

ratings["Ex Machina"] = 7.8
print(ratings) 
# {'Ex Machina': 7.8, 'Mad Max: Fury Road': 8.1, '1408': 6.8, 'Deadpool': 8.0}

del(ratings["1408"])
print(ratings) 
# {'Ex Machina': 7.8, 'Mad Max: Fury Road': 8.1, 'Deadpool': 8.0}

Вы также можете проверить, находится ли данный ключ в словаре:key in our_dict.

print("Ex Machina" in ratings) # True

функция

Функция — это многократно используемый код, решающий конкретную проблему. Можно использоватьdefФункция написания ключевых слов:

def is_prime(n):
    if n <= 1:
        return False
    elif n <= 3:
        return True
    elif n % 2 == 0 or n % 3 == 0:
        return False
    current_number = 5
    while current_number * current_number <= n:
        if n % current_number == 0 or n % (current_number + 2) == 0:
            return False
        current_number = current_number + 6
    return True

Однако в Python есть много встроенных функций, таких какmax( iterable[,key] ),min( iterable [,key] ),type( object ),round( number[,ndigits] )Ждать. Поэтому, когда нам нужна функция для решения проблемы, мы можем сначала выяснить, есть ли связанная встроенная функция или пакет Python. Не нужно «изобретать велосипед».

метод

Мы уже знаем, что в Python есть такие типы, как строки, числа с плавающей запятой, целые числа, логические значения и т. д. Все эти структуры данных являются объектами. Метод — это функция, которую можно использовать для данного объекта в зависимости от типа объекта. Таким образом, каждый объект имеет определенный тип и набор методов, точная форма зависит от заданного типа.

# 字符串方法
text = "Data Science" 
text.upper() # "DATA SCIENCE"
text.lower() # "data science"
text.capitalize() # "Data science"

# 列表方法
numbers = [1, 4, 0, 2, 9, 9, 10]
numbers.reverse()
print(numbers) # [10, 9, 9, 2, 0, 4, 1]
numbers.sort()
print(numbers) # [0, 1, 2, 4, 9, 9, 10]

# 字典方法
ratings = {
    "Ex Machina": 7.7,
    "Mad Max: Fury Road": 8.1,
    "1408" : 6.8
}

print(ratings.keys()) # dict_keys(['Ex Machina', 'Mad Max: Fury Road', '1408'])
print(ratings.values()) # dict_values([7.7, 8.1, 6.8])
print(ratings.items()) # dict_items([('Ex Machina', 7.7), ('Mad Max: Fury Road', 8.1), ('1408', 6.8)])

Объекты разных типов могут иметь методы с одинаковыми именами. Методы имеют разное поведение в зависимости от типа объекта.

numbers = [10, 30, 55, 40, 8, 30]
text = "Data Science"

numbers.index(8)  # 4
text.index("a")   # 1

numbers.count(30) # 2
text.count("i")   # 1

Всегда будьте осторожны! Некоторые методы могут изменять объект, для которого они вызываются. например, вызов типа спискаappend()метод.

Сумка

Модули — это файлы, содержащие определения и объявления Python. Используется для определения функций, методов и новых типов Python, которые решают определенные проблемы.

Пакет — это набор модулей. Существует множество пакетов Python, охватывающих решения в разных областях. Например, NumPy, matplotlib, seaborn и scikit-learn — очень известные пакеты поддержки обработки данных.

  • NumPy для эффективного управления массивами
  • matplotlib и seaborn — популярные библиотеки визуализации данных.
  • scikit-learn — мощная библиотека машинного обучения.

В Python по умолчанию есть несколько встроенных пакетов, но нам нужно больше пакетов, которые по умолчанию не установлены. Если вы хотите использовать пакет, он должен быть уже установлен или сначала установлен с помощью pip (система управления пакетами Python).

Кроме того, есть что-то под названием Анаконда.

Anaconda Distribution — это бесплатный, простой в установке менеджер пакетов, менеджер среды и дистрибутив Python с более чем 1000 пакетов с открытым исходным кодом и бесплатной поддержкой сообщества.

Поэтому, если вы не хотите устанавливать слишком много пакетов, я рекомендую вам использовать Anaconda. В этом дистрибутиве много полезных пакетов.

импортная декларация

После установки необходимых пакетов вы можете импортировать их в файл кода Python. Вы можете импортировать из него целые пакеты, подмодули или определенные функции. Вы также можете установить псевдонимы для пакетов. Различные способы импорта операторов можно увидеть в примерах ниже.

простой импорт

import numpy
numbers = numpy.array([3, 4, 20, 15, 7, 19, 0])

Установить псевдоним при импорте

import numpy as np # np 是 numpy 包的别名
numbers = np.array([3, 4, 20, 15, 7, 19, 0]) # 工作正常
numbers = numpy.array([3, 4, 20, 15, 7, 19, 0]) # 出错,NameError: name 'numpy' is not defined

Импортируйте подмодуль из пакета и установите псевдоним

# 从 matplotlib 包中导入 pyplot 子模块并设置别名 "plt"
import matplotlib.pyplot as plt

Импортировать только одну функцию из пакета

from numpy import array
numbers = array([3, 4, 20, 15, 7, 19, 0]) # 工作正常
numbers = numpy.array([3, 4, 20, 15, 7, 19, 0]) # 出错,NameError: name 'numpy' is not defined
type(numbers) # 输出:numpy.ndarray

Мы также можем импортировать так:from numpy import *. Звездочка означает импорт всего из этого модуля. Этот оператор импорта будет находиться в текущем пространстве имен какnumpyВсе общедоступные объекты, определенные модулем, создают ссылки. Другими словами, мы можем использоватьnumpyВсе функции доступны в имени функции без префикса. Например, теперь мы можем использовать функцию абсолютного значения NumPy следующим образом:absolute(), вместоnumpy.absolute().

Однако я не рекомендую вам использовать его, потому что:

  • Если вы импортируете все функции из какого-то модуля, текущее пространство имен будет заполнено слишком большим количеством функций, и если кто-то посмотрит на наш код, он может запутаться, к какому пакету принадлежит функция.
  • Если два модуля имеют функции с одинаковыми именами, второй импортированный модуль переопределит функцию первого модуля.

NumPy

NumPy — это основной пакет для научных вычислений с помощью Python. Это очень быстро и легко в использовании. Этот пакет может помочь нам выполнять поэлементные вычисления (поэлементно).

Обычные списки Python не знают, как работать с элементами. Конечно, мы также можем выполнять научные вычисления со списками Python, но это очень медленно и требует написания большего количества кода для получения желаемого результата. Это разумная идея чаще использовать NumPy.

В отличие от обычных списков Python, элементы в массивах NumPy всегда имеют только один тип. Если мы передаем массив другого типа вnp.array(), вы можете использовать параметрdtypeУстановите нужный тип. Если этот параметр не указан, тип определяется как наименьший тип, необходимый для хранения объекта.

Массивы NumPy — преобразование типов

np.array([False, 42, "Data Science"])   # array(["False", "42", "Data Science"], dtype="<U12")
np.array([False, 42], dtype = int)      # array([ 0, 42])
np.array([False, 42, 53.99], dtype = float) # array([  0.  ,  42.  ,  53.99])

# 无效的类型转换
np.array([False, 42, "Data Science"], dtype = float) # 不会把字符串 'Data Science' 转化为浮点型

Массивы NumPy имеют свои собственные свойства и методы. Вы помните ранее, что операторы Python ведут себя по-разному с разными типами данных? Для этого хорошо подходят операторы в NumPy.

Операторы над массивами NumPy

np.array([37, 48, 50]) + 1 # array([38, 49, 51])
np.array([20, 30, 40]) * 2 # array([40, 60, 80])
np.array([42, 10, 60]) / 2 # array([ 21.,   5.,  30.])

np.array([1, 2, 3]) * np.array([10, 20, 30]) # array([10, 40, 90])
np.array([1, 2, 3]) - np.array([10, 20, 30]) # array([ -9, -18, -27])

Если вы проверите тип массива NumPy, результат будетnumpy.ndarray. ndarray означает n-мерный массив. В предыдущих примерах использовались одномерные массивы, но можно использовать и 2-х, 3-х, 4-х и даже более размерные массивы. Мы можем подмножество массива независимо от размерности этого массива. Ниже приведены некоторые примеры двумерных массивов.

подмножество двумерного массива

numbers = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12]
])

numbers[2, 1]     # 8
numbers[-1, 0]    # 10
numbers[0]        # array([1, 2, 3])
numbers[:, 0]     # array([ 1,  4,  7, 10])
numbers[0:3, 2]   # array([3, 6, 9])
numbers[1:3, 1:3] # array([[5, 6],[8, 9]])

Если вы хотите узнать, сколько измерений имеет массив numpy и сколько элементов имеет каждое измерение, вы можете использоватьshapeАтрибуты. Следующий код получает форму двумерного массива, и первый элемент в возвращаемом кортеже — это количество строк, а второй элемент — это количество столбцов.

NumPyshapeАтрибуты

numbers = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12],
    [13, 14, 15]
])

numbers.shape # (5, 3)

Основная статистика

Первым шагом в анализе данных является ознакомление с данными. У NumPy есть несколько основных методов, которые помогут нам в этом.

  • np.mean()- Возвращает среднее арифметическое (сумма элементов, деленная на количество элементов).
  • np.median()- Возвращает медиану (среднее значение переданного массива, если длина массива четная, будет рассчитано среднее из двух средних значений)
  • np.corrcoef()- Возвращает корреляционную матрицу. Эта функция полезна, когда мы хотим увидеть, есть ли корреляция между двумя переменными в наборе данных или между двумя массивами одинаковой длины.
  • np.std()- возвращает стандартное отклонение
learning_hours = [1, 2, 6, 4, 10]
grades = [3, 4, 6, 5, 6]

np.mean(learning_hours)   # 4.6
np.median(learning_hours) # 4.0
np.std(learning_hours)    # 3.2
np.corrcoef(learning_hours, grades) 
# 输出:[[ 1.          0.88964891][ 0.88964891  1.        ]]

Создание базовой статистики с помощью NumPy

Из приведенного выше примера видно, что существует высокая корреляция между временем обучения и оценками.

Также см:

  • Среднее время обучения 4,6
  • Среднее время исследования составило 4,0.
  • Стандартное отклонение времени исследования составляет 3,2.

NumPy также имеет некоторые основные функции, такие какnp.sort()иnp.sum(), который имеет ту же функцию в базовом списке Python. Обратите внимание, однако, что NumPy применяет унифицированные типы в массивах, что ускоряет вычисления.