Есть много данных, в основном неструктурированных. Электронные письма являются отличным источником данных общения. Как таковые. Нет ограничений на то, что мы можем использовать из них. В конце этого урока вы сможете получить данные электронной почты для понимания.
Предварительные условия
- Питон 3
- Панды
- Matplotlib
- Морской
- WordCloud
- Учетная запись Gmail
Получение данных
Есть несколько способов достичь цели этой статьи; Найдите ниже, как я сделал свой.
Здесь используется учетная запись Gmail; Чтобы сценарий imaplib для работы я внес следующие изменения в свою учетную запись; включен IMAP и включил менее защищенные приложения.
- Сначала откройте Gmail, нажмите на Настройки ⚙ Значок и нажмите «Посмотреть все настройки», чтобы включить IMAP.
- На следующей странице нажмите на Пересылка и поп/imap вкладка
- В IMAP Access Раздел, выберите Включить imap Анкет Затем нажмите Сохранить изменения Анкет Если вам нужна дополнительная помощь, пожалуйста, посетите это Страница справки Gmail Анкет
- Чтобы включить менее безопасные приложения, перейдите к панели панели Google, нажав на аватар своей учетной записи в верхнем правом углу экрана, а затем нажмите Моя учетная запись или перейдите к myaccount.google.com.
- Затем выберите Вход и безопасность Прокрутите вниз, пока не увидите опцию разрешить менее безопасные приложения, и включите доступ.
Если вы все еще не можете войти в систему после того, как сделано выше, пожалуйста, посетите здесь официальный Google Помогите поддержать Анкет
Шаг 1: Импорт необходимых библиотек для получения данных электронной почты
IMAPLIB – это библиотека протокола доступа к Интернету (IMAP)
Электронная почта – это библиотека Python, которая анализирует, обрабатывает и генерирует сообщения электронной почты.
GetPass – это библиотека Python, которая содержит утилиты для получения пароля или текущего имени пользователя
Pandas – это библиотека Python для манипулирования и анализа данных.
import imaplib import email import getpass import pandas as pd
Шаг 2: Получение доступа к адресу электронной почты
- Имя пользователя это адрес электронной почты.
- пароль это пароль по адресу электронной почты при запросе. [Если вы не хотите использовать пакет GetPass, вы можете ввести свой пароль в качестве строки.]
- Почта Является ли почтовый сервер, к которому мы собираемся подключиться, и он варьируется, для этого урока мы используем Gmail.
- mail.login Войдет в сервер, используя предоставленные учетные данные.
username = input("Enter the email address: ") password = getpass.getpass("Enter password: ") mail = imaplib.IMAP4_SSL('imap.gmail.com') mail.login(username, password)
Шаг 3: Указание почтового ящика для получения данных.
mail.list ()
это метод, который дает список почтовых ящиков, то есть входящие ящики, черновик и т. Д. В адресе электронной почты.mail.select ()
это метод, который принимает аргумент в пользу почтового ящика, из которого вы хотите получить данные.
print(mail.list()) mail.select("inbox")
Шаг 4: Поиск и получение данных
- Строка 1: mail.uid () – это метод, первым аргументом которого является команда, которую вы хотите выполнить, в данном случае командой является «поиск». Остальные аргументы используются для поиска. (Поиск дается от самых старых к недавним)
- Строка 1: Результатом является код выхода команды, в то время как номера – это список, который содержит объект типа байта.
- Строка 2: это список каждого раздела в цифрах.
- Строка 3: это список декодированных байтов
- Строка 4: является кусочком недавних 100 предметов (напомните, что поиск приказывает его с самых старых до недавнего).
- Строка 5: Команда, которую мы хотим выполнить, – это «привлечь» и хранить ее в сообщениях. Мы получаем предмет сообщений в этом случае.
result, numbers = mail.uid('search', None, "ALL") uids = numbers[0].split() uids = [id.decode("utf-8") for id in uids ] uids = uids[-1:-101:-1] result, messages = mail.uid('fetch', ','.join(uids), '(BODY[HEADER.FIELDS (SUBJECT FROM DATE)])')
Шаг 5: Подготовка данных для экспорта
- Строка 1-3: Пустые списки для данных, которые мы указали в сообщениях.
- Строка 4: Проверка по содержанию сообщения, которое мы получили. Используя шаг из двух, потому что он вернул кортеж из двух элементов.
- Строка 5: Расположение по электронной почте байтов в объект сообщения.
- Строка 6-11: MSG находится в байтах, чтобы использовать его, он должен был быть декодирован в формат, который мы можем прочитать.
- Строка 12: Добавление дат на дату_листа.
- Строка 13-15: Получив детали отправителя, он находится в формате «Имя отправителя», поэтому методы разделения и замены используются, чтобы получить только «имя отправителя».
- Строка 16-19: Преобразование объектов в date_list в объекты DateTime, поскольку время включает свой формат UTC, был создан новый список, и формат UTC был отрезан из каждого объекта в списке.
- Строка 20-22: Проверка длины созданных списков, потому что массивы должны быть одинаковой длины.
- Строка 23-25: Преобразование списков в словарь а затем пандас DataFrame, просмотр и сохранение для загрузки.
date_list = [] from_list = [] subject_text = [] for i, message in messages[::2]: msg = email.message_from_bytes(message) decode = email.header.decode_header(msg['Subject'])[0] if isinstance(decode[0],bytes): decoded = decode[0].decode() subject_text.append(decoded) else: subject_text.append(decode[0]) date_list.append(msg.get('date')) fromlist = msg.get('From') fromlist = fromlist.split("<")[0].replace('"', '') from_list1.append(fromlist) date_list = pd.to_datetime(date_list) date_list1 = [] for item in date_list: date_list1.append(item.isoformat(' ')[:-6]) print(len(subject_text)) print(len(from_list)) print(len(date_list1)) df = pd.DataFrame(data={'Date':date_list1, 'Sender':from_list, 'Subject':subject_text}) print(df.head()) df.to_csv('inbox_email.csv',index=False)
Визуализация
Теперь, когда у нас есть данные электронной почты в формате CSV, мы можем прочитать данные с помощью Pandas и визуализировать их. Есть несколько библиотек визуализации данных Python, но здесь я использовал WordCloud, Matplotlib и Seaborn. Я хотел увидеть инфографику по самым используемым словам в предметах моих электронных писем, и вот как я это сделал.
Шаг 1: Чтение и просмотр CSV
Шаг 2: Получение статистических данных
Я использовал метод описания, чтобы получить статистические данные, уникальные значения и все, чтобы получить представление о том, что в данных.
Шаг 3: Создание новых переменных
Я создал две переменные; Время и синкемид. Синкемид – это количество часов после полуночи.
(Примечание: время может быть полностью удалено из столбца даты)
from datetime import datetime FMT = '%H:%M:%S' emails['Time'] = emails['Date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%-d%H:%M:%S').strftime(FMT)) emails['SinceMid'] = emails['Time'].apply(lambda x: (datetime.strptime(x, FMT) - datetime.strptime("00:00:00", FMT)).seconds) / 60 / 60
Шаг 4: Графики
Я создал изображение Wordcloud самых используемых слов в предметах моих почт. В этом примере нет стоп -слов, остаточные слова обычно отфильтровываются, так как в большинстве случаев они не информативны.
from wordcloud import WordCloud import matplotlib.pyplot as plt # Create a list of words text = "" for item in emails["Subject"]: if isinstance(item,str): text += " " + item text.replace("'", "") text.replace(",","") text.replace('"','') # Create the wordcloud object wordcloud = WordCloud(width=800, height=800, background_color="white") # Display the generated image: wordcloud.generate(text) plt.figure(figsize=(8,8)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.margins(x=0, y=0) plt.title("Most Used Subject Words", fontsize=20,ha="center", pad=20) plt.show()
Вот выход:
Я создал гистограмму часов после полуночи, используя Seaborn.
import seaborn as sns sns.distplot(emails["SinceMid"],bins=20) plt.title("Hours since midnight")
Вот гистограмма:
Вы можете проверить Галерея Python Для более возможных визуализаций.
Вывод
Мне было весело писать это, надеюсь, вы тоже это сделали, читая это. Это само собой разумеется, я столкнулся с ошибками, делая это [Некоторые из них я никогда раньше не видел]. Когда вы получаете сообщения об ошибках, хорошей отправной точкой является использование оператора печати, чтобы получить понимание, а затем поиск сообщения об ошибке. Часть II также будет опубликована в этом блоге, она будет сосредоточена на получении тела почты, а не на эту тему как этот.
Полный код можно найти ниже:
yomaokobiah/email_analysis
Анализ данных электронной почты
Анализ данных электронной почты
Спасибо, что прочитали до этого момента.
Отказ от ответственности: я призываю вас экспериментировать вне того, что написано здесь, если вы столкнетесь с ошибками, и вам хочется привлечь меня [после Google], отправьте мне DM на Twitter Я был бы рад узнать что -то новое. Спасибо в ожидании.
Ссылки/кредиты
Оригинал: “https://dev.to/yomaokobiah/email-analysis-using-python-3-part-i-275e”