diff --git a/docs/antora/antora.yml b/docs/antora/antora.yml index 38ab008..2d88913 100644 --- a/docs/antora/antora.yml +++ b/docs/antora/antora.yml @@ -1,6 +1,6 @@ name: ted-rdf-docs version: master -title: TED-RDF Conversion Pipeline +title: TED-SWS documentation start_page: ROOT:index.adoc asciidoc: attributes: diff --git a/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image3.png b/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image3.png index f86a69d..1e08cf7 100644 Binary files a/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image3.png and b/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image3.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image7.png b/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image7.png index eccf702..60d3095 100644 Binary files a/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image7.png and b/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image7.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image8.png b/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image8.png new file mode 100644 index 0000000..026caee Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/jupyter_notebook/image8.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image10.png b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image10.png new file mode 100644 index 0000000..eb31397 Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image10.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image11.png b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image11.png new file mode 100644 index 0000000..de175d2 Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image11.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image12.png b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image12.png new file mode 100644 index 0000000..a2a1cac Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image12.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image3.png b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image3.png index ee139a0..b02bf06 100644 Binary files a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image3.png and b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image3.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image8.png b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image8.png new file mode 100644 index 0000000..b0fc6ef Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image8.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/ms_excell/image9.png b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image9.png new file mode 100644 index 0000000..ea14b7f Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/ms_excell/image9.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/sparql_queries/image1.png b/docs/antora/modules/ROOT/images/user_manual/sparql_queries/image1.png new file mode 100644 index 0000000..a16dcfb Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/sparql_queries/image1.png differ diff --git a/docs/antora/modules/ROOT/images/user_manual/sparql_queries/image2.png b/docs/antora/modules/ROOT/images/user_manual/sparql_queries/image2.png new file mode 100644 index 0000000..5c85ba1 Binary files /dev/null and b/docs/antora/modules/ROOT/images/user_manual/sparql_queries/image2.png differ diff --git a/docs/antora/modules/ROOT/nav.adoc b/docs/antora/modules/ROOT/nav.adoc index 1ec1ea7..5040c1e 100644 --- a/docs/antora/modules/ROOT/nav.adoc +++ b/docs/antora/modules/ROOT/nav.adoc @@ -1,27 +1,19 @@ +[.separated]#**TED-SWS**# + * xref:index.adoc[Home] - ** What is TED SWS - ** What is sample app? - ** What is mapping? - ** How to use TED SWS - ** What y’ll find in this documentation - ** How to contribute to TED SWS -* xref:mapping_suite/index.adoc[Mapping Suites] - ** Getting started - ** Who are these docs written for - ** Glossary - ** Assumptions we make about the skills of the reader - *** Prerequisites - ** what the user can achieve through these pages + + * xref:mapping_suite/index.adoc[Mapping Suite Docs] ** xref:mapping_suite/repository-structure.adoc[Repository structure] ** xref:mapping_suite/mapping-suite-structure.adoc[Mapping suite anatomy] ** xref:mapping_suite/code-list-resources.adoc[Code list mappings] ** xref:mapping_suite/preparing-test-data.adoc[Data samples] ** xref:mapping_suite/versioning.adoc[Versioning] - ** References -* xref:sample_app/index.adoc[TED Data Sample application] - ** xref:sample_app/jupyter_notebook.adoc[Jupyter Notebook] - ** xref:sample_app/ms_excell.adoc[MS Excel] + * xref:sample_app/index.adoc[Sample application Docs] + ** xref:sample_app/jupyter_notebook_python.adoc[Python Jupyter Notebook] + ** xref:sample_app/jupyter_notebook_r.adoc[R Jupyter Notebook] + ** xref:sample_app/ms_excel.adoc[MS Excel] + ** xref:sample_app/sparql_queries.adoc[SPARQL Queries] diff --git a/docs/antora/modules/ROOT/pages/index.adoc b/docs/antora/modules/ROOT/pages/index.adoc index b83c760..82dd320 100644 --- a/docs/antora/modules/ROOT/pages/index.adoc +++ b/docs/antora/modules/ROOT/pages/index.adoc @@ -1,22 +1,45 @@ -= TED-RDF Conversion Pipeline Documentation += TED-SWS End-User Documentation -The TED-RDF Conversion Pipeline, is part of the TED Semantic Web Services (TED-SWS system) and provides tools an infrastructure to convert TED notices available in XML format into RDF. This conversion pipeline is designed to work with the https://docs.ted.europa.eu/rdf-mapping/index.html[TED-SWS Mapping Suites] - self containing packages with transformation rules and resources. +TED Semantic Web Service (TED-SWS) is a pipeline system that continuously +converts the public procurement notices (in XML format) available on the +TED Website into RDF format based on the eProcurement Ontology, and publishes +them into CELLAR repository, hance making them available to the public +through CELLAR’s SPARQL endpoint. -== What is TED SWS +The TED Semantic Web Service (TED-SWS) is plugging together +the TED infrastructure for the collection and publication of public procurement +notices with the infrastructure of http://data.europa.eu/[data.europa.eu] +in order to make public procurement data accessible and reusable as +Linked Open Data (LOD) by users and stakeholders (see xref:motivation.adoc[the detailed motivation]). +== Audience -== What is sample app? +This documentation is written for a wide audience, with different interests in the TED-SWS project, and different levels of expertise Semantic Web, EU e-Procurement and software infrastructure. More specifically this documentation can be of interest to: +- *End-Users*, such as *Semantic Web Practitioners* or *Experts in eProcurement Domain*, who are interested in understanding how the RDF representation of the e-procurement notices look like, and how this representation conforms to the eProcurement Ontology (ePO). +- *Software Engineers* interested in integrating mapping suite packages into processing pipelines; +- *Semantic Engineers* interested in understanding and writing mappings from XML to RDF, in particular in the EU eProcurement domain; -== What is mapping? +== Contents +[.tile-container] +-- -== How to use TED SWS +[.tile] +.Mapping Suites +**** +The TED-RDF Mappings are the transformation rules needed by the TED-RDF Conversion Pipeline (both of which are part of the TED Semantic Web Services, aka TED-SWS system) to convert TED notices available in XML format to RDF. +<> +**** -== What y’ll find in this documentation +[.tile] +.Sample applications +**** +Sample application represents a set of examples that shows how to interact with TED RDF Data (available in CELLAR) using tools like Python, R or Excel. -== How to contribute to TED SWS - +<> +**** +-- diff --git a/docs/antora/modules/ROOT/pages/mapping_suite/code-list-resources.adoc b/docs/antora/modules/ROOT/pages/mapping_suite/code-list-resources.adoc index 24a9282..a82dce8 100644 --- a/docs/antora/modules/ROOT/pages/mapping_suite/code-list-resources.adoc +++ b/docs/antora/modules/ROOT/pages/mapping_suite/code-list-resources.adoc @@ -1,4 +1,4 @@ -=== Resources for Code List Mappings +== Resources for Code List Mappings The table below provides a list of resources that are used to map the various code lists used in the XML files to URIs in the RDF representation. diff --git a/docs/antora/modules/ROOT/pages/mapping_suite/index.adoc b/docs/antora/modules/ROOT/pages/mapping_suite/index.adoc index 167c942..878d4c8 100644 --- a/docs/antora/modules/ROOT/pages/mapping_suite/index.adoc +++ b/docs/antora/modules/ROOT/pages/mapping_suite/index.adoc @@ -1,16 +1,7 @@ -= What is a Mapping suite? += Mapping suite documentation A *mapping suite* is a set of "mappings" that defines how an XML document representing an e-Procurement Notice will be transformed to an equivalent RDF graph representation. These mappings are materialized in different forms, as it will be explained later, and a mapping suite will have all its relevant components organized in a package, which we refer to as a *mapping suite package*. -== Who are these docs written for? - -This documentation is written for a wide audience, with different interests in the TED-SWS project, and different levels of expertise Semantic Web, EU e-Procurement and software infrastructure. More specifically this documentation can be of interest to: - -- *Semantic Engineers* interested in understanding and writing mappings from XML to RDF, in particular in the EU eProcurement domain; -- *Software Engineers* interested in integrating mapping suite packages into processing pipelines; -- *End-Users*, such as *Semantic Web Practitioners* or *Experts in eProcurement Domain*, who are interested in understanding how the RDF representation of the e-procurement notices look like, and how this representation conforms to the eProcurement Ontology (ePO). - - == Prerequisites To allow for a proper understanding of the Mapping Suite Documentation, the reader should have: @@ -61,10 +52,8 @@ https://op.europa.eu/en/web/eu-vocabularies/e-procurement/tedschemas == Further readings Depending on the interest of the reader the following pages can be explored (in this logical order): -** xref:mapping_suite/ted-sws-introduction.adoc[] ** xref:mapping_suite/repository-structure.adoc[GitHub Repository structure] ** xref:mapping_suite/mapping-suite-structure.adoc[Mapping suite anatomy] ** xref:mapping_suite/code-list-resources.adoc[Code list mappings] ** xref:mapping_suite/preparing-test-data.adoc[Data samples] -** xref:mapping_suite/versioning.adoc[Versioning] -** xref:mapping_suite/ [References] \ No newline at end of file +** xref:mapping_suite/versioning.adoc[Versioning] \ No newline at end of file diff --git a/docs/antora/modules/ROOT/pages/mapping_suite/preparing-test-data.adoc b/docs/antora/modules/ROOT/pages/mapping_suite/preparing-test-data.adoc index 765a183..9a24d22 100644 --- a/docs/antora/modules/ROOT/pages/mapping_suite/preparing-test-data.adoc +++ b/docs/antora/modules/ROOT/pages/mapping_suite/preparing-test-data.adoc @@ -1,8 +1,8 @@ -= Representative sample data selection +== Representative sample data selection This section describes TED notice data samples and methods used to generate them. At first a sampling is performed on the notices from 2021, and then on a wider set. -== Sample TED notices from 2021 +=== Sample TED notices from 2021 This data sample (`test_data/sampling_2021`) contains carefully selected TED notices based on the following criteria: maximise representativeness, minimise the number of selected documents. The selected notices are guaranteed to cover all possible XPath configurations available in the data. The sampling was performed automatically using a custom algorithm available in the https://github.com/OP-TED/ted-rdf-conversion-pipeline[TED-RDF Conversion Pipeline] repository. diff --git a/docs/antora/modules/ROOT/pages/mapping_suite/repository-structure.adoc b/docs/antora/modules/ROOT/pages/mapping_suite/repository-structure.adoc index f7fa603..1886e8c 100644 --- a/docs/antora/modules/ROOT/pages/mapping_suite/repository-structure.adoc +++ b/docs/antora/modules/ROOT/pages/mapping_suite/repository-structure.adoc @@ -1,4 +1,4 @@ -= Repository structure +== Repository structure Transformation rules and other artefacts for the https://github.com/OP-TED/ted-rdf-conversion-pipeline[TED Semantic Web Services (TED-SWS)] system are organised in https://github.com/OP-TED/ted-rdf-mapping[this repository]. diff --git a/docs/antora/modules/ROOT/pages/motivation.adoc b/docs/antora/modules/ROOT/pages/motivation.adoc new file mode 100644 index 0000000..41474cd --- /dev/null +++ b/docs/antora/modules/ROOT/pages/motivation.adoc @@ -0,0 +1,62 @@ +# TED-SWS motivation + +In its Strategic Plan for 2020-2024, the Publications Office has +defined specific Ojective 1 on the "European public procurement space" +as part of its general Objective 2 "A Europe fit for the digital age". + +In this context the Publications Office has identified the need for reliable and +complete data on public procurement in the EU as being essential +for transparency and accountability of public spending. The ongoing +investments of the Publications Office for the transition to eForms, +and the continued development of the eProcurement Ontology are +identified by the Strategic Plan as being central for +improved data quality and enhanced automation of data processing +and interoperability. + +Additionally, in the context of specific objective 2 on the +"European data space", the Publications Office identifies the gap that +still exists between the available wealth of open data, spread across +multiple outlets, and the effort required to discover, access and reuse it. + +To bridge this gap, the Strategic Plan for 2020-2024, commits to +generate and share new knowledge as linked open data, through +an ecosystem of datasets, data models, ontologies and specialised services +accessible through a single entry point (http://data.europa.eu/[data.europa.eu]) +following a "data-as-a-public-service" approach. + +Although TED notice data is already available to the general public +through the search API provided by the TED website, the current offering +has many limitations that impede access to and reuse of the data. One +such important impediment is for example the current format of the data. + +Historical TED data come in various XML formats that evolved together +with the standard TED XML schema. The imminent introduction of eForms +will also introduce further diversity in the XML data formats available +through TED's search API. This makes it practically impossible for users +to consume and process data that span across several years, as +their information systems must be able to process several different +flavours of the available XML schemas as well as to keep up with the +schema's continuous evolution. Their search capabilities are therefore +confined to a very limited set of metadata. + +The TED Semantic Web Service removes these barriers by providing one +common format for accessing and reusing all TED data. Coupled with the +eProcurement Ontology, the TED data will also have semantics attached to +them allowing users to directly link them with other datasets. +Moreover, users will now be able to perform much more elaborate +queries directly on the data source (through the SPARQL endpoint). This +will reduce their need for data warehousing in order to perform complex +queries. + +These developments, by lowering the barriers, will give rise to a vast +number of new use-cases that will enable stakeholders and end-users to +benefit from increased availability of analytics. The ability to perform +complex queries on public procurement data will be equally open to large +information systems as well as to simple desktop users with a copy of +Excel and an internet connection. + +To summarize, the TED Semantic Web Service (TED SWS) is a pipeline +system that continuously converts the public procurement notices (in XML +format) available on the TED Website into RDF format, publishes them +into CELLAR and makes them available to the public through CELLAR’s +SPARQL endpoint. \ No newline at end of file diff --git a/docs/antora/modules/ROOT/pages/sample_app/index.adoc b/docs/antora/modules/ROOT/pages/sample_app/index.adoc index e69de29..768878b 100644 --- a/docs/antora/modules/ROOT/pages/sample_app/index.adoc +++ b/docs/antora/modules/ROOT/pages/sample_app/index.adoc @@ -0,0 +1,59 @@ += Sample app documentation + +A sample application, often referred to as a demo or prototype, is a functional representation of a software program or system that demonstrates its basic features, functionalities, and capabilities. In the context of TED-SWS (TED Semantic Web Services), a sample application would refer to a functional representation of how to access data processed by the system. + +== Glossary + +* *RDF* stands for Resource Description Framework. RDF is a standardized data model used to represent information on the web. RDF plays a crucial role in xref:ROOT:index.adoc[TED-SWS] because it provides a standardized and structured format for representing the procurement data made available through the service. This allows for efficient querying, processing, and integration of the data into various applications and systems. + +* *SPARQL Query* represents query language used to retrieve and manipulate data stored in RDF format. + +* *Jupyter Notebook* is an interactive computing environment that allows users to create and share documents containing live code, equations, visualizations, and explanatory text. It's particularly useful for working with data and performing data analysis, making it a valuable tool for xref:ROOT:mapping_suite/index.adoc[accessing and processing] data from TED-SWS. + +* *Python* is a widely used programming language that can be employed to retrieve data and xref:ROOT:sample_app/jupyter_notebook_python.adoc[perform operations] on the RDF data provided by TED-SWS. + +* *R language* refers to a popular programming language and environment specifically relevant for statistical computing, xref:ROOT:sample_app/jupyter_notebook_r.adoc[data analysis], and graphical representation that is used to retrieve and perform operations on the RDF data provided by TED-SWS. + +* *MS Excel* refers to Microsoft Excel, which is a widely used spreadsheet program developed by Microsoft used as a versatile tool for xref:ROOT:sample_app/ms_excel.adoc[handling and analysing] data obtained from TED-SWS. + +* *Code Editor* refers to a software tool or environment where users can write, edit, and execute code. It allows to easily create scripts or programs to retrieve data from TED-SWS and perform operations on the RDF data. + +* *Jupyter Notebook Kernel* refers to the computational engine that executes the code within a Jupyter Notebook. It determines which programming language is used to run the code in the notebook. For example, if you're working with TED-SWS in a Jupyter Notebook, you might choose to use a Python kernel, which means that you'll be writing and executing Python code. + +* *Business Questions* (BQ) refer to specific inquiries or information needs that pertain to business operations, procurement activities, or related aspects. These questions are typically posed by organizations, researchers, or individuals seeking to gain insights, make informed decisions, or conduct analyses based on the data provided by TED-SWS. + +== Prerequisites + +To use TED-SWS sample apps, you will need the following: + +Understanding of RDF and SPARQL:: Familiarity with RDF (Resource Description Framework) and SPARQL (SPARQL Protocol and RDF Query Language) is crucial. TED-SWS provides data in RDF format and utilizes SPARQL for querying. + +Access to a Programming Language:: You should have proficiency in a programming language capable of making HTTP requests and processing data. Common choices include Python or R. + +Knowledge of Semantic Web Technologies:: A basic understanding of Semantic Web concepts and technologies is beneficial. This includes knowledge of RDF triples, ontologies, and linked data principles. + +Development Environment:: Set up a development environment for your chosen programming language or at least ensure that you have installed MS Excel. + +Understanding of EU Procurement Data:: If your goal is to work with specific types of EU procurement data, such as contract notices or award notices, it's important to have a basic understanding of these concepts and the associated https://docs.ted.europa.eu/EPO/latest/index.html[ontology]. + +== Using Jupyter Notebook + +* <> + +Example of using Python language and to access data. + +* <> + +Example of using R language and to access data. + +== Using MS Excel + +* <> + +Example of accessing data in a MS Excel workbook. + +== SPARQL Query examples + +* <> + +Example of accessing data using SPARQL Query examples \ No newline at end of file diff --git a/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook.adoc b/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook.adoc deleted file mode 100644 index e69de29..0000000 diff --git a/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook_python.adoc b/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook_python.adoc new file mode 100644 index 0000000..370da30 --- /dev/null +++ b/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook_python.adoc @@ -0,0 +1,92 @@ +== Jupyter Notebook - Python + +This document shows an example using the Jupyter Notebook in Python. The +Jupyter Notebook is an application for creating and sharing +computational documents. Python represents a programming language for +writing computational documents. To realize the proposed scenario, it is +necessary to install the special tools and use the Python code that will +perform a query to the cellar and display the results in tabular +form. + +Example query: + +**Who are the contract winners for a given date?** + +[source,sparql] +PREFIX epo: +PREFIX org: +PREFIX cccev: +select distinct +?Lot +?Winner +?WinnerCountryCode +?LotAwardetAmountValue +?LotAwardetValueCurrency +where { + values ?NoticePublicationDate { + "20230921" + } + ?NoticeId a epo:ResultNotice; + epo:hasPublicationDate ?NoticePublicationDate; + epo:refersToLot ?Lot. + ?Lot a epo:Lot. + ?LotAwardOutcome epo:describesLot ?Lot; + a epo:LotAwardOutcome; + epo:comprisesTenderAwardOutcome ?TenderAwardOutcome. + ?TenderAwardOutcome a epo:TenderAwardOutcome; + epo:indicatesAwardOfLotToWinner / epo:playedBy ?Winner. + ?Winner a org:Organization. + optional { + ?Winner cccev:registeredAddress / epo:hasCountryCode ?WinnerCountryCode. + } + ?LotAwardOutcome epo:hasAwardedValue ?LotAwardetValue. + ?LotAwardetValue a epo:MonetaryValue; + epo:hasAmountValue ?LotAwardetAmountValue; + epo:hasCurrency ?LotAwardetValueCurrency. +} + +To run the sample application using Python language follow the steps below: + +[arabic] +. https://github.com/OP-TED/ted-rdf-docs/blob/main/notebooks/query_cellar_python.ipynb[Download Jupyter Notebook ] + + +[arabic, start=2] +. Download & Install Python 3.8 +[loweralpha] +.. Windows 64bit: +https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe[[.underline]#download#] + +.. Windows 86bit: +https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe[[.underline]#download#] + +. Open the Jupyter Notebook file with the code editor + +. In the code editor, select the Python interpreter that was installed in the previous step + +.Interpreter selection +image::user_manual/jupyter_notebook/image1.png[image,width=817,height=204] + + +[arabic, start=5] +. Install dependencies + +* Use OS command line and run the following command + +[source, python] +pip3 install sparqlwrapper pandas Jinja2 matplotlib + +NOTE: After installation, restart kernel from Jupyter Notebook to update it with new dependencies. This can be done by clicking on the "Restart" button in your code editor. + +[arabic, start=6] +. Run all Jupyter Notebook Cells + +.Button that runs all cells +image::user_manual/jupyter_notebook/image2.png[image,width=501,height=84] + +[arabic, start=7] +. After running successfully all the cells in the Jupyter Notebook, we can see the result table + +.Result table +image::user_manual/jupyter_notebook/image3.png[image,width=987,height=420] + diff --git a/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook_r.adoc b/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook_r.adoc new file mode 100644 index 0000000..4d3a6a5 --- /dev/null +++ b/docs/antora/modules/ROOT/pages/sample_app/jupyter_notebook_r.adoc @@ -0,0 +1,101 @@ +== Jupyter Notebook - R + +This document shows an example using Jupyter Notebook in R language. R is +software environment for statistical computing and graphic +representation. In this case, R represents the programming language for +writing notebook documents. To realize the proposed scenario, it is +necessary to install the special tools and +use the R code that will perform a query to +the cellar and display the results in tabular form. + +Example query: + +**Who are the contract winners for a given date?** + +[source,sparql] +PREFIX epo: +PREFIX org: +PREFIX cccev: +select distinct +?Lot +?Winner +?WinnerCountryCode +?LotAwardetAmountValue +?LotAwardetValueCurrency +where { + values ?NoticePublicationDate { + "20230921" + } + ?NoticeId a epo:ResultNotice; + epo:hasPublicationDate ?NoticePublicationDate; + epo:refersToLot ?Lot. + ?Lot a epo:Lot. + ?LotAwardOutcome epo:describesLot ?Lot; + a epo:LotAwardOutcome; + epo:comprisesTenderAwardOutcome ?TenderAwardOutcome. + ?TenderAwardOutcome a epo:TenderAwardOutcome; + epo:indicatesAwardOfLotToWinner / epo:playedBy ?Winner. + ?Winner a org:Organization. + optional { + ?Winner cccev:registeredAddress / epo:hasCountryCode ?WinnerCountryCode. + } + ?LotAwardOutcome epo:hasAwardedValue ?LotAwardetValue. + ?LotAwardetValue a epo:MonetaryValue; + epo:hasAmountValue ?LotAwardetAmountValue; + epo:hasCurrency ?LotAwardetValueCurrency. +} + +To run the sample application using R language follow the steps below: + +[arabic] +. https://cran.r-project.org/bin/windows/base/R-4.3.1-win.exe[Download] & install R language. + +[arabic, start=2] +. https://github.com/OP-TED/ted-rdf-docs/blob/main/notebooks/query_cellar_R.ipynb[Download Jupyter Notebook file]. + +[arabic, start=3] +. https://cran.r-project.org/src/contrib/Archive/SPARQL/SPARQL_1.16.tar.gz[Download SPARQL package archive] and put it in same folder as Notebook file. + +[arabic, start=4] +. Install the IRKernel. + +[loweralpha] +.. Run R in OS command line and type. + +[source,bash] +install.packages("IRkernel") +install.packages('RCurl') +install.packages('XML') + +[loweralpha, start=2] +. In the window prompt, select first option (mirror) and then press OK. + +.Secure download mirrors +image::user_manual/jupyter_notebook/image4.png[image,width=240,height=309] + +[loweralpha, start=3] +. After the installation is completed, run the following command in the terminal. +[source,bash] +IRkernel::installspec() + + +[arabic, start=5] +. Open the Jupyter Notebook file with the code editor. + +. Select R interpreter. + +.Interpreter selection +image::user_manual/jupyter_notebook/image5.png[image,width=901,height=142] + + +[arabic, start=7] +. Run all Jupyter Notebook Cells. + +.Button that runs all cells +image::user_manual/jupyter_notebook/image6.png[image,width=502,height=100] + +[arabic, start=8] +. After running successfully all the cells in the Jupyter Notebook, we can see the result table. + +.Result Table +image::user_manual/jupyter_notebook/image7.png[image,width=987,height=211] \ No newline at end of file diff --git a/docs/antora/modules/ROOT/pages/sample_app/ms_excel.adoc b/docs/antora/modules/ROOT/pages/sample_app/ms_excel.adoc new file mode 100644 index 0000000..78544fa --- /dev/null +++ b/docs/antora/modules/ROOT/pages/sample_app/ms_excel.adoc @@ -0,0 +1,43 @@ +== MS Excel + +This page explains how to use procurement data accessed from *Cellar* with Microsoft Excel. There are different ways to access TED notices in CELLAR +and use the data. The methods described below work with TED notice and other type of semantic assets. + +== Using sample with macros in Microsoft Excel + +This chapter show an example of spreadsheet in MS Excel with macros that is using TED-SWS data. The spreadsheet can be found https://github.com/OP-TED/ted-rdf-docs/blob/main/spreadsheets/sample_application.xlsm[here]. + +In this example you can find following sheets: + +** Query - sheet containing SPARQL query +** Result Query - sheet containing result table after querying +** Sample analysis - Example with analysis of table from Result Query sheet + +The following steps shows how to insert or update data using sample app: + +. Depending on the version of MS Excel used, when opening the downloaded spreadsheet a dialog box obout privacy levels might pop up. Set it to ignore privacy levels checks as the query is accessing a public website. To do this tick the checkbox to ignore Privacy Levels for this file in the prompted dialog box and then click Save. + +.Change privacy levels +image::user_manual/ms_excell/image11.png[image,width=507,height=466] + +[arabic, start=2] +. In the opened Excel spreadsheet, add the necessary SPARQL query in the "Query" sheet. + +.Example SPARQL Query +image::user_manual/ms_excell/image8.png[image,width=507,height=466] + +NOTE: After updating the query cell, the macros script will automatically trigger data updates. If the SPARQL query returns an empty result, MS Excel will create an error such as below + +image::user_manual/ms_excell/image12.png[image,width=507,height=466] + +[arabic, start=3] +. After data is updated, in the "Response Query" sheet you will find the updated table. + +.Query result table +image::user_manual/ms_excell/image9.png[image,width=907,height=466] + +[arabic, start=4] +. In the "Sample analysis" sheet you can find an example of analysis of the query result. Press "Update tables" button to update the Pivot tables and plots. + +.Sample analysis +image::user_manual/ms_excell/image10.png[image,width=807,height=166] diff --git a/docs/antora/modules/ROOT/pages/sample_app/ms_excell.adoc b/docs/antora/modules/ROOT/pages/sample_app/ms_excell.adoc deleted file mode 100644 index e69de29..0000000 diff --git a/docs/antora/modules/ROOT/pages/sample_app/sparql_queries.adoc b/docs/antora/modules/ROOT/pages/sample_app/sparql_queries.adoc new file mode 100644 index 0000000..8bee6a3 --- /dev/null +++ b/docs/antora/modules/ROOT/pages/sample_app/sparql_queries.adoc @@ -0,0 +1,133 @@ +== SPARQL Query examples + +In the context of TED-SWS, SPARQL queries refer to a specialized query language designed for retrieving and manipulating data stored in RDF (Resource Description Framework) format. SPARQL stands for SPARQL Protocol and RDF Query Language. It allows users to express complex queries to retrieve specific information from RDF datasets. In this document we will explain examples of queries to respond to some business questions. + + +=== BQ 1. How many contractors are SMEs for a given country and given date? + +[source,sparql] +PREFIX epo: +PREFIX cccev: +SELECT COUNT DISTINCT(?Notice) WHERE { + VALUES (?PublicationDate ?countryCode ?businessSize) { + ("20230905" + + ) + } + ?Notice epo:hasPublicationDate ?NoticePublicationDate . + ?Notice epo:announcesRole ?Buyer . + ?Buyer epo:playedBy ?Organization . + ?Oganization epo:hasBusinessSize ?businessSize . + ?Organization cccev:registeredAddress / epo:hasCountryCode ?countryCode . +} + +This SPARQL query aims to count the number of distinct procurement notices that meet specific criteria related to publication date, country code (Germany), and business size (SME). + + +=== BQ 2. Which notices have been published by Buyers from a specific country for a given date? + +[source,sparql] +PREFIX epo: +PREFIX cccev: +PREFIX org: +SELECT DISTINCT +?Notice +?Organization +?LegalName +WHERE { + VALUES (?PublicationDate ?countryCode) { + ("20230905" ) + } + ?Notice epo:hasPublicationDate ?PublicationDate . + ?Notice epo:announcesRole ?Buyer . + ?Buyer epo:playedBy ?Organization . + ?Organization cccev:registeredAddress / epo:hasCountryCode ?countryCode . + ?Organization epo:hasLegalName ?LegalName . +} + +This SPARQL query aims to retrieve distinct procurement notices that have been published by buyers from a specific country (Germany) on a specific date ("20230905" or 05-09-2023). It does so by specifying a set of values and then querying the RDF data based on those values. The query returns information about the notices, the organizations (buyers), and their legal names. + + +=== BQ 3. Who are the winners for a given date? + +[source,sparql] +PREFIX epo: +PREFIX org: +PREFIX cccev: +select distinct +?Lot +?Winner +?WinnerCountryCode +?LotAwardetAmountValue +?LotAwardetValueCurrency +where { + values ?NoticePublicationDate { + "20230921" + } + ?NoticeId a epo:ResultNotice; + epo:hasPublicationDate ?NoticePublicationDate; + epo:refersToLot ?Lot. + ?Lot a epo:Lot. + ?LotAwardOutcome epo:describesLot ?Lot; + a epo:LotAwardOutcome; + epo:comprisesTenderAwardOutcome ?TenderAwardOutcome. + ?TenderAwardOutcome a epo:TenderAwardOutcome; + epo:indicatesAwardOfLotToWinner / epo:playedBy ?Winner. + ?Winner a org:Organization. + optional { + ?Winner cccev:registeredAddress / epo:hasCountryCode ?WinnerCountryCode. + } + ?LotAwardOutcome epo:hasAwardedValue ?LotAwardetValue. + ?LotAwardetValue a epo:MonetaryValue; + epo:hasAmountValue ?LotAwardetAmountValue; + epo:hasCurrency ?LotAwardetValueCurrency. +} + +This SPARQL query aims to retrieve information about the winners of procurement lots for a specific date ("20230921" or 21-09-2023). It does so by specifying a value for the publication date, and then querying the RDF data based on that value. The query returns information about the lots, the organizations that won them, and details about the awarded amounts and currencies. + +=== BQ 4. Which is the highest value published for a contract award for a given date? + +[source,sparql] +PREFIX epo: +SELECT +?Notice +?NoticePublicationDate +?Lot +?AmmountValue +?CurrencyCode +WHERE { + VALUES ?Date { + "20230905" + } + ?Notice epo:hasPublicationDate ?NoticePublicationDate . + ?Notice epo:refersToLot ?Lot . + ?LotAwardOutcome epo:describesLot ?Lot . + ?LotAwardOutcome epo:hasAwardedValue ?MonetaryValue . + ?MonetaryValue a epo:MonetaryValue; + epo:hasAmountValue ?AmmountValue; + epo:hasCurrency ?CurrencyCode . +} +ORDER BY DESC(?AmmountValue) +LIMIT 1 + +This SPARQL query aims to retrieve the procurement notice, its publication date, the corresponding lot, and the highest awarded amount along with the currency code for a specific date ("20230905" or 05-09-2023). It does so by specifying a value for the date and then querying the RDF data based on that value. The query returns the information in descending order of the awarded amount, with only the highest value being displayed. + +NOTE: Other examples of SPARQL queries can be found https://github.com/OP-TED/ted-rdf-docs/tree/main/queries[here]. + +== Querying data using Virtuoso SPARQL Endpoint + +Virtuoso SPARQL Endpoint refers to a specific type of web service provided by Virtuoso, which is a high-performance, scalable, and feature-rich RDF database and SPARQL query engine. It provides a means to interact with the RDF data representing TED notices, allowing users to perform advanced querying and analysis tasks on the procurement information available in the system. It can be accessed https://publications.europa.eu/webapi/rdf/sparql[here]. + +The following instruction explains how to query Virtuoso SPARQL Query Endpoint using a query from the examples above: + +. Copy an example of query and access Virtuoso SPARQL Query endpoint Webpage + +. As shown in _Figure 1_, Insert the query in the "Query Text" box and press "Run Query" button + +.Querying TED-SWS data using Virtuoso SPARQL Query endpoint +image::user_manual/sparql_queries/image1.png[image,width=601,height=84] + +The result of the query is displayed as a data table (_Figure 2_). + +.Query result table +image::user_manual/sparql_queries/image2.png[image,width=801,height=84] \ No newline at end of file diff --git a/notebooks/query_cellar_R.ipynb b/notebooks/query_cellar_R.ipynb index 608427c..ff15f47 100644 --- a/notebooks/query_cellar_R.ipynb +++ b/notebooks/query_cellar_R.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": false, "pycharm": { @@ -12,17 +12,29 @@ "languageId": "r" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/user/AppData/Local/R/win-library/4.2'\n", + "(as 'lib' is unspecified)\n", + "\n", + "Warning message in install.packages(\"SPARQL_1.16.tar.gz\", repos = NULL, type = \"source\"):\n", + "\"installation of package 'SPARQL_1.16.tar.gz' had non-zero exit status\"\n" + ] + } + ], "source": [ "# Installing necessary packages\n", "# install.packages('RCurl')\n", "# install.packages('XML')\n", - "install.packages('SPARQL_1.16.tar.gz', repos = NULL, type =\"source\")" + "install.packages('SPARQL_1.16.tar.gz', repos = NULL, type = \"source\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": false, "pycharm": { @@ -32,7 +44,22 @@ "languageId": "r" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading required package: XML\n", + "\n", + "Warning message:\n", + "\"package 'XML' was built under R version 4.2.3\"\n", + "Loading required package: RCurl\n", + "\n", + "Warning message:\n", + "\"package 'RCurl' was built under R version 4.2.3\"\n" + ] + } + ], "source": [ "# Importing necessary libraries\n", "library(SPARQL)\n", @@ -43,23 +70,42 @@ "# Preparing query\n", "query <- '\n", "PREFIX epo: \n", + "PREFIX org: \n", "PREFIX cccev: \n", - "SELECT (COUNT (DISTINCT(?Notice)) as ?NrOfNotices) WHERE {\n", - " ?Notice epo:hasPublicationDate ?Date .\n", - " ?Notice epo:announcesRole ?Buyer .\n", - " ?Buyer epo:playedBy ?Organization .\n", - " ?Oganization epo:hasBusinessSize .\n", - " ?Organization cccev:registeredAddress / epo:hasCountryCode .\n", - " VALUES ?Date {\n", - " \"20230905\" \"20230906\"\n", + "select distinct\n", + "?Lot\n", + "?Winner\n", + "?WinnerCountryCode\n", + "?LotAwardetAmountValue\n", + "?LotAwardetValueCurrency\n", + "where {\n", + " values ?NoticePublicationDate {\n", + " \"20230921\"\n", " }\n", + " ?NoticeId a epo:ResultNotice;\n", + " epo:hasPublicationDate ?NoticePublicationDate;\n", + " epo:refersToLot ?Lot.\n", + " ?Lot a epo:Lot.\n", + " ?LotAwardOutcome epo:describesLot ?Lot;\n", + " a epo:LotAwardOutcome;\n", + " epo:comprisesTenderAwardOutcome ?TenderAwardOutcome.\n", + " ?TenderAwardOutcome a epo:TenderAwardOutcome;\n", + " epo:indicatesAwardOfLotToWinner / epo:playedBy ?Winner.\n", + " ?Winner a org:Organization.\n", + " optional {\n", + " ?Winner cccev:registeredAddress / epo:hasCountryCode ?WinnerCountryCode.\n", + " }\n", + " ?LotAwardOutcome epo:hasAwardedValue ?LotAwardetValue.\n", + " ?LotAwardetValue a epo:MonetaryValue;\n", + " epo:hasAmountValue ?LotAwardetAmountValue;\n", + " epo:hasCurrency ?LotAwardetValueCurrency.\n", "}\n", "'" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "collapsed": false, "pycharm": { @@ -80,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" @@ -89,10 +135,539 @@ "languageId": "r" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 76 × 5
LotWinnerWinnerCountryCodeLotAwardetAmountValueLotAwardetValueCurrency
<chr><chr><chr><dbl><chr>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568110_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568110_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/NOR> 5000000.00<http://publications.europa.eu/resource/authority/currency/NOK>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568115_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568115_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/AUT> 817097.50<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_892jPigYFVfQuuQEioV5g7><http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf><http://publications.europa.eu/resource/authority/country/POL> 11700.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_ZqK4WZRgemPDn3Ysr8vzYE><http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_NB3g9kk9sxbNau7GmSwyYQ><http://publications.europa.eu/resource/authority/country/POL> 125000.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/POL> 1455250.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_diPp46XcmeHRAMFFenhpzZ><http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ><http://publications.europa.eu/resource/authority/country/POL> 86900.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf><http://publications.europa.eu/resource/authority/country/PRT> 12675.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_NB3g9kk9sxbNau7GmSwyYQ><http://publications.europa.eu/resource/authority/country/PRT> 26325.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/PRT> 12675.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ><http://publications.europa.eu/resource/authority/country/PRT> 7800.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568092_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568092_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/BGR> 37700.00<http://publications.europa.eu/resource/authority/currency/BGN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568095_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568095_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/NOR> 44000000.00<http://publications.europa.eu/resource/authority/currency/NOK>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568109_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568109_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/SVK> 286620.84<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568103_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568103_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/BGR> 9600.00<http://publications.europa.eu/resource/authority/currency/BGN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568111_Lot_892jPigYFVfQuuQEioV5g7><http://data.europa.eu/a4g/resource/id_2023-S-182-568111_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf><http://publications.europa.eu/resource/authority/country/FRA>320125645.69<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568111_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568111_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/FRA> 14308980.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568111_Lot_diPp46XcmeHRAMFFenhpzZ><http://data.europa.eu/a4g/resource/id_2023-S-182-568111_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ><http://publications.europa.eu/resource/authority/country/FRA> 13159999.71<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_Ne4Gw2nNfmRCFaQXQVf8YJ><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_2B3FyzGMZNZK5zcDWnrH9B><http://publications.europa.eu/resource/authority/country/POL> 19950.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_AVSiFGXeZvbvgMmMDWY3h7><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_2jKyyLq7psEfGaASV45tnu><http://publications.europa.eu/resource/authority/country/POL> 28033.92<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_fSX5qfa2M8umiGJHmwzzaL><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_2vs6Ytpsa8umqgz4PKzyzk><http://publications.europa.eu/resource/authority/country/POL> 46446.80<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_WgiQcjsEWj6tuR8LMPEZMV><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_4dq8ZwabXDnmQVnQq7TwPd><http://publications.europa.eu/resource/authority/country/POL> 471.60<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_5URW8nPtCz4KQMsobddJaR><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_5VuRLnATk2TuPPLVvKJT4Z><http://publications.europa.eu/resource/authority/country/POL> 9800.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_gDjPLVzmsqMrZpvbnERkYL><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_8HGwtZDLNc98J8zHyiBxk4><http://publications.europa.eu/resource/authority/country/POL> 2880.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_bUw6RAsoMhcWzoHqdWboLP><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_9v3LzJsXkPUg6usPRLoW96><http://publications.europa.eu/resource/authority/country/POL> 13412.88<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_aApjrLbfdJ6ZBpRaheZkVC><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ALQ3FCLjeUMaY99Ve6Mpoa><http://publications.europa.eu/resource/authority/country/POL> 21120.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_XasuEBhoUxfoVSuYMWXmV4><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_BqtQdjvo6AUdTpQgLKfBRU><http://publications.europa.eu/resource/authority/country/POL> 8180.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_2a8EiNYfiMSdCDfHPuKvus><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_CnRh6UbYouSMsT5SMEE2f7><http://publications.europa.eu/resource/authority/country/POL> 21456.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_FkPAy2Y9eVjtFaGvn6VYRi><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_DVfySUU6AQaTdxM4YvdDYA><http://publications.europa.eu/resource/authority/country/POL> 6888.20<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_VmFrYk9foi3JF6y3GsLs2H><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_DdkjUFhZX3ioPRiNYot5f4><http://publications.europa.eu/resource/authority/country/POL> 243910.08<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_5ZLiMRkUgqFjmY8Likn4Ux><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_EUXcdcVJXv2EXsP83wEGRh><http://publications.europa.eu/resource/authority/country/POL> 13361.76<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_dyoPA4UDEFaw8g5No2MXRb><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_VKnf5AmP226sRNAHARTooy><http://publications.europa.eu/resource/authority/country/POL> 2626.56<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/POL> 119994.64<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_R6LXWtxmsHpX2fZeXmNYBn><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_XhJtdd9Xt2bHYSC88vq7BD><http://publications.europa.eu/resource/authority/country/POL> 4658.40<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_jidrjyHPk2GJ9D26ACwWBv><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_Xr4UfkytYMRKDaEPjhPex4><http://publications.europa.eu/resource/authority/country/POL> 81520.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_b3bxZYyEQFnFreTFXRj2pN><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_YE8P9rYTf5NqRDk36gNQW8><http://publications.europa.eu/resource/authority/country/POL> 2354.40<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_EqxKeBX4cL5CmdQD8JWgA5><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_YLoijcoBeWY5k7uAohrCJ5><http://publications.europa.eu/resource/authority/country/POL> 10033.20<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_aFLshDhJ35YxouNaUmgLoL><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_a2DwTL7oLvH67SkQYq46JF><http://publications.europa.eu/resource/authority/country/POL> 108168.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_R9qSF8NjURavF277ftM5By><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_bSGUi2Sn2YmvsonQFYE4qh><http://publications.europa.eu/resource/authority/country/POL> 1903.68<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_LbYLRa8gjKeijcDve5qbyd><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_dpscvZwpbChuRLFsLAtx8G><http://publications.europa.eu/resource/authority/country/POL> 47095.20<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_eamppjMLP9e8HyWKgmvo6X><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_eJFWGZ52sH8q6SBeMcwfWo><http://publications.europa.eu/resource/authority/country/POL> 1664.64<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_9KZavBxApP5nxUDtMJpKGb><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_eiAwDkhJ3HQvVSFBetASLK><http://publications.europa.eu/resource/authority/country/POL> 28800.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_NLqE5jWBXrmCpftysHo7Yk><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ekQXWKxXJitGzXx2G4v6rF><http://publications.europa.eu/resource/authority/country/POL> 2972.16<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_ByaYQQ6RJc78UnYtZTmoEe><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_enTM9LwzhnxHd3Ejb2Sua9><http://publications.europa.eu/resource/authority/country/POL> 31940.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_BUrBJRv6JucyVRyPNLDhCX><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ftV2BPY6TRG3NKmu9PukEc><http://publications.europa.eu/resource/authority/country/POL> 4748.40<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_9X5vk75uwGdbwreTzknDGT><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_gCkqh5ziySxzeToNEwoEyH><http://publications.europa.eu/resource/authority/country/POL> 8150.40<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_CywX2Le3N8DdWYPzxHPyBA><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_gvW9G83aYDhobBdKXtUveG><http://publications.europa.eu/resource/authority/country/POL> 6800.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_TJTXbsBLuodUzD4KtPx8yf><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_hcKQLGSUBUb2my4WX76vdr><http://publications.europa.eu/resource/authority/country/POL> 1876.32<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_diPp46XcmeHRAMFFenhpzZ><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ><http://publications.europa.eu/resource/authority/country/POL> 130000.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_BdMsMuygsRtRTzokxfw78P><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_iQSXjaMKXfhaqTJnqiTqcd><http://publications.europa.eu/resource/authority/country/POL> 36060.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_hKVQc9FtSBNvSfhopKjLsq><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_jSnxcYkoUPGdypasLCReFi><http://publications.europa.eu/resource/authority/country/POL> 71784.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_7HaHZcWYnL6u8BonoGDRZm><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_mJdqemiqGhG32JDfU2bhBy><http://publications.europa.eu/resource/authority/country/POL> 11923.20<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_YYoP8Sxj9ccJAKaaJ8KoJG><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_mS5Z37WHdkTC9WeHYMKB4p><http://publications.europa.eu/resource/authority/country/POL> 45237.60<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_gW9Vsh3CLWL2F2pf5VLtud><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_nVMZfGEEmXLMHAkvSJ3JRp><http://publications.europa.eu/resource/authority/country/POL> 7520.00<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_B5i9E4pQTX7XCkyEjNt7UC><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ns9Tx3dsbYTPdMJSeiWujA><http://publications.europa.eu/resource/authority/country/POL> 35683.20<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_LohzQrnoCZVmypHKa6Ccm6><http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_oTEPzFaXeCAh9f52RTErxa><http://publications.europa.eu/resource/authority/country/POL> 14692.80<http://publications.europa.eu/resource/authority/currency/PLN>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf><http://publications.europa.eu/resource/authority/country/BEL>3000000.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_5DskZUnCcVusgjQoBuZAqa><http://publications.europa.eu/resource/authority/country/BEL>3000000.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/ITA>3000000.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ><http://publications.europa.eu/resource/authority/country/MLT>3000000.00<http://publications.europa.eu/resource/authority/currency/EUR>
<http://data.europa.eu/a4g/resource/id_2023-S-182-568099_Lot_DgNm7RuiSQ47VBTvdrHsRv><http://data.europa.eu/a4g/resource/id_2023-S-182-568099_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo><http://publications.europa.eu/resource/authority/country/ITA>2670765.44<http://publications.europa.eu/resource/authority/currency/EUR>
\n" + ], + "text/latex": [ + "A data.frame: 76 × 5\n", + "\\begin{tabular}{lllll}\n", + " Lot & Winner & WinnerCountryCode & LotAwardetAmountValue & LotAwardetValueCurrency\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t & & & 5000000.00 & \\\\\n", + "\t & & & 817097.50 & \\\\\n", + "\t & & & 11700.00 & \\\\\n", + "\t & & & 125000.00 & \\\\\n", + "\t & & & 1455250.00 & \\\\\n", + "\t & & & 86900.00 & \\\\\n", + "\t & & & 12675.00 & \\\\\n", + "\t & & & 26325.00 & \\\\\n", + "\t & & & 12675.00 & \\\\\n", + "\t & & & 7800.00 & \\\\\n", + "\t & & & 37700.00 & \\\\\n", + "\t & & & 44000000.00 & \\\\\n", + "\t & & & 286620.84 & \\\\\n", + "\t & & & 9600.00 & \\\\\n", + "\t & & & 320125645.69 & \\\\\n", + "\t & & & 14308980.00 & \\\\\n", + "\t & & & 13159999.71 & \\\\\n", + "\t & & & 19950.00 & \\\\\n", + "\t & & & 28033.92 & \\\\\n", + "\t & & & 46446.80 & \\\\\n", + "\t & & & 471.60 & \\\\\n", + "\t & & & 9800.00 & \\\\\n", + "\t & & & 2880.00 & \\\\\n", + "\t & & & 13412.88 & \\\\\n", + "\t & & & 21120.00 & \\\\\n", + "\t & & & 8180.00 & \\\\\n", + "\t & & & 21456.00 & \\\\\n", + "\t & & & 6888.20 & \\\\\n", + "\t & & & 243910.08 & \\\\\n", + "\t & & & 13361.76 & \\\\\n", + "\t ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t & & & 2626.56 & \\\\\n", + "\t & & & 119994.64 & \\\\\n", + "\t & & & 4658.40 & \\\\\n", + "\t & & & 81520.00 & \\\\\n", + "\t & & & 2354.40 & \\\\\n", + "\t & & & 10033.20 & \\\\\n", + "\t & & & 108168.00 & \\\\\n", + "\t & & & 1903.68 & \\\\\n", + "\t & & & 47095.20 & \\\\\n", + "\t & & & 1664.64 & \\\\\n", + "\t & & & 28800.00 & \\\\\n", + "\t & & & 2972.16 & \\\\\n", + "\t & & & 31940.00 & \\\\\n", + "\t & & & 4748.40 & \\\\\n", + "\t & & & 8150.40 & \\\\\n", + "\t & & & 6800.00 & \\\\\n", + "\t & & & 1876.32 & \\\\\n", + "\t & & & 130000.00 & \\\\\n", + "\t & & & 36060.00 & \\\\\n", + "\t & & & 71784.00 & \\\\\n", + "\t & & & 11923.20 & \\\\\n", + "\t & & & 45237.60 & \\\\\n", + "\t & & & 7520.00 & \\\\\n", + "\t & & & 35683.20 & \\\\\n", + "\t & & & 14692.80 & \\\\\n", + "\t & & & 3000000.00 & \\\\\n", + "\t & & & 3000000.00 & \\\\\n", + "\t & & & 3000000.00 & \\\\\n", + "\t & & & 3000000.00 & \\\\\n", + "\t & & & 2670765.44 & \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 76 × 5\n", + "\n", + "| Lot <chr> | Winner <chr> | WinnerCountryCode <chr> | LotAwardetAmountValue <dbl> | LotAwardetValueCurrency <chr> |\n", + "|---|---|---|---|---|\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568110_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568110_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/NOR> | 5000000.00 | <http://publications.europa.eu/resource/authority/currency/NOK> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568115_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568115_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/AUT> | 817097.50 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_892jPigYFVfQuuQEioV5g7> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf> | <http://publications.europa.eu/resource/authority/country/POL> | 11700.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_ZqK4WZRgemPDn3Ysr8vzYE> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_NB3g9kk9sxbNau7GmSwyYQ> | <http://publications.europa.eu/resource/authority/country/POL> | 125000.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/POL> | 1455250.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_Lot_diPp46XcmeHRAMFFenhpzZ> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568096_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ> | <http://publications.europa.eu/resource/authority/country/POL> | 86900.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf> | <http://publications.europa.eu/resource/authority/country/PRT> | 12675.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_NB3g9kk9sxbNau7GmSwyYQ> | <http://publications.europa.eu/resource/authority/country/PRT> | 26325.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/PRT> | 12675.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568079_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ> | <http://publications.europa.eu/resource/authority/country/PRT> | 7800.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568092_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568092_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/BGR> | 37700.00 | <http://publications.europa.eu/resource/authority/currency/BGN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568095_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568095_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/NOR> | 44000000.00 | <http://publications.europa.eu/resource/authority/currency/NOK> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568109_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568109_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/SVK> | 286620.84 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568103_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568103_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/BGR> | 9600.00 | <http://publications.europa.eu/resource/authority/currency/BGN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568111_Lot_892jPigYFVfQuuQEioV5g7> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568111_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf> | <http://publications.europa.eu/resource/authority/country/FRA> | 320125645.69 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568111_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568111_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/FRA> | 14308980.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568111_Lot_diPp46XcmeHRAMFFenhpzZ> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568111_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ> | <http://publications.europa.eu/resource/authority/country/FRA> | 13159999.71 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_Ne4Gw2nNfmRCFaQXQVf8YJ> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_2B3FyzGMZNZK5zcDWnrH9B> | <http://publications.europa.eu/resource/authority/country/POL> | 19950.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_AVSiFGXeZvbvgMmMDWY3h7> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_2jKyyLq7psEfGaASV45tnu> | <http://publications.europa.eu/resource/authority/country/POL> | 28033.92 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_fSX5qfa2M8umiGJHmwzzaL> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_2vs6Ytpsa8umqgz4PKzyzk> | <http://publications.europa.eu/resource/authority/country/POL> | 46446.80 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_WgiQcjsEWj6tuR8LMPEZMV> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_4dq8ZwabXDnmQVnQq7TwPd> | <http://publications.europa.eu/resource/authority/country/POL> | 471.60 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_5URW8nPtCz4KQMsobddJaR> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_5VuRLnATk2TuPPLVvKJT4Z> | <http://publications.europa.eu/resource/authority/country/POL> | 9800.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_gDjPLVzmsqMrZpvbnERkYL> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_8HGwtZDLNc98J8zHyiBxk4> | <http://publications.europa.eu/resource/authority/country/POL> | 2880.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_bUw6RAsoMhcWzoHqdWboLP> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_9v3LzJsXkPUg6usPRLoW96> | <http://publications.europa.eu/resource/authority/country/POL> | 13412.88 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_aApjrLbfdJ6ZBpRaheZkVC> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ALQ3FCLjeUMaY99Ve6Mpoa> | <http://publications.europa.eu/resource/authority/country/POL> | 21120.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_XasuEBhoUxfoVSuYMWXmV4> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_BqtQdjvo6AUdTpQgLKfBRU> | <http://publications.europa.eu/resource/authority/country/POL> | 8180.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_2a8EiNYfiMSdCDfHPuKvus> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_CnRh6UbYouSMsT5SMEE2f7> | <http://publications.europa.eu/resource/authority/country/POL> | 21456.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_FkPAy2Y9eVjtFaGvn6VYRi> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_DVfySUU6AQaTdxM4YvdDYA> | <http://publications.europa.eu/resource/authority/country/POL> | 6888.20 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_VmFrYk9foi3JF6y3GsLs2H> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_DdkjUFhZX3ioPRiNYot5f4> | <http://publications.europa.eu/resource/authority/country/POL> | 243910.08 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_5ZLiMRkUgqFjmY8Likn4Ux> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_EUXcdcVJXv2EXsP83wEGRh> | <http://publications.europa.eu/resource/authority/country/POL> | 13361.76 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_dyoPA4UDEFaw8g5No2MXRb> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_VKnf5AmP226sRNAHARTooy> | <http://publications.europa.eu/resource/authority/country/POL> | 2626.56 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/POL> | 119994.64 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_R6LXWtxmsHpX2fZeXmNYBn> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_XhJtdd9Xt2bHYSC88vq7BD> | <http://publications.europa.eu/resource/authority/country/POL> | 4658.40 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_jidrjyHPk2GJ9D26ACwWBv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_Xr4UfkytYMRKDaEPjhPex4> | <http://publications.europa.eu/resource/authority/country/POL> | 81520.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_b3bxZYyEQFnFreTFXRj2pN> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_YE8P9rYTf5NqRDk36gNQW8> | <http://publications.europa.eu/resource/authority/country/POL> | 2354.40 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_EqxKeBX4cL5CmdQD8JWgA5> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_YLoijcoBeWY5k7uAohrCJ5> | <http://publications.europa.eu/resource/authority/country/POL> | 10033.20 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_aFLshDhJ35YxouNaUmgLoL> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_a2DwTL7oLvH67SkQYq46JF> | <http://publications.europa.eu/resource/authority/country/POL> | 108168.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_R9qSF8NjURavF277ftM5By> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_bSGUi2Sn2YmvsonQFYE4qh> | <http://publications.europa.eu/resource/authority/country/POL> | 1903.68 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_LbYLRa8gjKeijcDve5qbyd> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_dpscvZwpbChuRLFsLAtx8G> | <http://publications.europa.eu/resource/authority/country/POL> | 47095.20 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_eamppjMLP9e8HyWKgmvo6X> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_eJFWGZ52sH8q6SBeMcwfWo> | <http://publications.europa.eu/resource/authority/country/POL> | 1664.64 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_9KZavBxApP5nxUDtMJpKGb> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_eiAwDkhJ3HQvVSFBetASLK> | <http://publications.europa.eu/resource/authority/country/POL> | 28800.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_NLqE5jWBXrmCpftysHo7Yk> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ekQXWKxXJitGzXx2G4v6rF> | <http://publications.europa.eu/resource/authority/country/POL> | 2972.16 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_ByaYQQ6RJc78UnYtZTmoEe> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_enTM9LwzhnxHd3Ejb2Sua9> | <http://publications.europa.eu/resource/authority/country/POL> | 31940.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_BUrBJRv6JucyVRyPNLDhCX> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ftV2BPY6TRG3NKmu9PukEc> | <http://publications.europa.eu/resource/authority/country/POL> | 4748.40 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_9X5vk75uwGdbwreTzknDGT> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_gCkqh5ziySxzeToNEwoEyH> | <http://publications.europa.eu/resource/authority/country/POL> | 8150.40 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_CywX2Le3N8DdWYPzxHPyBA> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_gvW9G83aYDhobBdKXtUveG> | <http://publications.europa.eu/resource/authority/country/POL> | 6800.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_TJTXbsBLuodUzD4KtPx8yf> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_hcKQLGSUBUb2my4WX76vdr> | <http://publications.europa.eu/resource/authority/country/POL> | 1876.32 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_diPp46XcmeHRAMFFenhpzZ> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ> | <http://publications.europa.eu/resource/authority/country/POL> | 130000.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_BdMsMuygsRtRTzokxfw78P> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_iQSXjaMKXfhaqTJnqiTqcd> | <http://publications.europa.eu/resource/authority/country/POL> | 36060.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_hKVQc9FtSBNvSfhopKjLsq> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_jSnxcYkoUPGdypasLCReFi> | <http://publications.europa.eu/resource/authority/country/POL> | 71784.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_7HaHZcWYnL6u8BonoGDRZm> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_mJdqemiqGhG32JDfU2bhBy> | <http://publications.europa.eu/resource/authority/country/POL> | 11923.20 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_YYoP8Sxj9ccJAKaaJ8KoJG> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_mS5Z37WHdkTC9WeHYMKB4p> | <http://publications.europa.eu/resource/authority/country/POL> | 45237.60 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_gW9Vsh3CLWL2F2pf5VLtud> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_nVMZfGEEmXLMHAkvSJ3JRp> | <http://publications.europa.eu/resource/authority/country/POL> | 7520.00 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_B5i9E4pQTX7XCkyEjNt7UC> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_ns9Tx3dsbYTPdMJSeiWujA> | <http://publications.europa.eu/resource/authority/country/POL> | 35683.20 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_Lot_LohzQrnoCZVmypHKa6Ccm6> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568102_ContractorOrganisation_oTEPzFaXeCAh9f52RTErxa> | <http://publications.europa.eu/resource/authority/country/POL> | 14692.80 | <http://publications.europa.eu/resource/authority/currency/PLN> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_3wPdLbAG6nvmaE8euzWnmf> | <http://publications.europa.eu/resource/authority/country/BEL> | 3000000.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_5DskZUnCcVusgjQoBuZAqa> | <http://publications.europa.eu/resource/authority/country/BEL> | 3000000.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/ITA> | 3000000.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568072_ContractorOrganisation_iNeZPiTJwMWfr7iAbQZ9WZ> | <http://publications.europa.eu/resource/authority/country/MLT> | 3000000.00 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "| <http://data.europa.eu/a4g/resource/id_2023-S-182-568099_Lot_DgNm7RuiSQ47VBTvdrHsRv> | <http://data.europa.eu/a4g/resource/id_2023-S-182-568099_ContractorOrganisation_WFzZGbdirSo5EBhCMeQqCo> | <http://publications.europa.eu/resource/authority/country/ITA> | 2670765.44 | <http://publications.europa.eu/resource/authority/currency/EUR> |\n", + "\n" + ], + "text/plain": [ + " Lot \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "9 \n", + "10 \n", + "11 \n", + "12 \n", + "13 \n", + "14 \n", + "15 \n", + "16 \n", + "17 \n", + "18 \n", + "19 \n", + "20 \n", + "21 \n", + "22 \n", + "23 \n", + "24 \n", + "25 \n", + "26 \n", + "27 \n", + "28 \n", + "29 \n", + "30 \n", + "⋮ ⋮ \n", + "47 \n", + "48 \n", + "49 \n", + "50 \n", + "51 \n", + "52 \n", + "53 \n", + "54 \n", + "55 \n", + "56 \n", + "57 \n", + "58 \n", + "59 \n", + "60 \n", + "61 \n", + "62 \n", + "63 \n", + "64 \n", + "65 \n", + "66 \n", + "67 \n", + "68 \n", + "69 \n", + "70 \n", + "71 \n", + "72 \n", + "73 \n", + "74 \n", + "75 \n", + "76 \n", + " Winner \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "9 \n", + "10 \n", + "11 \n", + "12 \n", + "13 \n", + "14 \n", + "15 \n", + "16 \n", + "17 \n", + "18 \n", + "19 \n", + "20 \n", + "21 \n", + "22 \n", + "23 \n", + "24 \n", + "25 \n", + "26 \n", + "27 \n", + "28 \n", + "29 \n", + "30 \n", + "⋮ ⋮ \n", + "47 \n", + "48 \n", + "49 \n", + "50 \n", + "51 \n", + "52 \n", + "53 \n", + "54 \n", + "55 \n", + "56 \n", + "57 \n", + "58 \n", + "59 \n", + "60 \n", + "61 \n", + "62 \n", + "63 \n", + "64 \n", + "65 \n", + "66 \n", + "67 \n", + "68 \n", + "69 \n", + "70 \n", + "71 \n", + "72 \n", + "73 \n", + "74 \n", + "75 \n", + "76 \n", + " WinnerCountryCode \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "9 \n", + "10 \n", + "11 \n", + "12 \n", + "13 \n", + "14 \n", + "15 \n", + "16 \n", + "17 \n", + "18 \n", + "19 \n", + "20 \n", + "21 \n", + "22 \n", + "23 \n", + "24 \n", + "25 \n", + "26 \n", + "27 \n", + "28 \n", + "29 \n", + "30 \n", + "⋮ ⋮ \n", + "47 \n", + "48 \n", + "49 \n", + "50 \n", + "51 \n", + "52 \n", + "53 \n", + "54 \n", + "55 \n", + "56 \n", + "57 \n", + "58 \n", + "59 \n", + "60 \n", + "61 \n", + "62 \n", + "63 \n", + "64 \n", + "65 \n", + "66 \n", + "67 \n", + "68 \n", + "69 \n", + "70 \n", + "71 \n", + "72 \n", + "73 \n", + "74 \n", + "75 \n", + "76 \n", + " LotAwardetAmountValue\n", + "1 5000000.00 \n", + "2 817097.50 \n", + "3 11700.00 \n", + "4 125000.00 \n", + "5 1455250.00 \n", + "6 86900.00 \n", + "7 12675.00 \n", + "8 26325.00 \n", + "9 12675.00 \n", + "10 7800.00 \n", + "11 37700.00 \n", + "12 44000000.00 \n", + "13 286620.84 \n", + "14 9600.00 \n", + "15 320125645.69 \n", + "16 14308980.00 \n", + "17 13159999.71 \n", + "18 19950.00 \n", + "19 28033.92 \n", + "20 46446.80 \n", + "21 471.60 \n", + "22 9800.00 \n", + "23 2880.00 \n", + "24 13412.88 \n", + "25 21120.00 \n", + "26 8180.00 \n", + "27 21456.00 \n", + "28 6888.20 \n", + "29 243910.08 \n", + "30 13361.76 \n", + "⋮ ⋮ \n", + "47 2626.56 \n", + "48 119994.64 \n", + "49 4658.40 \n", + "50 81520.00 \n", + "51 2354.40 \n", + "52 10033.20 \n", + "53 108168.00 \n", + "54 1903.68 \n", + "55 47095.20 \n", + "56 1664.64 \n", + "57 28800.00 \n", + "58 2972.16 \n", + "59 31940.00 \n", + "60 4748.40 \n", + "61 8150.40 \n", + "62 6800.00 \n", + "63 1876.32 \n", + "64 130000.00 \n", + "65 36060.00 \n", + "66 71784.00 \n", + "67 11923.20 \n", + "68 45237.60 \n", + "69 7520.00 \n", + "70 35683.20 \n", + "71 14692.80 \n", + "72 3000000.00 \n", + "73 3000000.00 \n", + "74 3000000.00 \n", + "75 3000000.00 \n", + "76 2670765.44 \n", + " LotAwardetValueCurrency \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "9 \n", + "10 \n", + "11 \n", + "12 \n", + "13 \n", + "14 \n", + "15 \n", + "16 \n", + "17 \n", + "18 \n", + "19 \n", + "20 \n", + "21 \n", + "22 \n", + "23 \n", + "24 \n", + "25 \n", + "26 \n", + "27 \n", + "28 \n", + "29 \n", + "30 \n", + "⋮ ⋮ \n", + "47 \n", + "48 \n", + "49 \n", + "50 \n", + "51 \n", + "52 \n", + "53 \n", + "54 \n", + "55 \n", + "56 \n", + "57 \n", + "58 \n", + "59 \n", + "60 \n", + "61 \n", + "62 \n", + "63 \n", + "64 \n", + "65 \n", + "66 \n", + "67 \n", + "68 \n", + "69 \n", + "70 \n", + "71 \n", + "72 \n", + "73 \n", + "74 \n", + "75 \n", + "76 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Print result\n", - "print(data_frame)" + "data_frame" ] } ], diff --git a/notebooks/query_cellar_python.ipynb b/notebooks/query_cellar_python.ipynb index a9371c1..3db3cf9 100644 --- a/notebooks/query_cellar_python.ipynb +++ b/notebooks/query_cellar_python.ipynb @@ -2,23 +2,51 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: sparqlwrapper in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (2.0.0)\n", + "Requirement already satisfied: pandas in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (2.0.3)\n", + "Requirement already satisfied: Jinja2 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (3.1.2)\n", + "Requirement already satisfied: matplotlib in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (3.7.3)\n", + "Requirement already satisfied: rdflib>=6.1.1 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from sparqlwrapper) (7.0.0)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\user\\appdata\\roaming\\python\\python38\\site-packages (from pandas) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from pandas) (2023.3.post1)\n", + "Requirement already satisfied: tzdata>=2022.1 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from pandas) (2023.3)\n", + "Requirement already satisfied: numpy>=1.20.3 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from pandas) (1.24.4)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from Jinja2) (2.1.3)\n", + "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (1.1.1)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (0.11.0)\n", + "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (4.42.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in c:\\users\\user\\appdata\\roaming\\python\\python38\\site-packages (from matplotlib) (23.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (10.0.1)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (3.1.1)\n", + "Requirement already satisfied: importlib-resources>=3.2.0 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib) (6.0.1)\n", + "Requirement already satisfied: zipp>=3.1.0 in c:\\users\\user\\appdata\\roaming\\python\\python38\\site-packages (from importlib-resources>=3.2.0->matplotlib) (3.16.2)\n", + "Requirement already satisfied: six>=1.5 in c:\\users\\user\\appdata\\roaming\\python\\python38\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Requirement already satisfied: isodate<0.7.0,>=0.6.0 in c:\\users\\user\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from rdflib>=6.1.1->sparqlwrapper) (0.6.1)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ "# Uncomment last line of this cell (by deleting #) to install necessary dependencies.\n", - "\n", - "#!pip install sparqlwrapper pandas Jinja2" + "%pip install sparqlwrapper pandas Jinja2 matplotlib" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "collapsed": false, "pycharm": { @@ -27,36 +55,27 @@ }, "outputs": [], "source": [ + "import os\n", + "from pathlib import Path\n", "# Import dependencies\n", "from io import StringIO\n", "from SPARQLWrapper import SPARQLWrapper, CSV\n", - "from pandas import read_csv\n", + "from pandas import read_csv, DataFrame\n", "\n", "# Prepare variable with sparql endpoint\n", + "\n", "QUERY_ENDPOINT: str = 'https://publications.europa.eu/webapi/rdf/sparql'\n", "\n", + "SPARQL_PATH: Path = Path(os.path.abspath(\"\")).parent / 'queries' / 'winners.rq'\n", + "\n", "# Example of sparql query\n", - "SPARQL_QUERY: str = \"\"\"\n", - "PREFIX epo: \n", - "PREFIX cccev: \n", - " \n", - "SELECT (COUNT (DISTINCT (?Notice)) as ?NrOfNotices) WHERE { \n", - " \n", - " ?Notice epo:hasPublicationDate ?Date .\n", - " ?Notice epo:announcesRole ?Buyer .\n", - " ?Buyer epo:playedBy ?Organization .\n", - " ?Organization cccev:registeredAddress / epo:hasCountryCode .\n", "\n", - " VALUES ?Date {\n", - " \"20230905\" \"20230906\"\n", - " }\n", - "}\n", - "\"\"\"" + "SPARQL_QUERY: str = SPARQL_PATH.read_text()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "collapsed": false, "pycharm": { @@ -66,6 +85,7 @@ "outputs": [], "source": [ "# Prepare connection to sparql endpoint\n", + "\n", "sparql_endpoint = SPARQLWrapper(QUERY_ENDPOINT)\n", "sparql_endpoint.setQuery(SPARQL_QUERY)\n", "sparql_endpoint.setReturnFormat(CSV)" @@ -73,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "collapsed": false, "pycharm": { @@ -83,25 +103,172 @@ "outputs": [], "source": [ "# Request for query\n", + "\n", "endpoint_result = sparql_endpoint.query().convert()\n", + "\n", "# Convert endpoint result to table (dataframe)\n", + "\n", "result_data = StringIO(str(endpoint_result, 'utf-8'))\n", - "result_dataframe = read_csv(result_data)" + "result_dataframe: DataFrame = read_csv(result_data)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": false, + "is_executing": true, "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LotWinnerWinnerCountryCodeLotAwardetAmountValueLotAwardetValueCurrency
0http://data.europa.eu/a4g/resource/id_2023-S-1...http://data.europa.eu/a4g/resource/id_2023-S-1...http://publications.europa.eu/resource/authori...5000000.0http://publications.europa.eu/resource/authori...
1http://data.europa.eu/a4g/resource/id_2023-S-1...http://data.europa.eu/a4g/resource/id_2023-S-1...http://publications.europa.eu/resource/authori...817097.5http://publications.europa.eu/resource/authori...
2http://data.europa.eu/a4g/resource/id_2023-S-1...http://data.europa.eu/a4g/resource/id_2023-S-1...http://publications.europa.eu/resource/authori...11700.0http://publications.europa.eu/resource/authori...
3http://data.europa.eu/a4g/resource/id_2023-S-1...http://data.europa.eu/a4g/resource/id_2023-S-1...http://publications.europa.eu/resource/authori...125000.0http://publications.europa.eu/resource/authori...
4http://data.europa.eu/a4g/resource/id_2023-S-1...http://data.europa.eu/a4g/resource/id_2023-S-1...http://publications.europa.eu/resource/authori...1455250.0http://publications.europa.eu/resource/authori...
\n", + "
" + ], + "text/plain": [ + " Lot \\\n", + "0 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "1 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "2 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "3 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "4 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "\n", + " Winner \\\n", + "0 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "1 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "2 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "3 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "4 http://data.europa.eu/a4g/resource/id_2023-S-1... \n", + "\n", + " WinnerCountryCode LotAwardetAmountValue \\\n", + "0 http://publications.europa.eu/resource/authori... 5000000.0 \n", + "1 http://publications.europa.eu/resource/authori... 817097.5 \n", + "2 http://publications.europa.eu/resource/authori... 11700.0 \n", + "3 http://publications.europa.eu/resource/authori... 125000.0 \n", + "4 http://publications.europa.eu/resource/authori... 1455250.0 \n", + "\n", + " LotAwardetValueCurrency \n", + "0 http://publications.europa.eu/resource/authori... \n", + "1 http://publications.europa.eu/resource/authori... \n", + "2 http://publications.europa.eu/resource/authori... \n", + "3 http://publications.europa.eu/resource/authori... \n", + "4 http://publications.europa.eu/resource/authori... " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Print result\n", - "result_dataframe.style" + "# Print first 5 rows of result\n", + "\n", + "result_dataframe.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "WinnerCountryCode\n", + "http://publications.europa.eu/resource/authority/country/POL 57\n", + "http://publications.europa.eu/resource/authority/country/PRT 4\n", + "http://publications.europa.eu/resource/authority/country/FRA 3\n", + "http://publications.europa.eu/resource/authority/country/NOR 2\n", + "http://publications.europa.eu/resource/authority/country/BGR 2\n", + "http://publications.europa.eu/resource/authority/country/BEL 2\n", + "http://publications.europa.eu/resource/authority/country/ITA 2\n", + "http://publications.europa.eu/resource/authority/country/AUT 1\n", + "http://publications.europa.eu/resource/authority/country/SVK 1\n", + "http://publications.europa.eu/resource/authority/country/CHE 1\n", + "http://publications.europa.eu/resource/authority/country/MLT 1\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Example of counting number of winners per winner country\n", + "\n", + "result_dataframe[\"WinnerCountryCode\"].value_counts()" ] } ], diff --git a/queries/winners.rq b/queries/winners.rq new file mode 100644 index 0000000..0a1be50 --- /dev/null +++ b/queries/winners.rq @@ -0,0 +1,33 @@ +# Who are the winners for a given date? + +PREFIX epo: +PREFIX org: +PREFIX cccev: +select distinct +?Lot +?Winner +?WinnerCountryCode +?LotAwardetAmountValue +?LotAwardetValueCurrency +where { + values ?NoticePublicationDate { + "20230921" + } + ?NoticeId a epo:ResultNotice; + epo:hasPublicationDate ?NoticePublicationDate; + epo:refersToLot ?Lot. + ?Lot a epo:Lot. + ?LotAwardOutcome epo:describesLot ?Lot; + a epo:LotAwardOutcome; + epo:comprisesTenderAwardOutcome ?TenderAwardOutcome. + ?TenderAwardOutcome a epo:TenderAwardOutcome; + epo:indicatesAwardOfLotToWinner / epo:playedBy ?Winner. + ?Winner a org:Organization. + optional { + ?Winner cccev:registeredAddress / epo:hasCountryCode ?WinnerCountryCode. + } + ?LotAwardOutcome epo:hasAwardedValue ?LotAwardetValue. + ?LotAwardetValue a epo:MonetaryValue; + epo:hasAmountValue ?LotAwardetAmountValue; + epo:hasCurrency ?LotAwardetValueCurrency. +} \ No newline at end of file diff --git a/spreadsheets/sample_application.xlsm b/spreadsheets/sample_application.xlsm new file mode 100644 index 0000000..92cc15b Binary files /dev/null and b/spreadsheets/sample_application.xlsm differ diff --git a/spreadsheets/sample_application.xlsx b/spreadsheets/sample_application.xlsx index 0e19e22..cd38e9e 100644 Binary files a/spreadsheets/sample_application.xlsx and b/spreadsheets/sample_application.xlsx differ