Перевод: сумасшедший технический ботаник
оригинал:к 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 применяет унифицированные типы в массивах, что ускоряет вычисления.