Автоматизация контент-анализа СМИ
1. Введение
Контент-анализ - один из самых популярных ныне методов исследования, позволяющий получить максимально точные сведения об исследуемом объекте. Попытки компьютеризировать этот метод предпринимались давно и сейчас существует большое количество программ, позволяющих исследовать заданные конструкты в имеющихся данных. От SPSS до Статистики, - все эти методы с разной степенью точности позволяют изучать имидж исследуемого явления. Однако, ни один из них не может дать точной корреляции между исследуемыми конструктами / смысловыми формами. Эту задачу решает методика Чарльза Осгуда, компьютерная версия которой и будет описана ниже.
2. Математическое обоснование методики
По сути, метод заключается в расчете коэффициента корреляции. В теории вероятностей и мат. статистике это - величина, характеризующая степень связи между двумя переменными X и Y:
здесь означает ковариацию, - мат. ожидание, а - дисперсию.
Пусть и - это дискретные случайные величины, описывающие факт обнаружения элемента содержания (слова или словосочетания) в отдельно взятой статье исследуемого материала, а - дискретная случайная величина, описывающая их совместное обнаружение. Пусть эти случайные величины могут принимать одно из двух значений (0 или 1):
- если искомый элемент встречается в статье i
- если не встречается
Оценку вероятности события "элемент X обнаружен в отдельно взятой исследуемой статье", можно записать так:
, где - это количество статей, в которых фактически встречается искомый элемент содержания, а N - общее число исследуемых статей.
Математическое ожидание случайной величины E(X) можно оценить так:
Аналогично можно оценить и
В качестве оценки дисперсии возьмем:
Подставив оценки мат. ожидания и дисперсии в исходную формулу для корреляции, получим оценку силы семантической связи между двумя элементами содержания .
Коэффициент корреляции может принимать значения
Причем чем больше модуль , тем больше семантическая связь между элементами содержания X и Y.
3. Реализация методики
Следующий блок кода на языке Julia реализует приведенные выше формулы:
Pkg.add("PlotlyJS") Pkg.add("Requests") Pkg.add("MarketTechnicals") using PlotlyJS using Requests: get using MarketTechnicals count_articles(x,y,m,g) = Requests.json(get("https://npaleeva-toolkit.herokuapp.com/queries/osgood"; query = Dict("q" => x, "q2" => y, "m" => m, "g" => g))) my_plot(data, field) = Plot(scatter(x=data["dates"], y=data[field]), Layout(yaxis_range=[min(minimum(data[field]), 0),maximum(data[field])])) function osgood(x, y, m="", w=5, g="month",) data = count_articles(x, y, m, g) D(n, N, E) = ((N-n) * E^2 + n * (1-E)^2) / (N-1) S(Exy, Ex, Ey, Dx, Dy) = (Exy - Ex * Ey) / sqrt(Dx * Dy) # appplying moving averages moving_average(arr) = sma(arr, w)[:,1] N = moving_average(data["total"]) Nx = moving_average(data["x"]) Ny = moving_average(data["y"]) Nxy = moving_average(data["xy"]) # we can't apply moving averages to dates, so we use "median" approach instead shift = convert(Int8, floor(w/2)) data["dates"] = data["dates"][1+shift:length(data["dates"])-shift] data["Px"] = Ex = Nx ./ N data["Py"] = Ey = Ny ./ N data["Pxy"] = Exy = Nxy ./ N data["Dx"] = Dx = D.(Nx, N, Ex) data["Dy"] = Dy = D.(Ny, N, Ey) data["correlation"] = S.(Exy, Ex, Ey, Dx, Dy) return data end function plot_osgood(args...) data = osgood(args...) my_plot(data, "correlation") end
В связи с большим объемом исследуемого материала (около 300 тысяч статей из Самарских изданий за 2011-2014 годы), сам подсчет упоминаний выполняется в облачной базе данных.
4. Методика в действии
На графике ниже видно, как возрастает корреляция между словами "президент" и "выборы"в новостной ленте регионального издания "Комсомольская правда" в связи с президентскими выборами 4 марта 2012 г:
plot_osgood("выборы", "президента", "kp_samara_news", 5)