Unlisted
Edited
Dec 6, 2022
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// List of Rosneft origin stations taken from here: https://www.rosneft.ru/upload/site1/document_file/rep11_ezho4kv2020.pdf
getmanovskaya = FileAttachment("crude-to-getmanovskaya.csv")
.csv()
.then(c => c
.filter(d => d["Код станции назначения РФ"] === "52620")
.map(d => ({
date: d3.utcParse("%m.%Y")(d["Месяц отправления"]),
producer: d["Грузоотправитель наим по ЕГРПО"],
volume: d["Объем перевозок тонн"] / 1e3
})))
Insert cell
kropotkin = d3.sort(
d3.flatRollup(
shell_exports
.filter(d =>
d.stat === "1" &&
d["exporter code"] === "TMPRU006615")
.map(d => ({
date: d3.utcParse("%d-%m-%Y")(d.Date),
producer: d["raw manufacturer name"] ? d["raw manufacturer name"].match(/ОРЕНБУРГНЕФТЬ|ИНГУШНЕФТЬ|СТАВРОПОЛЬНЕФТЕГАЗ|ДАГНЕФТЬ|РОСНЕФТЬ/)[0] : "No data",
volume: parseInt(d["Net Weight Kg"]) / 1e3 / 1e3
})),
v => d3.sum(v, d => d.volume),
k => d3.utcMonth.floor(k.date),
k => k.producer
)
.map(([date, producer, volume]) => ({ date, producer, volume })),
k => k.date,
k => k.producer
)
Insert cell
komsomolsk = d3.sort(
d3.flatRollup(
lukoil_exports
.filter(d =>
d.stat === "1" &&
d["place of discharge"] === "PS KOMSOMOLSKAYA")
.map(d => ({
date: d3.utcParse("%d-%m-%Y")(d.Date),
volume: parseInt(d["Net Weight Kg"]) / 1e3 / 1e3
})),
v => d3.sum(v, d => d.volume),
k => d3.utcDay.floor(k.date)
)
.map(([date, volume]) => ({ date, volume })),
k => k.date
)
Insert cell
cpc_rf_freq = d3.flatRollup(
cpc,
v => d3.sum(v.filter(d => d.producer !== "Kazakhstan transit"), d => d.volume) / d3.sum(v, d => d.volume) * 100,
k => k.date
).map(([date, freq]) => ({ date, freq }))
Insert cell
cpc = d3.sort([...cpc_2021, ...cpc_2022, ...cpc_estimates], k => k.date, k => -k.volume)
Insert cell
cpc_estimates = [
{date: new Date("2022-10-15"), producer: "Kazakhstan transit", volume: 3448.4},
{date: new Date("2022-10-15"), producer: "LUKOIL", volume: 364},
{date: new Date("2022-10-15"), producer: "Independent producers", volume: 24.5},
{date: new Date("2022-10-15"), producer: "ROSNEFT", volume: 3},
{date: new Date("2022-11-15"), producer: "Kazakhstan transit", volume: 3448.4},
{date: new Date("2022-11-15"), producer: "LUKOIL", volume: 660},
{date: new Date("2022-11-15"), producer: "Independent producers", volume: 24.5},
{date: new Date("2022-11-15"), producer: "ROSNEFT", volume: 3}
]
Insert cell
cpc_2022 = FileAttachment("INE4092022.XLSX")
.xlsx()
.then(w => w
.sheet(0, { headers: true, range: "A4:N68" })
.filter(d => d["Country/port"] === "CPC" && d["Producer**"] !== "GAZPROM NEFT")
.flatMap(d => {
var o = [];
const producer = d["Producer**"];
[
"Producer**", "Markets", "Country/port", "Transport inside Russia",
"Transport on Russia frontier", "Ytd"
].forEach(c => {
delete d[c];
});
Object.keys(d).forEach(c => {
o.push({
date: d3.utcParse("%d %B %Y")(`15 ${c} 2022`),
producer: producer,
volume: d[c]
});
});
return o;
})
)
Insert cell
cpc_2021 = FileAttachment("INE4122021.XLSX")
.xlsx()
.then(w => w
.sheet(0, { headers: true, range: "A4:R103" })
.filter(d => d["Country/port"] === "CPC")
.flatMap(d => {
var o = [];
const producer = d["Producer"];
[
"Producer", "Markets", "Country/port", "Transport inside Russia",
"Transport on Russia frontier", "Ytd"
].forEach(c => {
delete d[c];
});
Object.keys(d).forEach(c => {
o.push({
date: d3.utcParse("%d %B %Y")(`1 ${c} 2021`),
producer: producer,
volume: d[c]
});
});
return o;
})
)
Insert cell
shell_exports = xlsx.utils.sheet_to_json(
xlsx.read(await FileAttachment("Export_Genius_09_16_2022_10_07_58.xlsx").arrayBuffer(), { type: "array" })
.Sheets["Data"],
{ raw: false })
Insert cell
lukoil_exports = xlsx.utils.sheet_to_json(
xlsx.read(await FileAttachment("Export_Genius_09_16_2022_10_19_26.xlsx").arrayBuffer(), { type: "array" })
.Sheets["Data"],
{ raw: false })
Insert cell
xlsx = require("xlsx@0.17.0/dist/xlsx.core.min.js")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more