Здравствуйте, если я вам не представился.

Меня зовут Мэтт, и я руководитель проекта Data Engineering. Моя работа требует от меня сотрудничества с различными департаментами центрального правительства Тайваня по нескольким проектам. В рамках моей роли я наблюдаю за аспектом обработки данных каждого проекта. Мне нравится делиться своими знаниями из своей работы на Medium и LinkedIn.

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

Ладно, давайте в тему. Если вы не смотрели Часть 1, вот ссылка.

6. os.path.join/glob.glob

Чтобы использовать os.path.join() и glob.glob() для поиска файлов с определенным текстом в их именах, вы можете использовать следующий подход:

  1. Используйте os.path.join() для создания действительного пути к файлу.
  2. Используйте glob.glob(), чтобы найти файлы, соответствующие указанному шаблону.

Вот пример:

import os
import glob

# Example directory path
directory_path = "/path/to/directory"

# Constructing a valid file path using os.path.join
file_name = "example_text"
file_extension = "*.txt"  # Change this to the desired file extension, e.g., "*.csv"
file_path = os.path.join(directory_path, file_name + file_extension)

# Finding files in the directory that match the specified text
matching_files = glob.glob(file_path)

# Print the list of matching files
print(matching_files)

В этом примере мы начинаем с заданного directory_path, представляющего каталог, в котором вы хотите искать файлы. Вам нужно указать file_name, который вы хотите найти, и file_extension, который вы ищете (например, '.txt' для текстовых файлов или '.csv' для CSV-файлов).

Используя os.path.join(), мы создаем правильный путь к файлу, комбинируя directory_path, file_name и file_extension. Полученный file_path будет выглядеть примерно так: «/path/to/directory/example_text.csv» (если вы ищете CSV-файлы).

Затем мы используем glob.glob() с file_path, чтобы найти все файлы в указанном каталоге, соответствующие шаблону. Функция glob.glob() возвращает список путей к файлам, соответствующих шаблону, или пустой список, если совпадений не найдено.

Наконец, мы печатаем список соответствующих файлов, чтобы увидеть результаты.

Обязательно измените переменные directory_path, file_name и file_extension в соответствии с вашим конкретным вариантом использования.

7. [pd.read_csv(файл) для файла в именах_файлов]

Этот метод очень пригодился мне, когда я впервые собрал кучу данных с правительственного веб-сайта. После очистки и загрузки данных на свой компьютер вы можете сразу прочитать эти CSV-файлы, а затем объединить их в один большой фрейм данных.

Вот пример:

import pandas as pd

# List of CSV file names
file_names = ['file1.csv', 'file2.csv', 'file3.csv']

# List comprehension to read CSV files into separate DataFrames
dataframes = [pd.read_csv(file) for file in file_names]

# Concatenate the DataFrames into a single DataFrame
combined_dataframe = pd.concat(dataframes, ignore_index=True)

# Now you have a single DataFrame containing the data from all CSV files
print(combined_dataframe)

В этом примере у нас есть список file_names, содержащий имена нескольких CSV-файлов. Вы можете использовать os.path.join / glob.glob из пункта 6, чтобы получить имена всех файлов, которые вы хотите объединить.

Затем мы используем понимание списка для чтения каждого CSV-файла в отдельный фрейм данных, в результате чего получается список фреймов данных с именем dataframes. Наконец, мы используем pd.concat() для объединения всех DataFrames в списке dataframes в один DataFrame combined_dataframe.

Параметр ignore_index=True в pd.concat() используется для сброса индекса результирующего кадра данных, поэтому объединенный кадр данных будет иметь новый непрерывный индекс, а не наследовать индексы от исходных кадров данных.

После выполнения этого кода combined_dataframe будет одним DataFrame, содержащим данные из всех CSV-файлов, указанных в списке file_names.

8. стержень

Метод pivot полезен, когда вы хотите реорганизовать данные и создать более структурированное представление вашего набора данных, особенно при работе с табличными данными, требующими суммирования или агрегирования. Метод pivot используется для изменения формы DataFrame путем преобразования значений из одного столбца в новые столбцы, создавая сводную таблицу.

Синтаксис для pivot следующий:

DataFrame.pivot(index=None, columns=None, values=None)
  • index: этот параметр указывает столбец, уникальные значения которого станут новым индексом (строками) сводной таблицы. Это необязательно, и если он не указан, текущий индекс DataFrame будет использоваться в качестве сводного индекса.
  • columns: этот параметр указывает столбец, уникальные значения которого станут заголовками новых столбцов сводной таблицы. Это необязательно, и если он не указан, в качестве столбцов будут использоваться уникальные значения указанного столбца index.
  • values: этот параметр указывает столбец, значения которого будут заполнять ячейки сводной таблицы. Это необязательно, и если он не указан, все столбцы, не указанные в index или columns, будут использоваться в качестве значений.

Вот пример, иллюстрирующий использование pivot:

import pandas as pd

# Sample data
data = {
    'Date': ['2023-07-01', '2023-07-02', '2023-07-01', '2023-07-02'],
    'City': ['London', 'London', 'Manchester', 'Manchester'],
    'Temperature': [24, 27, 22, 26],
    'Humidity': [60, 55, 75, 70]
}

# Create a DataFrame
df = pd.DataFrame(data)

# df:
# Date City Temperature Humidity
# 0 2023-07-01 London 24 60
# 1 2023-07-02 London 27 55
# 2 2023-07-01 Manchester 22 75
# 3 2023-07-02 Manchester 26 70



# Pivot the DataFrame to create a pivot table
pivot_table = df.pivot(index='Date', columns='City', values='Temperature')

print(pivot_table)
City        London  Manchester
Date                          
2023-07-01      24          22
2023-07-02      27          26

В этом примере у нас есть DataFrame df со столбцами «Дата», «Город», «Температура» и «Влажность». Мы используем метод pivot для создания сводной таблицы со столбцом «Дата» в качестве индекса, столбцом «Город» в качестве заголовков столбцов и столбцом «Температура» в качестве значений. Полученная сводная таблица показывает значения температуры для каждого города в разные даты.

9. разделить столбцы

Если у вас есть набор данных, подобный приведенному ниже,

data = {
    'column_to_split': ['value1A_value1B', 'value2A_value2B', 'value3A_value3B']
}

df = pd.DataFrame(data)

# column_to_split
# 0  value1A_value1B
# 1  value2A_value2B
# 2  value3A_value3B

вы, вероятно, захотите немного почистить этот набор данных.

Судя по всему, DataFrame должен содержать три строки и два столбца (значение A и значение B), но они сжаты в один столбец (представьте, что набор данных теперь не просто три строки. Это массивный набор данных со всеми сжатыми вместе столбцами!).

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

Вот как:

# Access the column you want to split
column_to_split_series = df['column_to_split']

# Split the values in the column based on the separator '_'
separated_series = column_to_split_series.str.split('_')

# Create new columns with the separated values
df[['column_part1', 'column_part2']] = pd.DataFrame(separated_series.tolist(), index=df.index)

Теперь ваш DataFrame будет выглядеть так:

column_to_split column_part1 column_part2
0  value1A_value1B      value1A      value1B
1  value2A_value2B      value2A      value2B
2  value3A_value3B      value3A      value3B

В приведенном выше коде мы создали новый DataFrame separated_series, содержащий отдельные части исходного столбца. Затем мы использовали pd.DataFrame, чтобы расширить эту серию на два новых столбца, column_part1 и column_part2, и соединили их с исходным фреймом данных df. Хитрость здесь в том, что мы указываем два новых столбца column_part1 и column_part2 со значениями, которые мы отсортировали (separated_series) ранее. Найдя правильный шаблон для своего набора данных, вы можете просто сделать то же самое!

Далее я представлю лучший инструмент для поиска закономерностей в ваших данных.

10. регулярное выражение

Регулярные выражения (regex или regexp) — это мощные инструменты, используемые для сопоставления с образцом и обработки текста. Они обеспечивают краткий и гибкий способ поиска, извлечения и замены определенных шаблонов в строках. Регулярные выражения поддерживаются в различных языках программирования, включая Python, JavaScript, Java и многие другие.

Вот некоторые ключевые понятия и общие символы, используемые в регулярных выражениях:

  1. Буквенные символы: регулярные выражения могут содержать буквенные символы, которые точно соответствуют самим себе. Например, шаблон «привет» будет соответствовать слову «привет» в строке.
  2. Метасимволы: Метасимволы — это специальные символы с особым значением в регулярных выражениях. Некоторые общие метасимволы включают в себя:
  • . (точка): соответствует любому символу, кроме новой строки.
  • ^ (вставка): соответствует началу строки.
  • $ (знак доллара): соответствует концу строки.
  • * (звездочка): соответствует нулю или более вхождений предшествующего символа.
  • + (плюс): соответствует одному или нескольким вхождениям предыдущего символа.
  • ? (вопросительный знак): соответствует нулю или одному вхождению предшествующего символа.
  • | (вертикальная черта): действует как оператор ИЛИ для соответствия одному из нескольких выражений.

3. Классы символов. Классы символов позволяют вам сопоставлять любой символ из набора символов. Некоторые общие классы символов включают в себя:

  • [0-9]: соответствует любой цифре (от 0 до 9).
  • [a-z]: соответствует любой строчной букве (от a до z).
  • [A-Z]: соответствует любой прописной букве (от A до Z).
  • \d: соответствует любой цифре (эквивалентно [0-9]).
  • \w: соответствует любому символу слова (буквенно-цифровые символы плюс подчеркивание).
  • \s: Соответствует любому пробельному символу (пробелы, символы табуляции, новые строки и т. д.).

4. Квантификаторы: Квантификаторы используются для указания количества вхождений символа или группы в образце. Например:

  • {n}: соответствует ровно n вхождениям.
  • {n,}: соответствует как минимум n вхождениям.
  • {n,m}: Совпадения между n и m вхождениями (включительно).

5. Группировка: Скобки () используются для группировки частей шаблона вместе.

Вот простой пример использования регулярного выражения в Python для извлечения адресов электронной почты из заданного текста:

import re

text = "Please contact [email protected] for assistance or [email protected] for more information."

pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
matches = re.findall(pattern, text)

print(matches)
# ['[email protected]', '[email protected]']

Шаблон регулярного выражения pattern определяется следующим образом:

  • \b: \b — это граница слова, гарантирующая, что шаблон соответствует только целым словам (в данном случае — полным адресам электронной почты).
  • [A-Za-z0-9._%+-]+: эта часть соответствует локальной части адреса электронной почты. Знак + за пределами списка допускает одно или несколько вхождений буквенно-цифровых символов (A-Z, a-z, 0-9), точки (.), подчеркивания (_), знака процента (%) или знака плюса (+).
  • @: соответствует символу «@», который отделяет локальную часть от доменной в адресе электронной почты.
  • [A-Za-z0-9.-]+: эта часть соответствует доменной части адреса электронной почты. Опять же, t допускает одно или несколько вхождений буквенно-цифровых символов (A-Z, a-z, 0-9), точки (.) или дефиса (-).
  • \.: соответствует буквальной точке (.). Нам нужно экранировать точку с помощью обратной косой черты, потому что простая точка имеет особое значение в регулярных выражениях (она соответствует любому символу).
  • [A-Z|a-z]{2,}: эта часть соответствует домену верхнего уровня (TLD) адреса электронной почты. Он допускает два или более вхождения прописных (A-Z) или строчных (a-z) букв.
  • \b: Еще одна граница слова, чтобы шаблон соответствовал только целым адресам электронной почты.

Наконец, функция re.findall() используется для поиска всех вхождений шаблона в строке text. Он возвращает список совпадающих адресов электронной почты, найденных в тексте.

Хорошо, если вам нравится, как я делюсь, подпишитесь на меня, чтобы узнать больше о том, что я узнал из своего путешествия по данным.

В ближайшие дни я поделюсь следующей статьей о моем путешествии по изучению английского языка. Надеюсь, вам будет интересно. 😊

LinkedIn: https://www.linkedin.com/in/matt-chang-5627281a2/

Среда: https://medium.com/@MattYuChang

Здоровья и удачного обучения! Увидимся в следующий раз!