CSV (Comma-Separated Values) – это текстовый формат хранения табличных данных, в котором значения в строке разделяются специальным символом-разделителем (чаще всего запятой). CSV-файлы возникают в аналитической практике в следующих ситуациях:
1) Экспорт данных из Excel. В Microsoft Excel можно выбрать Файл → Сохранить как → CSV (Comma delimited). В результате таблица сохраняется в текстовом формате.
2) Выгрузка из базы данных. SQL-запросы часто сохраняются в CSV для передачи аналитикам.
3) Экспорт из информационных систем. CRM-системы, бухгалтерские программы, системы мониторинга позволяют выгружать отчёты в формате CSV.
4) Генерация программой. Скрипт Python может сформировать CSV-файл как результат вычислений.
Несмотря на то что CSV используется для хранения таблиц, он остаётся текстовым файлом. Это означает:
· данные хранятся в виде строк;
· числа при чтении сначала воспринимаются как текст;
· структура таблицы определяется разделителем.
Пример CSV-файла:
name,age,scoreДинара,21,88Иван,20,75Мария,22,92
Первая строка обычно содержит имена столбцов (заголовки), последующие строки – данные.
2. Почему таблицу хранят в текстовом формате
Возникает логичный вопрос: если таблица – это структура данных, зачем представлять её как текст? Причины широкого использования CSV в аналитической практике приведены в таблице 2.3.1
Таблица 2.3.1 – Причины использования формата CSV в анализе данных
|
Пояснение |
|
|
Универсальность |
CSV является обычным текстовым файлом. Его можно открыть в Excel, просмотреть в текстовом редакторе, обработать в Python, загрузить в базу данных или передать по сети. Формат не зависит от конкретного программного обеспечения. |
|
Простота структуры |
CSV не содержит сложной разметки, встроенных формул, форматирования и скрытых данных. Он представляет собой строки текста и разделители. Такая структура облегчает автоматическую обработку. |
|
Малый размер |
CSV-файлы занимают меньше места по сравнению с файлами Excel (.xlsx), поскольку не хранят форматирование, макросы и служебные метаданные. |
|
Совместимость |
Формат поддерживается Python, R, MATLAB, SQL-системами, системами машинного обучения и BI-инструментами. Благодаря этому CSV часто используется как промежуточный формат обмена данными. |
Методический вывод: CSV – это компромисс между простотой хранения и универсальностью обработки.
3. Логика представления таблицы в CSV
Рассмотрим обычную таблицу 2.3.2
Таблица 2.3.2 – Табличный вид хранениения данных
|
name |
age |
score |
|
Анна |
21 |
88 |
В текстовом CSV-файле эта же информация записывается следующим образом:
name,age,score
Анна,21,88
Что здесь происходит?
1) Каждая строка таблицы становится отдельной строкой текстового файла.
2) Значения внутри строки записываются подряд и разделяются специальным символом – разделителем.
3) Чаще всего в качестве разделителя используется запятая (,), но может применяться и точка с запятой (;).
Иными словами:
· первая строка файла содержит имена столбцов;
· каждая последующая строка – это одна запись таблицы;
· структура таблицы задаётся не форматированием, а символом-разделителем.
Таким образом, CSV – это способ представить таблицу в виде обычного текста, сохранив при этом её строково-столбцовую структуру.
Несмотря на то что CSV представляет собой таблицу, с точки зрения Python это обычный текстовый файл. Следовательно, его обработка строится по той же логике, что и работа с текстовыми файлами, но с одним дополнительным этапом – разделением строки на столбцы. Главное отличие – необходимость разделения строки на отдельные значения. Отличие CSV-файла от обычного текстового файла, что при работе с CSV необходимо не просто прочитать строку, а восстановить табличную структуру, разделив строку на столбцы и приведя значения к корректным типам. Именно этот этап превращает текст в таблицу. Последовательность обработки CSV-файла в аналитической программе представлена в таблице 2.3.3.
Таблица 2.3.3 – Этапы обработки CSV-файла в Python
|
Содержание этапа |
Пояснение |
|
|
Открытие файла |
Получение доступа к внешнему источнику данных |
Создаётся файловый объект. Таблица ещё не загружена в память, программа лишь получает доступ к текстовому файлу. |
|
Чтение строк |
Построчное считывание файла |
Каждая строка файла соответствует одной записи таблицы. На этом этапе Python воспринимает строку как обычный текст, например: "Анна,21,88". |
|
Разделение строки по разделителю |
Разбиение строки на отдельные значения |
Строка разделяется по символу-разделителю (,, ;, \t). После разделения получается список значений: ["Анна", "21", "88"]. На этом этапе восстанавливается табличная структура. |
|
Преобразование типов данных |
Приведение значений к числовым или другим типам |
После разделения все элементы остаются строками. Для выполнения вычислений требуется преобразование: int() – для целых чисел, float() – для вещественных. |
|
Формирование структуры Python |
Создание внутренней структуры данных |
Полученные значения объединяются во внутреннюю структуру: список списков, список словарей или объект DataFrame. Только после этого данные становятся пригодными для анализа. |
5. Чтение CSV средствами стандартной библиотеки
CSV-файл можно обработать без использования специальных библиотек, рассматривая его как обычный текстовый файл. В этом случае программист самостоятельно выполняет разделение строки по символу-разделителю. Рассмотрим пример.
data = [] with open("students.csv", "r", encoding="utf-8") as file: # Чтение первой строки (заголовков столбцов)
header = file.readline().strip().split(",")
# Обработка остальных строк файла
forlineinfile:
# Удаление символа перевода строки и разделение по запятойvalues=line.strip().split(",")
# Добавление строки таблицы в списокdata.append(values)
print(header)(data)
file.readline() – считывает первую строку файла
– обычно это строка с названиями столбцов.
strip() – удаляет символ перевода строки
\n и возможные лишние пробелы.
split(",") – разделяет строку по запятой.
Например, строка:
"Анна,21,88"
превращается в список:
["Анна", "21", "88"]
Цикл for line in file: – озволяет последовательно
обработать каждую строку таблицы.
data.append(values) – формирует список строк
таблицы.
В результате data становится списком списков.
Структура полученных данных. После выполнения программы структура будет выглядеть следующим образом:
header = ["name", "age", "score"] data = [["Анна", "21", "88"],
["Иван", "20", "75"]]
Важно понимать: все значения остаются строками.
Проблема
такого подхода. Даже числовые значения (age, score) представлены как строки. Это означает, что с ними нельзя
выполнять математические операции без преобразования типов. Например:
age=int(values[1]) # преобразование в целое число
score=float(values[2]) # преобразование в вещественное число
Без преобразования попытка выполнить вычисление приведёт к ошибке или некорректному результату.
Методические замечания. Данный способ обработки CSV:
· демонстрирует базовую логику восстановления табличной структуры;
· позволяет понять, как текст превращается в таблицу;
· используется в учебных целях.
Однако в реальной аналитической практике чаще применяется:
·
модуль csv,
·
либо
библиотека pandas, поскольку они автоматически
обрабатывают структуру и типы данных.
В
стандартной библиотеке Python имеется специализированный
модуль csv, предназначенный для корректной
работы с CSV-файлами. В отличие от
ручного разделения строки методом split(), модуль csv учитывает особенности формата, например:
· наличие кавычек,
· разные символы-разделители,
· вложенные запятые внутри значений.
import csv with open("students.csv", "r", encoding="utf-8") as file: # Создание объектаreaderдля последовательного чтения строк
reader=csv.reader(file)
# Получение первой строки (заголовков)header=next(reader)
# Обработка остальных строкfor row in reader:
print(row)
Import csv – подключение стандартного модуля для
работы с CSV.
csv.reader(file) – создаётся объект-итератор,
который автоматически:
· считывает строки файла;
· разделяет их по разделителю;
· возвращает список значений.
next(reader) – извлекает первую строку файла
– обычно это заголовки столбцов.
for row in reader: – позволяет последовательно
получать каждую строку таблицы уже в виде списка.
Таким образом, Python автоматически выполняет этапы:
· чтение строки,
· разделение по разделителю,
· формирование списка значений.
Преимущества
модуля csv приведены в таблице 2.3.4.
Таблица 2.3.4 – Преимущества модуля CSV
|
Преимущество |
Пояснение |
|
Корректная обработка разделителей |
Учитываются случаи, когда запятая находится внутри кавычек |
|
Поддержка различных форматов |
Можно указать другой разделитель ( |
|
Снижение вероятности ошибок |
Не требуется вручную разбирать
строку методом
|
Методический
акцент. Модуль csv избавляет
от ручного восстановления структуры таблицы и делает код более надёжным. Однако:
· значения по-прежнему остаются строками;
· преобразование типов данных необходимо выполнять отдельно.
Именно
поэтому в аналитической практике чаще используется библиотека pandas, которая автоматически формирует
полноценную табличную структуру данных.
Переход
к Pandas. В
реальных задачах анализа данных CSV-файлы
чаще всего загружаются с помощью библиотеки pandas.
import pandas as pddf = pd.read_csv("students.csv")
Библиотека автоматически:
· восстанавливает структуру таблицы;
· распознаёт типы данных;
· создаёт объект DataFrame.
Подробное
рассмотрение библиотеки pandas и структуры DataFrame будет представлено в разделе
2.5.
7. Типичные проблемы при работе с CSV
В реальной аналитической практике CSV-файлы редко бывают идеально структурированными. Даже если файл открывается без ошибок, его содержимое может требовать дополнительной обработки. Наиболее распространённые проблемы представлены в таблице 2.3.5.
Таблица 2.3.5 – Типичные проблемы при работе с CSV
|
Проблема |
Проявление |
Возможные последствия |
Способ решения |
|
Пропущенные значения |
Пустые ячейки |
Ошибка преобразования типов |
Проверка на пустоту |
|
Разные разделители |
Используется
|
Некорректное разделение строки |
Указание
параметра |
|
Несогласованные типы данных |
В числовом столбце встречается текст |
Ошибка
|
Очистка данных, проверка типов |
|
Проблемы кодировки |
Некорректное отображение символов |
Ошибка чтения файла |
Указание параметра |
Пример указания разделителя
df = pd.read_csv("data.csv", sep=";")
Пример указания кодировки
with open("data.csv", "r", encoding="utf-8") as file:...
Методический акцент. Ошибки при работе с CSV чаще всего связаны не с синтаксисом Python, а с качеством исходных данных. Аналитик обязан:
· проверять структуру файла;
· контролировать типы данных;
· учитывать кодировку;
· предусматривать обработку исключений.
Именно подготовка данных к анализу является важнейшим этапом аналитической работы.
Итоги подраздела
В разделе 2.2 рассмотрены принципы работы с внешними источниками данных, используемыми в аналитической практике. Показано, что данные:
· поступают из файлов различных форматов (TXT, CSV, JSON, Excel и др.);
· не являются объектами Python до момента их загрузки;
· требуют последовательного преобразования во внутренние структуры языка.
Раскрыта логика работы с текстовыми файлами, включающая:
· выбор режима открытия;
· чтение данных;
· разделение строк;
· преобразование типов;
· формирование структур Python;
· обработку возможных исключений.
Отдельно рассмотрен формат CSV как табличная текстовая модель данных. Показано, что корректная работа с CSV-файлами требует:
· разделения строк по символу-разделителю;
· контроля типов данных;
· выявления пропусков и ошибок структуры.
Отмечены типичные проблемы реальных данных: пропущенные значения, несогласованные типы, различия в разделителях и ошибки кодировки. Таким образом, работа с файлами представляет собой обязательный этап аналитического процесса, предшествующий вычислениям, статистическому анализу и построению моделей. Корректная загрузка и предварительная обработка данных определяют достоверность последующих результатов.
Освоенные принципы работы с файлами и форматами данных будут закреплены в лабораторной работе №2, посвящённой загрузке, преобразованию и первичной проверке данных. В рамках лабораторной работы предстоит:
· считать данные из текстовых и CSV-файлов;
· восстановить табличную структуру из текстового представления;
· выполнить преобразование типов данных;
· реализовать обработку возможных ошибок и пропусков.
Таким образом, лабораторная работа №2 направлена на формирование устойчивых навыков подготовки данных к анализу – обязательного этапа любой аналитической процедуры. В следующем разделе будет рассмотрена обработка текстовой информации средствами регулярных выражений, что позволит перейти от структурированных файлов к анализу неструктурированного текста.
1. Почему данные из файла нельзя анализировать до их загрузки в память?
2. Какие режимы открытия файла существуют в Python?
3. В чём преимущество конструкции with при работе с файлами?
4. Какие этапы включает обработка текстового файла?
5. Почему значения из текстового файла по умолчанию имеют тип str?
6. В чём отличие ручной обработки CSV от использования модуля csv?
7. Какие типичные проблемы возникают при работе с CSV?
8. Почему контроль кодировки является обязательным?
9. Какие преимущества даёт использование pd.read_csv()?