Термины форматов, такие как CSV, JSON и XML, приходят на ум, когда вы начинаете работать с богатыми и разнообразными открытыми наборами данных. Как эффективно читать их в Python для подготовки к последующей сортировке и анализу? В этой статье показан процесс шаг за шагом, и вы также можете попрактиковаться в нем самостоятельно.
нужно
Каким бы сложным ни был алгоритм искусственного интеллекта, без данных «трудно приготовить без риса».
Данные ценны, а открытые данные особенно ценны. Будь то официальный аккаунт, Weibo или круг друзей, многие люди приходят в восторг, когда слышат ключевые слова «открытые данные», «ресурсы данных» и «ссылка на данные».
Получив, наконец, ссылку на данные своей мечты, вы обнаружите, что загруженные данные могут иметь различные странные форматы.
Наиболее распространены следующие:
- CSV
- XML
- JSON
Вы хотели бы вызвать Python для их очистки и анализа, выполняя свою собственную «алхимию данных».
Первый шаг — научиться читать эти открытые форматы данных в Python.
В этой статье мы будем использовать фактические примеры открытых данных, чтобы познакомить вас с тем, как считывать три распространенных сетевых открытых формата данных, CSV, XML и JSON, в Python для формирования структурированного фрейма данных, который удобен для ваших последующих действий. .
Вы готовы попробовать?
данные
Наша платформа открытых данных — Quandl.
Quandl — это платформа финансовых и экономических данных. Сюда входят не только дорогие данные о зарядке, но и многиебесплатные открытые данные.
Вам необходимо зарегистрировать бесплатную учетную запись в Quandl, чтобы иметь нормальный доступ к бесплатному сбору данных.
Для регистрации достаточно заполнить форму выше. После регистрации войдите под новой учетной записью и паролем.
После входа в систему нажмите «Поиск данных» в разделе «Основные финансовые данные» на главной странице.
Вы сразу же увидите великолепную коллекцию данных.
Не будь слишком счастлив. Внимательно посмотрите на метку справа от сбора данных, первая страница в основном «Премиум» (только для участников), которую могут использовать только платные пользователи.
Вам не нужно самостоятельно перелистывать страницы, чтобы найти бесплатные открытые данные. Нажмите «Бесплатно» в разделе «Фильтр» в левом верхнем углу страницы.
Все данные, показанные на этот раз, бесплатны.
Что содержат эти данные? Если вы заинтересованы, пожалуйста, найдите время, чтобы просмотреть для себя.
Среди них мы используем «Zillow Real Estate Research», который представляет собой очень большой набор данных по недвижимости.
Данные о недвижимости Zillow поступают из городов США. Вы можете выбрать интересующий вас город в соответствии с вашими увлечениями. Я выбрал Лексингтон, Кентукки.
Почему бы не выбрать Нью-Йорк, Лос-Анджелес, а выбрать его?
Потому что, когда я учился в США, я часто ездил туда на выходные.
Университет, который я посетил, находится в с. Здесь нет местного китайского супермаркета, и нельзя купить некоторые обычные продукты и приправы.
Если вы хотите пойти в китайский супермаркет, доберитесь до ближайшего «большого города» Лексингтона.
Расстояние от школы до него примерно такое же, как от Тяньцзиня до Пекина.
Сам я машину не покупал, а общественный транспорт был неудобен, поэтому поначалу я очень переживал.
К счастью, по выходным иностранные студенты часто ездят в Лексингтон за покупками. Я всегда следую за машиной.
В полутора часах езды от города мы отправились в настоящий китайский ресторан на обед в форме шведского стола перед тем, как отправиться в торговый центр. Они гуляли часа 2. Я нашел кафе или зону отдыха, чтобы закрыть глаза и послушать рассказы Луо Фатти в наушниках.
После того, как они закончили делать покупки, мы пошли в китайский супермаркет, чтобы купить вместе.
Этот «большой город» с большими торговыми центрами, аутентичными китайскими ресторанами, многочисленными автобусами и даже китайскими супермаркетами оставил у меня незабываемые воспоминания.
Возьмите его в качестве примера.
Получать
Поиск по слову «lexington ky» дает довольно много результатов.
Мы выбираем «Zillow Home Value Index (Metro): Home Sales (SA) — Lexington, KY» и щелкаем, чтобы увидеть страницу этого набора данных.
Вот средние цены продажи домов в Лексингтоне с течением времени.
Компания Quandl очень внимательно отнеслась к тому, чтобы помочь нам отобразить изменения в исторической информации о ценах с помощью линейного графика. Выбрав вкладку «ТАБЛИЦА», мы можем просмотреть необработанные данные.
Далее мы загружаем данные в локальный. Справа вверху есть кнопка Download, нажимаем на нее.
Как видите, Quandl предоставляет наши данные в 4 форматах, а именно
- CSV
- Excel
- JSON
- XML
Давайте не будем говорить здесь об Excel (поскольку это эксклюзивный формат Microsoft), а загрузим только остальные три категории данных по очереди.
Щелкните правой кнопкой мыши соответствующую категорию данных, выберите «Сохранить ссылку как» во всплывающем меню браузера, а затем сохраните ее локально.
Я загрузил для вас соответствующие 3 формата данных и сохранил их в проекте Github. Пожалуйста, посетитеэта ссылка, после загрузки сжатого пакета разархивируйте его для просмотра.
В сжатом пакете есть три разных формата информации о сделках с недвижимостью в Лексингтоне. На этой картинке вы можете видеть то же содержимое данных, файл csv занимает наименьшее пространство, за ним следует JSON; формат, который занимает наибольшее пространство, — это XML.
Имея данные, давайте подготовим среду программирования Python.
окрестности
Мы используем Anaconda, интегрированную среду выполнения Python.
пожалуйста, перейдите кэтот URLЗагрузите последнюю версию Анаконды. Прокрутите страницу вниз, чтобы найти место загрузки. В зависимости от системы, которую вы используете в настоящее время, веб-сайт автоматически порекомендует вам подходящую версию для загрузки. Я использую macOS, а формат загружаемого файла — pkg.
В левой части страницы загрузки указана версия Python 3.6, а в правой части — версия 2.7. Пожалуйста, выберите версию 2.7.
Дважды щелкните загруженный файл pkg и установите его шаг за шагом в соответствии с подсказками на китайском языке.
После установки Anaconda нам также необходимо убедиться, что установлены несколько необходимых пакетов.
Перейдите в свой «Терминал» (Linux, macOS) или «Командную строку» (Windows) и перейдите в каталог примера, который мы только что скачали и разархивировали.
Выполните следующую команду:
pip install json
pip install bs4
После установки выполнить:
jupyter notebook
Это входит в среду ноутбука Jupyter. Давайте создадим новую записную книжку Python 2.
Появляется пустой блокнот.
Щелкните имя блокнота в верхнем левом углу и измените его на осмысленное имя блокнота «demo-python-read-open-data-formats».
На этом подготовка завершена, и теперь мы можем начать чтение данных в разных форматах с помощью Python.
CSV
Начнем с самого простого формата CSV.
Так называемый CSV, является английской аббревиатурой «Значения, разделенные запятыми» (Comma Separated Values).
Давайте сначала вернемся в корневой каталог Jupyter Notebook.
Откройте наш образец CSV-файла,ZILLOW-M550_SALES.csv
приди и посмотри.
Как видите, первая строка — это заголовок, который описывает имя каждого столбца. После этого каждая строка представляет собой данные, которые представляют собой дату и соответствующую медианную цену продажи.
Два столбца данных в каждой строке разделены запятыми.
Мы можем использовать Excel, чтобы открыть данные csv, чтобы увидеть эффект более интуитивно.
Как показано на рисунке, когда мы открываем данные csv в Excel, Excel автоматически распознает их как форму данных. Запятая исчезла, и стало два столбца и несколько строк данных.
Ниже мы используем Python для чтения файла данных csv и его визуализации.
Ознакомьтесь с набором инструментов Pandas. Это может помочь нам работать с фреймами данных и является основным инструментом для анализа данных в Python.
import pandas as pd
Затем, чтобы изображение правильно отображалось в Jupyter Notebook, мы используем следующий оператор, чтобы разрешить встраивание изображений на страницу.
%matplotlib inline
Далее мы читаем в файле csv. Pandas наиболее дружелюбен к данным csv и предоставляетread_csv
Команда, вы можете напрямую читать данные csv.
df = pd.read_csv("ZILLOW-M550_SALES.csv")
Мы сохранили данные csv в переменной фрейма данных df. Ниже показан эффект чтения данных.
df.head()
Как видите, и дата, и медианная цена транзакции считываются правильно.
Давайте напишем функцию, которая поможет нам организовать наш фрейм данных. В основном он реализует следующие функции:
- Измените имена столбцов на строчные «дата» и «значение»;
- Расположите данные в хронологическом порядке. Поместите самую старую дату и соответствующее значение в первую строку, а самую новую дату и соответствующее значение — в конец;
- Установите время в качестве индекса фрейма данных, что в основном облегчает последующее рисование, горизонтальная ось правильно отображает данные даты.
def arrange_time_dataframe(df):
df.columns = ['date', 'value']
df.sort_values(by='date', inplace=True)
df.set_index('date', inplace=True)
return df
Затем мы вызываем эту функцию, чтобы привести в порядок переменную фрейма данных df.
df = arrange_time_dataframe(df)
Давайте покажем первые 5 строк df.
df.head()
Вы увидите, что данные даты будут проиндексированы и отсортированы в порядке возрастания.
Теперь пришло время рисовать. Инструмент фрейма данных Pandas предоставляет нам очень удобную функцию рисования графика временных рядов.
Для более красивого отображения мы устанавливаем соотношение сторон графики.
df.plot(figsize=(16, 6))
Сравните изображение, которое мы нарисовали, с образцом графики Quandl, соответствует ли оно?
JSON
JSON, сокращение от JavaScript Object Notation (нотация объектов JavaScript), представляет собой облегченный формат обмена данными. Как и CSV, это также текстовый файл.
Открываем загруженный файл JSON в Jupyter Notebook и изучаем его содержимое:
Все данные, которые нам нужны, находятся в нем. Давайте вернемся к файлу блокнота Python ipynb и попробуем прочитать содержимое данных JSON.
Сначала мы читаем инструментарий json.
import json
открыть нашу загрузкуM550_SALES.json
файл, прочитайте данные в переменную data.
with open("M550_SALES.json") as f:
data = json.load(f)
Чтобы увидеть это более интуитивно, давайте выведем JSON с правильным отступом. Здесь мы показываем только некоторые из предыдущих строк.
print(json.dumps(data, indent=2))
{
"dataset": {
"dataset_code": "M550_SALES",
"column_names": [
"Date",
"Value"
],
"newest_available_date": "2016-06-30",
"description": "The Zillow Home Value Index is Zillow's estimate of the median market value of home sales (nsa) within the metro of Morehead City, NC. This data is calculated by Zillow Real Estate Research (www.zillow.com/research) using their database of 110 million homes.",
"end_date": "2016-06-30",
"data": [
[
"2016-06-30",
64.0
],
[
"2016-05-31",
163.0
],
Как видите, файл JSON похож на большой словарь. Мы выбираем один из индексов, чтобы получить соответствующие данные.
Выбираем «набор данных»:
data['dataset']
Ниже приведены первые несколько строк результата.
{u'collapse': None,
u'column_index': None,
u'column_names': [u'Date', u'Value'],
u'data': [[u'2016-06-30', 64.0],
[u'2016-05-31', 163.0],
[u'2016-04-30', 118.0],
Данные, которые нас интересуют, находятся в разделе «данные». Продолжать:
data['dataset']['data']
Или просто покажите первые несколько строк:
[[u'2016-06-30', 64.0],
[u'2016-05-31', 163.0],
[u'2016-04-30', 118.0],
Разве это не те данные, которые мы хотим прочитать?
Чтобы отличить его от данных csv, на этот раз мы считываем данные и сохраняем их в переменной df1.
df1 = pd.DataFrame(data['dataset']['data'])
Покажите первые несколько строк:
df1.head()
Данные правильные, но имена столбцов странные.
Неважно, разве мы только что не скомпилировали функцию сортировки? Какими бы странными ни были названия столбцов, в них можно разобраться.
df1 = arrange_time_dataframe(df1)
После завершения мы снова вызываем функцию рисования, чтобы нарисовать данные df1:
df1.plot(figsize=(16, 6))
Рисунок правильный, доказывая, что наши данные JSON были успешно прочитаны.
XML
XML — это аббревиатура от eXtensible Markup Language. Он немного похож на исходный код HTML, который мы используем каждый день, когда бродим по Интернету, но есть отличия. Его первоначальное назначение — не отображать веб-страницы, а обмениваться данными.
Открываем загруженный XML-файл в Jupyter Notebook.
Внизу страницы мы видим интересующий нас раздел данных, но данные завернуты во множество тегов.
Ниже мы попытаемся использовать Python для извлечения и организации XML-данных.
Во-первых, мы читаем инструмент веб-аналитики Beautifulsoup.
from bs4 import BeautifulSoup
Это очень важный инструмент для извлечения информации с веб-страницы и один из основных навыков написания поисковых роботов на Python.
В этой статье будут использоваться только некоторые простые команды Beautifulsoup. Поэтому, даже если вы никогда раньше не контактировали с Beautifulsoup, это не имеет значения, просто сделайте это снова, чтобы получить некоторые перцептивные знания и опыт. Изучите систему позже.
Метод систематического обучения, который я рекомендую, это Beautifulsoup.Страница документацииЧитайте и изучайте внимательно.
Если у вас возникли трудности с чтением документа на английском языке, вы можете прочитать переведенный документ на китайском языке по адресуздесь.
Затем мы считываем загруженные XML-данные и сохраняем их в переменной data.
with open("M550_SALES.xml") as f:
data = f.read()
Затем мы используем инструмент «lxml» для анализа и анализа данных данных и сохранения их в переменной супа.
soup = BeautifulSoup(data, "lxml")
После синтаксического анализа мы можем воспользоваться мощными возможностями поиска Beautifulsoup.
Здесь мы наблюдаем файл XML:
Как видите, интересующие нас записи медианы дат и транзакций хранятся под тегом datum.
Среди них тип данных даты — «дата», а тип медианной цены сделки — «плавающая».
Давайте сначала попробуем использовать Beautifulsoupfind_all
функция для извлечения всех данных даты:
dates = soup.find_all('datum', type='date')
Давайте посмотрим на первые 5 строк результата извлечения:
dates[:5]
[<datum type="date">2016-06-30</datum>,
<datum type="date">2016-05-31</datum>,
<datum type="date">2016-04-30</datum>,
<datum type="date">2016-03-31</datum>,
<datum type="date">2016-02-29</datum>]
Отлично, данные извлекаются правильно. Проблема в том, что до и после все еще есть данные метки, и на данном этапе они нам не нужны.
Давайте разберемся с этим. Для каждого элемента в списке используйте свойство text Beautifulsoup для извлечения содержимого.
dates = [item.text for item in dates]
Взгляните на результаты извлечения на этот раз:
dates[:5]
[u'2016-06-30', u'2016-05-31', u'2016-04-30', u'2016-03-31', u'2016-02-29']
Без проблем.
Ниже мы рассматриваем запись медианной цены сделки таким же образом:
values= soup.find_all('datum', type='float')
Покажите результат:
values[:5]
[<datum type="float">64.0</datum>,
<datum type="float">163.0</datum>,
<datum type="float">118.0</datum>,
<datum type="float">110.0</datum>,
<datum type="float">83.0</datum>]
На этот раз есть еще этикетка, которую нужно удалить.
Обратите внимание, что здесь мы хотим сохранить результат как число с плавающей запятой, поэтому в дополнение к извлечению значения с помощью текстового атрибута используйтеfloat()
Функция выполняет преобразование.
values = [float(item.text) for item in values]
Покажите первые 5 строк:
values[:5]
[64.0, 163.0, 118.0, 110.0, 83.0]
Данные корректно преобразуются в число с плавающей запятой.
В наших руках список записей по медианной дате и цене сделки соответственно. Ниже мы конвертируем его во фрейм данных Pandas и сохраняем в переменной df2.
df2 = pd.DataFrame({'dates':dates, 'values':values})
Взгляните на первые несколько строк df2:
df2.head()
Данные у нас есть, давайте разберемся с нашей самописной функцией:
df2 = arrange_time_dataframe(df2)
Затем мы пытаемся построить df2:
df2.plot(figsize=(16, 6))
XML-данные успешно прочитаны и просмотрены.
резюме
До сих пор вы пытались читать данные CSV, JSON и XML во фрейм данных Pandas и выполнять самую простую визуализацию временных рядов.
У вас могут возникнуть следующие вопросы:
Поскольку файлы CSV такие маленькие, а Pandas легко читать, зачем изучать сложные методы чтения данных JSON и XML?
Это хороший вопрос!
Я могу назвать как минимум две причины.
Во-первых, найденная нами платформа Quandl предоставляет полный спектр форматов загрузки данных, охватывающих практически все распространенные категории форматов данных. Но это только исключение. Большинство платформ открытых данных не предоставляют столько форматов данных для загрузки. Поэтому, когда вы получаете данные только в формате JSON или XML, важно уметь их читать.
Во-вторых, добавление JSON или XML отнюдь не бессмысленно. Они могут помочь вам проверить данныечестностьа такжезаконность. Вы даже можете определить свои собственные семантические стандарты для эффективного обмена данными с другими.
Если вас интересуют форматы JSON и XML и вы хотите учиться систематически, то я рекомендую вам учиться на МООК-платформе Stanford Online.База данных Курс.
Желаю прогресса!
обсуждать
С каких платформ открытых данных вы обычно скачиваете данные? С какими форматами данных вы сталкивались? Какие инструменты вы используете для их организации и анализа? Есть ли более эффективный метод, чем эта статья? Добро пожаловать, чтобы оставить сообщение, поделиться своим опытом и мыслями со всеми, мы обменяемся и обсудим вместе.
Лайк пожалуйста лайк. Вы также можете подписаться на мой публичный аккаунт в WeChat и закрепить его."Юшу Жилан" (nkwangshyi).
Если вы интересуетесь наукой о данных, вы можете прочитать мою серию постов с учебными указателями "Как эффективно начать работу с наукой о данных?", есть более интересные задачи и решения.