2.3 CSV КАК ТАБЛИЧНЫЙ ТЕКСТОВЫЙ ФОРМАТ

1. Что такое CSV

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 – это способ представить таблицу в виде обычного текста, сохранив при этом её строково-столбцовую структуру.

4. Логика обработки 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(",")
    
    # Обработка остальных строк файла
    for line in file:
        # Удаление символа перевода строки и разделение по запятой
        values = line.strip().split(",")
        
        # Добавление строки таблицы в список
        data.append(values)
print(header)
print(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, поскольку они автоматически обрабатывают структуру и типы данных.

6. Использование модуля csv

В стандартной библиотеке 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

Преимущество

Пояснение

Корректная обработка разделителей

Учитываются случаи, когда запятая находится внутри кавычек

Поддержка различных форматов

Можно указать другой разделитель (delimiter=";")

Снижение вероятности ошибок

Не требуется вручную разбирать строку методом split()

 

Методический акцент. Модуль csv избавляет от ручного восстановления структуры таблицы и делает код более надёжным. Однако:

·       значения по-прежнему остаются строками;

·       преобразование типов данных необходимо выполнять отдельно.

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

Переход к Pandas. В реальных задачах анализа данных CSV-файлы чаще всего загружаются с помощью библиотеки pandas.

import pandas as pd
df = pd.read_csv("students.csv")

Библиотека автоматически:

·       восстанавливает структуру таблицы;

·       распознаёт типы данных;

·       создаёт объект DataFrame.

Подробное рассмотрение библиотеки pandas и структуры DataFrame будет представлено в разделе 2.5.

7. Типичные проблемы при работе с CSV

В реальной аналитической практике CSV-файлы редко бывают идеально структурированными. Даже если файл открывается без ошибок, его содержимое может требовать дополнительной обработки. Наиболее распространённые проблемы представлены в таблице 2.3.5.

 

Таблица 2.3.5 – Типичные проблемы при работе с CSV

Проблема

Проявление

Возможные последствия

Способ решения

Пропущенные значения

Пустые ячейки

Ошибка преобразования типов

Проверка на пустоту NaN, обработка исключений

Разные разделители

Используется ; или \t вместо ,

Некорректное разделение строки

Указание параметра sep (sep=";")

Несогласованные типы данных

В числовом столбце встречается текст

Ошибка ValueError

Очистка данных, проверка типов

Проблемы кодировки

Некорректное отображение символов

Ошибка чтения файла

Указание параметра encoding (encoding="utf-8")

 

Пример указания разделителя

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()?