From 1c0db49931655b5b9cd987cc20ebd5ed351ce25d Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Sun, 3 Oct 2021 21:44:13 -0500 Subject: [PATCH 01/74] feat: section1 - Translate main readme file to spanish [ES] --- .../translations/README.es.md | 165 ++++++++++++++++++ 1-Introduction/translations/README.es.md | 19 ++ 2 files changed, 184 insertions(+) diff --git a/1-Introduction/01-defining-data-science/translations/README.es.md b/1-Introduction/01-defining-data-science/translations/README.es.md index e69de29b..873ad74f 100644 --- a/1-Introduction/01-defining-data-science/translations/README.es.md +++ b/1-Introduction/01-defining-data-science/translations/README.es.md @@ -0,0 +1,165 @@ +# Defining Data Science + +|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/01-Definitions.png)| +|:---:| +|Defining Data Science - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | + +--- + +[![Defining Data Science Video](images/video-def-ds.png)](https://youtu.be/pqqsm5reGvs) + +## [Pre-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/0) + +## What is Data? +In our everyday life, we are constantly surrounded by data. The text you are reading now is data, the list of phone numbers of your friends in your smartphone is data, as well as the current time displayed on your watch. As human beings, we naturally operate with data by counting the money we have or writing letters to our friends. + +However, data became much more critical with the creation of computers. The primary role of computers is to perform computations, but they need data to operate on. Thus, we need to understand how computers store and process data. + +With the emergence of the Internet, the role of computers as data handling devices increased. If you think of it, we now use computers more and more for data processing and communication, rather than actual computations. When we write an e-mail to a friend or search for some information on the Internet - we are essentially creating, storing, transmitting, and manipulating data. +> Can you remember the last time you have used computers to actually compute something? + +## What is Data Science? + +In [Wikipedia](https://en.wikipedia.org/wiki/Data_science), **Data Science** is defined as *a scientific field that uses scientific methods to extract knowledge and insights from structured and unstructured data, and apply knowledge and actionable insights from data across a broad range of application domains*. + +This definition highlights the following important aspects of data science: + +* The main goal of data science is to **extract knowledge** from data, in order words - to **understand** data, find some hidden relationships and build a **model**. +* Data science uses **scientific methods**, such as probability and statistics. In fact, when the term *data science* was first introduced, some people argued that data science is just a new fancy name for statistics. Nowadays it has become evident that the field is much broader. +* Obtained knowledge should be applied to produce some **actionable insights**. +* We should be able to operate on both **structured** and **unstructured** data. We will come back to discuss different types of data later in the course. +* **Application domain** is an important concept, and data scientist often needs at least some degree of expertise in the problem domain. + +> Another important aspect of Data Science is that it studies how data can be gathered, stored and operated upon using computers. While statistics gives us mathematical foundations, data science applies mathematical concepts to actually draw insights from data. + +One of the ways (attributed to [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) to look at the data science is to consider it to be a separate paradigm of science: +* **Empyrical**, in which we rely mostly on observations and results of experiments +* **Theoretical**, where new concepts emerge from existing scientific knowledge +* **Computational**, where we discover new principles based on some computational experiments +* **Data-Driven**, based on discovering relationships and patterns in the data + +## Other Related Fields + +Since data is a pervasive concept, data science itself is also a broad field, touching many other related disciplines. + +
+
Databases
+
+The most obvious thing to consider is **how to store** the data, i.e. how to structure them in a way that allows faster processing. There are different types of databases that store structured and unstructured data, which [we will consider in our course](../../2-Working-With-Data/README.md). +
+
Big Data
+
+Often we need to store and process really large quantities of data with relatively simple structure. There are special approaches and tools to store that data in a distributed manner on a computer cluster, and process them efficiently. +
+
Machine Learning
+
+One of the ways to understand the data is to **build a model** that will be able to predict desired outcome. Being able to learn such models from data is the area studied in **machine learning**. You may want to have a look at our [Machine Learning for Beginners](https://github.com/microsoft/ML-For-Beginners/) Curriculum to get deeper into that field. +
+
Artificial Intelligence
+
+As machine learning, artificial intelligence also relies on data, and it involves building high complexity models that will exhibit the behavior similar to a human being. Also, AI methods often allow us to turn unstructured data (eg. natural language) into structured by extracting some insights. +
+
Visualization
+
+Vast amounts of data are incomprehensible for a human being, but once we create useful visualizations - we can start making much more sense of data, and drawing some conclusions. Thus, it is important to know many ways to visualize information - something that we will cover in [Section 3](../../3-Data-Visualization/README.md) of our course. Related fields also include **Infographics**, and **Human-Computer Interaction** in general. +
+
+ +## Types of Data + +As we have already mentioned - data is everywhere, we just need to capture it in the right way! It is useful to distinguish between **structured** and **unstructured** data. The former are typically represented in some well-structured form, often as a table or number of tables, while latter is just a collection of files. Sometimes we can also talk about **semistructured** data, that have some sort of a structure that may vary greatly. + +| Structured | Semi-structured | Unstructured | +|----------- |-----------------|--------------| +| List of people with their phone numbers | Wikipedia pages with links | Text of Encyclopaedia Britannica | +| Temperature in all rooms of a building at every minute for the last 20 years | Collection of scientific papers in JSON format with authors, data of publication, and abstract | File share with corporate documents | +| Data for age and gender of all people entering the building | Internet pages | Raw video feed from surveillance camera | + +## Where to get Data + +There are many possible sources of data, and it will be impossible to list all of them! However, let's mention some of the typical places where you can get data: + +* **Structured** + - **Internet of Things**, including data from different sensors, such as temperature or pressure sensors, provides a lot of useful data. For example, if an office building is equipped with IoT sensors, we can automatically control heating and lighting in order to minimize costs. + - **Surveys** that we ask users after purchase of a good, or after visiting a web site. + - **Analysis of behavior** can, for example, help us understand how deeply a user goes into a site, and what is the typical reason for leaving the site. +* **Unstructured** + - **Texts** can be a rich source of insights, starting from overall **sentiment score**, up to extracting keywords and even some semantic meaning. + - **Images** or **Video**. A video from surveillance camera can be used to estimate traffic on the road, and inform people about potential traffic jams. + - Web server **Logs** can be used to understand which pages of our site are most visited, and for how long. +* Semi-structured + - **Social Network** graph can be a great source of data about user personality and potential effectiveness in spreading information around. + - When we have a bunch of photographs from a party, we can try to extract **Group Dynamics** data by building a graph of people taking pictures with each other. + +By knowing different possible sources of data, you can try to think about different scenarios where data science techniques can be applied to know the situation better, and to improve business processes. + +## What you can do with Data + +In Data Science, we focus on the following steps of data journey: + +
+
1) Data Acquisition
+
+First step is to collect the data. While in many cases it can be a straightforward process, like data coming to a database from web application, sometimes we need to use special techniques. For example, data from IoT sensors can be overwhelming, and it is a good practice to use buffering endpoints such as IoT Hub to collect all the data before further processing. +
+
2) Data Storage
+
+Storing the data can be challenging, especially if we are talking about big data. When deciding how to store data, it makes sense to anticipate the way you would want later on to query them. There are several ways data can be stored: +
    +
  • Relational database stores a collection of tables, and uses a special language called SQL to query them. Typically, tables would be connected to each other using some schema. In many cases we need to convert the data from original form to fit the schema.
  • +
  • NoSQL database, such as CosmosDB, does not enforce schema on data, and allows storing more complex data, for example, hierarchical JSON documents or graphs. However, NoSQL database does not have rich querying capabilities of SQL, and cannot enforce referential integrity between data.
  • +
  • Data Lake storage is used for large collections of data in raw form. Data lakes are often used with big data, where all data cannot fit into one machine, and has to be stored and processed by a cluster. Parquet is the data format that is often used in conjunction with big data.
  • +
+
+
3) Data Processing
+
+This is the most exciting part of data journey, which involved processing the data from its original form to the form that can be used for visualization/model training. When dealing with unstructured data such as text or images, we may need to use some AI techniques to extract **features** from the data, thus converting it to structured form. +
+
4) Visualization / Human Insights
+
+Often to understand the data we need to visualize them. Having many different visualization techniques in our toolbox we can find the right view to make an insight. Often, data scientist needs to "play with data", visualizing it many times and looking for some relationships. Also, we may use techniques from statistics to test some hypotheses or prove correlation between different pieces of data. +
+
5) Training predictive model
+
+Because the ultimate goal of data science is to be able to take decisions based on data, we may want to use the techniques of Machine Learning to build predictive model that will be able to solve our problem. +
+
+ +Of course, depending on the actual data some steps might be missing (eg., when we already have the data in the database, or when we do not need model training), or some steps might be repeated several times (such as data processing). + +## Digitalization and Digital Transformation + +In the last decade, many businesses started to understand the importance of data when making business decisions. To apply data science principles to running a business one first needs to collect some data, i.e. somehow turn business processes into digital form. This is known as **digitalization**, and followed by using data science techniques to guide decisions it often leads to significant increase of productivity (or even business pivot), called **digital transformation**. + +Let's consider an example. Suppose, we have a data science course (like this one), which we deliver online to students, and we want to use data science to improve it. How can we do it? + +We can start with thinking "what can be digitized?". The simplest way would be to measure time it takes each student to complete each module, and the obtained knowledge (eg. by giving multiple-choice test at the end of each module). By averaging time-to-complete across all students, we can find out which modules cause the most problems to students, and work on simplifying them. + +> You may argue that this approach is not ideal, because modules can be of different length. It is probably more fair to divide the time by the length of the module (in number of characters), and compare those values instead. + +When we start analyzing results of multiple-choice tests, we can try to find out specific concepts that students understand poorly, and improve the content. To do that, we need to design tests in such a way that each question maps to a certain concept or chunk of knowledge. + +If we want to get even more complicated, we can plot the time taken for each module against the age category of students. We might find out that for some age categories it takes inappropriately long time to complete the module, or students drop out at certain point. This can help us provide age recommendation for the module, and minimize people's dissatisfaction from wrong expectations. + +## 🚀 Challenge + +In this challenge, we will try to find concepts relevant to the field of Data Science by looking at texts. We will take Wikipedia article on Data Science, download and process the text, and then build a word cloud like this one: + +![Word Cloud for Data Science](images/ds_wordcloud.png) + +Visit [`notebook.ipynb`](notebook.ipynb) to read through the code. You can also run the code, and see how it performs all data transformations in real time. + +> If you do not know how to run code in Jupyter Notebook, have a look at [this article](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). + + + +## [Post-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/1) + +## Assignments + +* **Task 1**: Modify the code above to find out related concepts for the fields of **Big Data** and **Machine Learning** +* **Task 2**: [Think About Data Science Scenarios](assignment.md) + +## Credits + +This lesson has been authored with ♥️ by [Dmitry Soshnikov](http://soshnikov.com) diff --git a/1-Introduction/translations/README.es.md b/1-Introduction/translations/README.es.md index e69de29b..e905bf11 100644 --- a/1-Introduction/translations/README.es.md +++ b/1-Introduction/translations/README.es.md @@ -0,0 +1,19 @@ +# Introduction to Data Science + +![Datos en acción](images/data.jpg) +> Fotografía de Stephen Dawson en Unsplash + +En estas lecciones descubrirás cómo se define la Ciencia de Datos y aprenderás acerca de +las cosideraciones éticas que deben ser tomadas por un científico de datos. También aprenderás +cómo se definen los datos y un poco de probabilidad y estadística, el núcleo académico de la Ciencia de Datos. + +### Temas + +1. [Definiendo la Ciencia de Datos](01-defining-data-science/README.md) +2. [Ética de la Ciencia de Datos](02-ethics/README.md) +3. [Definición de Datos](03-defining-data/README.md) +4. [introducción a la probabilidad y estadística](04-stats-and-probability/README.md) + +### Créditos + +Éstas lecciones fueron escritas con ❤️ por [Nitya Narasimhan](https://twitter.com/nitya) y [Dmitry Soshnikov](https://twitter.com/shwars). From 503468f6ea6ba12e59a63b05165e94209c2d14e4 Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Mon, 4 Oct 2021 09:56:58 +0530 Subject: [PATCH 02/74] Added DataFrame.shape and DataFrame.columns --- .../08-data-preparation/notebook.ipynb | 965 +++++++++++------- 1 file changed, 605 insertions(+), 360 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index e45a5cb5..b1c1d7a0 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -1,318 +1,510 @@ { + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "name": "python3", + "display_name": "Python 3", + "language": "python" + }, + "language_info": { + "mimetype": "text/x-python", + "nbconvert_exporter": "python", + "name": "python", + "file_extension": ".py", + "version": "3.5.4", + "pygments_lexer": "ipython3", + "codemirror_mode": { + "version": 3, + "name": "ipython" + } + }, + "colab": { + "name": "notebook.ipynb", + "provenance": [] + } + }, "cells": [ { "cell_type": "markdown", + "metadata": { + "id": "rQ8UhzFpgRra" + }, "source": [ - "# Data Preparation\r\n", - "\r\n", - "[Original Notebook source from *Data Science: Introduction to Machine Learning for Data Science Python and Machine Learning Studio by Lee Stott*](https://github.com/leestott/intro-Datascience/blob/master/Course%20Materials/4-Cleaning_and_Manipulating-Reference.ipynb)\r\n", - "\r\n", - "## Exploring `DataFrame` information\r\n", - "\r\n", - "> **Learning goal:** By the end of this subsection, you should be comfortable finding general information about the data stored in pandas DataFrames.\r\n", - "\r\n", - "Once you have loaded your data into pandas, it will more likely than not be in a `DataFrame`. However, if the data set in your `DataFrame` has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, pandas provides some convenient tools to quickly look at overall information about a `DataFrame` in addition to the first few and last few rows.\r\n", - "\r\n", + "# Data Preparation\n", + "\n", + "[Original Notebook source from *Data Science: Introduction to Machine Learning for Data Science Python and Machine Learning Studio by Lee Stott*](https://github.com/leestott/intro-Datascience/blob/master/Course%20Materials/4-Cleaning_and_Manipulating-Reference.ipynb)\n", + "\n", + "## Exploring `DataFrame` information\n", + "\n", + "> **Learning goal:** By the end of this subsection, you should be comfortable finding general information about the data stored in pandas DataFrames.\n", + "\n", + "Once you have loaded your data into pandas, it will more likely than not be in a `DataFrame`. However, if the data set in your `DataFrame` has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, pandas provides some convenient tools to quickly look at overall information about a `DataFrame` in addition to the first few and last few rows.\n", + "\n", "In order to explore this functionality, we will import the Python scikit-learn library and use an iconic dataset that every data scientist has seen hundreds of times: British biologist Ronald Fisher's *Iris* data set used in his 1936 paper \"The use of multiple measurements in taxonomic problems\":" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "collapsed": true, + "trusted": false, + "id": "hB1RofhdgRrp" + }, "source": [ - "import pandas as pd\r\n", - "from sklearn.datasets import load_iris\r\n", - "\r\n", - "iris = load_iris()\r\n", + "import pandas as pd\n", + "from sklearn.datasets import load_iris\n", + "\n", + "iris = load_iris()\n", "iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])" ], - "outputs": [], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", "metadata": { - "collapsed": true, - "trusted": false - } + "id": "AGA0A_Y8hMdz" + }, + "source": [ + "### `DataFrame.shape`\n", + "We have loaded the Iris Dataset in the variable `iris_df`. Before diving into the data, it would be valuable to know the number of datapoints we have and the overall size of the dataset. It is useful to look at the volume of data we are dealing with. " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LOe5jQohhulf", + "outputId": "9cf67a6a-5779-453b-b2ed-58f4f1aab507", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "iris_df.shape" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(150, 4)" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "smE7AGzOhxk2" + }, + "source": [ + "So, we are dealing with 150 rows and 4 columns of data. Each row represents one datapoint and each column represents a single feature associated with the data frame. So basically, there are 150 datapoints containing 4 features each.\n", + "\n", + "`shape` here is an attribute of the dataframe and not a function, which is why it doesn't end in a pair of parentheses. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d3AZKs0PinGP" + }, + "source": [ + "### `DataFrame.columns`\n", + "Let us now move into the 4 columns of data. What does each of them exactly represent? The `columns` attribute will give us the name of the columns in the dataframe. " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YPGh_ziji-CY", + "outputId": "ca186194-a126-4348-f58e-aab7ebc8f7b7", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "iris_df.columns" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)',\n", + " 'petal width (cm)'],\n", + " dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TsobcU_VjCC_" + }, + "source": [ + "As we can see, there are four(4) columns. The `columns` attribute tells us the name of the columns and basically nothing else. This attribute assumes importance when we want to identify the features a dataset contains." + ] }, { "cell_type": "markdown", + "metadata": { + "id": "2UTlvkjmgRrs" + }, "source": [ - "### `DataFrame.info`\r\n", + "### `DataFrame.info`\n", "Let's take a look at this dataset to see what we have:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "dHHRyG0_gRrt", + "outputId": "ca9de335-9e65-486a-d1e2-3e73d060c701", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, "source": [ "iris_df.info()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "RangeIndex: 150 entries, 0 to 149\n", + "Data columns (total 4 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 sepal length (cm) 150 non-null float64\n", + " 1 sepal width (cm) 150 non-null float64\n", + " 2 petal length (cm) 150 non-null float64\n", + " 3 petal width (cm) 150 non-null float64\n", + "dtypes: float64(4)\n", + "memory usage: 4.8 KB\n" + ] + } + ] }, { "cell_type": "markdown", + "metadata": { + "id": "1XgVMpvigRru" + }, "source": [ "From this, we know that the *Iris* dataset has 150 entries in four columns. All of the data is stored as 64-bit floating-point numbers." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "-lviAu99gRrv" + }, "source": [ - "### `DataFrame.head`\r\n", + "### `DataFrame.head`\n", "Next, let's see what the first few rows of our `DataFrame` look like:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "DZMJZh0OgRrw" + }, "source": [ "iris_df.head()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "oj7GkrTdgRry" + }, "source": [ - "### Exercise:\r\n", - "\r\n", + "### Exercise:\n", + "\n", "By default, `DataFrame.head` returns the first five rows of a `DataFrame`. In the code cell below, can you figure out how to get it to show more?" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "collapsed": true, + "trusted": false, + "id": "EKRmRFFegRrz" + }, "source": [ "# Hint: Consult the documentation by using iris_df.head?" ], - "outputs": [], - "metadata": { - "collapsed": true, - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "BJ_cpZqNgRr1" + }, "source": [ - "### `DataFrame.tail`\r\n", + "### `DataFrame.tail`\n", "The flipside of `DataFrame.head` is `DataFrame.tail`, which returns the last five rows of a `DataFrame`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "heanjfGWgRr2" + }, "source": [ "iris_df.tail()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "31kBWfyLgRr3" + }, "source": [ - "In practice, it is useful to be able to easily examine the first few rows or the last few rows of a `DataFrame`, particularly when you are looking for outliers in ordered datasets.\r\n", - "\r\n", + "In practice, it is useful to be able to easily examine the first few rows or the last few rows of a `DataFrame`, particularly when you are looking for outliers in ordered datasets.\n", + "\n", "> **Takeaway:** Even just by looking at the metadata about the information in a DataFrame or the first and last few values in one, you can get an immediate idea about the size, shape, and content of the data you are dealing with." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "BvnoojWsgRr4" + }, "source": [ - "## Dealing with missing data\r\n", - "\r\n", - "> **Learning goal:** By the end of this subsection, you should know how to replace or remove null values from DataFrames.\r\n", - "\r\n", - "Most of the time the datasets you want to use (of have to use) have missing values in them. How missing data is handled carries with it subtle tradeoffs that can affect your final analysis and real-world outcomes.\r\n", - "\r\n", - "Pandas handles missing values in two ways. The first you've seen before in previous sections: `NaN`, or Not a Number. This is a actually a special value that is part of the IEEE floating-point specification and it is only used to indicate missing floating-point values.\r\n", - "\r\n", + "## Dealing with missing data\n", + "\n", + "> **Learning goal:** By the end of this subsection, you should know how to replace or remove null values from DataFrames.\n", + "\n", + "Most of the time the datasets you want to use (of have to use) have missing values in them. How missing data is handled carries with it subtle tradeoffs that can affect your final analysis and real-world outcomes.\n", + "\n", + "Pandas handles missing values in two ways. The first you've seen before in previous sections: `NaN`, or Not a Number. This is a actually a special value that is part of the IEEE floating-point specification and it is only used to indicate missing floating-point values.\n", + "\n", "For missing values apart from floats, pandas uses the Python `None` object. While it might seem confusing that you will encounter two different kinds of values that say essentially the same thing, there are sound programmatic reasons for this design choice and, in practice, going this route enables pandas to deliver a good compromise for the vast majority of cases. Notwithstanding this, both `None` and `NaN` carry restrictions that you need to be mindful of with regards to how they can be used." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "lOHqUlZFgRr5" + }, "source": [ - "### `None`: non-float missing data\r\n", - "Because `None` comes from Python, it cannot be used in NumPy and pandas arrays that are not of data type `'object'`. Remember, NumPy arrays (and the data structures in pandas) can contain only one type of data. This is what gives them their tremendous power for large-scale data and computational work, but it also limits their flexibility. Such arrays have to upcast to the “lowest common denominator,” the data type that will encompass everything in the array. When `None` is in the array, it means you are working with Python objects.\r\n", - "\r\n", + "### `None`: non-float missing data\n", + "Because `None` comes from Python, it cannot be used in NumPy and pandas arrays that are not of data type `'object'`. Remember, NumPy arrays (and the data structures in pandas) can contain only one type of data. This is what gives them their tremendous power for large-scale data and computational work, but it also limits their flexibility. Such arrays have to upcast to the “lowest common denominator,” the data type that will encompass everything in the array. When `None` is in the array, it means you are working with Python objects.\n", + "\n", "To see this in action, consider the following example array (note the `dtype` for it):" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "QIoNdY4ngRr7" + }, "source": [ - "import numpy as np\r\n", - "\r\n", - "example1 = np.array([2, None, 6, 8])\r\n", + "import numpy as np\n", + "\n", + "example1 = np.array([2, None, 6, 8])\n", "example1" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "pdlgPNbhgRr7" + }, "source": [ "The reality of upcast data types carries two side effects with it. First, operations will be carried out at the level of interpreted Python code rather than compiled NumPy code. Essentially, this means that any operations involving `Series` or `DataFrames` with `None` in them will be slower. While you would probably not notice this performance hit, for large datasets it might become an issue.\n", "\n", "The second side effect stems from the first. Because `None` essentially drags `Series` or `DataFrame`s back into the world of vanilla Python, using NumPy/pandas aggregations like `sum()` or `min()` on arrays that contain a ``None`` value will generally produce an error:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "gWbx-KB9gRr8" + }, "source": [ "example1.sum()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "LcEwO8UogRr9" + }, "source": [ "**Key takeaway**: Addition (and other operations) between integers and `None` values is undefined, which can limit what you can do with datasets that contain them." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "pWvVHvETgRr9" + }, "source": [ "### `NaN`: missing float values\n", "\n", "In contrast to `None`, NumPy (and therefore pandas) supports `NaN` for its fast, vectorized operations and ufuncs. The bad news is that any arithmetic performed on `NaN` always results in `NaN`. For example:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "rcFYfMG9gRr9" + }, "source": [ "np.nan + 1" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "BW3zQD2-gRr-" + }, "source": [ "np.nan * 0" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "fU5IPRcCgRr-" + }, "source": [ "The good news: aggregations run on arrays with `NaN` in them don't pop errors. The bad news: the results are not uniformly useful:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "LCInVgSSgRr_" + }, "source": [ - "example2 = np.array([2, np.nan, 6, 8]) \r\n", + "example2 = np.array([2, np.nan, 6, 8]) \n", "example2.sum(), example2.min(), example2.max()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "nhlnNJT7gRr_" + }, "source": [ "### Exercise:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# What happens if you add np.nan and None together?\r\n" - ], - "outputs": [], "metadata": { "collapsed": true, - "trusted": false - } + "trusted": false, + "id": "yan3QRaOgRr_" + }, + "source": [ + "# What happens if you add np.nan and None together?\n" + ], + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "_iDvIRC8gRsA" + }, "source": [ "Remember: `NaN` is just for missing floating-point values; there is no `NaN` equivalent for integers, strings, or Booleans." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "kj6EKdsAgRsA" + }, "source": [ "### `NaN` and `None`: null values in pandas\n", "\n", "Even though `NaN` and `None` can behave somewhat differently, pandas is nevertheless built to handle them interchangeably. To see what we mean, consider a `Series` of integers:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "Nji-KGdNgRsA" + }, "source": [ - "int_series = pd.Series([1, 2, 3], dtype=int)\r\n", + "int_series = pd.Series([1, 2, 3], dtype=int)\n", "int_series" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "WklCzqb8gRsB" + }, "source": [ "### Exercise:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# Now set an element of int_series equal to None.\r\n", - "# How does that element show up in the Series?\r\n", - "# What is the dtype of the Series?\r\n" - ], - "outputs": [], "metadata": { "collapsed": true, - "trusted": false - } + "trusted": false, + "id": "Cy-gqX5-gRsB" + }, + "source": [ + "# Now set an element of int_series equal to None.\n", + "# How does that element show up in the Series?\n", + "# What is the dtype of the Series?\n" + ], + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "WjMQwltNgRsB" + }, "source": [ "In the process of upcasting data types to establish data homogeneity in `Seires` and `DataFrame`s, pandas will willingly switch missing values between `None` and `NaN`. Because of this design feature, it can be helpful to think of `None` and `NaN` as two different flavors of \"null\" in pandas. Indeed, some of the core methods you will use to deal with missing values in pandas reflect this idea in their names:\n", "\n", @@ -322,513 +514,566 @@ "- `fillna()`: Returns a copy of the data with missing values filled or imputed\n", "\n", "These are important methods to master and get comfortable with, so let's go over them each in some depth." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "Yh5ifd9FgRsB" + }, "source": [ "### Detecting null values\n", "Both `isnull()` and `notnull()` are your primary methods for detecting null data. Both return Boolean masks over your data." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "collapsed": true, + "trusted": false, + "id": "e-vFp5lvgRsC" + }, "source": [ "example3 = pd.Series([0, np.nan, '', None])" ], - "outputs": [], - "metadata": { - "collapsed": true, - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "1XdaJJ7PgRsC" + }, "source": [ "example3.isnull()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "PaSZ0SQygRsC" + }, "source": [ "Look closely at the output. Does any of it surprise you? While `0` is an arithmetic null, it's nevertheless a perfectly good integer and pandas treats it as such. `''` is a little more subtle. While we used it in Section 1 to represent an empty string value, it is nevertheless a string object and not a representation of null as far as pandas is concerned.\n", "\n", "Now, let's turn this around and use these methods in a manner more like you will use them in practice. You can use Boolean masks directly as a ``Series`` or ``DataFrame`` index, which can be useful when trying to work with isolated missing (or present) values." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "PlBqEo3mgRsC" + }, "source": [ "### Exercise:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# Try running example3[example3.notnull()].\r\n", - "# Before you do so, what do you expect to see?\r\n" - ], - "outputs": [], "metadata": { "collapsed": true, - "trusted": false - } + "trusted": false, + "id": "ggDVf5uygRsD" + }, + "source": [ + "# Try running example3[example3.notnull()].\n", + "# Before you do so, what do you expect to see?\n" + ], + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "D_jWN7mHgRsD" + }, "source": [ "**Key takeaway**: Both the `isnull()` and `notnull()` methods produce similar results when you use them in `DataFrame`s: they show the results and the index of those results, which will help you enormously as you wrestle with your data." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "3VaYC1TvgRsD" + }, "source": [ "### Dropping null values\n", "\n", "Beyond identifying missing values, pandas provides a convenient means to remove null values from `Series` and `DataFrame`s. (Particularly on large data sets, it is often more advisable to simply remove missing [NA] values from your analysis than deal with them in other ways.) To see this in action, let's return to `example3`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "7uIvS097gRsD" + }, "source": [ - "example3 = example3.dropna()\r\n", + "example3 = example3.dropna()\n", "example3" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "hil2cr64gRsD" + }, "source": [ "Note that this should look like your output from `example3[example3.notnull()]`. The difference here is that, rather than just indexing on the masked values, `dropna` has removed those missing values from the `Series` `example3`.\n", "\n", "Because `DataFrame`s have two dimensions, they afford more options for dropping data." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "an-l74sPgRsE" + }, "source": [ - "example4 = pd.DataFrame([[1, np.nan, 7], \r\n", - " [2, 5, 8], \r\n", - " [np.nan, 6, 9]])\r\n", + "example4 = pd.DataFrame([[1, np.nan, 7], \n", + " [2, 5, 8], \n", + " [np.nan, 6, 9]])\n", "example4" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "66wwdHZrgRsE" + }, "source": [ "(Did you notice that pandas upcast two of the columns to floats to accommodate the `NaN`s?)\n", "\n", "You cannot drop a single value from a `DataFrame`, so you have to drop full rows or columns. Depending on what you are doing, you might want to do one or the other, and so pandas gives you options for both. Because in data science, columns generally represent variables and rows represent observations, you are more likely to drop rows of data; the default setting for `dropna()` is to drop all rows that contain any null values:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "jAVU24RXgRsE" + }, "source": [ "example4.dropna()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "TrQRBuTDgRsE" + }, "source": [ "If necessary, you can drop NA values from columns. Use `axis=1` to do so:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "GrBhxu9GgRsE" + }, "source": [ "example4.dropna(axis='columns')" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "KWXiKTfMgRsF" + }, "source": [ "Notice that this can drop a lot of data that you might want to keep, particularly in smaller datasets. What if you just want to drop rows or columns that contain several or even just all null values? You specify those setting in `dropna` with the `how` and `thresh` parameters.\n", "\n", "By default, `how='any'` (if you would like to check for yourself or see what other parameters the method has, run `example4.dropna?` in a code cell). You could alternatively specify `how='all'` so as to drop only rows or columns that contain all null values. Let's expand our example `DataFrame` to see this in action." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "Bcf_JWTsgRsF" + }, "source": [ - "example4[3] = np.nan\r\n", + "example4[3] = np.nan\n", "example4" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "oXXSfQFHgRsF" + }, "source": [ "### Exercise:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# How might you go about dropping just column 3?\r\n", - "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\r\n" - ], - "outputs": [], "metadata": { "collapsed": true, - "trusted": false - } + "trusted": false, + "id": "ExUwQRxpgRsF" + }, + "source": [ + "# How might you go about dropping just column 3?\n", + "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\n" + ], + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "38kwAihWgRsG" + }, "source": [ "The `thresh` parameter gives you finer-grained control: you set the number of *non-null* values that a row or column needs to have in order to be kept:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "M9dCNMaagRsG" + }, "source": [ "example4.dropna(axis='rows', thresh=3)" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "fmSFnzZegRsG" + }, "source": [ "Here, the first and last row have been dropped, because they contain only two non-null values." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "mCcxLGyUgRsG" + }, "source": [ "### Filling null values\n", "\n", "Depending on your dataset, it can sometimes make more sense to fill null values with valid ones rather than drop them. You could use `isnull` to do this in place, but that can be laborious, particularly if you have a lot of values to fill. Because this is such a common task in data science, pandas provides `fillna`, which returns a copy of the `Series` or `DataFrame` with the missing values replaced with one of your choosing. Let's create another example `Series` to see how this works in practice." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "0ybtWLDdgRsG" + }, "source": [ - "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\r\n", + "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\n", "example5" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "yrsigxRggRsH" + }, "source": [ "You can fill all of the null entries with a single value, such as `0`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "KXMIPsQdgRsH" + }, "source": [ "example5.fillna(0)" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "FI9MmqFJgRsH" + }, "source": [ "### Exercise:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# What happens if you try to fill null values with a string, like ''?\r\n" - ], - "outputs": [], "metadata": { "collapsed": true, - "trusted": false - } + "trusted": false, + "id": "af-ezpXdgRsH" + }, + "source": [ + "# What happens if you try to fill null values with a string, like ''?\n" + ], + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "kq3hw1kLgRsI" + }, "source": [ "You can **forward-fill** null values, which is to use the last valid value to fill a null:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "vO3BuNrggRsI" + }, "source": [ "example5.fillna(method='ffill')" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "nDXeYuHzgRsI" + }, "source": [ "You can also **back-fill** to propagate the next valid value backward to fill a null:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "4M5onHcEgRsI" + }, "source": [ "example5.fillna(method='bfill')" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "collapsed": true, + "id": "MbBzTom5gRsI" + }, "source": [ "As you might guess, this works the same with `DataFrame`s, but you can also specify an `axis` along which to fill null values:" - ], - "metadata": { - "collapsed": true - } + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "aRpIvo4ZgRsI" + }, "source": [ "example4" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "VM1qtACAgRsI" + }, "source": [ "example4.fillna(method='ffill', axis=1)" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "ZeMc-I1EgRsI" + }, "source": [ "Notice that when a previous value is not available for forward-filling, the null value remains." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "eeAoOU0RgRsJ" + }, "source": [ "### Exercise:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# What output does example4.fillna(method='bfill', axis=1) produce?\r\n", - "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\r\n", - "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\r\n" - ], - "outputs": [], "metadata": { "collapsed": true, - "trusted": false - } + "trusted": false, + "id": "e8S-CjW8gRsJ" + }, + "source": [ + "# What output does example4.fillna(method='bfill', axis=1) produce?\n", + "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\n", + "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\n" + ], + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "YHgy0lIrgRsJ" + }, "source": [ "You can be creative about how you use `fillna`. For example, let's look at `example4` again, but this time let's fill the missing values with the average of all of the values in the `DataFrame`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "OtYVErEygRsJ" + }, "source": [ "example4.fillna(example4.mean())" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "zpMvCkLSgRsJ" + }, "source": [ "Notice that column 3 is still valueless: the default direction is to fill values row-wise.\n", "\n", "> **Takeaway:** There are multiple ways to deal with missing values in your datasets. The specific strategy you use (removing them, replacing them, or even how you replace them) should be dictated by the particulars of that data. You will develop a better sense of how to deal with missing values the more you handle and interact with datasets." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "K8UXOJYRgRsJ" + }, "source": [ "## Removing duplicate data\n", "\n", "> **Learning goal:** By the end of this subsection, you should be comfortable identifying and removing duplicate values from DataFrames.\n", "\n", "In addition to missing data, you will often encounter duplicated data in real-world datasets. Fortunately, pandas provides an easy means of detecting and removing duplicate entries." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "id": "qrEG-Wa0gRsJ" + }, "source": [ "### Identifying duplicates: `duplicated`\n", "\n", "You can easily spot duplicate values using the `duplicated` method in pandas, which returns a Boolean mask indicating whether an entry in a `DataFrame` is a duplicate of an ealier one. Let's create another example `DataFrame` to see this in action." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "ZLu6FEnZgRsJ" + }, "source": [ - "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\r\n", - " 'numbers': [1, 2, 1, 3, 3]})\r\n", + "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\n", + " 'numbers': [1, 2, 1, 3, 3]})\n", "example6" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "cIduB5oBgRsK" + }, "source": [ "example6.duplicated()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "0eDRJD4SgRsK" + }, "source": [ "### Dropping duplicates: `drop_duplicates`\n", "`drop_duplicates` simply returns a copy of the data for which all of the `duplicated` values are `False`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "w_YPpqIqgRsK" + }, "source": [ "example6.drop_duplicates()" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "69AqoCZAgRsK" + }, "source": [ "Both `duplicated` and `drop_duplicates` default to consider all columnsm but you can specify that they examine only a subset of columns in your `DataFrame`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "metadata": { + "trusted": false, + "id": "BILjDs67gRsK" + }, "source": [ "example6.drop_duplicates(['letters'])" ], - "outputs": [], - "metadata": { - "trusted": false - } + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", + "metadata": { + "id": "GvX4og1EgRsL" + }, "source": [ "> **Takeaway:** Removing duplicate data is an essential part of almost every data-science project. Duplicate data can change the results of your analyses and give you inaccurate results!" - ], - "metadata": {} + ] } - ], - "metadata": { - "anaconda-cloud": {}, - "kernelspec": { - "name": "python3", - "display_name": "Python 3", - "language": "python" - }, - "language_info": { - "mimetype": "text/x-python", - "nbconvert_exporter": "python", - "name": "python", - "file_extension": ".py", - "version": "3.5.4", - "pygments_lexer": "ipython3", - "codemirror_mode": { - "version": 3, - "name": "ipython" - } - } - }, - "nbformat": 4, - "nbformat_minor": 1 + ] } \ No newline at end of file From 943172fd55d7d9b08d8bee906086cf43402041af Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Mon, 4 Oct 2021 21:50:02 +0530 Subject: [PATCH 03/74] Added DataFrame.describe() and elaborated on some of the existing explanations. --- .../08-data-preparation/notebook.ipynb | 372 ++++++++++++++++-- 1 file changed, 350 insertions(+), 22 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index b1c1d7a0..c6ca05dc 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -76,10 +76,10 @@ "cell_type": "code", "metadata": { "id": "LOe5jQohhulf", - "outputId": "9cf67a6a-5779-453b-b2ed-58f4f1aab507", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "968f9fb0-6cb7-4985-c64b-b332c086bdbf" }, "source": [ "iris_df.shape" @@ -123,15 +123,15 @@ "cell_type": "code", "metadata": { "id": "YPGh_ziji-CY", - "outputId": "ca186194-a126-4348-f58e-aab7ebc8f7b7", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "ffad1c9f-06b4-49d9-b409-5e4cc1b9f19b" }, "source": [ "iris_df.columns" ], - "execution_count": 4, + "execution_count": 3, "outputs": [ { "output_type": "execute_result", @@ -143,7 +143,7 @@ ] }, "metadata": {}, - "execution_count": 4 + "execution_count": 3 } ] }, @@ -163,7 +163,7 @@ }, "source": [ "### `DataFrame.info`\n", - "Let's take a look at this dataset to see what we have:" + "The amount of data(given by the `shape` attribute) and the name of the features or columns(given by the `columns` attribute) tell us something about the dataset. Now, we would want to dive deeper into the dataset. The `DataFrame.info()` function is quite useful for this. " ] }, { @@ -171,15 +171,15 @@ "metadata": { "trusted": false, "id": "dHHRyG0_gRrt", - "outputId": "ca9de335-9e65-486a-d1e2-3e73d060c701", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "325edd04-3809-4d71-b6c3-94c65b162882" }, "source": [ "iris_df.info()" ], - "execution_count": 3, + "execution_count": 4, "outputs": [ { "output_type": "stream", @@ -206,7 +206,150 @@ "id": "1XgVMpvigRru" }, "source": [ - "From this, we know that the *Iris* dataset has 150 entries in four columns. All of the data is stored as 64-bit floating-point numbers." + "From here, we get to can make a few observations:\n", + "1. The DataType of each column: In this dataset, all of the data is stored as 64-bit floating-point numbers.\n", + "2. Number of Non-Null values: Dealing with null values is an important step in data preparation. It will be dealt with later in the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IYlyxbpWFEF4" + }, + "source": [ + "### DataFrame.describe()\n", + "Say we have a lot of numerical data in our dataset. Univariate statistical calculations such as the mean, median, quartiles etc. can be done on each of the columns individually. The `DataFrame.describe()` function provides us with a statistical summary of the numerical columns of a dataset.\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tWV-CMstFIRA", + "outputId": "7c5cd72f-51d8-474c-966b-d2fbbdb7b7fc", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + } + }, + "source": [ + "iris_df.describe()" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
count150.000000150.000000150.000000150.000000
mean5.8433333.0573333.7580001.199333
std0.8280660.4358661.7652980.762238
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000
\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", + "count 150.000000 150.000000 150.000000 150.000000\n", + "mean 5.843333 3.057333 3.758000 1.199333\n", + "std 0.828066 0.435866 1.765298 0.762238\n", + "min 4.300000 2.000000 1.000000 0.100000\n", + "25% 5.100000 2.800000 1.600000 0.300000\n", + "50% 5.800000 3.000000 4.350000 1.300000\n", + "75% 6.400000 3.300000 5.100000 1.800000\n", + "max 7.900000 4.400000 6.900000 2.500000" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zjjtW5hPGMuM" + }, + "source": [ + "The output above shows the total number of data points, mean, standard deviation, minimum, lower quartile(25%), median(50%), upper quartile(75%) and the maximum value of each column." ] }, { @@ -216,20 +359,117 @@ }, "source": [ "### `DataFrame.head`\n", - "Next, let's see what the first few rows of our `DataFrame` look like:" + "With all the above functions and attributes, we have got a top level view of the dataset. We know how many data points are there, how many features are there, the data type of each feature and the number of non-null values for each feature.\n", + "\n", + "Now its time to look at the data itself. Let's see what the first few rows(the first few datapoints) of our `DataFrame` look like:" ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "DZMJZh0OgRrw" + "id": "DZMJZh0OgRrw", + "outputId": "c12ac408-abdb-48a5-ca3f-93b02f963b2f", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } }, "source": [ "iris_df.head()" ], - "execution_count": null, - "outputs": [] + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", + "0 5.1 3.5 1.4 0.2\n", + "1 4.9 3.0 1.4 0.2\n", + "2 4.7 3.2 1.3 0.2\n", + "3 4.6 3.1 1.5 0.2\n", + "4 5.0 3.6 1.4 0.2" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EBHEimZuEFQK" + }, + "source": [ + "As the output here, we can see five(5) entries of the dataset. If we look at the index at the left, we find out that these are the first five rows." + ] }, { "cell_type": "markdown", @@ -239,7 +479,7 @@ "source": [ "### Exercise:\n", "\n", - "By default, `DataFrame.head` returns the first five rows of a `DataFrame`. In the code cell below, can you figure out how to get it to show more?" + "From the example given above, it is clear that, by default, `DataFrame.head` returns the first five rows of a `DataFrame`. In the code cell below, can you figure out a way to display more than five rows?" ] }, { @@ -252,7 +492,7 @@ "source": [ "# Hint: Consult the documentation by using iris_df.head?" ], - "execution_count": null, + "execution_count": 6, "outputs": [] }, { @@ -262,20 +502,106 @@ }, "source": [ "### `DataFrame.tail`\n", - "The flipside of `DataFrame.head` is `DataFrame.tail`, which returns the last five rows of a `DataFrame`:" + "Another way of looking at the data can be from the end(instead of the beginning). The flipside of `DataFrame.head` is `DataFrame.tail`, which returns the last five rows of a `DataFrame`:" ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "heanjfGWgRr2" + "id": "heanjfGWgRr2", + "outputId": "2930cf87-bfeb-4ddc-8be1-53d0e57a06b3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } }, "source": [ "iris_df.tail()" ], - "execution_count": null, - "outputs": [] + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", + "145 6.7 3.0 5.2 2.3\n", + "146 6.3 2.5 5.0 1.9\n", + "147 6.5 3.0 5.2 2.0\n", + "148 6.2 3.4 5.4 2.3\n", + "149 5.9 3.0 5.1 1.8" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] }, { "cell_type": "markdown", @@ -283,7 +609,9 @@ "id": "31kBWfyLgRr3" }, "source": [ - "In practice, it is useful to be able to easily examine the first few rows or the last few rows of a `DataFrame`, particularly when you are looking for outliers in ordered datasets.\n", + "In practice, it is useful to be able to easily examine the first few rows or the last few rows of a `DataFrame`, particularly when you are looking for outliers in ordered datasets. \n", + "\n", + "All the functions and attributes shown above with the help of code examples, help us get a look and feel of the data. \n", "\n", "> **Takeaway:** Even just by looking at the metadata about the information in a DataFrame or the first and last few values in one, you can get an immediate idea about the size, shape, and content of the data you are dealing with." ] From c89a0fc36358116b867e7bfedb59f1fbf3210956 Mon Sep 17 00:00:00 2001 From: INDRASHIS PAUL Date: Mon, 4 Oct 2021 22:34:07 +0530 Subject: [PATCH 04/74] Enhance README with notebook content --- .../08-data-preparation/README.md | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/2-Working-With-Data/08-data-preparation/README.md b/2-Working-With-Data/08-data-preparation/README.md index e1de8260..5bb6c3d8 100644 --- a/2-Working-With-Data/08-data-preparation/README.md +++ b/2-Working-With-Data/08-data-preparation/README.md @@ -28,6 +28,109 @@ Depending on its source, raw data may contain some inconsistencies that will cau - **Missing Data**: Missing data can cause inaccuracies as well as weak or biased results. Sometimes these can be resolved by a "reload" of the data, filling in the missing values with computation and code like Python, or simply just removing the value and corresponding data. There are numerous reasons for why data may be missing and the actions that are taken to resolve these missing values can be dependent on how and why they went missing in the first place. +## Exploring DataFrame information +> **Learning goal:** By the end of this subsection, you should be comfortable finding general information about the data stored in pandas DataFrames. + +Once you have loaded your data into pandas, it will more likely than not be in a DataFrame(refer to the previous [lesson](https://github.com/IndraP24/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe) for detailed overview). However, if the data set in your DataFrame has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, [pandas](https://pandas.pydata.org/) provides some convenient tools to quickly look at overall information about a DataFrame in addition to the first few and last few rows. + +In order to explore this functionality, we will import the Python scikit-learn library and use an iconic dataset: the **Iris data set **. +```python +import pandas as pd +from sklearn.datasets import load_iris + +iris = load_iris() +iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names']) +``` +| |sepal length (cm)|sepal width (cm)|petal length (cm)|petal width (cm)| +|----------------------------------------|-----------------|----------------|-----------------|----------------| +|0 |5.1 |3.5 |1.4 |0.2 | +|1 |4.9 |3.0 |1.4 |0.2 | +|2 |4.7 |3.2 |1.3 |0.2 | +|3 |4.6 |3.1 |1.5 |0.2 | +|4 |5.0 |3.6 |1.4 |0.2 | + +- **DataFrame.info**: To start off, the `info()` method is used to print a summary of the content present in a `DataFrame`. Let's take a look at this dataset to see what we have: +```python +iris_df.info() +``` +``` +RangeIndex: 150 entries, 0 to 149 +Data columns (total 4 columns): + # Column Non-Null Count Dtype +--- ------ -------------- ----- + 0 sepal length (cm) 150 non-null float64 + 1 sepal width (cm) 150 non-null float64 + 2 petal length (cm) 150 non-null float64 + 3 petal width (cm) 150 non-null float64 +dtypes: float64(4) +memory usage: 4.8 KB +``` +From this, we know that the *Iris* dataset has 150 entries in four columns with no null entries. All of the data is stored as 64-bit floating-point numbers. + +- **DataFrame.head()**: Next, to check the actual content of the `DataFrame`, we use the `head()` method. Let's see what the first few rows of our `iris_df` look like: +```python +iris_df.head() +``` +``` + sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) +0 5.1 3.5 1.4 0.2 +1 4.9 3.0 1.4 0.2 +2 4.7 3.2 1.3 0.2 +3 4.6 3.1 1.5 0.2 +4 5.0 3.6 1.4 0.2 +``` +- **DataFrame.tail()**: Conversely, to check the last few rows of the `DataFrame`, we use the `tail()` method: +```python +iris_df.tail() +``` +``` + sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) +145 6.7 3.0 5.2 2.3 +146 6.3 2.5 5.0 1.9 +147 6.5 3.0 5.2 2.0 +148 6.2 3.4 5.4 2.3 +149 5.9 3.0 5.1 1.8 +``` +> **Takeaway:** Even just by looking at the metadata about the information in a DataFrame or the first and last few values in one, you can get an immediate idea about the size, shape, and content of the data you are dealing with. + +## Dealing with Missing Data +> **Learning goal:** By the end of this subsection, you should know how to replace or remove null values from DataFrames. + +Most of the time the datasets you want to use (of have to use) have missing values in them. How missing data is handled carries with it subtle tradeoffs that can affect your final analysis and real-world outcomes. + +Pandas handles missing values in two ways. The first you've seen before in previous sections: `NaN`, or Not a Number. This is a actually a special value that is part of the IEEE floating-point specification and it is only used to indicate missing floating-point values. + +For missing values apart from floats, pandas uses the Python `None` object. While it might seem confusing that you will encounter two different kinds of values that say essentially the same thing, there are sound programmatic reasons for this design choice and, in practice, going this route enables pandas to deliver a good compromise for the vast majority of cases. Notwithstanding this, both `None` and `NaN` carry restrictions that you need to be mindful of with regards to how they can be used. + +Check out more about `NaN` and `None` from the [notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb)! + +- **Detecting null values**: In `pandas`, the `isnull()` and `notnull()` methods are your primary methods for detecting null data. Both return Boolean masks over your data. We will be using `numpy` for `NaN` values: +```python +import numpy as np + +example1 = pd.Series([0, np.nan, '', None]) +example1.isnull() +``` +``` +0 False +1 True +2 False +3 True +dtype: bool +``` +Look closely at the output. Does any of it surprise you? While `0` is an arithmetic null, it's nevertheless a perfectly good integer and pandas treats it as such. `''` is a little more subtle. While we used it in Section 1 to represent an empty string value, it is nevertheless a string object and not a representation of null as far as pandas is concerned. + +Now, let's turn this around and use these methods in a manner more like you will use them in practice. You can use Boolean masks directly as a ``Series`` or ``DataFrame`` index, which can be useful when trying to work with isolated missing (or present) values. + +> **Tkeaway**: Both the `isnull()` and `notnull()` methods produce similar results when you use them in `DataFrame`s: they show the results and the index of those results, which will help you enormously as you wrestle with your data. + +- **Dropping null values**: Beyond identifying missing values, pandas provides a convenient means to remove null values from `Series` and `DataFrame`s. (Particularly on large data sets, it is often more advisable to simply remove missing [NA] values from your analysis than deal with them in other ways.) To see this in action, let's return to `example1`: +```python +example1 = example1.dropna() +example1 +``` + + ## 🚀 Challenge From 40706007057840bca37292598e90a12aea7c6133 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 4 Oct 2021 19:50:05 -0500 Subject: [PATCH 05/74] feat: Translation for module 1 section 1wq --- .../translations/README.es.md | 190 +++++++++--------- 1 file changed, 100 insertions(+), 90 deletions(-) diff --git a/1-Introduction/01-defining-data-science/translations/README.es.md b/1-Introduction/01-defining-data-science/translations/README.es.md index 873ad74f..20011f7c 100644 --- a/1-Introduction/01-defining-data-science/translations/README.es.md +++ b/1-Introduction/01-defining-data-science/translations/README.es.md @@ -1,165 +1,175 @@ -# Defining Data Science +# Definiendo la Ciencia de Datos -|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/01-Definitions.png)| +|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/01-Definitions.png)| |:---:| -|Defining Data Science - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | +|Definiendo la Ciencia de Datos - _Sketchnote por [@nitya](https://twitter.com/nitya)_ | --- -[![Defining Data Science Video](images/video-def-ds.png)](https://youtu.be/pqqsm5reGvs) +[![Video definiendo la Ciencia de Datos](images/video-def-ds.png)](https://youtu.be/pqqsm5reGvs) -## [Pre-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/0) +## [Examen previo a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/0) -## What is Data? -In our everyday life, we are constantly surrounded by data. The text you are reading now is data, the list of phone numbers of your friends in your smartphone is data, as well as the current time displayed on your watch. As human beings, we naturally operate with data by counting the money we have or writing letters to our friends. +## ¿Qué son los Datos? +En nuestra vida diaria, estamos constantemente rodeados por datos. El texto que estás leyendo ahora son datos, +la lista de números telefónicos de tus amigos en tu móvil son datos, también como la hora actual que se muestra en tu reloj. +Como seres humanos, operamos naturalmente con datos, contando el dinero que tenemos o escribiendo cartas a nuestros amigos. -However, data became much more critical with the creation of computers. The primary role of computers is to perform computations, but they need data to operate on. Thus, we need to understand how computers store and process data. +Sin embargo, los datos se vuelven más críticos con la creación de las computadoras. El rol principal de las computadoras +es realizar cálculos, pero éstas necesitan datos para operar. Por lo cual, necesitamos entender cómo las computadoras +almacenan y procesan los datos. -With the emergence of the Internet, the role of computers as data handling devices increased. If you think of it, we now use computers more and more for data processing and communication, rather than actual computations. When we write an e-mail to a friend or search for some information on the Internet - we are essentially creating, storing, transmitting, and manipulating data. -> Can you remember the last time you have used computers to actually compute something? +Con el surgimiento de internet, el rol de las computadoras como dispositivos para la manipulación de datos incrementó. +Si lo piensas, ahora usamos computadoras mucho más para la comunicación y el procesamiento de datos, en lugar de para hacer cálculos. Cuando escribimos un correo electrónico a un amigo o buscamos alguna información en internet - estamos +creando, almacenando, transmitiendo y manipulando datos. -## What is Data Science? +> ¿Recuerdas la última vez que usaste una computadora para realmente calcular algo? -In [Wikipedia](https://en.wikipedia.org/wiki/Data_science), **Data Science** is defined as *a scientific field that uses scientific methods to extract knowledge and insights from structured and unstructured data, and apply knowledge and actionable insights from data across a broad range of application domains*. +## ¿Qué es Ciencia de Datos? -This definition highlights the following important aspects of data science: +En [Wikipedia](https://en.wikipedia.org/wiki/Data_science), se define la **Ciencia de Datos** como *un campo de las ciencias que usa métodos científicos para extraer conocimiento y perspectivas de datos estructurados y no estructurados, y +aplicar el conocimiento y conocimiento práctico de los datos a través de un amplio rango de dominios de aplicación*. -* The main goal of data science is to **extract knowledge** from data, in order words - to **understand** data, find some hidden relationships and build a **model**. -* Data science uses **scientific methods**, such as probability and statistics. In fact, when the term *data science* was first introduced, some people argued that data science is just a new fancy name for statistics. Nowadays it has become evident that the field is much broader. -* Obtained knowledge should be applied to produce some **actionable insights**. -* We should be able to operate on both **structured** and **unstructured** data. We will come back to discuss different types of data later in the course. -* **Application domain** is an important concept, and data scientist often needs at least some degree of expertise in the problem domain. +Ésta definición destaca los siguientes aspectos importantes para la ciencia de datos: -> Another important aspect of Data Science is that it studies how data can be gathered, stored and operated upon using computers. While statistics gives us mathematical foundations, data science applies mathematical concepts to actually draw insights from data. +* El objetivo principal para la ciencia de datos es **extraer conocimiento** de los datos, en otras palabras - **entender** los datos, encontrar relaciones ocultas y construir un **modelo**. +* La ciencia de datos usa **métodos científicos**, como la probabilidad y estadística. De hecho, cuando el término **ciencia de datos** fue usado por primera vez, algunas personas argumentaron que la ciencia de datos era solo un nuevo nombre elegante para estadística. En estos días se ha vuelto evidente que es un campo mucho más amplio. +* El conocimiento obtenido puede ser aplicado para producir **conocimiento práctico**. +* Seremos capace de operar tanto datos **estructurados** y **no estructurados**. Más adelante en el curso discutiremos los diferentes tupos de datos. +* El **dominio de la aplicación** es un concepto importante, y un científico de datos necesita al menos cierta experiencia en el dominio del problema. -One of the ways (attributed to [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) to look at the data science is to consider it to be a separate paradigm of science: -* **Empyrical**, in which we rely mostly on observations and results of experiments -* **Theoretical**, where new concepts emerge from existing scientific knowledge -* **Computational**, where we discover new principles based on some computational experiments -* **Data-Driven**, based on discovering relationships and patterns in the data +> Otro aspecto importante de la Ciencia de Datos es que esta estudia como los datos son obtenidos, almacenados y operados usando computadoras. Mientras la estadística nos da los fundamentos matemáticos, la ciencia de datos aplica los conceptos matemáticos para realmente extraer conocimiento de los datos. -## Other Related Fields +Una de las formas (atribuidas a [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) de ver a la ciencia de datos es considerarla como un paradigma separado de la ciencia: +* **Empírica**, en la que confíamos mayormente en observaciones y resultados de experimientos +* **Teórica**, donde surgen nuevos conceptos desde el conocimiento científico existente +* **Computacional**, donde descubrimos nuevos principios basados en algunos experimentos computacionales +* **Dirigidos por datos**, basados en el descubrimiento de relaciones y patrones en los datos -Since data is a pervasive concept, data science itself is also a broad field, touching many other related disciplines. +## Otros campos relacionados + +Ya que los datos son un concepto predominante, la ciencia de datos en sí misma también es un amplio campo, abarcando muchas otras disciplinas relacionadas.
-
Databases
+
Bases de datos
-The most obvious thing to consider is **how to store** the data, i.e. how to structure them in a way that allows faster processing. There are different types of databases that store structured and unstructured data, which [we will consider in our course](../../2-Working-With-Data/README.md). +La cosa más obvia a considerar es **cómo almacenar** los datos, por ejemplo como estructurarlos de tal formar que se procesen más rápido. Existen distintos tipos de bases de datos que almacenan datos estructurados y no estructurados, los +cuales [consideraremos en este curso] (../../2-Working-With-Data/README.md).
Big Data
-Often we need to store and process really large quantities of data with relatively simple structure. There are special approaches and tools to store that data in a distributed manner on a computer cluster, and process them efficiently. +Usualmente necesitamos almacenar y procesar enormes cantidades de datos con estructuras relativamente simples. Existen +formas especiales y herramientas para almacenar los datos en una forma distribuida on un clúster de computadoras, y procesarlas eficientemente.
-
Machine Learning
+
Aprendizaje automático
-One of the ways to understand the data is to **build a model** that will be able to predict desired outcome. Being able to learn such models from data is the area studied in **machine learning**. You may want to have a look at our [Machine Learning for Beginners](https://github.com/microsoft/ML-For-Beginners/) Curriculum to get deeper into that field. +Una de las formas de entender los datos es **construir un modelo** que será capaz de predecir el resultado deseado. Ser capaz de aprender esos modelos de los datos es el área de estudio del **aprendizaje automático**. Querrás dar un vistazo a nuestro currículum de [Aprendizaje automático para principiantes](https://github.com/microsoft/ML-For-Beginners/) para profundizar en ese campo.
-
Artificial Intelligence
+
Inteligencia aritifcial
-As machine learning, artificial intelligence also relies on data, and it involves building high complexity models that will exhibit the behavior similar to a human being. Also, AI methods often allow us to turn unstructured data (eg. natural language) into structured by extracting some insights. +Así como el aprendizaje automático, la inteligencia artificial también depende de los datos, e involucra la construcción de modelos altamente complejos que expondrán un comportamiento similar a un ser humano. Además, los métodos de AI usualmente nos permiten convertir datos no estructurados (por ejemplo, lenguaje natural) en datos estructurados extrayendo conocimiento útil.
-
Visualization
+
Visualización
-Vast amounts of data are incomprehensible for a human being, but once we create useful visualizations - we can start making much more sense of data, and drawing some conclusions. Thus, it is important to know many ways to visualize information - something that we will cover in [Section 3](../../3-Data-Visualization/README.md) of our course. Related fields also include **Infographics**, and **Human-Computer Interaction** in general. +Cantidades descomunales de datos son incomprensibles para un ser humano, pero una vez que creamos visualizaciones útiles - podemos iniciar haciendo más sentido de los datos, y extrayendo algunas conclusiones. Por lo tanto, es importante conocer diversas formas de visualizar la información - lo cual cubriremos en la [Sección 3](../../3-Data-Visualization/README.md) de nuestro curso. Campos relacionados incluyen **infografías**, e **interacción humano-computadora** en general.
-## Types of Data +## Tipos de datos -As we have already mentioned - data is everywhere, we just need to capture it in the right way! It is useful to distinguish between **structured** and **unstructured** data. The former are typically represented in some well-structured form, often as a table or number of tables, while latter is just a collection of files. Sometimes we can also talk about **semistructured** data, that have some sort of a structure that may vary greatly. +Como ya se ha mencionado - los datos están en todas partes, ¡sólo necesitamos capturarlos en la forma correcta! Es útil distinguir entre datos **estructurados** y **no estructurados**. Los primeros típicamente son representados en una forma bien estructurada, usualmente como una tabla o conunto de tablas, mientras que los últimos es sólo una colección de archivos. Algunas veces podemos hablar de datos **semi-estructurados**, que tienen cierta estructura la cual podría variar mucho. -| Structured | Semi-structured | Unstructured | -|----------- |-----------------|--------------| -| List of people with their phone numbers | Wikipedia pages with links | Text of Encyclopaedia Britannica | -| Temperature in all rooms of a building at every minute for the last 20 years | Collection of scientific papers in JSON format with authors, data of publication, and abstract | File share with corporate documents | -| Data for age and gender of all people entering the building | Internet pages | Raw video feed from surveillance camera | +| Estructurado | Semi-estructurado | No estructurado | +|------------- |-------------------|-----------------| +| Lista de personas con sus números telefónicos | Páginas de wikipedia con enlaces | Texto de la enciclopedia Británica | +| Temperatura en todas las habitaciones de un edificio a cada minuto por los últimos 20 años | Colección de documentos científicos en formato JSON con autores, fecha de publicación, y resumen | Recurso compartido de archivos con documentos corporativos | +| Datos por edad y género de todas las personas que entrar al edificio | Páginas de internet | Vídeo sin procesar de cámara de vigilancia | -## Where to get Data +## Dónde obtener datos -There are many possible sources of data, and it will be impossible to list all of them! However, let's mention some of the typical places where you can get data: +Hay múltiples fuentes de datos, y ¡sería imposible listarlas todas! Sin embargo, mencionemos algunos de los lugares típicos en dónde obtener datos: -* **Structured** - - **Internet of Things**, including data from different sensors, such as temperature or pressure sensors, provides a lot of useful data. For example, if an office building is equipped with IoT sensors, we can automatically control heating and lighting in order to minimize costs. - - **Surveys** that we ask users after purchase of a good, or after visiting a web site. - - **Analysis of behavior** can, for example, help us understand how deeply a user goes into a site, and what is the typical reason for leaving the site. -* **Unstructured** - - **Texts** can be a rich source of insights, starting from overall **sentiment score**, up to extracting keywords and even some semantic meaning. - - **Images** or **Video**. A video from surveillance camera can be used to estimate traffic on the road, and inform people about potential traffic jams. - - Web server **Logs** can be used to understand which pages of our site are most visited, and for how long. -* Semi-structured - - **Social Network** graph can be a great source of data about user personality and potential effectiveness in spreading information around. - - When we have a bunch of photographs from a party, we can try to extract **Group Dynamics** data by building a graph of people taking pictures with each other. +* **Estructurados** + - **Internet de las cosas**, incluyendo datos de distintos sensore, como sensores de temperatura o presión, proveen muchos datos útiles. Por ejemplo, si una oficina es equipada con sensores IoT, podemos controlar automáticamente la calefacción e iluminación para minimizar costos. + - **Encuestas** que realizamos a los usuarios después de pagar un producto o después de visitar un sitio web. + - **Análisis de comportamiento** podemos, por ejemplo, ayudarnos a entender que tanto profundiza un usuario en un sitio, y cuál es la razón típica por la cual lo deja. +* **No estructurados** + - Los **Textos** pueden ser una fuente rica en conocimiento práctico, empezando por el **sentimiento principal** generalizado, hasta la extracción de palabras clave e incluso algún significado semántico. + - **Imágenes** o **Video**. Un video de una cámara de vigilancia puede ser usado para estimar el tráfico en carretera, e informar a las personas acerca de posibles embotellamientos. + - **Bitácoras** de servidores web pueden ser usadas para entender qué páginas de nuestro sitio son las más visitadas y por cuánto tiempo. +* **Semi-estructurados** + - Grafos de **redes sociales** pueden ser una gran fuente de datos acerca de la la personalidad del usuario y efectividad potencial de difusión de la información. + - Cuando tenemos un conjunto de fotografías de una fiesta, podemos intentar extraer datos de la **dinámica de grupos** construyendo un grafo de personas tomándose fotos unas a otras. -By knowing different possible sources of data, you can try to think about different scenarios where data science techniques can be applied to know the situation better, and to improve business processes. +Conociendo posibles fuentes de datos diversas, puedes intentar pensar en distintos escenarios donde se pueden aplicar técnicas de ciencia de datos para conocer mejor la situación, y mejroar los procesos de negocio. -## What you can do with Data +## Qué puedes hacer con los datos -In Data Science, we focus on the following steps of data journey: +En la ciencia de datos, nos enfocamos en los siguientes pasos del viaje de los datos:
-
1) Data Acquisition
+
1) Adquisición de datos
-First step is to collect the data. While in many cases it can be a straightforward process, like data coming to a database from web application, sometimes we need to use special techniques. For example, data from IoT sensors can be overwhelming, and it is a good practice to use buffering endpoints such as IoT Hub to collect all the data before further processing. +El primer paso es reunir los datos. Mientras que en muchos casos esto puede ser un proceso simple, como datos obtenidos des una base de datos de una aplicación web. algunas veces necesitamos usar técnicas especiales. Por ejemplo, los datos obtenidos desde sensorres IoT pueden ser inmensos, y es una buena práctica el uso de endpoints búfer como IoT Hub para para reunir todos los datos antes de procesarlos.
-
2) Data Storage
+
2) Almacenamiento de datos
-Storing the data can be challenging, especially if we are talking about big data. When deciding how to store data, it makes sense to anticipate the way you would want later on to query them. There are several ways data can be stored: +Almacenar los datos puede ser desafiante, especialmente si hablamos de big data. Al decidir cómo almacer datos, hace sentido anticiparse a la forma en la cual serán consultados. Existen varias formas de almacenar los datos:
    -
  • Relational database stores a collection of tables, and uses a special language called SQL to query them. Typically, tables would be connected to each other using some schema. In many cases we need to convert the data from original form to fit the schema.
  • -
  • NoSQL database, such as CosmosDB, does not enforce schema on data, and allows storing more complex data, for example, hierarchical JSON documents or graphs. However, NoSQL database does not have rich querying capabilities of SQL, and cannot enforce referential integrity between data.
  • -
  • Data Lake storage is used for large collections of data in raw form. Data lakes are often used with big data, where all data cannot fit into one machine, and has to be stored and processed by a cluster. Parquet is the data format that is often used in conjunction with big data.
  • +
  • Las bases de datos relacionales almacenan una colección de tabla, y usan un lenguaje especial llamado SQL para consultalos. Típicamente, las tablas estarían conectadas unas a otras mediante un esquema. En muchas ocasiones necesitamos convertir los datos desde la fuente original para que se ajusten al esquema.
  • +
  • Bases de datos NoSQL, como CosmosDB, no exigen un esquema de datos, y permiten almacenar datos más complejos, por ejemplo, documentos JSON jerárquicos o grafos. Sin embargo, Las bases de datos NoSQL no tienen capacidades de consulta SQL sofisticadas, y no requieren integridad referencial entre los datos.
  • +
  • El almacenamiento en lago de datos se usa para grandes colecciones de datos sin procesamiento. Los lagos de datos suelen ser usados con big data, donde todos los datos no pueden ser reunidos en un único equipo, y tienen que ser almacenados y procesados por un clúster. Parquet es un formato de datos que se utiliza comúnmente en conjunto con big data.
-
3) Data Processing
+
3) Procesamiento de datos
-This is the most exciting part of data journey, which involved processing the data from its original form to the form that can be used for visualization/model training. When dealing with unstructured data such as text or images, we may need to use some AI techniques to extract **features** from the data, thus converting it to structured form. +Esta es la parte más emocionante del viaje de los datos, el cual involucra el procesamiento de los datos desde su forma original hasta la forma en que puede ser usada por visualizaciones/modelo de entrenamiento. Cuando tratamos con datos no estructurados como texto o imágenes, debemos usar algunas técnias de IA para extraer las **características** de los datos, y así convertirlos a su forma estructurada.
-
4) Visualization / Human Insights
+
4) Visualización / entendimiento humano
-Often to understand the data we need to visualize them. Having many different visualization techniques in our toolbox we can find the right view to make an insight. Often, data scientist needs to "play with data", visualizing it many times and looking for some relationships. Also, we may use techniques from statistics to test some hypotheses or prove correlation between different pieces of data. +Usualmente para entender los datos necesitamos visualizarlos. Teniendo diversas ténicas de visualización en nuestro arsenal podemos encontrar la visualización adecuada para comprenderla. Comúnmente, un científico de datos necesita "jugar con los datos", visualizádolos varias veces y buscando alguna relación. Además, debemos usar técnicas de estadística para probar algunas hipótesis o probar la correlación entre distintas porciones de datos.
-
5) Training predictive model
+
5) Entrenando modelos predictivos
-Because the ultimate goal of data science is to be able to take decisions based on data, we may want to use the techniques of Machine Learning to build predictive model that will be able to solve our problem. +Ya que el principal objetivo de la ciencia de datos es ser capaz de tomar decisiones basándonos en los datos, debemos usar técnicas de aprendizaje automático para construir modelos predictivos que serán capces de resolver nuestros problemas.
-Of course, depending on the actual data some steps might be missing (eg., when we already have the data in the database, or when we do not need model training), or some steps might be repeated several times (such as data processing). +Por supuesto, dependiendo de los datos reales algunos pasos serán omitidos (por ejemplo, cuando ya tenemos los datos en la base de datos, o cuando no necesitamos modelo de entrenamiento), o algunos pasos deben ser repetidos varias veces (como el procesamiento de datos). -## Digitalization and Digital Transformation +## Digitalización y transformación digital -In the last decade, many businesses started to understand the importance of data when making business decisions. To apply data science principles to running a business one first needs to collect some data, i.e. somehow turn business processes into digital form. This is known as **digitalization**, and followed by using data science techniques to guide decisions it often leads to significant increase of productivity (or even business pivot), called **digital transformation**. +En la última década, muchos negocios comenzaron a entender la importancia de los datos al tomar decisiones de negocio. Para aplicar los principios de ciencia de datos para dirigir un negocio primero necesitas reunir algunos datos, por ejemplo, de alguna forma digitalizar los procesos de negocio. Esto es conocido como **digitalización**, y seguido usar técnicas de ciencia de datos para guiar decisiones esto usualmente conlleva a un incremento significativo de la productividad (o incluso negocios pivote), llamado **transformación digital**. -Let's consider an example. Suppose, we have a data science course (like this one), which we deliver online to students, and we want to use data science to improve it. How can we do it? +Consideremos el siguiente ejemplo. Supongaos, tenemos un curso de ciencia de datos (como éste), el cual ofrecemos en línea a los estudiante, y queremos usar ciencia de datos para mejorarl. ¿Cómo podemos hacerlo? -We can start with thinking "what can be digitized?". The simplest way would be to measure time it takes each student to complete each module, and the obtained knowledge (eg. by giving multiple-choice test at the end of each module). By averaging time-to-complete across all students, we can find out which modules cause the most problems to students, and work on simplifying them. +Podemos comenzar pensando "¿qué puede ser digitalizado?". La forma más simple sería medir el tiempo que le toma a cada estuddiante completar cada módulo, y el conocimiento obtenido (por ejemplo, realizando exámenes de opción múltiple al final de cada módulo). Promediando el tiempo en concluir de todos los estudiantes, y trabajar en simplificarlos. -> You may argue that this approach is not ideal, because modules can be of different length. It is probably more fair to divide the time by the length of the module (in number of characters), and compare those values instead. +> Argumentarás que este enfoque no es idóneo, porque los módulos pueden tener distinta duración. Problablemente es más justo dividir el tiempo por la longitud del módulo (en número de caracteres), y comparar esos valores en su lugar. -When we start analyzing results of multiple-choice tests, we can try to find out specific concepts that students understand poorly, and improve the content. To do that, we need to design tests in such a way that each question maps to a certain concept or chunk of knowledge. +Cuando comenzamos analizando los resultados de los exámenes de opción múltiple, intentamos encontrar conceptos específicos que los estudiantes entendieron vagamente,y mejorar el contenido. Para hacerlo, necesitamos diseñar exámenes de tal forma que cada pregunta se relacione a un concepto concreto o porción de conocimiento. -If we want to get even more complicated, we can plot the time taken for each module against the age category of students. We might find out that for some age categories it takes inappropriately long time to complete the module, or students drop out at certain point. This can help us provide age recommendation for the module, and minimize people's dissatisfaction from wrong expectations. +Si queremos hacerlo aún más complejo, podemos trazar el tiempo invertido en cada módulo contra la categoría de edad de los estudiantes. Encontraremos que para algunas categorías de edad les toma ciertamente más tiempo el completar el módulo, o algunos estudiantes abandonan el curso en cierto punto. Esot nos puede ayudar a sugerir recomendaciones de módulos por edad, y así minimizar el descontengo de la gente por falsas expectativas. -## 🚀 Challenge +## 🚀 Desafío -In this challenge, we will try to find concepts relevant to the field of Data Science by looking at texts. We will take Wikipedia article on Data Science, download and process the text, and then build a word cloud like this one: +En este desafío, intentaremos encontrar los conceptos relevante para el campo de la Ciencia de Datos consultando algunos textos. Tomarermos un artículo de Wikipedia de Ciecnia de Datos, descargaremos y procesaremos el texto, y luego construiremos una nube de palabras como esta: -![Word Cloud for Data Science](images/ds_wordcloud.png) +![Nube de palabras para Ciencia de Datos](images/ds_wordcloud.png) -Visit [`notebook.ipynb`](notebook.ipynb) to read through the code. You can also run the code, and see how it performs all data transformations in real time. +Visita [`notebook.ipynb`](notebook.ipynb) para leer el código.También pueder ejecutarlo y ver como realiza todas las transformaciones de los datos en tiempo real. -> If you do not know how to run code in Jupyter Notebook, have a look at [this article](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). +> Si no sabes como ejecutar el código en Jupyter Notebook, da un vistazo a [este artículo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). -## [Post-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/1) +## [Cuestionario porterior a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/1) -## Assignments +## Ejercicios -* **Task 1**: Modify the code above to find out related concepts for the fields of **Big Data** and **Machine Learning** -* **Task 2**: [Think About Data Science Scenarios](assignment.md) +* **Tarea 1**: Modifica el código anterior para encontrar conceptos relacionados para los campos de **Big Data** y **Machine Learning** +* **Tarea 2**: [Piensa en los escenarios para la Ciencia de Datos](assignment.md) -## Credits +## Créditos -This lesson has been authored with ♥️ by [Dmitry Soshnikov](http://soshnikov.com) +Esta lección ha sido escrita con ♥️ por [Dmitry Soshnikov](http://soshnikov.com) From 1f95d73ca3d7c1a5f55b98893cd6edf7e029a575 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 4 Oct 2021 19:50:53 -0500 Subject: [PATCH 06/74] feat: Module 1 section 2 - Add file to be translated --- .../02-ethics/translations/README.es.md | 263 ++++++++++++++++++ 1 file changed, 263 insertions(+) diff --git a/1-Introduction/02-ethics/translations/README.es.md b/1-Introduction/02-ethics/translations/README.es.md index e69de29b..d7442aaa 100644 --- a/1-Introduction/02-ethics/translations/README.es.md +++ b/1-Introduction/02-ethics/translations/README.es.md @@ -0,0 +1,263 @@ +# Introduction to Data Ethics + +|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/02-Ethics.png)| +|:---:| +| Data Science Ethics - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | + +--- + +We are all data citizens living in a datafied world. + +Market trends tell us that by 2022, 1-in-3 large organizations will buy and sell their data through online [Marketplaces and Exchanges](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/). As **App Developers**, we'll find it easier and cheaper to integrate data-driven insights and algorithm-driven automation into daily user experiences. But as AI becomes pervasive, we'll also need to understand the potential harms caused by the [weaponization](https://www.youtube.com/watch?v=TQHs8SA1qpk) of such algorithms at scale. + +Trends also indicate that we will create and consume over [180 zettabytes](https://www.statista.com/statistics/871513/worldwide-data-created/) of data by 2025. As **Data Scientists**, this gives us unprecedented levels of access to personal data. This means we can build behavioral profiles of users and influence decision-making in ways that create an [illusion of free choice](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) while potentially nudging users towards outcomes we prefer. It also raises broader questions on data privacy and user protections. + +Data ethics are now _necessary guardrails_ for data science and engineering, helping us minimize potential harms and unintended consequences from our data-driven actions. The [Gartner Hype Cycle for AI](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifies relevant trends in digital ethics, responsible AI ,and AI governances as key drivers for larger megatrends around _democratization_ and _industrialization_ of AI. + +![Gartner's Hype Cycle for AI - 2020](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==) + +In this lesson, we'll explore the fascinating area of data ethics - from core concepts and challenges, to case studies and applied AI concepts like governance - that help establish an ethics culture in teams and organizations that work with data and AI. + + + + +## [Pre-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/2) 🎯 + +## Basic Definitions + +Let's start by understanding the basic terminology. + +The word "ethics" comes from the [Greek word "ethikos"](https://en.wikipedia.org/wiki/Ethics) (and its root "ethos") meaning _character or moral nature_. + +**Ethics** is about the shared values and moral principles that govern our behavior in society. Ethics is based not on laws but on +widely accepted norms of what is "right vs. wrong". However, ethical considerations can influence corporate governance initiatives and government regulations that create more incentives for compliance. + +**Data Ethics** is a [new branch of ethics](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1) that "studies and evaluates moral problems related to _data, algorithms and corresponding practices_". Here, **"data"** focuses on actions related to generation, recording, curation, processing dissemination, sharing ,and usage, **"algorithms"** focuses on AI, agents, machine learning ,and robots, and **"practices"** focuses on topics like responsible innovation, programming, hacking and ethics codes. + +**Applied Ethics** is the [practical application of moral considerations](https://en.wikipedia.org/wiki/Applied_ethics). It's the process of actively investigating ethical issues in the context of _real-world actions, products and processes_, and taking corrective measures to make that these remain aligned with our defined ethical values. + +**Ethics Culture** is about [_operationalizing_ applied ethics](https://hbr.org/2019/05/how-to-design-an-ethical-organization) to make sure that our ethical principles and practices are adopted in a consistent and scalable manner across the entire organization. Successful ethics cultures define organization-wide ethical principles, provide meaningful incentives for compliance, and reinforce ethics norms by encouraging and amplifying desired behaviors at every level of the organization. + + +## Ethics Concepts + +In this section, we'll discuss concepts like **shared values** (principles) and **ethical challenges** (problems) for data ethics - and explore **case studies** that help you understand these concepts in real-world contexts. + +### 1. Ethics Principles + +Every data ethics strategy begins by defining _ethical principles_ - the "shared values" that describe acceptable behaviors, and guide compliant actions, in our data & AI projects. You can define these at an individual or team level. However, most large organizations outline these in an _ethical AI_ mission statement or framework that is defined at corporate levels and enforced consistently across all teams. + +**Example:** Microsoft's [Responsible AI](https://www.microsoft.com/en-us/ai/responsible-ai) mission statement reads: _"We are committed to the advancement of AI-driven by ethical principles that put people first"_ - identifying 6 ethical principles in the framework below: + +![Responsible AI at Microsoft](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png) + +Let's briefly explore these principles. _Transparency_ and _accountability_ are foundational values that other principles built upon - so let's begin there: + +* [**Accountability**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) makes practitioners _responsible_ for their data & AI operations, and compliance with these ethical principles. +* [**Transparency**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) ensures that data and AI actions are _understandable_ (interpretable) to users, explaining the what and why behind decisions. +* [**Fairness**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6) - focuses on ensuring AI treats _all people_ fairly, addressing any systemic or implicit socio-technical biases in data and systems. +* [**Reliability & Safety**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - ensures that AI behaves _consistently_ with defined values, minimizing potential harms or unintended consequences. +* [**Privacy & Security**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - is about understanding data lineage, and providing _data privacy and related protections_ to users. +* [**Inclusiveness**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - is about designing AI solutions with intention, adapting them to meet a _broad range of human needs_ & capabilities. + +> 🚨 Think about what your data ethics mission statement could be. Explore ethical AI frameworks from other organizations - here are examples from [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles) ,and [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/). What shared values do they have in common? How do these principles relate to the AI product or industry they operate in? + +### 2. Ethics Challenges + +Once we have ethical principles defined, the next step is to evaluate our data and AI actions to see if they align with those shared values. Think about your actions in two categories: _data collection_ and _algorithm design_. + +With data collection, actions will likely involve **personal data** or personally identifiable information (PII) for identifiable living individuals. This includes [diverse items of non-personal data](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) that _collectively_ identify an individual. Ethical challenges can relate to _data privacy_, _data ownership_, and related topics like _informed consent_ and _intellectual property rights_ for users. + +With algorithm design, actions will involve collecting & curating **datasets**, then using them to train & deploy **data models** that predict outcomes or automate decisions in real-world contexts. Ethical challenges can arise from _dataset bias_, _data quality_ issues, _unfairness_ ,and _misrepresentation_ in algorithms - including some issues that are systemic in nature. + +In both cases, ethics challenges highlight areas where our actions may encounter conflict with our shared values. To detect, mitigate, minimize, or eliminate, these concerns - we need to ask moral "yes/no" questions related to our actions, then take corrective actions as needed. Let's take a look at some ethical challenges and the moral questions they raise: + + +#### 2.1 Data Ownership + +Data collection often involves personal data that can identify the data subjects. [Data ownership](https://permission.io/blog/data-ownership) is about _control_ and [_user rights_](https://permission.io/blog/data-ownership) related to the creation, processing ,and dissemination of data. + +The moral questions we need to ask are: + * Who owns the data? (user or organization) + * What rights do data subjects have? (ex: access, erasure, portability) + * What rights do organizations have? (ex: rectify malicious user reviews) + +#### 2.2 Informed Consent + +[Informed consent](https://legaldictionary.net/informed-consent/) defines the act of users agreeing to an action (like data collection) with a _full understanding_ of relevant facts including the purpose, potential risks ,and alternatives. + +Questions to explore here are: + * Did the user (data subject) give permission for data capture and usage? + * Did the user understand the purpose for which that data was captured? + * Did the user understand the potential risks from their participation? + +#### 2.3 Intellectual Property + +[Intellectual property](https://en.wikipedia.org/wiki/Intellectual_property) refers to intangible creations resulting from the human initiative, that may _have economic value_ to individuals or businesses. + +Questions to explore here are: + * Did the collected data have economic value to a user or business? + * Does the **user** have intellectual property here? + * Does the **organization** have intellectual property here? + * If these rights exist, how are we protecting them? + +#### 2.4 Data Privacy + +[Data privacy](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/) or information privacy refers to the preservation of user privacy and protection of user identity with respect to personally identifiable information. + +Questions to explore here are: + * Is users' (personal) data secured against hacks and leaks? + * Is users' data accessible only to authorized users and contexts? + * Is users' anonymity preserved when data is shared or disseminated? + * Can a user be de-identified from anonymized datasets? + + +#### 2.5 Right To Be Forgotten + +The [Right To Be Forgotten](https://en.wikipedia.org/wiki/Right_to_be_forgotten) or [Right to Erasure](https://www.gdpreu.org/right-to-be-forgotten/) provides additional personal data protection to users. Specifically, it gives users the right to request deletion or removal of personal data from Internet searches and other locations, _under specific circumstances_ - allowing them a fresh start online without past actions being held against them. + +Questions to explore here are: + * Does the system allow data subjects to request erasure? + * Should the withdrawal of user consent trigger automated erasure? + * Was data collected without consent or by unlawful means? + * Are we compliant with government regulations for data privacy? + + +#### 2.6 Dataset Bias + +Dataset or [Collection Bias](http://researcharticles.com/index.php/bias-in-data-collection-in-research/) is about selecting a _non-representative_ subset of data for algorithm development, creating potential unfairness in result outcomes for diverse groups. Types of bias include selection or sampling bias, volunteer bias, and instrument bias. + +Questions to explore here are: + * Did we recruit a representative set of data subjects? + * Did we test our collected or curated dataset for various biases? + * Can we mitigate or remove any discovered biases? + +#### 2.7 Data Quality + +[Data Quality](https://lakefs.io/data-quality-testing/) looks at the validity of the curated dataset used to develop our algorithms, checking to see if features and records meet requirements for the level of accuracy and consistency needed for our AI purpose. + +Questions to explore here are: + * Did we capture valid _features_ for our use case? + * Was data captured _consistently_ across diverse data sources? + * Is the dataset _complete_ for diverse conditions or scenarios? + * Is information captured _accurately_ in reflecting reality? + +#### 2.8 Algorithm Fairness + +[Algorithm Fairness](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f) checks to see if the algorithm design systematically discriminates against specific subgroups of data subjects leading to [potential harms](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml) in _allocation_ (where resources are denied or withheld from that group) and _quality of service_ (where AI is not as accurate for some subgroups as it is for others). + +Questions to explore here are: + * Did we evaluate model accuracy for diverse subgroups and conditions? + * Did we scrutinize the system for potential harms (e.g., stereotyping)? + * Can we revise data or retrain models to mitigate identified harms? + +Explore resources like [AI Fairness checklists](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA) to learn more. + +#### 2.9 Misrepresentation + +[Data Misrepresentation](https://www.sciencedirect.com/topics/computer-science/misrepresentation) is about asking whether we are communicating insights from honestly reported data in a deceptive manner to support a desired narrative. + +Questions to explore here are: + * Are we reporting incomplete or inaccurate data? + * Are we visualizing data in a manner that drives misleading conclusions? + * Are we using selective statistical techniques to manipulate outcomes? + * Are there alternative explanations that may offer a different conclusion? + +#### 2.10 Free Choice +The [Illusion of Free Choice](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) occurs when system "choice architectures" use decision-making algorithms to nudge people towards taking a preferred outcome while seeming to give them options and control. These [dark patterns](https://www.darkpatterns.org/) can cause social and economic harm to users. Because user decisions impact behavior profiles, these actions potentially drive future choices that can amplify or extend the impact of these harms. + +Questions to explore here are: + * Did the user understand the implications of making that choice? + * Was the user aware of (alternative) choices and the pros & cons of each? + * Can the user reverse an automated or influenced choice later? + +### 3. Case Studies + +To put these ethical challenges in real-world contexts, it helps to look at case studies that highlight the potential harms and consequences to individuals and society, when such ethics violations are overlooked. + +Here are a few examples: + +| Ethics Challenge | Case Study | +|--- |--- | +| **Informed Consent** | 1972 - [Tuskegee Syphillis Study](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - African American men who participated in the study were promised free medical care _but deceived_ by researchers who failed to inform subjects of their diagnosis or about availability of treatment. Many subjects died & partners or children were affected; the study lasted 40 years. | +| **Data Privacy** | 2007 - The [Netflix data prize](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/) provided researchers with _10M anonymized movie rankings from 50K customers_ to help improve recommendation algorithms. However, researchers were able to correlate anonymized data with personally-identifiable data in _external datasets_ (e.g., IMDb comments) - effectively "de-anonymizing" some Netflix subscribers.| +| **Collection Bias** | 2013 - The City of Boston [developed Street Bump](https://www.boston.gov/transportation/street-bump), an app that let citizens report potholes, giving the city better roadway data to find and fix issues. However, [people in lower income groups had less access to cars and phones](https://hbr.org/2013/04/the-hidden-biases-in-big-data), making their roadway issues invisible in this app. Developers worked with academics to _equitable access and digital divides_ issues for fairness. | +| **Algorithmic Fairness** | 2018 - The MIT [Gender Shades Study](http://gendershades.org/overview.html) evaluated the accuracy of gender classification AI products, exposing gaps in accuracy for women and persons of color. A [2019 Apple Card](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) seemed to offer less credit to women than men. Both illustrated issues in algorithmic bias leading to socio-economic harms.| +| **Data Misrepresentation** | 2020 - The [Georgia Department of Public Health released COVID-19 charts](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) that appeared to mislead citizens about trends in confirmed cases with non-chronological ordering on the x-axis. This illustrates misrepresentation through visualization tricks. | +| **Illusion of free choice** | 2020 - Learning app [ABCmouse paid $10M to settle an FTC complaint](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) where parents were trapped into paying for subscriptions they couldn't cancel. This illustrates dark patterns in choice architectures, where users were nudged towards potentially harmful choices. | +| **Data Privacy & User Rights** | 2021 - Facebook [Data Breach](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) exposed data from 530M users, resulting in a $5B settlement to the FTC. It however refused to notify users of the breach violating user rights around data transparency and access. | + +Want to explore more case studies? Check out these resources: +* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - ethics dilemmas across diverse industries. +* [Data Science Ethics course](https://www.coursera.org/learn/data-science-ethics#syllabus) - landmark case studies explored. +* [Where things have gone wrong](https://deon.drivendata.org/examples/) - deon checklist with examples + +> 🚨 Think about the case studies you've seen - have you experienced, or been affected by, a similar ethical challenge in your life? Can you think of at least one other case study that illustrates one of the ethical challenges we've discussed in this section? + +## Applied Ethics + +We've talked about ethics concepts, challenges ,and case studies in real-world contexts. But how do we get started _applying_ ethical principles and practices in our projects? And how do we _operationalize_ these practices for better governance? Let's explore some real-world solutions: + +### 1. Professional Codes + +Professional Codes offer one option for organizations to "incentivize" members to support their ethical principles and mission statement. Codes are _moral guidelines_ for professional behavior, helping employees or members make decisions that align with their organization's principles. They are only as good as the voluntary compliance from members; however, many organizations offer additional rewards and penalties to motivate compliance from members. + +Examples include: + + * [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/) Code of Ethics + * [Data Science Association](http://datascienceassn.org/code-of-conduct.html) Code of Conduct (created 2013) + * [ACM Code of Ethics and Professional Conduct](https://www.acm.org/code-of-ethics) (since 1993) + +> 🚨 Do you belong to a professional engineering or data science organization? Explore their site to see if they define a professional code of ethics. What does this say about their ethical principles? How are they "incentivizing" members to follow the code? + +### 2. Ethics Checklists + +While professional codes define required _ethical behavior_ from practitioners, they [have known limitations](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) in enforcement, particularly in large-scale projects. Instead, many data Science experts [advocate for checklists](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), that can **connect principles to practices** in more deterministic and actionable ways. + +Checklists convert questions into "yes/no" tasks that can be operationalized, allowing them to be tracked as part of standard product release workflows. + +Examples include: + * [Deon](https://deon.drivendata.org/) - a general-purpose data ethics checklist created from [industry recommendations](https://deon.drivendata.org/#checklist-citations) with a command-line tool for easy integration. + * [Privacy Audit Checklist](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - provides general guidance for information handling practices from legal and social exposure perspectives. + * [AI Fairness Checklist](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - created by AI practitioners to support the adoption and integration of fairness checks into AI development cycles. + * [22 questions for ethics in data and AI](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - more open-ended framework, structured for initial exploration of ethical issues in design, implementation, and organizational, contexts. + +### 3. Ethics Regulations + +Ethics is about defining shared values and doing the right thing _voluntarily_. **Compliance** is about _following the law_ if and where defined. **Governance** broadly covers all the ways in which organizations operate to enforce ethical principles and comply with established laws. + +Today, governance takes two forms within organizations. First, it's about defining **ethical AI** principles and establishing practices to operationalize adoption across all AI-related projects in the organization. Second, it's about complying with all government-mandated **data protection regulations** for regions it operates in. + +Examples of data protection and privacy regulations: + + * `1974`, [US Privacy Act](https://www.justice.gov/opcl/privacy-act-1974) - regulates _federal govt._ collection, use ,and disclosure of personal information. + * `1996`, [US Health Insurance Portability & Accountability Act (HIPAA)](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - protects personal health data. + * `1998`, [US Children's Online Privacy Protection Act (COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - protects data privacy of children under 13. + * `2018`, [General Data Protection Regulation (GDPR)](https://gdpr-info.eu/) - provides user rights, data protection ,and privacy. + * `2018`, [California Consumer Privacy Act (CCPA)](https://www.oag.ca.gov/privacy/ccpa) gives consumers more _rights_ over their (personal) data. + * `2021`, China's [Personal Information Protection Law](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/) just passed, creating one of the strongest online data privacy regulations worldwide. + +> 🚨 The European Union defined GDPR (General Data Protection Regulation) remains one of the most influential data privacy regulations today. Did you know it also defines [8 user rights](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr) to protect citizens' digital privacy and personal data? Learn about what these are, and why they matter. + + +### 4. Ethics Culture + +Note that there remains an intangible gap between _compliance_ (doing enough to meet "the letter of the law") and addressing [systemic issues](https://www.coursera.org/learn/data-science-ethics/home/week/4) (like ossification, information asymmetry ,and distributional unfairness) that can speed up the weaponization of AI. + +The latter requires [collaborative approaches to defining ethics cultures](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f) that build emotional connections and consistent shared values _across organizations_ in the industry. This calls for more [formalized data ethics cultures](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/) in organizations - allowing _anyone_ to [pull the Andon cord](https://en.wikipedia.org/wiki/Andon_(manufacturing)) (to raise ethics concerns early in the process) and making _ethical assessments_ (e.g., in hiring) a core criteria team formation in AI projects. + +--- +## [Post-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/3) 🎯 +## Review & Self Study + +Courses and books help with understanding core ethics concepts and challenges, while case studies and tools help with applied ethics practices in real-world contexts. Here are a few resources to start with. + +* [Machine Learning For Beginners](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - lesson on Fairness, from Microsoft. +* [Principles of Responsible AI](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - free learning path from Microsoft Learn. +* [Ethics and Data Science](https://resources.oreilly.com/examples/0636920203964) - O'Reilly EBook (M. Loukides, H. Mason et. al) +* [Data Science Ethics](https://www.coursera.org/learn/data-science-ethics#syllabus) - online course from the University of Michigan. +* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - case studies from the University of Texas. + +# Assignment + +[Write A Data Ethics Case Study](assignment.md) From 3856c3bb631da2c48948c1bc74f43cc28d7ab16b Mon Sep 17 00:00:00 2001 From: Heril Changwal Date: Tue, 5 Oct 2021 10:36:11 +0530 Subject: [PATCH 07/74] Added Translation README.hi --- 4-Data-Science-Lifecycle/translations/README.hi.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 4-Data-Science-Lifecycle/translations/README.hi.md diff --git a/4-Data-Science-Lifecycle/translations/README.hi.md b/4-Data-Science-Lifecycle/translations/README.hi.md new file mode 100644 index 00000000..27463b08 --- /dev/null +++ b/4-Data-Science-Lifecycle/translations/README.hi.md @@ -0,0 +1,13 @@ +# डेटा विज्ञान जीवनचक्र +![संचार](../images/data-love.jpg) +>तस्वीर Headway द्वारा Unsplashपर + +इन पाठों में, आप डेटा विज्ञान जीवनचक्र के कुछ पहलुओं का पता लगाएंगे, जिसमें डेटा के आसपास विश्लेषण और संचार शामिल है। + +### विषय +1. [परिचय] (../14-Introduction/README.md) +2. [विश्लेषण] (../15-Analyzing/README.md) +3. [संचार] (../16-Communication/README.md) + +### क्रेडिट +ये पाठ ❤ के साथ [जालेन मैक्गी](https://twitter.com/JalenMCG) और [जैस्मीन ग्रीनवे](https://twitter.com/paladique) द्वारा लिखे गए थे। \ No newline at end of file From 97356ea5c16fe89920b15b9197880a14e11bf07e Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Tue, 5 Oct 2021 10:41:59 +0530 Subject: [PATCH 08/74] Update README.hi.md --- 4-Data-Science-Lifecycle/translations/README.hi.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/4-Data-Science-Lifecycle/translations/README.hi.md b/4-Data-Science-Lifecycle/translations/README.hi.md index 27463b08..71811e7b 100644 --- a/4-Data-Science-Lifecycle/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/translations/README.hi.md @@ -1,5 +1,5 @@ # डेटा विज्ञान जीवनचक्र -![संचार](../images/data-love.jpg) +![संचार](../images/communication.jpg) >तस्वीर Headway द्वारा Unsplashपर इन पाठों में, आप डेटा विज्ञान जीवनचक्र के कुछ पहलुओं का पता लगाएंगे, जिसमें डेटा के आसपास विश्लेषण और संचार शामिल है। @@ -7,7 +7,7 @@ ### विषय 1. [परिचय] (../14-Introduction/README.md) 2. [विश्लेषण] (../15-Analyzing/README.md) -3. [संचार] (../16-Communication/README.md) +3. [संचार] (../16-communication/README.md) ### क्रेडिट -ये पाठ ❤ के साथ [जालेन मैक्गी](https://twitter.com/JalenMCG) और [जैस्मीन ग्रीनवे](https://twitter.com/paladique) द्वारा लिखे गए थे। \ No newline at end of file +ये पाठ ❤ के साथ [जालेन मैक्गी](https://twitter.com/JalenMCG) और [जैस्मीन ग्रीनवे](https://twitter.com/paladique) द्वारा लिखे गए थे। From 829b38f6f0ebb713d43691006ac4a388640d8bd3 Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Tue, 5 Oct 2021 10:44:32 +0530 Subject: [PATCH 09/74] Update README.hi.md --- 4-Data-Science-Lifecycle/translations/README.hi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/4-Data-Science-Lifecycle/translations/README.hi.md b/4-Data-Science-Lifecycle/translations/README.hi.md index 71811e7b..11f31faf 100644 --- a/4-Data-Science-Lifecycle/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/translations/README.hi.md @@ -1,12 +1,12 @@ # डेटा विज्ञान जीवनचक्र ![संचार](../images/communication.jpg) ->तस्वीर Headway द्वारा Unsplashपर +>तस्वीर Headway द्वारा Unsplash पर इन पाठों में, आप डेटा विज्ञान जीवनचक्र के कुछ पहलुओं का पता लगाएंगे, जिसमें डेटा के आसपास विश्लेषण और संचार शामिल है। ### विषय 1. [परिचय] (../14-Introduction/README.md) -2. [विश्लेषण] (../15-Analyzing/README.md) +2. [विश्लेषण] (../15-analyzing/README.md) 3. [संचार] (../16-communication/README.md) ### क्रेडिट From 4d7f576b72a588e2dc4191ca0c9eced39a520243 Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Tue, 5 Oct 2021 10:45:20 +0530 Subject: [PATCH 10/74] Update README.hi.md --- 4-Data-Science-Lifecycle/translations/README.hi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/4-Data-Science-Lifecycle/translations/README.hi.md b/4-Data-Science-Lifecycle/translations/README.hi.md index 11f31faf..90097585 100644 --- a/4-Data-Science-Lifecycle/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/translations/README.hi.md @@ -5,7 +5,7 @@ इन पाठों में, आप डेटा विज्ञान जीवनचक्र के कुछ पहलुओं का पता लगाएंगे, जिसमें डेटा के आसपास विश्लेषण और संचार शामिल है। ### विषय -1. [परिचय] (../14-Introduction/README.md) +1. [परिचय] (https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/14-Introduction/README.md) 2. [विश्लेषण] (../15-analyzing/README.md) 3. [संचार] (../16-communication/README.md) From 2aa308da3363b8266b725870bc005a072561346f Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Tue, 5 Oct 2021 10:46:44 +0530 Subject: [PATCH 11/74] Update README.hi.md --- 4-Data-Science-Lifecycle/translations/README.hi.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/4-Data-Science-Lifecycle/translations/README.hi.md b/4-Data-Science-Lifecycle/translations/README.hi.md index 90097585..512fea7b 100644 --- a/4-Data-Science-Lifecycle/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/translations/README.hi.md @@ -5,9 +5,9 @@ इन पाठों में, आप डेटा विज्ञान जीवनचक्र के कुछ पहलुओं का पता लगाएंगे, जिसमें डेटा के आसपास विश्लेषण और संचार शामिल है। ### विषय -1. [परिचय] (https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/14-Introduction/README.md) -2. [विश्लेषण] (../15-analyzing/README.md) -3. [संचार] (../16-communication/README.md) +1. [परिचय](../14-Introduction/README.md) +2. [विश्लेषण](../15-analyzing/README.md) +3. [संचार](../16-communication/README.md) ### क्रेडिट ये पाठ ❤ के साथ [जालेन मैक्गी](https://twitter.com/JalenMCG) और [जैस्मीन ग्रीनवे](https://twitter.com/paladique) द्वारा लिखे गए थे। From 52452e59ea521a9c208d143d7ce047c7e33ad362 Mon Sep 17 00:00:00 2001 From: INDRASHIS PAUL Date: Tue, 5 Oct 2021 11:07:14 +0530 Subject: [PATCH 12/74] Add the contents from the notebook to README 1. Copied almost all content (both code and explanations) from the notebook to the README in a proper format. 2. Left out extra portions and exercises in the notebook for the readers to try out. --- .../08-data-preparation/README.md | 187 +++++++++++++++++- 1 file changed, 184 insertions(+), 3 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/README.md b/2-Working-With-Data/08-data-preparation/README.md index 5bb6c3d8..58c2e528 100644 --- a/2-Working-With-Data/08-data-preparation/README.md +++ b/2-Working-With-Data/08-data-preparation/README.md @@ -33,7 +33,8 @@ Depending on its source, raw data may contain some inconsistencies that will cau Once you have loaded your data into pandas, it will more likely than not be in a DataFrame(refer to the previous [lesson](https://github.com/IndraP24/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe) for detailed overview). However, if the data set in your DataFrame has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, [pandas](https://pandas.pydata.org/) provides some convenient tools to quickly look at overall information about a DataFrame in addition to the first few and last few rows. -In order to explore this functionality, we will import the Python scikit-learn library and use an iconic dataset: the **Iris data set **. +In order to explore this functionality, we will import the Python scikit-learn library and use an iconic dataset: the **Iris data set**. + ```python import pandas as pd from sklearn.datasets import load_iris @@ -122,19 +123,199 @@ Look closely at the output. Does any of it surprise you? While `0` is an arithme Now, let's turn this around and use these methods in a manner more like you will use them in practice. You can use Boolean masks directly as a ``Series`` or ``DataFrame`` index, which can be useful when trying to work with isolated missing (or present) values. -> **Tkeaway**: Both the `isnull()` and `notnull()` methods produce similar results when you use them in `DataFrame`s: they show the results and the index of those results, which will help you enormously as you wrestle with your data. +> **Takeaway**: Both the `isnull()` and `notnull()` methods produce similar results when you use them in `DataFrame`s: they show the results and the index of those results, which will help you enormously as you wrestle with your data. - **Dropping null values**: Beyond identifying missing values, pandas provides a convenient means to remove null values from `Series` and `DataFrame`s. (Particularly on large data sets, it is often more advisable to simply remove missing [NA] values from your analysis than deal with them in other ways.) To see this in action, let's return to `example1`: ```python example1 = example1.dropna() example1 ``` +``` +0 0 +2 +dtype: object +``` +Note that this should look like your output from `example3[example3.notnull()]`. The difference here is that, rather than just indexing on the masked values, `dropna` has removed those missing values from the `Series` `example1`. + +Because `DataFrame`s have two dimensions, they afford more options for dropping data. + +```python +example2 = pd.DataFrame([[1, np.nan, 7], + [2, 5, 8], + [np.nan, 6, 9]]) +example2 +``` +| | 0 | 1 | 2 | +|------|---|---|---| +|0 |1.0|NaN|7 | +|1 |2.0|5.0|8 | +|2 |NaN|6.0|9 | + +(Did you notice that pandas upcast two of the columns to floats to accommodate the `NaN`s?) + +You cannot drop a single value from a `DataFrame`, so you have to drop full rows or columns. Depending on what you are doing, you might want to do one or the other, and so pandas gives you options for both. Because in data science, columns generally represent variables and rows represent observations, you are more likely to drop rows of data; the default setting for `dropna()` is to drop all rows that contain any null values: + +```python +example2.dropna() +``` +``` + 0 1 2 +1 2.0 5.0 8 +``` +If necessary, you can drop NA values from columns. Use `axis=1` to do so: +```python +example2.dropna(axis='columns') +``` +``` + 2 +0 7 +1 8 +2 9 +``` +Notice that this can drop a lot of data that you might want to keep, particularly in smaller datasets. What if you just want to drop rows or columns that contain several or even just all null values? You specify those setting in `dropna` with the `how` and `thresh` parameters. + +By default, `how='any'` (if you would like to check for yourself or see what other parameters the method has, run `example4.dropna?` in a code cell). You could alternatively specify `how='all'` so as to drop only rows or columns that contain all null values. Let's expand our example `DataFrame` to see this in action. + +```python +example2[3] = np.nan +example2 +``` +| |0 |1 |2 |3 | +|------|---|---|---|---| +|0 |1.0|NaN|7 |NaN| +|1 |2.0|5.0|8 |NaN| +|2 |NaN|6.0|9 |NaN| + +The `thresh` parameter gives you finer-grained control: you set the number of *non-null* values that a row or column needs to have in order to be kept: +```python +example2.dropna(axis='rows', thresh=3) +``` +``` + 0 1 2 3 +1 2.0 5.0 8 NaN +``` +Here, the first and last row have been dropped, because they contain only two non-null values. + +- **Filling null values**: Depending on your dataset, it can sometimes make more sense to fill null values with valid ones rather than drop them. You could use `isnull` to do this in place, but that can be laborious, particularly if you have a lot of values to fill. Because this is such a common task in data science, pandas provides `fillna`, which returns a copy of the `Series` or `DataFrame` with the missing values replaced with one of your choosing. Let's create another example `Series` to see how this works in practice. +```python +example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde')) +example3 +``` +``` +a 1.0 +b NaN +c 2.0 +d NaN +e 3.0 +dtype: float64 +``` +You can fill all of the null entries with a single value, such as `0`: +```python +example3.fillna(0) +``` +``` +a 1.0 +b 0.0 +c 2.0 +d 0.0 +e 3.0 +dtype: float64 +``` +You can **forward-fill** null values, which is to use the last valid value to fill a null: +```python +example3.fillna(method='ffill') +``` +``` +a 1.0 +b 1.0 +c 2.0 +d 2.0 +e 3.0 +dtype: float64 +``` +You can also **back-fill** to propagate the next valid value backward to fill a null: +```python +example3.fillna(method='bfill') +``` +``` +a 1.0 +b 2.0 +c 2.0 +d 3.0 +e 3.0 +dtype: float64 +``` +As you might guess, this works the same with `DataFrame`s, but you can also specify an `axis` along which to fill null values. taking the previously used `example2` again: +```python +example2.fillna(method='ffill', axis=1) +``` +``` + 0 1 2 3 +0 1.0 1.0 7.0 7.0 +1 2.0 5.0 8.0 8.0 +2 NaN 6.0 9.0 9.0 +``` +Notice that when a previous value is not available for forward-filling, the null value remains. + +> **Takeaway:** There are multiple ways to deal with missing values in your datasets. The specific strategy you use (removing them, replacing them, or even how you replace them) should be dictated by the particulars of that data. You will develop a better sense of how to deal with missing values the more you handle and interact with datasets. + +## Removing duplicate data + +> **Learning goal:** By the end of this subsection, you should be comfortable identifying and removing duplicate values from DataFrames. + +In addition to missing data, you will often encounter duplicated data in real-world datasets. Fortunately, `pandas` provides an easy means of detecting and removing duplicate entries. + +- **Identifying duplicates: `duplicated`**: You can easily spot duplicate values using the `duplicated` method in pandas, which returns a Boolean mask indicating whether an entry in a `DataFrame` is a duplicate of an ealier one. Let's create another example `DataFrame` to see this in action. +```python +example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'], + 'numbers': [1, 2, 1, 3, 3]}) +example4 +``` +| |letters|numbers| +|------|-------|-------| +|0 |A |1 | +|1 |B |2 | +|2 |A |1 | +|3 |B |3 | +|4 |B |3 | + +```python +example4.duplicated() +``` +``` +0 False +1 False +2 True +3 False +4 True +dtype: bool +``` +- **Dropping duplicates: `drop_duplicates`: `drop_duplicates` simply returns a copy of the data for which all of the `duplicated` values are `False`: +```python +example4.drop_duplicates() +``` +``` + letters numbers +0 A 1 +1 B 2 +3 B 3 +``` +Both `duplicated` and `drop_duplicates` default to consider all columnsm but you can specify that they examine only a subset of columns in your `DataFrame`: +```python +example6.drop_duplicates(['letters']) +``` +``` +letters numbers +0 A 1 +1 B 2 +``` +> **Takeaway:** Removing duplicate data is an essential part of almost every data-science project. Duplicate data can change the results of your analyses and give you inaccurate results! ## 🚀 Challenge -Give the exercises in the [notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb) a try! +All of the discussed materials are provided as a [Jupyter Notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb). Additionally, there are exercises present after each section, give them a try! ## [Post-Lecture Quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/15) From 083760cdf7416cafbd7dfb56f74c0aeadfb3e6d0 Mon Sep 17 00:00:00 2001 From: IndraP24 Date: Tue, 5 Oct 2021 11:13:08 +0530 Subject: [PATCH 13/74] Update the notebook with outputs to be used as reference for the README --- .../08-data-preparation/notebook.ipynb | 1220 +++++++++++++++-- 1 file changed, 1114 insertions(+), 106 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index e45a5cb5..93c37c35 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -3,28 +3,28 @@ { "cell_type": "markdown", "source": [ - "# Data Preparation\r\n", - "\r\n", - "[Original Notebook source from *Data Science: Introduction to Machine Learning for Data Science Python and Machine Learning Studio by Lee Stott*](https://github.com/leestott/intro-Datascience/blob/master/Course%20Materials/4-Cleaning_and_Manipulating-Reference.ipynb)\r\n", - "\r\n", - "## Exploring `DataFrame` information\r\n", - "\r\n", - "> **Learning goal:** By the end of this subsection, you should be comfortable finding general information about the data stored in pandas DataFrames.\r\n", - "\r\n", - "Once you have loaded your data into pandas, it will more likely than not be in a `DataFrame`. However, if the data set in your `DataFrame` has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, pandas provides some convenient tools to quickly look at overall information about a `DataFrame` in addition to the first few and last few rows.\r\n", - "\r\n", - "In order to explore this functionality, we will import the Python scikit-learn library and use an iconic dataset that every data scientist has seen hundreds of times: British biologist Ronald Fisher's *Iris* data set used in his 1936 paper \"The use of multiple measurements in taxonomic problems\":" + "# Data Preparation\n", + "\n", + "[Original Notebook source from *Data Science: Introduction to Machine Learning for Data Science Python and Machine Learning Studio by Lee Stott*](https://github.com/leestott/intro-Datascience/blob/master/Course%20Materials/4-Cleaning_and_Manipulating-Reference.ipynb)\n", + "\n", + "## Exploring `DataFrame` information\n", + "\n", + "> **Learning goal:** By the end of this subsection, you should be comfortable finding general information about the data stored in pandas DataFrames.\n", + "\n", + "Once you have loaded your data into pandas, it will more likely than not be in a `DataFrame`. \n", + "\n", + "In order to explore our `DataFramme`, we will import the Python `scikit-learn` library and use an iconic dataset that every data scientist has seen hundreds of times: British biologist Ronald Fisher's **Iris data set** used in his 1936 paper \"*The use of multiple measurements in taxonomic problems*\":" ], "metadata": {} }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "source": [ - "import pandas as pd\r\n", - "from sklearn.datasets import load_iris\r\n", - "\r\n", - "iris = load_iris()\r\n", + "import pandas as pd\n", + "from sklearn.datasets import load_iris\n", + "\n", + "iris = load_iris()\n", "iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])" ], "outputs": [], @@ -43,11 +43,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "source": [ "iris_df.info()" ], - "outputs": [], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "RangeIndex: 150 entries, 0 to 149\n", + "Data columns (total 4 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 sepal length (cm) 150 non-null float64\n", + " 1 sepal width (cm) 150 non-null float64\n", + " 2 petal length (cm) 150 non-null float64\n", + " 3 petal width (cm) 150 non-null float64\n", + "dtypes: float64(4)\n", + "memory usage: 4.8 KB\n" + ] + } + ], "metadata": { "trusted": false } @@ -69,11 +87,92 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "source": [ "iris_df.head()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", + "0 5.1 3.5 1.4 0.2\n", + "1 4.9 3.0 1.4 0.2\n", + "2 4.7 3.2 1.3 0.2\n", + "3 4.6 3.1 1.5 0.2\n", + "4 5.0 3.6 1.4 0.2" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], "metadata": { "trusted": false } @@ -89,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "source": [ "# Hint: Consult the documentation by using iris_df.head?" ], @@ -109,11 +208,92 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "source": [ "iris_df.tail()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", + "145 6.7 3.0 5.2 2.3\n", + "146 6.3 2.5 5.0 1.9\n", + "147 6.5 3.0 5.2 2.0\n", + "148 6.2 3.4 5.4 2.3\n", + "149 5.9 3.0 5.1 1.8" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], "metadata": { "trusted": false } @@ -154,14 +334,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "source": [ - "import numpy as np\r\n", - "\r\n", - "example1 = np.array([2, None, 6, 8])\r\n", + "import numpy as np\n", + "\n", + "example1 = np.array([2, None, 6, 8])\n", "example1" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([2, None, 6, 8], dtype=object)" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], "metadata": { "trusted": false } @@ -177,11 +368,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "source": [ "example1.sum()" ], - "outputs": [], + "outputs": [ + { + "output_type": "error", + "ename": "TypeError", + "evalue": "unsupported operand type(s) for +: 'int' and 'NoneType'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/numpy/core/_methods.py\u001b[0m in \u001b[0;36m_sum\u001b[0;34m(a, axis, dtype, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 45\u001b[0m def _sum(a, axis=None, dtype=None, out=None, keepdims=False,\n\u001b[1;32m 46\u001b[0m initial=_NoValue, where=True):\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mumr_sum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwhere\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m def _prod(a, axis=None, dtype=None, out=None, keepdims=False,\n", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'NoneType'" + ] + } + ], "metadata": { "trusted": false } @@ -204,22 +408,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "source": [ "np.nan + 1" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "nan" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], "metadata": { "trusted": false } }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "source": [ "np.nan * 0" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "nan" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], "metadata": { "trusted": false } @@ -233,12 +459,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "source": [ - "example2 = np.array([2, np.nan, 6, 8]) \r\n", + "example2 = np.array([2, np.nan, 6, 8]) \n", "example2.sum(), example2.min(), example2.max()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(nan, nan, nan)" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], "metadata": { "trusted": false } @@ -252,9 +489,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "source": [ - "# What happens if you add np.nan and None together?\r\n" + "# What happens if you add np.nan and None together?\n" ], "outputs": [], "metadata": { @@ -280,12 +517,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "source": [ - "int_series = pd.Series([1, 2, 3], dtype=int)\r\n", + "int_series = pd.Series([1, 2, 3], dtype=int)\n", "int_series" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 1\n", + "1 2\n", + "2 3\n", + "dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ], "metadata": { "trusted": false } @@ -299,11 +550,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "source": [ - "# Now set an element of int_series equal to None.\r\n", - "# How does that element show up in the Series?\r\n", - "# What is the dtype of the Series?\r\n" + "# Now set an element of int_series equal to None.\n", + "# How does that element show up in the Series?\n", + "# What is the dtype of the Series?\n" ], "outputs": [], "metadata": { @@ -335,7 +586,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "source": [ "example3 = pd.Series([0, np.nan, '', None])" ], @@ -347,11 +598,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "source": [ "example3.isnull()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 False\n", + "1 True\n", + "2 False\n", + "3 True\n", + "dtype: bool" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ], "metadata": { "trusted": false } @@ -374,10 +640,10 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "source": [ - "# Try running example3[example3.notnull()].\r\n", - "# Before you do so, what do you expect to see?\r\n" + "# Try running example3[example3.notnull()].\n", + "# Before you do so, what do you expect to see?\n" ], "outputs": [], "metadata": { @@ -403,12 +669,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "source": [ - "example3 = example3.dropna()\r\n", + "example3 = example3.dropna()\n", "example3" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 0\n", + "2 \n", + "dtype: object" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ], "metadata": { "trusted": false } @@ -424,14 +703,75 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "source": [ - "example4 = pd.DataFrame([[1, np.nan, 7], \r\n", - " [2, 5, 8], \r\n", - " [np.nan, 6, 9]])\r\n", + "example4 = pd.DataFrame([[1, np.nan, 7], \n", + " [2, 5, 8], \n", + " [np.nan, 6, 9]])\n", "example4" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
01.0NaN7
12.05.08
2NaN6.09
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 1.0 NaN 7\n", + "1 2.0 5.0 8\n", + "2 NaN 6.0 9" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ], "metadata": { "trusted": false } @@ -447,11 +787,58 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "source": [ "example4.dropna()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
012
12.05.08
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "1 2.0 5.0 8" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ], "metadata": { "trusted": false } @@ -465,11 +852,64 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "source": [ "example4.dropna(axis='columns')" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
2
07
18
29
\n", + "
" + ], + "text/plain": [ + " 2\n", + "0 7\n", + "1 8\n", + "2 9" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ], "metadata": { "trusted": false } @@ -485,12 +925,77 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "source": [ - "example4[3] = np.nan\r\n", + "example4[3] = np.nan\n", "example4" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.0NaN7NaN
12.05.08NaN
2NaN6.09NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 NaN 7 NaN\n", + "1 2.0 5.0 8 NaN\n", + "2 NaN 6.0 9 NaN" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ], "metadata": { "trusted": false } @@ -504,10 +1009,10 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "source": [ - "# How might you go about dropping just column 3?\r\n", - "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\r\n" + "# How might you go about dropping just column 3?\n", + "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\n" ], "outputs": [], "metadata": { @@ -524,11 +1029,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "source": [ "example4.dropna(axis='rows', thresh=3)" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123
12.05.08NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "1 2.0 5.0 8 NaN" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ], "metadata": { "trusted": false } @@ -551,12 +1105,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "source": [ - "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\r\n", + "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\n", "example5" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b NaN\n", + "c 2.0\n", + "d NaN\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], "metadata": { "trusted": false } @@ -570,11 +1140,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "source": [ "example5.fillna(0)" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b 0.0\n", + "c 2.0\n", + "d 0.0\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 25 + } + ], "metadata": { "trusted": false } @@ -588,9 +1174,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "source": [ - "# What happens if you try to fill null values with a string, like ''?\r\n" + "# What happens if you try to fill null values with a string, like ''?\n" ], "outputs": [], "metadata": { @@ -607,11 +1193,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "source": [ "example5.fillna(method='ffill')" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b 1.0\n", + "c 2.0\n", + "d 2.0\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 27 + } + ], "metadata": { "trusted": false } @@ -625,11 +1227,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "source": [ "example5.fillna(method='bfill')" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b 2.0\n", + "c 2.0\n", + "d 3.0\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 28 + } + ], "metadata": { "trusted": false } @@ -645,22 +1263,152 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "source": [ "example4" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.0NaN7NaN
12.05.08NaN
2NaN6.09NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 NaN 7 NaN\n", + "1 2.0 5.0 8 NaN\n", + "2 NaN 6.0 9 NaN" + ] + }, + "metadata": {}, + "execution_count": 29 + } + ], "metadata": { "trusted": false } }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "source": [ "example4.fillna(method='ffill', axis=1)" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.01.07.07.0
12.05.08.08.0
2NaN6.09.09.0
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 1.0 7.0 7.0\n", + "1 2.0 5.0 8.0 8.0\n", + "2 NaN 6.0 9.0 9.0" + ] + }, + "metadata": {}, + "execution_count": 30 + } + ], "metadata": { "trusted": false } @@ -681,11 +1429,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "source": [ - "# What output does example4.fillna(method='bfill', axis=1) produce?\r\n", - "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\r\n", - "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\r\n" + "# What output does example4.fillna(method='bfill', axis=1) produce?\n", + "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\n", + "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\n" ], "outputs": [], "metadata": { @@ -702,11 +1450,76 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "source": [ "example4.fillna(example4.mean())" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.05.57NaN
12.05.08NaN
21.56.09NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 5.5 7 NaN\n", + "1 2.0 5.0 8 NaN\n", + "2 1.5 6.0 9 NaN" + ] + }, + "metadata": {}, + "execution_count": 32 + } + ], "metadata": { "trusted": false } @@ -742,24 +1555,109 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "source": [ - "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\r\n", - " 'numbers': [1, 2, 1, 3, 3]})\r\n", + "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\n", + " 'numbers': [1, 2, 1, 3, 3]})\n", "example6" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
lettersnumbers
0A1
1B2
2A1
3B3
4B3
\n", + "
" + ], + "text/plain": [ + " letters numbers\n", + "0 A 1\n", + "1 B 2\n", + "2 A 1\n", + "3 B 3\n", + "4 B 3" + ] + }, + "metadata": {}, + "execution_count": 33 + } + ], "metadata": { "trusted": false } }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "source": [ "example6.duplicated()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 True\n", + "3 False\n", + "4 True\n", + "dtype: bool" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ], "metadata": { "trusted": false } @@ -774,11 +1672,68 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "source": [ "example6.drop_duplicates()" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
lettersnumbers
0A1
1B2
3B3
\n", + "
" + ], + "text/plain": [ + " letters numbers\n", + "0 A 1\n", + "1 B 2\n", + "3 B 3" + ] + }, + "metadata": {}, + "execution_count": 35 + } + ], "metadata": { "trusted": false } @@ -792,11 +1747,62 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "source": [ "example6.drop_duplicates(['letters'])" ], - "outputs": [], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
lettersnumbers
0A1
1B2
\n", + "
" + ], + "text/plain": [ + " letters numbers\n", + "0 A 1\n", + "1 B 2" + ] + }, + "metadata": {}, + "execution_count": 36 + } + ], "metadata": { "trusted": false } @@ -813,20 +1819,22 @@ "anaconda-cloud": {}, "kernelspec": { "name": "python3", - "display_name": "Python 3", - "language": "python" + "display_name": "Python 3.8.8 64-bit ('base': conda)" }, "language_info": { "mimetype": "text/x-python", "nbconvert_exporter": "python", "name": "python", "file_extension": ".py", - "version": "3.5.4", + "version": "3.8.8", "pygments_lexer": "ipython3", "codemirror_mode": { "version": 3, "name": "ipython" } + }, + "interpreter": { + "hash": "ac36fb7022a775f2750f61e1a6104d2d5a9eb3fb9bd004b80f1c771537b93945" } }, "nbformat": 4, From fb023030737854eb77cf29734c69cf8d80c6a470 Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Tue, 5 Oct 2021 11:53:41 +0530 Subject: [PATCH 14/74] Added Missing data , detecting null values codes and enhanced explanations --- .../08-data-preparation/notebook.ipynb | 267 +++++++++++++++--- 1 file changed, 220 insertions(+), 47 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index c6ca05dc..4d047f3e 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -79,7 +79,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "968f9fb0-6cb7-4985-c64b-b332c086bdbf" + "outputId": "4641a412-8abb-4e2f-d1ec-ff9b5004e361" }, "source": [ "iris_df.shape" @@ -126,7 +126,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "ffad1c9f-06b4-49d9-b409-5e4cc1b9f19b" + "outputId": "0f9c41ea-d480-4245-d7e2-56d514ac7724" }, "source": [ "iris_df.columns" @@ -174,7 +174,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "325edd04-3809-4d71-b6c3-94c65b162882" + "outputId": "94d5e48a-746c-4e58-b08f-c63b377a61b1" }, "source": [ "iris_df.info()" @@ -226,16 +226,16 @@ "cell_type": "code", "metadata": { "id": "tWV-CMstFIRA", - "outputId": "7c5cd72f-51d8-474c-966b-d2fbbdb7b7fc", "colab": { "base_uri": "https://localhost:8080/", "height": 297 - } + }, + "outputId": "b01322a1-4296-4ad0-f990-6e0dcba668f6" }, "source": [ "iris_df.describe()" ], - "execution_count": 8, + "execution_count": 5, "outputs": [ { "output_type": "execute_result", @@ -339,7 +339,7 @@ ] }, "metadata": {}, - "execution_count": 8 + "execution_count": 5 } ] }, @@ -369,16 +369,16 @@ "metadata": { "trusted": false, "id": "DZMJZh0OgRrw", - "outputId": "c12ac408-abdb-48a5-ca3f-93b02f963b2f", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "outputId": "14b1e3cd-54ac-47dc-f7b2-231d51d93741" }, "source": [ "iris_df.head()" ], - "execution_count": 5, + "execution_count": 6, "outputs": [ { "output_type": "execute_result", @@ -458,7 +458,7 @@ ] }, "metadata": {}, - "execution_count": 5 + "execution_count": 6 } ] }, @@ -492,7 +492,7 @@ "source": [ "# Hint: Consult the documentation by using iris_df.head?" ], - "execution_count": 6, + "execution_count": 7, "outputs": [] }, { @@ -510,16 +510,16 @@ "metadata": { "trusted": false, "id": "heanjfGWgRr2", - "outputId": "2930cf87-bfeb-4ddc-8be1-53d0e57a06b3", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "outputId": "d4e22b38-ba5d-4dd1-bbd2-b9cd9ad7b150" }, "source": [ "iris_df.tail()" ], - "execution_count": 7, + "execution_count": 8, "outputs": [ { "output_type": "execute_result", @@ -599,7 +599,7 @@ ] }, "metadata": {}, - "execution_count": 7 + "execution_count": 8 } ] }, @@ -619,14 +619,18 @@ { "cell_type": "markdown", "metadata": { - "id": "BvnoojWsgRr4" + "id": "TvurZyLSDxq_" }, "source": [ - "## Dealing with missing data\n", + "### Missing Data\n", + "Let us dive into missing data. Missing data occurs, when no value is sotred in some of the columns. \n", + "\n", + "Let us take an example: say someone is concious about his/her weight and doesn't fill the weight field in a survey. Then, the weight value for that certain person will be missing. \n", + "\n", + "Most of the time, in real world datasets, missing values occur.\n", "\n", - "> **Learning goal:** By the end of this subsection, you should know how to replace or remove null values from DataFrames.\n", + "**How Pandas Handles missing data**\n", "\n", - "Most of the time the datasets you want to use (of have to use) have missing values in them. How missing data is handled carries with it subtle tradeoffs that can affect your final analysis and real-world outcomes.\n", "\n", "Pandas handles missing values in two ways. The first you've seen before in previous sections: `NaN`, or Not a Number. This is a actually a special value that is part of the IEEE floating-point specification and it is only used to indicate missing floating-point values.\n", "\n", @@ -649,7 +653,11 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "QIoNdY4ngRr7" + "id": "QIoNdY4ngRr7", + "outputId": "e2ea93a4-b967-4319-904b-85479c36b169", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "import numpy as np\n", @@ -657,8 +665,19 @@ "example1 = np.array([2, None, 6, 8])\n", "example1" ], - "execution_count": null, - "outputs": [] + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([2, None, 6, 8], dtype=object)" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] }, { "cell_type": "markdown", @@ -675,13 +694,31 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "gWbx-KB9gRr8" + "id": "gWbx-KB9gRr8", + "outputId": "ff2a899b-5419-4a5c-b054-bc1e6ab906c5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 292 + } }, "source": [ "example1.sum()" ], - "execution_count": null, - "outputs": [] + "execution_count": 10, + "outputs": [ + { + "output_type": "error", + "ename": "TypeError", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/numpy/core/_methods.py\u001b[0m in \u001b[0;36m_sum\u001b[0;34m(a, axis, dtype, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 45\u001b[0m def _sum(a, axis=None, dtype=None, out=None, keepdims=False,\n\u001b[1;32m 46\u001b[0m initial=_NoValue, where=True):\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mumr_sum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwhere\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m def _prod(a, axis=None, dtype=None, out=None, keepdims=False,\n", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'NoneType'" + ] + } + ] }, { "cell_type": "markdown", @@ -707,25 +744,55 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "rcFYfMG9gRr9" + "id": "rcFYfMG9gRr9", + "outputId": "a452b675-2131-47a7-ff38-2b4d6e923d50", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "np.nan + 1" ], - "execution_count": null, - "outputs": [] + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "nan" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "BW3zQD2-gRr-" + "id": "BW3zQD2-gRr-", + "outputId": "6956b57f-8ae7-4880-cc1d-0cf54edfe6ee", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "np.nan * 0" ], - "execution_count": null, - "outputs": [] + "execution_count": 12, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "nan" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] }, { "cell_type": "markdown", @@ -740,14 +807,29 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "LCInVgSSgRr_" + "id": "LCInVgSSgRr_", + "outputId": "57ad3201-3958-48c6-924b-d46b61d4aeba", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "example2 = np.array([2, np.nan, 6, 8]) \n", "example2.sum(), example2.min(), example2.max()" ], - "execution_count": null, - "outputs": [] + "execution_count": 13, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(nan, nan, nan)" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] }, { "cell_type": "markdown", @@ -768,7 +850,7 @@ "source": [ "# What happens if you add np.nan and None together?\n" ], - "execution_count": null, + "execution_count": 14, "outputs": [] }, { @@ -795,14 +877,32 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "Nji-KGdNgRsA" + "id": "Nji-KGdNgRsA", + "outputId": "8dbdf129-cd8b-40b5-96ba-21a7f3fa0044", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "int_series = pd.Series([1, 2, 3], dtype=int)\n", "int_series" ], - "execution_count": null, - "outputs": [] + "execution_count": 15, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 1\n", + "1 2\n", + "2 3\n", + "dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] }, { "cell_type": "markdown", @@ -825,7 +925,7 @@ "# How does that element show up in the Series?\n", "# What is the dtype of the Series?\n" ], - "execution_count": null, + "execution_count": 16, "outputs": [] }, { @@ -851,6 +951,8 @@ }, "source": [ "### Detecting null values\n", + "\n", + "Now that we have understood the importance of missing values, we need to detect them in our dataset, before dealing with them.\n", "Both `isnull()` and `notnull()` are your primary methods for detecting null data. Both return Boolean masks over your data." ] }, @@ -864,20 +966,39 @@ "source": [ "example3 = pd.Series([0, np.nan, '', None])" ], - "execution_count": null, + "execution_count": 17, "outputs": [] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "1XdaJJ7PgRsC" + "id": "1XdaJJ7PgRsC", + "outputId": "1fd6c6af-19e0-4568-e837-985d571604f4", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "example3.isnull()" ], - "execution_count": null, - "outputs": [] + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 False\n", + "1 True\n", + "2 False\n", + "3 True\n", + "dtype: bool" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] }, { "cell_type": "markdown", @@ -887,7 +1008,35 @@ "source": [ "Look closely at the output. Does any of it surprise you? While `0` is an arithmetic null, it's nevertheless a perfectly good integer and pandas treats it as such. `''` is a little more subtle. While we used it in Section 1 to represent an empty string value, it is nevertheless a string object and not a representation of null as far as pandas is concerned.\n", "\n", - "Now, let's turn this around and use these methods in a manner more like you will use them in practice. You can use Boolean masks directly as a ``Series`` or ``DataFrame`` index, which can be useful when trying to work with isolated missing (or present) values." + "Now, let's turn this around and use these methods in a manner more like you will use them in practice. You can use Boolean masks directly as a ``Series`` or ``DataFrame`` index, which can be useful when trying to work with isolated missing (or present) values.\n", + "\n", + "If we want the total number of missing values, we can just do a sum over the mask produced by the `isnull()` method." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JCcQVoPkHDUv", + "outputId": "c0002689-f529-4e3e-c73b-41ac513c59d3", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "example3.isnull().sum()" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "execution_count": 19 + } ] }, { @@ -910,7 +1059,7 @@ "# Try running example3[example3.notnull()].\n", "# Before you do so, what do you expect to see?\n" ], - "execution_count": null, + "execution_count": 20, "outputs": [] }, { @@ -919,7 +1068,31 @@ "id": "D_jWN7mHgRsD" }, "source": [ - "**Key takeaway**: Both the `isnull()` and `notnull()` methods produce similar results when you use them in `DataFrame`s: they show the results and the index of those results, which will help you enormously as you wrestle with your data." + "**Key takeaway**: Both the `isnull()` and `notnull()` methods produce similar results when you use them in DataFrames: they show the results and the index of those results, which will help you enormously as you wrestle with your data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BvnoojWsgRr4" + }, + "source": [ + "### Dealing with missing data\n", + "\n", + "> **Learning goal:** By the end of this subsection, you should know how and when to replace or remove null values from DataFrames.\n", + "\n", + "Machine Learning models can't deal with missing data themselves. So, before passing the data into the model, we need to deal with these missing values.\n", + "\n", + "How missing data is handled carries with it subtle tradeoffs, can affect your final analysis and real-world outcomes.\n", + "\n", + "There are primarily two ways of dealing with missing data:\n", + "\n", + "\n", + "1. Drop the row containing the missing value\n", + "2. Replace the missing value with some other value\n", + "\n", + "We will discuss both these methods and their pros and cons in details.\n", + "\n" ] }, { From d58a5f67e2cfba8378e9b1611efa152bf813d563 Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:06:59 +0530 Subject: [PATCH 15/74] Enhanced dropna --- .../08-data-preparation/notebook.ipynb | 417 ++++++++++++++++-- 1 file changed, 377 insertions(+), 40 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index 4d047f3e..ac9bab82 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -654,10 +654,10 @@ "metadata": { "trusted": false, "id": "QIoNdY4ngRr7", - "outputId": "e2ea93a4-b967-4319-904b-85479c36b169", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "e2ea93a4-b967-4319-904b-85479c36b169" }, "source": [ "import numpy as np\n", @@ -695,11 +695,11 @@ "metadata": { "trusted": false, "id": "gWbx-KB9gRr8", - "outputId": "ff2a899b-5419-4a5c-b054-bc1e6ab906c5", "colab": { "base_uri": "https://localhost:8080/", "height": 292 - } + }, + "outputId": "ff2a899b-5419-4a5c-b054-bc1e6ab906c5" }, "source": [ "example1.sum()" @@ -745,10 +745,10 @@ "metadata": { "trusted": false, "id": "rcFYfMG9gRr9", - "outputId": "a452b675-2131-47a7-ff38-2b4d6e923d50", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "a452b675-2131-47a7-ff38-2b4d6e923d50" }, "source": [ "np.nan + 1" @@ -772,10 +772,10 @@ "metadata": { "trusted": false, "id": "BW3zQD2-gRr-", - "outputId": "6956b57f-8ae7-4880-cc1d-0cf54edfe6ee", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "6956b57f-8ae7-4880-cc1d-0cf54edfe6ee" }, "source": [ "np.nan * 0" @@ -808,10 +808,10 @@ "metadata": { "trusted": false, "id": "LCInVgSSgRr_", - "outputId": "57ad3201-3958-48c6-924b-d46b61d4aeba", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "57ad3201-3958-48c6-924b-d46b61d4aeba" }, "source": [ "example2 = np.array([2, np.nan, 6, 8]) \n", @@ -878,10 +878,10 @@ "metadata": { "trusted": false, "id": "Nji-KGdNgRsA", - "outputId": "8dbdf129-cd8b-40b5-96ba-21a7f3fa0044", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "8dbdf129-cd8b-40b5-96ba-21a7f3fa0044" }, "source": [ "int_series = pd.Series([1, 2, 3], dtype=int)\n", @@ -974,10 +974,10 @@ "metadata": { "trusted": false, "id": "1XdaJJ7PgRsC", - "outputId": "1fd6c6af-19e0-4568-e837-985d571604f4", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "1fd6c6af-19e0-4568-e837-985d571604f4" }, "source": [ "example3.isnull()" @@ -1016,11 +1016,11 @@ { "cell_type": "code", "metadata": { - "id": "JCcQVoPkHDUv", - "outputId": "c0002689-f529-4e3e-c73b-41ac513c59d3", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "id": "JCcQVoPkHDUv", + "outputId": "c0002689-f529-4e3e-c73b-41ac513c59d3" }, "source": [ "example3.isnull().sum()" @@ -1103,21 +1103,42 @@ "source": [ "### Dropping null values\n", "\n", - "Beyond identifying missing values, pandas provides a convenient means to remove null values from `Series` and `DataFrame`s. (Particularly on large data sets, it is often more advisable to simply remove missing [NA] values from your analysis than deal with them in other ways.) To see this in action, let's return to `example3`:" + "The amount of data we pass on to our model has a direct effect on its performance. Dropping null values means that we are reducing the number of datapoints, and hence reducing the size of the dataset. So, it is advisable to drop rows with null values when the dataset is quite large.\n", + "\n", + "Another instance maybe that a certain row or column has a lot of missing values. Then, they maybe dropped because they wouldn't add much value to our analysis as most of the data is missing for that row/column.\n", + "\n", + "Beyond identifying missing values, pandas provides a convenient means to remove null values from `Series` and `DataFrame`s. To see this in action, let's return to `example3`. The `DataFrame.dropna()` function helps in dropping the rows with null values. " ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "7uIvS097gRsD" + "id": "7uIvS097gRsD", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3d2d43e7-99ca-45ca-adc4-cef2c737e5bf" }, "source": [ "example3 = example3.dropna()\n", "example3" ], - "execution_count": null, - "outputs": [] + "execution_count": 21, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 0\n", + "2 \n", + "dtype: object" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ] }, { "cell_type": "markdown", @@ -1127,14 +1148,19 @@ "source": [ "Note that this should look like your output from `example3[example3.notnull()]`. The difference here is that, rather than just indexing on the masked values, `dropna` has removed those missing values from the `Series` `example3`.\n", "\n", - "Because `DataFrame`s have two dimensions, they afford more options for dropping data." + "Because DataFrames have two dimensions, they afford more options for dropping data." ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "an-l74sPgRsE" + "id": "an-l74sPgRsE", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + }, + "outputId": "961427aa-9bce-445b-d230-61d02bc16c92" }, "source": [ "example4 = pd.DataFrame([[1, np.nan, 7], \n", @@ -1142,8 +1168,69 @@ " [np.nan, 6, 9]])\n", "example4" ], - "execution_count": null, - "outputs": [] + "execution_count": 22, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
01.0NaN7
12.05.08
2NaN6.09
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 1.0 NaN 7\n", + "1 2.0 5.0 8\n", + "2 NaN 6.0 9" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ] }, { "cell_type": "markdown", @@ -1160,13 +1247,65 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "jAVU24RXgRsE" + "id": "jAVU24RXgRsE", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "aaeac6bc-ca6f-4eda-de0c-119e0c50ba83" }, "source": [ "example4.dropna()" ], - "execution_count": null, - "outputs": [] + "execution_count": 23, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
012
12.05.08
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "1 2.0 5.0 8" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ] }, { "cell_type": "markdown", @@ -1181,13 +1320,71 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "GrBhxu9GgRsE" + "id": "GrBhxu9GgRsE", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + }, + "outputId": "89fee273-d71b-4400-9484-b4bf93b69ee5" }, "source": [ "example4.dropna(axis='columns')" ], - "execution_count": null, - "outputs": [] + "execution_count": 24, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
2
07
18
29
\n", + "
" + ], + "text/plain": [ + " 2\n", + "0 7\n", + "1 8\n", + "2 9" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ] }, { "cell_type": "markdown", @@ -1197,21 +1394,104 @@ "source": [ "Notice that this can drop a lot of data that you might want to keep, particularly in smaller datasets. What if you just want to drop rows or columns that contain several or even just all null values? You specify those setting in `dropna` with the `how` and `thresh` parameters.\n", "\n", - "By default, `how='any'` (if you would like to check for yourself or see what other parameters the method has, run `example4.dropna?` in a code cell). You could alternatively specify `how='all'` so as to drop only rows or columns that contain all null values. Let's expand our example `DataFrame` to see this in action." + "By default, `how='any'` (if you would like to check for yourself or see what other parameters the method has, run `example4.dropna?` in a code cell). You could alternatively specify `how='all'` so as to drop only rows or columns that contain all null values. Let's expand our example `DataFrame` to see this in action in the next exercise." ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "Bcf_JWTsgRsF" + "id": "Bcf_JWTsgRsF", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + }, + "outputId": "07e8f4eb-18c8-4e5d-9317-6a9a3db38b73" }, "source": [ "example4[3] = np.nan\n", "example4" ], - "execution_count": null, - "outputs": [] + "execution_count": 25, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.0NaN7NaN
12.05.08NaN
2NaN6.09NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 NaN 7 NaN\n", + "1 2.0 5.0 8 NaN\n", + "2 NaN 6.0 9 NaN" + ] + }, + "metadata": {}, + "execution_count": 25 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pNZer7q9JPNC" + }, + "source": [ + "> Key takeaways: \n", + "1. Dropping null values is a good idea only if the dataset is large enough.\n", + "2. Full rows or columns can be dropped if they have most of their data missing.\n", + "3. The `DataFrame.dropna(axis=)` method helps in dropping null values. The `axis` argument signifies whether rows are to be dropped or columns. \n", + "4. The `how` argument can also be used. By default it is set to `any`. So, it drops only those rows/columns which contain any null values. It can be set to `all` to specify that we will drop only those rows/columns where all values are null." + ] }, { "cell_type": "markdown", @@ -1233,7 +1513,7 @@ "# How might you go about dropping just column 3?\n", "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\n" ], - "execution_count": null, + "execution_count": 26, "outputs": [] }, { @@ -1249,13 +1529,67 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "M9dCNMaagRsG" + "id": "M9dCNMaagRsG", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 80 + }, + "outputId": "b2c00415-95a6-4a5c-e3f9-781ff5cc8625" }, "source": [ "example4.dropna(axis='rows', thresh=3)" ], - "execution_count": null, - "outputs": [] + "execution_count": 27, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123
12.05.08NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "1 2.0 5.0 8 NaN" + ] + }, + "metadata": {}, + "execution_count": 27 + } + ] }, { "cell_type": "markdown", @@ -1274,7 +1608,10 @@ "source": [ "### Filling null values\n", "\n", - "Depending on your dataset, it can sometimes make more sense to fill null values with valid ones rather than drop them. You could use `isnull` to do this in place, but that can be laborious, particularly if you have a lot of values to fill. Because this is such a common task in data science, pandas provides `fillna`, which returns a copy of the `Series` or `DataFrame` with the missing values replaced with one of your choosing. Let's create another example `Series` to see how this works in practice." + "It sometimes makes sense to fill in missing values with ones which could be valid. There are a few techniques to fill null values. The first is using Domain Knowledge(knowledge of the subject on which the dataset is based) to somehow approximate the missing values. \n", + "\n", + "\n", + "You could use `isnull` to do this in place, but that can be laborious, particularly if you have a lot of values to fill. Because this is such a common task in data science, pandas provides `fillna`, which returns a copy of the `Series` or `DataFrame` with the missing values replaced with one of your choosing. Let's create another example `Series` to see how this works in practice." ] }, { From 87ef4f0875c32b8eaaabcf5a904e3cedb10825c1 Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:28:48 +0530 Subject: [PATCH 16/74] fillna for Categorical columns added --- .../08-data-preparation/notebook.ipynb | 294 ++++++++++++++++++ 1 file changed, 294 insertions(+) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index ac9bab82..3e8ae01e 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -1614,6 +1614,300 @@ "You could use `isnull` to do this in place, but that can be laborious, particularly if you have a lot of values to fill. Because this is such a common task in data science, pandas provides `fillna`, which returns a copy of the `Series` or `DataFrame` with the missing values replaced with one of your choosing. Let's create another example `Series` to see how this works in practice." ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "CE8S7louLezV" + }, + "source": [ + "First let us consider non-numeric data. In datasets, we have columns with categorical data. Eg. Gender, True or False etc.\n", + "\n", + "In most of these cases, we replace missing values with the `mode` of the column. Say, we have 100 data points and 90 have said True, 8 have said False and 2 have not filled. Then, we can will the 2 with True, considering the full column. \n", + "\n", + "Again, here we can use domain knowledge here. Let us consider an example of filling with the mode." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "MY5faq4yLdpQ", + "outputId": "c3838b07-0d15-471e-8dad-370de91d4bdc", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, + "source": [ + "fill_with_mode = pd.DataFrame([[1,2,\"True\"],\n", + " [3,4,None],\n", + " [5,6,\"False\"],\n", + " [7,8,\"True\"],\n", + " [9,10,\"True\"]])\n", + "\n", + "fill_with_mode" + ], + "execution_count": 28, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
012True
134None
256False
378True
4910True
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 1 2 True\n", + "1 3 4 None\n", + "2 5 6 False\n", + "3 7 8 True\n", + "4 9 10 True" + ] + }, + "metadata": {}, + "execution_count": 28 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MLAoMQOfNPlA" + }, + "source": [ + "Now, lets first find the mode before filling the `None` value with the mode." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WKy-9Y2tN5jv", + "outputId": "41f5064e-502d-4aec-dc2d-86f885068b4f", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "fill_with_mode[2].value_counts()" + ], + "execution_count": 29, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True 3\n", + "False 1\n", + "Name: 2, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 29 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6iNz_zG_OKrx" + }, + "source": [ + "So, we will replace None with True" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "TxPKteRvNPOs" + }, + "source": [ + "fill_with_mode[2].fillna('True',inplace=True)" + ], + "execution_count": 30, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "tvas7c9_OPWE", + "outputId": "7282c4f7-0e59-4398-b4f2-5919baf61164", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, + "source": [ + "fill_with_mode" + ], + "execution_count": 31, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
012True
134True
256False
378True
4910True
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 1 2 True\n", + "1 3 4 True\n", + "2 5 6 False\n", + "3 7 8 True\n", + "4 9 10 True" + ] + }, + "metadata": {}, + "execution_count": 31 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SktitLxxOR16" + }, + "source": [ + "As we can see, the null value has been replaced. Needless to say, we could have written anything in place or `'True'` and it would have got substituted." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "heYe1I0dOmQ_" + }, + "source": [ + "Now, coming to numeric data. Here, we have a two common ways of replacing missing values:\n", + "\n", + "1. Replace with Median of the row\n", + "2. Replace with Mean of the row \n", + "\n", + "We replace with Median, in case of skewed data with outliers. This is beacuse median is robust to outliers.\n", + "\n", + "When the data is normalized, we can use mean, as in that case, mean and median would be pretty close." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "09HM_2feOj5Y" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, { "cell_type": "code", "metadata": { From f5bef705d7480b57f61f4f8e63db49e9cd2e276c Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Tue, 5 Oct 2021 12:43:18 +0530 Subject: [PATCH 17/74] fillna with mean added --- .../08-data-preparation/notebook.ipynb | 261 +++++++++++++++++- 1 file changed, 247 insertions(+), 14 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index 3e8ae01e..b5a6bac0 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -1630,12 +1630,12 @@ { "cell_type": "code", "metadata": { - "id": "MY5faq4yLdpQ", - "outputId": "c3838b07-0d15-471e-8dad-370de91d4bdc", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "id": "MY5faq4yLdpQ", + "outputId": "c3838b07-0d15-471e-8dad-370de91d4bdc" }, "source": [ "fill_with_mode = pd.DataFrame([[1,2,\"True\"],\n", @@ -1736,11 +1736,11 @@ { "cell_type": "code", "metadata": { - "id": "WKy-9Y2tN5jv", - "outputId": "41f5064e-502d-4aec-dc2d-86f885068b4f", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "id": "WKy-9Y2tN5jv", + "outputId": "41f5064e-502d-4aec-dc2d-86f885068b4f" }, "source": [ "fill_with_mode[2].value_counts()" @@ -1784,12 +1784,12 @@ { "cell_type": "code", "metadata": { - "id": "tvas7c9_OPWE", - "outputId": "7282c4f7-0e59-4398-b4f2-5919baf61164", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "id": "tvas7c9_OPWE", + "outputId": "7282c4f7-0e59-4398-b4f2-5919baf61164" }, "source": [ "fill_with_mode" @@ -1894,19 +1894,252 @@ "\n", "We replace with Median, in case of skewed data with outliers. This is beacuse median is robust to outliers.\n", "\n", - "When the data is normalized, we can use mean, as in that case, mean and median would be pretty close." + "When the data is normalized, we can use mean, as in that case, mean and median would be pretty close.\n", + "\n", + "First, let us take a column which is normally distributed and let us fill the missing value with the mean of the column. " ] }, { "cell_type": "code", "metadata": { - "id": "09HM_2feOj5Y" + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "id": "09HM_2feOj5Y", + "outputId": "ade42fec-dc40-45d0-e22c-974849ea8664" }, "source": [ - "" + "fill_with_mean = pd.DataFrame([[-2,0,1],\n", + " [-1,2,3],\n", + " [np.nan,4,5],\n", + " [1,6,7],\n", + " [2,8,9]])\n", + "\n", + "fill_with_mean" ], - "execution_count": null, - "outputs": [] + "execution_count": 33, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
0-2.001
1-1.023
2NaN45
31.067
42.089
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 -2.0 0 1\n", + "1 -1.0 2 3\n", + "2 NaN 4 5\n", + "3 1.0 6 7\n", + "4 2.0 8 9" + ] + }, + "metadata": {}, + "execution_count": 33 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ka7-wNfzSxbx" + }, + "source": [ + "The mean of the column is" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "XYtYEf5BSxFL", + "outputId": "1e79aeea-6baf-4572-dcd1-23e5ec742036", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "np.mean(fill_with_mean[0])" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.0" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oBSRGxKRS39K" + }, + "source": [ + "Filling with mean" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "FzncQLmuS5jh", + "outputId": "75f33b25-e6b3-41bb-8049-1ed2e085efe2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, + "source": [ + "fill_with_mean[0].fillna(np.mean(fill_with_mean[0]),inplace=True)\n", + "fill_with_mean" + ], + "execution_count": 35, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
0-2.001
1-1.023
20.045
31.067
42.089
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 -2.0 0 1\n", + "1 -1.0 2 3\n", + "2 0.0 4 5\n", + "3 1.0 6 7\n", + "4 2.0 8 9" + ] + }, + "metadata": {}, + "execution_count": 35 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CwpVFCrPTC5z" + }, + "source": [ + "As we can see, the missing value has been replaced with its mean." + ] }, { "cell_type": "code", From 7f53507c79cdec5feecbc935147e7890da117eb1 Mon Sep 17 00:00:00 2001 From: Lateefah Bello <2019cinnamon@gmail.com> Date: Tue, 5 Oct 2021 12:02:03 +0100 Subject: [PATCH 18/74] fixed spelling error --- 1-Introduction/01-defining-data-science/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/01-defining-data-science/README.md b/1-Introduction/01-defining-data-science/README.md index ccfe6ef7..aa92a9c9 100644 --- a/1-Introduction/01-defining-data-science/README.md +++ b/1-Introduction/01-defining-data-science/README.md @@ -33,7 +33,7 @@ This definition highlights the following important aspects of data science: > Another important aspect of Data Science is that it studies how data can be gathered, stored and operated upon using computers. While statistics gives us mathematical foundations, data science applies mathematical concepts to actually draw insights from data. One of the ways (attributed to [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) to look at the data science is to consider it to be a separate paradigm of science: -* **Empyrical**, in which we rely mostly on observations and results of experiments +* **Empirical**, in which we rely mostly on observations and results of experiments * **Theoretical**, where new concepts emerge from existing scientific knowledge * **Computational**, where we discover new principles based on some computational experiments * **Data-Driven**, based on discovering relationships and patterns in the data From 1ac3f9c104ef7d6c945ea3277d3e13e730dfb035 Mon Sep 17 00:00:00 2001 From: INDRASHIS PAUL Date: Tue, 5 Oct 2021 19:18:47 +0530 Subject: [PATCH 19/74] Update previous lesson link --- 2-Working-With-Data/08-data-preparation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Working-With-Data/08-data-preparation/README.md b/2-Working-With-Data/08-data-preparation/README.md index 58c2e528..29534354 100644 --- a/2-Working-With-Data/08-data-preparation/README.md +++ b/2-Working-With-Data/08-data-preparation/README.md @@ -31,7 +31,7 @@ Depending on its source, raw data may contain some inconsistencies that will cau ## Exploring DataFrame information > **Learning goal:** By the end of this subsection, you should be comfortable finding general information about the data stored in pandas DataFrames. -Once you have loaded your data into pandas, it will more likely than not be in a DataFrame(refer to the previous [lesson](https://github.com/IndraP24/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe) for detailed overview). However, if the data set in your DataFrame has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, [pandas](https://pandas.pydata.org/) provides some convenient tools to quickly look at overall information about a DataFrame in addition to the first few and last few rows. +Once you have loaded your data into pandas, it will more likely than not be in a DataFrame(refer to the previous [lesson](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe) for detailed overview). However, if the data set in your DataFrame has 60,000 rows and 400 columns, how do you even begin to get a sense of what you're working with? Fortunately, [pandas](https://pandas.pydata.org/) provides some convenient tools to quickly look at overall information about a DataFrame in addition to the first few and last few rows. In order to explore this functionality, we will import the Python scikit-learn library and use an iconic dataset: the **Iris data set**. From 09e35a4e5bd0abd9106f1874219523b3035f65da Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Tue, 5 Oct 2021 22:43:31 +0530 Subject: [PATCH 20/74] Update README.hi.md --- 4-Data-Science-Lifecycle/translations/README.hi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/4-Data-Science-Lifecycle/translations/README.hi.md b/4-Data-Science-Lifecycle/translations/README.hi.md index 512fea7b..a5e2f6b7 100644 --- a/4-Data-Science-Lifecycle/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/translations/README.hi.md @@ -1,4 +1,4 @@ -# डेटा विज्ञान जीवनचक्र +# डेटा विज्ञान के जीवनचक्र ![संचार](../images/communication.jpg) >तस्वीर Headway द्वारा Unsplash पर @@ -10,4 +10,4 @@ 3. [संचार](../16-communication/README.md) ### क्रेडिट -ये पाठ ❤ के साथ [जालेन मैक्गी](https://twitter.com/JalenMCG) और [जैस्मीन ग्रीनवे](https://twitter.com/paladique) द्वारा लिखे गए थे। +ये पाठ [जालेन मैक्गी](https://twitter.com/JalenMCG) और [जैस्मीन ग्रीनवे](https://twitter.com/paladique) द्वारा ❤️ से लिखे गए हैं। From a60aa03c487119f1ba64ab97bfc560ec1d87fe93 Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Wed, 6 Oct 2021 00:06:56 +0530 Subject: [PATCH 21/74] Added Encoding --- .../08-data-preparation/notebook.ipynb | 1710 ++++++++++++++--- 1 file changed, 1492 insertions(+), 218 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index b5a6bac0..71b076e8 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -79,7 +79,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "4641a412-8abb-4e2f-d1ec-ff9b5004e361" + "outputId": "70e0d7dd-fb30-45c4-a5af-7dc85cd89342" }, "source": [ "iris_df.shape" @@ -126,7 +126,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "0f9c41ea-d480-4245-d7e2-56d514ac7724" + "outputId": "85e6ab39-174f-4dc7-fee6-a18f3ba14a7d" }, "source": [ "iris_df.columns" @@ -174,7 +174,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "94d5e48a-746c-4e58-b08f-c63b377a61b1" + "outputId": "2a2bb81a-257c-4410-f826-99402b75ce14" }, "source": [ "iris_df.info()" @@ -230,7 +230,7 @@ "base_uri": "https://localhost:8080/", "height": 297 }, - "outputId": "b01322a1-4296-4ad0-f990-6e0dcba668f6" + "outputId": "e5015299-163f-42c7-aaa1-9bc3a67788bf" }, "source": [ "iris_df.describe()" @@ -373,7 +373,7 @@ "base_uri": "https://localhost:8080/", "height": 204 }, - "outputId": "14b1e3cd-54ac-47dc-f7b2-231d51d93741" + "outputId": "5ff975df-45f0-4efd-f884-2580909c6e67" }, "source": [ "iris_df.head()" @@ -492,7 +492,7 @@ "source": [ "# Hint: Consult the documentation by using iris_df.head?" ], - "execution_count": 7, + "execution_count": null, "outputs": [] }, { @@ -514,12 +514,12 @@ "base_uri": "https://localhost:8080/", "height": 204 }, - "outputId": "d4e22b38-ba5d-4dd1-bbd2-b9cd9ad7b150" + "outputId": "1726a2e0-82d7-4491-8dbc-637f28a11d26" }, "source": [ "iris_df.tail()" ], - "execution_count": 8, + "execution_count": 7, "outputs": [ { "output_type": "execute_result", @@ -599,7 +599,7 @@ ] }, "metadata": {}, - "execution_count": 8 + "execution_count": 7 } ] }, @@ -657,7 +657,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "e2ea93a4-b967-4319-904b-85479c36b169" + "outputId": "20e2d43a-2053-4037-c736-8ec2c28b67e5" }, "source": [ "import numpy as np\n", @@ -665,7 +665,7 @@ "example1 = np.array([2, None, 6, 8])\n", "example1" ], - "execution_count": 9, + "execution_count": 8, "outputs": [ { "output_type": "execute_result", @@ -675,7 +675,7 @@ ] }, "metadata": {}, - "execution_count": 9 + "execution_count": 8 } ] }, @@ -699,12 +699,12 @@ "base_uri": "https://localhost:8080/", "height": 292 }, - "outputId": "ff2a899b-5419-4a5c-b054-bc1e6ab906c5" + "outputId": "ab3b1799-504f-480d-851b-85b19f62d8b7" }, "source": [ "example1.sum()" ], - "execution_count": 10, + "execution_count": 9, "outputs": [ { "output_type": "error", @@ -713,7 +713,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/numpy/core/_methods.py\u001b[0m in \u001b[0;36m_sum\u001b[0;34m(a, axis, dtype, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 45\u001b[0m def _sum(a, axis=None, dtype=None, out=None, keepdims=False,\n\u001b[1;32m 46\u001b[0m initial=_NoValue, where=True):\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mumr_sum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwhere\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m def _prod(a, axis=None, dtype=None, out=None, keepdims=False,\n", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'NoneType'" ] @@ -748,12 +748,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "a452b675-2131-47a7-ff38-2b4d6e923d50" + "outputId": "3744a812-6daf-472e-e933-388c722ab2b4" }, "source": [ "np.nan + 1" ], - "execution_count": 11, + "execution_count": 10, "outputs": [ { "output_type": "execute_result", @@ -763,7 +763,7 @@ ] }, "metadata": {}, - "execution_count": 11 + "execution_count": 10 } ] }, @@ -775,12 +775,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "6956b57f-8ae7-4880-cc1d-0cf54edfe6ee" + "outputId": "4a304a47-c5a0-4814-92b0-c4b5ab193358" }, "source": [ "np.nan * 0" ], - "execution_count": 12, + "execution_count": 11, "outputs": [ { "output_type": "execute_result", @@ -790,7 +790,7 @@ ] }, "metadata": {}, - "execution_count": 12 + "execution_count": 11 } ] }, @@ -811,13 +811,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "57ad3201-3958-48c6-924b-d46b61d4aeba" + "outputId": "a41b57bf-1c2a-4219-9ee5-0a1a1499e74d" }, "source": [ "example2 = np.array([2, np.nan, 6, 8]) \n", "example2.sum(), example2.min(), example2.max()" ], - "execution_count": 13, + "execution_count": 12, "outputs": [ { "output_type": "execute_result", @@ -827,7 +827,7 @@ ] }, "metadata": {}, - "execution_count": 13 + "execution_count": 12 } ] }, @@ -850,7 +850,7 @@ "source": [ "# What happens if you add np.nan and None together?\n" ], - "execution_count": 14, + "execution_count": 13, "outputs": [] }, { @@ -881,13 +881,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "8dbdf129-cd8b-40b5-96ba-21a7f3fa0044" + "outputId": "5f3389e0-4b54-4d6b-a305-a269df869235" }, "source": [ "int_series = pd.Series([1, 2, 3], dtype=int)\n", "int_series" ], - "execution_count": 15, + "execution_count": 14, "outputs": [ { "output_type": "execute_result", @@ -900,7 +900,7 @@ ] }, "metadata": {}, - "execution_count": 15 + "execution_count": 14 } ] }, @@ -925,7 +925,7 @@ "# How does that element show up in the Series?\n", "# What is the dtype of the Series?\n" ], - "execution_count": 16, + "execution_count": 15, "outputs": [] }, { @@ -966,7 +966,7 @@ "source": [ "example3 = pd.Series([0, np.nan, '', None])" ], - "execution_count": 17, + "execution_count": 16, "outputs": [] }, { @@ -977,12 +977,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "1fd6c6af-19e0-4568-e837-985d571604f4" + "outputId": "88a14e60-392a-42ad-d767-a4055580f523" }, "source": [ "example3.isnull()" ], - "execution_count": 18, + "execution_count": 17, "outputs": [ { "output_type": "execute_result", @@ -996,7 +996,7 @@ ] }, "metadata": {}, - "execution_count": 18 + "execution_count": 17 } ] }, @@ -1020,12 +1020,12 @@ "base_uri": "https://localhost:8080/" }, "id": "JCcQVoPkHDUv", - "outputId": "c0002689-f529-4e3e-c73b-41ac513c59d3" + "outputId": "042418f0-981b-4c5e-cdf8-c42912f7e4fe" }, "source": [ "example3.isnull().sum()" ], - "execution_count": 19, + "execution_count": 18, "outputs": [ { "output_type": "execute_result", @@ -1035,7 +1035,7 @@ ] }, "metadata": {}, - "execution_count": 19 + "execution_count": 18 } ] }, @@ -1059,7 +1059,7 @@ "# Try running example3[example3.notnull()].\n", "# Before you do so, what do you expect to see?\n" ], - "execution_count": 20, + "execution_count": 19, "outputs": [] }, { @@ -1118,13 +1118,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "3d2d43e7-99ca-45ca-adc4-cef2c737e5bf" + "outputId": "782b0526-a1bb-4757-ac1f-a16267d9eb4f" }, "source": [ "example3 = example3.dropna()\n", "example3" ], - "execution_count": 21, + "execution_count": 20, "outputs": [ { "output_type": "execute_result", @@ -1136,7 +1136,7 @@ ] }, "metadata": {}, - "execution_count": 21 + "execution_count": 20 } ] }, @@ -1160,7 +1160,7 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "961427aa-9bce-445b-d230-61d02bc16c92" + "outputId": "3d19e787-896d-4ba4-8662-811d2e191d3b" }, "source": [ "example4 = pd.DataFrame([[1, np.nan, 7], \n", @@ -1168,7 +1168,7 @@ " [np.nan, 6, 9]])\n", "example4" ], - "execution_count": 22, + "execution_count": 21, "outputs": [ { "output_type": "execute_result", @@ -1228,7 +1228,7 @@ ] }, "metadata": {}, - "execution_count": 22 + "execution_count": 21 } ] }, @@ -1252,12 +1252,12 @@ "base_uri": "https://localhost:8080/", "height": 80 }, - "outputId": "aaeac6bc-ca6f-4eda-de0c-119e0c50ba83" + "outputId": "6bdb7658-8a64-401f-d2b2-bd0f8bc17325" }, "source": [ "example4.dropna()" ], - "execution_count": 23, + "execution_count": 22, "outputs": [ { "output_type": "execute_result", @@ -1303,7 +1303,7 @@ ] }, "metadata": {}, - "execution_count": 23 + "execution_count": 22 } ] }, @@ -1325,12 +1325,12 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "89fee273-d71b-4400-9484-b4bf93b69ee5" + "outputId": "0071a8bb-9fe5-4ed5-a3af-d0209485515a" }, "source": [ "example4.dropna(axis='columns')" ], - "execution_count": 24, + "execution_count": 23, "outputs": [ { "output_type": "execute_result", @@ -1382,7 +1382,7 @@ ] }, "metadata": {}, - "execution_count": 24 + "execution_count": 23 } ] }, @@ -1406,13 +1406,13 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "07e8f4eb-18c8-4e5d-9317-6a9a3db38b73" + "outputId": "a26b5362-0d17-49c2-d902-10832f9bf9a0" }, "source": [ "example4[3] = np.nan\n", "example4" ], - "execution_count": 25, + "execution_count": 24, "outputs": [ { "output_type": "execute_result", @@ -1476,7 +1476,7 @@ ] }, "metadata": {}, - "execution_count": 25 + "execution_count": 24 } ] }, @@ -1513,7 +1513,7 @@ "# How might you go about dropping just column 3?\n", "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\n" ], - "execution_count": 26, + "execution_count": 25, "outputs": [] }, { @@ -1534,12 +1534,12 @@ "base_uri": "https://localhost:8080/", "height": 80 }, - "outputId": "b2c00415-95a6-4a5c-e3f9-781ff5cc8625" + "outputId": "ee2d3a60-a694-4a11-ef37-28d00a8d956c" }, "source": [ "example4.dropna(axis='rows', thresh=3)" ], - "execution_count": 27, + "execution_count": 26, "outputs": [ { "output_type": "execute_result", @@ -1587,7 +1587,7 @@ ] }, "metadata": {}, - "execution_count": 27 + "execution_count": 26 } ] }, @@ -1620,6 +1620,7 @@ "id": "CE8S7louLezV" }, "source": [ + "### Categorical Data(Non-numeric)\n", "First let us consider non-numeric data. In datasets, we have columns with categorical data. Eg. Gender, True or False etc.\n", "\n", "In most of these cases, we replace missing values with the `mode` of the column. Say, we have 100 data points and 90 have said True, 8 have said False and 2 have not filled. Then, we can will the 2 with True, considering the full column. \n", @@ -1635,7 +1636,7 @@ "height": 204 }, "id": "MY5faq4yLdpQ", - "outputId": "c3838b07-0d15-471e-8dad-370de91d4bdc" + "outputId": "49350e22-4ee9-43c1-9d6c-e5f837b24ae8" }, "source": [ "fill_with_mode = pd.DataFrame([[1,2,\"True\"],\n", @@ -1646,7 +1647,7 @@ "\n", "fill_with_mode" ], - "execution_count": 28, + "execution_count": 27, "outputs": [ { "output_type": "execute_result", @@ -1720,7 +1721,7 @@ ] }, "metadata": {}, - "execution_count": 28 + "execution_count": 27 } ] }, @@ -1740,12 +1741,12 @@ "base_uri": "https://localhost:8080/" }, "id": "WKy-9Y2tN5jv", - "outputId": "41f5064e-502d-4aec-dc2d-86f885068b4f" + "outputId": "d0c045f2-218c-45aa-951c-f3feed98510a" }, "source": [ "fill_with_mode[2].value_counts()" ], - "execution_count": 29, + "execution_count": 28, "outputs": [ { "output_type": "execute_result", @@ -1757,7 +1758,7 @@ ] }, "metadata": {}, - "execution_count": 29 + "execution_count": 28 } ] }, @@ -1778,7 +1779,7 @@ "source": [ "fill_with_mode[2].fillna('True',inplace=True)" ], - "execution_count": 30, + "execution_count": 29, "outputs": [] }, { @@ -1789,12 +1790,12 @@ "height": 204 }, "id": "tvas7c9_OPWE", - "outputId": "7282c4f7-0e59-4398-b4f2-5919baf61164" + "outputId": "c45890f5-8c76-4a3c-87f0-b831c2199750" }, "source": [ "fill_with_mode" ], - "execution_count": 31, + "execution_count": 30, "outputs": [ { "output_type": "execute_result", @@ -1868,7 +1869,7 @@ ] }, "metadata": {}, - "execution_count": 31 + "execution_count": 30 } ] }, @@ -1887,6 +1888,7 @@ "id": "heYe1I0dOmQ_" }, "source": [ + "### Numeric Data\n", "Now, coming to numeric data. Here, we have a two common ways of replacing missing values:\n", "\n", "1. Replace with Median of the row\n", @@ -1907,7 +1909,7 @@ "height": 204 }, "id": "09HM_2feOj5Y", - "outputId": "ade42fec-dc40-45d0-e22c-974849ea8664" + "outputId": "44330273-5709-4af9-99c7-7a3a8e28c7b0" }, "source": [ "fill_with_mean = pd.DataFrame([[-2,0,1],\n", @@ -1918,7 +1920,7 @@ "\n", "fill_with_mean" ], - "execution_count": 33, + "execution_count": 31, "outputs": [ { "output_type": "execute_result", @@ -1992,7 +1994,7 @@ ] }, "metadata": {}, - "execution_count": 33 + "execution_count": 31 } ] }, @@ -2009,15 +2011,15 @@ "cell_type": "code", "metadata": { "id": "XYtYEf5BSxFL", - "outputId": "1e79aeea-6baf-4572-dcd1-23e5ec742036", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "7240075c-c3a7-4ac3-e08d-be6d60573d38" }, "source": [ "np.mean(fill_with_mean[0])" ], - "execution_count": 34, + "execution_count": 32, "outputs": [ { "output_type": "execute_result", @@ -2027,7 +2029,7 @@ ] }, "metadata": {}, - "execution_count": 34 + "execution_count": 32 } ] }, @@ -2044,17 +2046,17 @@ "cell_type": "code", "metadata": { "id": "FzncQLmuS5jh", - "outputId": "75f33b25-e6b3-41bb-8049-1ed2e085efe2", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "outputId": "733bfa87-b099-4c11-db2e-1dea88b977ac" }, "source": [ "fill_with_mean[0].fillna(np.mean(fill_with_mean[0]),inplace=True)\n", "fill_with_mean" ], - "execution_count": 35, + "execution_count": 33, "outputs": [ { "output_type": "execute_result", @@ -2128,7 +2130,7 @@ ] }, "metadata": {}, - "execution_count": 35 + "execution_count": 33 } ] }, @@ -2141,201 +2143,1261 @@ "As we can see, the missing value has been replaced with its mean." ] }, - { - "cell_type": "code", - "metadata": { - "trusted": false, - "id": "0ybtWLDdgRsG" - }, - "source": [ - "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\n", - "example5" - ], - "execution_count": null, - "outputs": [] - }, { "cell_type": "markdown", "metadata": { - "id": "yrsigxRggRsH" + "id": "jIvF13a1i00Z" }, "source": [ - "You can fill all of the null entries with a single value, such as `0`:" + "Now let us try another dataframe, and this time we will replace the None values with the median of the column." ] }, { "cell_type": "code", "metadata": { - "trusted": false, - "id": "KXMIPsQdgRsH" + "id": "DA59Bqo3jBYZ", + "outputId": "4338adf5-081c-46ce-aca1-85bcaebf9838", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } }, "source": [ - "example5.fillna(0)" + "fill_with_median = pd.DataFrame([[-2,0,1],\n", + " [-1,2,3],\n", + " [0,np.nan,5],\n", + " [1,6,7],\n", + " [2,8,9]])\n", + "\n", + "fill_with_median" ], - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "FI9MmqFJgRsH" - }, - "source": [ - "### Exercise:" + "execution_count": 39, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
0-20.01
1-12.03
20NaN5
316.07
428.09
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 -2 0.0 1\n", + "1 -1 2.0 3\n", + "2 0 NaN 5\n", + "3 1 6.0 7\n", + "4 2 8.0 9" + ] + }, + "metadata": {}, + "execution_count": 39 + } ] }, - { - "cell_type": "code", - "metadata": { - "collapsed": true, - "trusted": false, - "id": "af-ezpXdgRsH" - }, - "source": [ - "# What happens if you try to fill null values with a string, like ''?\n" - ], - "execution_count": null, - "outputs": [] - }, { "cell_type": "markdown", "metadata": { - "id": "kq3hw1kLgRsI" + "id": "mM1GpXYmjHnc" }, "source": [ - "You can **forward-fill** null values, which is to use the last valid value to fill a null:" + "The median of the second column is" ] }, { "cell_type": "code", "metadata": { - "trusted": false, - "id": "vO3BuNrggRsI" + "id": "uiDy5v3xjHHX", + "outputId": "2028aa4b-8bec-4b76-ea2f-fcaa7b362e9d", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ - "example5.fillna(method='ffill')" + "fill_with_median[1].median()" ], - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "nDXeYuHzgRsI" - }, - "source": [ - "You can also **back-fill** to propagate the next valid value backward to fill a null:" + "execution_count": 40, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "4.0" + ] + }, + "metadata": {}, + "execution_count": 40 + } ] }, - { - "cell_type": "code", - "metadata": { - "trusted": false, - "id": "4M5onHcEgRsI" - }, - "source": [ - "example5.fillna(method='bfill')" - ], - "execution_count": null, - "outputs": [] - }, { "cell_type": "markdown", "metadata": { - "collapsed": true, - "id": "MbBzTom5gRsI" + "id": "z9PLF75Jj_1s" }, "source": [ - "As you might guess, this works the same with `DataFrame`s, but you can also specify an `axis` along which to fill null values:" + "Filling with median" ] }, { "cell_type": "code", "metadata": { - "trusted": false, - "id": "aRpIvo4ZgRsI" - }, - "source": [ - "example4" - ], - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "trusted": false, - "id": "VM1qtACAgRsI" + "id": "lFKbOxCMkBbg", + "outputId": "61bf2b0e-c68d-4b54-9724-f496c8c2ea94", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } }, "source": [ - "example4.fillna(method='ffill', axis=1)" + "fill_with_median[1].fillna(fill_with_median[1].median(),inplace=True)\n", + "fill_with_median" ], - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ZeMc-I1EgRsI" + "execution_count": 41, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
012
0-20.01
1-12.03
204.05
316.07
428.09
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 -2 0.0 1\n", + "1 -1 2.0 3\n", + "2 0 4.0 5\n", + "3 1 6.0 7\n", + "4 2 8.0 9" + ] + }, + "metadata": {}, + "execution_count": 41 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8JtQ53GSkKWC" + }, + "source": [ + "As we can see, the NaN value has been replaced by the median of the column" + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "0ybtWLDdgRsG", + "outputId": "ee2e547a-bf98-40a5-ddc4-b11357efb898", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\n", + "example5" + ], + "execution_count": 42, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b NaN\n", + "c 2.0\n", + "d NaN\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 42 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yrsigxRggRsH" + }, + "source": [ + "You can fill all of the null entries with a single value, such as `0`:" + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "KXMIPsQdgRsH", + "outputId": "f88a0095-9742-4f1e-fdf4-43fc14cbc4c0", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "example5.fillna(0)" + ], + "execution_count": 43, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b 0.0\n", + "c 2.0\n", + "d 0.0\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 43 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RRlI5f_hkfKe" + }, + "source": [ + "> Key takeaways:\n", + "1. Filling in missing values should be done when either there is less data or there is a strategy to fill in the missing data.\n", + "2. Domain knowledge can be used to fill in missing values by approximating them.\n", + "3. For Categorical data, mostly, missing values are substituted with the mode of the column. \n", + "4. For numeric data, missing values are usually filled in with the mean(for normalized datasets) or the median of the columns. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FI9MmqFJgRsH" + }, + "source": [ + "### Exercise:" + ] + }, + { + "cell_type": "code", + "metadata": { + "collapsed": true, + "trusted": false, + "id": "af-ezpXdgRsH" + }, + "source": [ + "# What happens if you try to fill null values with a string, like ''?\n" + ], + "execution_count": 44, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kq3hw1kLgRsI" + }, + "source": [ + "You can **forward-fill** null values, which is to use the last valid value to fill a null:" + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "vO3BuNrggRsI", + "outputId": "aff7d7de-20b9-42bf-fe06-932677314b37", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "example5.fillna(method='ffill')" + ], + "execution_count": 45, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b 1.0\n", + "c 2.0\n", + "d 2.0\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 45 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nDXeYuHzgRsI" + }, + "source": [ + "You can also **back-fill** to propagate the next valid value backward to fill a null:" + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "4M5onHcEgRsI", + "outputId": "c20c283d-76d7-4f75-c443-5c55fbdb3541", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "example5.fillna(method='bfill')" + ], + "execution_count": 46, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "a 1.0\n", + "b 2.0\n", + "c 2.0\n", + "d 3.0\n", + "e 3.0\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 46 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "id": "MbBzTom5gRsI" + }, + "source": [ + "As you might guess, this works the same with DataFrames, but you can also specify an `axis` along which to fill null values:" + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "aRpIvo4ZgRsI", + "outputId": "ea9c5e3d-a23d-4314-cff4-e5a0e46043d1", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + } + }, + "source": [ + "example4" + ], + "execution_count": 47, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.0NaN7NaN
12.05.08NaN
2NaN6.09NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 NaN 7 NaN\n", + "1 2.0 5.0 8 NaN\n", + "2 NaN 6.0 9 NaN" + ] + }, + "metadata": {}, + "execution_count": 47 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "VM1qtACAgRsI", + "outputId": "2cd3360a-ac87-41fb-d362-9d8c981f573f", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + } + }, + "source": [ + "example4.fillna(method='ffill', axis=1)" + ], + "execution_count": 48, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.01.07.07.0
12.05.08.08.0
2NaN6.09.09.0
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 1.0 7.0 7.0\n", + "1 2.0 5.0 8.0 8.0\n", + "2 NaN 6.0 9.0 9.0" + ] + }, + "metadata": {}, + "execution_count": 48 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZeMc-I1EgRsI" + }, + "source": [ + "Notice that when a previous value is not available for forward-filling, the null value remains." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eeAoOU0RgRsJ" + }, + "source": [ + "### Exercise:" + ] + }, + { + "cell_type": "code", + "metadata": { + "collapsed": true, + "trusted": false, + "id": "e8S-CjW8gRsJ" + }, + "source": [ + "# What output does example4.fillna(method='bfill', axis=1) produce?\n", + "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\n", + "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\n" + ], + "execution_count": 49, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YHgy0lIrgRsJ" + }, + "source": [ + "You can be creative about how you use `fillna`. For example, let's look at `example4` again, but this time let's fill the missing values with the average of all of the values in the `DataFrame`:" + ] + }, + { + "cell_type": "code", + "metadata": { + "trusted": false, + "id": "OtYVErEygRsJ", + "outputId": "ad5f4520-cf88-4e3e-fa16-54bda5efa417", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + } + }, + "source": [ + "example4.fillna(example4.mean())" + ], + "execution_count": 50, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
0123
01.05.57NaN
12.05.08NaN
21.56.09NaN
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 1.0 5.5 7 NaN\n", + "1 2.0 5.0 8 NaN\n", + "2 1.5 6.0 9 NaN" + ] + }, + "metadata": {}, + "execution_count": 50 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zpMvCkLSgRsJ" + }, + "source": [ + "Notice that column 3 is still valueless: the default direction is to fill values row-wise.\n", + "\n", + "> **Takeaway:** There are multiple ways to deal with missing values in your datasets. The specific strategy you use (removing them, replacing them, or even how you replace them) should be dictated by the particulars of that data. You will develop a better sense of how to deal with missing values the more you handle and interact with datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bauDnESIl9FH" + }, + "source": [ + "### Encoding Categorical Data\n", + "\n", + "Machine learning models only deal with numbers and any form of numeric data. It won't be able to tell the difference between a Yes and a No, but it would be able to distinguish between 0 and 1. So, after filling in the missing values, we need to do encode the categorical data to some numeric form for the model to understand.\n", + "\n", + "Encoding can be done in two ways. We will be discussing them next.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uDq9SxB7mu5i" + }, + "source": [ + "**LABEL ENCODING**\n", + "\n", + "\n", + "Label encoding is basically converting each category to a number. For example, say we have a dataset of airline passengers and there is a column containing their class among the following ['business class', 'economy class','first class']. If Label encoding is done on this, this would be transformed to [0,1,2]. Let us see an example via code. As we would be learning `scikit-learn` in the upcoming notebooks, we won't use it here." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1vGz7uZyoWHL", + "outputId": "5003c8cd-ff07-4399-a5b2-621b45184511", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 235 + } + }, + "source": [ + "label = pd.DataFrame([\n", + " [10,'business class'],\n", + " [20,'first class'],\n", + " [30, 'economy class'],\n", + " [40, 'economy class'],\n", + " [50, 'economy class'],\n", + " [60, 'business class']\n", + "],columns=['ID','class'])\n", + "label" + ], + "execution_count": 70, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
IDclass
010business class
120first class
230economy class
340economy class
450economy class
560business class
\n", + "
" + ], + "text/plain": [ + " ID class\n", + "0 10 business class\n", + "1 20 first class\n", + "2 30 economy class\n", + "3 40 economy class\n", + "4 50 economy class\n", + "5 60 business class" + ] + }, + "metadata": {}, + "execution_count": 70 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IDHnkwTYov-h" }, "source": [ - "Notice that when a previous value is not available for forward-filling, the null value remains." + "To perform label encoding on the 1st column, we have to first describe a mapping from each class to a number, before replacing" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZC5URJG3o1ES", + "outputId": "c75465b2-169e-417c-8769-680aaf1cd268", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 235 + } + }, + "source": [ + "class_labels = {'business class':0,'economy class':1,'first class':2}\n", + "label['class'] = label['class'].replace(class_labels)\n", + "label" + ], + "execution_count": 71, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
IDclass
0100
1202
2301
3401
4501
5600
\n", + "
" + ], + "text/plain": [ + " ID class\n", + "0 10 0\n", + "1 20 2\n", + "2 30 1\n", + "3 40 1\n", + "4 50 1\n", + "5 60 0" + ] + }, + "metadata": {}, + "execution_count": 71 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ftnF-TyapOPt" + }, + "source": [ + "As we can see, the output matches what we thought would happen. So, when do we use label encoding? Label encoding is used in either or both of the following cases :\n", + "1. When the number of categories is large\n", + "2. When the categories are in order. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eQPAPVwsqWT7" + }, + "source": [ + "**ONE HOT ENCODING**\n", + "\n", + "Another type of encoding is One Hot Encoding. In this type of encoding, each category of the column gets added as a separate column and each datapoint will get a 0 or a 1 based on whether it contains that category. So, if there are n different categories, n columns will be appended to the dataframe.\n", + "\n", + "For example, let us take the same aeroplane class example. The categories were: ['business class', 'economy class','first class'] . So, if we perform one hot encoding, the following three columns will be added to the dataset: ['class_business class','class_economy class','class_first class']." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZM0eVh0ArKUL", + "outputId": "cba4258f-a6c3-45e0-dd69-32b73b2cd735", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 235 + } + }, + "source": [ + "one_hot = pd.DataFrame([\n", + " [10,'business class'],\n", + " [20,'first class'],\n", + " [30, 'economy class'],\n", + " [40, 'economy class'],\n", + " [50, 'economy class'],\n", + " [60, 'business class']\n", + "],columns=['ID','class'])\n", + "one_hot" + ], + "execution_count": 67, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
IDclass
010business class
120first class
230economy class
340economy class
450economy class
560business class
\n", + "
" + ], + "text/plain": [ + " ID class\n", + "0 10 business class\n", + "1 20 first class\n", + "2 30 economy class\n", + "3 40 economy class\n", + "4 50 economy class\n", + "5 60 business class" + ] + }, + "metadata": {}, + "execution_count": 67 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aVnZ7paDrWmb" + }, + "source": [ + "Let us perform one hot encoding on the 1st column" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RUPxf7egrYKr" + }, + "source": [ + "one_hot_data = pd.get_dummies(one_hot,columns=['class'])" + ], + "execution_count": 68, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "TM37pHsFr4ge", + "outputId": "4f9cdbec-5ea6-4613-b14f-5b8b66b85894", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 235 + } + }, + "source": [ + "one_hot_data" + ], + "execution_count": 69, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \n", + "
IDclass_business classclass_economy classclass_first class
010100
120001
230010
340010
450010
560100
\n", + "
" + ], + "text/plain": [ + " ID class_business class class_economy class class_first class\n", + "0 10 1 0 0\n", + "1 20 0 0 1\n", + "2 30 0 1 0\n", + "3 40 0 1 0\n", + "4 50 0 1 0\n", + "5 60 1 0 0" + ] + }, + "metadata": {}, + "execution_count": 69 + } ] }, { "cell_type": "markdown", "metadata": { - "id": "eeAoOU0RgRsJ" + "id": "_zXRLOjXujdA" }, "source": [ - "### Exercise:" + "Each one hot encoded column contains 0 or 1, which specifies whether that category exists for that datapoint." ] }, - { - "cell_type": "code", - "metadata": { - "collapsed": true, - "trusted": false, - "id": "e8S-CjW8gRsJ" - }, - "source": [ - "# What output does example4.fillna(method='bfill', axis=1) produce?\n", - "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\n", - "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\n" - ], - "execution_count": null, - "outputs": [] - }, { "cell_type": "markdown", "metadata": { - "id": "YHgy0lIrgRsJ" + "id": "bDnC4NQOu0qr" }, "source": [ - "You can be creative about how you use `fillna`. For example, let's look at `example4` again, but this time let's fill the missing values with the average of all of the values in the `DataFrame`:" + "When do we use one hot encoding? One hot encoding is used in either or both of the following cases :\n", + "\n", + "1. When the number of categories and the size of the dataset is smaller.\n", + "2. When the categories follow no particular order." ] }, - { - "cell_type": "code", - "metadata": { - "trusted": false, - "id": "OtYVErEygRsJ" - }, - "source": [ - "example4.fillna(example4.mean())" - ], - "execution_count": null, - "outputs": [] - }, { "cell_type": "markdown", "metadata": { - "id": "zpMvCkLSgRsJ" + "id": "XnUmci_4uvyu" }, "source": [ - "Notice that column 3 is still valueless: the default direction is to fill values row-wise.\n", - "\n", - "> **Takeaway:** There are multiple ways to deal with missing values in your datasets. The specific strategy you use (removing them, replacing them, or even how you replace them) should be dictated by the particulars of that data. You will develop a better sense of how to deal with missing values the more you handle and interact with datasets." + "> Key Takeaways:\n", + "1. Encoding is done to convert non-numeric data to numeric data.\n", + "2. There are two types of encoding: Label encoding and One Hot encoding, both of which can be performed based on the demands of the dataset. " ] }, { @@ -2366,27 +3428,121 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "ZLu6FEnZgRsJ" + "id": "ZLu6FEnZgRsJ", + "outputId": "d62ede23-a8ba-412b-f666-6fc1a43af424", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } }, "source": [ "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\n", " 'numbers': [1, 2, 1, 3, 3]})\n", "example6" ], - "execution_count": null, - "outputs": [] + "execution_count": 72, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
lettersnumbers
0A1
1B2
2A1
3B3
4B3
\n", + "
" + ], + "text/plain": [ + " letters numbers\n", + "0 A 1\n", + "1 B 2\n", + "2 A 1\n", + "3 B 3\n", + "4 B 3" + ] + }, + "metadata": {}, + "execution_count": 72 + } + ] }, { "cell_type": "code", "metadata": { "trusted": false, - "id": "cIduB5oBgRsK" + "id": "cIduB5oBgRsK", + "outputId": "061ff212-4cba-4f49-ae20-a7bde21b54a3", + "colab": { + "base_uri": "https://localhost:8080/" + } }, "source": [ "example6.duplicated()" ], - "execution_count": null, - "outputs": [] + "execution_count": 73, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 True\n", + "3 False\n", + "4 True\n", + "dtype: bool" + ] + }, + "metadata": {}, + "execution_count": 73 + } + ] }, { "cell_type": "markdown", @@ -2402,13 +3558,75 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "w_YPpqIqgRsK" + "id": "w_YPpqIqgRsK", + "outputId": "5081cf87-9e65-493f-c867-c73f3833b775", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + } }, "source": [ "example6.drop_duplicates()" ], - "execution_count": null, - "outputs": [] + "execution_count": 74, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
lettersnumbers
0A1
1B2
3B3
\n", + "
" + ], + "text/plain": [ + " letters numbers\n", + "0 A 1\n", + "1 B 2\n", + "3 B 3" + ] + }, + "metadata": {}, + "execution_count": 74 + } + ] }, { "cell_type": "markdown", @@ -2423,13 +3641,69 @@ "cell_type": "code", "metadata": { "trusted": false, - "id": "BILjDs67gRsK" + "id": "BILjDs67gRsK", + "outputId": "1087142d-5a36-4667-8b70-45824de07d64", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 111 + } }, "source": [ "example6.drop_duplicates(['letters'])" ], - "execution_count": null, - "outputs": [] + "execution_count": 75, + "outputs": [ + { + "output_type": "execute_result", + "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", + "
lettersnumbers
0A1
1B2
\n", + "
" + ], + "text/plain": [ + " letters numbers\n", + "0 A 1\n", + "1 B 2" + ] + }, + "metadata": {}, + "execution_count": 75 + } + ] }, { "cell_type": "markdown", From e30b7208ab3c3259975015b5d53bdcbddb03577d Mon Sep 17 00:00:00 2001 From: Nirmalya Misra <39618712+nirmalya8@users.noreply.github.com> Date: Wed, 6 Oct 2021 01:26:55 +0530 Subject: [PATCH 22/74] Resolving conflicts --- .../08-data-preparation/notebook.ipynb | 302 +++++++++--------- 1 file changed, 151 insertions(+), 151 deletions(-) diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb index 71b076e8..ed5b0256 100644 --- a/2-Working-With-Data/08-data-preparation/notebook.ipynb +++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb @@ -79,7 +79,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "70e0d7dd-fb30-45c4-a5af-7dc85cd89342" + "outputId": "fb0577ac-3b4a-4623-cb41-20e1b264b3e9" }, "source": [ "iris_df.shape" @@ -126,7 +126,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "85e6ab39-174f-4dc7-fee6-a18f3ba14a7d" + "outputId": "74e7a43a-77cc-4c80-da56-7f50767c37a0" }, "source": [ "iris_df.columns" @@ -174,7 +174,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "2a2bb81a-257c-4410-f826-99402b75ce14" + "outputId": "d8fb0c40-4f18-4e19-da48-c8db77d1d3a5" }, "source": [ "iris_df.info()" @@ -230,7 +230,7 @@ "base_uri": "https://localhost:8080/", "height": 297 }, - "outputId": "e5015299-163f-42c7-aaa1-9bc3a67788bf" + "outputId": "4fc49941-bc13-4b0c-a412-cb39e7d3f289" }, "source": [ "iris_df.describe()" @@ -373,7 +373,7 @@ "base_uri": "https://localhost:8080/", "height": 204 }, - "outputId": "5ff975df-45f0-4efd-f884-2580909c6e67" + "outputId": "d9393ee5-c106-4797-f815-218f17160e00" }, "source": [ "iris_df.head()" @@ -492,7 +492,7 @@ "source": [ "# Hint: Consult the documentation by using iris_df.head?" ], - "execution_count": null, + "execution_count": 7, "outputs": [] }, { @@ -512,14 +512,14 @@ "id": "heanjfGWgRr2", "colab": { "base_uri": "https://localhost:8080/", - "height": 204 + "height": 0 }, - "outputId": "1726a2e0-82d7-4491-8dbc-637f28a11d26" + "outputId": "6ae09a21-fe09-4110-b0d7-1a1fbf34d7f3" }, "source": [ "iris_df.tail()" ], - "execution_count": 7, + "execution_count": 8, "outputs": [ { "output_type": "execute_result", @@ -599,7 +599,7 @@ ] }, "metadata": {}, - "execution_count": 7 + "execution_count": 8 } ] }, @@ -657,7 +657,7 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "20e2d43a-2053-4037-c736-8ec2c28b67e5" + "outputId": "92779f18-62f4-4a03-eca2-e9a101604336" }, "source": [ "import numpy as np\n", @@ -665,7 +665,7 @@ "example1 = np.array([2, None, 6, 8])\n", "example1" ], - "execution_count": 8, + "execution_count": 9, "outputs": [ { "output_type": "execute_result", @@ -675,7 +675,7 @@ ] }, "metadata": {}, - "execution_count": 8 + "execution_count": 9 } ] }, @@ -699,12 +699,12 @@ "base_uri": "https://localhost:8080/", "height": 292 }, - "outputId": "ab3b1799-504f-480d-851b-85b19f62d8b7" + "outputId": "ecba710a-22ec-41d5-a39c-11f67e645b50" }, "source": [ "example1.sum()" ], - "execution_count": 9, + "execution_count": 10, "outputs": [ { "output_type": "error", @@ -713,7 +713,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/numpy/core/_methods.py\u001b[0m in \u001b[0;36m_sum\u001b[0;34m(a, axis, dtype, out, keepdims, initial, where)\u001b[0m\n\u001b[1;32m 45\u001b[0m def _sum(a, axis=None, dtype=None, out=None, keepdims=False,\n\u001b[1;32m 46\u001b[0m initial=_NoValue, where=True):\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mumr_sum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeepdims\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwhere\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m def _prod(a, axis=None, dtype=None, out=None, keepdims=False,\n", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'NoneType'" ] @@ -748,12 +748,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "3744a812-6daf-472e-e933-388c722ab2b4" + "outputId": "699e81b7-5c11-4b46-df1d-06071768690f" }, "source": [ "np.nan + 1" ], - "execution_count": 10, + "execution_count": 11, "outputs": [ { "output_type": "execute_result", @@ -763,7 +763,7 @@ ] }, "metadata": {}, - "execution_count": 10 + "execution_count": 11 } ] }, @@ -775,12 +775,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "4a304a47-c5a0-4814-92b0-c4b5ab193358" + "outputId": "4525b6c4-495d-4f7b-a979-efce1dae9bd0" }, "source": [ "np.nan * 0" ], - "execution_count": 11, + "execution_count": 12, "outputs": [ { "output_type": "execute_result", @@ -790,7 +790,7 @@ ] }, "metadata": {}, - "execution_count": 11 + "execution_count": 12 } ] }, @@ -811,13 +811,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "a41b57bf-1c2a-4219-9ee5-0a1a1499e74d" + "outputId": "fa06495a-0930-4867-87c5-6023031ea8b5" }, "source": [ "example2 = np.array([2, np.nan, 6, 8]) \n", "example2.sum(), example2.min(), example2.max()" ], - "execution_count": 12, + "execution_count": 13, "outputs": [ { "output_type": "execute_result", @@ -827,7 +827,7 @@ ] }, "metadata": {}, - "execution_count": 12 + "execution_count": 13 } ] }, @@ -850,7 +850,7 @@ "source": [ "# What happens if you add np.nan and None together?\n" ], - "execution_count": 13, + "execution_count": 14, "outputs": [] }, { @@ -881,13 +881,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "5f3389e0-4b54-4d6b-a305-a269df869235" + "outputId": "36aa14d2-8efa-4bfd-c0ed-682991288822" }, "source": [ "int_series = pd.Series([1, 2, 3], dtype=int)\n", "int_series" ], - "execution_count": 14, + "execution_count": 15, "outputs": [ { "output_type": "execute_result", @@ -900,7 +900,7 @@ ] }, "metadata": {}, - "execution_count": 14 + "execution_count": 15 } ] }, @@ -925,7 +925,7 @@ "# How does that element show up in the Series?\n", "# What is the dtype of the Series?\n" ], - "execution_count": 15, + "execution_count": 16, "outputs": [] }, { @@ -966,7 +966,7 @@ "source": [ "example3 = pd.Series([0, np.nan, '', None])" ], - "execution_count": 16, + "execution_count": 17, "outputs": [] }, { @@ -977,12 +977,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "88a14e60-392a-42ad-d767-a4055580f523" + "outputId": "92fc363a-1874-471f-846d-f4f9ce1f51d0" }, "source": [ "example3.isnull()" ], - "execution_count": 17, + "execution_count": 18, "outputs": [ { "output_type": "execute_result", @@ -996,7 +996,7 @@ ] }, "metadata": {}, - "execution_count": 17 + "execution_count": 18 } ] }, @@ -1020,12 +1020,12 @@ "base_uri": "https://localhost:8080/" }, "id": "JCcQVoPkHDUv", - "outputId": "042418f0-981b-4c5e-cdf8-c42912f7e4fe" + "outputId": "001daa72-54f8-4bd5-842a-4df627a79d4d" }, "source": [ "example3.isnull().sum()" ], - "execution_count": 18, + "execution_count": 19, "outputs": [ { "output_type": "execute_result", @@ -1035,7 +1035,7 @@ ] }, "metadata": {}, - "execution_count": 18 + "execution_count": 19 } ] }, @@ -1059,7 +1059,7 @@ "# Try running example3[example3.notnull()].\n", "# Before you do so, what do you expect to see?\n" ], - "execution_count": 19, + "execution_count": 20, "outputs": [] }, { @@ -1118,13 +1118,13 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "782b0526-a1bb-4757-ac1f-a16267d9eb4f" + "outputId": "c13fc117-4ca1-4145-a0aa-42ac89e6e218" }, "source": [ "example3 = example3.dropna()\n", "example3" ], - "execution_count": 20, + "execution_count": 21, "outputs": [ { "output_type": "execute_result", @@ -1136,7 +1136,7 @@ ] }, "metadata": {}, - "execution_count": 20 + "execution_count": 21 } ] }, @@ -1160,7 +1160,7 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "3d19e787-896d-4ba4-8662-811d2e191d3b" + "outputId": "340876a0-63ad-40f6-bd54-6240cdae50ab" }, "source": [ "example4 = pd.DataFrame([[1, np.nan, 7], \n", @@ -1168,7 +1168,7 @@ " [np.nan, 6, 9]])\n", "example4" ], - "execution_count": 21, + "execution_count": 22, "outputs": [ { "output_type": "execute_result", @@ -1228,7 +1228,7 @@ ] }, "metadata": {}, - "execution_count": 21 + "execution_count": 22 } ] }, @@ -1252,12 +1252,12 @@ "base_uri": "https://localhost:8080/", "height": 80 }, - "outputId": "6bdb7658-8a64-401f-d2b2-bd0f8bc17325" + "outputId": "0b5e5aee-7187-4d3f-b583-a44136ae5f80" }, "source": [ "example4.dropna()" ], - "execution_count": 22, + "execution_count": 23, "outputs": [ { "output_type": "execute_result", @@ -1303,7 +1303,7 @@ ] }, "metadata": {}, - "execution_count": 22 + "execution_count": 23 } ] }, @@ -1325,12 +1325,12 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "0071a8bb-9fe5-4ed5-a3af-d0209485515a" + "outputId": "ff4001f3-2e61-4509-d60e-0093d1068437" }, "source": [ "example4.dropna(axis='columns')" ], - "execution_count": 23, + "execution_count": 24, "outputs": [ { "output_type": "execute_result", @@ -1382,7 +1382,7 @@ ] }, "metadata": {}, - "execution_count": 23 + "execution_count": 24 } ] }, @@ -1406,13 +1406,13 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "a26b5362-0d17-49c2-d902-10832f9bf9a0" + "outputId": "72e0b1b8-52fa-4923-98ce-b6fbed6e44b1" }, "source": [ "example4[3] = np.nan\n", "example4" ], - "execution_count": 24, + "execution_count": 25, "outputs": [ { "output_type": "execute_result", @@ -1476,7 +1476,7 @@ ] }, "metadata": {}, - "execution_count": 24 + "execution_count": 25 } ] }, @@ -1513,7 +1513,7 @@ "# How might you go about dropping just column 3?\n", "# Hint: remember that you will need to supply both the axis parameter and the how parameter.\n" ], - "execution_count": 25, + "execution_count": 26, "outputs": [] }, { @@ -1534,12 +1534,12 @@ "base_uri": "https://localhost:8080/", "height": 80 }, - "outputId": "ee2d3a60-a694-4a11-ef37-28d00a8d956c" + "outputId": "8093713a-54d2-4e54-c73f-4eea315cb6f2" }, "source": [ "example4.dropna(axis='rows', thresh=3)" ], - "execution_count": 26, + "execution_count": 27, "outputs": [ { "output_type": "execute_result", @@ -1587,7 +1587,7 @@ ] }, "metadata": {}, - "execution_count": 26 + "execution_count": 27 } ] }, @@ -1636,7 +1636,7 @@ "height": 204 }, "id": "MY5faq4yLdpQ", - "outputId": "49350e22-4ee9-43c1-9d6c-e5f837b24ae8" + "outputId": "19ab472e-1eed-4de8-f8a7-db2a3af3cb1a" }, "source": [ "fill_with_mode = pd.DataFrame([[1,2,\"True\"],\n", @@ -1647,7 +1647,7 @@ "\n", "fill_with_mode" ], - "execution_count": 27, + "execution_count": 28, "outputs": [ { "output_type": "execute_result", @@ -1721,7 +1721,7 @@ ] }, "metadata": {}, - "execution_count": 27 + "execution_count": 28 } ] }, @@ -1741,12 +1741,12 @@ "base_uri": "https://localhost:8080/" }, "id": "WKy-9Y2tN5jv", - "outputId": "d0c045f2-218c-45aa-951c-f3feed98510a" + "outputId": "8da9fa16-e08c-447e-dea1-d4b1db2feebf" }, "source": [ "fill_with_mode[2].value_counts()" ], - "execution_count": 28, + "execution_count": 29, "outputs": [ { "output_type": "execute_result", @@ -1758,7 +1758,7 @@ ] }, "metadata": {}, - "execution_count": 28 + "execution_count": 29 } ] }, @@ -1779,7 +1779,7 @@ "source": [ "fill_with_mode[2].fillna('True',inplace=True)" ], - "execution_count": 29, + "execution_count": 30, "outputs": [] }, { @@ -1790,12 +1790,12 @@ "height": 204 }, "id": "tvas7c9_OPWE", - "outputId": "c45890f5-8c76-4a3c-87f0-b831c2199750" + "outputId": "ec3c8e44-d644-475e-9e22-c65101965850" }, "source": [ "fill_with_mode" ], - "execution_count": 30, + "execution_count": 31, "outputs": [ { "output_type": "execute_result", @@ -1869,7 +1869,7 @@ ] }, "metadata": {}, - "execution_count": 30 + "execution_count": 31 } ] }, @@ -1909,7 +1909,7 @@ "height": 204 }, "id": "09HM_2feOj5Y", - "outputId": "44330273-5709-4af9-99c7-7a3a8e28c7b0" + "outputId": "7e309013-9acb-411c-9b06-4de795bbeeff" }, "source": [ "fill_with_mean = pd.DataFrame([[-2,0,1],\n", @@ -1920,7 +1920,7 @@ "\n", "fill_with_mean" ], - "execution_count": 31, + "execution_count": 32, "outputs": [ { "output_type": "execute_result", @@ -1994,7 +1994,7 @@ ] }, "metadata": {}, - "execution_count": 31 + "execution_count": 32 } ] }, @@ -2014,12 +2014,12 @@ "colab": { "base_uri": "https://localhost:8080/" }, - "outputId": "7240075c-c3a7-4ac3-e08d-be6d60573d38" + "outputId": "68a78d18-f0e5-4a9a-a959-2c3676a57c70" }, "source": [ "np.mean(fill_with_mean[0])" ], - "execution_count": 32, + "execution_count": 33, "outputs": [ { "output_type": "execute_result", @@ -2029,7 +2029,7 @@ ] }, "metadata": {}, - "execution_count": 32 + "execution_count": 33 } ] }, @@ -2050,13 +2050,13 @@ "base_uri": "https://localhost:8080/", "height": 204 }, - "outputId": "733bfa87-b099-4c11-db2e-1dea88b977ac" + "outputId": "00f74fff-01f4-4024-c261-796f50f01d2e" }, "source": [ "fill_with_mean[0].fillna(np.mean(fill_with_mean[0]),inplace=True)\n", "fill_with_mean" ], - "execution_count": 33, + "execution_count": 34, "outputs": [ { "output_type": "execute_result", @@ -2130,7 +2130,7 @@ ] }, "metadata": {}, - "execution_count": 33 + "execution_count": 34 } ] }, @@ -2156,11 +2156,11 @@ "cell_type": "code", "metadata": { "id": "DA59Bqo3jBYZ", - "outputId": "4338adf5-081c-46ce-aca1-85bcaebf9838", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "outputId": "85dae6ec-7394-4c36-fda0-e04769ec4a32" }, "source": [ "fill_with_median = pd.DataFrame([[-2,0,1],\n", @@ -2171,7 +2171,7 @@ "\n", "fill_with_median" ], - "execution_count": 39, + "execution_count": 35, "outputs": [ { "output_type": "execute_result", @@ -2245,7 +2245,7 @@ ] }, "metadata": {}, - "execution_count": 39 + "execution_count": 35 } ] }, @@ -2262,15 +2262,15 @@ "cell_type": "code", "metadata": { "id": "uiDy5v3xjHHX", - "outputId": "2028aa4b-8bec-4b76-ea2f-fcaa7b362e9d", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "564b6b74-2004-4486-90d4-b39330a64b88" }, "source": [ "fill_with_median[1].median()" ], - "execution_count": 40, + "execution_count": 36, "outputs": [ { "output_type": "execute_result", @@ -2280,7 +2280,7 @@ ] }, "metadata": {}, - "execution_count": 40 + "execution_count": 36 } ] }, @@ -2297,17 +2297,17 @@ "cell_type": "code", "metadata": { "id": "lFKbOxCMkBbg", - "outputId": "61bf2b0e-c68d-4b54-9724-f496c8c2ea94", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "outputId": "a8bd18fb-2765-47d4-e5fe-e965f57ed1f4" }, "source": [ "fill_with_median[1].fillna(fill_with_median[1].median(),inplace=True)\n", "fill_with_median" ], - "execution_count": 41, + "execution_count": 37, "outputs": [ { "output_type": "execute_result", @@ -2381,7 +2381,7 @@ ] }, "metadata": {}, - "execution_count": 41 + "execution_count": 37 } ] }, @@ -2399,16 +2399,16 @@ "metadata": { "trusted": false, "id": "0ybtWLDdgRsG", - "outputId": "ee2e547a-bf98-40a5-ddc4-b11357efb898", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "b8c238ef-6024-4ee2-be2b-aa1f0fcac61d" }, "source": [ "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\n", "example5" ], - "execution_count": 42, + "execution_count": 38, "outputs": [ { "output_type": "execute_result", @@ -2423,7 +2423,7 @@ ] }, "metadata": {}, - "execution_count": 42 + "execution_count": 38 } ] }, @@ -2441,15 +2441,15 @@ "metadata": { "trusted": false, "id": "KXMIPsQdgRsH", - "outputId": "f88a0095-9742-4f1e-fdf4-43fc14cbc4c0", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "aeedfa0a-a421-4c2f-cb0d-183ce8f0c91d" }, "source": [ "example5.fillna(0)" ], - "execution_count": 43, + "execution_count": 39, "outputs": [ { "output_type": "execute_result", @@ -2464,7 +2464,7 @@ ] }, "metadata": {}, - "execution_count": 43 + "execution_count": 39 } ] }, @@ -2500,7 +2500,7 @@ "source": [ "# What happens if you try to fill null values with a string, like ''?\n" ], - "execution_count": 44, + "execution_count": 40, "outputs": [] }, { @@ -2517,15 +2517,15 @@ "metadata": { "trusted": false, "id": "vO3BuNrggRsI", - "outputId": "aff7d7de-20b9-42bf-fe06-932677314b37", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "e2bc591b-0b48-4e88-ee65-754f2737c196" }, "source": [ "example5.fillna(method='ffill')" ], - "execution_count": 45, + "execution_count": 41, "outputs": [ { "output_type": "execute_result", @@ -2540,7 +2540,7 @@ ] }, "metadata": {}, - "execution_count": 45 + "execution_count": 41 } ] }, @@ -2558,15 +2558,15 @@ "metadata": { "trusted": false, "id": "4M5onHcEgRsI", - "outputId": "c20c283d-76d7-4f75-c443-5c55fbdb3541", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "8f32b185-40dd-4a9f-bd85-54d6b6a414fe" }, "source": [ "example5.fillna(method='bfill')" ], - "execution_count": 46, + "execution_count": 42, "outputs": [ { "output_type": "execute_result", @@ -2581,7 +2581,7 @@ ] }, "metadata": {}, - "execution_count": 46 + "execution_count": 42 } ] }, @@ -2600,16 +2600,16 @@ "metadata": { "trusted": false, "id": "aRpIvo4ZgRsI", - "outputId": "ea9c5e3d-a23d-4314-cff4-e5a0e46043d1", "colab": { "base_uri": "https://localhost:8080/", "height": 142 - } + }, + "outputId": "905a980a-a808-4eca-d0ba-224bd7d85955" }, "source": [ "example4" ], - "execution_count": 47, + "execution_count": 43, "outputs": [ { "output_type": "execute_result", @@ -2673,7 +2673,7 @@ ] }, "metadata": {}, - "execution_count": 47 + "execution_count": 43 } ] }, @@ -2682,16 +2682,16 @@ "metadata": { "trusted": false, "id": "VM1qtACAgRsI", - "outputId": "2cd3360a-ac87-41fb-d362-9d8c981f573f", "colab": { "base_uri": "https://localhost:8080/", "height": 142 - } + }, + "outputId": "71f2ad28-9b4e-4ff4-f5c3-e731eb489ade" }, "source": [ "example4.fillna(method='ffill', axis=1)" ], - "execution_count": 48, + "execution_count": 44, "outputs": [ { "output_type": "execute_result", @@ -2755,7 +2755,7 @@ ] }, "metadata": {}, - "execution_count": 48 + "execution_count": 44 } ] }, @@ -2789,7 +2789,7 @@ "# What about example4.fillna(method='ffill') or example4.fillna(method='bfill')?\n", "# Can you think of a longer code snippet to write that can fill all of the null values in example4?\n" ], - "execution_count": 49, + "execution_count": 45, "outputs": [] }, { @@ -2806,16 +2806,16 @@ "metadata": { "trusted": false, "id": "OtYVErEygRsJ", - "outputId": "ad5f4520-cf88-4e3e-fa16-54bda5efa417", "colab": { "base_uri": "https://localhost:8080/", "height": 142 - } + }, + "outputId": "708b1e67-45ca-44bf-a5ee-8b2de09ece73" }, "source": [ "example4.fillna(example4.mean())" ], - "execution_count": 50, + "execution_count": 46, "outputs": [ { "output_type": "execute_result", @@ -2879,7 +2879,7 @@ ] }, "metadata": {}, - "execution_count": 50 + "execution_count": 46 } ] }, @@ -2923,11 +2923,11 @@ "cell_type": "code", "metadata": { "id": "1vGz7uZyoWHL", - "outputId": "5003c8cd-ff07-4399-a5b2-621b45184511", "colab": { "base_uri": "https://localhost:8080/", "height": 235 - } + }, + "outputId": "9e252855-d193-4103-a54d-028ea7787b34" }, "source": [ "label = pd.DataFrame([\n", @@ -2940,7 +2940,7 @@ "],columns=['ID','class'])\n", "label" ], - "execution_count": 70, + "execution_count": 47, "outputs": [ { "output_type": "execute_result", @@ -3014,7 +3014,7 @@ ] }, "metadata": {}, - "execution_count": 70 + "execution_count": 47 } ] }, @@ -3031,18 +3031,18 @@ "cell_type": "code", "metadata": { "id": "ZC5URJG3o1ES", - "outputId": "c75465b2-169e-417c-8769-680aaf1cd268", "colab": { "base_uri": "https://localhost:8080/", "height": 235 - } + }, + "outputId": "aab0f1e7-e0f3-4c14-8459-9f9168c85437" }, "source": [ "class_labels = {'business class':0,'economy class':1,'first class':2}\n", "label['class'] = label['class'].replace(class_labels)\n", "label" ], - "execution_count": 71, + "execution_count": 48, "outputs": [ { "output_type": "execute_result", @@ -3116,7 +3116,7 @@ ] }, "metadata": {}, - "execution_count": 71 + "execution_count": 48 } ] }, @@ -3148,11 +3148,11 @@ "cell_type": "code", "metadata": { "id": "ZM0eVh0ArKUL", - "outputId": "cba4258f-a6c3-45e0-dd69-32b73b2cd735", "colab": { "base_uri": "https://localhost:8080/", "height": 235 - } + }, + "outputId": "83238a76-b3a5-418d-c0b6-605b02b6891b" }, "source": [ "one_hot = pd.DataFrame([\n", @@ -3165,7 +3165,7 @@ "],columns=['ID','class'])\n", "one_hot" ], - "execution_count": 67, + "execution_count": 49, "outputs": [ { "output_type": "execute_result", @@ -3239,7 +3239,7 @@ ] }, "metadata": {}, - "execution_count": 67 + "execution_count": 49 } ] }, @@ -3260,23 +3260,23 @@ "source": [ "one_hot_data = pd.get_dummies(one_hot,columns=['class'])" ], - "execution_count": 68, + "execution_count": 50, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "TM37pHsFr4ge", - "outputId": "4f9cdbec-5ea6-4613-b14f-5b8b66b85894", "colab": { "base_uri": "https://localhost:8080/", "height": 235 - } + }, + "outputId": "7be15f53-79b2-447a-979c-822658339a9e" }, "source": [ "one_hot_data" ], - "execution_count": 69, + "execution_count": 51, "outputs": [ { "output_type": "execute_result", @@ -3364,7 +3364,7 @@ ] }, "metadata": {}, - "execution_count": 69 + "execution_count": 51 } ] }, @@ -3429,18 +3429,18 @@ "metadata": { "trusted": false, "id": "ZLu6FEnZgRsJ", - "outputId": "d62ede23-a8ba-412b-f666-6fc1a43af424", "colab": { "base_uri": "https://localhost:8080/", "height": 204 - } + }, + "outputId": "376512d1-d842-4db1-aea3-71052aeeecaf" }, "source": [ "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\n", " 'numbers': [1, 2, 1, 3, 3]})\n", "example6" ], - "execution_count": 72, + "execution_count": 52, "outputs": [ { "output_type": "execute_result", @@ -3508,7 +3508,7 @@ ] }, "metadata": {}, - "execution_count": 72 + "execution_count": 52 } ] }, @@ -3517,15 +3517,15 @@ "metadata": { "trusted": false, "id": "cIduB5oBgRsK", - "outputId": "061ff212-4cba-4f49-ae20-a7bde21b54a3", "colab": { "base_uri": "https://localhost:8080/" - } + }, + "outputId": "3da27b3d-4d69-4e1d-bb52-0af21bae87f2" }, "source": [ "example6.duplicated()" ], - "execution_count": 73, + "execution_count": 53, "outputs": [ { "output_type": "execute_result", @@ -3540,7 +3540,7 @@ ] }, "metadata": {}, - "execution_count": 73 + "execution_count": 53 } ] }, @@ -3559,16 +3559,16 @@ "metadata": { "trusted": false, "id": "w_YPpqIqgRsK", - "outputId": "5081cf87-9e65-493f-c867-c73f3833b775", "colab": { "base_uri": "https://localhost:8080/", "height": 142 - } + }, + "outputId": "ac66bd2f-8671-4744-87f5-8b8d96553dea" }, "source": [ "example6.drop_duplicates()" ], - "execution_count": 74, + "execution_count": 54, "outputs": [ { "output_type": "execute_result", @@ -3624,7 +3624,7 @@ ] }, "metadata": {}, - "execution_count": 74 + "execution_count": 54 } ] }, @@ -3642,16 +3642,16 @@ "metadata": { "trusted": false, "id": "BILjDs67gRsK", - "outputId": "1087142d-5a36-4667-8b70-45824de07d64", "colab": { "base_uri": "https://localhost:8080/", "height": 111 - } + }, + "outputId": "ef6dcc08-db8b-4352-c44e-5aa9e2bec0d3" }, "source": [ "example6.drop_duplicates(['letters'])" ], - "execution_count": 75, + "execution_count": 55, "outputs": [ { "output_type": "execute_result", @@ -3701,7 +3701,7 @@ ] }, "metadata": {}, - "execution_count": 75 + "execution_count": 55 } ] }, From 4067f2fd5f9a05dbfe6d45808dc43a05cd6b642f Mon Sep 17 00:00:00 2001 From: alirezaAsadi2018 <44492608+alirezaAsadi2018@users.noreply.github.com> Date: Wed, 6 Oct 2021 15:53:17 +0330 Subject: [PATCH 23/74] Create README.fa.md Add persian translation for base Readme file --- translations/README.fa.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 translations/README.fa.md diff --git a/translations/README.fa.md b/translations/README.fa.md new file mode 100644 index 00000000..8d1c8b69 --- /dev/null +++ b/translations/README.fa.md @@ -0,0 +1 @@ + From 6bb120c116b93e3740e23d398c8bfbe47892b605 Mon Sep 17 00:00:00 2001 From: alirezaAsadi2018 <44492608+alirezaAsadi2018@users.noreply.github.com> Date: Wed, 6 Oct 2021 16:44:24 +0330 Subject: [PATCH 24/74] Make README.fa.md rtl and translate header --- translations/README.fa.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/translations/README.fa.md b/translations/README.fa.md index 8d1c8b69..d6ad626a 100644 --- a/translations/README.fa.md +++ b/translations/README.fa.md @@ -1 +1,16 @@ +
+# علم داده برای مبتدیان - برنامه درسی + + +[![GitHub license](https://img.shields.io/github/license/microsoft/Data-Science-For-Beginners.svg)](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Data-Science-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/Data-Science-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/Data-Science-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/) + +
From 13262cc93bdde3b9f14f3873bd172e0661c42e3d Mon Sep 17 00:00:00 2001 From: alirezaAsadi2018 <44492608+alirezaAsadi2018@users.noreply.github.com> Date: Wed, 6 Oct 2021 18:39:05 +0330 Subject: [PATCH 25/74] Translate "Getting Started" and "Introduction" --- translations/README.fa.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/translations/README.fa.md b/translations/README.fa.md index d6ad626a..b582b8f4 100644 --- a/translations/README.fa.md +++ b/translations/README.fa.md @@ -13,4 +13,25 @@ [![GitHub forks](https://img.shields.io/github/forks/microsoft/Data-Science-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/) [![GitHub stars](https://img.shields.io/github/stars/microsoft/Data-Science-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/) - +طرفداران Azure Cloud در مایکروسافت مفتخر هستند که یک برنامه درسی 10 هفته ای و 20 درسی درباره علم داده ارائه دهند. هر درس شامل کوییزهای پیش از درس و پس از درس، دستورالعمل های کتبی برای تکمیل درس، راه حل و تکلیف است. آموزش پروژه محور ما به شما این امکان را می دهد در حین ساختن یاد بگیرید، راهی ثابت شده جهت "ماندگاری" مهارت های جدید. + +**تشکر از صمیم قلب از نویسندگانمان:** [Jasmine Greenaway](https://www.twitter.com/paladique), [Dmitry Soshnikov](http://soshnikov.com), [Nitya Narasimhan](https://twitter.com/nitya), [Jalen McGee](https://twitter.com/JalenMcG), [Jen Looper](https://twitter.com/jenlooper), [Maud Levy](https://twitter.com/maudstweets), [Tiffany Souterre](https://twitter.com/TiffanySouterre), [Christopher Harrison](https://www.twitter.com/geektrainer). + +**🙏 تشکر ویژه 🙏 از نویسندگان سفیر دانشجویی مایکروسافت، بازبینی کنندگان، و مشارکت کنندگان در محتوا،** به ویژه [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), Yogendrasingh Pawar, Max Blum, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey + + |![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../sketchnotes/00-Title.png)| +|:---:| +| علم داده برای مبتدیان - طرح از [@nitya](https://twitter.com/nitya)_ | + + +# شروع به کار + +> **معلمان**، ما در مورد نحوه استفاده از این برنامه درسی [برخی از پیشنهادات را درج کرده ایم](../for-teachers.md). بسیار خوشحال می شویم که بازخوردهای شما را در [انجمن بحث و گفت و گوی](https://github.com/microsoft/Data-Science-For-Beginners/discussions) خود داشته باشیم! + +> **دانش آموزان**، اگر قصد دارید به تنهایی از این برنامه درسی استفاده کنید، کل ریپو را فورک کنید و تمرینات را خودتان به تنهایی انجام دهید. ابتدا با آزمون قبل از درس آغاز کنید، سپس درسنامه را خوانده و باقی فعالیت ها را تکمیل کنید. سعی کنید به جای کپی کردن کد راه حل، خودتان پروژه ها را با درک مفاهیم درسنامه ایجاد کنید. با این حال،کد راه حل در پوشه های /solutions داخل هر درس پروژه محور موجود می باشد. ایده دیگر تشکیل گروه مطالعه با دوستان است تا بتوانید مطالب را با هم مرور کنید، پیشنهاد ما [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-40229-cxa) می باشد. + + + + From 8481565c0a0415b676c000bf5362f05c5a76781c Mon Sep 17 00:00:00 2001 From: Dmitri Soshnikov Date: Wed, 6 Oct 2021 18:46:28 +0300 Subject: [PATCH 26/74] Correct the link to Intro to DS video --- 1-Introduction/01-defining-data-science/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/01-defining-data-science/README.md b/1-Introduction/01-defining-data-science/README.md index aa92a9c9..bedbb1e7 100644 --- a/1-Introduction/01-defining-data-science/README.md +++ b/1-Introduction/01-defining-data-science/README.md @@ -6,7 +6,7 @@ --- -[![Defining Data Science Video](images/video-def-ds.png)](https://youtu.be/pqqsm5reGvs) +[![Defining Data Science Video](images/video-def-ds.png)](https://youtu.be/beZ7Mb_oz9I) ## [Pre-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/0) From 9f414d6975a8d8ecca59ae67c4706b7408999deb Mon Sep 17 00:00:00 2001 From: Dmitri Soshnikov Date: Wed, 6 Oct 2021 18:48:12 +0300 Subject: [PATCH 27/74] Correct link to intro to DS video on home page --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b2a9e8e..4843d1f8 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ In addition, a low-stakes quiz before a class sets the intention of the student | Lesson Number | Topic | Lesson Grouping | Learning Objectives | Linked Lesson | Author | | :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: | -| 01 | Defining Data Science | [Introduction](1-Introduction/README.md) | Learn the basic concepts behind data science and how it’s related to artificial intelligence, machine learning, and big data. | [lesson](1-Introduction/01-defining-data-science/README.md) [video](https://youtu.be/pqqsm5reGvs) | [Dmitry](http://soshnikov.com) | +| 01 | Defining Data Science | [Introduction](1-Introduction/README.md) | Learn the basic concepts behind data science and how it’s related to artificial intelligence, machine learning, and big data. | [lesson](1-Introduction/01-defining-data-science/README.md) [video](https://youtu.be/beZ7Mb_oz9I) | [Dmitry](http://soshnikov.com) | | 02 | Data Science Ethics | [Introduction](1-Introduction/README.md) | Data Ethics Concepts, Challenges & Frameworks. | [lesson](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) | | 03 | Defining Data | [Introduction](1-Introduction/README.md) | How data is classified and its common sources. | [lesson](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) | | 04 | Introduction to Statistics & Probability | [Introduction](1-Introduction/README.md) | The mathematical techniques of probability and statistics to understand data. | [lesson](1-Introduction/04-stats-and-probability/README.md) [video](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) | From 4884470175a2b2156c76065389943d3489050e09 Mon Sep 17 00:00:00 2001 From: alirezaAsadi2018 <44492608+alirezaAsadi2018@users.noreply.github.com> Date: Wed, 6 Oct 2021 21:46:48 +0330 Subject: [PATCH 28/74] Complete Pedagogy, Each lesson includes, and Lessons part --- translations/README.fa.md | 57 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/translations/README.fa.md b/translations/README.fa.md index b582b8f4..d3da65e2 100644 --- a/translations/README.fa.md +++ b/translations/README.fa.md @@ -21,7 +21,7 @@ |![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../sketchnotes/00-Title.png)| |:---:| -| علم داده برای مبتدیان - طرح از [@nitya](https://twitter.com/nitya)_ | +| علم داده برای مبتدیان - یادداشت بصری (sketchnote) از [@nitya](https://twitter.com/nitya)_ | # شروع به کار @@ -34,4 +34,59 @@ > 🎥 برای مشاهده ویدیویی در مورد این پروژه و افرادی که آن را ایجاد کرده اند، روی تصویر بالا کلیک کنید!--> + +## آموزش + +ما هنگام تدوین این برنامه درسی دو اصل آموزشی را انتخاب کرده ایم: اطمینان حاصل کنیم که پروژه محور است و شامل آزمونهای مکرر می باشد. دانش آموزان به محض تکمیل این سری آموزشی، اصول اولیه علم داده، شامل اصول اخلاقی، آماده سازی داده ها، روش های مختلف کار با داده ها، تصویرسازی داده ها، تجزیه و تحلیل داده ها، موارد استفاده از علم داده در دنیای واقعی و بسیاری مورد دیگر را فرا می گیرند. + +علاوه بر این، یک کوییز با امتیاز کم قبل از کلاس، مقصود دانش آموز درجهت یادگیری یک موضوع را مشخص می کند، در حالی که کوییز دوم بعد از کلاس ماندگاری بیشتر مطالب را تضمین می کند. این برنامه درسی طوری طراحی شده است که انعطاف پذیر و سرگرم کننده باشد و می تواند به طور کامل یا جزئی مورد استفاده قرار گیرد. پروژه از کوچک شروع می شوند و تا پایان چرخه ۱۰ هفته ای همینطور پیچیده تر می شوند. + +> دستورالعمل های ما را درباره [کد رفتار](../CODE_OF_CONDUCT.md), [مشارکت](../CONTRIBUTING.md), [ترجمه](../TRANSLATIONS.md) ببینید. ما از بازخورد سازنده شما استقبال می کنیم! + + ## هر درس شامل: + +- یادداشت های بصری (sketchnote) اختیاری +- فیلم های مکمل اختیاری +- کوییز های دست گرمی قبل از درس +- درسنامه مکتوب +- راهنمای گام به گام نحوه ساخت پروژه برای درس های مبتنی بر پروژه +- بررسی دانش +- یک چالش +- منابع خواندنی مکمل +- تمرین +- کوییز پس از درس + +> **نکته ای در مورد آزمونها**: همه آزمون ها در [این برنامه](https://red-water-0103e7a0f.azurestaticapps.net/) موجود هستند، برای در مجموع ۴۰ کوییز که هرکدام شامل سه سوال می باشد. کوییزها از داخل درسنامه لینک داده شده اند اما برنامه کوییز را می توان به صورت لوکال اجرا کرد. برای اینکار، دستورالعمل موجود در پوشه `quiz-app` را دنبال کنید. سوالات به تدریج در حال لوکال سازی هستند. + +## Lessons + + +|![ یادداشت بصری (Sketchnote) از [(@sketchthedocs)](https://sketchthedocs.dev) ](../sketchnotes/00-Roadmap.png)| +|:---:| +| علم داده برای مبتدیان: نقشه راه - یادداشت بصری از [@nitya](https://twitter.com/nitya)_ | + + +| شماره درس | موضوع | گروه بندی درس | اهداف یادگیری | درس پیوند شده | نویسنده | +| :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: | +| ۱ | تعریف علم داده | [معرفی](../1-Introduction/README.md) | مفاهیم اساسی علم داده و نحوه ارتباط آن با هوش مصنوعی، یادگیری ماشین و کلان داده را بیاموزید. | [درسنامه](../1-Introduction/01-defining-data-science/README.md) [ویدیو](https://youtu.be/pqqsm5reGvs) | [Dmitry](http://soshnikov.com) | +| ۲ | اصول اخلاقی علم داده | [معرفی](../1-Introduction/README.md) | مفاهیم اخلاق داده ها، چالش ها و چارچوب ها. | [درسنامه](../1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) | +| ۳ | تعریف داده | [معرفی](../1-Introduction/README.md) | نحوه دسته بندی داده ها و منابع رایج آن. | [درسنامه](../1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) | +| ۴ | مقدمه ای بر آمار و احتمال | [معرفی](../1-Introduction/README.md) | تکنیک های ریاضی آمار و احتمال برای درک داده ها. | [درسنامه](../1-Introduction/04-stats-and-probability/README.md) [ویدیو](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) | +| ۵ | کار با داده های رابطه ای | [کار با داده ها](../2-Working-With-Data/README.md) | مقدمه ای بر داده های رابطه ای و مبانی اکتشاف و تجزیه و تحلیل داده های رابطه ای با زبان پرس و جوی ساختار یافته ، که به SQL نیز معروف است (تلفظ کنید “see-quell”). | [درسنامه](../2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | | +| ۶ | کار با داده های NoSQL | [کار با داده ها](../2-Working-With-Data/README.md) | مقدمه ای بر داده های غیر رابطه ای، انواع مختلف آن و مبانی کاوش و تجزیه و تحلیل پایگاه داده های اسناد(document databases). | [درسنامه](../2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique)| +| ۷ | کار با پایتون | [کار با داده ها](../2-Working-With-Data/README.md) | اصول استفاده از پایتون برای کاوش داده با کتابخانه هایی مانند Pandas. توصیه می شود مبانی برنامه نویسی پایتون را بلد باشید. | [درسنامه](../2-Working-With-Data/07-python/README.md) [ویدیو](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) | +| ۸ | آماده سازی داده ها | [کار با داده ها](../2-Working-With-Data/README.md) | مباحث مربوط به تکنیک های داده ای برای پاکسازی و تبدیل داده ها به منظور رسیدگی به چالش های داده های مفقود شده، نادرست یا ناقص. | [درسنامه](../2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) | +| ۹ | تصویرسازی مقادیر | [تصویرسازی داده ها](../3-Data-Visualization/README.md) | نحوه استفاده از Matplotlib برای تصویرسازی داده های پرندگان را می آموزید. 🦆 | [درسنامه](../3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) | +| ۱۰ | تصویرسازی توزیع داده ها | [تصویرسازی داده ها](../3-Data-Visualization/README.md) | تصویرسازی مشاهدات و روندها در یک بازه زمانی. | [درسنامه](../3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) | +| ۱۱ | تصویرسازی نسبت ها | [تصویرسازی داده ها](../3-Data-Visualization/README.md) | تصویرسازی درصدهای مجزا و گروهی. | [درسنامه](../3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) | +| ۱۲ | تصویرسازی روابط | [تصویرسازی داده ها](../3-Data-Visualization/README.md) | تصویرسازی ارتباطات و همبستگی بین مجموعه داده ها و متغیرهای آنها. | [درسنامه](../3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) | +| ۱۳ | تصویرسازی های معنی دار | [تصویرسازی داده ها](../3-Data-Visualization/README.md) | تکنیک ها و راهنمایی هایی برای تبدیل تصویرسازی های شما به خروجی های ارزشمندی جهت حل موثرتر مشکلات و بینش ها. | [درسنامه](../3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) | +| ۱۴ | مقدمه ای بر چرخه حیات علم داده | [چرخه حیات](../4-Data-Science-Lifecycle/README.md) | مقدمه ای بر چرخه حیات علم داده و اولین گام آن برای دستیابی به داده ها و استخراج آن ها. | [درسنامه](../4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) | +| ۱۵ | تجزیه و تحلیل | [چرخه حیات](../4-Data-Science-Lifecycle/README.md) | این مرحله از چرخه حیات علم داده بر تکنیک های تجزیه و تحلیل داده ها متمرکز است. | [درسنامه](../4-Data-Science-Lifecycle/15-Analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | | +| ۱۶ | ارتباطات | [چرخه حیات](../4-Data-Science-Lifecycle/README.md) | این مرحله از چرخه حیات علم داده بر روی ارائه بینش از داده ها به نحوی که درک آنها را برای تصمیم گیرندگان آسان تر بکند، متمرکز است. | [درسنامه](../4-Data-Science-Lifecycle/16-Communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | | +| ۱۷ | علم داده در فضای ابری | [داده های ابری](../5-Data-Science-In-Cloud/README.md) | این سری از درسنامه ها علم داده در فضای ابری و مزایای آن را معرفی می کند. | [درسنامه](../5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) و [Maud](https://twitter.com/maudstweets) | +| ۱۸ | علم داده در فضای ابری | [داده های ابری](../5-Data-Science-In-Cloud/README.md) | آموزش مدل ها با استفاده از ابزارهای کد کمتر(low code). |[درسنامه](../5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) و [Maud](https://twitter.com/maudstweets) | +| ۱۹ | علم داده در فضای | [داده های ابری](../5-Data-Science-In-Cloud/README.md) | استقرار(Deploy) مدل ها با استفاده از استودیوی یادگیری ماشین آژور(Azure Machine Learning Studio). | [درسنامه](../5-Data-Science-In-Cloud/19-Azure/README.md)| [Tiffany](https://twitter.com/TiffanySouterre) و [Maud](https://twitter.com/maudstweets) | +| ۲۰ | علم داده در طبیعت | [در طبیعت](../6-Data-Science-In-Wild/README.md) | پروژه های علم داده در دنیای واقعی. | [درسنامه](../6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) | + From a74f0d5aa74d504cda4dc3d3a64dffc9fffa0528 Mon Sep 17 00:00:00 2001 From: alirezaAsadi2018 <44492608+alirezaAsadi2018@users.noreply.github.com> Date: Wed, 6 Oct 2021 21:48:10 +0330 Subject: [PATCH 29/74] translate header "lessons" that was forgotten --- translations/README.fa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README.fa.md b/translations/README.fa.md index d3da65e2..f986ade0 100644 --- a/translations/README.fa.md +++ b/translations/README.fa.md @@ -58,7 +58,7 @@ > **نکته ای در مورد آزمونها**: همه آزمون ها در [این برنامه](https://red-water-0103e7a0f.azurestaticapps.net/) موجود هستند، برای در مجموع ۴۰ کوییز که هرکدام شامل سه سوال می باشد. کوییزها از داخل درسنامه لینک داده شده اند اما برنامه کوییز را می توان به صورت لوکال اجرا کرد. برای اینکار، دستورالعمل موجود در پوشه `quiz-app` را دنبال کنید. سوالات به تدریج در حال لوکال سازی هستند. -## Lessons +## درسنامه |![ یادداشت بصری (Sketchnote) از [(@sketchthedocs)](https://sketchthedocs.dev) ](../sketchnotes/00-Roadmap.png)| From 0ffd49b93fa3dc58a0ce3b8c7be5d36972589523 Mon Sep 17 00:00:00 2001 From: alirezaAsadi2018 <44492608+alirezaAsadi2018@users.noreply.github.com> Date: Wed, 6 Oct 2021 22:12:26 +0330 Subject: [PATCH 30/74] Finish translating Offline access, PDF, Help Wanted, and Other Curricula --- translations/README.fa.md | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/translations/README.fa.md b/translations/README.fa.md index f986ade0..d8de4c52 100644 --- a/translations/README.fa.md +++ b/translations/README.fa.md @@ -28,7 +28,7 @@ > **معلمان**، ما در مورد نحوه استفاده از این برنامه درسی [برخی از پیشنهادات را درج کرده ایم](../for-teachers.md). بسیار خوشحال می شویم که بازخوردهای شما را در [انجمن بحث و گفت و گوی](https://github.com/microsoft/Data-Science-For-Beginners/discussions) خود داشته باشیم! -> **دانش آموزان**، اگر قصد دارید به تنهایی از این برنامه درسی استفاده کنید، کل ریپو را فورک کنید و تمرینات را خودتان به تنهایی انجام دهید. ابتدا با آزمون قبل از درس آغاز کنید، سپس درسنامه را خوانده و باقی فعالیت ها را تکمیل کنید. سعی کنید به جای کپی کردن کد راه حل، خودتان پروژه ها را با درک مفاهیم درسنامه ایجاد کنید. با این حال،کد راه حل در پوشه های /solutions داخل هر درس پروژه محور موجود می باشد. ایده دیگر تشکیل گروه مطالعه با دوستان است تا بتوانید مطالب را با هم مرور کنید، پیشنهاد ما [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-40229-cxa) می باشد. +> **دانش آموزان**، اگر قصد دارید به تنهایی از این برنامه درسی استفاده کنید، کل مخزن را فورک کنید و تمرینات را خودتان به تنهایی انجام دهید. ابتدا با آزمون قبل از درس آغاز کنید، سپس درسنامه را خوانده و باقی فعالیت ها را تکمیل کنید. سعی کنید به جای کپی کردن کد راه حل، خودتان پروژه ها را با درک مفاهیم درسنامه ایجاد کنید. با این حال،کد راه حل در پوشه های /solutions داخل هر درس پروژه محور موجود می باشد. ایده دیگر تشکیل گروه مطالعه با دوستان است تا بتوانید مطالب را با هم مرور کنید، پیشنهاد ما [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-40229-cxa) می باشد. + +## Pédagogie + +Nous avons choisi deux principes pédagogiques lors de la création de ce programme d'études : veiller à ce qu'il soit basé sur des projets et à ce qu'il comprenne des quiz fréquents. À la fin de cette série, les élèves auront appris les principes de base de la data science, notamment les concepts éthiques, la préparation des données, les différentes façons de travailler avec les données, la visualisation des données, l'analyse des données, des cas d'utilisation réels de data science, etc. + +De plus, un quiz à faible enjeu à réaliser avant chaque cours permet de préparer l'étudiant à l'apprentissage du sujet, et un second quiz après le cours permet de fixer encore davantage le contenu dans l'esprit des apprenants. Ce curriculum se veut flexible et ammusant et il peut être suivi dans son intégralité ou en partie. Les premiers projets sont modestes et deviennent de plus en plus ardus. + +> Qeulques liens utiles : [Code de conduite](CODE_OF_CONDUCT.md), [Comment contribuer](CONTRIBUTING.md), [Traductions](TRANSLATIONS.md). Tout feedback constructif sera le bienvenu ! + +## Chaque cours comprend : + +- Un sketchnote optionnel +- Une vidéo complémentaire optionnelle +- Un quiz préalable +- Un cours écrit +- Pour les cours basés sur des projets à réaliser : un guide de création du projet +- Des vérifications de connaissances +- Un challenge +- De la lecture complémentaire +- Un exercice +- Un quiz de fin + +> **Concernant les quiz** : Vous pourrez retrouver tous les quiz [dans cette application](https://red-water-0103e7a0f.azurestaticapps.net/). Il y a 40 quiz, avec trois questions chacun. Vous les retrouverez dans chaque cours correspondant, mais vous pouvez aussi utiliser l'application de quiz en local en suivant les instruction disponibles dans le dossier `quiz-app`. Les quiz sont en cours de localisation. + +## Cours + + +|![ Sketchnote réalisé par [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Roadmap.png)| +|:---:| +| Data Science For Beginners: Roadmap - _Sketchnote réalisé par [@nitya](https://twitter.com/nitya)_ | + + +| Numéro du cours | Topic | Chapitre | Objectifs d'apprentissage | Liens vers les cours | Auteurs | +| :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: | +| 01 | Qu'est-ce que la Data Science ? | [Introduction](1-Introduction/README.md) | Apprenez les concepts de base de la data science et le lien entre la data science, l'intelligence artificielle, le machine learning et la big data. | [cours](1-Introduction/01-defining-data-science/README.md) [vidéo](https://youtu.be/pqqsm5reGvs) | [Dmitry](http://soshnikov.com) | +| 02 | Data Science et éthique | [Introduction](1-Introduction/README.md) | Les concepts d'éthique dans le domaine des données, les challenges et les principes d'encadrement. | [cours](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) | +| 03 | Définition de la data | [Introduction](1-Introduction/README.md) | Comment classifier les données et d'où viennent-elles principalement ? | [cours](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) | +| 04 | Introduction aux statistiques et aux probabilités | [Introduction](1-Introduction/README.md) | Techniques mathématiques de probabilités et de statistiques au service de la data. | [cours](1-Introduction/04-stats-and-probability/README.md) [vidéo](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) | +| 05 | Utilisation de données relationnelles | [Exploiter des données](2-Working-With-Data/README.md) | Introduction aux données relationnelles et aux bases d'exploration et d'analyse des données relationnelles avec le Structured Query Language, alias SQL (pronouncé “sicouel”). | [cours](2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | | +| 06 | Utilisation de données NoSQL | [Exploiter des données](2-Working-With-Data/README.md) | Présentation des données non relationelles, les types de données et les fondamentaux de l'exploration et de l'analyse de bases de données documentaires. | [cours](2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique)| +| 07 | Utilisation de Python | [Exploiter des données](2-Working-With-Data/README.md) | Les principes de base de Python pour l'exploration de données, et les librairies courantes telles que Pandas. Des connaissances de base de la programmation Python sont recommandées pour ce cours.| [cours](2-Working-With-Data/07-python/README.md) [vidéo](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) | +| 08 | Préparation des données | [Working With Data](2-Working-With-Data/README.md) | Techniques de nettoyage et de transformation des données pour gérer des données manquantes, inexactesou incomplètes. | [cours](2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) | +| 09 | Visualisation des quantités | [Data Visualization](3-Data-Visualization/README.md) | Apprendre à utiliser Matplotlib pour visualiser des données sur les oiseaux 🦆 | [cours](3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) | +| 10 | Visualisation de la distribution des données | [Data Visualization](3-Data-Visualization/README.md) | Visualisation d'observations et de tendances dans un intervalle. | [cours](3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) | +| 11 | Visualiser des proportions | [Data Visualization](3-Data-Visualization/README.md) | Visualisation de pourcentages discrets et groupés. | [cours](3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) | +| 12 | Visualisation de relations | [Data Visualization](3-Data-Visualization/README.md) | Visualisation de connections et de corrélations entre différents sets de données et leurs variables. | [cours](3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) | +| 13 | Visualisations significatives | [Data Visualization](3-Data-Visualization/README.md) | Techniques et conseils pour donner de la valeur à vos visualisations, les rendre utiles à la compréhension et à la résolution de problèmes. | [cours](3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) | +| 14 | Introduction au cycle de vie de la Data Science | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Présentation du cycle de la data science et des premières étapes d'acquisition et d'extraction des données. | [cours](4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) | +| 15 | Analyse | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Cette étape du cycle de vie de la data science se concentre sur les techniques d'analysation des données. | [cours](4-Data-Science-Lifecycle/15-Analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | | +| 16 | Communication | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Cette étape du cycle de vie de la data science se concentre sur la présentation des informations tirées des données de manière à faciliter la compréhension d'une situation par des décisionnaires. | [cours](4-Data-Science-Lifecycle/16-Communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | | +| 17 | La Data Science dans le Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Ce cours présente le Cloud et l'intérêt du Cloud pour la Data Science. | [cours](5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | +| 18 | La Data Science dans le Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Entraîner un modèle avec des outils de low code. |[cours](5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | +| 19 | La Data Science dans le Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Déployer des modèles avec Azure Machine Learning Studio. | [cours](5-Data-Science-In-Cloud/19-Azure/README.md)| [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | +| 20 | La Data Science dans la nature | [In the Wild](6-Data-Science-In-Wild/README.md) | Des projets concrets de data science sur le terrain. | [cours](6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) | +## Accès hors ligne + +Vous pouvez retrouver cette documentation hors ligne à l'aide de [Docsify](https://docsify.js.org/#/). Forkez ce repository, [installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, et tapez `docsify serve` dans le dossier racine de ce repository. Vous retrouverez le site web sur le port 3000 de votre localhost : `localhost:3000`. + +> Remarque : vous ne pourrez pas utiliser de notebook avec Docsify. Si vous vouhaitez utilisr un notebook, vous pouvez le faire séparémmnt à l'aide d'un kernel Python dans VS Code. +## PDF + +Vous trouverez un PDF contenant tous les cours du curriculum [ici](https://microsoft.github.io/Data-Science-For-Beginners/pdf/readme.pdf). + +## Appel à contribution + +Si vous souhaitez traduire le curriculum entier ou en partie, veuillez suivre notre guide de [traduction](TRANSLATIONS.md). + +## Autres Curricula + +Notre équipe a créé d'autres cours ! Ne manquez pas : + +- [Le Machine Learning pour les débutants](https://aka.ms/ml-beginners) +- [L'IoT pour les débutants](https://aka.ms/iot-beginners) +- [Le développement Web pour les débutants](https://aka.ms/webdev-beginners) From 633fbe6576ba18e309863724c07c076147446a7f Mon Sep 17 00:00:00 2001 From: Maud Date: Thu, 7 Oct 2021 10:47:45 +0200 Subject: [PATCH 37/74] Edit image path --- translations/README.fr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/README.fr.md b/translations/README.fr.md index c6ec2c0b..59116f49 100644 --- a/translations/README.fr.md +++ b/translations/README.fr.md @@ -16,7 +16,7 @@ L'équipe Azure Cloud Advocates de Microsoft a le plaisir de vous offrir un curr **🙏 Nous remercions également particulièrement 🙏 les auteurs, correcteurs et contributeurs membres du programme Microsoft Learn Student Ambassadors**, notamment [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), Yogendrasingh Pawar, Max Blum, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey -|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Title.png)| +|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../sketchnotes/00-Title.png)| |:---:| | Data Science For Beginners - _Sketchnote réalisé par [@nitya](https://twitter.com/nitya)_ | @@ -57,7 +57,7 @@ De plus, un quiz à faible enjeu à réaliser avant chaque cours permet de prép ## Cours -|![ Sketchnote réalisé par [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Roadmap.png)| +|![ Sketchnote réalisé par [(@sketchthedocs)](https://sketchthedocs.dev) ](../sketchnotes/00-Roadmap.png)| |:---:| | Data Science For Beginners: Roadmap - _Sketchnote réalisé par [@nitya](https://twitter.com/nitya)_ | From 147b4d294fbcc2514a1d09ed51c90977ae9b6bf8 Mon Sep 17 00:00:00 2001 From: Jasmine Greenaway Date: Thu, 7 Oct 2021 11:05:08 -0400 Subject: [PATCH 38/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 86c34bc3..679626f1 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Azure Cloud Advocates at Microsoft are pleased to offer a 10-week, 20-lesson cur **Hearty thanks to our authors:** [Jasmine Greenaway](https://www.twitter.com/paladique), [Dmitry Soshnikov](http://soshnikov.com), [Nitya Narasimhan](https://twitter.com/nitya), [Jalen McGee](https://twitter.com/JalenMcG), [Jen Looper](https://twitter.com/jenlooper), [Maud Levy](https://twitter.com/maudstweets), [Tiffany Souterre](https://twitter.com/TiffanySouterre), [Christopher Harrison](https://www.twitter.com/geektrainer). -**🙏 Special thanks 🙏 to our Microsoft Student Ambassador authors, reviewers and content contributors,** notably [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), Yogendrasingh Pawar, Max Blum, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey +**🙏 Special thanks 🙏 to our Microsoft Student Ambassador authors, reviewers and content contributors,** notably [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), Yogendrasingh Pawar, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey |![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Title.png)| |:---:| From 00ccaade72b5d232c0d6bfbad1d9ccb739c8cb6b Mon Sep 17 00:00:00 2001 From: Anupam Mishra <66557767+anupamishra333@users.noreply.github.com> Date: Fri, 8 Oct 2021 19:16:14 +0530 Subject: [PATCH 39/74] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 679626f1..79225b33 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Azure Cloud Advocates at Microsoft are pleased to offer a 10-week, 20-lesson cur **Hearty thanks to our authors:** [Jasmine Greenaway](https://www.twitter.com/paladique), [Dmitry Soshnikov](http://soshnikov.com), [Nitya Narasimhan](https://twitter.com/nitya), [Jalen McGee](https://twitter.com/JalenMcG), [Jen Looper](https://twitter.com/jenlooper), [Maud Levy](https://twitter.com/maudstweets), [Tiffany Souterre](https://twitter.com/TiffanySouterre), [Christopher Harrison](https://www.twitter.com/geektrainer). -**🙏 Special thanks 🙏 to our Microsoft Student Ambassador authors, reviewers and content contributors,** notably [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), Yogendrasingh Pawar, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey +**🙏 Special thanks 🙏 to our [Microsoft Student Ambassador](https://studentambassadors.microsoft.com/) authors, reviewers and content contributors,** notably [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), Yogendrasingh Pawar, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey |![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Title.png)| |:---:| From 28ecf16762851db9163110af2ace543c89612bea Mon Sep 17 00:00:00 2001 From: Maud Date: Fri, 8 Oct 2021 15:55:41 +0200 Subject: [PATCH 40/74] fix links --- translations/README.fr.md | 48 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/translations/README.fr.md b/translations/README.fr.md index 59116f49..65eb3a81 100644 --- a/translations/README.fr.md +++ b/translations/README.fr.md @@ -23,11 +23,11 @@ L'équipe Azure Cloud Advocates de Microsoft a le plaisir de vous offrir un curr # Prise en main -> **Enseignants**, nous avons [inclus des suggestions](for-teachers.md) concernant la manière dont vous pouvez utiliser ce curriculum. Nous aimerions beaucoup lire vos feedbacks [dans notre forum de discussion](https://github.com/microsoft/Data-Science-For-Beginners/discussions) ! +> **Enseignants**, nous avons [inclus des suggestions](../for-teachers.md) concernant la manière dont vous pouvez utiliser ce curriculum. Nous aimerions beaucoup lire vos feedbacks [dans notre forum de discussion](https://github.com/microsoft/Data-Science-For-Beginners/discussions) ! > **Etudiants**, pour suivre ce curriculum, la première chose à faire est de forker ce repository en entier, vous pourrez ensuite réaliser les exercices de votre côté, en commençant un quiz préalable, en lisant le contenu des cours, et en complétant le reste des activités. Essayez de créer les projets en intégrant bien les cours, plutôt qu'en copiant les solutions. Vous verrez que chaque cours orientée projet contient un dossier dossier /solutions dans lequel vous trouverez la solution des exercices. Vous pouvez aussi former un groupe d'apprentissage avec des amis et vous former ensemble. Pour poursuivre votre apprentissage, nous recommandons d'aller consulter [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-40229-cxa). - @@ -37,7 +37,7 @@ Nous avons choisi deux principes pédagogiques lors de la création de ce progra De plus, un quiz à faible enjeu à réaliser avant chaque cours permet de préparer l'étudiant à l'apprentissage du sujet, et un second quiz après le cours permet de fixer encore davantage le contenu dans l'esprit des apprenants. Ce curriculum se veut flexible et ammusant et il peut être suivi dans son intégralité ou en partie. Les premiers projets sont modestes et deviennent de plus en plus ardus. -> Qeulques liens utiles : [Code de conduite](CODE_OF_CONDUCT.md), [Comment contribuer](CONTRIBUTING.md), [Traductions](TRANSLATIONS.md). Tout feedback constructif sera le bienvenu ! +> Qeulques liens utiles : [Code de conduite](../CODE_OF_CONDUCT.md), [Comment contribuer](../CONTRIBUTING.md), [Traductions](../TRANSLATIONS.md). Tout feedback constructif sera le bienvenu ! ## Chaque cours comprend : @@ -64,26 +64,26 @@ De plus, un quiz à faible enjeu à réaliser avant chaque cours permet de prép | Numéro du cours | Topic | Chapitre | Objectifs d'apprentissage | Liens vers les cours | Auteurs | | :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: | -| 01 | Qu'est-ce que la Data Science ? | [Introduction](1-Introduction/README.md) | Apprenez les concepts de base de la data science et le lien entre la data science, l'intelligence artificielle, le machine learning et la big data. | [cours](1-Introduction/01-defining-data-science/README.md) [vidéo](https://youtu.be/pqqsm5reGvs) | [Dmitry](http://soshnikov.com) | -| 02 | Data Science et éthique | [Introduction](1-Introduction/README.md) | Les concepts d'éthique dans le domaine des données, les challenges et les principes d'encadrement. | [cours](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) | -| 03 | Définition de la data | [Introduction](1-Introduction/README.md) | Comment classifier les données et d'où viennent-elles principalement ? | [cours](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) | -| 04 | Introduction aux statistiques et aux probabilités | [Introduction](1-Introduction/README.md) | Techniques mathématiques de probabilités et de statistiques au service de la data. | [cours](1-Introduction/04-stats-and-probability/README.md) [vidéo](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) | -| 05 | Utilisation de données relationnelles | [Exploiter des données](2-Working-With-Data/README.md) | Introduction aux données relationnelles et aux bases d'exploration et d'analyse des données relationnelles avec le Structured Query Language, alias SQL (pronouncé “sicouel”). | [cours](2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | | -| 06 | Utilisation de données NoSQL | [Exploiter des données](2-Working-With-Data/README.md) | Présentation des données non relationelles, les types de données et les fondamentaux de l'exploration et de l'analyse de bases de données documentaires. | [cours](2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique)| -| 07 | Utilisation de Python | [Exploiter des données](2-Working-With-Data/README.md) | Les principes de base de Python pour l'exploration de données, et les librairies courantes telles que Pandas. Des connaissances de base de la programmation Python sont recommandées pour ce cours.| [cours](2-Working-With-Data/07-python/README.md) [vidéo](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) | -| 08 | Préparation des données | [Working With Data](2-Working-With-Data/README.md) | Techniques de nettoyage et de transformation des données pour gérer des données manquantes, inexactesou incomplètes. | [cours](2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) | -| 09 | Visualisation des quantités | [Data Visualization](3-Data-Visualization/README.md) | Apprendre à utiliser Matplotlib pour visualiser des données sur les oiseaux 🦆 | [cours](3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) | -| 10 | Visualisation de la distribution des données | [Data Visualization](3-Data-Visualization/README.md) | Visualisation d'observations et de tendances dans un intervalle. | [cours](3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) | -| 11 | Visualiser des proportions | [Data Visualization](3-Data-Visualization/README.md) | Visualisation de pourcentages discrets et groupés. | [cours](3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) | -| 12 | Visualisation de relations | [Data Visualization](3-Data-Visualization/README.md) | Visualisation de connections et de corrélations entre différents sets de données et leurs variables. | [cours](3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) | -| 13 | Visualisations significatives | [Data Visualization](3-Data-Visualization/README.md) | Techniques et conseils pour donner de la valeur à vos visualisations, les rendre utiles à la compréhension et à la résolution de problèmes. | [cours](3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) | -| 14 | Introduction au cycle de vie de la Data Science | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Présentation du cycle de la data science et des premières étapes d'acquisition et d'extraction des données. | [cours](4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) | -| 15 | Analyse | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Cette étape du cycle de vie de la data science se concentre sur les techniques d'analysation des données. | [cours](4-Data-Science-Lifecycle/15-Analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | | -| 16 | Communication | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Cette étape du cycle de vie de la data science se concentre sur la présentation des informations tirées des données de manière à faciliter la compréhension d'une situation par des décisionnaires. | [cours](4-Data-Science-Lifecycle/16-Communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | | -| 17 | La Data Science dans le Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Ce cours présente le Cloud et l'intérêt du Cloud pour la Data Science. | [cours](5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | -| 18 | La Data Science dans le Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Entraîner un modèle avec des outils de low code. |[cours](5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | -| 19 | La Data Science dans le Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Déployer des modèles avec Azure Machine Learning Studio. | [cours](5-Data-Science-In-Cloud/19-Azure/README.md)| [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | -| 20 | La Data Science dans la nature | [In the Wild](6-Data-Science-In-Wild/README.md) | Des projets concrets de data science sur le terrain. | [cours](6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) | +| 01 | Qu'est-ce que la Data Science ? | [Introduction](../1-Introduction/README.md) | Apprenez les concepts de base de la data science et le lien entre la data science, l'intelligence artificielle, le machine learning et la big data. | [cours](../1-Introduction/01-defining-data-science/README.md) [vidéo](https://youtu.be/pqqsm5reGvs) | [Dmitry](http://soshnikov.com) | +| 02 | Data Science et éthique | [Introduction](../1-Introduction/README.md) | Les concepts d'éthique dans le domaine des données, les challenges et les principes d'encadrement. | [cours](../1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) | +| 03 | Définition de la data | [Introduction](../1-Introduction/README.md) | Comment classifier les données et d'où viennent-elles principalement ? | [cours](../1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) | +| 04 | Introduction aux statistiques et aux probabilités | [Introduction](../1-Introduction/README.md) | Techniques mathématiques de probabilités et de statistiques au service de la data. | [cours](../1-Introduction/04-stats-and-probability/README.md) [vidéo](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) | +| 05 | Utilisation de données relationnelles | [Exploiter des données](../2-Working-With-Data/README.md) | Introduction aux données relationnelles et aux bases d'exploration et d'analyse des données relationnelles avec le Structured Query Language, alias SQL (pronouncé “sicouel”). | [cours](../2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | | +| 06 | Utilisation de données NoSQL | [Exploiter des données](../2-Working-With-Data/README.md) | Présentation des données non relationelles, les types de données et les fondamentaux de l'exploration et de l'analyse de bases de données documentaires. | [cours](../2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique)| +| 07 | Utilisation de Python | [Exploiter des données](../2-Working-With-Data/README.md) | Les principes de base de Python pour l'exploration de données, et les librairies courantes telles que Pandas. Des connaissances de base de la programmation Python sont recommandées pour ce cours.| [cours](../2-Working-With-Data/07-python/README.md) [vidéo](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) | +| 08 | Préparation des données | [Working With Data](../2-Working-With-Data/README.md) | Techniques de nettoyage et de transformation des données pour gérer des données manquantes, inexactesou incomplètes. | [cours](../2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) | +| 09 | Visualisation des quantités | [Data Visualization](../3-Data-Visualization/README.md) | Apprendre à utiliser Matplotlib pour visualiser des données sur les oiseaux 🦆 | [cours](../3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) | +| 10 | Visualisation de la distribution des données | [Data Visualization](../3-Data-Visualization/README.md) | Visualisation d'observations et de tendances dans un intervalle. | [cours](../3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) | +| 11 | Visualiser des proportions | [Data Visualization](../3-Data-Visualization/README.md) | Visualisation de pourcentages discrets et groupés. | [cours](../3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) | +| 12 | Visualisation de relations | [Data Visualization](../3-Data-Visualization/README.md) | Visualisation de connections et de corrélations entre différents sets de données et leurs variables. | [cours](../3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) | +| 13 | Visualisations significatives | [Data Visualization](../3-Data-Visualization/README.md) | Techniques et conseils pour donner de la valeur à vos visualisations, les rendre utiles à la compréhension et à la résolution de problèmes. | [cours](../3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) | +| 14 | Introduction au cycle de vie de la Data Science | [Cycle de vie](../4-Data-Science-Lifecycle/README.md) | Présentation du cycle de la data science et des premières étapes d'acquisition et d'extraction des données. | [cours](../4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) | +| 15 | Analyse | [Cycle de vie](../4-Data-Science-Lifecycle/README.md) | Cette étape du cycle de vie de la data science se concentre sur les techniques d'analysation des données. | [cours](../4-Data-Science-Lifecycle/15-Analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | | +| 16 | Communication | [Cycle de vie](../4-Data-Science-Lifecycle/README.md) | Cette étape du cycle de vie de la data science se concentre sur la présentation des informations tirées des données de manière à faciliter la compréhension d'une situation par des décisionnaires. | [cours](../4-Data-Science-Lifecycle/16-Communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | | +| 17 | La Data Science dans le Cloud | [Cloud Data](../5-Data-Science-In-Cloud/README.md) | Ce cours présente le Cloud et l'intérêt du Cloud pour la Data Science. | [cours](../5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | +| 18 | La Data Science dans le Cloud | [Cloud Data](../5-Data-Science-In-Cloud/README.md) | Entraîner un modèle avec des outils de low code. |[cours](../5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | +| 19 | La Data Science dans le Cloud | [Cloud Data](../5-Data-Science-In-Cloud/README.md) | Déployer des modèles avec Azure Machine Learning Studio. | [cours](../5-Data-Science-In-Cloud/19-Azure/README.md)| [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) | +| 20 | La Data Science dans la nature | [In the Wild](../6-Data-Science-In-Wild/README.md) | Des projets concrets de data science sur le terrain. | [cours](../6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) | ## Accès hors ligne Vous pouvez retrouver cette documentation hors ligne à l'aide de [Docsify](https://docsify.js.org/#/). Forkez ce repository, [installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, et tapez `docsify serve` dans le dossier racine de ce repository. Vous retrouverez le site web sur le port 3000 de votre localhost : `localhost:3000`. @@ -95,7 +95,7 @@ Vous trouverez un PDF contenant tous les cours du curriculum [ici](https://micro ## Appel à contribution -Si vous souhaitez traduire le curriculum entier ou en partie, veuillez suivre notre guide de [traduction](TRANSLATIONS.md). +Si vous souhaitez traduire le curriculum entier ou en partie, veuillez suivre notre guide de [traduction](../TRANSLATIONS.md). ## Autres Curricula From bbea6f07226c9de2f9e11b8dc396fe19f5a7f3ee Mon Sep 17 00:00:00 2001 From: Hemshree Date: Fri, 8 Oct 2021 21:25:36 +0530 Subject: [PATCH 41/74] Updated translations --- .../translations/README.hi.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 3-Data-Visualization/translations/README.hi.md diff --git a/3-Data-Visualization/translations/README.hi.md b/3-Data-Visualization/translations/README.hi.md new file mode 100644 index 00000000..0d13f1a1 --- /dev/null +++ b/3-Data-Visualization/translations/README.hi.md @@ -0,0 +1,33 @@ +# Visualizations + +![a bee on a lavender flower](./images/bee.jpg) +> +जेना ली द्वारा फोटो Unsplash +पर + + +डेटा को विज़ुअलाइज़ करना डेटा साइंटिस्ट के सबसे महत्वपूर्ण कार्यों में से एक है। छवियां 1000 शब्दों के लायक हैं, और एक विज़ुअलाइज़ेशन आपको अपने डेटा के सभी प्रकार के दिलचस्प हिस्सों जैसे कि स्पाइक्स, आउटलेयर, ग्रुपिंग, प्रवृत्ति, और बहुत कुछ की पहचान करने में मदद कर सकता है, जो आपको उस कहानी को समझने में मदद कर सकता है जिसे आपका डेटा बताने की कोशिश कर रहा है। + +इन पांच पाठों में, आप प्रकृति से प्राप्त डेटा का पता लगाएंगे और विभिन्न तकनीकों का उपयोग करके दिलचस्प और सुंदर विज़ुअलाइज़ेशन बनाएंगे। +### Topics + +1. [विज़ुअलाइज़िंग मात्रा](09-visualization-quantities/README.md) +1. [विज़ुअलाइज़िंग वितरण](10-visualization-distributions/README.md) +1. [विज़ुअलाइज़िंग अनुपात](11-visualization-proportions/README.md) +1. [रिश्तों की कल्पना](12-visualization-relationships/README.md) +1. [सार्थक विज़ुअलाइज़ेशन बनाना](13-meaningful-visualizations/README.md) + +### Credits + +ये विज़ुअलाइज़ेशन पाठ 🌸 [Jen Looper](https://twitter.com/jenlooper) के साथ लिखे गए थे + +🍯 यूएस हनी प्रोडक्शन के लिए डेटा [कागल](https://www.kaggle.com/jessicali9530/honey-production) पर जेसिका ली के प्रोजेक्ट से लिया गया है। [डेटा](https://usda.library.cornell.edu/concern/publications/rn301137d) [यूनाइटेड स्टेट्स डिपार्टमेंट ऑफ़ एग्रीकल्चर](https://www.nass.usda.gov/About_NASS/index.php) से लिया गया है। + +🍄 मशरूम के लिए डेटा भी हैटरस डनटन द्वारा संशोधित [कागल](https://www.kaggle.com/hatterasdunton/mushroom-classification-updated-dataset) से प्राप्त किया जाता है। इस डेटासेट में एगारिकस और लेपियोटा परिवार में ग्रील्ड मशरूम की 23 प्रजातियों के अनुरूप काल्पनिक नमूनों का विवरण शामिल है। द ऑडबोन सोसाइटी फील्ड गाइड टू नॉर्थ अमेरिकन मशरूम (1981) से लिया गया मशरूम। यह डेटासेट 1987 में UCI ML 27 को दान किया गया था। + +🦆 मिनेसोटा बर्ड्स के लिए डेटा [कागल](https://www.kaggle.com/hannahcollins/minnesota-birds) से है, जिसे हन्ना कॉलिन्स द्वारा [विकिपीडिया](https://en.wikipedia.org/wiki/List_of_birds_of_Minnesota) से स्क्रैप किया गया है। + +ये सभी डेटासेट [CC0: Creative Commons](https://creativecommons.org/publicdomain/zero/1.0/) के रूप में लाइसेंसीकृत हैं। + + + From 829fce17293d788ec3e0ff48fb0b436622bc3efb Mon Sep 17 00:00:00 2001 From: Hemshree Date: Fri, 8 Oct 2021 21:28:07 +0530 Subject: [PATCH 42/74] Updated translations --- 3-Data-Visualization/translations/README.hi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Data-Visualization/translations/README.hi.md b/3-Data-Visualization/translations/README.hi.md index 0d13f1a1..a85543c8 100644 --- a/3-Data-Visualization/translations/README.hi.md +++ b/3-Data-Visualization/translations/README.hi.md @@ -1,6 +1,6 @@ # Visualizations -![a bee on a lavender flower](./images/bee.jpg) +![लैवेंडर फूल पर मधुमक्खी](../images/bee.jpg) > जेना ली द्वारा फोटो Unsplash पर From 59d665e3fab4ec97bc5dfebc21bc160b4dc219b4 Mon Sep 17 00:00:00 2001 From: Hemshree Date: Fri, 8 Oct 2021 21:29:15 +0530 Subject: [PATCH 43/74] Updated translations --- 3-Data-Visualization/translations/README.hi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Data-Visualization/translations/README.hi.md b/3-Data-Visualization/translations/README.hi.md index a85543c8..3d900203 100644 --- a/3-Data-Visualization/translations/README.hi.md +++ b/3-Data-Visualization/translations/README.hi.md @@ -1,4 +1,4 @@ -# Visualizations +# विज़ुअलाइज़ेशन ![लैवेंडर फूल पर मधुमक्खी](../images/bee.jpg) > From 048654fbe083b0932c6ff4da80deaca495e7d8de Mon Sep 17 00:00:00 2001 From: Anupam Mishra <66557767+anupamishra333@users.noreply.github.com> Date: Fri, 8 Oct 2021 21:59:36 +0530 Subject: [PATCH 44/74] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 79225b33..d101b7b6 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,8 @@ Azure Cloud Advocates at Microsoft are pleased to offer a 10-week, 20-lesson cur **Hearty thanks to our authors:** [Jasmine Greenaway](https://www.twitter.com/paladique), [Dmitry Soshnikov](http://soshnikov.com), [Nitya Narasimhan](https://twitter.com/nitya), [Jalen McGee](https://twitter.com/JalenMcG), [Jen Looper](https://twitter.com/jenlooper), [Maud Levy](https://twitter.com/maudstweets), [Tiffany Souterre](https://twitter.com/TiffanySouterre), [Christopher Harrison](https://www.twitter.com/geektrainer). -**🙏 Special thanks 🙏 to our [Microsoft Student Ambassador](https://studentambassadors.microsoft.com/) authors, reviewers and content contributors,** notably [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Rohit Yadav](https://www.linkedin.com/in/rty2423), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Sheena Narula](https://www.linkedin.com/in/sheena-narula-n/), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), Yogendrasingh Pawar, Samridhi Sharma, Tauqeer Ahmad, Aaryan Arora, ChhailBihari Dubey +**🙏 Special thanks 🙏 to our [Microsoft Student Ambassador](https://studentambassadors.microsoft.com/) authors, reviewers and content contributors,** notably Aaryan Arora, [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), ChhailBihari Dubey, [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Rohit Yadav](https://www.linkedin.com/in/rty2423), Samridhi Sharma, [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), +[Sheena Narula](https://www.linkedin.com/in/sheena-narua-n/), Tauqeer Ahmad, Yogendrasingh Pawar |![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Title.png)| |:---:| From 6392d8037da8d9162650200655618121a1cfd57a Mon Sep 17 00:00:00 2001 From: Keshav Sharma <61562452+keshav340@users.noreply.github.com> Date: Sat, 9 Oct 2021 05:53:58 -0700 Subject: [PATCH 45/74] Bonus lesson added --- 2-Working-With-Data/07-python/bonus-lesson.ipynb | 1 + 1 file changed, 1 insertion(+) create mode 100644 2-Working-With-Data/07-python/bonus-lesson.ipynb diff --git a/2-Working-With-Data/07-python/bonus-lesson.ipynb b/2-Working-With-Data/07-python/bonus-lesson.ipynb new file mode 100644 index 00000000..44dcbb39 --- /dev/null +++ b/2-Working-With-Data/07-python/bonus-lesson.ipynb @@ -0,0 +1 @@ +{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This R environment comes with many helpful analytics packages installed\n# It is defined by the kaggle/rstats Docker image: https://github.com/kaggle/docker-rstats\n# For example, here's a helpful package to load\n\nlibrary(tidyverse) # metapackage of all tidyverse packages\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nlist.files(path = \"../input\")\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","execution":{"iopub.status.busy":"2021-10-08T18:11:24.952103Z","iopub.execute_input":"2021-10-08T18:11:24.954562Z","iopub.status.idle":"2021-10-08T18:11:26.309552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"library(zoo)\nlibrary(dplyr)\nlibrary(ggplot2)\nlibrary(ggfortify)\nlibrary(dplyr)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:15:22.966831Z","iopub.execute_input":"2021-10-09T12:15:22.968941Z","iopub.status.idle":"2021-10-09T12:15:23.546202Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"markdown","source":"## Series","metadata":{}},{"cell_type":"markdown","source":"### Series is like a list or 1D-array, but with index.It is generally used to represent data associated with time.","metadata":{}},{"cell_type":"code","source":"stock_prices = c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)\nstock_prices_glennmark = ts(stock_prices,start = c(2020,1,1),frequency = 12)\nstock_prices_glennmark\nplot(stock_prices_glennmark)\n","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:15:54.612622Z","iopub.execute_input":"2021-10-09T12:15:54.735899Z","iopub.status.idle":"2021-10-09T12:15:55.008804Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"# CREATING A TIME SERIES\nrandomData<- rnorm(100)\nmonth <- ts(randomData,start=c(2020,1),frequency=12)\nplot(month)\n## it bit much longer a it is 100/4 takes much longer year","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:03.558553Z","iopub.execute_input":"2021-10-09T12:16:03.560254Z","iopub.status.idle":"2021-10-09T12:16:03.679285Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"markdown","source":"**DataFrame**\n#### It is a two dimensional data structure in which data is inserted in tabular form.","metadata":{}},{"cell_type":"code","source":"STOCK_PRICE <- data.frame(\nUSD=c(1.02,1.085,2.05,3.45,4.05,5.32,3.45,4.65,6.65,9.23,10.25,12.69),\nEURO = c(0.85,1.02,1.85,3.02,3.35,4.35,2.65,3.95,5.55,8.90,9.80,11.50))\nSTOCK_PRICES <- ts(STOCK_PRICE,start = c(2020,1,1),frequency = 12)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:24:50.750390Z","iopub.execute_input":"2021-10-09T12:24:50.752297Z","iopub.status.idle":"2021-10-09T12:24:50.767609Z"},"trusted":true},"execution_count":14,"outputs":[]},{"cell_type":"code","source":"STOCK_PRICES","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:24:53.233062Z","iopub.execute_input":"2021-10-09T12:24:53.234839Z","iopub.status.idle":"2021-10-09T12:24:53.260478Z"},"trusted":true},"execution_count":15,"outputs":[]},{"cell_type":"markdown","source":"## Reading Data into R","metadata":{}},{"cell_type":"markdown","source":"### 1. Read a CSV File into R","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"dataset <- read.table(file=\" \",header = TRUE, sep = \",\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Data Manipluation","metadata":{}},{"cell_type":"code","source":"dim(STOCK_PRICES )","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:21.200787Z","iopub.execute_input":"2021-10-09T12:16:21.202859Z","iopub.status.idle":"2021-10-09T12:16:21.224888Z"},"trusted":true},"execution_count":8,"outputs":[]},{"cell_type":"code","source":"head(STOCK_PRICES )","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:26.089604Z","iopub.execute_input":"2021-10-09T12:16:26.091545Z","iopub.status.idle":"2021-10-09T12:16:26.114797Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"code","source":"summary(STOCK_PRICES )","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:28.433758Z","iopub.execute_input":"2021-10-09T12:16:28.435883Z","iopub.status.idle":"2021-10-09T12:16:28.457663Z"},"trusted":true},"execution_count":10,"outputs":[]},{"cell_type":"markdown","source":"#### We ae slicing to find subsets columns of 5-7 of datasets","metadata":{}},{"cell_type":"code","source":"STOCK_PRICES [5,]\n# series","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:35.848118Z","iopub.execute_input":"2021-10-09T12:16:35.850327Z","iopub.status.idle":"2021-10-09T12:16:35.871805Z"},"trusted":true},"execution_count":11,"outputs":[]},{"cell_type":"code","source":"STOCK_PRICES [3:8,]","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:50.004019Z","iopub.execute_input":"2021-10-09T12:16:50.006116Z","iopub.status.idle":"2021-10-09T12:16:50.034007Z"},"trusted":true},"execution_count":12,"outputs":[]},{"cell_type":"code","source":"slice(STOCK_PRICE ,3:8)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:25:09.777288Z","iopub.execute_input":"2021-10-09T12:25:09.778989Z","iopub.status.idle":"2021-10-09T12:25:09.806709Z"},"trusted":true},"execution_count":16,"outputs":[]},{"cell_type":"markdown","source":"### Pip OPERATOR","metadata":{}},{"cell_type":"code","source":"STOCK_PRICE %>% slice(3:5)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:25:25.256136Z","iopub.execute_input":"2021-10-09T12:25:25.257863Z","iopub.status.idle":"2021-10-09T12:25:25.278594Z"},"trusted":true},"execution_count":18,"outputs":[]},{"cell_type":"markdown","source":"### SLICE SUBSETS the first n rows of dataframe and slice tail subsets the last n rows of dataframe","metadata":{}},{"cell_type":"code","source":"slice_head(STOCK_PRICE,n=2)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:25:55.079932Z","iopub.execute_input":"2021-10-09T12:25:55.081670Z","iopub.status.idle":"2021-10-09T12:25:55.103342Z"},"trusted":true},"execution_count":19,"outputs":[]},{"cell_type":"code","source":"slice_tail(STOCK_PRICE,n=2)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:26:04.997678Z","iopub.execute_input":"2021-10-09T12:26:04.999435Z","iopub.status.idle":"2021-10-09T12:26:05.021799Z"},"trusted":true},"execution_count":20,"outputs":[]},{"cell_type":"markdown","source":"### Slice_max subsets the n rows of a dataset with n largest value with respect to a variable","metadata":{}},{"cell_type":"code","source":"slice_max(STOCK_PRICE,EURO, n=3)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:26:29.905938Z","iopub.execute_input":"2021-10-09T12:26:29.907674Z","iopub.status.idle":"2021-10-09T12:26:29.934518Z"},"trusted":true},"execution_count":21,"outputs":[]},{"cell_type":"code","source":"slice_sample(STOCK_PRICE,n=5)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:26:42.047503Z","iopub.execute_input":"2021-10-09T12:26:42.049113Z","iopub.status.idle":"2021-10-09T12:26:42.071494Z"},"trusted":true},"execution_count":22,"outputs":[]},{"cell_type":"markdown","source":"## Filtering","metadata":{}},{"cell_type":"markdown","source":"### filters out the rows of dataframe which doesn't meet criteria","metadata":{}},{"cell_type":"code","source":"STOCK_PRICE[STOCK_PRICE$EURO>3.35,]","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:29:42.107479Z","iopub.execute_input":"2021-10-09T12:29:42.109116Z","iopub.status.idle":"2021-10-09T12:29:42.131224Z"},"trusted":true},"execution_count":30,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"## Grouping ","metadata":{}},{"cell_type":"markdown","source":"### group_by function group rows of data and frame with respect to one or more variabes","metadata":{}},{"cell_type":"code","source":"library(dplyr)","metadata":{"execution":{"iopub.status.busy":"2021-10-08T13:13:57.808888Z","iopub.execute_input":"2021-10-08T13:13:57.810559Z","iopub.status.idle":"2021-10-08T13:13:57.843966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df1 <- group_by(STOCK_PRICE,EURO)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:36:27.270590Z","iopub.execute_input":"2021-10-09T12:36:27.272456Z","iopub.status.idle":"2021-10-09T12:36:27.298281Z"},"trusted":true},"execution_count":40,"outputs":[]},{"cell_type":"code","source":"summarise(df1,mymean =mean(EURO))","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:36:38.887295Z","iopub.execute_input":"2021-10-09T12:36:38.889081Z","iopub.status.idle":"2021-10-09T12:36:38.919223Z"},"trusted":true},"execution_count":41,"outputs":[]},{"cell_type":"code","source":"df2<-group_by(df1,USD>3.2)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:36:53.022367Z","iopub.execute_input":"2021-10-09T12:36:53.023993Z","iopub.status.idle":"2021-10-09T12:36:53.051015Z"},"trusted":true},"execution_count":42,"outputs":[]},{"cell_type":"code","source":"summarise(df2,mymean = mean(USD))","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:05.348959Z","iopub.execute_input":"2021-10-09T12:37:05.350547Z","iopub.status.idle":"2021-10-09T12:37:05.374010Z"},"trusted":true},"execution_count":44,"outputs":[]},{"cell_type":"markdown","source":"## SELECT","metadata":{}},{"cell_type":"code","source":"df<-select(STOCK_PRICE,EURO,USD)\ndf","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:45.562234Z","iopub.execute_input":"2021-10-09T12:37:45.563814Z","iopub.status.idle":"2021-10-09T12:37:45.591553Z"},"trusted":true},"execution_count":47,"outputs":[]},{"cell_type":"code","source":"df<- select(df,-EURO)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:55.423706Z","iopub.execute_input":"2021-10-09T12:37:55.425323Z","iopub.status.idle":"2021-10-09T12:37:55.440506Z"},"trusted":true},"execution_count":48,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:58.655523Z","iopub.execute_input":"2021-10-09T12:37:58.657351Z","iopub.status.idle":"2021-10-09T12:37:58.687523Z"},"trusted":true},"execution_count":49,"outputs":[]},{"cell_type":"markdown","source":"## Arrange","metadata":{}},{"cell_type":"code","source":"df <- arrange(STOCK_PRICE, desc(USD))","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:19.525371Z","iopub.execute_input":"2021-10-09T12:38:19.526944Z","iopub.status.idle":"2021-10-09T12:38:19.545423Z"},"trusted":true},"execution_count":51,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:22.301574Z","iopub.execute_input":"2021-10-09T12:38:22.303359Z","iopub.status.idle":"2021-10-09T12:38:22.326992Z"},"trusted":true},"execution_count":52,"outputs":[]},{"cell_type":"code","source":"df <- arrange(STOCK_PRICE, desc(USD),EURO)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:45.428273Z","iopub.execute_input":"2021-10-09T12:38:45.429970Z","iopub.status.idle":"2021-10-09T12:38:45.446438Z"},"trusted":true},"execution_count":54,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:48.362531Z","iopub.execute_input":"2021-10-09T12:38:48.364239Z","iopub.status.idle":"2021-10-09T12:38:48.390254Z"},"trusted":true},"execution_count":55,"outputs":[]},{"cell_type":"code","source":"rename(STOCK_PRICE, DOLLAR = USD)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:39:28.495960Z","iopub.execute_input":"2021-10-09T12:39:28.497625Z","iopub.status.idle":"2021-10-09T12:39:28.525934Z"},"trusted":true},"execution_count":57,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]} \ No newline at end of file From 47982f02efa70b8387261ceca278f491541aa5e3 Mon Sep 17 00:00:00 2001 From: Heril Changwal Date: Sun, 10 Oct 2021 07:53:23 +0530 Subject: [PATCH 46/74] Added Hindi Translation --- .../translations/README.hi.md | 211 ++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 4-Data-Science-Lifecycle/16-communication/translations/README.hi.md diff --git a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md new file mode 100644 index 00000000..234072d7 --- /dev/null +++ b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md @@ -0,0 +1,211 @@ +# डेटा विज्ञान के जीवनचक्र: संचार +|![ द्वारा स्केचनोट [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/16-Communicating.png)| +|:---:| +| डेटा विज्ञान के जीवनचक्र: संचार - [@nitya](https://twitter.com/nitya)_द्वारा स्केचनोट _ | + +## [प्री-लेक्चर क्विज ](https://red-water-0103e7a0f.azurestaticapps.net/quiz/30) +ऊपर दिए गए प्री-लेक्चर क्विज़ के साथ क्या करना है, इसके बारे में अपने ज्ञान का परीक्षण करें! +### संचार क्या है? +आइए इस पाठ की शुरुआत यह परिभाषित करते हुए करें कि संचार के साधन क्या हैं। **संचार करना सूचनाओं को संप्रेषित करना या उनका आदान-प्रदान करना है।** सूचना विचार, विचार, भावनाएं, संदेश, गुप्त संकेत, डेटा हो सकती है - कुछ भी जो एक **_प्रेषक_** (सूचना भेजने वाला) एक **_रिसीवर_** चाहता है ( जानकारी प्राप्त करने वाला कोई व्यक्ति) समझने के लिए। इस पाठ में, हम प्रेषकों को संचारक के रूप में और रिसीवर को श्रोता के रूप में संदर्भित करेंगे। + +### डेटा संचार और कहानी सुनाना +हम समझते हैं कि संचार करते समय, उद्देश्य सूचना देना या आदान-प्रदान करना है। लेकिन डेटा का संचार करते समय, आपका उद्देश्य केवल अपने दर्शकों तक संख्या पहुँचाना नहीं होना चाहिए। आपका उद्देश्य एक ऐसी कहानी को संप्रेषित करना होना चाहिए जो आपके डेटा द्वारा सूचित हो - प्रभावी डेटा संचार और कहानी सुनाना साथ-साथ चलते हैं। आपके दर्शकों को आपके द्वारा दी गई संख्या की तुलना में आपके द्वारा बताई गई कहानी को याद रखने की अधिक संभावना है। इस पाठ में बाद में, हम कुछ ऐसे तरीकों के बारे में जानेंगे जिनसे आप अपने डेटा को अधिक प्रभावी ढंग से संप्रेषित करने के लिए कहानी कहने का उपयोग कर सकते हैं। + +### संचार के प्रकार +इस पूरे पाठ में दो अलग-अलग प्रकार के संचार पर चर्चा की जाएगी, वन-वे कम्युनिकेशन और टू-वे कम्युनिकेशन। + +**एक तरफा संचार** तब होता है जब कोई प्रेषक बिना किसी प्रतिक्रिया या प्रतिक्रिया के किसी प्राप्तकर्ता को सूचना भेजता है। हम हर दिन एक-तरफ़ा संचार के उदाहरण देखते हैं - बल्क/मास ईमेल में, जब समाचार सबसे हाल की कहानियाँ देता है, या यहाँ तक कि जब कोई टेलीविज़न विज्ञापन आता है और आपको सूचित करता है कि उनका उत्पाद बढ़िया क्यों है। इनमें से प्रत्येक उदाहरण में, प्रेषक सूचनाओं के आदान-प्रदान की मांग नहीं कर रहा है। वे केवल सूचना देना या देना चाहते हैं। + +**दोतरफा संचार** तब होता है जब सभी शामिल पक्ष प्रेषक और प्राप्तकर्ता दोनों के रूप में कार्य करते हैं। एक प्रेषक एक रिसीवर से संचार करके शुरू करेगा, और रिसीवर प्रतिक्रिया या प्रतिक्रिया प्रदान करेगा। जब हम संचार के बारे में बात करते हैं तो हम परंपरागत रूप से दोतरफा संचार के बारे में सोचते हैं। हम आम तौर पर बातचीत में लगे लोगों के बारे में सोचते हैं - या तो व्यक्तिगत रूप से, या फोन कॉल, सोशल मीडिया या टेक्स्ट संदेश पर। + +डेटा संचार करते समय, ऐसे मामले होंगे जहां आप एकतरफा संचार का उपयोग कर रहे होंगे (एक सम्मेलन में प्रस्तुत करने के बारे में सोचें, या एक बड़े समूह के लिए जहां सीधे प्रश्न नहीं पूछे जाएंगे) और ऐसे मामले होंगे जहां आप दो का उपयोग करेंगे -वे संचार (खरीद-इन के लिए कुछ हितधारकों को मनाने के लिए डेटा का उपयोग करने के बारे में सोचें, या किसी टीम के साथी को यह समझाने के लिए कि कुछ नया बनाने में समय और प्रयास खर्च किया जाना चाहिए)। + +# प्रभावी संचार + +### एक संचारक के रूप में आपकी जिम्मेदारियां +संचार करते समय, यह सुनिश्चित करना आपका काम है कि आपका रिसीवर वह जानकारी ले रहा है जिसे आप चाहते हैं कि वह ले जाए। जब आप डेटा का संचार कर रहे होते हैं, तो आप नहीं चाहते कि आपके रिसीवर नंबर ले लें, आप चाहते हैं कि आपके रिसीवर आपके डेटा द्वारा सूचित एक कहानी ले लें। एक अच्छा डेटा कम्युनिकेटर एक अच्छा कहानीकार होता है। + +आप डेटा के साथ कहानी कैसे सुनाते हैं? अनंत तरीके हैं - लेकिन नीचे 6 हैं जिनके बारे में हम इस पाठ में बात करेंगे। +1. अपने दर्शकों, अपने माध्यम और अपनी संचार पद्धति को समझें +2. मन में अंत के साथ शुरू करें +3. इसे एक वास्तविक कहानी की तरह देखें +4. सार्थक शब्दों और वाक्यांशों का प्रयोग करें +5. भावना का प्रयोग करें + +इनमें से प्रत्येक रणनीति को नीचे अधिक विस्तार से समझाया गया है। + +### 1. अपने दर्शकों, अपने चैनल और अपनी संचार पद्धति को समझें +जिस तरह से आप परिवार के सदस्यों के साथ संवाद करते हैं, वह आपके दोस्तों के साथ संवाद करने के तरीके से अलग होने की संभावना है। आप शायद अलग-अलग शब्दों और वाक्यांशों का उपयोग करते हैं जिन्हें आप जिन लोगों से बात कर रहे हैं, उनके समझने की अधिक संभावना है। डेटा संचार करते समय आपको वही दृष्टिकोण अपनाना चाहिए। इस बारे में सोचें कि आप किससे संवाद कर रहे हैं। उनके लक्ष्यों और उस संदर्भ के बारे में सोचें जो उनके पास उस स्थिति के आसपास है जो आप उन्हें समझा रहे हैं। + +आप संभावित रूप से अपने अधिकांश दर्शकों को एक श्रेणी में समूहित कर सकते हैं। एक _Harvard Business Review_ लेख में, "[डेटा के साथ कहानी कैसे सुनाएं] (http://blogs.hbr.org/2013/04/how-to-tell-a-story-with-data/)," डेल कार्यकारी रणनीतिकार जिम स्टिकलेदर दर्शकों की पांच श्रेणियों की पहचान करता है। + + - **नौसिखिया**: विषय के लिए पहला प्रदर्शन, लेकिन नहीं चाहता + अति सरलीकरण + - **सामान्यवादी**: विषय से अवगत हैं, लेकिन एक सिंहावलोकन की तलाश में हैं + समझ और प्रमुख विषय + - **प्रबंधकीय**: पेचीदगियों की गहन, कार्रवाई योग्य समझ और + विस्तार तक पहुंच के साथ अंतर्संबंध + - **विशेषज्ञ**: अधिक अन्वेषण और खोज और कम कहानी कहने के साथ + बहुत अच्छी जानकारी + - **कार्यकारी**: के पास केवल के महत्व और निष्कर्ष निकालने का समय है + भारित संभावनाएं + +ये श्रेणियां आपके दर्शकों को डेटा प्रस्तुत करने के तरीके की जानकारी दे सकती हैं। + +अपने दर्शकों की श्रेणी के बारे में सोचने के अलावा, आपको उस चैनल पर भी विचार करना चाहिए जिसका उपयोग आप अपने दर्शकों के साथ संवाद करने के लिए कर रहे हैं। यदि आप एक मेमो या ईमेल लिख रहे हैं या एक बैठक कर रहे हैं या एक सम्मेलन में प्रस्तुत कर रहे हैं तो आपका दृष्टिकोण थोड़ा अलग होना चाहिए। + +अपने दर्शकों को समझने के शीर्ष पर, यह जानना कि आप उनके साथ कैसे संवाद करेंगे (वन-वे कम्युनिकेशन या टू-वे का उपयोग करना) भी महत्वपूर्ण है। + +यदि आप अधिकांश नौसिखिए दर्शकों के साथ संवाद कर रहे हैं और आप एकतरफा संचार का उपयोग कर रहे हैं, तो आपको पहले दर्शकों को शिक्षित करना होगा और उन्हें उचित संदर्भ देना होगा। फिर आपको अपना डेटा उनके सामने पेश करना चाहिए और उन्हें बताना चाहिए कि आपके डेटा का क्या मतलब है और आपका डेटा क्यों मायने रखता है। इस उदाहरण में, आप स्पष्टता ड्राइविंग पर केंद्रित लेजर होना चाह सकते हैं, क्योंकि आपके दर्शक आपसे कोई सीधा प्रश्न नहीं पूछ पाएंगे। + +यदि आप बहुसंख्यक प्रबंधकीय दर्शकों के साथ संवाद कर रहे हैं और आप दो-तरफ़ा संचार का उपयोग कर रहे हैं, तो संभवतः आपको अपने दर्शकों को शिक्षित करने या उन्हें अधिक संदर्भ प्रदान करने की आवश्यकता नहीं होगी। आप सीधे उस डेटा पर चर्चा करने में सक्षम हो सकते हैं जिसे आपने एकत्र किया है और यह क्यों मायने रखता है। हालांकि इस परिदृश्य में, आपको समय और अपनी प्रस्तुति को नियंत्रित करने पर ध्यान केंद्रित करना चाहिए। दो-तरफा संचार का उपयोग करते समय (विशेषकर एक प्रबंधकीय दर्शकों के साथ जो "विस्तार तक पहुंच के साथ पेचीदगियों और अंतर्संबंधों की कार्रवाई योग्य समझ" की तलाश कर रहे हैं) प्रश्न आपकी बातचीत के दौरान पॉप अप हो सकते हैं जो चर्चा को उस दिशा में ले जा सकते हैं जो संबंधित नहीं है वह कहानी जिसे आप बताने की कोशिश कर रहे हैं। जब ऐसा होता है, तो आप कार्रवाई कर सकते हैं और अपनी कहानी के साथ चर्चा को वापस ट्रैक पर ले जा सकते हैं। + + +### 2. अंत को ध्यान में रखकर शुरू करें +अंत को ध्यान में रखकर शुरू करने का मतलब है कि आप अपने दर्शकों के साथ संवाद शुरू करने से पहले अपने इच्छित टेकअवे को समझना। आप अपने दर्शकों को समय से पहले क्या लेना चाहते हैं, इस बारे में विचारशील होने से आपको एक ऐसी कहानी तैयार करने में मदद मिल सकती है जिसका आपके दर्शक अनुसरण कर सकें। अंत को ध्यान में रखकर शुरू करना एकतरफा संचार और दोतरफा संचार दोनों के लिए उपयुक्त है। + +आप अंत को ध्यान में रखकर कैसे शुरू करते हैं? अपने डेटा को संप्रेषित करने से पहले, अपने मुख्य निष्कर्ष लिख लें। फिर, जिस तरह से आप कहानी तैयार कर रहे हैं, जिस तरह से आप अपने डेटा के साथ बताना चाहते हैं, अपने आप से पूछें, "यह मेरे द्वारा बताई जा रही कहानी में कैसे एकीकृत होता है?" + +सावधान रहें - अंत को ध्यान में रखते हुए शुरुआत करना आदर्श है, आप केवल उस डेटा को संप्रेषित नहीं करना चाहते जो आपके इच्छित takeaways का समर्थन करता है। ऐसा करने को चेरी-पिकिंग कहा जाता है, जो तब होता है जब एक संचारक केवल उस डेटा का संचार करता है जो उस बिंदु का समर्थन करता है जिसे वे बनाने के लिए बांध रहे हैं और अन्य सभी डेटा को अनदेखा करते हैं। + +यदि आपके द्वारा एकत्र किया गया सभी डेटा स्पष्ट रूप से आपके इच्छित टेकअवे का समर्थन करता है, तो बढ़िया। लेकिन अगर आपके द्वारा एकत्र किया गया डेटा है जो आपके टेकअवे का समर्थन नहीं करता है, या यहां तक ​​​​कि आपके प्रमुख टेकअवे के खिलाफ तर्क का समर्थन करता है, तो आपको उस डेटा को भी संप्रेषित करना चाहिए। अगर ऐसा होता है, तो अपने दर्शकों के साथ खुलकर बात करें और उन्हें बताएं कि आप अपनी कहानी के साथ बने रहने का विकल्प क्यों चुन रहे हैं, भले ही सभी डेटा इसका समर्थन न करें। + + +### 3. इसे एक वास्तविक कहानी की तरह देखें +एक पारंपरिक कहानी 5 चरणों में होती है। आपने इन चरणों को एक्सपोज़िशन, राइज़िंग एक्शन, क्लाइमेक्स, फॉलिंग एक्शन और डिनाउंसमेंट के रूप में व्यक्त किया होगा। या संदर्भ, संघर्ष, चरमोत्कर्ष, समापन, निष्कर्ष को याद रखना आसान है। अपने डेटा और अपनी कहानी को संप्रेषित करते समय, आप एक समान दृष्टिकोण अपना सकते हैं। + +आप संदर्भ के साथ शुरू कर सकते हैं, मंच सेट कर सकते हैं और सुनिश्चित कर सकते हैं कि आपके दर्शक एक ही पृष्ठ पर हैं। फिर संघर्ष का परिचय दें। आपको यह डेटा एकत्र करने की आवश्यकता क्यों पड़ी? आप किन समस्याओं को हल करना चाह रहे थे? इसके बाद क्लाइमेक्स. डेटा क्या है? डेटा का क्या मतलब है? डेटा हमें कौन से समाधान बताता है जिसकी हमें आवश्यकता है? फिर आप समापन पर पहुंच जाते हैं, जहां आप समस्या को दोहरा सकते हैं, और प्रस्तावित समाधान। अंत में, हम इस निष्कर्ष पर पहुँचते हैं, जहाँ आप अपने मुख्य निष्कर्षों को संक्षेप में बता सकते हैं और अगले कदम जो आप टीम को सुझाते हैं। + +### 4. सार्थक शब्दों और वाक्यांशों का प्रयोग करें +यदि आप और मैं किसी उत्पाद पर एक साथ काम कर रहे थे, और मैंने आपसे कहा "हमारे उपयोगकर्ता हमारे प्लेटफ़ॉर्म पर आने में लंबा समय लेते हैं," तो आप कब तक उस "लंबे समय" का अनुमान लगाएंगे? एक घंटा? एक सप्ताह? यह जानना कठिन है। क्या होगा अगर मैंने इसे पूरे दर्शकों से कहा? दर्शकों में हर कोई इस बारे में एक अलग विचार के साथ समाप्त हो सकता है कि उपयोगकर्ता हमारे प्लेटफॉर्म पर कितना समय लेते हैं। + +इसके बजाय, क्या होगा अगर मैंने कहा "बाहर के उपयोगकर्ताओं को साइन अप करने और हमारे प्लेटफॉर्म पर ऑनबोर्ड होने में औसतन 3 मिनट लगते हैं।" + +वह संदेश अधिक स्पष्ट है। डेटा संचार करते समय, यह सोचना आसान हो सकता है कि आपके दर्शकों में हर कोई आपकी तरह ही सोच रहा है। लेकिन हमेशा ऐसा ही नहीं होता है। अपने डेटा के बारे में स्पष्टता लाना और इसका क्या अर्थ है, एक संचारक के रूप में आपकी जिम्मेदारियों में से एक है। यदि डेटा या आपकी कहानी स्पष्ट नहीं है, तो आपके दर्शकों के लिए कठिन समय होगा, और इस बात की संभावना कम है कि वे आपकी मुख्य बातों को समझेंगे। + +जब आप अस्पष्ट शब्दों के बजाय अर्थपूर्ण शब्दों और वाक्यांशों का उपयोग करते हैं तो आप डेटा को अधिक स्पष्ट रूप से संप्रेषित कर सकते हैं। नीचे कुछ उदाहरण दिए गए हैं। + + - हमारे पास एक *प्रभावशाली* वर्ष था! +- एक व्यक्ति सोच सकता है कि एक प्रभावशाली मतलब राजस्व में 2% - 3% की वृद्धि है, और एक व्यक्ति सोच सकता है कि इसका मतलब 50% - 60% की वृद्धि है। + - हमारे उपयोगकर्ताओं की सफलता दर *नाटकीय रूप से* बढ़ी। +- नाटकीय वृद्धि कितनी बड़ी है? + - इस उपक्रम के लिए *महत्वपूर्ण* प्रयास की आवश्यकता होगी। +- कितना प्रयास महत्वपूर्ण है? + +अस्पष्ट शब्दों का उपयोग आने वाले अधिक डेटा के परिचय के रूप में या आपके द्वारा अभी-अभी बताई गई कहानी के सारांश के रूप में उपयोगी हो सकता है। लेकिन यह सुनिश्चित करने पर विचार करें कि आपकी प्रस्तुति का प्रत्येक भाग आपके दर्शकों के लिए स्पष्ट है। + + +### 5. भावना का प्रयोग करें +कहानी कहने में भावना महत्वपूर्ण है। जब आप डेटा के साथ कहानी सुना रहे हों तो यह और भी महत्वपूर्ण हो जाता है। जब आप डेटा का संचार कर रहे होते हैं, तो सब कुछ उन टेकअवे पर केंद्रित होता है जो आप चाहते हैं कि आपके दर्शक हों। जब आप दर्शकों के लिए एक भावना पैदा करते हैं तो यह उन्हें सहानुभूति रखने में मदद करता है, और उन्हें कार्रवाई करने की अधिक संभावना बनाता है। भावना इस संभावना को भी बढ़ाती है कि एक दर्शक आपके संदेश को याद रखेगा। + +इसका सामना आपने टीवी विज्ञापनों के साथ पहले भी किया होगा। कुछ विज्ञापन बहुत उदास होते हैं, और अपने दर्शकों से जुड़ने के लिए एक दुखद भावना का उपयोग करते हैं और जो डेटा वे प्रस्तुत कर रहे हैं उसे वास्तव में अलग बनाते हैं। या, कुछ विज्ञापन बहुत उत्साहित हैं और खुश हैं कि आप उनके डेटा को एक सुखद एहसास के साथ जोड़ सकते हैं। + +डेटा संचार करते समय आप भावनाओं का उपयोग कैसे करते हैं? नीचे कुछ तरीके दिए गए हैं। + + - प्रशंसापत्र और व्यक्तिगत कहानियों का प्रयोग करें +- डेटा एकत्र करते समय, मात्रात्मक और गुणात्मक दोनों डेटा एकत्र करने का प्रयास करें, और संचार करते समय दोनों प्रकार के डेटा को एकीकृत करें। यदि आपका डेटा मुख्य रूप से मात्रात्मक है, तो आपका डेटा आपको जो कुछ भी बता रहा है, उसके अनुभव के बारे में अधिक जानने के लिए व्यक्तियों से कहानियों की तलाश करें। + - इमेजरी का प्रयोग करें +- छवियां दर्शकों को खुद को एक स्थिति में देखने में मदद करती हैं। जब आप उपयोग करते हैं +छवियों, आप दर्शकों को उस भावना की ओर धकेल सकते हैं जो आप महसूस करते हैं +उनके पास आपके डेटा के बारे में होना चाहिए। + - रंग का प्रयोग करें +- अलग-अलग रंग अलग-अलग भावनाएं पैदा करते हैं। लोकप्रिय रंग और उनमें जो भावनाएँ पैदा होती हैं, वे नीचे हैं। ध्यान रखें कि विभिन्न संस्कृतियों में रंगों के अलग-अलग अर्थ हो सकते हैं। +- नीला आमतौर पर शांति और विश्वास की भावना पैदा करता है +- हरा आमतौर पर प्रकृति और पर्यावरण से संबंधित होता है +- लाल आमतौर पर जुनून और उत्साह होता है +- पीला आमतौर पर आशावाद और खुशी है + +# संचार केस स्टडी +एमर्सन एक मोबाइल ऐप के लिए एक उत्पाद प्रबंधक है। एमर्सन ने देखा है कि ग्राहक सप्ताहांत में 42% अधिक शिकायतें और बग रिपोर्ट प्रस्तुत करते हैं। एमर्सन ने यह भी देखा कि जो ग्राहक 48 घंटों के बाद अनुत्तरित शिकायत सबमिट करते हैं, उनके ऐप स्टोर में ऐप को 1 या 2 की रेटिंग देने की संभावना 32% अधिक होती है। + +शोध करने के बाद, इमर्सन के पास कुछ समाधान हैं जो इस मुद्दे का समाधान करेंगे। एमर्सन डेटा और प्रस्तावित समाधानों को संप्रेषित करने के लिए ३ कंपनी के साथ ३० मिनट की बैठक स्थापित करता है। + +इस बैठक के दौरान, एमर्सन का लक्ष्य कंपनी के प्रमुखों को यह समझाना है कि नीचे दिए गए 2 समाधान ऐप की रेटिंग में सुधार कर सकते हैं, जो संभवतः उच्च राजस्व में तब्दील हो जाएगा। + +**समाधान 1.** सप्ताहांत पर काम करने के लिए ग्राहक सेवा प्रतिनिधि को किराए पर लें + +**समाधान 2.** एक नई ग्राहक सेवा टिकटिंग प्रणाली खरीदें जहां ग्राहक सेवा प्रतिनिधि आसानी से पहचान सकें कि कौन सी शिकायतें कतार में सबसे लंबी रही हैं - ताकि वे बता सकें कि किसको तुरंत संबोधित करना है। + +मीटिंग में, एमर्सन 5 मिनट यह बताते हुए बिताते हैं कि ऐप स्टोर पर कम रेटिंग क्यों खराब है, 10 मिनट शोध प्रक्रिया की व्याख्या करते हैं और रुझानों की पहचान कैसे की जाती है, 10 मिनट हाल की कुछ ग्राहकों की शिकायतों के बारे में बताते हुए, और अंतिम 5 मिनट 2 संभावित समाधानों पर प्रकाश डालते हुए। + +क्या यह इमर्सन के लिए इस बैठक के दौरान संवाद करने का एक प्रभावी तरीका था? + +बैठक के दौरान, एक कंपनी लीड ने ग्राहकों की 10 मिनट की शिकायतों को ठीक किया, जिनसे इमर्सन गुजरा। बैठक के बाद, केवल यही शिकायतें इस टीम के नेतृत्व को याद रहीं। एक अन्य कंपनी लीड ने मुख्य रूप से एमर्सन पर शोध प्रक्रिया का वर्णन करने पर ध्यान केंद्रित किया। तीसरी कंपनी के नेतृत्व ने इमर्सन द्वारा प्रस्तावित समाधानों को याद किया लेकिन यह सुनिश्चित नहीं था कि उन समाधानों को कैसे लागू किया जा सकता है। + +ऊपर की स्थिति में, आप देख सकते हैं कि इमर्सन जो चाहता था कि टीम लीड ले ले, और बैठक से दूर ले जाने के बीच एक महत्वपूर्ण अंतर था। नीचे एक और तरीका है जिस पर इमर्सन विचार कर सकता है। + +इमर्सन इस दृष्टिकोण को कैसे सुधार सकता है? +प्रसंग, संघर्ष, चरमोत्कर्ष, समापन, निष्कर्ष +**संदर्भ** - इमर्सन पहले 5 मिनट पूरी स्थिति का परिचय देने और यह सुनिश्चित करने में बिता सकता है कि टीम लीड यह समझती है कि समस्याएं कंपनी के लिए महत्वपूर्ण मीट्रिक को कैसे प्रभावित करती हैं, जैसे राजस्व। + +इसे इस तरह से रखा जा सकता है: "वर्तमान में, ऐप स्टोर में हमारे ऐप की रेटिंग 2.5 है। ऐप स्टोर में रेटिंग ऐप स्टोर ऑप्टिमाइज़ेशन के लिए महत्वपूर्ण हैं, जो यह प्रभावित करती है कि कितने उपयोगकर्ता हमारे ऐप को खोज में देखते हैं, xxxxx डी हमारे ऐप को परिप्रेक्ष्य उपयोगकर्ताओं के लिए कैसे देखा जाता है। और निश्चित रूप से, हमारे पास जितने उपयोगकर्ता हैं, वे सीधे राजस्व से जुड़े हैं।" + +**संघर्ष** तब इमर्सन अगले 5 मिनट तक या संघर्ष के बारे में बात करने के लिए आगे बढ़ सकता है। + +यह इस प्रकार हो सकता है: "उपयोगकर्ता सप्ताहांत पर 42% अधिक शिकायतें और बग रिपोर्ट जमा करते हैं। जो ग्राहक 48 घंटों के बाद अनुत्तरित शिकायत सबमिट करते हैं, उनके ऐप स्टोर में हमारे ऐप को 2 से अधिक रेटिंग देने की संभावना 32% कम होती है। ऐप स्टोर में हमारे ऐप की रेटिंग को 4 तक बढ़ाने से हमारी दृश्यता में 20-30% की वृद्धि होगी, जिसका मेरा अनुमान है कि राजस्व में 10% की वृद्धि होगी।" बेशक, इमर्सन को इन नंबरों को सही ठहराने के लिए तैयार रहना चाहिए। + +**क्लाइमेक्स** आधार तैयार करने के बाद, इमर्सन 5 या इतने मिनट के लिए चरमोत्कर्ष पर जा सकता था। + +इमर्सन प्रस्तावित समाधानों को पेश कर सकता है, यह बता सकता है कि वे समाधान कैसे उल्लिखित मुद्दों को संबोधित करेंगे, उन समाधानों को मौजूदा वर्कफ़्लो में कैसे लागू किया जा सकता है, समाधानों की लागत कितनी है, समाधानों का आरओआई क्या होगा, और शायद कुछ स्क्रीनशॉट भी दिखा सकते हैं या लागू होने पर समाधान कैसे दिखेंगे, इसके वायरफ्रेम। एमर्सन उन उपयोगकर्ताओं के प्रशंसापत्र भी साझा कर सकते हैं, जिन्होंने अपनी शिकायत को संबोधित करने में 48 घंटे से अधिक समय लिया, और यहां तक ​​कि कंपनी के भीतर एक मौजूदा ग्राहक सेवा प्रतिनिधि से एक प्रशंसापत्र भी, जिसने वर्तमान टिकट प्रणाली पर टिप्पणी की है। + +**क्लोजर** अब इमर्सन कंपनी के सामने आने वाली समस्याओं को दूर करने में 5 मिनट बिता सकता है, प्रस्तावित समाधानों पर फिर से विचार कर सकता है और समीक्षा कर सकता है कि वे समाधान सही क्यों हैं। + +**निष्कर्ष** क्योंकि यह कुछ हितधारकों के साथ एक बैठक है जहां दो-तरफा संचार का उपयोग किया जाएगा, इमर्सन तब प्रश्नों के लिए 10 मिनट छोड़ने की योजना बना सकता है, यह सुनिश्चित करने के लिए कि जो कुछ भी टीम लीड को भ्रमित कर रहा था उसे पहले स्पष्ट किया जा सकता है बैठक समाप्त हो गई है। + +यदि एमर्सन ने #2 दृष्टिकोण अपनाया, तो इस बात की बहुत अधिक संभावना है कि टीम लीड मीटिंग से ठीक उसी तरह दूर ले जाएगी, जिसे एमर्सन ने उनसे दूर करने का इरादा किया था - कि जिस तरह से शिकायतों और बगों को संभाला जा सकता है, उसमें सुधार किया जा सकता है, और 2 समाधान हैं। उस सुधार को लाने के लिए स्थापित किया जा सकता है। यह दृष्टिकोण डेटा और कहानी को संप्रेषित करने के लिए एक अधिक प्रभावी दृष्टिकोण होगा, जिसे इमर्सन संवाद करना चाहता है। +# निष्कर्ष +### मुख्य बिंदुओं का सारांश + - संचार करने के लिए सूचना देना या आदान-प्रदान करना है। + - डेटा संप्रेषित करते समय, आपका उद्देश्य केवल अपने दर्शकों तक संख्या पहुँचाना नहीं होना चाहिए। आपका उद्देश्य एक ऐसी कहानी को संप्रेषित करना होना चाहिए जो आपके डेटा द्वारा सूचित हो। + - संचार 2 प्रकार के होते हैं, वन-वे कम्युनिकेशन (सूचना बिना किसी प्रतिक्रिया के संप्रेषित की जाती है) और टू-वे कम्युनिकेशन (सूचना को आगे और पीछे संप्रेषित किया जाता है।) + - ऐसी कई रणनीतियाँ हैं जिनका उपयोग आप अपने डेटा के साथ कहानी कहने के लिए कर सकते हैं, 5 रणनीतियाँ जिनका हमने अध्ययन किया है: +- अपने दर्शकों, अपने माध्यम और अपनी संचार पद्धति को समझें +- मन में कार्य समाप्ति का विचार लेकर कार्य प्रारंभ करना +- इसे एक वास्तविक कहानी की तरह देखें +- सार्थक शब्दों और वाक्यांशों का प्रयोग करें +- भावना का प्रयोग करें + +## [व्याख्यान के बाद प्रश्नोत्तरी](https://red-water-0103e7a0f.azurestaticapps.net/quiz/31) + +### स्व अध्ययन के लिए अनुशंसित संसाधन +[द फाइव सी ऑफ़ स्टोरीटेलिंग - आर्टिक्यूलेट पर्सुएशन](http://articlepersuasion.com/the-five-cs-of-storytelling/) + +[१.४ एक संचारक के रूप में आपकी जिम्मेदारियां - सफलता के लिए व्यावसायिक संचार (umn.edu)](https://open.lib.umn.edu/businesscommunication/chapter/1-4-your-responsibility-as-a-communicator/) + +[डेटा के साथ कहानी कैसे सुनाएं (hbr.org)](https://hbr.org/2013/04/how-to-tell-a-story-with-data) + +[टू-वे कम्युनिकेशन: अधिक व्यस्त कार्यस्थल के लिए 4 टिप्स (yourविचारपार्टनर.कॉम)](https://www.your Thoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through- दो तरफ से संचार) + +[महान डेटा स्टोरीटेलिंग के लिए 6 संक्षिप्त चरण - बार्नराइज़र, एलएलसी (barnraisersllc.com)](https://barnraisersllc.com/2021/05/02/6-succinct-steps-to-great-data-storytelling/) + +[डेटा के साथ कहानी कैसे सुनाएं | ल्यूसिडचार्ट ब्लॉग](https://www.lucidchart.com/blog/how-to-tell-a-story-with-data) + +[6 Cs ऑफ़ इफेक्टिव स्टोरीटेलिंग ऑन सोशल मीडिया | कूलर इनसाइट्स](https://coolerinsights.com/2018/06/efffect-storytelling-social-media/) + +[प्रस्तुतिकरण में भावनाओं का महत्व | Ethos3 - एक प्रस्तुति प्रशिक्षण और डिजाइन एजेंसी](https://ethos3.com/2015/02/the-importance-of-emotions-in-presentations/) + +[डेटा स्टोरीटेलिंग: भावनाओं और तर्कसंगत निर्णयों को जोड़ना (toucantoco.com)](https://www.toucantoco.com/en/blog/data-storytelling-dataviz) + +[भावनात्मक विज्ञापन: कैसे ब्रांड लोगों को खरीदने के लिए भावनाओं का उपयोग करते हैं (hubspot.com)](https://blog.hubspot.com/marketing/emotions-in-advertising-examples) + +[अपनी प्रस्तुति स्लाइड के लिए रंग चुनना | स्लाइड के बाहर सोचें](https://www.thinkoutsidetheslide.com/choosing-colors-for-your-presentation-slides/) + +[डेटा कैसे प्रस्तुत करें [१० विशेषज्ञ युक्तियाँ] | ऑब्जर्वप्वाइंट](https://resources.observepoint.com/blog/10-tips-for-presenting-data) + +[माइक्रोसॉफ्ट वर्ड - प्रेरक निर्देश.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf) + +[द पावर ऑफ स्टोरी फॉर योर डेटा (थिंकहडी.कॉम)](https://www.thinkhdi.com/library/supportworld/2019/power-story-your-data.aspx) + +[डेटा प्रस्तुति में सामान्य गलतियाँ (perceptualedge.com)](https://www.perceptualedge.com/articles/ie/data_presentation.pdf) + +[इन्फोग्राफिक: यहां से बचने के लिए 15 सामान्य डेटा गलतियाँ हैं (visualcapitalist.com)](https://www.visualcapitalist.com/here-are-15-common-data-fallacies-to-avoid/) + +[चेरी पिकिंग: जब लोग उन सबूतों को नज़रअंदाज़ करते हैं जो वे नापसंद करते हैं - प्रभाव विज्ञान](https://effectiviology.com/cherry-picking/#How_to_avoid_cherry_picking) + +[डेटा के साथ कहानियां सुनाएं: डेटा साइंस में संचार | द्वारा सोनाली वर्गीज | टूवर्ड्स डेटा साइंस](https://towardsdatascience.com/tell-stories-with-data-communication-in-data-science-5266f7671d7) + +[१. संचार डेटा - झांकी के साथ संचार डेटा [पुस्तक] (oreilly.com)](https://www.oreilly.com/library/view/communicating-data-with/9781449372019/ch01.html) + +## कार्यभार + +[एक कहानी बताओ] (assignment.md) \ No newline at end of file From f4567ed623f74e68bf518d44c8f11af4fb098fe2 Mon Sep 17 00:00:00 2001 From: Keshav Sharma <61562452+keshav340@users.noreply.github.com> Date: Sat, 9 Oct 2021 20:21:44 -0700 Subject: [PATCH 47/74] Delete bonus-lesson.ipynb --- 2-Working-With-Data/07-python/bonus-lesson.ipynb | 1 - 1 file changed, 1 deletion(-) delete mode 100644 2-Working-With-Data/07-python/bonus-lesson.ipynb diff --git a/2-Working-With-Data/07-python/bonus-lesson.ipynb b/2-Working-With-Data/07-python/bonus-lesson.ipynb deleted file mode 100644 index 44dcbb39..00000000 --- a/2-Working-With-Data/07-python/bonus-lesson.ipynb +++ /dev/null @@ -1 +0,0 @@ -{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This R environment comes with many helpful analytics packages installed\n# It is defined by the kaggle/rstats Docker image: https://github.com/kaggle/docker-rstats\n# For example, here's a helpful package to load\n\nlibrary(tidyverse) # metapackage of all tidyverse packages\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nlist.files(path = \"../input\")\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","execution":{"iopub.status.busy":"2021-10-08T18:11:24.952103Z","iopub.execute_input":"2021-10-08T18:11:24.954562Z","iopub.status.idle":"2021-10-08T18:11:26.309552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"library(zoo)\nlibrary(dplyr)\nlibrary(ggplot2)\nlibrary(ggfortify)\nlibrary(dplyr)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:15:22.966831Z","iopub.execute_input":"2021-10-09T12:15:22.968941Z","iopub.status.idle":"2021-10-09T12:15:23.546202Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"markdown","source":"## Series","metadata":{}},{"cell_type":"markdown","source":"### Series is like a list or 1D-array, but with index.It is generally used to represent data associated with time.","metadata":{}},{"cell_type":"code","source":"stock_prices = c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)\nstock_prices_glennmark = ts(stock_prices,start = c(2020,1,1),frequency = 12)\nstock_prices_glennmark\nplot(stock_prices_glennmark)\n","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:15:54.612622Z","iopub.execute_input":"2021-10-09T12:15:54.735899Z","iopub.status.idle":"2021-10-09T12:15:55.008804Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"# CREATING A TIME SERIES\nrandomData<- rnorm(100)\nmonth <- ts(randomData,start=c(2020,1),frequency=12)\nplot(month)\n## it bit much longer a it is 100/4 takes much longer year","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:03.558553Z","iopub.execute_input":"2021-10-09T12:16:03.560254Z","iopub.status.idle":"2021-10-09T12:16:03.679285Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"markdown","source":"**DataFrame**\n#### It is a two dimensional data structure in which data is inserted in tabular form.","metadata":{}},{"cell_type":"code","source":"STOCK_PRICE <- data.frame(\nUSD=c(1.02,1.085,2.05,3.45,4.05,5.32,3.45,4.65,6.65,9.23,10.25,12.69),\nEURO = c(0.85,1.02,1.85,3.02,3.35,4.35,2.65,3.95,5.55,8.90,9.80,11.50))\nSTOCK_PRICES <- ts(STOCK_PRICE,start = c(2020,1,1),frequency = 12)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:24:50.750390Z","iopub.execute_input":"2021-10-09T12:24:50.752297Z","iopub.status.idle":"2021-10-09T12:24:50.767609Z"},"trusted":true},"execution_count":14,"outputs":[]},{"cell_type":"code","source":"STOCK_PRICES","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:24:53.233062Z","iopub.execute_input":"2021-10-09T12:24:53.234839Z","iopub.status.idle":"2021-10-09T12:24:53.260478Z"},"trusted":true},"execution_count":15,"outputs":[]},{"cell_type":"markdown","source":"## Reading Data into R","metadata":{}},{"cell_type":"markdown","source":"### 1. Read a CSV File into R","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"dataset <- read.table(file=\" \",header = TRUE, sep = \",\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Data Manipluation","metadata":{}},{"cell_type":"code","source":"dim(STOCK_PRICES )","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:21.200787Z","iopub.execute_input":"2021-10-09T12:16:21.202859Z","iopub.status.idle":"2021-10-09T12:16:21.224888Z"},"trusted":true},"execution_count":8,"outputs":[]},{"cell_type":"code","source":"head(STOCK_PRICES )","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:26.089604Z","iopub.execute_input":"2021-10-09T12:16:26.091545Z","iopub.status.idle":"2021-10-09T12:16:26.114797Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"code","source":"summary(STOCK_PRICES )","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:28.433758Z","iopub.execute_input":"2021-10-09T12:16:28.435883Z","iopub.status.idle":"2021-10-09T12:16:28.457663Z"},"trusted":true},"execution_count":10,"outputs":[]},{"cell_type":"markdown","source":"#### We ae slicing to find subsets columns of 5-7 of datasets","metadata":{}},{"cell_type":"code","source":"STOCK_PRICES [5,]\n# series","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:35.848118Z","iopub.execute_input":"2021-10-09T12:16:35.850327Z","iopub.status.idle":"2021-10-09T12:16:35.871805Z"},"trusted":true},"execution_count":11,"outputs":[]},{"cell_type":"code","source":"STOCK_PRICES [3:8,]","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:16:50.004019Z","iopub.execute_input":"2021-10-09T12:16:50.006116Z","iopub.status.idle":"2021-10-09T12:16:50.034007Z"},"trusted":true},"execution_count":12,"outputs":[]},{"cell_type":"code","source":"slice(STOCK_PRICE ,3:8)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:25:09.777288Z","iopub.execute_input":"2021-10-09T12:25:09.778989Z","iopub.status.idle":"2021-10-09T12:25:09.806709Z"},"trusted":true},"execution_count":16,"outputs":[]},{"cell_type":"markdown","source":"### Pip OPERATOR","metadata":{}},{"cell_type":"code","source":"STOCK_PRICE %>% slice(3:5)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:25:25.256136Z","iopub.execute_input":"2021-10-09T12:25:25.257863Z","iopub.status.idle":"2021-10-09T12:25:25.278594Z"},"trusted":true},"execution_count":18,"outputs":[]},{"cell_type":"markdown","source":"### SLICE SUBSETS the first n rows of dataframe and slice tail subsets the last n rows of dataframe","metadata":{}},{"cell_type":"code","source":"slice_head(STOCK_PRICE,n=2)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:25:55.079932Z","iopub.execute_input":"2021-10-09T12:25:55.081670Z","iopub.status.idle":"2021-10-09T12:25:55.103342Z"},"trusted":true},"execution_count":19,"outputs":[]},{"cell_type":"code","source":"slice_tail(STOCK_PRICE,n=2)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:26:04.997678Z","iopub.execute_input":"2021-10-09T12:26:04.999435Z","iopub.status.idle":"2021-10-09T12:26:05.021799Z"},"trusted":true},"execution_count":20,"outputs":[]},{"cell_type":"markdown","source":"### Slice_max subsets the n rows of a dataset with n largest value with respect to a variable","metadata":{}},{"cell_type":"code","source":"slice_max(STOCK_PRICE,EURO, n=3)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:26:29.905938Z","iopub.execute_input":"2021-10-09T12:26:29.907674Z","iopub.status.idle":"2021-10-09T12:26:29.934518Z"},"trusted":true},"execution_count":21,"outputs":[]},{"cell_type":"code","source":"slice_sample(STOCK_PRICE,n=5)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:26:42.047503Z","iopub.execute_input":"2021-10-09T12:26:42.049113Z","iopub.status.idle":"2021-10-09T12:26:42.071494Z"},"trusted":true},"execution_count":22,"outputs":[]},{"cell_type":"markdown","source":"## Filtering","metadata":{}},{"cell_type":"markdown","source":"### filters out the rows of dataframe which doesn't meet criteria","metadata":{}},{"cell_type":"code","source":"STOCK_PRICE[STOCK_PRICE$EURO>3.35,]","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:29:42.107479Z","iopub.execute_input":"2021-10-09T12:29:42.109116Z","iopub.status.idle":"2021-10-09T12:29:42.131224Z"},"trusted":true},"execution_count":30,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"## Grouping ","metadata":{}},{"cell_type":"markdown","source":"### group_by function group rows of data and frame with respect to one or more variabes","metadata":{}},{"cell_type":"code","source":"library(dplyr)","metadata":{"execution":{"iopub.status.busy":"2021-10-08T13:13:57.808888Z","iopub.execute_input":"2021-10-08T13:13:57.810559Z","iopub.status.idle":"2021-10-08T13:13:57.843966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df1 <- group_by(STOCK_PRICE,EURO)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:36:27.270590Z","iopub.execute_input":"2021-10-09T12:36:27.272456Z","iopub.status.idle":"2021-10-09T12:36:27.298281Z"},"trusted":true},"execution_count":40,"outputs":[]},{"cell_type":"code","source":"summarise(df1,mymean =mean(EURO))","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:36:38.887295Z","iopub.execute_input":"2021-10-09T12:36:38.889081Z","iopub.status.idle":"2021-10-09T12:36:38.919223Z"},"trusted":true},"execution_count":41,"outputs":[]},{"cell_type":"code","source":"df2<-group_by(df1,USD>3.2)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:36:53.022367Z","iopub.execute_input":"2021-10-09T12:36:53.023993Z","iopub.status.idle":"2021-10-09T12:36:53.051015Z"},"trusted":true},"execution_count":42,"outputs":[]},{"cell_type":"code","source":"summarise(df2,mymean = mean(USD))","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:05.348959Z","iopub.execute_input":"2021-10-09T12:37:05.350547Z","iopub.status.idle":"2021-10-09T12:37:05.374010Z"},"trusted":true},"execution_count":44,"outputs":[]},{"cell_type":"markdown","source":"## SELECT","metadata":{}},{"cell_type":"code","source":"df<-select(STOCK_PRICE,EURO,USD)\ndf","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:45.562234Z","iopub.execute_input":"2021-10-09T12:37:45.563814Z","iopub.status.idle":"2021-10-09T12:37:45.591553Z"},"trusted":true},"execution_count":47,"outputs":[]},{"cell_type":"code","source":"df<- select(df,-EURO)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:55.423706Z","iopub.execute_input":"2021-10-09T12:37:55.425323Z","iopub.status.idle":"2021-10-09T12:37:55.440506Z"},"trusted":true},"execution_count":48,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:37:58.655523Z","iopub.execute_input":"2021-10-09T12:37:58.657351Z","iopub.status.idle":"2021-10-09T12:37:58.687523Z"},"trusted":true},"execution_count":49,"outputs":[]},{"cell_type":"markdown","source":"## Arrange","metadata":{}},{"cell_type":"code","source":"df <- arrange(STOCK_PRICE, desc(USD))","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:19.525371Z","iopub.execute_input":"2021-10-09T12:38:19.526944Z","iopub.status.idle":"2021-10-09T12:38:19.545423Z"},"trusted":true},"execution_count":51,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:22.301574Z","iopub.execute_input":"2021-10-09T12:38:22.303359Z","iopub.status.idle":"2021-10-09T12:38:22.326992Z"},"trusted":true},"execution_count":52,"outputs":[]},{"cell_type":"code","source":"df <- arrange(STOCK_PRICE, desc(USD),EURO)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:45.428273Z","iopub.execute_input":"2021-10-09T12:38:45.429970Z","iopub.status.idle":"2021-10-09T12:38:45.446438Z"},"trusted":true},"execution_count":54,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:38:48.362531Z","iopub.execute_input":"2021-10-09T12:38:48.364239Z","iopub.status.idle":"2021-10-09T12:38:48.390254Z"},"trusted":true},"execution_count":55,"outputs":[]},{"cell_type":"code","source":"rename(STOCK_PRICE, DOLLAR = USD)","metadata":{"execution":{"iopub.status.busy":"2021-10-09T12:39:28.495960Z","iopub.execute_input":"2021-10-09T12:39:28.497625Z","iopub.status.idle":"2021-10-09T12:39:28.525934Z"},"trusted":true},"execution_count":57,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]} \ No newline at end of file From 8028c0f6717b28b50625700323acafb195145473 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Sat, 9 Oct 2021 20:24:19 -0700 Subject: [PATCH 48/74] Create pandas.ipynb --- 2-Working-With-Data/R/pandas.ipynb | 936 +++++++++++++++++++++++++++++ 1 file changed, 936 insertions(+) create mode 100644 2-Working-With-Data/R/pandas.ipynb diff --git a/2-Working-With-Data/R/pandas.ipynb b/2-Working-With-Data/R/pandas.ipynb new file mode 100644 index 00000000..323f0133 --- /dev/null +++ b/2-Working-With-Data/R/pandas.ipynb @@ -0,0 +1,936 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 73, + "id": "c105e391", + "metadata": {}, + "outputs": [], + "source": [ + "library(dplyr)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "markdown", + "id": "00c41f19", + "metadata": {}, + "source": [ + "## Series" + ] + }, + { + "cell_type": "markdown", + "id": "d3490356", + "metadata": {}, + "source": [ + "a<- 1:9" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "2ef3725d", + "metadata": {}, + "outputs": [], + "source": [ + "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "14e6152d", + "metadata": {}, + "outputs": [], + "source": [ + "a1 = length(a)\n", + "b1 = length(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "432b0c2b", + "metadata": {}, + "outputs": [], + "source": [ + "a = data.frame(a,row.names = c(1:a1))" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "adb4391f", + "metadata": {}, + "outputs": [], + "source": [ + "b = data.frame(b,row.names = c(1:b1))" + ] + }, + { + "cell_type": "markdown", + "id": "9d27aa12", + "metadata": {}, + "source": [ + "idx<- seq.Date(from = as.Date(\"20-01-01\"), to = as.Date(\"2001-03-31\"), by = \"day\",)\n", + "print(length(idx))\n" + ] + }, + { + "cell_type": "markdown", + "id": "ee4be842", + "metadata": {}, + "source": [ + "## DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "id": "a8585654", + "metadata": {}, + "outputs": [], + "source": [ + "a = data.frame(a,row.names = c(1:a1))" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "id": "2b8c18b3", + "metadata": {}, + "outputs": [], + "source": [ + "b = data.frame(b,row.names = c(1:b1))" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "60b643d5", + "metadata": {}, + "outputs": [ + { + "ename": "ERROR", + "evalue": "Error in bar.plot(data): could not find function \"bar.plot\"\n", + "output_type": "error", + "traceback": [ + "Error in bar.plot(data): could not find function \"bar.plot\"\nTraceback:\n" + ] + } + ], + "source": [ + "bar.plot(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "113578b5", + "metadata": {}, + "outputs": [], + "source": [ + "df <- data.frame(a,b)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "ef1dff63", + "metadata": {}, + "outputs": [], + "source": [ + "df = df %>% \n", + " rename(\n", + " A = a,\n", + " B = b\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "1d80bf43", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" + ], + "text/latex": [ + "A data.frame: 9 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like \\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\t5 & 5 & Python\\\\\n", + "\t6 & 6 & and \\\\\n", + "\t7 & 7 & Pandas\\\\\n", + "\t8 & 8 & very \\\\\n", + "\t9 & 9 & much \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "| 5 | 5 | Python |\n", + "| 6 | 6 | and |\n", + "| 7 | 7 | Pandas |\n", + "| 8 | 8 | very |\n", + "| 9 | 9 | much |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like \n", + "3 3 to \n", + "4 4 use \n", + "5 5 Python\n", + "6 6 and \n", + "7 7 Pandas\n", + "8 8 very \n", + "9 9 much " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "831630d7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Column A (series):\n" + ] + }, + { + "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", + "\n", + "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" + ], + "text/latex": [ + "A data.frame: 9 × 1\n", + "\\begin{tabular}{r|l}\n", + " & A\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t1 & 1\\\\\n", + "\t2 & 2\\\\\n", + "\t3 & 3\\\\\n", + "\t4 & 4\\\\\n", + "\t5 & 5\\\\\n", + "\t6 & 6\\\\\n", + "\t7 & 7\\\\\n", + "\t8 & 8\\\\\n", + "\t9 & 9\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 1\n", + "\n", + "| | A <int> |\n", + "|---|---|\n", + "| 1 | 1 |\n", + "| 2 | 2 |\n", + "| 3 | 3 |\n", + "| 4 | 4 |\n", + "| 5 | 5 |\n", + "| 6 | 6 |\n", + "| 7 | 7 |\n", + "| 8 | 8 |\n", + "| 9 | 9 |\n", + "\n" + ], + "text/plain": [ + " A\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "5 5\n", + "6 6\n", + "7 7\n", + "8 8\n", + "9 9" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cat(\"Column A (series):\\n\")\n", + "select(df,'A')" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "055bc484", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" + ], + "text/latex": [ + "A data.frame: 4 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like\\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like\n", + "3 3 to \n", + "4 4 use " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A<5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "05c2c45a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" + ], + "text/latex": [ + "A data.frame: 1 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t6 & 6 & and\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 1 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 6 | 6 | and |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "6 6 and" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A>5 & df$A<7,]" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "ac8a234f", + "metadata": {}, + "outputs": [], + "source": [ + "df$DivA <- df$A - mean(df$A)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "fb7ee6bd", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" + ], + "text/latex": [ + "A data.frame: 9 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & A & B & DivA\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4\\\\\n", + "\t2 & 2 & like & -3\\\\\n", + "\t3 & 3 & to & -2\\\\\n", + "\t4 & 4 & use & -1\\\\\n", + "\t5 & 5 & Python & 0\\\\\n", + "\t6 & 6 & and & 1\\\\\n", + "\t7 & 7 & Pandas & 2\\\\\n", + "\t8 & 8 & very & 3\\\\\n", + "\t9 & 9 & much & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 3\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> |\n", + "|---|---|---|---|\n", + "| 1 | 1 | I | -4 |\n", + "| 2 | 2 | like | -3 |\n", + "| 3 | 3 | to | -2 |\n", + "| 4 | 4 | use | -1 |\n", + "| 5 | 5 | Python | 0 |\n", + "| 6 | 6 | and | 1 |\n", + "| 7 | 7 | Pandas | 2 |\n", + "| 8 | 8 | very | 3 |\n", + "| 9 | 9 | much | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA\n", + "1 1 I -4 \n", + "2 2 like -3 \n", + "3 3 to -2 \n", + "4 4 use -1 \n", + "5 5 Python 0 \n", + "6 6 and 1 \n", + "7 7 Pandas 2 \n", + "8 8 very 3 \n", + "9 9 much 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "62e9c8dd", + "metadata": {}, + "outputs": [], + "source": [ + "df$LenB <- str_length(df$B)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "849c33cc", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" + ], + "text/latex": [ + "A data.frame: 9 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\t7 & 7 & Pandas & 2 & 6\\\\\n", + "\t8 & 8 & very & 3 & 4\\\\\n", + "\t9 & 9 & much & 4 & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "| 7 | 7 | Pandas | 2 | 6 |\n", + "| 8 | 8 | very | 3 | 4 |\n", + "| 9 | 9 | much | 4 | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 \n", + "7 7 Pandas 2 6 \n", + "8 8 very 3 4 \n", + "9 9 much 4 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "0a65495d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" + ], + "text/latex": [ + "A data.frame: 5 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 5 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[0:5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "ccebdda2", + "metadata": {}, + "outputs": [], + "source": [ + " df1 = group_by(df,LenB)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "f2dcb719", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
LenBmymean
<int><dbl>
11
22
33
44
66
\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " LenB & mymean\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t 1 & 1\\\\\n", + "\t 2 & 2\\\\\n", + "\t 3 & 3\\\\\n", + "\t 4 & 4\\\\\n", + "\t 6 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| LenB <int> | mymean <dbl> |\n", + "|---|---|\n", + "| 1 | 1 |\n", + "| 2 | 2 |\n", + "| 3 | 3 |\n", + "| 4 | 4 |\n", + "| 6 | 6 |\n", + "\n" + ], + "text/plain": [ + " LenB mymean\n", + "1 1 1 \n", + "2 2 2 \n", + "3 3 3 \n", + "4 4 4 \n", + "5 6 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "summarise(df1,mymean =mean(LenB))" + ] + }, + { + "cell_type": "markdown", + "id": "d8eb00bc", + "metadata": {}, + "source": [ + "## Printing and Plotting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b96b6be0", + "metadata": {}, + "outputs": [], + "source": [ + "dataset = read.csv(\"file name\")" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "3b1a4735", + "metadata": {}, + "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", + "\n", + "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "id": "0af4e0e5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\n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\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "08103a39", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\n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\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "barplot(df$A, ylab = 'A',xlab = 'no')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768d4300", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.1.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 55670f0bcd4bdfc4b90731a5cfbdcdc8fad2740e Mon Sep 17 00:00:00 2001 From: Keshav Sharma <61562452+keshav340@users.noreply.github.com> Date: Sat, 9 Oct 2021 20:26:17 -0700 Subject: [PATCH 49/74] Delete 2-Working-With-Data/R directory --- 2-Working-With-Data/R/pandas.ipynb | 936 ----------------------------- 1 file changed, 936 deletions(-) delete mode 100644 2-Working-With-Data/R/pandas.ipynb diff --git a/2-Working-With-Data/R/pandas.ipynb b/2-Working-With-Data/R/pandas.ipynb deleted file mode 100644 index 323f0133..00000000 --- a/2-Working-With-Data/R/pandas.ipynb +++ /dev/null @@ -1,936 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 73, - "id": "c105e391", - "metadata": {}, - "outputs": [], - "source": [ - "library(dplyr)\n", - "library(tidyverse)" - ] - }, - { - "cell_type": "markdown", - "id": "00c41f19", - "metadata": {}, - "source": [ - "## Series" - ] - }, - { - "cell_type": "markdown", - "id": "d3490356", - "metadata": {}, - "source": [ - "a<- 1:9" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "2ef3725d", - "metadata": {}, - "outputs": [], - "source": [ - "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "14e6152d", - "metadata": {}, - "outputs": [], - "source": [ - "a1 = length(a)\n", - "b1 = length(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "432b0c2b", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "adb4391f", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "markdown", - "id": "9d27aa12", - "metadata": {}, - "source": [ - "idx<- seq.Date(from = as.Date(\"20-01-01\"), to = as.Date(\"2001-03-31\"), by = \"day\",)\n", - "print(length(idx))\n" - ] - }, - { - "cell_type": "markdown", - "id": "ee4be842", - "metadata": {}, - "source": [ - "## DataFrame" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "a8585654", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "2b8c18b3", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "60b643d5", - "metadata": {}, - "outputs": [ - { - "ename": "ERROR", - "evalue": "Error in bar.plot(data): could not find function \"bar.plot\"\n", - "output_type": "error", - "traceback": [ - "Error in bar.plot(data): could not find function \"bar.plot\"\nTraceback:\n" - ] - } - ], - "source": [ - "bar.plot(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "113578b5", - "metadata": {}, - "outputs": [], - "source": [ - "df <- data.frame(a,b)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "ef1dff63", - "metadata": {}, - "outputs": [], - "source": [ - "df = df %>% \n", - " rename(\n", - " A = a,\n", - " B = b\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "1d80bf43", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" - ], - "text/latex": [ - "A data.frame: 9 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like \\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\t5 & 5 & Python\\\\\n", - "\t6 & 6 & and \\\\\n", - "\t7 & 7 & Pandas\\\\\n", - "\t8 & 8 & very \\\\\n", - "\t9 & 9 & much \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "| 5 | 5 | Python |\n", - "| 6 | 6 | and |\n", - "| 7 | 7 | Pandas |\n", - "| 8 | 8 | very |\n", - "| 9 | 9 | much |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like \n", - "3 3 to \n", - "4 4 use \n", - "5 5 Python\n", - "6 6 and \n", - "7 7 Pandas\n", - "8 8 very \n", - "9 9 much " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "831630d7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Column A (series):\n" - ] - }, - { - "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", - "\n", - "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" - ], - "text/latex": [ - "A data.frame: 9 × 1\n", - "\\begin{tabular}{r|l}\n", - " & A\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t1 & 1\\\\\n", - "\t2 & 2\\\\\n", - "\t3 & 3\\\\\n", - "\t4 & 4\\\\\n", - "\t5 & 5\\\\\n", - "\t6 & 6\\\\\n", - "\t7 & 7\\\\\n", - "\t8 & 8\\\\\n", - "\t9 & 9\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 1\n", - "\n", - "| | A <int> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 5 | 5 |\n", - "| 6 | 6 |\n", - "| 7 | 7 |\n", - "| 8 | 8 |\n", - "| 9 | 9 |\n", - "\n" - ], - "text/plain": [ - " A\n", - "1 1\n", - "2 2\n", - "3 3\n", - "4 4\n", - "5 5\n", - "6 6\n", - "7 7\n", - "8 8\n", - "9 9" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cat(\"Column A (series):\\n\")\n", - "select(df,'A')" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "055bc484", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" - ], - "text/latex": [ - "A data.frame: 4 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like\\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 4 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like\n", - "3 3 to \n", - "4 4 use " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A<5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "05c2c45a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\n", - "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" - ], - "text/latex": [ - "A data.frame: 1 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t6 & 6 & and\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 1 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 6 | 6 | and |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "6 6 and" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A>5 & df$A<7,]" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "ac8a234f", - "metadata": {}, - "outputs": [], - "source": [ - "df$DivA <- df$A - mean(df$A)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "fb7ee6bd", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" - ], - "text/latex": [ - "A data.frame: 9 × 3\n", - "\\begin{tabular}{r|lll}\n", - " & A & B & DivA\\\\\n", - " & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4\\\\\n", - "\t2 & 2 & like & -3\\\\\n", - "\t3 & 3 & to & -2\\\\\n", - "\t4 & 4 & use & -1\\\\\n", - "\t5 & 5 & Python & 0\\\\\n", - "\t6 & 6 & and & 1\\\\\n", - "\t7 & 7 & Pandas & 2\\\\\n", - "\t8 & 8 & very & 3\\\\\n", - "\t9 & 9 & much & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 3\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> |\n", - "|---|---|---|---|\n", - "| 1 | 1 | I | -4 |\n", - "| 2 | 2 | like | -3 |\n", - "| 3 | 3 | to | -2 |\n", - "| 4 | 4 | use | -1 |\n", - "| 5 | 5 | Python | 0 |\n", - "| 6 | 6 | and | 1 |\n", - "| 7 | 7 | Pandas | 2 |\n", - "| 8 | 8 | very | 3 |\n", - "| 9 | 9 | much | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA\n", - "1 1 I -4 \n", - "2 2 like -3 \n", - "3 3 to -2 \n", - "4 4 use -1 \n", - "5 5 Python 0 \n", - "6 6 and 1 \n", - "7 7 Pandas 2 \n", - "8 8 very 3 \n", - "9 9 much 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "62e9c8dd", - "metadata": {}, - "outputs": [], - "source": [ - "df$LenB <- str_length(df$B)" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "849c33cc", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" - ], - "text/latex": [ - "A data.frame: 9 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\t7 & 7 & Pandas & 2 & 6\\\\\n", - "\t8 & 8 & very & 3 & 4\\\\\n", - "\t9 & 9 & much & 4 & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "| 7 | 7 | Pandas | 2 | 6 |\n", - "| 8 | 8 | very | 3 | 4 |\n", - "| 9 | 9 | much | 4 | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 \n", - "7 7 Pandas 2 6 \n", - "8 8 very 3 4 \n", - "9 9 much 4 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "0a65495d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" - ], - "text/latex": [ - "A data.frame: 5 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 5 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[0:5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "ccebdda2", - "metadata": {}, - "outputs": [], - "source": [ - " df1 = group_by(df,LenB)" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "f2dcb719", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A tibble: 5 × 2
LenBmymean
<int><dbl>
11
22
33
44
66
\n" - ], - "text/latex": [ - "A tibble: 5 × 2\n", - "\\begin{tabular}{ll}\n", - " LenB & mymean\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t 1 & 1\\\\\n", - "\t 2 & 2\\\\\n", - "\t 3 & 3\\\\\n", - "\t 4 & 4\\\\\n", - "\t 6 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A tibble: 5 × 2\n", - "\n", - "| LenB <int> | mymean <dbl> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 6 | 6 |\n", - "\n" - ], - "text/plain": [ - " LenB mymean\n", - "1 1 1 \n", - "2 2 2 \n", - "3 3 3 \n", - "4 4 4 \n", - "5 6 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "summarise(df1,mymean =mean(LenB))" - ] - }, - { - "cell_type": "markdown", - "id": "d8eb00bc", - "metadata": {}, - "source": [ - "## Printing and Plotting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b96b6be0", - "metadata": {}, - "outputs": [], - "source": [ - "dataset = read.csv(\"file name\")" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "3b1a4735", - "metadata": {}, - "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", - "\n", - "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" - ], - "text/latex": [ - "A data.frame: 6 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 6 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "head(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "0af4e0e5", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\n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\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "08103a39", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\n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\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "barplot(df$A, ylab = 'A',xlab = 'no')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "768d4300", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "R", - "language": "R", - "name": "ir" - }, - "language_info": { - "codemirror_mode": "r", - "file_extension": ".r", - "mimetype": "text/x-r-source", - "name": "R", - "pygments_lexer": "r", - "version": "4.1.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From f76221fac3eac574ac70f4f311c3daa724d7ac7d Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Sat, 9 Oct 2021 20:28:25 -0700 Subject: [PATCH 50/74] Update pandas.ipynb --- 2-Working-With-Data/R/pandas.ipynb | 69 +++++++++++++----------------- 1 file changed, 30 insertions(+), 39 deletions(-) diff --git a/2-Working-With-Data/R/pandas.ipynb b/2-Working-With-Data/R/pandas.ipynb index 323f0133..901a51c9 100644 --- a/2-Working-With-Data/R/pandas.ipynb +++ b/2-Working-With-Data/R/pandas.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": 73, - "id": "c105e391", + "id": "f356bf26", "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "markdown", - "id": "00c41f19", + "id": "717d5825", "metadata": {}, "source": [ "## Series" @@ -21,7 +21,7 @@ }, { "cell_type": "markdown", - "id": "d3490356", + "id": "03ac7b71", "metadata": {}, "source": [ "a<- 1:9" @@ -30,7 +30,7 @@ { "cell_type": "code", "execution_count": 75, - "id": "2ef3725d", + "id": "f4149d4e", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ { "cell_type": "code", "execution_count": 76, - "id": "14e6152d", + "id": "5633dd5e", "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ { "cell_type": "code", "execution_count": 77, - "id": "432b0c2b", + "id": "834b824d", "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": 78, - "id": "adb4391f", + "id": "f25cedc2", "metadata": {}, "outputs": [], "source": [ @@ -70,16 +70,7 @@ }, { "cell_type": "markdown", - "id": "9d27aa12", - "metadata": {}, - "source": [ - "idx<- seq.Date(from = as.Date(\"20-01-01\"), to = as.Date(\"2001-03-31\"), by = \"day\",)\n", - "print(length(idx))\n" - ] - }, - { - "cell_type": "markdown", - "id": "ee4be842", + "id": "aea16930", "metadata": {}, "source": [ "## DataFrame" @@ -88,7 +79,7 @@ { "cell_type": "code", "execution_count": 140, - "id": "a8585654", + "id": "0793b3b7", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +89,7 @@ { "cell_type": "code", "execution_count": 141, - "id": "2b8c18b3", + "id": "bde43cd9", "metadata": {}, "outputs": [], "source": [ @@ -108,7 +99,7 @@ { "cell_type": "code", "execution_count": 109, - "id": "60b643d5", + "id": "5db4a116", "metadata": {}, "outputs": [ { @@ -127,7 +118,7 @@ { "cell_type": "code", "execution_count": 79, - "id": "113578b5", + "id": "e5e6313c", "metadata": {}, "outputs": [], "source": [ @@ -137,7 +128,7 @@ { "cell_type": "code", "execution_count": 80, - "id": "ef1dff63", + "id": "8358faeb", "metadata": {}, "outputs": [], "source": [ @@ -151,7 +142,7 @@ { "cell_type": "code", "execution_count": 81, - "id": "1d80bf43", + "id": "c439f0f3", "metadata": {}, "outputs": [ { @@ -234,7 +225,7 @@ { "cell_type": "code", "execution_count": 82, - "id": "831630d7", + "id": "26c75894", "metadata": {}, "outputs": [ { @@ -325,7 +316,7 @@ { "cell_type": "code", "execution_count": 83, - "id": "055bc484", + "id": "7f6885ba", "metadata": {}, "outputs": [ { @@ -388,7 +379,7 @@ { "cell_type": "code", "execution_count": 84, - "id": "05c2c45a", + "id": "0018c9fc", "metadata": {}, "outputs": [ { @@ -439,7 +430,7 @@ { "cell_type": "code", "execution_count": 85, - "id": "ac8a234f", + "id": "079a3b19", "metadata": {}, "outputs": [], "source": [ @@ -449,7 +440,7 @@ { "cell_type": "code", "execution_count": 86, - "id": "fb7ee6bd", + "id": "64dac80e", "metadata": {}, "outputs": [ { @@ -532,7 +523,7 @@ { "cell_type": "code", "execution_count": 87, - "id": "62e9c8dd", + "id": "c2fdab9c", "metadata": {}, "outputs": [], "source": [ @@ -542,7 +533,7 @@ { "cell_type": "code", "execution_count": 88, - "id": "849c33cc", + "id": "c523989b", "metadata": {}, "outputs": [ { @@ -625,7 +616,7 @@ { "cell_type": "code", "execution_count": 89, - "id": "0a65495d", + "id": "c095b403", "metadata": {}, "outputs": [ { @@ -692,7 +683,7 @@ { "cell_type": "code", "execution_count": 91, - "id": "ccebdda2", + "id": "f6f37d10", "metadata": {}, "outputs": [], "source": [ @@ -702,7 +693,7 @@ { "cell_type": "code", "execution_count": 93, - "id": "f2dcb719", + "id": "c1908f62", "metadata": {}, "outputs": [ { @@ -768,7 +759,7 @@ }, { "cell_type": "markdown", - "id": "d8eb00bc", + "id": "f927a466", "metadata": {}, "source": [ "## Printing and Plotting" @@ -777,7 +768,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b96b6be0", + "id": "6e20f11d", "metadata": {}, "outputs": [], "source": [ @@ -787,7 +778,7 @@ { "cell_type": "code", "execution_count": 94, - "id": "3b1a4735", + "id": "6bb554db", "metadata": {}, "outputs": [ { @@ -858,7 +849,7 @@ { "cell_type": "code", "execution_count": 151, - "id": "0af4e0e5", + "id": "14fa8a58", "metadata": {}, "outputs": [ { @@ -884,7 +875,7 @@ { "cell_type": "code", "execution_count": 96, - "id": "08103a39", + "id": "0db236b1", "metadata": {}, "outputs": [ { @@ -910,7 +901,7 @@ { "cell_type": "code", "execution_count": null, - "id": "768d4300", + "id": "37d719c4", "metadata": {}, "outputs": [], "source": [] From 8665bf9a86eebcacff72ad27c3cb814c92b5e4d9 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Sat, 9 Oct 2021 20:32:20 -0700 Subject: [PATCH 51/74] added --- 2-Working-With-Data/R/{pandas.ipynb => Data.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 2-Working-With-Data/R/{pandas.ipynb => Data.ipynb} (100%) diff --git a/2-Working-With-Data/R/pandas.ipynb b/2-Working-With-Data/R/Data.ipynb similarity index 100% rename from 2-Working-With-Data/R/pandas.ipynb rename to 2-Working-With-Data/R/Data.ipynb From ab2ba5382cbeae62084ee6bfff1d6747f6a25fb6 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Sat, 9 Oct 2021 21:16:03 -0700 Subject: [PATCH 52/74] Delete Data.ipynb --- 2-Working-With-Data/R/Data.ipynb | 927 ------------------------------- 1 file changed, 927 deletions(-) delete mode 100644 2-Working-With-Data/R/Data.ipynb diff --git a/2-Working-With-Data/R/Data.ipynb b/2-Working-With-Data/R/Data.ipynb deleted file mode 100644 index 901a51c9..00000000 --- a/2-Working-With-Data/R/Data.ipynb +++ /dev/null @@ -1,927 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 73, - "id": "f356bf26", - "metadata": {}, - "outputs": [], - "source": [ - "library(dplyr)\n", - "library(tidyverse)" - ] - }, - { - "cell_type": "markdown", - "id": "717d5825", - "metadata": {}, - "source": [ - "## Series" - ] - }, - { - "cell_type": "markdown", - "id": "03ac7b71", - "metadata": {}, - "source": [ - "a<- 1:9" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "f4149d4e", - "metadata": {}, - "outputs": [], - "source": [ - "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "5633dd5e", - "metadata": {}, - "outputs": [], - "source": [ - "a1 = length(a)\n", - "b1 = length(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "834b824d", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "f25cedc2", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "markdown", - "id": "aea16930", - "metadata": {}, - "source": [ - "## DataFrame" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "0793b3b7", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "bde43cd9", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "5db4a116", - "metadata": {}, - "outputs": [ - { - "ename": "ERROR", - "evalue": "Error in bar.plot(data): could not find function \"bar.plot\"\n", - "output_type": "error", - "traceback": [ - "Error in bar.plot(data): could not find function \"bar.plot\"\nTraceback:\n" - ] - } - ], - "source": [ - "bar.plot(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "e5e6313c", - "metadata": {}, - "outputs": [], - "source": [ - "df <- data.frame(a,b)" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "8358faeb", - "metadata": {}, - "outputs": [], - "source": [ - "df = df %>% \n", - " rename(\n", - " A = a,\n", - " B = b\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "c439f0f3", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" - ], - "text/latex": [ - "A data.frame: 9 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like \\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\t5 & 5 & Python\\\\\n", - "\t6 & 6 & and \\\\\n", - "\t7 & 7 & Pandas\\\\\n", - "\t8 & 8 & very \\\\\n", - "\t9 & 9 & much \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "| 5 | 5 | Python |\n", - "| 6 | 6 | and |\n", - "| 7 | 7 | Pandas |\n", - "| 8 | 8 | very |\n", - "| 9 | 9 | much |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like \n", - "3 3 to \n", - "4 4 use \n", - "5 5 Python\n", - "6 6 and \n", - "7 7 Pandas\n", - "8 8 very \n", - "9 9 much " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "26c75894", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Column A (series):\n" - ] - }, - { - "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", - "\n", - "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" - ], - "text/latex": [ - "A data.frame: 9 × 1\n", - "\\begin{tabular}{r|l}\n", - " & A\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t1 & 1\\\\\n", - "\t2 & 2\\\\\n", - "\t3 & 3\\\\\n", - "\t4 & 4\\\\\n", - "\t5 & 5\\\\\n", - "\t6 & 6\\\\\n", - "\t7 & 7\\\\\n", - "\t8 & 8\\\\\n", - "\t9 & 9\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 1\n", - "\n", - "| | A <int> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 5 | 5 |\n", - "| 6 | 6 |\n", - "| 7 | 7 |\n", - "| 8 | 8 |\n", - "| 9 | 9 |\n", - "\n" - ], - "text/plain": [ - " A\n", - "1 1\n", - "2 2\n", - "3 3\n", - "4 4\n", - "5 5\n", - "6 6\n", - "7 7\n", - "8 8\n", - "9 9" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cat(\"Column A (series):\\n\")\n", - "select(df,'A')" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "7f6885ba", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" - ], - "text/latex": [ - "A data.frame: 4 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like\\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 4 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like\n", - "3 3 to \n", - "4 4 use " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A<5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "0018c9fc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\n", - "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" - ], - "text/latex": [ - "A data.frame: 1 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t6 & 6 & and\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 1 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 6 | 6 | and |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "6 6 and" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A>5 & df$A<7,]" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "079a3b19", - "metadata": {}, - "outputs": [], - "source": [ - "df$DivA <- df$A - mean(df$A)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "64dac80e", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" - ], - "text/latex": [ - "A data.frame: 9 × 3\n", - "\\begin{tabular}{r|lll}\n", - " & A & B & DivA\\\\\n", - " & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4\\\\\n", - "\t2 & 2 & like & -3\\\\\n", - "\t3 & 3 & to & -2\\\\\n", - "\t4 & 4 & use & -1\\\\\n", - "\t5 & 5 & Python & 0\\\\\n", - "\t6 & 6 & and & 1\\\\\n", - "\t7 & 7 & Pandas & 2\\\\\n", - "\t8 & 8 & very & 3\\\\\n", - "\t9 & 9 & much & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 3\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> |\n", - "|---|---|---|---|\n", - "| 1 | 1 | I | -4 |\n", - "| 2 | 2 | like | -3 |\n", - "| 3 | 3 | to | -2 |\n", - "| 4 | 4 | use | -1 |\n", - "| 5 | 5 | Python | 0 |\n", - "| 6 | 6 | and | 1 |\n", - "| 7 | 7 | Pandas | 2 |\n", - "| 8 | 8 | very | 3 |\n", - "| 9 | 9 | much | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA\n", - "1 1 I -4 \n", - "2 2 like -3 \n", - "3 3 to -2 \n", - "4 4 use -1 \n", - "5 5 Python 0 \n", - "6 6 and 1 \n", - "7 7 Pandas 2 \n", - "8 8 very 3 \n", - "9 9 much 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "c2fdab9c", - "metadata": {}, - "outputs": [], - "source": [ - "df$LenB <- str_length(df$B)" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "c523989b", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" - ], - "text/latex": [ - "A data.frame: 9 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\t7 & 7 & Pandas & 2 & 6\\\\\n", - "\t8 & 8 & very & 3 & 4\\\\\n", - "\t9 & 9 & much & 4 & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "| 7 | 7 | Pandas | 2 | 6 |\n", - "| 8 | 8 | very | 3 | 4 |\n", - "| 9 | 9 | much | 4 | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 \n", - "7 7 Pandas 2 6 \n", - "8 8 very 3 4 \n", - "9 9 much 4 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "c095b403", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" - ], - "text/latex": [ - "A data.frame: 5 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 5 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[0:5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "f6f37d10", - "metadata": {}, - "outputs": [], - "source": [ - " df1 = group_by(df,LenB)" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "c1908f62", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A tibble: 5 × 2
LenBmymean
<int><dbl>
11
22
33
44
66
\n" - ], - "text/latex": [ - "A tibble: 5 × 2\n", - "\\begin{tabular}{ll}\n", - " LenB & mymean\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t 1 & 1\\\\\n", - "\t 2 & 2\\\\\n", - "\t 3 & 3\\\\\n", - "\t 4 & 4\\\\\n", - "\t 6 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A tibble: 5 × 2\n", - "\n", - "| LenB <int> | mymean <dbl> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 6 | 6 |\n", - "\n" - ], - "text/plain": [ - " LenB mymean\n", - "1 1 1 \n", - "2 2 2 \n", - "3 3 3 \n", - "4 4 4 \n", - "5 6 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "summarise(df1,mymean =mean(LenB))" - ] - }, - { - "cell_type": "markdown", - "id": "f927a466", - "metadata": {}, - "source": [ - "## Printing and Plotting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e20f11d", - "metadata": {}, - "outputs": [], - "source": [ - "dataset = read.csv(\"file name\")" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "6bb554db", - "metadata": {}, - "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", - "\n", - "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" - ], - "text/latex": [ - "A data.frame: 6 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 6 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "head(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "14fa8a58", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\n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\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "0db236b1", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\n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\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "barplot(df$A, ylab = 'A',xlab = 'no')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "37d719c4", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "R", - "language": "R", - "name": "ir" - }, - "language_info": { - "codemirror_mode": "r", - "file_extension": ".r", - "mimetype": "text/x-r-source", - "name": "R", - "pygments_lexer": "r", - "version": "4.1.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 4b71d144aee60cc8b25cec3dcf55dc432dc39dca Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Sat, 9 Oct 2021 21:16:52 -0700 Subject: [PATCH 53/74] Create pandas.ipynb --- 2-Working-With-Data/R/pandas.ipynb | 978 +++++++++++++++++++++++++++++ 1 file changed, 978 insertions(+) create mode 100644 2-Working-With-Data/R/pandas.ipynb diff --git a/2-Working-With-Data/R/pandas.ipynb b/2-Working-With-Data/R/pandas.ipynb new file mode 100644 index 00000000..cb928833 --- /dev/null +++ b/2-Working-With-Data/R/pandas.ipynb @@ -0,0 +1,978 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "304296e3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "Attaching package: 'dplyr'\n", + "\n", + "\n", + "The following objects are masked from 'package:stats':\n", + "\n", + " filter, lag\n", + "\n", + "\n", + "The following objects are masked from 'package:base':\n", + "\n", + " intersect, setdiff, setequal, union\n", + "\n", + "\n", + "-- \u001b[1mAttaching packages\u001b[22m ------------------------------------------------------------------------------- tidyverse 1.3.1 --\n", + "\n", + "\u001b[32mv\u001b[39m \u001b[34mggplot2\u001b[39m 3.3.5 \u001b[32mv\u001b[39m \u001b[34mpurrr \u001b[39m 0.3.4\n", + "\u001b[32mv\u001b[39m \u001b[34mtibble \u001b[39m 3.1.5 \u001b[32mv\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n", + "\u001b[32mv\u001b[39m \u001b[34mtidyr \u001b[39m 1.1.4 \u001b[32mv\u001b[39m \u001b[34mforcats\u001b[39m 0.5.1\n", + "\u001b[32mv\u001b[39m \u001b[34mreadr \u001b[39m 2.0.2 \n", + "\n", + "-- \u001b[1mConflicts\u001b[22m ---------------------------------------------------------------------------------- tidyverse_conflicts() --\n", + "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\n" + ] + } + ], + "source": [ + "library(dplyr)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "markdown", + "id": "d786e051", + "metadata": {}, + "source": [ + "## Series" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f659f553", + "metadata": {}, + "outputs": [], + "source": [ + "a<- 1:9" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9acc193d", + "metadata": {}, + "outputs": [], + "source": [ + "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f577ec14", + "metadata": {}, + "outputs": [], + "source": [ + "a1 = length(a)\n", + "b1 = length(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "31e069a0", + "metadata": {}, + "outputs": [], + "source": [ + "a = data.frame(a,row.names = c(1:a1))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "29ce166e", + "metadata": {}, + "outputs": [], + "source": [ + "b = data.frame(b,row.names = c(1:b1))" + ] + }, + { + "cell_type": "markdown", + "id": "945feffd", + "metadata": {}, + "source": [ + "## DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "88a435ec", + "metadata": {}, + "outputs": [], + "source": [ + "a = data.frame(a,row.names = c(1:a1))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c4e2a6c1", + "metadata": {}, + "outputs": [], + "source": [ + "b = data.frame(b,row.names = c(1:b1))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "2bb5177c", + "metadata": {}, + "outputs": [], + "source": [ + "df<- data.frame(a,b)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8f45d3a5", + "metadata": {}, + "outputs": [], + "source": [ + "df = \n", + " rename(df,\n", + " A = a,\n", + " B = b,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "0efbf2d4", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" + ], + "text/latex": [ + "A data.frame: 9 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like \\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\t5 & 5 & Python\\\\\n", + "\t6 & 6 & and \\\\\n", + "\t7 & 7 & Pandas\\\\\n", + "\t8 & 8 & very \\\\\n", + "\t9 & 9 & much \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "| 5 | 5 | Python |\n", + "| 6 | 6 | and |\n", + "| 7 | 7 | Pandas |\n", + "| 8 | 8 | very |\n", + "| 9 | 9 | much |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like \n", + "3 3 to \n", + "4 4 use \n", + "5 5 Python\n", + "6 6 and \n", + "7 7 Pandas\n", + "8 8 very \n", + "9 9 much " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "88b51fdc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Column A (series):\n" + ] + }, + { + "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", + "\n", + "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" + ], + "text/latex": [ + "A data.frame: 9 × 1\n", + "\\begin{tabular}{r|l}\n", + " & A\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t1 & 1\\\\\n", + "\t2 & 2\\\\\n", + "\t3 & 3\\\\\n", + "\t4 & 4\\\\\n", + "\t5 & 5\\\\\n", + "\t6 & 6\\\\\n", + "\t7 & 7\\\\\n", + "\t8 & 8\\\\\n", + "\t9 & 9\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 1\n", + "\n", + "| | A <int> |\n", + "|---|---|\n", + "| 1 | 1 |\n", + "| 2 | 2 |\n", + "| 3 | 3 |\n", + "| 4 | 4 |\n", + "| 5 | 5 |\n", + "| 6 | 6 |\n", + "| 7 | 7 |\n", + "| 8 | 8 |\n", + "| 9 | 9 |\n", + "\n" + ], + "text/plain": [ + " A\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "5 5\n", + "6 6\n", + "7 7\n", + "8 8\n", + "9 9" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cat(\"Column A (series):\\n\")\n", + "select(df,'A')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "010bcba8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" + ], + "text/latex": [ + "A data.frame: 4 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like\\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like\n", + "3 3 to \n", + "4 4 use " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A<5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "082277db", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" + ], + "text/latex": [ + "A data.frame: 1 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t6 & 6 & and\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 1 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 6 | 6 | and |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "6 6 and" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A>5 & df$A<7,]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "0bbd19f8", + "metadata": {}, + "outputs": [], + "source": [ + "df$DivA <- df$A - mean(df$A)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "f36d96af", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" + ], + "text/latex": [ + "A data.frame: 9 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & A & B & DivA\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4\\\\\n", + "\t2 & 2 & like & -3\\\\\n", + "\t3 & 3 & to & -2\\\\\n", + "\t4 & 4 & use & -1\\\\\n", + "\t5 & 5 & Python & 0\\\\\n", + "\t6 & 6 & and & 1\\\\\n", + "\t7 & 7 & Pandas & 2\\\\\n", + "\t8 & 8 & very & 3\\\\\n", + "\t9 & 9 & much & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 3\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> |\n", + "|---|---|---|---|\n", + "| 1 | 1 | I | -4 |\n", + "| 2 | 2 | like | -3 |\n", + "| 3 | 3 | to | -2 |\n", + "| 4 | 4 | use | -1 |\n", + "| 5 | 5 | Python | 0 |\n", + "| 6 | 6 | and | 1 |\n", + "| 7 | 7 | Pandas | 2 |\n", + "| 8 | 8 | very | 3 |\n", + "| 9 | 9 | much | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA\n", + "1 1 I -4 \n", + "2 2 like -3 \n", + "3 3 to -2 \n", + "4 4 use -1 \n", + "5 5 Python 0 \n", + "6 6 and 1 \n", + "7 7 Pandas 2 \n", + "8 8 very 3 \n", + "9 9 much 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c67f2bd0", + "metadata": {}, + "outputs": [], + "source": [ + "df$LenB <- str_length(df$B)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "cef214b2", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" + ], + "text/latex": [ + "A data.frame: 9 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\t7 & 7 & Pandas & 2 & 6\\\\\n", + "\t8 & 8 & very & 3 & 4\\\\\n", + "\t9 & 9 & much & 4 & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "| 7 | 7 | Pandas | 2 | 6 |\n", + "| 8 | 8 | very | 3 | 4 |\n", + "| 9 | 9 | much | 4 | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 \n", + "7 7 Pandas 2 6 \n", + "8 8 very 3 4 \n", + "9 9 much 4 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "59fe5316", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" + ], + "text/latex": [ + "A data.frame: 5 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 5 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[0:5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "f944a949", + "metadata": {}, + "outputs": [], + "source": [ + " df1 = group_by(df,LenB)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "8ffd39cd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
LenBmymean
<int><dbl>
11
22
33
44
66
\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " LenB & mymean\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t 1 & 1\\\\\n", + "\t 2 & 2\\\\\n", + "\t 3 & 3\\\\\n", + "\t 4 & 4\\\\\n", + "\t 6 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| LenB <int> | mymean <dbl> |\n", + "|---|---|\n", + "| 1 | 1 |\n", + "| 2 | 2 |\n", + "| 3 | 3 |\n", + "| 4 | 4 |\n", + "| 6 | 6 |\n", + "\n" + ], + "text/plain": [ + " LenB mymean\n", + "1 1 1 \n", + "2 2 2 \n", + "3 3 3 \n", + "4 4 4 \n", + "5 6 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "summarise(df1,mymean =mean(LenB))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b859950", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5d3f0287", + "metadata": {}, + "source": [ + "## Printing and Plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "69946dc7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in file(file, \"rt\"):\n", + "\"cannot open file 'file name': No such file or directory\"\n" + ] + }, + { + "ename": "ERROR", + "evalue": "Error in file(file, \"rt\"): cannot open the connection\n", + "output_type": "error", + "traceback": [ + "Error in file(file, \"rt\"): cannot open the connection\nTraceback:\n", + "1. read.csv(\"file name\")", + "2. read.table(file = file, header = header, sep = sep, quote = quote, \n . dec = dec, fill = fill, comment.char = comment.char, ...)", + "3. file(file, \"rt\")" + ] + } + ], + "source": [ + "dataset = read.csv(\"file name\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "009af652", + "metadata": {}, + "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", + "\n", + "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "515c95b2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\n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\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "41b872c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\nKldwNYpUuYKrUaTKFVyNIlWu4GoUqXIFV6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1Gk\nyhVcjSJVruBqFKlyBVejSJUruBpFqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSp\ncgVXo0iVK7gaRapcwdUoUuUKrkaRKldwNYpUuYKrUaTKFVyNIlWu4GoUqXIFV6NIlSu4GkWq\nXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpFqlzB1ShS5QquRpEq\nV3A1ilS5gqtRpMoVXI0iVa7gahSpcgUPsgz5fZAiNa7gQUZye0gBFIkrUqTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWSw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWSw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWSw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mq/9wucPT98/fnyzLG8/H7SCOoq0+jKv/LpvT8vy8vz9ww9vD1lB\nH0VafZlXft375d3z9w/vv33v1PvlwxEr6KNIqy/z2q9bnv/88P2/5S1PR6ygjyKtvsxrv+7H\nFz4tv/3N//cf/+b11xGyjPh9zkBuFemfvF++vrx8/PHhx0+k//qLJEU6X0NuFemffF2ePnx9\neff0vUlf3ixfjlhBTkNuFekffXn662f/x2NWENOQW0Va8fn9mx8tevfx22ErCGnIrSL1r2BD\nQ24VqX8FGxpyq0j9K9jQkFtF6l/BhobcKlL/CjY05FaR+lewoSG3itS/gg0NuVWk/hVsaMit\nIvWvYENDbhWpfwUbGnKrSP0r2NCQW0XqX8GGhtwqUv8KNjTkVpH6V7ChIbeK1L+CDQ25VaT+\nFWxoyK0i9a9gQ0NuFal/BRsacqtI/SvY0JBbRepfwYaG3CpS/wo2NORWkfpXsKEht4rUv4IN\nDblVpP4VbGjIrSL1r2BDQ24VqX8FGxpyq0j9K9jQkFtF6l/BhobcKlL/CjY05FaR+lewoSG3\nitS/gg0NuVWk/hVsaMitIvWvYENDbhWpfwUbGnKrSP0r2NCQW0XqX8GGhtwqUv8KNjTkVpH6\nV7ChIbeK1L+CDQ25VaT+FWxoyK0i9a9gQ0NuFal/BRsacqtI/SvY0JBbRepfwYaG3CpS/wo2\nNORWkfpXsKEht4rUv4INDblVpP4VbGjIrSL1r2BDQ24VqX8FGxpyq0j9K9jQkFtF6l/Bhobc\nKlL/CjY05FaR+lewoSG3itS/gg0NuVWk/hVsaMitIvWvYENDbhWpfwUbGnKrSP0r2NCQW0Xq\nX8GGhtwqUv8KNjTkVpH6V7ChIbeK1L+CDQ25VaT+FbNahvw+qCC3itS/YlZT5bbuIEW6jaly\nW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5SpNuYKrd1BynSbUyV27qDFOk2pspt3UGKdBtT\n5bbuIEW6jalyW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5SpNuYKrd1BynSbUyV27qDFOk2\npspt3UGKdBtT5bbuIEW6jalyW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5SpNuYKrd1BynS\nbUyV27qDFOk2pspt3UGKdBtT5bbuIEW6jalyW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5S\npNuYKrd1Bx1epK8fno5ewb8yVW7rDjq2SN8+vlkWReowVW7rDjqwSM+fv7doefsluUGRXm+q\n3NYddFiRPr/9+X/09i05/0WRBkyV27qDjinSl/ffO/T04esSz70ivdpUua076JAiPf1o0R8/\n/oEi9Zgqt3UHHVKkZfnw65Pk+N9XsNtUua07yE+k25gqt3UHHfprpD8UqchUua07yL+1u42p\nclt30OG/j/TO7yOVmCq3dQf5kw23MVVu6w7yZ+1uY6rc1h3kT3/fxlS5rTtIkW5jqtzWHaRI\ntzFVbusOUqTbmCq3dQcp0m1Mldu6gxTpNqbKbd1BinQbU+W27iBFuo2pclt3kCLdxlS5rTtI\nkW5jqtzWHaRItzFVbusOUqTbmCq3dQcp0m1Mldu6gxTpNqbKbd1BinQbU+W27iBFuo2pclt3\nkCLdxlS5rTtIkW5jqtzWHaRItzFVbusOUqTbmCq3dQeVFWnzf1FSkV5tqtzWHaRItzFVbusO\nqijS8n8dsYK5clt3UEWR/nhSpONNldu6gyqK9PL8bnn7838l/B9b9K9bNqdlxO9zBmJSl9u6\ngzqK9PLyeVk+v/g10j9piEldbusOainSy7e3y7tnRfoHDTGpy23dQTVFenn5uDx9UaS/a4hJ\nXW7rDioq0svXN9u/BlKkU2JSl9u6g5qK9PLyXpH+riEmdbmtO6irSBUr2jTEpC63dQcpUr2G\nmNTltu4gRarXEJO63NYdpEj1GmJSl9u6gxSpXkNM6nJbd5Ai1WuISV1u6w5SpHoNManLbd1B\nilSvISZ1ua07SJHqNcSkLrd1BylSvYaY1OW27iBFqtcQk7rc1h2kSPUaYlKX27qDFKleQ0zq\nclt3kCLVa4hJXW7rDlKkeg0xqctt3UGKVK8hJnW5rTtIkeo1xKQut3UHKVK9hpjU5bbuIEWq\n1xCTutzWHaRI9RpiUpfbuoMUqV5DTOpyW3eQItVriEldbusOUqR6DTGpy23dQYpUryEmdbmt\nO0iR6jXEpC63dQcpUr2GmNTltu4gRarXEJO63NYdpEj1GmJSl9u6gxSpXkNM6nJbd5Ai1WuI\nSV1u6w5SpHoNManLbd1BilSvISZ1ua07SJHqNcSkLrd1BylSvYaY1OW27iBFqtcQk7rc1h2k\nSPUaYlKX27qDFKleQ0zqclt3kCLVa4hJXW7rDlKkeg0xqctt3UGKVK8hJnW5rTtIkeo1xKQu\nt3UHKVK9hpjU5bbuIEWq1xCTutzWHaRI9RpiUpfbuoMUqV5DTOpyW3eQItVriEldbusOUqR6\nDTGpy23dQYpUryEmdbmtO0iR6jXEpC63dQcpUr2GmNTltu4gRarXEJO63NYdpEj1GmJSl9u6\ngxSpXkNM6nJbd5Ai1WuISV1u6w5SpHoNManLbd1BilSvISZ1ua07SJHqNcSkLrd1BylSvYaY\n1OW27iBFqtcQk7rc1h2kSPUaYlKX27qDFKleQ0zqclt3kCLVa4hJXW7rDlKkeg0xqctt3UGK\ndJRlyO+DCmJSl9u6gxTpKFPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc5\n7LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxn\nJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvm\njGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRB\ne+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPF\nxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUh\nU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0\nFSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc5\n7LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxn\nJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvm\njGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRB\ne+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPF\nxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUh\nU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0\nFSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc5\n7LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxn\nJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZ+e1X/j8flnefvlzyH+dokinzHHQnjnj2Xnl\n1z0/LT+8+88QReqLiYP2zBnPziu/7sPy6XubPj29/TlEkfpi4qA9c8az88qve/rPF357evNN\nkQ779jroUXPGs/Par/vzC5/fvv2nIi2/Gzjv3x4z4Pc5A9+Vupg4aM+cYa8d9mZ5/vXZ29N/\nIjV8V+pi4qA9c4a9dtin5f2fn31b3ipScJCDzpgz7NXDPvxve75s/Lc3RXJQ5UEdRXr5+u7X\nZ9/eK1JfTBy0Z86wKf5kQ8N3pS4mDtozZ5gihebUxcRBe+YMU6TQnLqYOGjPnGGKFJpTFxMH\n7ZkzTJFCc+pi4qA9c4YpUmhOXUwctGfOMEUKzamLiYP2zBmmSKE5dTFx0J45wxQpNKcuJg7a\nM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcTB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRn\nzjBFCs2pi4mD9swZpkihOXUxcdCeOcMUKTSnLiYO2jNnmCKF5tTFxEF75gxTpNCcupg4aM+c\nYYoUmlMXEwftmTNMkUJz6mLioD1zhilSaE5dTBy0Z84wRQrNqYuJg/bMGaZIoTl1MXHQnjnD\nFCk0py4mDtozZ5gihebUxcRBe+YMU6TQnLqYOGjPnGGKFJpTFxMH7ZkzTJFCc+pi4qA9c4Yp\nUmhOXUwctGfOMEUKzamLiYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk\n0Jy6mDhoz5xhihSaUxcTB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZpkih\nOXUxcdCeOcMUKTSnLiYO2jNnmCKF5tTFxEF75gxTpNCcupg4aM+cYYoUmlMXEwftmTNMkUJz\n6mLioD1zhilSaE5dTBy0Z84wRQrNqYuJg/bMGaZIoTl1MXHQnjnDFCk0py4mDtozZ5gihebU\nxcRBe+YMU6TQnLqYOGjPnGGKFJpTFxMH7ZkzTJFCc+pi4qA9c4YpUmhOXUwctGfOMEUKzamL\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "barplot(df$A, ylab = 'A',xlab = 'no')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11001454", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "670db495", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.1.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 5eb0795db32f92be987082cd1bfaaf063609790f Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Sun, 10 Oct 2021 21:25:51 -0500 Subject: [PATCH 54/74] Revert "feat: Module 1 section 4 - Add file content to be translated" This reverts commit def34abe88b682ab5faa37ebee9cbbc4897633cf. --- .../translations/README.es.md | 263 ------------------ 1 file changed, 263 deletions(-) diff --git a/1-Introduction/04-stats-and-probability/translations/README.es.md b/1-Introduction/04-stats-and-probability/translations/README.es.md index 3a4a4ae9..e69de29b 100644 --- a/1-Introduction/04-stats-and-probability/translations/README.es.md +++ b/1-Introduction/04-stats-and-probability/translations/README.es.md @@ -1,263 +0,0 @@ -# A Brief Introduction to Statistics and Probability - -|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/04-Statistics-Probability.png)| -|:---:| -| Statistics and Probability - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | - -Statistics and Probability Theory are two highly related areas of Mathematics that are highly relevant to Data Science. It is possible to operate with data without deep knowledge of mathematics, but it is still better to know at least some basic concepts. Here we will present a short introduction that will help you get started. - -[![Intro Video](images/video-prob-and-stats.png)](https://youtu.be/Z5Zy85g4Yjw) - - -## [Pre-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/6) - -## Probability and Random Variables - -**Probability** is a number between 0 and 1 that expresses how probable an **event** is. It is defined as a number of positive outcomes (that lead to the event), divided by total number of outcomes, given that all outcomes are equally probable. For example, when we roll a dice, the probability that we get an even number is 3/6 = 0.5. - -When we talk about events, we use **random variables**. For example, the random variable that represents a number obtained when rolling a dice would take values from 1 to 6. Set of numbers from 1 to 6 is called **sample space**. We can talk about the probability of a random variable taking a certain value, for example P(X=3)=1/6. - -The random variable in previous example is called **discrete**, because it has a countable sample space, i.e. there are separate values that can be enumerated. There are cases when sample space is a range of real numbers, or the whole set of real numbers. Such variables are called **continuous**. A good example is the time when the bus arrives. - -## Probability Distribution - -In the case of discrete random variables, it is easy to describe the probability of each event by a function P(X). For each value *s* from sample space *S* it will give a number from 0 to 1, such that the sum of all values of P(X=s) for all events would be 1. - -The most well-known discrete distribution is **uniform distribution**, in which there is a sample space of N elements, with equal probability of 1/N for each of them. - -It is more difficult to describe the probability distribution of a continuous variable, with values drawn from some interval [a,b], or the whole set of real numbers ℝ. Consider the case of bus arrival time. In fact, for each exact arrival time $t$, the probability of a bus arriving at exactly that time is 0! - -> Now you know that events with 0 probability happen, and very often! At least each time when the bus arrives! - -We can only talk about the probability of a variable falling in a given interval of values, eg. P(t1≤X<t2). In this case, probability distribution is described by a **probability density function** p(x), such that - -![P(t_1\le X1, x2, ..., xn. We can define **mean** (or **arithmetic average**) value of the sequence in the traditional way as (x1+x2+xn)/n. As we grow the size of the sample (i.e. take the limit with n→∞), we will obtain the mean (also called **expectation**) of the distribution. We will denote expectation by **E**(x). - -> It can be demonstrated that for any discrete distribution with values {x1, x2, ..., xN} and corresponding probabilities p1, p2, ..., pN, the expectation would equal to E(X)=x1p1+x2p2+...+xNpN. - -To identify how far the values are spread, we can compute the variance σ2 = ∑(xi - μ)2/n, where μ is the mean of the sequence. The value σ is called **standard deviation**, and σ2 is called a **variance**. - -## Mode, Median and Quartiles - -Sometimes, mean does not adequately represent the "typical" value for data. For example, when there are a few extreme values that are completely out of range, they can affect the mean. Another good indication is a **median**, a value such that half of data points are lower than it, and another half - higher. - -To help us understand the distribution of data, it is helpful to talk about **quartiles**: - -* First quartile, or Q1, is a value, such that 25% of the data fall below it -* Third quartile, or Q3, is a value that 75% of the data fall below it - -Graphically we can represent relationship between median and quartiles in a diagram called the **box plot**: - - - -Here we also compute **inter-quartile range** IQR=Q3-Q1, and so-called **outliers** - values, that lie outside the boundaries [Q1-1.5*IQR,Q3+1.5*IQR]. - -For finite distribution that contains a small number of possible values, a good "typical" value is the one that appears the most frequently, which is called **mode**. It is often applied to categorical data, such as colors. Consider a situation when we have two groups of people - some that strongly prefer red, and others who prefer blue. If we code colors by numbers, the mean value for a favorite color would be somewhere in the orange-green spectrum, which does not indicate the actual preference on neither group. However, the mode would be either one of the colors, or both colors, if the number of people voting for them is equal (in this case we call the sample **multimodal**). -## Real-world Data - -When we analyze data from real life, they often are not random variables as such, in a sense that we do not perform experiments with unknown result. For example, consider a team of baseball players, and their body data, such as height, weight and age. Those numbers are not exactly random, but we can still apply the same mathematical concepts. For example, a sequence of people's weights can be considered to be a sequence of values drawn from some random variable. Below is the sequence of weights of actual baseball players from [Major League Baseball](http://mlb.mlb.com/index.jsp), taken from [this dataset](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights) (for your convenience, only first 20 values are shown): - -``` -[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0] -``` - -> **Note**: To see the example of working with this dataset, have a look at the [accompanying notebook](notebook.ipynb). There are also a number of challenges throughout this lesson, and you may complete them by adding some code to that notebook. If you are not sure how to operate on data, do not worry - we will come back to working with data using Python at a later time. If you do not know how to run code in Jupyter Notebook, have a look at [this article](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). - -Here is the box plot showing mean, median and quartiles for our data: - -![Weight Box Plot](images/weight-boxplot.png) - -Since our data contains information about different player **roles**, we can also do the box plot by role - it will allow us to get the idea on how parameters values differ across roles. This time we will consider height: - -![Box plot by role](images/boxplot_byrole.png) - -This diagram suggests that, on average, height of first basemen is higher that height of second basemen. Later in this lesson we will learn how we can test this hypothesis more formally, and how to demonstrate that our data is statistically significant to show that. - -> When working with real-world data, we assume that all data points are samples drawn from some probability distribution. This assumption allows us to apply machine learning techniques and build working predictive models. - -To see what the distribution of our data is, we can plot a graph called a **histogram**. X-axis would contain a number of different weight intervals (so-called **bins**), and the vertical axis would show the number of times our random variable sample was inside a given interval. - -![Histogram of real world data](images/weight-histogram.png) - -From this histogram you can see that all values are centered around certain mean weight, and the further we go from that weight - the fewer weights of that value are encountered. I.e., it is very improbable that the weight of a baseball player would be very different from the mean weight. Variance of weights show the extent to which weights are likely to differ from the mean. - -> If we take weights of other people, not from the baseball league, the distribution is likely to be different. However, the shape of the distribution will be the same, but mean and variance would change. So, if we train our model on baseball players, it is likely to give wrong results when applied to students of a university, because the underlying distribution is different. -## Normal Distribution - -The distribution of weights that we have seen above is very typical, and many measurements from real world follow the same type of distribution, but with different mean and variance. This distribution is called **normal distribution**, and it plays a very important role in statistics. - -Using normal distribution is a correct way to generate random weights of potential baseball players. Once we know mean weight `mean` and standard deviation `std`, we can generate 1000 weight samples in the following way: -```python -samples = np.random.normal(mean,std,1000) -``` - -If we plot the histogram of the generated samples we will see the picture very similar to the one shown above. And if we increase the number of samples and the number of bins, we can generate a picture of a normal distribution that is more close to ideal: - -![Normal Distribution with mean=0 and std.dev=1](images/normal-histogram.png) - -*Normal Distribution with mean=0 and std.dev=1* - -## Confidence Intervals - -When we talk about weights of baseball players, we assume that there is certain **random variable W** that corresponds to ideal probability distribution of weights of all baseball players (so-called **population**). Our sequence of weights corresponds to a subset of all baseball players that we call **sample**. An interesting question is, can we know the parameters of distribution of W, i.e. mean and variance of the population? - -The easiest answer would be to calculate mean and variance of our sample. However, it could happen that our random sample does not accurately represent complete population. Thus it makes sense to talk about **confidence interval**. - -> **Confidence interval** is the estimation of true mean of the population given our sample, which is accurate is a certain probability (or **level of confidence**). - -Suppose we have a sample X1, ..., Xn from our distribution. Each time we draw a sample from our distribution, we would end up with different mean value μ. Thus μ can be considered to be a random variable. A **confidence interval** with confidence p is a pair of values (Lp,Rp), such that **P**(Lp≤μ≤Rp) = p, i.e. a probability of measured mean value falling within the interval equals to p. - -It does beyond our short intro to discuss in detail how those confidence intervals are calculated. Some more details can be found [on Wikipedia](https://en.wikipedia.org/wiki/Confidence_interval). In short, we define the distribution of computed sample mean relative to the true mean of the population, which is called **student distribution**. - -> **Interesting fact**: Student distribution is named after mathematician William Sealy Gosset, who published his paper under the pseudonym "Student". He worked in the Guinness brewery, and, according to one of the versions, his employer did not want general public to know that they were using statistical tests to determine the quality of raw materials. - -If we want to estimate the mean μ of our population with confidence p, we need to take *(1-p)/2-th percentile* of a Student distribution A, which can either be taken from tables, or computer using some built-in functions of statistical software (eg. Python, R, etc.). Then the interval for μ would be given by X±A*D/√n, where X is the obtained mean of the sample, D is the standard deviation. - -> **Note**: We also omit the discussion of an important concept of [degrees of freedom](https://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics)), which is important in relation to Student distribution. You can refer to more complete books on statistics to understand this concept deeper. - -An example of calculating confidence interval for weights and heights is given in the [accompanying notebooks](notebook.ipynb). - -| p | Weight mean | -|-----|-----------| -| 0.85 | 201.73±0.94 | -| 0.90 | 201.73±1.08 | -| 0.95 | 201.73±1.28 | - -Notice that the higher is the confidence probability, the wider is the confidence interval. - -## Hypothesis Testing - -In our baseball players dataset, there are different player roles, that can be summarized below (look at the [accompanying notebook](notebook.ipynb) to see how this table can be calculated): - -| Role | Height | Weight | Count | -|------|--------|--------|-------| -| Catcher | 72.723684 | 204.328947 | 76 | -| Designated_Hitter | 74.222222 | 220.888889 | 18 | -| First_Baseman | 74.000000 | 213.109091 | 55 | -| Outfielder | 73.010309 | 199.113402 | 194 | -| Relief_Pitcher | 74.374603 | 203.517460 | 315 | -| Second_Baseman | 71.362069 | 184.344828 | 58 | -| Shortstop | 71.903846 | 182.923077 | 52 | -| Starting_Pitcher | 74.719457 | 205.163636 | 221 | -| Third_Baseman | 73.044444 | 200.955556 | 45 | - -We can notice that the mean heights of first basemen is higher than that of second basemen. Thus, we may be tempted to conclude that **first basemen are higher than second basemen**. - -> This statement is called **a hypothesis**, because we do not know whether the fact is actually true or not. - -However, it is not always obvious whether we can make this conclusion. From the discussion above we know that each mean has an associated confidence interval, and thus this difference can just be a statistical error. We need some more formal way to test our hypothesis. - -Let's compute confidence intervals separately for heights of first and second basemen: - -| Confidence | First Basemen | Second Basemen | -|------------|---------------|----------------| -| 0.85 | 73.62..74.38 | 71.04..71.69 | -| 0.90 | 73.56..74.44 | 70.99..71.73 | -| 0.95 | 73.47..74.53 | 70.92..71.81 | - -We can see that under no confidence the intervals overlap. That proves our hypothesis that first basemen are higher than second basemen. - -More formally, the problem we are solving is to see if **two probability distributions are the same**, or at least have the same parameters. Depending on the distribution, we need to use different tests for that. If we know that our distributions are normal, we can apply **[Student t-test](https://en.wikipedia.org/wiki/Student%27s_t-test)**. - -In Student t-test, we compute so-called **t-value**, which indicates the difference between means, taking into account the variance. It is demonstrated that t-value follows **student distribution**, which allows us to get the threshold value for a given confidence level **p** (this can be computed, or looked up in the numerical tables). We then compare t-value to this threshold to approve or reject the hypothesis. - -In Python, we can use the **SciPy** package, which includes `ttest_ind` function (in addition to many other useful statistical functions!). It computes the t-value for us, and also does the reverse lookup of confidence p-value, so that we can just look at the confidence to draw the conclusion. - -For example, our comparison between heights of first and second basemen give us the following results: -```python -from scipy.stats import ttest_ind - -tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Designated_Hitter',['Height']],equal_var=False) -print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}") -``` -``` -T-value = 7.65 -P-value: 9.137321189738925e-12 -``` -In our case, p-value is very low, meaning that there is strong evidence supporting that first basemen are taller. - -There are also different other types of hypothesis that we might want to test, for example: -* To prove that a given sample follows some distribution. In our case we have assumed that heights are normally distributed, but that needs formal statistical verification. -* To prove that a mean value of a sample corresponds to some predefined value -* To compare means of a number of samples (eg. what is the difference in happiness levels among different age groups) - -## Law of Large Numbers and Central Limit Theorem - -One of the reasons why normal distribution is so important is so-called **central limit theorem**. Suppose we have a large sample of independent N values X1, ..., XN, sampled from any distribution with mean μ and variance σ2. Then, for sufficiently large N (in other words, when N→∞), the mean ΣiXi would be normally distributed, with mean μ and variance σ2/N. - -> Another way to interpret the central limit theorem is to say that regardless of distribution, when you compute the mean of a sum of any random variable values you end up with normal distribution. - -From the central limit theorem it also follows that, when N→∞, the probability of the sample mean to be equal to μ becomes 1. This is known as **the law of large numbers**. - -## Covariance and Correlation - -One of the things Data Science does is finding relations between data. We say that two sequences **correlate** when they exhibit the similar behavior at the same time, i.e. they either rise/fall simultaneously, or one sequence rises when another one falls and vice versa. In other words, there seems to be some relation between two sequences. - -> Correlation does not necessarily indicate causal relationship between two sequences; sometimes both variables can depend on some external cause, or it can be purely by chance the two sequences correlate. However, strong mathematical correlation is a good indication that two variables are somehow connected. - - Mathematically, the main concept that shows the relation between two random variables is **covariance**, that is computed like this: Cov(X,Y) = **E**\[(X-**E**(X))(Y-**E**(Y))\]. We compute the deviation of both variables from their mean values, and then product of those deviations. If both variables deviate together, the product would always be a positive value, that would add up to positive covariance. If both variables deviate out-of-sync (i.e. one falls below average when another one rises above average), we will always get negative numbers, that will add up to negative covariance. If the deviations are not dependent, they will add up to roughly zero. - -The absolute value of covariance does not tell us much on how large the correlation is, because it depends on the magnitude of actual values. To normalize it, we can divide covariance by standard deviation of both variables, to get **correlation**. The good thing is that correlation is always in the range of [-1,1], where 1 indicates strong positive correlation between values, -1 - strong negative correlation, and 0 - no correlation at all (variables are independent). - -**Example**: We can compute correlation between weights and heights of baseball players from the dataset mentioned above: -```python -print(np.corrcoef(weights,heights)) -``` -As a result, we get **correlation matrix** like this one: -``` -array([[1. , 0.52959196], - [0.52959196, 1. ]]) -``` - -> Correlation matrix C can be computed for any number of input sequences S1, ..., Sn. The value of Cij is the correlation between Si and Sj, and diagonal elements are always 1 (which is also self-correlation of Si). - -In our case, the value 0.53 indicates that there is some correlation between weight and height of a person. We can also make the scatter plot of one value against the other to see the relationship visually: - -![Relationship between weight and height](images/weight-height-relationship.png) - -> More examples of correlation and covariance can be found in [accompanying notebook](notebook.ipynb). - -## Conclusion - -In this section, we have learnt: - -* basic statistical properties of data, such as mean, variance, mode and quartiles -* different distributions of random variables, including normal distribution -* how to find correlation between different properties -* how to use sound apparatus of math and statistics in order to prove some hypotheses, -* how to compute confidence intervals for random variable given data sample - -While this is definitely not exhaustive list of topics that exist within probability and statistics, it should be enough to give you a good start into this course. - -## 🚀 Challenge - -Use the sample code in the notebook to test other hypothesis that: -1. First basemen and older that second basemen -2. First basemen and taller than third basemen -3. Shortstops are taller than second basemen - -## [Post-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/7) - -## Review & Self Study - -Probability and statistics is such a broad topic that it deserves its own course. If you are interested to go deeper into theory, you may want to continue reading some of the following books: - -1. [Carlos Fernanderz-Granda](https://cims.nyu.edu/~cfgranda/) from New York University has great lecture notes [Probability and Statistics for Data Science](https://cims.nyu.edu/~cfgranda/pages/stuff/probability_stats_for_DS.pdf) (available online) -1. [Peter and Andrew Bruce. Practical Statistics for Data Scientists.](https://www.oreilly.com/library/view/practical-statistics-for/9781491952955/) [[sample code in R](https://github.com/andrewgbruce/statistics-for-data-scientists)]. -1. [James D. Miller. Statistics for Data Science](https://www.packtpub.com/product/statistics-for-data-science/9781788290678) [[sample code in R](https://github.com/PacktPublishing/Statistics-for-Data-Science)] - -## Assignment - -[Small Diabetes Study](assignment.md) - -## Credits - -This lesson has been authored with ♥️ by [Dmitry Soshnikov](http://soshnikov.com) From 1808d332d98e6090323738eba65956a2f48dbe7d Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Sun, 10 Oct 2021 21:31:50 -0500 Subject: [PATCH 55/74] fix: (translation): Revert translation on module 1 * revert translations for sections 1 & 2 --- .../translations/README.es.md | 175 ------------ .../02-ethics/translations/README.es.md | 263 ------------------ 2 files changed, 438 deletions(-) diff --git a/1-Introduction/01-defining-data-science/translations/README.es.md b/1-Introduction/01-defining-data-science/translations/README.es.md index 20011f7c..e69de29b 100644 --- a/1-Introduction/01-defining-data-science/translations/README.es.md +++ b/1-Introduction/01-defining-data-science/translations/README.es.md @@ -1,175 +0,0 @@ -# Definiendo la Ciencia de Datos - -|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/01-Definitions.png)| -|:---:| -|Definiendo la Ciencia de Datos - _Sketchnote por [@nitya](https://twitter.com/nitya)_ | - ---- - -[![Video definiendo la Ciencia de Datos](images/video-def-ds.png)](https://youtu.be/pqqsm5reGvs) - -## [Examen previo a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/0) - -## ¿Qué son los Datos? -En nuestra vida diaria, estamos constantemente rodeados por datos. El texto que estás leyendo ahora son datos, -la lista de números telefónicos de tus amigos en tu móvil son datos, también como la hora actual que se muestra en tu reloj. -Como seres humanos, operamos naturalmente con datos, contando el dinero que tenemos o escribiendo cartas a nuestros amigos. - -Sin embargo, los datos se vuelven más críticos con la creación de las computadoras. El rol principal de las computadoras -es realizar cálculos, pero éstas necesitan datos para operar. Por lo cual, necesitamos entender cómo las computadoras -almacenan y procesan los datos. - -Con el surgimiento de internet, el rol de las computadoras como dispositivos para la manipulación de datos incrementó. -Si lo piensas, ahora usamos computadoras mucho más para la comunicación y el procesamiento de datos, en lugar de para hacer cálculos. Cuando escribimos un correo electrónico a un amigo o buscamos alguna información en internet - estamos -creando, almacenando, transmitiendo y manipulando datos. - -> ¿Recuerdas la última vez que usaste una computadora para realmente calcular algo? - -## ¿Qué es Ciencia de Datos? - -En [Wikipedia](https://en.wikipedia.org/wiki/Data_science), se define la **Ciencia de Datos** como *un campo de las ciencias que usa métodos científicos para extraer conocimiento y perspectivas de datos estructurados y no estructurados, y -aplicar el conocimiento y conocimiento práctico de los datos a través de un amplio rango de dominios de aplicación*. - -Ésta definición destaca los siguientes aspectos importantes para la ciencia de datos: - -* El objetivo principal para la ciencia de datos es **extraer conocimiento** de los datos, en otras palabras - **entender** los datos, encontrar relaciones ocultas y construir un **modelo**. -* La ciencia de datos usa **métodos científicos**, como la probabilidad y estadística. De hecho, cuando el término **ciencia de datos** fue usado por primera vez, algunas personas argumentaron que la ciencia de datos era solo un nuevo nombre elegante para estadística. En estos días se ha vuelto evidente que es un campo mucho más amplio. -* El conocimiento obtenido puede ser aplicado para producir **conocimiento práctico**. -* Seremos capace de operar tanto datos **estructurados** y **no estructurados**. Más adelante en el curso discutiremos los diferentes tupos de datos. -* El **dominio de la aplicación** es un concepto importante, y un científico de datos necesita al menos cierta experiencia en el dominio del problema. - -> Otro aspecto importante de la Ciencia de Datos es que esta estudia como los datos son obtenidos, almacenados y operados usando computadoras. Mientras la estadística nos da los fundamentos matemáticos, la ciencia de datos aplica los conceptos matemáticos para realmente extraer conocimiento de los datos. - -Una de las formas (atribuidas a [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) de ver a la ciencia de datos es considerarla como un paradigma separado de la ciencia: -* **Empírica**, en la que confíamos mayormente en observaciones y resultados de experimientos -* **Teórica**, donde surgen nuevos conceptos desde el conocimiento científico existente -* **Computacional**, donde descubrimos nuevos principios basados en algunos experimentos computacionales -* **Dirigidos por datos**, basados en el descubrimiento de relaciones y patrones en los datos - -## Otros campos relacionados - -Ya que los datos son un concepto predominante, la ciencia de datos en sí misma también es un amplio campo, abarcando muchas otras disciplinas relacionadas. - -
-
Bases de datos
-
-La cosa más obvia a considerar es **cómo almacenar** los datos, por ejemplo como estructurarlos de tal formar que se procesen más rápido. Existen distintos tipos de bases de datos que almacenan datos estructurados y no estructurados, los -cuales [consideraremos en este curso] (../../2-Working-With-Data/README.md). -
-
Big Data
-
-Usualmente necesitamos almacenar y procesar enormes cantidades de datos con estructuras relativamente simples. Existen -formas especiales y herramientas para almacenar los datos en una forma distribuida on un clúster de computadoras, y procesarlas eficientemente. -
-
Aprendizaje automático
-
-Una de las formas de entender los datos es **construir un modelo** que será capaz de predecir el resultado deseado. Ser capaz de aprender esos modelos de los datos es el área de estudio del **aprendizaje automático**. Querrás dar un vistazo a nuestro currículum de [Aprendizaje automático para principiantes](https://github.com/microsoft/ML-For-Beginners/) para profundizar en ese campo. -
-
Inteligencia aritifcial
-
-Así como el aprendizaje automático, la inteligencia artificial también depende de los datos, e involucra la construcción de modelos altamente complejos que expondrán un comportamiento similar a un ser humano. Además, los métodos de AI usualmente nos permiten convertir datos no estructurados (por ejemplo, lenguaje natural) en datos estructurados extrayendo conocimiento útil. -
-
Visualización
-
-Cantidades descomunales de datos son incomprensibles para un ser humano, pero una vez que creamos visualizaciones útiles - podemos iniciar haciendo más sentido de los datos, y extrayendo algunas conclusiones. Por lo tanto, es importante conocer diversas formas de visualizar la información - lo cual cubriremos en la [Sección 3](../../3-Data-Visualization/README.md) de nuestro curso. Campos relacionados incluyen **infografías**, e **interacción humano-computadora** en general. -
-
- -## Tipos de datos - -Como ya se ha mencionado - los datos están en todas partes, ¡sólo necesitamos capturarlos en la forma correcta! Es útil distinguir entre datos **estructurados** y **no estructurados**. Los primeros típicamente son representados en una forma bien estructurada, usualmente como una tabla o conunto de tablas, mientras que los últimos es sólo una colección de archivos. Algunas veces podemos hablar de datos **semi-estructurados**, que tienen cierta estructura la cual podría variar mucho. - -| Estructurado | Semi-estructurado | No estructurado | -|------------- |-------------------|-----------------| -| Lista de personas con sus números telefónicos | Páginas de wikipedia con enlaces | Texto de la enciclopedia Británica | -| Temperatura en todas las habitaciones de un edificio a cada minuto por los últimos 20 años | Colección de documentos científicos en formato JSON con autores, fecha de publicación, y resumen | Recurso compartido de archivos con documentos corporativos | -| Datos por edad y género de todas las personas que entrar al edificio | Páginas de internet | Vídeo sin procesar de cámara de vigilancia | - -## Dónde obtener datos - -Hay múltiples fuentes de datos, y ¡sería imposible listarlas todas! Sin embargo, mencionemos algunos de los lugares típicos en dónde obtener datos: - -* **Estructurados** - - **Internet de las cosas**, incluyendo datos de distintos sensore, como sensores de temperatura o presión, proveen muchos datos útiles. Por ejemplo, si una oficina es equipada con sensores IoT, podemos controlar automáticamente la calefacción e iluminación para minimizar costos. - - **Encuestas** que realizamos a los usuarios después de pagar un producto o después de visitar un sitio web. - - **Análisis de comportamiento** podemos, por ejemplo, ayudarnos a entender que tanto profundiza un usuario en un sitio, y cuál es la razón típica por la cual lo deja. -* **No estructurados** - - Los **Textos** pueden ser una fuente rica en conocimiento práctico, empezando por el **sentimiento principal** generalizado, hasta la extracción de palabras clave e incluso algún significado semántico. - - **Imágenes** o **Video**. Un video de una cámara de vigilancia puede ser usado para estimar el tráfico en carretera, e informar a las personas acerca de posibles embotellamientos. - - **Bitácoras** de servidores web pueden ser usadas para entender qué páginas de nuestro sitio son las más visitadas y por cuánto tiempo. -* **Semi-estructurados** - - Grafos de **redes sociales** pueden ser una gran fuente de datos acerca de la la personalidad del usuario y efectividad potencial de difusión de la información. - - Cuando tenemos un conjunto de fotografías de una fiesta, podemos intentar extraer datos de la **dinámica de grupos** construyendo un grafo de personas tomándose fotos unas a otras. - -Conociendo posibles fuentes de datos diversas, puedes intentar pensar en distintos escenarios donde se pueden aplicar técnicas de ciencia de datos para conocer mejor la situación, y mejroar los procesos de negocio. - -## Qué puedes hacer con los datos - -En la ciencia de datos, nos enfocamos en los siguientes pasos del viaje de los datos: - -
-
1) Adquisición de datos
-
-El primer paso es reunir los datos. Mientras que en muchos casos esto puede ser un proceso simple, como datos obtenidos des una base de datos de una aplicación web. algunas veces necesitamos usar técnicas especiales. Por ejemplo, los datos obtenidos desde sensorres IoT pueden ser inmensos, y es una buena práctica el uso de endpoints búfer como IoT Hub para para reunir todos los datos antes de procesarlos. -
-
2) Almacenamiento de datos
-
-Almacenar los datos puede ser desafiante, especialmente si hablamos de big data. Al decidir cómo almacer datos, hace sentido anticiparse a la forma en la cual serán consultados. Existen varias formas de almacenar los datos: - -
-
3) Procesamiento de datos
-
-Esta es la parte más emocionante del viaje de los datos, el cual involucra el procesamiento de los datos desde su forma original hasta la forma en que puede ser usada por visualizaciones/modelo de entrenamiento. Cuando tratamos con datos no estructurados como texto o imágenes, debemos usar algunas técnias de IA para extraer las **características** de los datos, y así convertirlos a su forma estructurada. -
-
4) Visualización / entendimiento humano
-
-Usualmente para entender los datos necesitamos visualizarlos. Teniendo diversas ténicas de visualización en nuestro arsenal podemos encontrar la visualización adecuada para comprenderla. Comúnmente, un científico de datos necesita "jugar con los datos", visualizádolos varias veces y buscando alguna relación. Además, debemos usar técnicas de estadística para probar algunas hipótesis o probar la correlación entre distintas porciones de datos. -
-
5) Entrenando modelos predictivos
-
-Ya que el principal objetivo de la ciencia de datos es ser capaz de tomar decisiones basándonos en los datos, debemos usar técnicas de aprendizaje automático para construir modelos predictivos que serán capces de resolver nuestros problemas. -
-
- -Por supuesto, dependiendo de los datos reales algunos pasos serán omitidos (por ejemplo, cuando ya tenemos los datos en la base de datos, o cuando no necesitamos modelo de entrenamiento), o algunos pasos deben ser repetidos varias veces (como el procesamiento de datos). - -## Digitalización y transformación digital - -En la última década, muchos negocios comenzaron a entender la importancia de los datos al tomar decisiones de negocio. Para aplicar los principios de ciencia de datos para dirigir un negocio primero necesitas reunir algunos datos, por ejemplo, de alguna forma digitalizar los procesos de negocio. Esto es conocido como **digitalización**, y seguido usar técnicas de ciencia de datos para guiar decisiones esto usualmente conlleva a un incremento significativo de la productividad (o incluso negocios pivote), llamado **transformación digital**. - -Consideremos el siguiente ejemplo. Supongaos, tenemos un curso de ciencia de datos (como éste), el cual ofrecemos en línea a los estudiante, y queremos usar ciencia de datos para mejorarl. ¿Cómo podemos hacerlo? - -Podemos comenzar pensando "¿qué puede ser digitalizado?". La forma más simple sería medir el tiempo que le toma a cada estuddiante completar cada módulo, y el conocimiento obtenido (por ejemplo, realizando exámenes de opción múltiple al final de cada módulo). Promediando el tiempo en concluir de todos los estudiantes, y trabajar en simplificarlos. - -> Argumentarás que este enfoque no es idóneo, porque los módulos pueden tener distinta duración. Problablemente es más justo dividir el tiempo por la longitud del módulo (en número de caracteres), y comparar esos valores en su lugar. - -Cuando comenzamos analizando los resultados de los exámenes de opción múltiple, intentamos encontrar conceptos específicos que los estudiantes entendieron vagamente,y mejorar el contenido. Para hacerlo, necesitamos diseñar exámenes de tal forma que cada pregunta se relacione a un concepto concreto o porción de conocimiento. - -Si queremos hacerlo aún más complejo, podemos trazar el tiempo invertido en cada módulo contra la categoría de edad de los estudiantes. Encontraremos que para algunas categorías de edad les toma ciertamente más tiempo el completar el módulo, o algunos estudiantes abandonan el curso en cierto punto. Esot nos puede ayudar a sugerir recomendaciones de módulos por edad, y así minimizar el descontengo de la gente por falsas expectativas. - -## 🚀 Desafío - -En este desafío, intentaremos encontrar los conceptos relevante para el campo de la Ciencia de Datos consultando algunos textos. Tomarermos un artículo de Wikipedia de Ciecnia de Datos, descargaremos y procesaremos el texto, y luego construiremos una nube de palabras como esta: - -![Nube de palabras para Ciencia de Datos](images/ds_wordcloud.png) - -Visita [`notebook.ipynb`](notebook.ipynb) para leer el código.También pueder ejecutarlo y ver como realiza todas las transformaciones de los datos en tiempo real. - -> Si no sabes como ejecutar el código en Jupyter Notebook, da un vistazo a [este artículo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/). - - - -## [Cuestionario porterior a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/1) - -## Ejercicios - -* **Tarea 1**: Modifica el código anterior para encontrar conceptos relacionados para los campos de **Big Data** y **Machine Learning** -* **Tarea 2**: [Piensa en los escenarios para la Ciencia de Datos](assignment.md) - -## Créditos - -Esta lección ha sido escrita con ♥️ por [Dmitry Soshnikov](http://soshnikov.com) diff --git a/1-Introduction/02-ethics/translations/README.es.md b/1-Introduction/02-ethics/translations/README.es.md index 8d883b1b..e69de29b 100644 --- a/1-Introduction/02-ethics/translations/README.es.md +++ b/1-Introduction/02-ethics/translations/README.es.md @@ -1,263 +0,0 @@ -# Introducción a la ética de datos - -|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/02-Ethics.png)| -|:---:| -| Ética para ciencia de datos - _Sketchnote por [@nitya](https://twitter.com/nitya)_ | - ---- - -Todos somos ciudadanos de datos viviendo en un gobernado por datos. - -Las tendencias de mercado nos dicen que para 2022, 1 de cada 3 grandes organizaciones comprará y venderá sus datos en línea a través de [mercados e intercambios](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/). Como **desarrolladores de Apps**, lo encontraremos más fácil y barato que integrar conocimientos dirigidos por datos y automatización dirigida por algoritmos en las experiencias de usuario del día a día. Pero como la AI se vuelve cada vez más presente, necesitarempos entender lso daños potenciales causados por el [armamentismo](https://www.youtube.com/watch?v=TQHs8SA1qpk) de dichos algoritmos a escala. - -Las tendencias también indican que crearemos y consumiremos más de [180 zettabytes](https://www.statista.com/statistics/871513/worldwide-data-created/) de datos para el 2025. Como **científicos de datos**, esto nos da niveles de acceso sin precedentes a datos personales. Esto significa que podemos construir perfiles conductuales de usuarios e influenciar en la toma de decisiones en formas que crea una [ilusión de libre elección](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) mientras empuja a los usuarios hacia los resultados que preferimos. También plantea preguntas más amplias respecto a la privacidad de datos y protección de los usuarios. - -La ética de datos son _barreras de seguridad necesarias_ para la ciencia de datos e ingeniería, ayudándonos a minimizar daños potenciales y consecuencias no deseadas de nuestras acciones dirigidas por datos. El [Hype Cycle de Gartner para AI](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifica tendencias relevantes en ética digital, AI responsable, y gobernanza de AI como factores clave para mega-tendencias mayores alrededor de la _democratización_ e _industrialización_ de la AI. - -![Hype Cycle de Gartner para AI - 2020](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==) - -En esta lección, exploraremos la fascinante área de la ética de datos - desde los conceptos clave y desafíos, hasta los casos de estudio y conceptos de AI aplicados como gobernanza - que ayuda a establecer una cultura de ética en equipos y organizaciones que trabajan con datos y AI. - - - - -## [Examen previo a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/2) 🎯 - -## Definiciones básicas - -Empecemos entendiendo la terminología básica. - -La palabra "ética" proviene de la [palabra griega "ethikos"](https://en.wikipedia.org/wiki/Ethics) (y su raíz "ethos") lo cual significa _carácter o naturaleza moral_. - -La **ética** se trata de valores compartidos y principios morales que gobiernan nuestro comportamiento en sociedad. La ética se basa no en leyes sino en normas más ampliamente aceptadas de lo que es "correcto vs lo incorrecto". Sin embargo, las consideraciones éticas pueden influenciar iniciativas de gobernanza corporativa y regulaciones de gobernanza que crean más incentivos para el cumplimiento. - -La **ética de datos** es una [nueva rama de la ética](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1) que "estudia y evalua problemas morales relacionados a _datos, algoritmos y prácticas correspondientes_"- Aquí, los **"datos"** se centran en acciones relacionadas a la generación, grabación, curación, procesamiento de difusión, intercambio y uso de **"algoritmos"** centrados en AI, agentes, aprendizaje automático, y robots, así como **"prácticas"** enfocadas en temas como inovación responsable, programación, hackeo y códigos de ética. - -**Ética aplicada** es la [aplicación práctica de consideraciones morales](https://en.wikipedia.org/wiki/Applied_ethics). Es el proceso de investigar activamente cuestiones éticas en el contexto de _acciones del mundo real, productos y procesos_, y tomar medidas correctivas para hacer que estos se alinean con nuestros valores éticos definidos. - -**Cultura ética** trata de [_operacionalizar_ la ética aplicada](https://hbr.org/2019/05/how-to-design-an-ethical-organization) para confirmar que nuestros principios éticos y prácticas son adoptados de forma consistente y escalable a través de toda la organización. Una cultura ética exitosa define principios éticos a nivel organización, provee incentivos significativos para el cumplimiento y refuerza las normas éticas alentando y amplificando los comportamientos deseados en cada nivel de la organización. - - -## Conceptos éticos - -En esta sección, duscutiremos conceptos como **valores compartidos** (principios) y **retos éticos** (problemas) para la ética de datos - y explora **casos de estudio** que te ayudan a entender estos conceptos en el contexto del mundo real. - -### 1. Principios éticos - -Cada estrategia de ética de datos comienza por la definición de _principios éticos_ - los "valores compartidos" que describen los comportamientos aceptables, y guían acciones de conformidad, en nuestros proyectos de datos y AI. Puedes definir estos a nivel individual o de equipo. Sin embargo, la mayoría de las grandes organizaciones describen estos en una misión _ética de AI_ o marco de trabajo que es definido a niveles corporativos y refuerza consistentement a través de todos los equipos. - -**Ejemplo:** La misión [responsable de AI](https://www.microsoft.com/en-us/ai/responsible-ai) de Microsoft se lee: _"Estamos comprometidos al avance de principios éticos dirigidos por AI que anteponen primero a la gente"_ - identificando 6 principios éticos en el marco de trabajo descrito a continuación: - -![AI responsable en Microsoft](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png) - -Exploremos brevemente estos principios. La _transparencia_ y _responsabilidad_ son los valores fundamentales sobre los que se cimientan otros principios - iniciemos aquí: - -* [**Responsabilidad**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) hace a los practicantes _responsables_ por sus datos y operaciones de AI, en cumplimiento con estos principios éticos. -* [**Transparencia**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) asegura que los datos y acciones de AI sean _entendibles_ (interpretables) para los usuarios, explicando el qué y el porqué detrás de las decisiones. -* [**Justicia**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6) - se centra en asegurar que la AI trata a _todas las personas_ justamente, dirigiendo cualquier sesgo sistémico o social-ético implícito in datos y sistemas. -* [**Fiabilidad y seguridad**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - asegura que la AI se comporta _consistentemente_ con los valores definidos, minimizando daños potenciales o consecuencias no intencionadas. -* [**Privacidad & seguridad**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - se trata del entendimiento del linaje de datos, y provee _privacidad de datos y protecciones relacionadas_ a los usuarios. - -* [**Inclusión**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - trata del diseño de soluciones AI con la intención, adaptándolas para reunir un _amplio rango de necesidades humanas_ y capacidades. - -> 🚨 Piensa cual podría ser tu misión de ética de datos. Explorar marcos de trabajo éticos de AI de otras organizaciones - aquí tienes ejemplos de [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles) , y[Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/). ¿Qué valores compartidos tienen en común? ¿Cómo se relacionan estos principios al producto de AI o industria en la cual operan? - -### 2. Desafíos éticos - -Una vez que tenemos pricipios éticos definidos, el siguiente paos es evaluar nuestros datos y acciones AI para ver si estos se alinean con los valores compartidos. Piensa en tus acciones en 2 categorías: _recolección de datos_ y _diseño de algoritmos_. - -Con la recolección de datos, las acciones probablemente involucren **datos personales** o información de identificación personal (PII) para individuos vivos identificables. Esto incluye [diversos artículos de datos no personales](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) que _colectivamente_ identifican a un individuo. Los desafíos éticos pueden relacionarse con _privacidad de datos_, _propiedad de los datos_, y temas relacionados como _consentimiento informado_ y _derechos de propiedad intelectual_ para los usuarios. - -Con el diseño de algoritmo, las acciones involucran la recolección y curación de **conjuntos de datos**, luego usarlos para entrenar y desplegar **modelos de datos** que predicen resultados o automatizan decisiones en contexto del mundo real. Los desafíos éticos pueden surgir de _conjuntos de datos sesgados_, problemas con la _calidad de los datos_, _injusticia_, y _malinterpretación_ in los algoritmo - incluyendo algunos problemas que son sistémicos por naturaleza. - -En ambos casos, los desafíos éticos destacan áreas donde nuestas acciones pueden encontrar conflictos con nuestros valores compartidos. Para detectar, mitigar, minimizar, o eliminar estas preocupaciones - necesitamos realizar preguntas morales de "sí/no" relacionadas a nuestas acciones, luego tomar acciones correctivas según sea necesario. Demos un vistazo a algunos desafíos éticos y las preguntas morales que plantean: - - -#### 2.1 Propiedad de los datos - -La recolección de datos suele involucrar datos que pueden identificar los sujetos de datos. La [propiedad de los datos](https://permission.io/blog/data-ownership) trata del _control_ y [_derechos de usuario_](https://permission.io/blog/data-ownership) relacionados a la creación, procesamiento y dispersión de los datos. - -Las preguntas morales que debemos hacer son: - * ¿Quién posea los datos? (usuario u organización) - * ¿Qué derechos tienen los sujetos de datos? (ejemplo: acceso, eliminación, portabilidad) - * ¿Qué derechos tienen las organizaciones? (ejemplo: rectificar revisiones de usuarios maliciosos) - -#### 2.2 Consentimiento informado - -[Consentimiento informado](https://legaldictionary.net/informed-consent/) define el acto de los usuarios al aceptar una acción (como la recolección de datos) con un _completo entendimiento_ de hechos relevantes incluyendo el propósito, riesgos potenciales y alternativas. - -Las preguntas a explorar son: - * ¿El usuario (sujeto de datos) otorgó el permiso para el uso y cpatura de datos? - * ¿El usuario entendió el propósito para el cual los datos fueron capturados? - * ¿EL usuario entendió los riesgos potenciales de su participación? - -#### 2.3 Propiedad intelectual - -La [propiedad intelectual](https://en.wikipedia.org/wiki/Intellectual_property) se refiere a creaciones intangibles resultado de la iniciativa humana, que puede _tener valor económico_ para individuos o negocios. - -Las preguntas a explorar son: - * ¿Los datos recolectados tiene valor económico para un usuario o negocio? - * ¿El **usuario** tiene propiedad intelectual en este ámbito? - * ¿La **organización** tiene propiedad intelectual en este ámbito? - * Si estos derechos existen, ¿cómo los protegemos? - -#### 2.4 Privacidad de datos - -La [privacidad de datos](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/) o privacidad de la información se refiere a la preservación de la privacidad del usuario y la protección de la identidad del usuario respecto a información de identificación personal. - -Las preguntas a explorar son: - * ¿Están los datos (personales) de los usuarios seguros contra hackeos y filtraciones? - * ¿Están los datos de usuario accesibles sólo para usuarios y contextos autorizados? - * ¿Se preserva el anonimato de los usuarios cuando los datos son compartidos o esparcidos? - * ¿Puede un usuario ser desidentificado de conuntos de datos anonimizados? - - -#### 2.5 Derecho al olvido - -El [derecho al olvido](https://en.wikipedia.org/wiki/Right_to_be_forgotten) o [derecho a la eliminación](https://www.gdpreu.org/right-to-be-forgotten/) provee protección adicional a datos personales de los usuarios. Especialmente, brinda a los usuarios el derecho a solicitar la eliminación o remoción de datos personales de búsquedas de internet y otras ubicaciones, _bajo circunstancias específicas_ - permitiéndoles un nuevo comienzo en línea sin las acciones pasadas siendo retenidas contra él. - -Las preguntas a explorar son: - * ¿El sistema permite a los sujetos de datos solicitar eliminación? - * ¿La remoción del consentimiento del usuario debería disparar la eliminación automatizada? - * ¿Se recolectaron los datos sin consentimiento o por medios no legítimos? - * ¿Estamos de acuerdo con las regulaciones de gobierno para la privacidad de los datos? - - -#### 2.6 Sesgo del conjunto de datos - -Un conjunto de datos o [sesgo de recopilación](http://researcharticles.com/index.php/bias-in-data-collection-in-research/) pretende seleccionar un subconjunto _no representativo_ de datos para el desarrollo de un algorítmo, creando una potencial injusticia en los resultados para distintos grupos. Los tipos de sesgos incluyen selección o muestreo de sesgo, sesgo voluntario y sesgo de instrumento. - -Las preguntas a explorar son: - * ¿Reclutamos un conjunto representativo de sujetos de datos? - * ¿Probamos nuestros conjuntos de datos recoletados o curados para distintos sesgos? - * ¿Podemos mitigar o eliminar los sesgos descubiertos? - -#### 2.7 Calidad de los datos - -[La calidad de los datos](https://lakefs.io/data-quality-testing/) se enfoca en la validez de los conjuntos de datos curados que se usan para desarrollar nuestros algoritmos, comprobando si las características y registros cumplen los requerimientos para el nivel de precisión necesario para nuestros propósitos de AI. - -Las preguntas a explorar son: - * ¿Capturamos _características_ válidas para nuestro caso de uso? - * ¿Los datos fueron capturados _consistentemente_ a través de las distintas fuentes de datos? - * ¿Están _completos_ los conjuntos de datos para las distintas condiciones o escenarios? - * ¿La información es capturada de forma _precisa_ reflejando la realidad? - -#### 2.8 Justicia del algoritmo - -[La justicia del algoritmo](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f) verifica que el diseño del algoritmo discrimina sistemáticamente contra subgrupos específicos de sujetos de datos que conlleven a [daños potenciales](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml) en _asignación_, (donde los recursos son negados o retenidos para ese grupo) y _calidad del servicio_ (donde la AI no es tan precisa para algunos subgrupos como lo es para otros). - -Las preguntas a explorar son: - * ¿Evaluamos la precisión del modelo para distintos subgrupos y condiciones? - * ¿Escrutinamos el sistema buscando daños potenciales (por ejemplo, estereotipos? - * ¿Podemos revisar los datos o retener re-entrenar modelos para mitigar daños potenciales? - -Explora recursos como [Listas de comprogación de justicia de AI](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA) para aprender más. - -#### 2.9 Malinterpretación - -[La malinterpretación de datos](https://www.sciencedirect.com/topics/computer-science/misrepresentation) trata de preguntarse si estamos comunicando ideas honestamente de los datos reportados en una forma engañosa para soportar la narrativa deseada. - -Las preguntas a explorar son: - * ¿Estamos reportando datos incompletos o inexactos? - * ¿Estamos visualizando los datos de tal forma conllevan a conclusiones engañosas? - * ¿Estamos usando técnicas estadísticas selectivas para manipular los resultados? - * ¿Existen explicaciones alternativas par pueden ofrecer una conclusión distinta? - -#### 2.10 Libertad de elección -La [ilusión de libertad de elección](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) ocurre cuando un sistema "elige arquitecturas" usando algoritmos de toma de decisiones para empujar a la gente hacia la elección de un resultado preferido mientras aparenta darles opciones y control. Estos [patrones obscuros](https://www.darkpatterns.org/) pueden causar daño social y económico a los usuarios. Ya que las decisiones del usuario impactan en los perfiles de comportamiento, estas acciones dirigen potencialmente a futuras elecciones que pueden amplificar y extender el impacto de estos daños. - -Las preguntas a explorar son: - * ¿El usuario entendió las implicaciones de realizar dicha elección? - * ¿El usuario estaba conciente de las opciones (alternativas) y los pros y contrar de cada una? - * ¿El usuario puede revertir una elección influenciada o automatizada posteriormente? - -### 3. Casos de estudio - -Para poner estos desafíos éticos en contexto del mundo real, ayuda ver casos de estudio que destacan el daño potencial y las consecuencias a individuos y sociedad, cuando dichas violaciones éticas son pasadas por alto. - -Aquí hay algunos ejemplos: - -| Desafío de ética | Caso de estudio | -|--- |--- | -| **Consentimiento informado** | 1972 - [Estudio de sífilis Tuskegee](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - A los hombres afroamericanos que participaron en el estudio le fue prometido tratamiento médico gratuito _pero fueron engañados_ por los investigadores quienes fallaron al informar a los sujetos en sus diagnósticos o en la disponibilidad del tratamiento. Muchos sujetos murieron y los compañeros o hijos fueron afectados; el estudio duró 40 años. | -| **Privacidad de los datos** | 2007 - El [premio de datos de Netflix](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/) otorgó a investigadores con _10M de clasificaciones anóminas de 50K clientes_ para ayudar a mejorar los algoritmos de recomendación. Sin embargo, los investigadores fueron capaces de correlacionar datos anónimos con datos personalmente identificables en _conjuntos de datos externos_ (por ejemplo, comentarios en IMDb) - efectivamente "des-anonimizando" a algunos subscriptores de Netflix.| -| **Sesgo de colección** | 2013 - La ciudad de Boston [desarrolló Street Bump](https://www.boston.gov/transportation/street-bump), una app que permite a los ciudadanos reportar baches, dando a la ciudad mejores datos de la carretera para encontrar y reparar desperfectos. Sin embargo, [la gente en los grupos con menores ingresos tuvieron menos acceso a autos y teléfonos](https://hbr.org/2013/04/the-hidden-biases-in-big-data), haciendo sus problemas de carretera invisibles para la app. Los desarrolladores trabajaron en conjunto con académicos para cambiar _el acceso equitativo y brecha digital_ y así fuese más justo. | -| **Justicia de algoritmos** | 2018 - El [estudio de tonos de género](http://gendershades.org/overview.html) del MIT evaluó la precisión de productos de clasificación de género , exponiendo brechas en la precisión para mujeres y personas de color. Una [tarjeta 2019 de Apple](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) parecía ofrecer menos crédit a mujeres que a hombres. Ambos ilustraron problemas en sesgos de algoritmos llevando a daños socio-económicos. -| **Malinterpretación de datos** | 2020 - El [departamento de salud pública de Georgia liberó gráficos de COVID-19](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) que parecían malinformar a los ciudadanos acerca de las tendencias en los casos confirmados sin orden cronológico en el eje x. Esto ilustra la malinterpretación a través de visualizaciones engañosas. | -| **Ilusión de libertad de elección** | 2020 - La aplicación de aprendizaje [ABCmouse pagó $10M para asentar una queja FTC](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) donde los padres fueron engañados para pagar subscripciones que no podían cancelar. Esto ilustra los patrones obscuros en arquitecturas de elección, donde los usuarios fueron empujados hacia elecciones potencialmente dañinas. | -| **Privacidad de los datos y derechos de usuario** | 2021 - La [infracción de datos](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) de Facebook expuso datos de 530M de usuarios, resultando en un acuerdo de $5B para la FTC. Sin embargo, esto rechazó notificar a los usuarios de la brecha violando los derechos de usuarios alrededor de la transparencia y acceso de datos. | - -¿Quieres explorar más casos de estudio? Revisa los siguientes recursos: -* [Ética desenvuelta](https://ethicsunwrapped.utexas.edu/case-studies) - dilemas éticos en diversas industrias. -* [Curso de ética en ciencia de datos](https://www.coursera.org/learn/data-science-ethics#syllabus) - referencía los casos de estudio explorados. -* [Donde las cosas han ido mal](https://deon.drivendata.org/examples/) - lista de comprobación de deon con ejemplos - -> 🚨 Piensa en los casos de estudio que has visto - ¿has experimentado o sido afectado por un desafío ético similar en tu vida? ¿Puedes pensar en al menos otro caso de estudio que ilustre uno de los desafíos éticos que discutimos en esta sección? - -## Ética aplicada - -Hemos hablado de conceptos éticos, desafíos y casos de estudio en contextos del mundo real. Pero ¿cómo podemos _aplicar_ los principios éticos y prácticas en nuestros proyectos? y ¿cómo _aplicamos_ estas prácticas para una mejor gobernanza? Exploremos algunas soluciones del mundo real: - -### 1. Códigos profesionales - -Los códigos profesionales ofrecen una opción para que las organizaciones "incentiven" a los miembros a apoyar sus principios éticos y su misión. Los códigos son _guías morales_ para el comportamiento profesional, que ayudan a los empleados o miembros a tomar decisiones que se alinea con sus principios de organización. Estas son tan buenas como el cumplimiento voluntario de los miembros; sin embargo, muchas organizaciones ofrecen incentivos adicionales y penalizaciones para motivar el cumplimiento de los miembros. - -Los ejemplos incluyen: - - * Código de ética de [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/) - * Código de conducta de la [Asociación de ciencia de datos](http://datascienceassn.org/code-of-conduct.html) (creado en 2013) - * [Código de ética y conducta profesional de ACM](https://www.acm.org/code-of-ethics) (desde 1993) - -> 🚨 ¿Perteneces a una organización profesional de ingeniería o ciencia de datos? Explora su sitio para ver si definen un código de ética profesional. ¿Qué te dice acerca de sus principios éticos? ¿Cómo "incentivan" a los miembros para que sigan el código? - -### 2. Listas de comprobación de ética - -Mientras los códigos profesionales defiene los _comportamientos éticos_ requerido por sus practicantes, estos tienen [limitaciones conocidas](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) en su aplicación, particularmente en proyectos a gran escala. En su lugar, muchos expertos en ciencia de datos [abogan por listas de comprobación](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), que pueden **conectar principios a prácticas** en formas más determinísticas y accionables. - -Las listas de comprobación convierten preguntas en tareas de "sí/no" que pueden ser operadas, permitiendo darles seguimiento como parte de flujos de trabajo de liberación de productos estándar. - -Los ejemplos incluyen: - * [Deon](https://deon.drivendata.org/) - una lista de comprobación de ética de datos de propósito general creada a partir de [recomendaciones de la industria](https://deon.drivendata.org/#checklist-citations) con una herramienta de línea de comandos para su fácil integración. - * [Lista de comprobación de auditoría de privacidad](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - provee orientación general para prácticas de manejo de la información desde perspectivas legales y sociales. - * [Lista de comprobación de justicia de AI](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - creada por practicantes de AI para soportar la adopción e integración de controles justos en los ciclos de desarrollo de AI. - * [22 preguntas para ética en datos y AI](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - marcos de trabajo más abiertos, estructurados para la exploración inicial de problemas éticos en contextos de diseño, implementación y organización. - -### 3. Regulaciones éticas - -La ética trata de definir valores compartidos y hacer lo correcto _voluntariamente_. El **cumplimiento** trata de _seguir la ley_ donde se define. La **gobernanza** cubre ampliamente todas las formas en las cuales las organizaciones operan para hacer cumplir los principios éticos y seguir las leyes establecidas. - -Hoy en día, la gobernanza toma dos formas dentro de la organización. Primero, define los principios **éticos de AI** y establece prácticas para promover la adopción en todos los proyectos relacionados a AI en la organización. Segundo, trata de cumplir con todoso los mandatos de gobierno en **regulaciones de protección de datos** para las regiones en las cuales opera. - -Ejemplos de protección de datos y regulaciones de privacidad: - - * `1974`, [Ley de privacidad de EE.UU.](https://www.justice.gov/opcl/privacy-act-1974) - regula al _gobierno federal_ la recolección, uso y divulgación de información personal. - * `1996`, [Ley de responsabilidad y portabilidad de seguro de salud de EE.UU. (HIPAA)](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - protege los datos de salud personales. - * `1998`, [Ley de protección de la privacidad en línea para niños de EE.UU. (COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - protege la privacidad de los datos para menores de 13 años. - * `2018`, [Regulación de protección general de los datos (GDPR)](https://gdpr-info.eu/) - provee derechos de usuario, protección de datos y privacidad. - * `2018`, [Ley de privacidad para los consumidores de California (CCPA)](https://www.oag.ca.gov/privacy/ccpa) da a los consumidores más _derechos_ sobre sus datos (personales). - * `2021`, [Ley China de protección de la información personal](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/) recién establecida, crea una de las regulaciones más grandes a nivel mundial respecto a privacidad de los datos. - -> 🚨 La Unión Europea definió la GDPR (regulación general de protección de datos) quedando como una de las regulaciones a la privacidad de los datos más influyentes de hoy en día. ¿Sabías que también define [8 derechos de usuario](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr) para la protección de la privacidad digital de los ciudadanos y datos personales? Aprende más acerca de qué son y porqué importan. - - -### 4. Cultura ética - -Nota que existe una brecha intangible entre _cumplimiento_ (hacer suficiente para cumplir "lo designado por ley") y atender [problemas sistémicos](https://www.coursera.org/learn/data-science-ethics/home/week/4) (como la osificación, asimetría de la información e injusticia distribucional) que acelera el armamento de la AI. - -Lo último requier [enfoques colaborativos para definir culturas de ética](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f) que construyan conexiones emocionales y valores compartidos consistentes _a través de las organizaciones_ en la industria. Esto hace un llamado a [culturas de ética de datos más formalizadas](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/) en las organizaciones - permitiendo a _cualquiera_ tirar del [cordón de Andon](https://en.wikipedia.org/wiki/Andon_(manufacturing)) (para plantear cuestiones éticas desde el principio en el proceso) y hacer de las _evaluaciones éticas_ (por ejemplo, en la contratación) un criterio principal en la formación de equipos en proyectos de AI. - ---- -## [Examen posterior a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/3) 🎯 -## Revisión y auto-estudio - -Los siguientes cursos y libros te facilitarán el entendimiento de conceptos éticos principales y desafíos, mientras que los casos de estudio y herramientas te ayudarán con las prácticas éticas aplicadas en contextos del mundo real. Aquí tienes algunos recursos con los que comenzar. - -* [Aprendizaje automático para principiantes](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - lecciones de justicia, de Microsoft. -* [Principios de AI responsable](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - ruta de aprendizaje gratuito de Microsoft Learn. -* [Ética y Ciencia de Datos](https://resources.oreilly.com/examples/0636920203964) - Libro electrónico de O'Reilly (M. Loukides, H. Mason et. al) -* [Ética de Ciencia de Datos](https://www.coursera.org/learn/data-science-ethics#syllabus) - curso en línea de la Universidad de Michigan. -* [Ética desenvuelta](https://ethicsunwrapped.utexas.edu/case-studies) - casos de estudio de la Universidad de Texas. - -# Asignación - -[Escribe un caso de estudio de ética de datos](assignment.md) From b68683d233501d2f39ec7748f49a08d6846c8a14 Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Mon, 11 Oct 2021 11:07:11 +0530 Subject: [PATCH 56/74] Update README.hi.md --- .../16-communication/translations/README.hi.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md index 234072d7..fcfab7f7 100644 --- a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md @@ -1,7 +1,8 @@ # डेटा विज्ञान के जीवनचक्र: संचार -|![ द्वारा स्केचनोट [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/16-Communicating.png)| + +|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/16-Communicating.png)| |:---:| -| डेटा विज्ञान के जीवनचक्र: संचार - [@nitya](https://twitter.com/nitya)_द्वारा स्केचनोट _ | +| डेटा विज्ञान के जीवनचक्र: संचार - _[@nitya](https://twitter.com/nitya) द्वारा स्केचनोट_| ## [प्री-लेक्चर क्विज ](https://red-water-0103e7a0f.azurestaticapps.net/quiz/30) ऊपर दिए गए प्री-लेक्चर क्विज़ के साथ क्या करना है, इसके बारे में अपने ज्ञान का परीक्षण करें! @@ -37,7 +38,7 @@ ### 1. अपने दर्शकों, अपने चैनल और अपनी संचार पद्धति को समझें जिस तरह से आप परिवार के सदस्यों के साथ संवाद करते हैं, वह आपके दोस्तों के साथ संवाद करने के तरीके से अलग होने की संभावना है। आप शायद अलग-अलग शब्दों और वाक्यांशों का उपयोग करते हैं जिन्हें आप जिन लोगों से बात कर रहे हैं, उनके समझने की अधिक संभावना है। डेटा संचार करते समय आपको वही दृष्टिकोण अपनाना चाहिए। इस बारे में सोचें कि आप किससे संवाद कर रहे हैं। उनके लक्ष्यों और उस संदर्भ के बारे में सोचें जो उनके पास उस स्थिति के आसपास है जो आप उन्हें समझा रहे हैं। -आप संभावित रूप से अपने अधिकांश दर्शकों को एक श्रेणी में समूहित कर सकते हैं। एक _Harvard Business Review_ लेख में, "[डेटा के साथ कहानी कैसे सुनाएं] (http://blogs.hbr.org/2013/04/how-to-tell-a-story-with-data/)," डेल कार्यकारी रणनीतिकार जिम स्टिकलेदर दर्शकों की पांच श्रेणियों की पहचान करता है। +आप संभावित रूप से अपने अधिकांश दर्शकों को एक श्रेणी में समूहित कर सकते हैं। एक _Harvard Business Review_ लेख में, “[डेटा के साथ कहानी कैसे बताएं](http://blogs.hbr.org/2013/04/how-to-tell-a-story-with-data/),” डेल कार्यकारी रणनीतिकार जिम स्टिकलेदर दर्शकों की पांच श्रेणियों की पहचान करता है। - **नौसिखिया**: विषय के लिए पहला प्रदर्शन, लेकिन नहीं चाहता अति सरलीकरण @@ -66,9 +67,9 @@ आप अंत को ध्यान में रखकर कैसे शुरू करते हैं? अपने डेटा को संप्रेषित करने से पहले, अपने मुख्य निष्कर्ष लिख लें। फिर, जिस तरह से आप कहानी तैयार कर रहे हैं, जिस तरह से आप अपने डेटा के साथ बताना चाहते हैं, अपने आप से पूछें, "यह मेरे द्वारा बताई जा रही कहानी में कैसे एकीकृत होता है?" -सावधान रहें - अंत को ध्यान में रखते हुए शुरुआत करना आदर्श है, आप केवल उस डेटा को संप्रेषित नहीं करना चाहते जो आपके इच्छित takeaways का समर्थन करता है। ऐसा करने को चेरी-पिकिंग कहा जाता है, जो तब होता है जब एक संचारक केवल उस डेटा का संचार करता है जो उस बिंदु का समर्थन करता है जिसे वे बनाने के लिए बांध रहे हैं और अन्य सभी डेटा को अनदेखा करते हैं। +सावधान रहें - अंत को ध्यान में रखते हुए शुरुआत करना आदर्श है, आप केवल उस डेटा को संप्रेषित नहीं करना चाहते जो आपके इच्छित टेकअवे का समर्थन करता है। ऐसा करने को चेरी-पिकिंग कहा जाता है, जो तब होता है जब एक संचारक केवल उस डेटा का संचार करता है जो उस बिंदु का समर्थन करता है जिसे वे बनाने के लिए बांध रहे हैं और अन्य सभी डेटा को अनदेखा करते हैं। -यदि आपके द्वारा एकत्र किया गया सभी डेटा स्पष्ट रूप से आपके इच्छित टेकअवे का समर्थन करता है, तो बढ़िया। लेकिन अगर आपके द्वारा एकत्र किया गया डेटा है जो आपके टेकअवे का समर्थन नहीं करता है, या यहां तक ​​​​कि आपके प्रमुख टेकअवे के खिलाफ तर्क का समर्थन करता है, तो आपको उस डेटा को भी संप्रेषित करना चाहिए। अगर ऐसा होता है, तो अपने दर्शकों के साथ खुलकर बात करें और उन्हें बताएं कि आप अपनी कहानी के साथ बने रहने का विकल्प क्यों चुन रहे हैं, भले ही सभी डेटा इसका समर्थन न करें। +यदि आपके द्वारा एकत्र किया गया सभी डेटा स्पष्ट रूप से आपके इच्छित टेकअवे का समर्थन करता है, तो बढ़िया। लेकिन अगर आपके द्वारा एकत्र किया गया डेटा है जो आपके टेकअवे का समर्थन नहीं करता है, या यहां तक कि आपके प्रमुख टेकअवे के खिलाफ तर्क का समर्थन करता है, तो आपको उस डेटा को भी संप्रेषित करना चाहिए। अगर ऐसा होता है, तो अपने दर्शकों के साथ खुलकर बात करें और उन्हें बताएं कि आप अपनी कहानी के साथ बने रहने का विकल्प क्यों चुन रहे हैं, भले ही सभी डेटा इसका समर्थन न करें। ### 3. इसे एक वास्तविक कहानी की तरह देखें @@ -208,4 +209,4 @@ ## कार्यभार -[एक कहानी बताओ] (assignment.md) \ No newline at end of file +[एक कहानी बताओ](assignment.md) From 2011504c98059a6d5540ad45b39a9aa51374c7c6 Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Mon, 11 Oct 2021 11:16:09 +0530 Subject: [PATCH 57/74] Update README.hi.md --- .../16-communication/translations/README.hi.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md index fcfab7f7..85ae92d4 100644 --- a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md @@ -1,6 +1,6 @@ # डेटा विज्ञान के जीवनचक्र: संचार -|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/16-Communicating.png)| +|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev)](https://github.com/Heril18/Data-Science-For-Beginners/raw/main/sketchnotes/16-Communicating.png)| |:---:| | डेटा विज्ञान के जीवनचक्र: संचार - _[@nitya](https://twitter.com/nitya) द्वारा स्केचनोट_| @@ -147,7 +147,7 @@ **क्लाइमेक्स** आधार तैयार करने के बाद, इमर्सन 5 या इतने मिनट के लिए चरमोत्कर्ष पर जा सकता था। -इमर्सन प्रस्तावित समाधानों को पेश कर सकता है, यह बता सकता है कि वे समाधान कैसे उल्लिखित मुद्दों को संबोधित करेंगे, उन समाधानों को मौजूदा वर्कफ़्लो में कैसे लागू किया जा सकता है, समाधानों की लागत कितनी है, समाधानों का आरओआई क्या होगा, और शायद कुछ स्क्रीनशॉट भी दिखा सकते हैं या लागू होने पर समाधान कैसे दिखेंगे, इसके वायरफ्रेम। एमर्सन उन उपयोगकर्ताओं के प्रशंसापत्र भी साझा कर सकते हैं, जिन्होंने अपनी शिकायत को संबोधित करने में 48 घंटे से अधिक समय लिया, और यहां तक ​​कि कंपनी के भीतर एक मौजूदा ग्राहक सेवा प्रतिनिधि से एक प्रशंसापत्र भी, जिसने वर्तमान टिकट प्रणाली पर टिप्पणी की है। +इमर्सन प्रस्तावित समाधानों को पेश कर सकता है, यह बता सकता है कि वे समाधान कैसे उल्लिखित मुद्दों को संबोधित करेंगे, उन समाधानों को मौजूदा वर्कफ़्लो में कैसे लागू किया जा सकता है, समाधानों की लागत कितनी है, समाधानों का आरओआई क्या होगा, और शायद कुछ स्क्रीनशॉट भी दिखा सकते हैं या लागू होने पर समाधान कैसे दिखेंगे, इसके वायरफ्रेम। एमर्सन उन उपयोगकर्ताओं के प्रशंसापत्र भी साझा कर सकते हैं, जिन्होंने अपनी शिकायत को संबोधित करने में 48 घंटे से अधिक समय लिया, और यहां तक कि कंपनी के भीतर एक मौजूदा ग्राहक सेवा प्रतिनिधि से एक प्रशंसापत्र भी, जिसने वर्तमान टिकट प्रणाली पर टिप्पणी की है। **क्लोजर** अब इमर्सन कंपनी के सामने आने वाली समस्याओं को दूर करने में 5 मिनट बिता सकता है, प्रस्तावित समाधानों पर फिर से विचार कर सकता है और समीक्षा कर सकता है कि वे समाधान सही क्यों हैं। @@ -175,7 +175,7 @@ [डेटा के साथ कहानी कैसे सुनाएं (hbr.org)](https://hbr.org/2013/04/how-to-tell-a-story-with-data) -[टू-वे कम्युनिकेशन: अधिक व्यस्त कार्यस्थल के लिए 4 टिप्स (yourविचारपार्टनर.कॉम)](https://www.your Thoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through- दो तरफ से संचार) +[टू-वे कम्युनिकेशन: अधिक व्यस्त कार्यस्थल के लिए 4 टिप्स (yourthoughtpartner.com)](https://www.yourthoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through-two-way-communication) [महान डेटा स्टोरीटेलिंग के लिए 6 संक्षिप्त चरण - बार्नराइज़र, एलएलसी (barnraisersllc.com)](https://barnraisersllc.com/2021/05/02/6-succinct-steps-to-great-data-storytelling/) From f9218ecd3029e4ec2d4e02315ec899a23cc07f8b Mon Sep 17 00:00:00 2001 From: Dhruv Krishna Vaid Date: Mon, 11 Oct 2021 13:08:02 +0530 Subject: [PATCH 58/74] Added Hindi translation --- .../translations/README.hi.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 5-Data-Science-In-Cloud/translations/README.hi.md diff --git a/5-Data-Science-In-Cloud/translations/README.hi.md b/5-Data-Science-In-Cloud/translations/README.hi.md new file mode 100644 index 00000000..552ea6ee --- /dev/null +++ b/5-Data-Science-In-Cloud/translations/README.hi.md @@ -0,0 +1,20 @@ +# क्लाउड में डेटा साइंस + +![क्लाउड-चित्र](../images/cloud-picture.jpg) + +> [Unsplash](https://unsplash.com/s/photos/cloud?orientation=landscape) से [जेलेके वनूटेघम](https://unsplash.com/@ilumire) द्वारा फोटो। + +जब बड़े डेटा के साथ डेटा साइंस करने की बात आती है, तो क्लाउड गेम चेंजर हो सकता है। अगले तीन पाठों में हम यह देखने जा रहे हैं कि क्लाउड क्या है और यह इतना मददगार क्यों हो सकता है। हम हृद्पात (दिल की धड़कन रुकना) के डेटासेट का भी पता लगाने जा रहे हैं और किसी के हृद्पात की संभावना का आकलन करने में मदद करने के लिए एक मॉडल का निर्माण करने जा रहे हैं। हम दो अलग-अलग तरीकों से एक मॉडल को प्रशिक्षित करने, डिप्लॉय करने और उपभोग करने के लिए क्लाउड की शक्ति का उपयोग करेंगे। एक तरीका कम कोड/नो कोड फैशन में केवल यूजर इंटरफेस का उपयोग करके, दूसरा तरीका एज़ूर मशीन लर्निंग सॉफ्टवेयर डेवलपर किट (एज़ूर एमएल एस.डी.के) का उपयोग करके। + +![प्रॉजेक्ट-स्कीमा](../19-Azure/images/project-schema.PNG) + +### विषय + +1. [डेटा साइंस के लिए क्लाउड का उपयोग क्यों करें?](../17-Introduction/README.md) +2. [क्लाउड में डेटा साइंस: "लो कोड/नो कोड" तरीका](../18-Low-Code/README.md) +3. [क्लाउड में डेटा साइंस: "एज़ूर एमएल एस.डी.के" तरीका](../19-Azure/README.md) + +### आभार सूची +ये पाठ [मौड लेवी](https://twitter.com/maudstweets) और [टिफ़नी सॉटर्रे](https://twitter.com/TiffanySouterre) द्वारा ☁️ और 💕 के साथ लिखे गए थे। + +हार्ट फेल्योर प्रेडिक्शन प्रोजेक्ट के लिए डेटा [कागल](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) पर [लारक्सेल](https://www.kaggle.com/andrewmvd) से प्राप्त किया गया है। इसे [एट्रिब्यूशन 4.0 इंटरनेशनल (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस दिया गया है। \ No newline at end of file From f49f9312e170d95e8da23baa652399e711a22f90 Mon Sep 17 00:00:00 2001 From: Jen Looper Date: Mon, 11 Oct 2021 15:33:27 -0400 Subject: [PATCH 59/74] editing tracking code for Dmitry to 'academic' --- .../01-defining-data-science/README.md | 18 ++-- 2-Working-With-Data/07-python/README.md | 90 +++++++++---------- .../07-python/notebook-papers.ipynb | 2 +- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/1-Introduction/01-defining-data-science/README.md b/1-Introduction/01-defining-data-science/README.md index bedbb1e7..ca25810d 100644 --- a/1-Introduction/01-defining-data-science/README.md +++ b/1-Introduction/01-defining-data-science/README.md @@ -1,8 +1,8 @@ # Defining Data Science -|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/01-Definitions.png)| -|:---:| -|Defining Data Science - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | +| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/01-Definitions.png) | +| :----------------------------------------------------------------------------------------------------: | +| Defining Data Science - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | --- @@ -69,11 +69,11 @@ Vast amounts of data are incomprehensible for a human being, but once we create As we have already mentioned - data is everywhere, we just need to capture it in the right way! It is useful to distinguish between **structured** and **unstructured** data. The former are typically represented in some well-structured form, often as a table or number of tables, while latter is just a collection of files. Sometimes we can also talk about **semistructured** data, that have some sort of a structure that may vary greatly. -| Structured | Semi-structured | Unstructured | -|----------- |-----------------|--------------| -| List of people with their phone numbers | Wikipedia pages with links | Text of Encyclopaedia Britannica | -| Temperature in all rooms of a building at every minute for the last 20 years | Collection of scientific papers in JSON format with authors, data of publication, and abstract | File share with corporate documents | -| Data for age and gender of all people entering the building | Internet pages | Raw video feed from surveillance camera | +| Structured | Semi-structured | Unstructured | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------- | +| List of people with their phone numbers | Wikipedia pages with links | Text of Encyclopaedia Britannica | +| Temperature in all rooms of a building at every minute for the last 20 years | Collection of scientific papers in JSON format with authors, data of publication, and abstract | File share with corporate documents | +| Data for age and gender of all people entering the building | Internet pages | Raw video feed from surveillance camera | ## Where to get Data @@ -107,7 +107,7 @@ First step is to collect the data. While in many cases it can be a straightforwa Storing the data can be challenging, especially if we are talking about big data. When deciding how to store data, it makes sense to anticipate the way you would want later on to query them. There are several ways data can be stored:
  • Relational database stores a collection of tables, and uses a special language called SQL to query them. Typically, tables would be connected to each other using some schema. In many cases we need to convert the data from original form to fit the schema.
  • -
  • NoSQL database, such as CosmosDB, does not enforce schema on data, and allows storing more complex data, for example, hierarchical JSON documents or graphs. However, NoSQL database does not have rich querying capabilities of SQL, and cannot enforce referential integrity between data.
  • +
  • NoSQL database, such as CosmosDB, does not enforce schema on data, and allows storing more complex data, for example, hierarchical JSON documents or graphs. However, NoSQL database does not have rich querying capabilities of SQL, and cannot enforce referential integrity between data.
  • Data Lake storage is used for large collections of data in raw form. Data lakes are often used with big data, where all data cannot fit into one machine, and has to be stored and processed by a cluster. Parquet is the data format that is often used in conjunction with big data.
diff --git a/2-Working-With-Data/07-python/README.md b/2-Working-With-Data/07-python/README.md index 53e4bc84..ab1d209b 100644 --- a/2-Working-With-Data/07-python/README.md +++ b/2-Working-With-Data/07-python/README.md @@ -1,8 +1,8 @@ # Working with Data: Python and the Pandas Library -|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png)| -|:---:| -|Working With Python - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | +| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) | +| :-------------------------------------------------------------------------------------------------------: | +| Working With Python - _Sketchnote by [@nitya](https://twitter.com/nitya)_ | [![Intro Video](images/video-ds-python.png)](https://youtu.be/dZjWOGbsN4Y) @@ -16,7 +16,7 @@ Data processing can be programmed in any programming language, but there are cer In this lesson, we will focus on using Python for simple data processing. We will assume basic familiarity with the language. If you want a deeper tour of Python, you can refer to one of the following resources: * [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse) - GitHub-based quick intro course into Python Programming -* [Take your First Steps with Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=acad-31812-dmitryso) Learning Path on [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=acad-31812-dmitryso) +* [Take your First Steps with Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-31812-dmitryso) Learning Path on [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-31812-dmitryso) Data can come in many forms. In this lesson, we will consider three forms of data - **tabular data**, **text** and **images**. @@ -97,10 +97,10 @@ b = pd.Series(["I","like","to","play","games","and","will","not","change"],index df = pd.DataFrame([a,b]) ``` This will create a horizontal table like this: -| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -|---|---|---|---|---|---|---|---|---|---| -| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -| 1 | I | like | to | use | Python | and | Pandas | very | much | +| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +| --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- | +| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +| 1 | I | like | to | use | Python | and | Pandas | very | much | We can also use Series as columns, and specify column names using dictionary: ```python @@ -108,17 +108,17 @@ df = pd.DataFrame({ 'A' : a, 'B' : b }) ``` This will give us a table like this: -| | A | B | -|---|---|---| -| 0 | 1 | I | -| 1 | 2 | like | -| 2 | 3 | to | -| 3 | 4 | use | -| 4 | 5 | Python | -| 5 | 6 | and | -| 6 | 7 | Pandas | -| 7 | 8 | very | -| 8 | 9 | much | +| | A | B | +| --- | --- | ------ | +| 0 | 1 | I | +| 1 | 2 | like | +| 2 | 3 | to | +| 3 | 4 | use | +| 4 | 5 | Python | +| 5 | 6 | and | +| 6 | 7 | Pandas | +| 7 | 8 | very | +| 8 | 9 | much | **Note** that we can also get this table layout by transposing the previous table, eg. by writing ```python @@ -154,17 +154,17 @@ df['LenB'] = df['B'].apply(len) After operations above, we will end up with the following DataFrame: -| | A | B | DivA | LenB | -|---|---|---|---|---| -| 0 | 1 | I | -4.0 | 1 | -| 1 | 2 | like | -3.0 | 4 | -| 2 | 3 | to | -2.0 | 2 | -| 3 | 4 | use | -1.0 | 3 | -| 4 | 5 | Python | 0.0 | 6 | -| 5 | 6 | and | 1.0 | 3 | -| 6 | 7 | Pandas | 2.0 | 6 | -| 7 | 8 | very | 3.0 | 4 | -| 8 | 9 | much | 4.0 | 4 | +| | A | B | DivA | LenB | +| --- | --- | ------ | ---- | ---- | +| 0 | 1 | I | -4.0 | 1 | +| 1 | 2 | like | -3.0 | 4 | +| 2 | 3 | to | -2.0 | 2 | +| 3 | 4 | use | -1.0 | 3 | +| 4 | 5 | Python | 0.0 | 6 | +| 5 | 6 | and | 1.0 | 3 | +| 6 | 7 | Pandas | 2.0 | 6 | +| 7 | 8 | very | 3.0 | 4 | +| 8 | 9 | much | 4.0 | 4 | **Selecting rows based on numbers** can be done using `iloc` construct. For example, to select first 5 rows from the DataFrame: ```python @@ -183,13 +183,13 @@ df.groupby(by='LenB') \ ``` This gives us the following table: -| LenB | Count | Mean | -|------|-------|------| -| 1 | 1 | 1.000000 | -| 2 | 1 | 3.000000 | -| 3 | 2 | 5.000000 | -| 4 | 3 | 6.333333 | -| 6 | 2 | 6.000000 | +| LenB | Count | Mean | +| ---- | ----- | -------- | +| 1 | 1 | 1.000000 | +| 2 | 1 | 3.000000 | +| 3 | 2 | 5.000000 | +| 4 | 3 | 6.333333 | +| 6 | 2 | 6.000000 | ### Getting Data @@ -230,7 +230,7 @@ While data very often comes in tabular form, in some cases we need to deal with In this challenge, we will continue with the topic of COVID pandemic, and focus on processing scientific papers on the subject. There is [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) with more than 7000 (at the time of writing) papers on COVID, available with metadata and abstracts (and for about half of them there is also full text provided). -A full example of analyzing this dataset using [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=acad-31812-dmitryso) cognitive service is described [in this blog post](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). We will discuss simplified version of this analysis. +A full example of analyzing this dataset using [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-31812-dmitryso) cognitive service is described [in this blog post](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). We will discuss simplified version of this analysis. > **NOTE**: We do not provide a copy of the dataset as part of this repository. You may first need to download the [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) file from [this dataset on Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Registration with Kaggle may be required. You may also download the dataset without registration [from here](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), but it will include all full texts in addition to metadata file. @@ -242,15 +242,15 @@ Open [`notebook-papers.ipynb`](notebook-papers.ipynb) and read it from top to bo Recently, very powerful AI models have been developed that allow us to understand images. There are many tasks that can be solved using pre-trained neural networks, or cloud services. Some examples include: -* **Image Classification**, which can help you categorize the image into one of the pre-defined classes. You can easily train your own image classifiers using services such as [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=acad-31812-dmitryso) -* **Object Detection** to detect different objects in the image. Services such as [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=acad-31812-dmitryso) can detect a number of common objects, and you can train [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=acad-31812-dmitryso) model to detect some specific objects of interest. -* **Face Detection**, including Age, Gender and Emotion detection. This can be done via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=acad-31812-dmitryso). +* **Image Classification**, which can help you categorize the image into one of the pre-defined classes. You can easily train your own image classifiers using services such as [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-31812-dmitryso) +* **Object Detection** to detect different objects in the image. Services such as [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-31812-dmitryso) can detect a number of common objects, and you can train [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-31812-dmitryso) model to detect some specific objects of interest. +* **Face Detection**, including Age, Gender and Emotion detection. This can be done via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-31812-dmitryso). -All those cloud services can be called using [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=acad-31812-dmitryso), and thus can be easily incorporated into your data exploration workflow. +All those cloud services can be called using [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-31812-dmitryso), and thus can be easily incorporated into your data exploration workflow. Here are some examples of exploring data from Image data sources: -* In the blog post [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) we explore Instagram photos, trying to understand what makes people give more likes to a photo. We first extract as much information from pictures as possible using [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=acad-31812-dmitryso), and then use [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=acad-31812-dmitryso) to build interpretable model. -* In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) we use [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=acad-31812-dmitryso) to extract emotions on people on photographs from events, in order to try to understand what makes people happy. +* In the blog post [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) we explore Instagram photos, trying to understand what makes people give more likes to a photo. We first extract as much information from pictures as possible using [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-31812-dmitryso), and then use [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-31812-dmitryso) to build interpretable model. +* In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) we use [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-31812-dmitryso) to extract emotions on people on photographs from events, in order to try to understand what makes people happy. ## Conclusion @@ -271,7 +271,7 @@ Whether you already have structured or unstructured data, using Python you can p **Learning Python** * [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse) -* [Take your First Steps with Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=acad-31812-dmitryso) Learning Path on [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=acad-31812-dmitryso) +* [Take your First Steps with Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-31812-dmitryso) Learning Path on [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-31812-dmitryso) ## Assignment diff --git a/2-Working-With-Data/07-python/notebook-papers.ipynb b/2-Working-With-Data/07-python/notebook-papers.ipynb index 6bcd7053..c08b60eb 100644 --- a/2-Working-With-Data/07-python/notebook-papers.ipynb +++ b/2-Working-With-Data/07-python/notebook-papers.ipynb @@ -7,7 +7,7 @@ "\r\n", "In this challenge, we will continue with the topic of COVID pandemic, and focus on processing scientific papers on the subject. There is [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) with more than 7000 (at the time of writing) papers on COVID, available with metadata and abstracts (and for about half of them there is also full text provided).\r\n", "\r\n", - "A full example of analyzing this dataset using [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=acad-31812-dmitryso) cognitive service is described [in this blog post](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). We will discuss simplified version of this analysis." + "A full example of analyzing this dataset using [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-31812-dmitryso) cognitive service is described [in this blog post](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). We will discuss simplified version of this analysis." ], "metadata": {} }, From c61b3810a40ed66ce26b373a23f49ffe2d6dbaa1 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Mon, 11 Oct 2021 13:59:27 -0700 Subject: [PATCH 60/74] Delete pandas.ipynb --- 2-Working-With-Data/R/pandas.ipynb | 978 ----------------------------- 1 file changed, 978 deletions(-) delete mode 100644 2-Working-With-Data/R/pandas.ipynb diff --git a/2-Working-With-Data/R/pandas.ipynb b/2-Working-With-Data/R/pandas.ipynb deleted file mode 100644 index cb928833..00000000 --- a/2-Working-With-Data/R/pandas.ipynb +++ /dev/null @@ -1,978 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "304296e3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "Attaching package: 'dplyr'\n", - "\n", - "\n", - "The following objects are masked from 'package:stats':\n", - "\n", - " filter, lag\n", - "\n", - "\n", - "The following objects are masked from 'package:base':\n", - "\n", - " intersect, setdiff, setequal, union\n", - "\n", - "\n", - "-- \u001b[1mAttaching packages\u001b[22m ------------------------------------------------------------------------------- tidyverse 1.3.1 --\n", - "\n", - "\u001b[32mv\u001b[39m \u001b[34mggplot2\u001b[39m 3.3.5 \u001b[32mv\u001b[39m \u001b[34mpurrr \u001b[39m 0.3.4\n", - "\u001b[32mv\u001b[39m \u001b[34mtibble \u001b[39m 3.1.5 \u001b[32mv\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n", - "\u001b[32mv\u001b[39m \u001b[34mtidyr \u001b[39m 1.1.4 \u001b[32mv\u001b[39m \u001b[34mforcats\u001b[39m 0.5.1\n", - "\u001b[32mv\u001b[39m \u001b[34mreadr \u001b[39m 2.0.2 \n", - "\n", - "-- \u001b[1mConflicts\u001b[22m ---------------------------------------------------------------------------------- tidyverse_conflicts() --\n", - "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", - "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", - "\n" - ] - } - ], - "source": [ - "library(dplyr)\n", - "library(tidyverse)" - ] - }, - { - "cell_type": "markdown", - "id": "d786e051", - "metadata": {}, - "source": [ - "## Series" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f659f553", - "metadata": {}, - "outputs": [], - "source": [ - "a<- 1:9" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9acc193d", - "metadata": {}, - "outputs": [], - "source": [ - "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f577ec14", - "metadata": {}, - "outputs": [], - "source": [ - "a1 = length(a)\n", - "b1 = length(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "31e069a0", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "29ce166e", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "markdown", - "id": "945feffd", - "metadata": {}, - "source": [ - "## DataFrame" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "88a435ec", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "c4e2a6c1", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "2bb5177c", - "metadata": {}, - "outputs": [], - "source": [ - "df<- data.frame(a,b)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "8f45d3a5", - "metadata": {}, - "outputs": [], - "source": [ - "df = \n", - " rename(df,\n", - " A = a,\n", - " B = b,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "0efbf2d4", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" - ], - "text/latex": [ - "A data.frame: 9 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like \\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\t5 & 5 & Python\\\\\n", - "\t6 & 6 & and \\\\\n", - "\t7 & 7 & Pandas\\\\\n", - "\t8 & 8 & very \\\\\n", - "\t9 & 9 & much \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "| 5 | 5 | Python |\n", - "| 6 | 6 | and |\n", - "| 7 | 7 | Pandas |\n", - "| 8 | 8 | very |\n", - "| 9 | 9 | much |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like \n", - "3 3 to \n", - "4 4 use \n", - "5 5 Python\n", - "6 6 and \n", - "7 7 Pandas\n", - "8 8 very \n", - "9 9 much " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "88b51fdc", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Column A (series):\n" - ] - }, - { - "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", - "\n", - "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" - ], - "text/latex": [ - "A data.frame: 9 × 1\n", - "\\begin{tabular}{r|l}\n", - " & A\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t1 & 1\\\\\n", - "\t2 & 2\\\\\n", - "\t3 & 3\\\\\n", - "\t4 & 4\\\\\n", - "\t5 & 5\\\\\n", - "\t6 & 6\\\\\n", - "\t7 & 7\\\\\n", - "\t8 & 8\\\\\n", - "\t9 & 9\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 1\n", - "\n", - "| | A <int> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 5 | 5 |\n", - "| 6 | 6 |\n", - "| 7 | 7 |\n", - "| 8 | 8 |\n", - "| 9 | 9 |\n", - "\n" - ], - "text/plain": [ - " A\n", - "1 1\n", - "2 2\n", - "3 3\n", - "4 4\n", - "5 5\n", - "6 6\n", - "7 7\n", - "8 8\n", - "9 9" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cat(\"Column A (series):\\n\")\n", - "select(df,'A')" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "010bcba8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" - ], - "text/latex": [ - "A data.frame: 4 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like\\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 4 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like\n", - "3 3 to \n", - "4 4 use " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A<5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "082277db", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\n", - "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" - ], - "text/latex": [ - "A data.frame: 1 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t6 & 6 & and\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 1 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 6 | 6 | and |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "6 6 and" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A>5 & df$A<7,]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "0bbd19f8", - "metadata": {}, - "outputs": [], - "source": [ - "df$DivA <- df$A - mean(df$A)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "f36d96af", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" - ], - "text/latex": [ - "A data.frame: 9 × 3\n", - "\\begin{tabular}{r|lll}\n", - " & A & B & DivA\\\\\n", - " & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4\\\\\n", - "\t2 & 2 & like & -3\\\\\n", - "\t3 & 3 & to & -2\\\\\n", - "\t4 & 4 & use & -1\\\\\n", - "\t5 & 5 & Python & 0\\\\\n", - "\t6 & 6 & and & 1\\\\\n", - "\t7 & 7 & Pandas & 2\\\\\n", - "\t8 & 8 & very & 3\\\\\n", - "\t9 & 9 & much & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 3\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> |\n", - "|---|---|---|---|\n", - "| 1 | 1 | I | -4 |\n", - "| 2 | 2 | like | -3 |\n", - "| 3 | 3 | to | -2 |\n", - "| 4 | 4 | use | -1 |\n", - "| 5 | 5 | Python | 0 |\n", - "| 6 | 6 | and | 1 |\n", - "| 7 | 7 | Pandas | 2 |\n", - "| 8 | 8 | very | 3 |\n", - "| 9 | 9 | much | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA\n", - "1 1 I -4 \n", - "2 2 like -3 \n", - "3 3 to -2 \n", - "4 4 use -1 \n", - "5 5 Python 0 \n", - "6 6 and 1 \n", - "7 7 Pandas 2 \n", - "8 8 very 3 \n", - "9 9 much 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "c67f2bd0", - "metadata": {}, - "outputs": [], - "source": [ - "df$LenB <- str_length(df$B)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "cef214b2", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" - ], - "text/latex": [ - "A data.frame: 9 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\t7 & 7 & Pandas & 2 & 6\\\\\n", - "\t8 & 8 & very & 3 & 4\\\\\n", - "\t9 & 9 & much & 4 & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "| 7 | 7 | Pandas | 2 | 6 |\n", - "| 8 | 8 | very | 3 | 4 |\n", - "| 9 | 9 | much | 4 | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 \n", - "7 7 Pandas 2 6 \n", - "8 8 very 3 4 \n", - "9 9 much 4 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "59fe5316", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" - ], - "text/latex": [ - "A data.frame: 5 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 5 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[0:5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "f944a949", - "metadata": {}, - "outputs": [], - "source": [ - " df1 = group_by(df,LenB)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "8ffd39cd", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A tibble: 5 × 2
LenBmymean
<int><dbl>
11
22
33
44
66
\n" - ], - "text/latex": [ - "A tibble: 5 × 2\n", - "\\begin{tabular}{ll}\n", - " LenB & mymean\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t 1 & 1\\\\\n", - "\t 2 & 2\\\\\n", - "\t 3 & 3\\\\\n", - "\t 4 & 4\\\\\n", - "\t 6 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A tibble: 5 × 2\n", - "\n", - "| LenB <int> | mymean <dbl> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 6 | 6 |\n", - "\n" - ], - "text/plain": [ - " LenB mymean\n", - "1 1 1 \n", - "2 2 2 \n", - "3 3 3 \n", - "4 4 4 \n", - "5 6 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "summarise(df1,mymean =mean(LenB))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3b859950", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "5d3f0287", - "metadata": {}, - "source": [ - "## Printing and Plotting" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "69946dc7", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning message in file(file, \"rt\"):\n", - "\"cannot open file 'file name': No such file or directory\"\n" - ] - }, - { - "ename": "ERROR", - "evalue": "Error in file(file, \"rt\"): cannot open the connection\n", - "output_type": "error", - "traceback": [ - "Error in file(file, \"rt\"): cannot open the connection\nTraceback:\n", - "1. read.csv(\"file name\")", - "2. read.table(file = file, header = header, sep = sep, quote = quote, \n . dec = dec, fill = fill, comment.char = comment.char, ...)", - "3. file(file, \"rt\")" - ] - } - ], - "source": [ - "dataset = read.csv(\"file name\")" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "009af652", - "metadata": {}, - "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", - "\n", - "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" - ], - "text/latex": [ - "A data.frame: 6 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 6 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "head(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "515c95b2", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\n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\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "41b872c9", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\n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\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "barplot(df$A, ylab = 'A',xlab = 'no')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "11001454", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "670db495", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "R", - "language": "R", - "name": "ir" - }, - "language_info": { - "codemirror_mode": "r", - "file_extension": ".r", - "mimetype": "text/x-r-source", - "name": "R", - "pygments_lexer": "r", - "version": "4.1.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From ce53eb68b59c5609395e4b2bb00da85e8ffbaa70 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Mon, 11 Oct 2021 14:00:20 -0700 Subject: [PATCH 61/74] Create Notebook.ipynb --- 2-Working-With-Data/R/Notebook.ipynb | 2249 ++++++++++++++++++++++++++ 1 file changed, 2249 insertions(+) create mode 100644 2-Working-With-Data/R/Notebook.ipynb diff --git a/2-Working-With-Data/R/Notebook.ipynb b/2-Working-With-Data/R/Notebook.ipynb new file mode 100644 index 00000000..eec49104 --- /dev/null +++ b/2-Working-With-Data/R/Notebook.ipynb @@ -0,0 +1,2249 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "304296e3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "Attaching package: 'dplyr'\n", + "\n", + "\n", + "The following objects are masked from 'package:stats':\n", + "\n", + " filter, lag\n", + "\n", + "\n", + "The following objects are masked from 'package:base':\n", + "\n", + " intersect, setdiff, setequal, union\n", + "\n", + "\n", + "-- \u001b[1mAttaching packages\u001b[22m ------------------------------------------------------------------------------- tidyverse 1.3.1 --\n", + "\n", + "\u001b[32mv\u001b[39m \u001b[34mggplot2\u001b[39m 3.3.5 \u001b[32mv\u001b[39m \u001b[34mpurrr \u001b[39m 0.3.4\n", + "\u001b[32mv\u001b[39m \u001b[34mtibble \u001b[39m 3.1.5 \u001b[32mv\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n", + "\u001b[32mv\u001b[39m \u001b[34mtidyr \u001b[39m 1.1.4 \u001b[32mv\u001b[39m \u001b[34mforcats\u001b[39m 0.5.1\n", + "\u001b[32mv\u001b[39m \u001b[34mreadr \u001b[39m 2.0.2 \n", + "\n", + "-- \u001b[1mConflicts\u001b[22m ---------------------------------------------------------------------------------- tidyverse_conflicts() --\n", + "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\n", + "\n", + "Attaching package: 'lubridate'\n", + "\n", + "\n", + "The following objects are masked from 'package:base':\n", + "\n", + " date, intersect, setdiff, union\n", + "\n", + "\n", + "\n", + "Attaching package: 'zoo'\n", + "\n", + "\n", + "The following objects are masked from 'package:base':\n", + "\n", + " as.Date, as.Date.numeric\n", + "\n", + "\n", + "\n", + "Attaching package: 'xts'\n", + "\n", + "\n", + "The following objects are masked from 'package:dplyr':\n", + "\n", + " first, last\n", + "\n", + "\n" + ] + } + ], + "source": [ + "library(dplyr)\n", + "library(tidyverse)\n", + "library('lubridate')\n", + "library('zoo')\n", + "library('xts')" + ] + }, + { + "cell_type": "markdown", + "id": "d786e051", + "metadata": {}, + "source": [ + "## Series" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f659f553", + "metadata": {}, + "outputs": [], + "source": [ + "a<- 1:9" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9acc193d", + "metadata": {}, + "outputs": [], + "source": [ + "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f577ec14", + "metadata": {}, + "outputs": [], + "source": [ + "a1 = length(a)\n", + "b1 = length(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "31e069a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "5 5\n", + "6 6\n", + "7 7\n", + "8 8\n", + "9 9\n" + ] + } + ], + "source": [ + "a = data.frame(a,row.names = c(1:a1))\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "29ce166e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " b\n", + "1 I\n", + "2 like\n", + "3 to\n", + "4 use\n", + "5 Python\n", + "6 and\n", + "7 Pandas\n", + "8 very\n", + "9 much\n" + ] + } + ], + "source": [ + "b = data.frame(b,row.names = c(1:b1))\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "eeb683c7", + "metadata": {}, + "outputs": [], + "source": [ + "library('ggplot2')" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "e7788ca1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"length of index is 366\"\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "start_date <- mdy(\"Jan 1, 2020\")\n", + "end_date <- mdy(\"Dec 31, 2020\")\n", + "idx = seq(start_date,end_date,by ='day')\n", + "print(paste(\"length of index is \",length(idx)))\n", + "size = length(idx)\n", + "sales = runif(366,min=25,max=50)\n", + "sold_items <- data.frame(row.names=idx[0:size],sales)\n", + "ggplot(sold_items,aes(x=idx,y=sales)) + geom_point(color = \"firebrick\", shape = \"diamond\", size = 2) +\n", + " geom_line(color = \"firebrick\", size = .3)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "30747f7c", + "metadata": {}, + "outputs": [], + "source": [ + "library(repr)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "48f3e762", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "366" + ], + "text/latex": [ + "366" + ], + "text/markdown": [ + "366" + ], + "text/plain": [ + "[1] 366" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#changing plot size\n", + "options(repr.plot.width = 12,repr.plot.height=6)\n", + "size" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "abe41544", + "metadata": {}, + "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", + "\n", + "
A data.frame: 53 × 1
additional_product
<dbl>
2020-01-0110
2020-01-0810
2020-01-1510
2020-01-2210
2020-01-2910
2020-02-0510
2020-02-1210
2020-02-1910
2020-02-2610
2020-03-0410
2020-03-1110
2020-03-1810
2020-03-2510
2020-04-0110
2020-04-0810
2020-04-1510
2020-04-2210
2020-04-2910
2020-05-0610
2020-05-1310
2020-05-2010
2020-05-2710
2020-06-0310
2020-06-1010
2020-06-1710
2020-06-2410
2020-07-0110
2020-07-0810
2020-07-1510
2020-07-2210
2020-07-2910
2020-08-0510
2020-08-1210
2020-08-1910
2020-08-2610
2020-09-0210
2020-09-0910
2020-09-1610
2020-09-2310
2020-09-3010
2020-10-0710
2020-10-1410
2020-10-2110
2020-10-2810
2020-11-0410
2020-11-1110
2020-11-1810
2020-11-2510
2020-12-0210
2020-12-0910
2020-12-1610
2020-12-2310
2020-12-3010
\n" + ], + "text/latex": [ + "A data.frame: 53 × 1\n", + "\\begin{tabular}{r|l}\n", + " & additional\\_product\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t2020-01-01 & 10\\\\\n", + "\t2020-01-08 & 10\\\\\n", + "\t2020-01-15 & 10\\\\\n", + "\t2020-01-22 & 10\\\\\n", + "\t2020-01-29 & 10\\\\\n", + "\t2020-02-05 & 10\\\\\n", + "\t2020-02-12 & 10\\\\\n", + "\t2020-02-19 & 10\\\\\n", + "\t2020-02-26 & 10\\\\\n", + "\t2020-03-04 & 10\\\\\n", + "\t2020-03-11 & 10\\\\\n", + "\t2020-03-18 & 10\\\\\n", + "\t2020-03-25 & 10\\\\\n", + "\t2020-04-01 & 10\\\\\n", + "\t2020-04-08 & 10\\\\\n", + "\t2020-04-15 & 10\\\\\n", + "\t2020-04-22 & 10\\\\\n", + "\t2020-04-29 & 10\\\\\n", + "\t2020-05-06 & 10\\\\\n", + "\t2020-05-13 & 10\\\\\n", + "\t2020-05-20 & 10\\\\\n", + "\t2020-05-27 & 10\\\\\n", + "\t2020-06-03 & 10\\\\\n", + "\t2020-06-10 & 10\\\\\n", + "\t2020-06-17 & 10\\\\\n", + "\t2020-06-24 & 10\\\\\n", + "\t2020-07-01 & 10\\\\\n", + "\t2020-07-08 & 10\\\\\n", + "\t2020-07-15 & 10\\\\\n", + "\t2020-07-22 & 10\\\\\n", + "\t2020-07-29 & 10\\\\\n", + "\t2020-08-05 & 10\\\\\n", + "\t2020-08-12 & 10\\\\\n", + "\t2020-08-19 & 10\\\\\n", + "\t2020-08-26 & 10\\\\\n", + "\t2020-09-02 & 10\\\\\n", + "\t2020-09-09 & 10\\\\\n", + "\t2020-09-16 & 10\\\\\n", + "\t2020-09-23 & 10\\\\\n", + "\t2020-09-30 & 10\\\\\n", + "\t2020-10-07 & 10\\\\\n", + "\t2020-10-14 & 10\\\\\n", + "\t2020-10-21 & 10\\\\\n", + "\t2020-10-28 & 10\\\\\n", + "\t2020-11-04 & 10\\\\\n", + "\t2020-11-11 & 10\\\\\n", + "\t2020-11-18 & 10\\\\\n", + "\t2020-11-25 & 10\\\\\n", + "\t2020-12-02 & 10\\\\\n", + "\t2020-12-09 & 10\\\\\n", + "\t2020-12-16 & 10\\\\\n", + "\t2020-12-23 & 10\\\\\n", + "\t2020-12-30 & 10\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 53 × 1\n", + "\n", + "| | additional_product <dbl> |\n", + "|---|---|\n", + "| 2020-01-01 | 10 |\n", + "| 2020-01-08 | 10 |\n", + "| 2020-01-15 | 10 |\n", + "| 2020-01-22 | 10 |\n", + "| 2020-01-29 | 10 |\n", + "| 2020-02-05 | 10 |\n", + "| 2020-02-12 | 10 |\n", + "| 2020-02-19 | 10 |\n", + "| 2020-02-26 | 10 |\n", + "| 2020-03-04 | 10 |\n", + "| 2020-03-11 | 10 |\n", + "| 2020-03-18 | 10 |\n", + "| 2020-03-25 | 10 |\n", + "| 2020-04-01 | 10 |\n", + "| 2020-04-08 | 10 |\n", + "| 2020-04-15 | 10 |\n", + "| 2020-04-22 | 10 |\n", + "| 2020-04-29 | 10 |\n", + "| 2020-05-06 | 10 |\n", + "| 2020-05-13 | 10 |\n", + "| 2020-05-20 | 10 |\n", + "| 2020-05-27 | 10 |\n", + "| 2020-06-03 | 10 |\n", + "| 2020-06-10 | 10 |\n", + "| 2020-06-17 | 10 |\n", + "| 2020-06-24 | 10 |\n", + "| 2020-07-01 | 10 |\n", + "| 2020-07-08 | 10 |\n", + "| 2020-07-15 | 10 |\n", + "| 2020-07-22 | 10 |\n", + "| 2020-07-29 | 10 |\n", + "| 2020-08-05 | 10 |\n", + "| 2020-08-12 | 10 |\n", + "| 2020-08-19 | 10 |\n", + "| 2020-08-26 | 10 |\n", + "| 2020-09-02 | 10 |\n", + "| 2020-09-09 | 10 |\n", + "| 2020-09-16 | 10 |\n", + "| 2020-09-23 | 10 |\n", + "| 2020-09-30 | 10 |\n", + "| 2020-10-07 | 10 |\n", + "| 2020-10-14 | 10 |\n", + "| 2020-10-21 | 10 |\n", + "| 2020-10-28 | 10 |\n", + "| 2020-11-04 | 10 |\n", + "| 2020-11-11 | 10 |\n", + "| 2020-11-18 | 10 |\n", + "| 2020-11-25 | 10 |\n", + "| 2020-12-02 | 10 |\n", + "| 2020-12-09 | 10 |\n", + "| 2020-12-16 | 10 |\n", + "| 2020-12-23 | 10 |\n", + "| 2020-12-30 | 10 |\n", + "\n" + ], + "text/plain": [ + " additional_product\n", + "2020-01-01 10 \n", + "2020-01-08 10 \n", + "2020-01-15 10 \n", + "2020-01-22 10 \n", + "2020-01-29 10 \n", + "2020-02-05 10 \n", + "2020-02-12 10 \n", + "2020-02-19 10 \n", + "2020-02-26 10 \n", + "2020-03-04 10 \n", + "2020-03-11 10 \n", + "2020-03-18 10 \n", + "2020-03-25 10 \n", + "2020-04-01 10 \n", + "2020-04-08 10 \n", + "2020-04-15 10 \n", + "2020-04-22 10 \n", + "2020-04-29 10 \n", + "2020-05-06 10 \n", + "2020-05-13 10 \n", + "2020-05-20 10 \n", + "2020-05-27 10 \n", + "2020-06-03 10 \n", + "2020-06-10 10 \n", + "2020-06-17 10 \n", + "2020-06-24 10 \n", + "2020-07-01 10 \n", + "2020-07-08 10 \n", + "2020-07-15 10 \n", + "2020-07-22 10 \n", + "2020-07-29 10 \n", + "2020-08-05 10 \n", + "2020-08-12 10 \n", + "2020-08-19 10 \n", + "2020-08-26 10 \n", + "2020-09-02 10 \n", + "2020-09-09 10 \n", + "2020-09-16 10 \n", + "2020-09-23 10 \n", + "2020-09-30 10 \n", + "2020-10-07 10 \n", + "2020-10-14 10 \n", + "2020-10-21 10 \n", + "2020-10-28 10 \n", + "2020-11-04 10 \n", + "2020-11-11 10 \n", + "2020-11-18 10 \n", + "2020-11-25 10 \n", + "2020-12-02 10 \n", + "2020-12-09 10 \n", + "2020-12-16 10 \n", + "2020-12-23 10 \n", + "2020-12-30 10 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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: 366 × 1
total
<dbl>
2020-01-0154.37099
2020-01-02 NA
2020-01-03 NA
2020-01-04 NA
2020-01-05 NA
2020-01-06 NA
2020-01-07 NA
2020-01-0851.99181
2020-01-09 NA
2020-01-10 NA
2020-01-11 NA
2020-01-12 NA
2020-01-13 NA
2020-01-14 NA
2020-01-1547.57204
2020-01-16 NA
2020-01-17 NA
2020-01-18 NA
2020-01-19 NA
2020-01-20 NA
2020-01-21 NA
2020-01-2250.46082
2020-01-23 NA
2020-01-24 NA
2020-01-25 NA
2020-01-26 NA
2020-01-27 NA
2020-01-28 NA
2020-01-2955.32913
2020-01-30 NA
......
2020-12-0247.63211
2020-12-03 NA
2020-12-04 NA
2020-12-05 NA
2020-12-06 NA
2020-12-07 NA
2020-12-08 NA
2020-12-0949.09786
2020-12-10 NA
2020-12-11 NA
2020-12-12 NA
2020-12-13 NA
2020-12-14 NA
2020-12-15 NA
2020-12-1655.27396
2020-12-17 NA
2020-12-18 NA
2020-12-19 NA
2020-12-20 NA
2020-12-21 NA
2020-12-22 NA
2020-12-2346.30954
2020-12-24 NA
2020-12-25 NA
2020-12-26 NA
2020-12-27 NA
2020-12-28 NA
2020-12-29 NA
2020-12-3043.08600
2020-12-31 NA
\n" + ], + "text/latex": [ + "A data.frame: 366 × 1\n", + "\\begin{tabular}{r|l}\n", + " & total\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t2020-01-01 & 54.37099\\\\\n", + "\t2020-01-02 & NA\\\\\n", + "\t2020-01-03 & NA\\\\\n", + "\t2020-01-04 & NA\\\\\n", + "\t2020-01-05 & NA\\\\\n", + "\t2020-01-06 & NA\\\\\n", + "\t2020-01-07 & NA\\\\\n", + "\t2020-01-08 & 51.99181\\\\\n", + "\t2020-01-09 & NA\\\\\n", + "\t2020-01-10 & NA\\\\\n", + "\t2020-01-11 & NA\\\\\n", + "\t2020-01-12 & NA\\\\\n", + "\t2020-01-13 & NA\\\\\n", + "\t2020-01-14 & NA\\\\\n", + "\t2020-01-15 & 47.57204\\\\\n", + "\t2020-01-16 & NA\\\\\n", + "\t2020-01-17 & NA\\\\\n", + "\t2020-01-18 & NA\\\\\n", + "\t2020-01-19 & NA\\\\\n", + "\t2020-01-20 & NA\\\\\n", + "\t2020-01-21 & NA\\\\\n", + "\t2020-01-22 & 50.46082\\\\\n", + "\t2020-01-23 & NA\\\\\n", + "\t2020-01-24 & NA\\\\\n", + "\t2020-01-25 & NA\\\\\n", + "\t2020-01-26 & NA\\\\\n", + "\t2020-01-27 & NA\\\\\n", + "\t2020-01-28 & NA\\\\\n", + "\t2020-01-29 & 55.32913\\\\\n", + "\t2020-01-30 & NA\\\\\n", + "\t... & ...\\\\\n", + "\t2020-12-02 & 47.63211\\\\\n", + "\t2020-12-03 & NA\\\\\n", + "\t2020-12-04 & NA\\\\\n", + "\t2020-12-05 & NA\\\\\n", + "\t2020-12-06 & NA\\\\\n", + "\t2020-12-07 & NA\\\\\n", + "\t2020-12-08 & NA\\\\\n", + "\t2020-12-09 & 49.09786\\\\\n", + "\t2020-12-10 & NA\\\\\n", + "\t2020-12-11 & NA\\\\\n", + "\t2020-12-12 & NA\\\\\n", + "\t2020-12-13 & NA\\\\\n", + "\t2020-12-14 & NA\\\\\n", + "\t2020-12-15 & NA\\\\\n", + "\t2020-12-16 & 55.27396\\\\\n", + "\t2020-12-17 & NA\\\\\n", + "\t2020-12-18 & NA\\\\\n", + "\t2020-12-19 & NA\\\\\n", + "\t2020-12-20 & NA\\\\\n", + "\t2020-12-21 & NA\\\\\n", + "\t2020-12-22 & NA\\\\\n", + "\t2020-12-23 & 46.30954\\\\\n", + "\t2020-12-24 & NA\\\\\n", + "\t2020-12-25 & NA\\\\\n", + "\t2020-12-26 & NA\\\\\n", + "\t2020-12-27 & NA\\\\\n", + "\t2020-12-28 & NA\\\\\n", + "\t2020-12-29 & NA\\\\\n", + "\t2020-12-30 & 43.08600\\\\\n", + "\t2020-12-31 & NA\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 366 × 1\n", + "\n", + "| | total <dbl> |\n", + "|---|---|\n", + "| 2020-01-01 | 54.37099 |\n", + "| 2020-01-02 | NA |\n", + "| 2020-01-03 | NA |\n", + "| 2020-01-04 | NA |\n", + "| 2020-01-05 | NA |\n", + "| 2020-01-06 | NA |\n", + "| 2020-01-07 | NA |\n", + "| 2020-01-08 | 51.99181 |\n", + "| 2020-01-09 | NA |\n", + "| 2020-01-10 | NA |\n", + "| 2020-01-11 | NA |\n", + "| 2020-01-12 | NA |\n", + "| 2020-01-13 | NA |\n", + "| 2020-01-14 | NA |\n", + "| 2020-01-15 | 47.57204 |\n", + "| 2020-01-16 | NA |\n", + "| 2020-01-17 | NA |\n", + "| 2020-01-18 | NA |\n", + "| 2020-01-19 | NA |\n", + "| 2020-01-20 | NA |\n", + "| 2020-01-21 | NA |\n", + "| 2020-01-22 | 50.46082 |\n", + "| 2020-01-23 | NA |\n", + "| 2020-01-24 | NA |\n", + "| 2020-01-25 | NA |\n", + "| 2020-01-26 | NA |\n", + "| 2020-01-27 | NA |\n", + "| 2020-01-28 | NA |\n", + "| 2020-01-29 | 55.32913 |\n", + "| 2020-01-30 | NA |\n", + "| ... | ... |\n", + "| 2020-12-02 | 47.63211 |\n", + "| 2020-12-03 | NA |\n", + "| 2020-12-04 | NA |\n", + "| 2020-12-05 | NA |\n", + "| 2020-12-06 | NA |\n", + "| 2020-12-07 | NA |\n", + "| 2020-12-08 | NA |\n", + "| 2020-12-09 | 49.09786 |\n", + "| 2020-12-10 | NA |\n", + "| 2020-12-11 | NA |\n", + "| 2020-12-12 | NA |\n", + "| 2020-12-13 | NA |\n", + "| 2020-12-14 | NA |\n", + "| 2020-12-15 | NA |\n", + "| 2020-12-16 | 55.27396 |\n", + "| 2020-12-17 | NA |\n", + "| 2020-12-18 | NA |\n", + "| 2020-12-19 | NA |\n", + "| 2020-12-20 | NA |\n", + "| 2020-12-21 | NA |\n", + "| 2020-12-22 | NA |\n", + "| 2020-12-23 | 46.30954 |\n", + "| 2020-12-24 | NA |\n", + "| 2020-12-25 | NA |\n", + "| 2020-12-26 | NA |\n", + "| 2020-12-27 | NA |\n", + "| 2020-12-28 | NA |\n", + "| 2020-12-29 | NA |\n", + "| 2020-12-30 | 43.08600 |\n", + "| 2020-12-31 | NA |\n", + "\n" + ], + "text/plain": [ + " total \n", + "2020-01-01 54.37099\n", + "2020-01-02 NA\n", + "2020-01-03 NA\n", + "2020-01-04 NA\n", + "2020-01-05 NA\n", + "2020-01-06 NA\n", + "2020-01-07 NA\n", + "2020-01-08 51.99181\n", + "2020-01-09 NA\n", + "2020-01-10 NA\n", + "2020-01-11 NA\n", + "2020-01-12 NA\n", + "2020-01-13 NA\n", + "2020-01-14 NA\n", + "2020-01-15 47.57204\n", + "2020-01-16 NA\n", + "2020-01-17 NA\n", + "2020-01-18 NA\n", + "2020-01-19 NA\n", + "2020-01-20 NA\n", + "2020-01-21 NA\n", + "2020-01-22 50.46082\n", + "2020-01-23 NA\n", + "2020-01-24 NA\n", + "2020-01-25 NA\n", + "2020-01-26 NA\n", + "2020-01-27 NA\n", + "2020-01-28 NA\n", + "2020-01-29 55.32913\n", + "2020-01-30 NA\n", + "... ... \n", + "2020-12-02 47.63211\n", + "2020-12-03 NA\n", + "2020-12-04 NA\n", + "2020-12-05 NA\n", + "2020-12-06 NA\n", + "2020-12-07 NA\n", + "2020-12-08 NA\n", + "2020-12-09 49.09786\n", + "2020-12-10 NA\n", + "2020-12-11 NA\n", + "2020-12-12 NA\n", + "2020-12-13 NA\n", + "2020-12-14 NA\n", + "2020-12-15 NA\n", + "2020-12-16 55.27396\n", + "2020-12-17 NA\n", + "2020-12-18 NA\n", + "2020-12-19 NA\n", + "2020-12-20 NA\n", + "2020-12-21 NA\n", + "2020-12-22 NA\n", + "2020-12-23 46.30954\n", + "2020-12-24 NA\n", + "2020-12-25 NA\n", + "2020-12-26 NA\n", + "2020-12-27 NA\n", + "2020-12-28 NA\n", + "2020-12-29 NA\n", + "2020-12-30 43.08600\n", + "2020-12-31 NA" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "index = seq(start_date,end_date,by = 'week')\n", + "sz = length(index)\n", + "additional_product <- rep(10,53)\n", + "additional_items <- data.frame(row.names = index[0:sz],additional_product)\n", + "additional_items\n", + "# we are merging two dataframe so that we can add\n", + "additional_item = merge(additional_items,sold_items, by = 0, all = TRUE)[-1] \n", + "total = data.frame(row.names=idx[0:size],additional_item$additional_product + additional_item$sales)\n", + "colnames(total) = c('total')\n", + "total" + ] + }, + { + "cell_type": "markdown", + "id": "cb00ff6e", + "metadata": {}, + "source": [ + "\n", + "### As you can see, we are having problems here, because in the weekly series non-mentioned days are considered to be missing (NaN), if we add NaN to a number gives us NaN. In order todo addition, we need to fill the value 0 of additional_items while adding series: \n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "387cb4c2", + "metadata": {}, + "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: 366 × 1
total
<dbl>
2020-01-0154.37099
2020-01-0227.85566
2020-01-0338.29037
2020-01-0426.72367
2020-01-0537.93330
2020-01-0638.70961
2020-01-0728.36133
2020-01-0851.99181
2020-01-0944.76469
2020-01-1026.54058
2020-01-1131.70327
2020-01-1237.83133
2020-01-1347.45717
2020-01-1431.78909
2020-01-1547.57204
2020-01-1643.79414
2020-01-1746.35117
2020-01-1840.18666
2020-01-1934.65751
2020-01-2038.09664
2020-01-2136.76733
2020-01-2250.46082
2020-01-2339.62032
2020-01-2444.56143
2020-01-2526.45657
2020-01-2645.48089
2020-01-2749.03699
2020-01-2846.05290
2020-01-2955.32913
2020-01-3044.83293
......
2020-12-0247.63211
2020-12-0349.44946
2020-12-0428.07843
2020-12-0549.80941
2020-12-0637.43425
2020-12-0732.36442
2020-12-0837.96258
2020-12-0949.09786
2020-12-1043.08738
2020-12-1136.93554
2020-12-1233.44147
2020-12-1335.24588
2020-12-1447.67855
2020-12-1541.84728
2020-12-1655.27396
2020-12-1732.23195
2020-12-1830.18391
2020-12-1939.27033
2020-12-2045.13756
2020-12-2143.00961
2020-12-2243.69411
2020-12-2346.30954
2020-12-2437.42397
2020-12-2535.94406
2020-12-2645.00482
2020-12-2731.81550
2020-12-2832.69022
2020-12-2931.52063
2020-12-3043.08600
2020-12-3139.28333
\n" + ], + "text/latex": [ + "A data.frame: 366 × 1\n", + "\\begin{tabular}{r|l}\n", + " & total\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t2020-01-01 & 54.37099\\\\\n", + "\t2020-01-02 & 27.85566\\\\\n", + "\t2020-01-03 & 38.29037\\\\\n", + "\t2020-01-04 & 26.72367\\\\\n", + "\t2020-01-05 & 37.93330\\\\\n", + "\t2020-01-06 & 38.70961\\\\\n", + "\t2020-01-07 & 28.36133\\\\\n", + "\t2020-01-08 & 51.99181\\\\\n", + "\t2020-01-09 & 44.76469\\\\\n", + "\t2020-01-10 & 26.54058\\\\\n", + "\t2020-01-11 & 31.70327\\\\\n", + "\t2020-01-12 & 37.83133\\\\\n", + "\t2020-01-13 & 47.45717\\\\\n", + "\t2020-01-14 & 31.78909\\\\\n", + "\t2020-01-15 & 47.57204\\\\\n", + "\t2020-01-16 & 43.79414\\\\\n", + "\t2020-01-17 & 46.35117\\\\\n", + "\t2020-01-18 & 40.18666\\\\\n", + "\t2020-01-19 & 34.65751\\\\\n", + "\t2020-01-20 & 38.09664\\\\\n", + "\t2020-01-21 & 36.76733\\\\\n", + "\t2020-01-22 & 50.46082\\\\\n", + "\t2020-01-23 & 39.62032\\\\\n", + "\t2020-01-24 & 44.56143\\\\\n", + "\t2020-01-25 & 26.45657\\\\\n", + "\t2020-01-26 & 45.48089\\\\\n", + "\t2020-01-27 & 49.03699\\\\\n", + "\t2020-01-28 & 46.05290\\\\\n", + "\t2020-01-29 & 55.32913\\\\\n", + "\t2020-01-30 & 44.83293\\\\\n", + "\t... & ...\\\\\n", + "\t2020-12-02 & 47.63211\\\\\n", + "\t2020-12-03 & 49.44946\\\\\n", + "\t2020-12-04 & 28.07843\\\\\n", + "\t2020-12-05 & 49.80941\\\\\n", + "\t2020-12-06 & 37.43425\\\\\n", + "\t2020-12-07 & 32.36442\\\\\n", + "\t2020-12-08 & 37.96258\\\\\n", + "\t2020-12-09 & 49.09786\\\\\n", + "\t2020-12-10 & 43.08738\\\\\n", + "\t2020-12-11 & 36.93554\\\\\n", + "\t2020-12-12 & 33.44147\\\\\n", + "\t2020-12-13 & 35.24588\\\\\n", + "\t2020-12-14 & 47.67855\\\\\n", + "\t2020-12-15 & 41.84728\\\\\n", + "\t2020-12-16 & 55.27396\\\\\n", + "\t2020-12-17 & 32.23195\\\\\n", + "\t2020-12-18 & 30.18391\\\\\n", + "\t2020-12-19 & 39.27033\\\\\n", + "\t2020-12-20 & 45.13756\\\\\n", + "\t2020-12-21 & 43.00961\\\\\n", + "\t2020-12-22 & 43.69411\\\\\n", + "\t2020-12-23 & 46.30954\\\\\n", + "\t2020-12-24 & 37.42397\\\\\n", + "\t2020-12-25 & 35.94406\\\\\n", + "\t2020-12-26 & 45.00482\\\\\n", + "\t2020-12-27 & 31.81550\\\\\n", + "\t2020-12-28 & 32.69022\\\\\n", + "\t2020-12-29 & 31.52063\\\\\n", + "\t2020-12-30 & 43.08600\\\\\n", + "\t2020-12-31 & 39.28333\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 366 × 1\n", + "\n", + "| | total <dbl> |\n", + "|---|---|\n", + "| 2020-01-01 | 54.37099 |\n", + "| 2020-01-02 | 27.85566 |\n", + "| 2020-01-03 | 38.29037 |\n", + "| 2020-01-04 | 26.72367 |\n", + "| 2020-01-05 | 37.93330 |\n", + "| 2020-01-06 | 38.70961 |\n", + "| 2020-01-07 | 28.36133 |\n", + "| 2020-01-08 | 51.99181 |\n", + "| 2020-01-09 | 44.76469 |\n", + "| 2020-01-10 | 26.54058 |\n", + "| 2020-01-11 | 31.70327 |\n", + "| 2020-01-12 | 37.83133 |\n", + "| 2020-01-13 | 47.45717 |\n", + "| 2020-01-14 | 31.78909 |\n", + "| 2020-01-15 | 47.57204 |\n", + "| 2020-01-16 | 43.79414 |\n", + "| 2020-01-17 | 46.35117 |\n", + "| 2020-01-18 | 40.18666 |\n", + "| 2020-01-19 | 34.65751 |\n", + "| 2020-01-20 | 38.09664 |\n", + "| 2020-01-21 | 36.76733 |\n", + "| 2020-01-22 | 50.46082 |\n", + "| 2020-01-23 | 39.62032 |\n", + "| 2020-01-24 | 44.56143 |\n", + "| 2020-01-25 | 26.45657 |\n", + "| 2020-01-26 | 45.48089 |\n", + "| 2020-01-27 | 49.03699 |\n", + "| 2020-01-28 | 46.05290 |\n", + "| 2020-01-29 | 55.32913 |\n", + "| 2020-01-30 | 44.83293 |\n", + "| ... | ... |\n", + "| 2020-12-02 | 47.63211 |\n", + "| 2020-12-03 | 49.44946 |\n", + "| 2020-12-04 | 28.07843 |\n", + "| 2020-12-05 | 49.80941 |\n", + "| 2020-12-06 | 37.43425 |\n", + "| 2020-12-07 | 32.36442 |\n", + "| 2020-12-08 | 37.96258 |\n", + "| 2020-12-09 | 49.09786 |\n", + "| 2020-12-10 | 43.08738 |\n", + "| 2020-12-11 | 36.93554 |\n", + "| 2020-12-12 | 33.44147 |\n", + "| 2020-12-13 | 35.24588 |\n", + "| 2020-12-14 | 47.67855 |\n", + "| 2020-12-15 | 41.84728 |\n", + "| 2020-12-16 | 55.27396 |\n", + "| 2020-12-17 | 32.23195 |\n", + "| 2020-12-18 | 30.18391 |\n", + "| 2020-12-19 | 39.27033 |\n", + "| 2020-12-20 | 45.13756 |\n", + "| 2020-12-21 | 43.00961 |\n", + "| 2020-12-22 | 43.69411 |\n", + "| 2020-12-23 | 46.30954 |\n", + "| 2020-12-24 | 37.42397 |\n", + "| 2020-12-25 | 35.94406 |\n", + "| 2020-12-26 | 45.00482 |\n", + "| 2020-12-27 | 31.81550 |\n", + "| 2020-12-28 | 32.69022 |\n", + "| 2020-12-29 | 31.52063 |\n", + "| 2020-12-30 | 43.08600 |\n", + "| 2020-12-31 | 39.28333 |\n", + "\n" + ], + "text/plain": [ + " total \n", + "2020-01-01 54.37099\n", + "2020-01-02 27.85566\n", + "2020-01-03 38.29037\n", + "2020-01-04 26.72367\n", + "2020-01-05 37.93330\n", + "2020-01-06 38.70961\n", + "2020-01-07 28.36133\n", + "2020-01-08 51.99181\n", + "2020-01-09 44.76469\n", + "2020-01-10 26.54058\n", + "2020-01-11 31.70327\n", + "2020-01-12 37.83133\n", + "2020-01-13 47.45717\n", + "2020-01-14 31.78909\n", + "2020-01-15 47.57204\n", + "2020-01-16 43.79414\n", + "2020-01-17 46.35117\n", + "2020-01-18 40.18666\n", + "2020-01-19 34.65751\n", + "2020-01-20 38.09664\n", + "2020-01-21 36.76733\n", + "2020-01-22 50.46082\n", + "2020-01-23 39.62032\n", + "2020-01-24 44.56143\n", + "2020-01-25 26.45657\n", + "2020-01-26 45.48089\n", + "2020-01-27 49.03699\n", + "2020-01-28 46.05290\n", + "2020-01-29 55.32913\n", + "2020-01-30 44.83293\n", + "... ... \n", + "2020-12-02 47.63211\n", + "2020-12-03 49.44946\n", + "2020-12-04 28.07843\n", + "2020-12-05 49.80941\n", + "2020-12-06 37.43425\n", + "2020-12-07 32.36442\n", + "2020-12-08 37.96258\n", + "2020-12-09 49.09786\n", + "2020-12-10 43.08738\n", + "2020-12-11 36.93554\n", + "2020-12-12 33.44147\n", + "2020-12-13 35.24588\n", + "2020-12-14 47.67855\n", + "2020-12-15 41.84728\n", + "2020-12-16 55.27396\n", + "2020-12-17 32.23195\n", + "2020-12-18 30.18391\n", + "2020-12-19 39.27033\n", + "2020-12-20 45.13756\n", + "2020-12-21 43.00961\n", + "2020-12-22 43.69411\n", + "2020-12-23 46.30954\n", + "2020-12-24 37.42397\n", + "2020-12-25 35.94406\n", + "2020-12-26 45.00482\n", + "2020-12-27 31.81550\n", + "2020-12-28 32.69022\n", + "2020-12-29 31.52063\n", + "2020-12-30 43.08600\n", + "2020-12-31 39.28333" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "additional_item[is.na(additional_item)] = 0\n", + "total = data.frame(row.names=idx[0:size],additional_item$additional_product + additional_item$sales)\n", + "colnames(total) = c('total')\n", + "total" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "bdb60236", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABaAAAALQCAMAAABR+ye1AAAAOVBMVEUAAAAzMzNNTU1oaGh8\nfHyMjIyampqnp6eyIiKysrK9vb3Hx8fQ0NDZ2dnh4eHp6enr6+vw8PD///+vl18TAAAACXBI\nWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO19ibbjOI5sdlb1tGam37TL//+xr64XWSKxBEBQ\nImXEOVVpSyQIbkEwROv+uicSiURiSPw624FEIpFI0EiCTiQSiUGRBJ1IJBKDIgk6kUgkBkUS\ndCKRSAyKJOhEIpEYFEnQiUQiMSiSoBOJRGJQeAn61oTG7F2RvvmQvjkxtHPpnR8NziVB80jf\nfEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTO\njyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjf\nnBjaufTOj4MI+vff2P6bBH0e0jcfRvZtbOfSOz+OIejfr//9Xr8kQZ+G9M2HkX0b27n0zo8k\n6C5I33xI35wY2rn0zo8DCfqeBD0E0jcfRvZtbOfSOz+OIuin9vwh6H/8QMuWSCQSiUboBP1i\n54ygB0D65sPIvo3tXHrnR2rQXZC++ZC+OTG0c+mdH0nQXZC++ZC+OTG0c+mdH0nQXZC++ZC+\nOTG0c+mdH0nQXZC++ZC+OTG0c+mdH/lLwi5I33xI35wY2rn0zo98F0cXpG8+pG9ODO1ceudH\nEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9O\nDO1ceudHEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9ODO0c6d2yHO4Gg6HbLgm6C9I3H9I3J4Z2\njvJuWYZh6KHbLgm6C9I3H9I3J4Z2jvBuWcZh6KHbLgm6C9I3H9I3J4Z2rvJueeMUb0oM3XZJ\n0F2QvvmQvjkxtHO1d0nQKJKguyB98yF9c2Jo51Li8CMJugvSNx/SNyeGdi4fEvqRBN0F6ZsP\n6ZsTQzuXx+z8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdo71L\niQNBEnQXpG8+pG9ODO1cErQfSdBdkL75kL45MbRz6Z0fSdBdkL75kL45MbRz6Z0fSdBdkL75\n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\n9y4JugscvrWSzxcQdN+D5BrOHW+dj9n1RUocbiRBd4Hdt4p8Jpc4OmjQvX/qo2Dk8Ta2c0nQ\nfiRBd4HZt5p8JifoeA26w28x55E4NAztXHrnRxJ0FwRE0GYDaMKUOD4GLYlHHm9jO5fe+ZEE\n3QWpQftw7EPC6/wMfWznUuLwIwm6C9pPcfSTWi0SR4MX4x+zM9L9yONtbOeSoP1Igu6CgFcj\ndGNoA0G3eNGFoCNhFUxGHm9jO5fe+ZEE3QWtvjnU1iaJgy7r+EMTB/ap+ZHjyONtbOfSOz+S\noLug0TfPeYUWgibLajw1kRH0kRjauZQ4/EiC7oITImgYtW9caU387Mp4aJ+mBn0UkqDdSILu\ngpk0aCFSbuJnT9Zj+zRPcRwE1LtzfoU0dNslQXdBu2/2v3mLpqx8E6SMJn52ZL52n3bE0M6h\n3p30O9Gh2y4JugsO980wtHGJo8mbJOgjMbRzoHfhPxQFMXTbJUF3wdG+WYY2+pDwKH+2yD51\nYmjnMO/ankk3YOi2S4LugoN9M41t/JhdA5wzLfvUiaGdM0XQnV0hMHTbnUrQiSg8x/bZXmwx\nljeJGTDaGL4MMoIuMZcGPQ7SNyeGds5wiqOrGwyGbruUOLrgeN8aTnEMhPTNiaGdS+/8SILu\ngvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGd\nS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTN\nh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8\nSILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TN\niaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILu\ngvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGd\nS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTN\nh/TNiaGdS+/8OJWg2/CPU0qdH9luPmS7uZFN50ZI0yVBz4RsNx+y3dzIpnMjCfrrkO3mQ7ab\nG9l0biRBfx2y3XzIdnMjm86NiQk6kUgkEiqSoBOJRGJQJEEnEonEoEiCTiQSiUGRBJ1IJBKD\nIgk6kUgkBkVXgv7NXf8b0r/fjmw3N37XH7PVdPBtka2nwTpb+RwUziDo36//cf9+O34zjZDt\npqMm6Gw1FW8C2V7a/putJ8HIckVDa0iCHg9J0H4kQTtABHZJ0DCsBM1NbxrdCfoV2P++F1ui\nspOz01f8frfEp+m2N7PdBJQzor5Mfv9q/N5+eM7XvYCRrSfByHJ3W7v1Juh1tjz9J++R378X\n75Z6N1kubAYkQduxJWiq8bL1RBhZ7m5rt0MkDqJD15r8pr9/MX7f981RzpVsNwE0x2SrSagI\n+r5vmGw9EUaWu9varT9Bv/ZM6/fPrex0CusimwTtQBK0HUnQTTCy3N3Wbv016Du1tvze/6/6\n/sX4/QRN0NluCsh2y1YToRB0tp4MI8vdbe3Wi6B3s6Ryne7p7PQfSBF0tpsAcsitN7LVeJSR\n8X3bMNl6PDwsd7e12xEEXQX/v/dpqu/fjE8brQ8Jy3vZbiTIIXfPVtOxOQfNrG7ZeiQ8LHe3\ntVs3iWPz+5lybXnv4e+bf7bfvxobgl6P2b0vZbuJoIZcthqEza/c1sZZv2brsfCw3CAEnWhF\njv9E4tuRBD0skqATiW9HEvSwSIJOJL4dSdCJRCIxKJKgE4lEYlAkQScSicSgSIJOJBKJQZEE\nnUgkEoMiCTqRSCQGRRJ04rr49av+lEhMhBy3iesiCToxOXLcJr4BSdCJKZHjNnFdPGj5P3/+\n+ufPp3/++r/7/f9+/Xm2U4kEjiToxHXxQ9B//f7169c///70168/7vc/f1g6kZgFSdCJ6+KH\noP/1d8z8158/n/7717//99e/zvYpkTAgCTpxXfzQ8h+//nO//+chduQ7jBOzIQk6cV380PLz\n8eDj///769f/nuxRImFCEnTiukiCTkyOJOjEdVFKHH/8kRJHYiokQSeui+ejwT//ur8fEv77\n13+f7VMiYUASdOK6qI/Z/fHrr7OdSiRwJEEnrovnD1X+ufuhyj/PdiqRwJEEnUgkEoMiCTqR\nSCQGRRJ0IpFIDIok6EQikRgUSdCJRCIxKJKgE4lEYlAkQScSicSgSIJOJBKJQZEEnUgkEoMi\nCTqRSCQGRRJ0IpFIDIok6EQikRgU/x+22CwvTrb4CQAAAABJRU5ErkJggg==", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "ggplot(total,aes(x=idx,y=total)) + geom_point(color = \"firebrick\", shape = \"diamond\", size = 2) +\n", + " geom_line(color = \"firebrick\", linetype = \"dotted\", size = .3)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "294dde87", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 2020-01-01\n", + "\\item 2020-02-01\n", + "\\item 2020-03-01\n", + "\\item 2020-04-01\n", + "\\item 2020-05-01\n", + "\\item 2020-06-01\n", + "\\item 2020-07-01\n", + "\\item 2020-08-01\n", + "\\item 2020-09-01\n", + "\\item 2020-10-01\n", + "\\item 2020-11-01\n", + "\\item 2020-12-01\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 2020-01-01\n", + "2. 2020-02-01\n", + "3. 2020-03-01\n", + "4. 2020-04-01\n", + "5. 2020-05-01\n", + "6. 2020-06-01\n", + "7. 2020-07-01\n", + "8. 2020-08-01\n", + "9. 2020-09-01\n", + "10. 2020-10-01\n", + "11. 2020-11-01\n", + "12. 2020-12-01\n", + "\n", + "\n" + ], + "text/plain": [ + " [1] \"2020-01-01\" \"2020-02-01\" \"2020-03-01\" \"2020-04-01\" \"2020-05-01\"\n", + " [6] \"2020-06-01\" \"2020-07-01\" \"2020-08-01\" \"2020-09-01\" \"2020-10-01\"\n", + "[11] \"2020-11-01\" \"2020-12-01\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "index = seq(start_date,end_date,by ='month')\n", + "index" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "7542d95e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " total\n", + "2020-01-31 40.12725\n", + "2020-02-29 36.38809\n", + "2020-03-31 36.63476\n", + "2020-04-30 36.69513\n", + "2020-05-31 40.12267\n", + "2020-06-30 38.04770\n", + "2020-07-31 39.38036\n", + "2020-08-31 37.60016\n", + "2020-09-30 37.76963\n", + "2020-10-31 38.57457\n", + "2020-11-30 38.38480\n", + "2020-12-31 39.73959" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nycRWwgAAAABJRU5ErkJggg==", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "x<- as.xts(total, dateFormat =\"Date\")\n", + "(monthly<-apply.monthly(x,mean))\n", + "ggplot(monthly, aes(x=index, y=total)) + \n", + " geom_bar(stat = \"identity\", width=5) " + ] + }, + { + "cell_type": "markdown", + "id": "945feffd", + "metadata": {}, + "source": [ + "## DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "id": "d38f1754", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in seq_len(head.end.idx):\n", + "\"first element used of 'length.out' argument\"\n", + "ERROR while rich displaying an object: Error in seq_len(head.end.idx): argument must be coercible to non-negative integer\n", + "\n", + "Traceback:\n", + "1. FUN(X[[i]], ...)\n", + "2. tryCatch(withCallingHandlers({\n", + " . if (!mime %in% names(repr::mime2repr)) \n", + " . stop(\"No repr_* for mimetype \", mime, \" in repr::mime2repr\")\n", + " . rpr <- repr::mime2repr[[mime]](obj)\n", + " . if (is.null(rpr)) \n", + " . return(NULL)\n", + " . prepare_content(is.raw(rpr), rpr)\n", + " . }, error = error_handler), error = outer_handler)\n", + "3. tryCatchList(expr, classes, parentenv, handlers)\n", + "4. tryCatchOne(expr, names, parentenv, handlers[[1L]])\n", + "5. doTryCatch(return(expr), name, parentenv, handler)\n", + "6. withCallingHandlers({\n", + " . if (!mime %in% names(repr::mime2repr)) \n", + " . stop(\"No repr_* for mimetype \", mime, \" in repr::mime2repr\")\n", + " . rpr <- repr::mime2repr[[mime]](obj)\n", + " . if (is.null(rpr)) \n", + " . return(NULL)\n", + " . prepare_content(is.raw(rpr), rpr)\n", + " . }, error = error_handler)\n", + "7. repr::mime2repr[[mime]](obj)\n", + "8. repr_html.help_files_with_topic(obj)\n", + "9. repr_help_files_with_topic_generic(obj, Rd2HTML)\n" + ] + } + ], + "source": [ + "?vector" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "88a435ec", + "metadata": {}, + "outputs": [], + "source": [ + "a = data.frame(a,row.names = c(1:a1))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c4e2a6c1", + "metadata": {}, + "outputs": [], + "source": [ + "b = data.frame(b,row.names = c(1:b1))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2bb5177c", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 2
ab
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" + ], + "text/latex": [ + "A data.frame: 9 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & a & b\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like \\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\t5 & 5 & Python\\\\\n", + "\t6 & 6 & and \\\\\n", + "\t7 & 7 & Pandas\\\\\n", + "\t8 & 8 & very \\\\\n", + "\t9 & 9 & much \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 2\n", + "\n", + "| | a <int> | b <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "| 5 | 5 | Python |\n", + "| 6 | 6 | and |\n", + "| 7 | 7 | Pandas |\n", + "| 8 | 8 | very |\n", + "| 9 | 9 | much |\n", + "\n" + ], + "text/plain": [ + " a b \n", + "1 1 I \n", + "2 2 like \n", + "3 3 to \n", + "4 4 use \n", + "5 5 Python\n", + "6 6 and \n", + "7 7 Pandas\n", + "8 8 very \n", + "9 9 much " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df<- data.frame(a,b)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "8f45d3a5", + "metadata": {}, + "outputs": [], + "source": [ + "df = \n", + " rename(df,\n", + " A = a,\n", + " B = b,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "0efbf2d4", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" + ], + "text/latex": [ + "A data.frame: 9 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like \\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\t5 & 5 & Python\\\\\n", + "\t6 & 6 & and \\\\\n", + "\t7 & 7 & Pandas\\\\\n", + "\t8 & 8 & very \\\\\n", + "\t9 & 9 & much \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "| 5 | 5 | Python |\n", + "| 6 | 6 | and |\n", + "| 7 | 7 | Pandas |\n", + "| 8 | 8 | very |\n", + "| 9 | 9 | much |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like \n", + "3 3 to \n", + "4 4 use \n", + "5 5 Python\n", + "6 6 and \n", + "7 7 Pandas\n", + "8 8 very \n", + "9 9 much " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "88b51fdc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Column A (series):\n" + ] + }, + { + "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", + "\n", + "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" + ], + "text/latex": [ + "A data.frame: 9 × 1\n", + "\\begin{tabular}{r|l}\n", + " & A\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t1 & 1\\\\\n", + "\t2 & 2\\\\\n", + "\t3 & 3\\\\\n", + "\t4 & 4\\\\\n", + "\t5 & 5\\\\\n", + "\t6 & 6\\\\\n", + "\t7 & 7\\\\\n", + "\t8 & 8\\\\\n", + "\t9 & 9\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 1\n", + "\n", + "| | A <int> |\n", + "|---|---|\n", + "| 1 | 1 |\n", + "| 2 | 2 |\n", + "| 3 | 3 |\n", + "| 4 | 4 |\n", + "| 5 | 5 |\n", + "| 6 | 6 |\n", + "| 7 | 7 |\n", + "| 8 | 8 |\n", + "| 9 | 9 |\n", + "\n" + ], + "text/plain": [ + " A\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "5 5\n", + "6 6\n", + "7 7\n", + "8 8\n", + "9 9" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cat(\"Column A (series):\\n\")\n", + "select(df,'A')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "010bcba8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" + ], + "text/latex": [ + "A data.frame: 4 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like\\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like\n", + "3 3 to \n", + "4 4 use " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A<5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "082277db", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" + ], + "text/latex": [ + "A data.frame: 1 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t6 & 6 & and\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 1 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 6 | 6 | and |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "6 6 and" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A>5 & df$A<7,]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "0bbd19f8", + "metadata": {}, + "outputs": [], + "source": [ + "df$DivA <- df$A - mean(df$A)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f36d96af", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" + ], + "text/latex": [ + "A data.frame: 9 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & A & B & DivA\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4\\\\\n", + "\t2 & 2 & like & -3\\\\\n", + "\t3 & 3 & to & -2\\\\\n", + "\t4 & 4 & use & -1\\\\\n", + "\t5 & 5 & Python & 0\\\\\n", + "\t6 & 6 & and & 1\\\\\n", + "\t7 & 7 & Pandas & 2\\\\\n", + "\t8 & 8 & very & 3\\\\\n", + "\t9 & 9 & much & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 3\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> |\n", + "|---|---|---|---|\n", + "| 1 | 1 | I | -4 |\n", + "| 2 | 2 | like | -3 |\n", + "| 3 | 3 | to | -2 |\n", + "| 4 | 4 | use | -1 |\n", + "| 5 | 5 | Python | 0 |\n", + "| 6 | 6 | and | 1 |\n", + "| 7 | 7 | Pandas | 2 |\n", + "| 8 | 8 | very | 3 |\n", + "| 9 | 9 | much | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA\n", + "1 1 I -4 \n", + "2 2 like -3 \n", + "3 3 to -2 \n", + "4 4 use -1 \n", + "5 5 Python 0 \n", + "6 6 and 1 \n", + "7 7 Pandas 2 \n", + "8 8 very 3 \n", + "9 9 much 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "c67f2bd0", + "metadata": {}, + "outputs": [], + "source": [ + "df$LenB <- str_length(df$B)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "cef214b2", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" + ], + "text/latex": [ + "A data.frame: 9 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\t7 & 7 & Pandas & 2 & 6\\\\\n", + "\t8 & 8 & very & 3 & 4\\\\\n", + "\t9 & 9 & much & 4 & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "| 7 | 7 | Pandas | 2 | 6 |\n", + "| 8 | 8 | very | 3 | 4 |\n", + "| 9 | 9 | much | 4 | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 \n", + "7 7 Pandas 2 6 \n", + "8 8 very 3 4 \n", + "9 9 much 4 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "59fe5316", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" + ], + "text/latex": [ + "A data.frame: 5 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 5 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[0:5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "f944a949", + "metadata": {}, + "outputs": [], + "source": [ + "df1 = df %>% group_by(LenB) %>% summarise(a = mean(A))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "8ffd39cd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
LenBa
<int><dbl>
11.000000
23.000000
35.000000
46.333333
66.000000
\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " LenB & a\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t 1 & 1.000000\\\\\n", + "\t 2 & 3.000000\\\\\n", + "\t 3 & 5.000000\\\\\n", + "\t 4 & 6.333333\\\\\n", + "\t 6 & 6.000000\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| LenB <int> | a <dbl> |\n", + "|---|---|\n", + "| 1 | 1.000000 |\n", + "| 2 | 3.000000 |\n", + "| 3 | 5.000000 |\n", + "| 4 | 6.333333 |\n", + "| 6 | 6.000000 |\n", + "\n" + ], + "text/plain": [ + " LenB a \n", + "1 1 1.000000\n", + "2 2 3.000000\n", + "3 3 5.000000\n", + "4 4 6.333333\n", + "5 6 6.000000" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "3b859950", + "metadata": {}, + "outputs": [], + "source": [ + "df2 = df %>% group_by(LenB) %>%\n", + "summarise(MEAN = mean(A),count =length(DivA))" + ] + }, + { + "cell_type": "markdown", + "id": "5d3f0287", + "metadata": {}, + "source": [ + "## Printing and Plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "69946dc7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message in file(file, \"rt\"):\n", + "\"cannot open file 'file name': No such file or directory\"\n" + ] + }, + { + "ename": "ERROR", + "evalue": "Error in file(file, \"rt\"): cannot open the connection\n", + "output_type": "error", + "traceback": [ + "Error in file(file, \"rt\"): cannot open the connection\nTraceback:\n", + "1. read.csv(\"file name\")", + "2. read.table(file = file, header = header, sep = sep, quote = quote, \n . dec = dec, fill = fill, comment.char = comment.char, ...)", + "3. file(file, \"rt\")" + ] + } + ], + "source": [ + "dataset = read.csv(\"file name\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "009af652", + "metadata": {}, + "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", + "\n", + "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "515c95b2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\nDcw01iOkcZnFioQ0LJNYk5BGZQ6rEtKgTGFdQhqTGaxMSCNyDFudkAZk+uoT0njMXgNCGo7J\na0FIozF3TQhpMKauDSGNxcw1IqShmLhWhDQS89aMkMbhGLYhIQ3DpLUkpFGYs6aENAhT1paQ\nxmDGGhPSEExYa0IagflqTkgDMF3tCal/ZisBIfXOMWwKQuqcqcpBSH0zU0kIqWsmKgsh9cw8\npSGkjpmmPITUL7OUiJC6ZZIyEVKvzFEqQuqTY9hkhNQlE5SNkHpkftIRUodMTz5C6o/ZSUhI\n3TE5GQmpN+YmJSF1xtTkJKS+mJmkhNQTx7BpCakjpiUvIfXDrCQmpG6YlMyE1AtzkpqQOmFK\nchNSH8xIckLqggnJTkg9MB/pCSk/x7AdaBLSjzvDznlX9jNlMnogpLwO0+TpqA8VQyr/tcYl\nxnKYBSH1oWJI/9sI6RLl48Fk9KDmt3bbu3L7evgMX32KsyubRfn0RnZ1f0b6VcqvnZ+RzlOO\nT0qkV/nFhtfbcrcV0nmKjvpR/VW7x7J5FtJZvGrXkfovf7/c/PwzkM3zXpCfFrvR4hzpXkg/\nMwV98StCOZmBzggppeknoDtCymj2+++QkBKa/Pa7JKR85r77TgkpnalvvltCymbme++YkHJx\nAtspIaUy7Y13T0iZzHrfAxBSIpPe9hCElMecdz0IIaUx5U0PQ0hZzHjPAxFSEhPe8lCElMN8\ndzwYIWXgGLZ7QkpgstsdkpDam+tuByWk5qa62WEJqbWZ7nVgQmpsolsdmpDamudOByekpqa5\n0eEJqaVZ7nMCQmrHMexAhNTMFDc5DSG1MsM9TkRIjUxwi1MRUhvj3+FkhNTE8Dc4HSG1MPr9\nTUhIDQx+e1MSUn1j392khFSbY9ghCamygW9takKqa9w7m5yQqhr2xqYnpJpGvS+EVNOgt8VO\nSDWNeVccCKmaIW+KD0KqZcR74g8h1eEYdnBCqmK4G+IvQqphtPvhH0KqYLDb4QtCWt9Yd8OX\nhLS6oW6GE4S0tpHuhZOEtLKBboVvCGld49wJ3xLSmhzDTkNIKxrkNjiDkNYzxl1wFiGtZoib\n4ExCWssI98DZhLSSAW6BCwhpHf3fARcR0iq6vwEuJKQ19D5+LiakeI5hJySkSGXfUK+DZwkh\nxTk8E3k6mpOQ4hxGLaQ5CSlM+XjocvAsJKQw5dMbsxFSmHJ8UmI6QopTdDQvIcXxqt3EhBTl\ncIQko1kJKUiHQyaQkGL0N2JCCSlEdwMmmJAi9DZewgkpQGfDZQVCWq6v0bIKIS3W1WBZiZAW\ncnLEnpCW6WekrEpIi3QzUFYmpCV6GSerE9ICnQyTCoR0vT5GSRVCuloXg6QSIV2rhzFSjZCu\n4/iI/xDSVdIPkMqEdI3s46M6IV0h+fBoQEiXyz06mhDSxVIPjkaEdKnMY6MZIV0o8dBoSEgX\ncXzE14R0iazjojkhXSDpsEhASOfLOSpSENLZUg6KJIR0roxjIg0hnSnhkEhESGfxsjffE9I5\nso2HdIR0hmTDISEh/SzXaEhJSD9KNRiSEtJPMo2FtIT0g0RDITEhfS/PSEhNSN9xfMSZhPSN\nJMOgA0I6Lcco6IKQTkoxCDohpFMyjIFuCCnvEOiIkLKOgK4IKecA6IyQvrq8jriQkLJdnS4J\nKdfF6ZSQMl2bbgkpz6XpmJCyXJmuCSnHhemckDJcl+4J6dNVdcS1hNT2ogxCSC2vyTCE1O6S\nDERIra7IUITU5oIMRkgtrsdwhFT/cgyoZkjb+1Junz8+ybefpdbOLvthOD5iuYohbTdl7+79\nkyQI6TAGGRGhYkgP5emtpqfN7eGTZAjp54HAeSqGtHn/wNfNzWuKkMrHg5JYrmJIv9vZ3t5+\nFVL57MpLXDaeT2+wTMWQbsr293u3SZ6Rfj8pwUIVQ3oq9x/vvZbbBCF9xKwjAtR8+fvhTz3P\nP3z35lU7OlP1QPbl7vd7r/fNQ3o/QpIRIab9zQYFEWnWkHREqElD0hGx5gxJRwSbMiQdEW3G\nkHREuAlD0hHx5gtJR6xgtpCcwLKKyUKSEeuYKyQdsZKpQtIRa5kpJB2xmolC0hHrmSckHbGi\naULSEWuaJSQdsao5QnIMy8qmCElGrG2GkHTE6iYISUesb/yQdEQFw4ekI2oYPSQdUcXgIemI\nOsYOSUdUMnJIjmGpZuCQZEQ944akIyoaNiQdUdOoIemIqgYNSUfUNWZIOqKyIUPSEbWNGJKO\nqG68kBzD0sBwIcmIFkYLSUc0MVhIOqKNsULSEY0MFZKOaGWkkHREMwOFpCPaGSckHdHQKCE5\nhqWpQUKSEW2NEZKOaGyIkHREayOEpCOaGyAkHdFe/yHpiAS6D0lHZNB7SDoihb5DcgxLEl2H\nJCOy6DkkHZFGxyHpiDz6DUlHJNJtSDoik15D0hGpdBqSjsilz5B0RDI9huQYlnT6CqnsG5IR\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "41b872c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\nKldwNYpUuYKrUaTKFVyNIlWu4GoUqXIFV6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1Gk\nyhVcjSJVruBqFKlyBVejSJUruBpFqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSp\ncgVXo0iVK7gaRapcwdUoUuUKrkaRKldwNYpUuYKrUaTKFVyNIlWu4GoUqXIFV6NIlSu4GkWq\nXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpFqlzB1ShS5QquRpEq\nV3A1ilS5gqtRpMoVXI0iVa7gahSpcgUPsgz5fZAiNa7gQUZye0gBFIkrUqTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWSw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWSw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWSw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JI\nqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2GkreBBFWn2Z5LDTVvAgirT6Mslhp63gQRRp9WWS\nw05bwYMo0urLJIedtoIHUaTVl0kOO20FD6JIqy+THHbaCh5EkVZfJjnstBU8iCKtvkxy2Gkr\neBBFWn2Z5LDTVvAgirT6Mq/9wucPT98/fnyzLG8/H7SCOoq0+jKv/LpvT8vy8vz9ww9vD1lB\nH0VafZlXft375d3z9w/vv33v1PvlwxEr6KNIqy/z2q9bnv/88P2/5S1PR6ygjyKtvsxrv+7H\nFz4tv/3N//cf/+b11xGyjPh9zkBuFemfvF++vrx8/PHhx0+k//qLJEU6X0NuFemffF2ePnx9\neff0vUlf3ixfjlhBTkNuFekffXn662f/x2NWENOQW0Va8fn9mx8tevfx22ErCGnIrSL1r2BD\nQ24VqX8FGxpyq0j9K9jQkFtF6l/BhobcKlL/CjY05FaR+lewoSG3itS/gg0NuVWk/hVsaMit\nIvWvYENDbhWpfwUbGnKrSP0r2NCQW0XqX8GGhtwqUv8KNjTkVpH6V7ChIbeK1L+CDQ25VaT+\nFWxoyK0i9a9gQ0NuFal/BRsacqtI/SvY0JBbRepfwYaG3CpS/wo2NORWkfpXsKEht4rUv4IN\nDblVpP4VbGjIrSL1r2BDQ24VqX8FGxpyq0j9K9jQkFtF6l/BhobcKlL/CjY05FaR+lewoSG3\nitS/gg0NuVWk/hVsaMitIvWvYENDbhWpfwUbGnKrSP0r2NCQW0XqX8GGhtwqUv8KNjTkVpH6\nV7ChIbeK1L+CDQ25VaT+FWxoyK0i9a9gQ0NuFal/BRsacqtI/SvY0JBbRepfwYaG3CpS/wo2\nNORWkfpXsKEht4rUv4INDblVpP4VbGjIrSL1r2BDQ24VqX8FGxpyq0j9K9jQkFtF6l/Bhobc\nKlL/CjY05FaR+lewoSG3itS/gg0NuVWk/hVsaMitIvWvYENDbhWpfwUbGnKrSP0r2NCQW0Xq\nX8GGhtwqUv8KNjTkVpH6V7ChIbeK1L+CDQ25VaT+FbNahvw+qCC3itS/YlZT5bbuIEW6jaly\nW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5SpNuYKrd1BynSbUyV27qDFOk2pspt3UGKdBtT\n5bbuIEW6jalyW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5SpNuYKrd1BynSbUyV27qDFOk2\npspt3UGKdBtT5bbuIEW6jalyW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5SpNuYKrd1BynS\nbUyV27qDFOk2pspt3UGKdBtT5bbuIEW6jalyW3eQIt3GVLmtO0iRbmOq3NYdpEi3MVVu6w5S\npNuYKrd1Bx1epK8fno5ewb8yVW7rDjq2SN8+vlkWReowVW7rDjqwSM+fv7doefsluUGRXm+q\n3NYddFiRPr/9+X/09i05/0WRBkyV27qDjinSl/ffO/T04esSz70ivdpUua076JAiPf1o0R8/\n/oEi9Zgqt3UHHVKkZfnw65Pk+N9XsNtUua07yE+k25gqt3UHHfprpD8UqchUua07yL+1u42p\nclt30OG/j/TO7yOVmCq3dQf5kw23MVVu6w7yZ+1uY6rc1h3kT3/fxlS5rTtIkW5jqtzWHaRI\ntzFVbusOUqTbmCq3dQcp0m1Mldu6gxTpNqbKbd1BinQbU+W27iBFuo2pclt3kCLdxlS5rTtI\nkW5jqtzWHaRItzFVbusOUqTbmCq3dQcp0m1Mldu6gxTpNqbKbd1BinQbU+W27iBFuo2pclt3\nkCLdxlS5rTtIkW5jqtzWHaRItzFVbusOUqTbmCq3dQeVFWnzf1FSkV5tqtzWHaRItzFVbusO\nqijS8n8dsYK5clt3UEWR/nhSpONNldu6gyqK9PL8bnn7838l/B9b9K9bNqdlxO9zBmJSl9u6\ngzqK9PLyeVk+v/g10j9piEldbusOainSy7e3y7tnRfoHDTGpy23dQTVFenn5uDx9UaS/a4hJ\nXW7rDioq0svXN9u/BlKkU2JSl9u6g5qK9PLyXpH+riEmdbmtO6irSBUr2jTEpC63dQcpUr2G\nmNTltu4gRarXEJO63NYdpEj1GmJSl9u6gxSpXkNM6nJbd5Ai1WuISV1u6w5SpHoNManLbd1B\nilSvISZ1ua07SJHqNcSkLrd1BylSvYaY1OW27iBFqtcQk7rc1h2kSPUaYlKX27qDFKleQ0zq\nclt3kCLVa4hJXW7rDlKkeg0xqctt3UGKVK8hJnW5rTtIkeo1xKQut3UHKVK9hpjU5bbuIEWq\n1xCTutzWHaRI9RpiUpfbuoMUqV5DTOpyW3eQItVriEldbusOUqR6DTGpy23dQYpUryEmdbmt\nO0iR6jXEpC63dQcpUr2GmNTltu4gRarXEJO63NYdpEj1GmJSl9u6gxSpXkNM6nJbd5Ai1WuI\nSV1u6w5SpHoNManLbd1BilSvISZ1ua07SJHqNcSkLrd1BylSvYaY1OW27iBFqtcQk7rc1h2k\nSPUaYlKX27qDFKleQ0zqclt3kCLVa4hJXW7rDlKkeg0xqctt3UGKVK8hJnW5rTtIkeo1xKQu\nt3UHKVK9hpjU5bbuIEWq1xCTutzWHaRI9RpiUpfbuoMUqV5DTOpyW3eQItVriEldbusOUqR6\nDTGpy23dQYpUryEmdbmtO0iR6jXEpC63dQcpUr2GmNTltu4gRarXEJO63NYdpEj1GmJSl9u6\ngxSpXkNM6nJbd5Ai1WuISV1u6w5SpHoNManLbd1BilSvISZ1ua07SJHqNcSkLrd1BylSvYaY\n1OW27iBFqtcQk7rc1h2kSPUaYlKX27qDFKleQ0zqclt3kCLVa4hJXW7rDlKkeg0xqctt3UGK\ndJRlyO+DCmJSl9u6gxTpKFPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc5\n7LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxn\nJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvm\njGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRB\ne+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPF\nxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUh\nU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0\nFSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc5\n7LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxn\nJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvm\njGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRB\ne+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPF\nxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUh\nU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0\nFSFTxcRBe+aMZyc57LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc5\n7LQVIVPFxEF75oxnJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZyc57LQVIVPFxEF75oxn\nJznstBUhU8XEQXvmjGcnOey0FSFTxcRBe+aMZ+e1X/j8flnefvlzyH+dokinzHHQnjnj2Xnl\n1z0/LT+8+88QReqLiYP2zBnPziu/7sPy6XubPj29/TlEkfpi4qA9c8az88qve/rPF357evNN\nkQ779jroUXPGs/Par/vzC5/fvv2nIi2/Gzjv3x4z4Pc5A9+Vupg4aM+cYa8d9mZ5/vXZ29N/\nIjV8V+pi4qA9c4a9dtin5f2fn31b3ipScJCDzpgz7NXDPvxve75s/Lc3RXJQ5UEdRXr5+u7X\nZ9/eK1JfTBy0Z86wKf5kQ8N3pS4mDtozZ5gihebUxcRBe+YMU6TQnLqYOGjPnGGKFJpTFxMH\n7ZkzTJFCc+pi4qA9c4YpUmhOXUwctGfOMEUKzamLiYP2zBmmSKE5dTFx0J45wxQpNKcuJg7a\nM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcTB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRn\nzjBFCs2pi4mD9swZpkihOXUxcdCeOcMUKTSnLiYO2jNnmCKF5tTFxEF75gxTpNCcupg4aM+c\nYYoUmlMXEwftmTNMkUJz6mLioD1zhilSaE5dTBy0Z84wRQrNqYuJg/bMGaZIoTl1MXHQnjnD\nFCk0py4mDtozZ5gihebUxcRBe+YMU6TQnLqYOGjPnGGKFJpTFxMH7ZkzTJFCc+pi4qA9c4Yp\nUmhOXUwctGfOMEUKzamLiYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk\n0Jy6mDhoz5xhihSaUxcTB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZpkih\nOXUxcdCeOcMUKTSnLiYO2jNnmCKF5tTFxEF75gxTpNCcupg4aM+cYYoUmlMXEwftmTNMkUJz\n6mLioD1zhilSaE5dTBy0Z84wRQrNqYuJg/bMGaZIoTl1MXHQnjnDFCk0py4mDtozZ5gihebU\nxcRBe+YMU6TQnLqYOGjPnGGKFJpTFxMH7ZkzTJFCc+pi4qA9c4YpUmhOXUwctGfOMEUKzamL\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "barplot(df$A, ylab = 'A',xlab = 'no')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11001454", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "670db495", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.1.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 69b9b4d2cf36bfe2badf6a959c1fc2b9967b82f5 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:09:21 -0500 Subject: [PATCH 62/74] fix: Solve issue with broken reference on sketchdoc image --- 1-Introduction/03-defining-data/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/03-defining-data/translations/README.es.md b/1-Introduction/03-defining-data/translations/README.es.md index 16d11409..c30a37d7 100644 --- a/1-Introduction/03-defining-data/translations/README.es.md +++ b/1-Introduction/03-defining-data/translations/README.es.md @@ -1,6 +1,6 @@ # Definiendo datos -|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/03-DefiningData.png)| +|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/03-DefiningData.png)| |:---:| |Definiendo datos - _Sketchnote por [@nitya](https://twitter.com/nitya)_ | From ef2294e698452233a9c917e4e04806f6bf56afd3 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:10:59 -0500 Subject: [PATCH 63/74] feat:(translation) Improve title for module 1 section 3 --- 1-Introduction/03-defining-data/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/03-defining-data/translations/README.es.md b/1-Introduction/03-defining-data/translations/README.es.md index c30a37d7..4f709ece 100644 --- a/1-Introduction/03-defining-data/translations/README.es.md +++ b/1-Introduction/03-defining-data/translations/README.es.md @@ -1,4 +1,4 @@ -# Definiendo datos +# Definiendo los datos |![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/03-DefiningData.png)| |:---:| From 1466c6fbfbfe12bf1e3189ca0970a05bb0b7f595 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:31:34 -0500 Subject: [PATCH 64/74] fix(translation): Fix broken link on assignment reference --- 1-Introduction/03-defining-data/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/03-defining-data/translations/README.es.md b/1-Introduction/03-defining-data/translations/README.es.md index 4f709ece..c59b5718 100644 --- a/1-Introduction/03-defining-data/translations/README.es.md +++ b/1-Introduction/03-defining-data/translations/README.es.md @@ -66,4 +66,4 @@ Kaggle es una fuente excelente de conjuntos de datos abiertos. Usa los [conjunto ## Assignación -[Clasificación de conjuntos de datos](assignment.md) +[Clasificación de los conjuntos de datos](../assignment.md) From 0998692372bce42a7b12329bed6b01351e8ca139 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:36:46 -0500 Subject: [PATCH 65/74] fix(translation): Translate title on main readme --- 1-Introduction/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/translations/README.es.md b/1-Introduction/translations/README.es.md index e905bf11..9e29302b 100644 --- a/1-Introduction/translations/README.es.md +++ b/1-Introduction/translations/README.es.md @@ -1,4 +1,4 @@ -# Introduction to Data Science +# Introducción a la Ciencia de Datos ![Datos en acción](images/data.jpg) > Fotografía de Stephen Dawson en Unsplash From 7ac9533ebbd21677c827317e6a5e77736f0e5156 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:38:35 -0500 Subject: [PATCH 66/74] fix:(translation): Add missing word (article) on link's label --- 1-Introduction/03-defining-data/translations/README.es.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1-Introduction/03-defining-data/translations/README.es.md b/1-Introduction/03-defining-data/translations/README.es.md index c59b5718..656be467 100644 --- a/1-Introduction/03-defining-data/translations/README.es.md +++ b/1-Introduction/03-defining-data/translations/README.es.md @@ -2,14 +2,14 @@ |![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/03-DefiningData.png)| |:---:| -|Definiendo datos - _Sketchnote por [@nitya](https://twitter.com/nitya)_ | +|Definiendo los datos - _Sketchnote por [@nitya](https://twitter.com/nitya)_ | Los datos son hechos, información, observaciones y mediciones que son usados para realizar descubrimientos y soportar decisiones informadas. Un punto de datos es una unidad simple de datos dentro de un conjunto de datos, lo cual es una colección de puntos de datos. Los conjuntos de datos pueden venir en distintos formatos y estructuras, y comúnmente se basan en su fuente, o de donde provienen los datos. Por ejemplo, las ganancias mensuales de una compañía pueden estar en una hoja de cálculo, pero los datos del ritmo cardiaco por hora de un reloj inteligente pueden estar en un formato [JSON](https://stackoverflow.com/a/383699). Es algo común para los científicos de datos el trabajar con distintos tipos de datos dentro de un conjunto de datos. Esta lección se enfoca en la identificación y clasificación de datos por sus características y sus fuentes. ## [Examen previo a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/4) -## Como se describen los datos +## Cómo se describen los datos Los **datos en crudo** son datos que provienen de su fuente en su estado inicial y estos no han sido analizados u organizados. Con el fin de que tenga sentido lo que sucede con un conjunto de datos, es necesario organizarlos en un formato que pueda ser entendido tanto por humanos como por la tecnología usada para analizarla a mayor detalle. La estructura de un conjunto de datos describe como está organizado y puede ser clasificado de forma estructurada, no estructurada y semi-estructurada. Estos tipos de estructuras podrían variar, dependiendo de la fuente pero finalmente caerá en una de estas categorías. ### Datos cuantitativos Los datos cuantitativos son observaciones numéricas en un conjunto de datos que puede ser típicamente analizados, medidos y usados matemáticamente. Algunos ejemplos de datos cuantitativos son: la población de un país, la altura de una persona o las ganancias trimestrales de una compañía. Con algo de análisis adicional, los datos cuantitativos podrían ser usados para descubrir tendencias de temporada en el índice de calidad del aire (AQI) o estimar la probabilidad la hora pico de embotellamiento vial en un día laboral típico. From 86e2690581a0786cdd6e748cafe31d83ccd4c29d Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:43:44 -0500 Subject: [PATCH 67/74] fix: Solve issue with broken link on first image * set right path for main image on module 1 main page --- 1-Introduction/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/translations/README.es.md b/1-Introduction/translations/README.es.md index 9e29302b..75d3b4cc 100644 --- a/1-Introduction/translations/README.es.md +++ b/1-Introduction/translations/README.es.md @@ -1,6 +1,6 @@ # Introducción a la Ciencia de Datos -![Datos en acción](images/data.jpg) +![Datos en acción](../images/data.jpg) > Fotografía de Stephen Dawson en Unsplash En estas lecciones descubrirás cómo se define la Ciencia de Datos y aprenderás acerca de From 8cce81d30007bb27a71144ca34beafc25e1deed4 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 11 Oct 2021 21:47:13 -0500 Subject: [PATCH 68/74] fix(translation): Fix typo on module 1 section 3 Change Lean with Learn --- 1-Introduction/03-defining-data/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-Introduction/03-defining-data/translations/README.es.md b/1-Introduction/03-defining-data/translations/README.es.md index 656be467..27ba6743 100644 --- a/1-Introduction/03-defining-data/translations/README.es.md +++ b/1-Introduction/03-defining-data/translations/README.es.md @@ -62,7 +62,7 @@ Kaggle es una fuente excelente de conjuntos de datos abiertos. Usa los [conjunto ## Revisión y auto-estudio -- Esta unidad de Microsoft Lean, titulada [clasifica tus datos](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data) tiene un desglose detallado de datos estructurados, semi-estructurados y no estructurados. +- Esta unidad de Microsoft Learn, titulada [clasifica tus datos](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data) tiene un desglose detallado de datos estructurados, semi-estructurados y no estructurados. ## Assignación From c0f0147743d7371e31a78ccae69fb03c2889143d Mon Sep 17 00:00:00 2001 From: Subh Chaturvedi Date: Tue, 12 Oct 2021 09:53:45 +0530 Subject: [PATCH 69/74] Added the translation for the ethics README --- .../02-ethics/translations/README.hi.md | 260 ++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 1-Introduction/02-ethics/translations/README.hi.md diff --git a/1-Introduction/02-ethics/translations/README.hi.md b/1-Introduction/02-ethics/translations/README.hi.md new file mode 100644 index 00000000..a83a7e03 --- /dev/null +++ b/1-Introduction/02-ethics/translations/README.hi.md @@ -0,0 +1,260 @@ +# डेटा नैतिकता का परिचय + +|![[(@sketchthedocs) द्वारा स्केचनोट](https://sketchthedocs.dev) ](../../../sketchnotes/02-Ethics.png)| +|:---:| +| डेटा विज्ञान नैतिकता - _[@nitya](https://twitter.com/nitya) द्वारा स्केचनोट_ | + +--- + +हम सब इस डाटा-फाइड दुनिया में रहने वाले डाटा-नागरिक है | + +बाजार के रुझान यह दर्शाते हैं कि २०२२ तक, तीन में से एक बड़ी संस्था अपना डाटा कि खरीद और बेचना ऑनलाइन [दुकानों](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/) द्वारा करेंगी | **ऐप डेवलपर** के रूप में, हम डेटा-संचालित अंतर्दृष्टि और एल्गोरिथम-चालित स्वचालन को दैनिक उपयोगकर्ता अनुभवों में एकीकृत करना आसान और सस्ता पाएंगे। लेकिन जैसे-जैसे AI व्यापक होता जाएगा, हमें इस तरह के एल्गोरिदम के [हथियारीकरण](https://www.youtube.com/watch?v=TQHs8SA1qpk) से होने वाले संभावित नुकसान को भी समझना होगा । + +रुझान यह भी संकेत देते हैं कि हम २०२५ तक [180 zettabytes](https://www.statista.com/statistics/871513/worldwide-data-created/) डेटा का निर्माण और उपभोग करेंगे । **डेटा वैज्ञानिक** के रूप में, यह हमें व्यक्तिगत डेटा तक पहुंचने के लिये अभूतपूर्व स्तर प्रदान करता है । इसका मतलब है कि हम उपयोगकर्ताओं के व्यवहार संबंधी प्रोफाइल बना सकते हैं और निर्णय लेने को इस तरह से प्रभावित कर सकते हैं जो संभावित रूप से एक [मुक्त इच्छा का भ्रम](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) पैदा करता है जब्कि वह उपयोगकर्ताओं को हमारे द्वारा पसंद किए जाने वाले परिणामों की ओर आकर्षित करना । यह डेटा गोपनीयता और उपयोगकर्ता की सुरक्षा पर भी व्यापक प्रश्न उठाता है । + +डेटा नैतिकता अब डेटा विज्ञान और इंजीनियरिंग का _आवश्यक रक्षक_ हैं, जिससे हमें अपने डेटा-संचालित कार्यों से संभावित नुकसान और अनपेक्षित परिणामों को नीचे रखने में मदद मिलती है । [AI के लिए गार्टनर हाइप साइकिल](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) डिजिटल नैतिकता में उचित रुझानों की पहचान करता है AI के _democratization_ और _industrialization_ के आसपास बड़े मेगाट्रेंड के लिए प्रमुख ड्राइवर के रूप में जिम्मेदार AI की ज़िम्मेदारी और AI शासन । + + +![AI के लिए गार्टनर का प्रचार चक्र - २०२०](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==) + +इस पाठ में, हम डेटा नैतिकता के आकर्षक क्षेत्र के बारे में सीखेंगे - मूल अवधारणाओं और चुनौतियों से लेकर केस-स्टडी और शासन जैसी एप्लाइड AI अवधारणाओं तक - जो डेटा और AI के साथ काम करने वाली समूह और संगठनों में नैतिकता संस्कृति स्थापित करने में मदद करते हैं । + +## [पाठ से पहले की प्रश्नोत्तरी](https://red-water-0103e7a0f.azurestaticapps.net/quiz/2) 🎯 + +## मूल परिभाषाएं + +आइए बुनियादी शब्दावली को समझना शुरू करें । + +"नैतिकता" [ग्रीक शब्द "एथिकोस"](https://en.wikipedia.org/wiki/Ethics) (और इसकी जड़ "एथोस") से आया है जिसका अर्थ _चरित्र या नैतिक प्रकृति_ होता है । + +**नैतिकता** उन साझा मूल्यों और नैतिक सिद्धांतों के बारे में है जो समाज में हमारे व्यवहार को नियंत्रित करते हैं । नैतिकता कानूनों पर नहीं बल्कि "सही बनाम गलत" के व्यापक रूप से स्वीकृत मानदंड पर आधारित है । लेकिन , नैतिक विचार कॉर्पोरेट प्रशासन की पहल और अनुपालन के लिए अधिक प्रोत्साहन पैदा करने वाले सरकारी नियमों को प्रभावित कर सकते हैं । + +**डेटा नैतिकता** एक [नैतिकता की नई शाखा](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1) है जो "_डेटा, एल्गोरिदम और से संबंधित नैतिक समस्याओं का अध्ययन और मूल्यांकन करती है_" । यहां, **"डेटा"** - निर्माण, रिकॉर्डिंग, अवधि, प्रसंस्करण प्रसार, साझाकरण और उपयोग से संबंधित कार्यों पर केंद्रित है, **"एल्गोरिदम"** AI , एजेंटों, मशीन लर्निंग और रोबोटो पर केंद्रित है, और ** "अभ्यास"** जिम्मेदार नवाचार, प्रोग्रामिंग, हैकिंग और नैतिकता कोड जैसे विषयों पर केंद्रित है । + +**एप्लाइड नैतिकता** [नैतिक विचारों का व्यावहारिक अनुप्रयोग](https://en.wikipedia.org/wiki/Applied_ethics) है । यह _वास्तविक दुनिया की कार्रवाइयों, उत्पादों और प्रक्रियाओं_ के संदर्भ में नैतिक मुद्दों की सक्रिय रूप से जांच करने और सुधारात्मक उपाय करने की प्रक्रिया है ताकि ये हमारे परिभाषित नैतिक मूल्यों के साथ संरेखित रहें । + +**नैतिकता संस्कृति** यह सुनिश्चित करने के लिए [_operationalizing_ एप्लाइड नैतिकता](https://hbr.org/2019/05/how-to-design-an-ethical-organization) के बारे में है कि हमारे नैतिक सिद्धांतों और प्रथाओं को पूरे संगठन में एक सुसंगत और मापनीय तरीके से अपनाया जाए । सफल नैतिक संस्कृतियाँ संगठन-व्यापी नैतिक सिद्धांतों को परिभाषित करती हैं, अनुपालन के लिए सार्थक प्रोत्साहन प्रदान करती हैं, और संगठन के हर स्तर पर वांछित व्यवहारों को प्रोत्साहित और प्रवर्धित करके नैतिक मानदंडों को सुदृढ़ करती हैं । + + +## नैतिकता की अवधारणाएं + +इस खंड में, हम डेटा नैतिकता के लिए साझा मूल्यों (सिद्धांतों) और नैतिक चुनौतियों (समस्याओं) जैसी अवधारणाओं पर चर्चा करेंगे - और मामले के अध्ययन का पता लगाएंगे जो आपको वास्तविक दुनिया के संदर्भों में इन अवधारणाओं को समझने में मदद करते हैं । + +### 1. नैतिक सिद्धांत + +प्रत्येक डेटा नैतिकता रणनीति _नैतिक सिद्धांतों_ को परिभाषित करके शुरू होती है - "साझा मूल्य" जो स्वीकार्य व्यवहारों का वर्णन करते हैं, और हमारे डेटा और AI परियोजनाओं में अनुपालन कार्यों का मार्गदर्शन करते हैं । लेकिन, अधिकांश बड़े संगठन इन्हें एक _नैतिक AI_ मिशन स्टेटमेंट या फ्रेमवर्क में रेखांकित करते हैं जो कॉर्पोरेट स्तर पर परिभाषित होता है और सभी टीमों में लगातार लागू होता है । + +**उदाहरण:** माइक्रोसॉफ्ट की [Responsible AI](https://www.microsoft.com/en-us/ai/responsible-ai) मिशन स्टेटमेंट कहती है : _"हम नैतिक सिद्धांतों द्वारा संचालित AI की उन्नति के लिए प्रतिबद्ध हैं जो लोगों को सबसे पहले रखते हैं |"_ - नीचे दिए गए ढांचे में 6 नैतिक सिद्धांतों की वार्ना की गयी है : + +![माइक्रोसॉफ्ट की Responsible AI](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png) + +आइए संक्षेप में इन सिद्धांतों के बारे में सीखे | _पारदर्शिता_ और _जवाबदेही_ वह मूलभूत मूल्य हैं जिन पर अन्य सिद्धांतों का निर्माण किया गया है - तो चलिए वहां शुरु करते हैं : + +* [**जवाबदेही**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) उपयोगकर्ताओं को उनके डेटा और AI संचालन, और इन नैतिक सिद्धांतों के अनुपालन के लिए _जिम्मेदार_ बनाती है । +* [**पारदर्शिता**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) सुनिश्चित करती है कि डेटा और AI क्रियाएं उपयोगकर्ताओं के लिए _समझने योग्य_ (व्याख्या योग्य) हैं, यह बताते हुए कि निर्णयों के पीछे क्या और क्यों है । +* [**निष्पक्षता**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6) - यह सुनिश्चित करने पर ध्यान केंद्रित करती है कि AI डेटा और सिस्टम में किसी भी प्रणालीगत या निहित सामाजिक-तकनीकी पूर्वाग्रहों को संबोधित करते हुए _सभी लोगों_ के साथ उचित व्यवहार करता है । +* [**विश्वसनीयता और अहनिकारकता**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - सुनिश्चित करती है कि AI- संभावित नुकसान या अनपेक्षित परिणामों को कम करते हुए परिभाषित मूल्यों के साथ _लगातार_ काम करता है । +* [**निजता एवं सुरक्षा**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - डेटा वंश को समझने, और उपयोगकर्ताओं को _डेटा गोपनीयता और संबंधित सुरक्षा_ प्रदान करने के बारे में है । +* [**समग्रता**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - AI समाधानों को इरादे से डिजाइन करना एवं उन्हें _मानवीय आवश्यकताओं की एक विस्तृत श्रृंखला_ और क्षमताओं को पूरा करने के लिए अनुकूलित करने के बारे में है । + +> 🚨 अपने डेटा नैतिकता मिशन वक्तव्य के बारे में सोचें | अन्य संगठनों से नैतिक AI ढांचों का अन्वेषण करें - ये हैं कुछ उदाहरण [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles) ,एवं [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/) | इनके बीच क्या साझा मूल्य हैं? ये सिद्धांत उनके द्वारा संचालित AI उत्पाद या उद्योग से कैसे संबंधित हैं ? + +### 2. नैतिकता से जुडी चुनौतियां + +एक बार जब हमारे पास नैतिक सिद्धांत परिभाषित हो जाते हैं, तो अगला कदम यह देखने के लिए हमारे डेटा और एआई कार्यों का मूल्यांकन करना है कि क्या वे उन साझा मूल्यों के साथ संरेखित हैं । अपने कार्यों के बारे में दो श्रेणियों में सोचें: _डेटा संग्रह_ और _एल्गोरिदम डिज़ाइन_ | + +डेटा संग्रह के साथ, कार्रवाइयों में संभवतः पहचान योग्य जीवित व्यक्तियों के लिए **व्यक्तिगत डेटा** या व्यक्तिगत रूप से पहचान योग्य जानकारी शामिल होगी । इसमें [गैर-व्यक्तिगत डेटा के विविध आइटम](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) शामिल हैं, जो _collectively_ किसी व्यक्ति की पहचान करते हैं । नैतिक चुनौतियां _डेटा गोपनीयता_, _डेटा स्वामित्व_, और उपयोगकर्ताओं के लिए _सूचित सहमति_ और _बौद्धिक संपदा अधिकार_ जैसे संबंधित विषयों से संबंधित हो सकती हैं । + +एल्गोरिथम डिज़ाइन के साथ, क्रियाओं में **डेटासेट** एकत्र करना और क्यूरेट करना शामिल होगा, फिर उनका उपयोग **डेटा मॉडल** को प्रशिक्षित और तैनात करने के लिए किया जाएगा जो वास्तविक दुनिया के संदर्भों में परिणामों की भविष्यवाणी या स्वचालित निर्णय लेते हैं । एल्गोरिथम डिज़ाइन के साथ, क्रियाओं में **डेटासेट** एकत्र करना और क्यूरेट करना शामिल होगा, फिर उनका उपयोग **डेटा मॉडल** को प्रशिक्षित और तैनात करने के लिए किया जाएगा जो वास्तविक दुनिया के संदर्भों में परिणामों की भविष्यवाणी या स्वचालित निर्णय लेते हैं । + +दोनों ही मामलों में, नैतिकता की चुनौतियाँ उन क्षेत्रों को उजागर करती हैं जहाँ हमारे कार्यों का हमारे साझा मूल्यों के साथ टकराव हो सकता है । इन चिंताओं का पता लगाने, सामना करने, कम करने या समाप्त करने के लिए - हमें अपने कार्यों से संबंधित नैतिक "हां या नहीं" प्रश्न पूछने की जरूरत है, फिर आवश्यकतानुसार सुधारात्मक कार्रवाई करें । आइए कुछ नैतिक चुनौतियों और उनके द्वारा उठाए गए नैतिक प्रश्नों पर एक नज़र डालें : + + +#### 2.1 डेटा स्वामित्व + +डेटा संग्रह में अक्सर व्यक्तिगत डेटा शामिल होता है जो डेटा विषयों की पहचान कर सकता है । [डेटा स्वामित्व](https://permission.io/blog/data-ownership) _नियंत्रण_ के बारे में और उन [_उपयोगकर्ता अधिकारो_](https://permission.io/blog/data-ownership)के सम्भंदित है जो निर्माण , प्रसंस्करण और से संबंधित है । + +हमें जो नैतिक प्रश्न पूछने चाहिए, वे हैं : + * डेटा का मालिक कौन है ? (उपयोगकर्ता या संगठन) + * डेटा विषयों के पास क्या अधिकार हैं ? (उदा: पहुंच, मिटाना, सुवाह्यता) + * संगठनों के पास क्या अधिकार हैं ? (उदा: दुर्भावनापूर्ण उपयोगकर्ता समीक्षाओं का सुधार) + +#### 2.2 सूचित सहमति + +[सूचित सहमति](https://legaldictionary.net/informed-consent/) उद्देश्य, संभावित जोखिमों और विकल्पों सहित प्रासंगिक तथ्यों की _पूर्ण समझ_ के साथ कार्रवाई (जैसे डेटा संग्रह) के लिए सहमत होने वाले उपयोगकर्ताओं के कार्य को परिभाषित करता है । + +यहां देखने लायक प्रश्न हैं : + * क्या उपयोगकर्ता (डेटा विषय) ने डेटा कैप्चर और उपयोग के लिए अनुमति दी थी ? + * क्या उपयोगकर्ता को वह उद्देश्य समझ में आया जिसके लिए उस डेटा को कैप्चर किया गया था ? + * क्या उपयोगकर्ता ने उनकी भागीदारी से संभावित जोखिमों को समझा ? + +#### 2.3 बौद्धिक संपदा + +[बौद्धिक संपदा](https://en.wikipedia.org/wiki/Intellectual_property) मानव पहल से उत्पन्न अमूर्त कृतियों को संदर्भित करता है, जिनका व्यक्तियों या व्यवसायों के लिए _आर्थिक_ महत्व हो सकता है । + +यहां देखने लायक प्रश्न हैं : + * क्या जमा किए गए डेटा का किसी उपयोगकर्ता या व्यवसाय के लिए आर्थिक महत्व है ? + * क्या **उपयोगकर्ता** के पास यहां बौद्धिक संपदा है ? + * क्या **संगठन** के पास यहां बौद्धिक संपदा है ? + * अगर ये अधिकार मौजूद हैं, तो हम उनकी रक्षा कैसे कर रहे हैं ? + +#### 2.4 डाटा गोपनीयता + +[डेटा गोपनीयता](https://www.northeaster.edu/graduate/blog/what-is-data-privacy/) या सूचना गोपनीयता व्यक्तिगत रूप से पहचान योग्य जानकारी के संबंध में उपयोगकर्ता की गोपनीयता के संरक्षण और उपयोगकर्ता की पहचान की सुरक्षा को संदर्भित करता है । + +यहां देखने लायक प्रश्न हैं : + * क्या उपयोगकर्ताओं का (व्यक्तिगत) डेटा हैक और लीक से सुरक्षित है ? + * क्या उपयोगकर्ताओं का डेटा केवल अधिकृत उपयोगकर्ताओं और संदर्भों के लिए सुलभ है ? + * क्या डेटा साझा या प्रसारित होने पर उपयोगकर्ताओं की गोपनीयता बनी रहती है ? + * क्या किसी उपयोगकर्ता की पहचान अज्ञात डेटासेट से की जा सकती है ? + + +#### 2.5 भूला दिया जाने का अधिकार + +[भूला दिया जाने का अधिकार](https://en.wikipedia.org/wiki/Right_to_be_forgotten) अतिरिक्त सुविधाएं प्रदान करता है उपयोगकर्ताओं के लिए व्यक्तिगत डेटा सुरक्षा। विशेष रूप से, यह उपयोगकर्ताओं को इंटरनेट खोजों और अन्य स्थानों से व्यक्तिगत डेटा को हटाने या हटाने का अनुरोध करने का अधिकार देता है, _विशिष्ट परिस्थितियों में_ - उन्हें उनके खिलाफ पिछली कार्रवाई किए बिना ऑनलाइन एक नई शुरुआत करने की अनुमति देता है । + +यहां देखने लायक प्रश्न हैं : + * क्या सिस्टम डेटा विषयों को अपना डेटा मिटाने का अनुरोध करने की अनुमति देता है ? + * क्या उपयोगकर्ता की सहमति वापस लेने से स्वचालित डेटा मिटाना शुरू हो जाएगा ? + * क्या डेटा सहमति के बिना या गैरकानूनी तरीके से एकत्र किया गया था ? + * क्या हम डेटा गोपनीयता के लिए सरकारी नियमों का अनुपालन करते हैं ? + + +#### 2.6 डेटासेट पूर्वाग्रह + +डेटासेट या [संग्रह पूर्वाग्रह](http://researcharticles.com/index.php/bias-in-data-collection-in-research/) एल्गोरिथम विकास के लिए डेटा के _गैर-प्रतिनिधि_ सबसेट का चयन करने के बारे में है, जिसमें संभावित अनुचितता पैदा होती है विभिन्न समूहों के लिए भेदभाव । पूर्वाग्रह के प्रकारों में चयन या नमूना पूर्वाग्रह, स्वयंसेवी पूर्वाग्रह और साधन पूर्वाग्रह शामिल हैं । + +यहां देखने लायक प्रश्न हैं : + * क्या हमने डेटा विषयों के प्रतिनिधि सेट की भर्ती की ? + * क्या हमने विभिन्न पूर्वाग्रहों के लिए अपने एकत्रित या क्यूरेट किए गए डेटासेट का परीक्षण किय ा? + * क्या हम खोजे गए पूर्वाग्रहों को कम कर सकते हैं या हटा सकते हैं ? + +#### 2.7 डेटा की गुणवत्ता + +[डेटा गुणवत्ता](https://lakefs.io/data-quality-testing/) जो हमारे एल्गोरिदम को विकसित करने के लिए उपयोग किए गए क्यूरेट किए गए डेटासेट की वैधता को देखता है, यह देखने के लिए जाँच करता है कि सुविधाएँ और रिकॉर्ड सटीकता और स्थिरता के स्तर की आवश्यकताओं को पूरा करते हैं या नहीं हमारे AI उद्देश्य के लिए आवश्यक है । + +यहां देखने लायक प्रश्न हैं : + * क्या हमने अपने उपयोग के मामले में मान्य _features_ को कैप्चर किया ? + * क्या डेटा विविध डेटा स्रोतों से _लगातार_ कैप्चर किया गया था ? + * क्या विविध स्थितियों या परिदृश्यों के लिए डेटासेट _पूर्ण_ है ? + * क्या वास्तविकता को प्रतिबिंबित करने में जानकारी _सटीक_ रूप से कैप्चर की गई है ? + +#### 2.8 एल्गोरिथम की निष्पक्षता + +[एल्गोरिदम निष्पक्षता](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f) यह देखने के लिए जांच करता है कि क्या एल्गोरिथम डिज़ाइन व्यवस्थित रूप से डेटा विषयों के विशिष्ट उपसमूहों के साथ भेदभाव करता है जिससे [संभावित नुकसान](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml) होते हैं में _allocation_ (जहां संसाधनों को अस्वीकार कर दिया जाता है या उस समूह से रोक दिया जाता है) और _सेवा की गुणवत्ता_ (जहां AI कुछ उपसमूहों के लिए उतना सटीक नहीं है जितना कि यह दूसरों के लिए है) । + +यहां देखने लायक प्रश्न हैं : + * क्या हमने विविध उपसमूहों और स्थितियों के लिए मॉडल सटीकता का मूल्यांकन किया ? + * क्या हमने संभावित नुकसान (जैसे, स्टीरियोटाइपिंग) के लिए सिस्टम की जांच की ? + * क्या हम पहचाने गए नुकसान को कम करने के लिए डेटा को संशोधित कर सकते हैं या मॉडल को फिर से प्रशिक्षित कर सकते हैं ? + +अधिक जानने के लिए [AI फेयरनेस चेकलिस्ट](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA) जैसे संसाधनों का अन्वेषण करें । + +#### 2.9 मिथ्या निरूपण + +[डेटा मिसरिप्रेजेंटेशन](https://www.sciencedirect.com/topics/computer-science/misrepresentation) यह पूछने के बारे में है कि क्या हम एक वांछित कथा का समर्थन करने के लिए भ्रामक तरीके से ईमानदारी से रिपोर्ट किए गए डेटा से अंतर्दृष्टि का संचार कर रहे हैं । + +यहां देखने लायक प्रश्न हैं : + * क्या हम अपूर्ण या गलत डेटा की रिपोर्ट कर रहे हैं ? + * क्या हम डेटा को इस तरह से देख रहे हैं जिससे भ्रामक निष्कर्ष निकलते हैं ? + * क्या हम परिणामों में हेरफेर करने के लिए चुनिंदा सांख्यिकीय तकनीकों का उपयोग कर रहे हैं ? + * क्या ऐसे वैकल्पिक स्पष्टीकरण हैं जो एक अलग निष्कर्ष प्रस्तुत कर सकते हैं ? + +#### 2.10 मुक्त चयन +[इल्यूज़न ऑफ़ फ्री चॉइस](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) तब होता है जब सिस्टम "चॉइस आर्किटेक्चर" लोगों को पसंदीदा परिणाम लेने के लिए प्रेरित करने के लिए निर्णय लेने वाले एल्गोरिदम का उपयोग करता है। जबकि उन्हें विकल्प और नियंत्रण देना प्रतीत होता है। ये [डार्क पैटर्न](https://www.darkpatterns.org/) उपयोगकर्ताओं को सामाजिक और आर्थिक नुकसान पहुंचा सकते हैं। चूंकि उपयोगकर्ता निर्णय व्यवहार प्रोफाइल को प्रभावित करते हैं, इसलिए ये कार्रवाइयां संभावित रूप से भविष्य के विकल्पों को प्रेरित करती हैं जो इन नुकसानों के प्रभाव को बढ़ा या बढ़ा सकते हैं। + +यहां देखने लायक प्रश्न हैं : + * क्या उपयोगकर्ता ने उस विकल्प को बनाने के निहितार्थों को समझा ? + * क्या उपयोगकर्ता (वैकल्पिक) विकल्पों और प्रत्येक के पेशेवरों और विपक्षों से अवगत था ? + * क्या उपयोगकर्ता किसी स्वचालित या प्रभावित विकल्प को बाद में उलट सकता है ? + +### 3. केस स्टडी + +इन नैतिक चुनौतियों को वास्तविक दुनिया के संदर्भों में रखने के लिए, ऐसे मामलों के अध्ययन को देखने में मदद मिलती है जो व्यक्तियों और समाज को संभावित नुकसान और परिणामों को उजागर करते हैं, जब ऐसे नैतिकता उल्लंघनों की अनदेखी की जाती है । + +कुछ उदाहरण निम्नलिखित हैं : + +| नैतिकता चुनौती | मामले का अध्ययन | +|--- |--- | +| **सूचित सहमति** | १९७२ - [टस्केगी सिफलिस अध्ययन](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - अध्ययन में भाग लेने वाले अफ्रीकी अमेरिकी पुरुषों को उन शोधकर्ताओं द्वारा मुफ्त चिकित्सा देखभाल का वादा किया गया था जो उनके निदान या उपचार की उपलब्धता के बारे में विषयों को सूचित करने में विफल रहे। कई विषयों की मृत्यु हो गई और साथी या बच्चे प्रभावित हुए; अध्ययन 40 साल तक चला । | +| **डाटा प्राइवेसी** | २००७ - [नेटफ्लिक्स डेटा प्राइज](https://www.wired.com/2007/12/why-anonymous-data-only-isnt/) ने शोधकर्ताओं को सिफारिश एल्गोरिदम को बेहतर बनाने में मदद करने के लिए 50K ग्राहकों_ से _10M अनाम मूवी रैंकिंग प्रदान की। हालांकि, शोधकर्ता अज्ञात डेटा को व्यक्तिगत रूप से पहचाने जाने योग्य डेटा के साथ _बाहरी डेटासेट_ (उदाहरण के लिए, IMDb टिप्पणियों) में सहसंबंधित करने में सक्षम थे - कुछ नेटफ्लिक्स ग्राहकों को प्रभावी रूप से "डी-अनामीकरण" ।| +| **संग्रह पूर्वाग्रह** | २०१३ - द सिटी ऑफ़ बोस्टन [विकसित स्ट्रीट बम्प](https://www.boston.gov/transportation/street-bump), एक ऐप जो नागरिकों को गड्ढों की रिपोर्ट करने देता है, जिससे शहर को समस्याओं को खोजने और ठीक करने के लिए बेहतर रोडवे डेटा मिलता है । हालांकि, [निम्न आय वर्ग के लोगों के पास कारों और फोन तक कम पहुंच थी](https://hbr.org/2013/04/the-hidden-biases-in-big-data), जिससे इस ऐप में उनके सड़क संबंधी मुद्दे अदृश्य हो गए थे। . डेवलपर्स ने शिक्षाविदों के साथ निष्पक्षता के लिए _न्यायसंगत पहुंच और डिजिटल विभाजन_ मुद्दों पर काम किया । | +| **एल्गोरिथम निष्पक्षता** | २०१८ - एमआईटी [जेंडर शेड्स स्टडी] (http://gendershades.org/overview.html) ने लिंग वर्गीकरण एआई उत्पादों की सटीकता का मूल्यांकन किया, महिलाओं और रंग के व्यक्तियों के लिए सटीकता में अंतराल को उजागर किया । एक [2019 ऐप्पल कार्ड](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) पुरुषों की तुलना में महिलाओं को कम क्रेडिट प्रदान करता है। दोनों ने एल्गोरिथम पूर्वाग्रह में सचित्र मुद्दों को सामाजिक-आर्थिक नुकसान की ओर अग्रसर किया ।| +| **डेटा गलत बयानी** | २०२० - [जॉर्जिया डिपार्टमेंट ऑफ पब्लिक हेल्थ ने जारी किया COVID-19 चार्ट](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) जो एक्स-अक्ष पर गैर-कालानुक्रमिक क्रम के साथ पुष्टि किए गए मामलों में रुझानों के बारे में नागरिकों को गुमराह करने के लिए प्रकट हुए। यह विज़ुअलाइज़ेशन ट्रिक्स के माध्यम से गलत बयानी दिखाता है । | +| **स्वतंत्र चुनाव का भ्रम** | २०२० - लर्निंग ऐप [एबीसीमाउस ने एफटीसी शिकायत को निपटाने के लिए 10 मिलियन डॉलर का भुगतान किया](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) जहां माता-पिता भुगतान करने में फंस गए थे सदस्यता वे रद्द नहीं कर सके । यह पसंद वास्तुकला में काले पैटर्न को दिखाता है, जहां उपयोगकर्ता संभावित रूप से हानिकारक विकल्पों की ओर झुकाव कर रहे थे । | +| **डेटा गोपनीयता और उपयोगकर्ता अधिकार** | २०२१ - फेसबुक [डेटा ब्रीच](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) 530M उपयोगकर्ताओं के डेटा को उजागर किया, जिसके परिणामस्वरूप FTC को $ 5B का समझौता हुआ । हालांकि इसने डेटा पारदर्शिता और पहुंच के आसपास उपयोगकर्ता अधिकारों का उल्लंघन करने वाले उल्लंघन के उपयोगकर्ताओं को सूचित करने से इनकार कर दिया । | + +अधिक केस स्टडी के बारे में चाहते हैं ? इन संसाधनों की जाँच करें : +* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - विविध उद्योगों में नैतिकता की दुविधा । +* [Data Science Ethics course](https://www.coursera.org/learn/data-science-ethics#syllabus) - ऐतिहासिक मामले का अध्ययन । +* [Where things have gone wrong](https://deon.drivendata.org/examples/) - उदाहरण के साथ डीओन चेकलिस्ट | + +> 🚨 आपके द्वारा देखी गई केस स्टडी के बारे में सोचें - क्या आपने अपने जीवन में इसी तरह की नैतिक चुनौती का अनुभव किया है, या इससे प्रभावित हुए हैं ? क्या आप कम से कम एक अन्य केस स्टडी के बारे में सोच सकते हैं जो इस खंड में चर्चा की गई नैतिक चुनौतियों में से एक को दर्शाती है ? + +## एप्लाइड नैतिकता + +हमने वास्तविक दुनिया के संदर्भों में नैतिक अवधारणाओं, चुनौतियों और केस स्टडी के बारे में बात की है। लेकिन हम अपनी परियोजनाओं में नैतिक सिद्धांतों और प्रथाओं को _लागू करना_ कैसे शुरू करते हैं ? और हम बेहतर शासन के लिए इन प्रथाओं को कैसे _संचालन_कृत करते हैं ? आइए कुछ वास्तविक दुनिया के समाधान देखें : + +### 1. व्यावसायिक कोड + +व्यावसायिक कोड संगठनों के लिए सदस्यों को उनके नैतिक सिद्धांतों और मिशन वक्तव्य का समर्थन करने के लिए "प्रोत्साहित" करने के लिए एक विकल्प प्रदान करते हैं । पेशेवर व्यवहार के लिए कोड _नैतिक दिशानिर्देश_ हैं, जो कर्मचारियों या सदस्यों को उनके संगठन के सिद्धांतों के अनुरूप निर्णय लेने में मदद करते हैं । वे केवल उतने ही अच्छे हैं जितने सदस्यों से स्वैच्छिक अनुपालन; हालांकि, कई संगठन सदस्यों से अनुपालन को प्रेरित करने के लिए अतिरिक्त पुरस्कार और दंड प्रदान करते हैं । + +उदाहरणों में शामिल : + + * [ऑक्सफोर्ड म्यूनिख](http://www.code-of-ethics.org/code-of-conduct/) आचार संहिता + * [डेटा साइंस एसोसिएशन](http://datascienceassn.org/code-of-conduct.html) आचार संहिता (2013 में बनाया गया) + * [एसीएम आचार संहिता और व्यावसायिक आचरण](https://www.acm.org/code-of-ethics) (1993 से) + +> 🚨 क्या आप एक पेशेवर इंजीनियरिंग या डेटा विज्ञान संगठन से संबंधित हैं ? यह देखने के लिए कि क्या वे पेशेवर आचार संहिता को परिभाषित करते हैं, उनकी साइट का अन्वेषण करें । यह उनके नैतिक सिद्धांतों के बारे में क्या कहता है ? वे सदस्यों को कोड का पालन करने के लिए "प्रोत्साहित" कैसे कर रहे हैं ? + +### 2. Ethics Checklists + +जबकि पेशेवर कोड चिकित्सकों से आवश्यक _नैतिक व्यवहार_ को परिभाषित करते हैं, वे प्रवर्तन में [विशेष रूप से बड़े पैमाने पर परियोजनाओं में](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) [ज्ञात सीमाएं हैं] । इसके बजाय, कई डेटा विज्ञान विशेषज्ञ [चेकलिस्ट के वकील](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), जो **सिद्धांतों को अभ्यासों से जोड़ सकते हैं** अधिक नियतात्मक और कार्रवाई योग्य तरीके । + +चेकलिस्ट प्रश्नों को "हां/नहीं" कार्यों में परिवर्तित करते हैं जिन्हें संचालित किया जा सकता है, जिससे उन्हें मानक उत्पाद रिलीज वर्कफ़्लो के हिस्से के रूप में ट्रैक किया जा सकता है । + +उदाहरणों में शामिल : + * [Deon](https://deon.drivendata.org/) - आसान एकीकरण के लिए कमांड-लाइन टूल के साथ [उद्योग अनुशंसाओं](https://deon.drivedata.org/#checklist-citations) से बनाई गई एक सामान्य-उद्देश्य डेटा नैतिकता चेकलिस्ट । + * [Privacy Audit Checklist](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - कानूनी और सामाजिक जोखिम के दृष्टिकोण से सूचना प्रबंधन प्रथाओं के लिए सामान्य मार्गदर्शन प्रदान करता है । + * [AI Fairness Checklist](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - एआई विकास चक्रों में निष्पक्षता जांच को अपनाने और एकीकरण का समर्थन करने के लिए एआई चिकित्सकों द्वारा बनाया गया । + * [22 questions for ethics in data and AI](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - डिजाइन, कार्यान्वयन, और संगठनात्मक, संदर्भों में नैतिक मुद्दों की प्रारंभिक खोज के लिए संरचित, अधिक खुला ढांचा । + +### 3. नैतिकता विनियम + +नैतिकता साझा मूल्यों को परिभाषित करने और _स्वेच्छा_ से सही काम करने के बारे में है । **अनुपालन** _कानून का पालन करने के बारे में है_ यदि और जहां परिभाषित किया गया है । **शासन** मोटे तौर पर उन सभी तरीकों को शामिल करता है जिनमें संगठन नैतिक सिद्धांतों को लागू करने और स्थापित कानूनों का पालन करने के लिए काम करते हैं । + +आज, संगठनों के भीतर शासन दो रूप लेता है । सबसे पहले, यह **नैतिक एआई** सिद्धांतों को परिभाषित करने और संगठन में सभी एआई-संबंधित परियोजनाओं में गोद लेने के संचालन के लिए प्रथाओं को स्थापित करने के बारे में है । दूसरा, यह उन क्षेत्रों के लिए सरकार द्वारा अनिवार्य सभी **डेटा सुरक्षा नियमों** का अनुपालन करने के बारे में है जहां यह संचालित होता है । + +डेटा सुरक्षा और गोपनीयता नियमों के उदाहरण : + + * `१९७४`, [US Privacy Act](https://www.justice.gov/opcl/privacy-act-1974) - व्यक्तिगत जानकारी के संग्रह, उपयोग और प्रकटीकरण को नियंत्रित करता है । + * `१९९६`, [US Health Insurance Portability & Accountability Act (HIPAA)](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - व्यक्तिगत स्वास्थ्य डेटा की सुरक्षा करता है । + * `१९९८`, [US Children's Online Privacy Protection Act (COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - 13 साल से कम उम्र के बच्चों की डेटा गोपनीयता की रक्षा करता है । + * `२०१८`, [General Data Protection Regulation (GDPR)](https://gdpr-info.eu/) - उपयोगकर्ता अधिकार, डेटा सुरक्षा और गोपनीयता प्रदान करता है । + * `२०१८`, [California Consumer Privacy Act (CCPA)](https://www.oag.ca.gov/privacy/ccpa) उपभोक्ताओं को उनके (व्यक्तिगत) डेटा पर अधिक _अधिकार_ देता है । + * `२०२१`, चीन का [Personal Information Protection Law](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/) अभी-अभी पारित हुआ, दुनिया भर में सबसे मजबूत ऑनलाइन डेटा गोपनीयता नियमों में से एक बना । + +> 🚨 यूरोपीय संघ परिभाषित GDPR (जनरल डेटा प्रोटेक्शन रेगुलेशन) आज सबसे प्रभावशाली डेटा गोपनीयता नियमों में से एक है । क्या आप जानते हैं कि यह नागरिकों की डिजिटल गोपनीयता और व्यक्तिगत डेटा की सुरक्षा के लिए [8 उपयोगकर्ता अधिकार](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr) को भी परिभाषित करता है ? जानें कि ये क्या हैं, और क्यों मायने रखते हैं । + + +### 4. नैतिकता संस्कृति + +ध्यान दें कि _अनुपालन_ ("कानून के पत्र को पूरा करने के लिए पर्याप्त प्रयास करना") और [प्रणालीगत मुद्दों](https://www.coursera.org/learn/data-science-ethics/home/week) को संबोधित करने के बीच एक अमूर्त अंतर है । / 4) (जैसे ossification, सूचना विषमता, और वितरण संबंधी अनुचितता) जो AI के शस्त्रीकरण को गति दे सकता है । + +बाद वाले को [नैतिक संस्कृतियों को परिभाषित करने के लिए सहयोगात्मक दृष्टिकोण](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-drive-approach-26f451afa29f) की आवश्यकता होती है, जो पूरे संगठनों में भावनात्मक संबंध और सुसंगत साझा मूल्यों का निर्माण करते हैं । यह संगठनों में अधिक [औपचारिक डेटा नैतिकता संस्कृतियों](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/) की मांग करता है - _किसी_ को [एंडोन कॉर्ड को खींचने] की अनुमति देता है (https:/ /en.wikipedia.org/wiki/Andon_(manufacturing)) (इस प्रक्रिया में नैतिकता संबंधी चिंताओं को जल्दी उठाने के लिए) और एआई परियोजनाओं में _नैतिक मूल्यांकन_ (उदाहरण के लिए, भर्ती में) एक मुख्य मानदंड टीम गठन करना । + +--- +## [व्याख्यान के बाद प्रश्नोत्तरी](https://red-water-0103e7a0f.azurestaticapps.net/quiz/3) 🎯 +## समीक्षा और स्व अध्ययन + +पाठ्यक्रम और पुस्तकें मूल नैतिकता अवधारणाओं और चुनौतियों को समझने में मदद करती हैं, जबकि केस स्टडी और उपकरण वास्तविक दुनिया के संदर्भों में लागू नैतिकता प्रथाओं के साथ मदद करते हैं। शुरू करने के लिए यहां कुछ संसाधन दिए गए हैं। + +* [Machine Learning For Beginners](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - Microsoft से निष्पक्षता पर पाठ । +* [Principles of Responsible AI](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - माइक्रोसॉफ्ट लर्न की ओर से फ्री लर्निंग पाथ । +* [Ethics and Data Science](https://resources.oreilly.com/examples/0636920203964) - O'Reilly EBook (M. Loukides, H. Mason et. al) +* [Data Science Ethics](https://www.coursera.org/learn/data-science-ethics#syllabus) - मिशिगन विश्वविद्यालय से ऑनलाइन पाठ्यक्रम । +* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - टेक्सास विश्वविद्यालय से केस स्टडीज । + +# कार्यभार + +[डेटा एथिक्स केस स्टडी लिखें](assignment.md) From b3a86d9ffaeb14189336b3593d45c6252dc2f257 Mon Sep 17 00:00:00 2001 From: Heril Changwal <76246330+Heril18@users.noreply.github.com> Date: Tue, 12 Oct 2021 10:01:07 +0530 Subject: [PATCH 70/74] Update README.hi.md All Links Fixed. The link : [Microsoft Word - Persuasive Instructions.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf) is not working even in the original Readme file. So please have a look to this Link. --- .../16-communication/translations/README.hi.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md index 85ae92d4..681d2923 100644 --- a/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md +++ b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md @@ -169,10 +169,9 @@ ## [व्याख्यान के बाद प्रश्नोत्तरी](https://red-water-0103e7a0f.azurestaticapps.net/quiz/31) ### स्व अध्ययन के लिए अनुशंसित संसाधन -[द फाइव सी ऑफ़ स्टोरीटेलिंग - आर्टिक्यूलेट पर्सुएशन](http://articlepersuasion.com/the-five-cs-of-storytelling/) - -[१.४ एक संचारक के रूप में आपकी जिम्मेदारियां - सफलता के लिए व्यावसायिक संचार (umn.edu)](https://open.lib.umn.edu/businesscommunication/chapter/1-4-your-responsibility-as-a-communicator/) +[द फाइव सी ऑफ़ स्टोरीटेलिंग - आर्टिक्यूलेट पर्सुएशन](http://articulatepersuasion.com/the-five-cs-of-storytelling/) +[१.४ एक संचारक के रूप में आपकी जिम्मेदारियां - सफलता के लिए व्यावसायिक संचार (umn.edu)](https://open.lib.umn.edu/businesscommunication/chapter/1-4-your-responsibilities-as-a-communicator/) [डेटा के साथ कहानी कैसे सुनाएं (hbr.org)](https://hbr.org/2013/04/how-to-tell-a-story-with-data) [टू-वे कम्युनिकेशन: अधिक व्यस्त कार्यस्थल के लिए 4 टिप्स (yourthoughtpartner.com)](https://www.yourthoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through-two-way-communication) @@ -181,7 +180,7 @@ [डेटा के साथ कहानी कैसे सुनाएं | ल्यूसिडचार्ट ब्लॉग](https://www.lucidchart.com/blog/how-to-tell-a-story-with-data) -[6 Cs ऑफ़ इफेक्टिव स्टोरीटेलिंग ऑन सोशल मीडिया | कूलर इनसाइट्स](https://coolerinsights.com/2018/06/efffect-storytelling-social-media/) +[6 Cs ऑफ़ इफेक्टिव स्टोरीटेलिंग ऑन सोशल मीडिया | कूलर इनसाइट्स](https://coolerinsights.com/2018/06/effective-storytelling-social-media/) [प्रस्तुतिकरण में भावनाओं का महत्व | Ethos3 - एक प्रस्तुति प्रशिक्षण और डिजाइन एजेंसी](https://ethos3.com/2015/02/the-importance-of-emotions-in-presentations/) @@ -193,7 +192,7 @@ [डेटा कैसे प्रस्तुत करें [१० विशेषज्ञ युक्तियाँ] | ऑब्जर्वप्वाइंट](https://resources.observepoint.com/blog/10-tips-for-presenting-data) -[माइक्रोसॉफ्ट वर्ड - प्रेरक निर्देश.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf) +[Microsoft Word - Persuasive Instructions.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf) [द पावर ऑफ स्टोरी फॉर योर डेटा (थिंकहडी.कॉम)](https://www.thinkhdi.com/library/supportworld/2019/power-story-your-data.aspx) @@ -209,4 +208,4 @@ ## कार्यभार -[एक कहानी बताओ](assignment.md) +[एक कहानी बताओ](../assignment.md) From 36a21b89a39a82e4a4aa2bff2c95e7802ed0d3e7 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Tue, 12 Oct 2021 06:58:20 -0700 Subject: [PATCH 71/74] added --- .../{R => 07-python/R(Bonus Lesson)}/Notebook.ipynb | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 2-Working-With-Data/{R => 07-python/R(Bonus Lesson)}/Notebook.ipynb (100%) diff --git a/2-Working-With-Data/R/Notebook.ipynb b/2-Working-With-Data/07-python/R(Bonus Lesson)/Notebook.ipynb similarity index 100% rename from 2-Working-With-Data/R/Notebook.ipynb rename to 2-Working-With-Data/07-python/R(Bonus Lesson)/Notebook.ipynb From 2125afcd3054502a0deb71eb75cbe7837293ae56 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 12 Oct 2021 20:48:09 -0500 Subject: [PATCH 72/74] fix:(translation) Fix broken links on main page module 1 --- 1-Introduction/translations/README.es.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/1-Introduction/translations/README.es.md b/1-Introduction/translations/README.es.md index 75d3b4cc..592da390 100644 --- a/1-Introduction/translations/README.es.md +++ b/1-Introduction/translations/README.es.md @@ -9,10 +9,10 @@ cómo se definen los datos y un poco de probabilidad y estadística, el núcleo ### Temas -1. [Definiendo la Ciencia de Datos](01-defining-data-science/README.md) -2. [Ética de la Ciencia de Datos](02-ethics/README.md) -3. [Definición de Datos](03-defining-data/README.md) -4. [introducción a la probabilidad y estadística](04-stats-and-probability/README.md) +1. [Definiendo la Ciencia de Datos](../01-defining-data-science/README.md) +2. [Ética de la Ciencia de Datos](../02-ethics/README.md) +3. [Definición de Datos](../03-defining-data/translations/README.es.md) +4. [introducción a la probabilidad y estadística](../04-stats-and-probability/README.md) ### Créditos From b3aabac0fe1a461e012c5be6b3bc1056cdea3891 Mon Sep 17 00:00:00 2001 From: Keshav Sharma Date: Wed, 13 Oct 2021 04:58:59 -0700 Subject: [PATCH 73/74] Add Pandas in R --- .../07-python/R(Bonus Lesson)/Notebook.ipynb | 2249 ----------------- .../07-python/R/notebook.ipynb | 2131 ++++++++++++++++ 2 files changed, 2131 insertions(+), 2249 deletions(-) delete mode 100644 2-Working-With-Data/07-python/R(Bonus Lesson)/Notebook.ipynb create mode 100644 2-Working-With-Data/07-python/R/notebook.ipynb diff --git a/2-Working-With-Data/07-python/R(Bonus Lesson)/Notebook.ipynb b/2-Working-With-Data/07-python/R(Bonus Lesson)/Notebook.ipynb deleted file mode 100644 index eec49104..00000000 --- a/2-Working-With-Data/07-python/R(Bonus Lesson)/Notebook.ipynb +++ /dev/null @@ -1,2249 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "304296e3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "Attaching package: 'dplyr'\n", - "\n", - "\n", - "The following objects are masked from 'package:stats':\n", - "\n", - " filter, lag\n", - "\n", - "\n", - "The following objects are masked from 'package:base':\n", - "\n", - " intersect, setdiff, setequal, union\n", - "\n", - "\n", - "-- \u001b[1mAttaching packages\u001b[22m ------------------------------------------------------------------------------- tidyverse 1.3.1 --\n", - "\n", - "\u001b[32mv\u001b[39m \u001b[34mggplot2\u001b[39m 3.3.5 \u001b[32mv\u001b[39m \u001b[34mpurrr \u001b[39m 0.3.4\n", - "\u001b[32mv\u001b[39m \u001b[34mtibble \u001b[39m 3.1.5 \u001b[32mv\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n", - "\u001b[32mv\u001b[39m \u001b[34mtidyr \u001b[39m 1.1.4 \u001b[32mv\u001b[39m \u001b[34mforcats\u001b[39m 0.5.1\n", - "\u001b[32mv\u001b[39m \u001b[34mreadr \u001b[39m 2.0.2 \n", - "\n", - "-- \u001b[1mConflicts\u001b[22m ---------------------------------------------------------------------------------- tidyverse_conflicts() --\n", - "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", - "\u001b[31mx\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", - "\n", - "\n", - "Attaching package: 'lubridate'\n", - "\n", - "\n", - "The following objects are masked from 'package:base':\n", - "\n", - " date, intersect, setdiff, union\n", - "\n", - "\n", - "\n", - "Attaching package: 'zoo'\n", - "\n", - "\n", - "The following objects are masked from 'package:base':\n", - "\n", - " as.Date, as.Date.numeric\n", - "\n", - "\n", - "\n", - "Attaching package: 'xts'\n", - "\n", - "\n", - "The following objects are masked from 'package:dplyr':\n", - "\n", - " first, last\n", - "\n", - "\n" - ] - } - ], - "source": [ - "library(dplyr)\n", - "library(tidyverse)\n", - "library('lubridate')\n", - "library('zoo')\n", - "library('xts')" - ] - }, - { - "cell_type": "markdown", - "id": "d786e051", - "metadata": {}, - "source": [ - "## Series" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f659f553", - "metadata": {}, - "outputs": [], - "source": [ - "a<- 1:9" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9acc193d", - "metadata": {}, - "outputs": [], - "source": [ - "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f577ec14", - "metadata": {}, - "outputs": [], - "source": [ - "a1 = length(a)\n", - "b1 = length(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "31e069a0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " a\n", - "1 1\n", - "2 2\n", - "3 3\n", - "4 4\n", - "5 5\n", - "6 6\n", - "7 7\n", - "8 8\n", - "9 9\n" - ] - } - ], - "source": [ - "a = data.frame(a,row.names = c(1:a1))\n", - "print(a)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "29ce166e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " b\n", - "1 I\n", - "2 like\n", - "3 to\n", - "4 use\n", - "5 Python\n", - "6 and\n", - "7 Pandas\n", - "8 very\n", - "9 much\n" - ] - } - ], - "source": [ - "b = data.frame(b,row.names = c(1:b1))\n", - "print(b)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "eeb683c7", - "metadata": {}, - "outputs": [], - "source": [ - "library('ggplot2')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "e7788ca1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1] \"length of index is 366\"\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 360, - "width": 720 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "start_date <- mdy(\"Jan 1, 2020\")\n", - "end_date <- mdy(\"Dec 31, 2020\")\n", - "idx = seq(start_date,end_date,by ='day')\n", - "print(paste(\"length of index is \",length(idx)))\n", - "size = length(idx)\n", - "sales = runif(366,min=25,max=50)\n", - "sold_items <- data.frame(row.names=idx[0:size],sales)\n", - "ggplot(sold_items,aes(x=idx,y=sales)) + geom_point(color = \"firebrick\", shape = \"diamond\", size = 2) +\n", - " geom_line(color = \"firebrick\", size = .3)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "30747f7c", - "metadata": {}, - "outputs": [], - "source": [ - "library(repr)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "48f3e762", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "366" - ], - "text/latex": [ - "366" - ], - "text/markdown": [ - "366" - ], - "text/plain": [ - "[1] 366" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#changing plot size\n", - "options(repr.plot.width = 12,repr.plot.height=6)\n", - "size" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "abe41544", - "metadata": {}, - "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", - "\n", - "
A data.frame: 53 × 1
additional_product
<dbl>
2020-01-0110
2020-01-0810
2020-01-1510
2020-01-2210
2020-01-2910
2020-02-0510
2020-02-1210
2020-02-1910
2020-02-2610
2020-03-0410
2020-03-1110
2020-03-1810
2020-03-2510
2020-04-0110
2020-04-0810
2020-04-1510
2020-04-2210
2020-04-2910
2020-05-0610
2020-05-1310
2020-05-2010
2020-05-2710
2020-06-0310
2020-06-1010
2020-06-1710
2020-06-2410
2020-07-0110
2020-07-0810
2020-07-1510
2020-07-2210
2020-07-2910
2020-08-0510
2020-08-1210
2020-08-1910
2020-08-2610
2020-09-0210
2020-09-0910
2020-09-1610
2020-09-2310
2020-09-3010
2020-10-0710
2020-10-1410
2020-10-2110
2020-10-2810
2020-11-0410
2020-11-1110
2020-11-1810
2020-11-2510
2020-12-0210
2020-12-0910
2020-12-1610
2020-12-2310
2020-12-3010
\n" - ], - "text/latex": [ - "A data.frame: 53 × 1\n", - "\\begin{tabular}{r|l}\n", - " & additional\\_product\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t2020-01-01 & 10\\\\\n", - "\t2020-01-08 & 10\\\\\n", - "\t2020-01-15 & 10\\\\\n", - "\t2020-01-22 & 10\\\\\n", - "\t2020-01-29 & 10\\\\\n", - "\t2020-02-05 & 10\\\\\n", - "\t2020-02-12 & 10\\\\\n", - "\t2020-02-19 & 10\\\\\n", - "\t2020-02-26 & 10\\\\\n", - "\t2020-03-04 & 10\\\\\n", - "\t2020-03-11 & 10\\\\\n", - "\t2020-03-18 & 10\\\\\n", - "\t2020-03-25 & 10\\\\\n", - "\t2020-04-01 & 10\\\\\n", - "\t2020-04-08 & 10\\\\\n", - "\t2020-04-15 & 10\\\\\n", - "\t2020-04-22 & 10\\\\\n", - "\t2020-04-29 & 10\\\\\n", - "\t2020-05-06 & 10\\\\\n", - "\t2020-05-13 & 10\\\\\n", - "\t2020-05-20 & 10\\\\\n", - "\t2020-05-27 & 10\\\\\n", - "\t2020-06-03 & 10\\\\\n", - "\t2020-06-10 & 10\\\\\n", - "\t2020-06-17 & 10\\\\\n", - "\t2020-06-24 & 10\\\\\n", - "\t2020-07-01 & 10\\\\\n", - "\t2020-07-08 & 10\\\\\n", - "\t2020-07-15 & 10\\\\\n", - "\t2020-07-22 & 10\\\\\n", - "\t2020-07-29 & 10\\\\\n", - "\t2020-08-05 & 10\\\\\n", - "\t2020-08-12 & 10\\\\\n", - "\t2020-08-19 & 10\\\\\n", - "\t2020-08-26 & 10\\\\\n", - "\t2020-09-02 & 10\\\\\n", - "\t2020-09-09 & 10\\\\\n", - "\t2020-09-16 & 10\\\\\n", - "\t2020-09-23 & 10\\\\\n", - "\t2020-09-30 & 10\\\\\n", - "\t2020-10-07 & 10\\\\\n", - "\t2020-10-14 & 10\\\\\n", - "\t2020-10-21 & 10\\\\\n", - "\t2020-10-28 & 10\\\\\n", - "\t2020-11-04 & 10\\\\\n", - "\t2020-11-11 & 10\\\\\n", - "\t2020-11-18 & 10\\\\\n", - "\t2020-11-25 & 10\\\\\n", - "\t2020-12-02 & 10\\\\\n", - "\t2020-12-09 & 10\\\\\n", - "\t2020-12-16 & 10\\\\\n", - "\t2020-12-23 & 10\\\\\n", - "\t2020-12-30 & 10\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 53 × 1\n", - "\n", - "| | additional_product <dbl> |\n", - "|---|---|\n", - "| 2020-01-01 | 10 |\n", - "| 2020-01-08 | 10 |\n", - "| 2020-01-15 | 10 |\n", - "| 2020-01-22 | 10 |\n", - "| 2020-01-29 | 10 |\n", - "| 2020-02-05 | 10 |\n", - "| 2020-02-12 | 10 |\n", - "| 2020-02-19 | 10 |\n", - "| 2020-02-26 | 10 |\n", - "| 2020-03-04 | 10 |\n", - "| 2020-03-11 | 10 |\n", - "| 2020-03-18 | 10 |\n", - "| 2020-03-25 | 10 |\n", - "| 2020-04-01 | 10 |\n", - "| 2020-04-08 | 10 |\n", - "| 2020-04-15 | 10 |\n", - "| 2020-04-22 | 10 |\n", - "| 2020-04-29 | 10 |\n", - "| 2020-05-06 | 10 |\n", - "| 2020-05-13 | 10 |\n", - "| 2020-05-20 | 10 |\n", - "| 2020-05-27 | 10 |\n", - "| 2020-06-03 | 10 |\n", - "| 2020-06-10 | 10 |\n", - "| 2020-06-17 | 10 |\n", - "| 2020-06-24 | 10 |\n", - "| 2020-07-01 | 10 |\n", - "| 2020-07-08 | 10 |\n", - "| 2020-07-15 | 10 |\n", - "| 2020-07-22 | 10 |\n", - "| 2020-07-29 | 10 |\n", - "| 2020-08-05 | 10 |\n", - "| 2020-08-12 | 10 |\n", - "| 2020-08-19 | 10 |\n", - "| 2020-08-26 | 10 |\n", - "| 2020-09-02 | 10 |\n", - "| 2020-09-09 | 10 |\n", - "| 2020-09-16 | 10 |\n", - "| 2020-09-23 | 10 |\n", - "| 2020-09-30 | 10 |\n", - "| 2020-10-07 | 10 |\n", - "| 2020-10-14 | 10 |\n", - "| 2020-10-21 | 10 |\n", - "| 2020-10-28 | 10 |\n", - "| 2020-11-04 | 10 |\n", - "| 2020-11-11 | 10 |\n", - "| 2020-11-18 | 10 |\n", - "| 2020-11-25 | 10 |\n", - "| 2020-12-02 | 10 |\n", - "| 2020-12-09 | 10 |\n", - "| 2020-12-16 | 10 |\n", - "| 2020-12-23 | 10 |\n", - "| 2020-12-30 | 10 |\n", - "\n" - ], - "text/plain": [ - " additional_product\n", - "2020-01-01 10 \n", - "2020-01-08 10 \n", - "2020-01-15 10 \n", - "2020-01-22 10 \n", - "2020-01-29 10 \n", - "2020-02-05 10 \n", - "2020-02-12 10 \n", - "2020-02-19 10 \n", - "2020-02-26 10 \n", - "2020-03-04 10 \n", - "2020-03-11 10 \n", - "2020-03-18 10 \n", - "2020-03-25 10 \n", - "2020-04-01 10 \n", - "2020-04-08 10 \n", - "2020-04-15 10 \n", - "2020-04-22 10 \n", - "2020-04-29 10 \n", - "2020-05-06 10 \n", - "2020-05-13 10 \n", - "2020-05-20 10 \n", - "2020-05-27 10 \n", - "2020-06-03 10 \n", - "2020-06-10 10 \n", - "2020-06-17 10 \n", - "2020-06-24 10 \n", - "2020-07-01 10 \n", - "2020-07-08 10 \n", - "2020-07-15 10 \n", - "2020-07-22 10 \n", - "2020-07-29 10 \n", - "2020-08-05 10 \n", - "2020-08-12 10 \n", - "2020-08-19 10 \n", - "2020-08-26 10 \n", - "2020-09-02 10 \n", - "2020-09-09 10 \n", - "2020-09-16 10 \n", - "2020-09-23 10 \n", - "2020-09-30 10 \n", - "2020-10-07 10 \n", - "2020-10-14 10 \n", - "2020-10-21 10 \n", - "2020-10-28 10 \n", - "2020-11-04 10 \n", - "2020-11-11 10 \n", - "2020-11-18 10 \n", - "2020-11-25 10 \n", - "2020-12-02 10 \n", - "2020-12-09 10 \n", - "2020-12-16 10 \n", - "2020-12-23 10 \n", - "2020-12-30 10 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "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: 366 × 1
total
<dbl>
2020-01-0154.37099
2020-01-02 NA
2020-01-03 NA
2020-01-04 NA
2020-01-05 NA
2020-01-06 NA
2020-01-07 NA
2020-01-0851.99181
2020-01-09 NA
2020-01-10 NA
2020-01-11 NA
2020-01-12 NA
2020-01-13 NA
2020-01-14 NA
2020-01-1547.57204
2020-01-16 NA
2020-01-17 NA
2020-01-18 NA
2020-01-19 NA
2020-01-20 NA
2020-01-21 NA
2020-01-2250.46082
2020-01-23 NA
2020-01-24 NA
2020-01-25 NA
2020-01-26 NA
2020-01-27 NA
2020-01-28 NA
2020-01-2955.32913
2020-01-30 NA
......
2020-12-0247.63211
2020-12-03 NA
2020-12-04 NA
2020-12-05 NA
2020-12-06 NA
2020-12-07 NA
2020-12-08 NA
2020-12-0949.09786
2020-12-10 NA
2020-12-11 NA
2020-12-12 NA
2020-12-13 NA
2020-12-14 NA
2020-12-15 NA
2020-12-1655.27396
2020-12-17 NA
2020-12-18 NA
2020-12-19 NA
2020-12-20 NA
2020-12-21 NA
2020-12-22 NA
2020-12-2346.30954
2020-12-24 NA
2020-12-25 NA
2020-12-26 NA
2020-12-27 NA
2020-12-28 NA
2020-12-29 NA
2020-12-3043.08600
2020-12-31 NA
\n" - ], - "text/latex": [ - "A data.frame: 366 × 1\n", - "\\begin{tabular}{r|l}\n", - " & total\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t2020-01-01 & 54.37099\\\\\n", - "\t2020-01-02 & NA\\\\\n", - "\t2020-01-03 & NA\\\\\n", - "\t2020-01-04 & NA\\\\\n", - "\t2020-01-05 & NA\\\\\n", - "\t2020-01-06 & NA\\\\\n", - "\t2020-01-07 & NA\\\\\n", - "\t2020-01-08 & 51.99181\\\\\n", - "\t2020-01-09 & NA\\\\\n", - "\t2020-01-10 & NA\\\\\n", - "\t2020-01-11 & NA\\\\\n", - "\t2020-01-12 & NA\\\\\n", - "\t2020-01-13 & NA\\\\\n", - "\t2020-01-14 & NA\\\\\n", - "\t2020-01-15 & 47.57204\\\\\n", - "\t2020-01-16 & NA\\\\\n", - "\t2020-01-17 & NA\\\\\n", - "\t2020-01-18 & NA\\\\\n", - "\t2020-01-19 & NA\\\\\n", - "\t2020-01-20 & NA\\\\\n", - "\t2020-01-21 & NA\\\\\n", - "\t2020-01-22 & 50.46082\\\\\n", - "\t2020-01-23 & NA\\\\\n", - "\t2020-01-24 & NA\\\\\n", - "\t2020-01-25 & NA\\\\\n", - "\t2020-01-26 & NA\\\\\n", - "\t2020-01-27 & NA\\\\\n", - "\t2020-01-28 & NA\\\\\n", - "\t2020-01-29 & 55.32913\\\\\n", - "\t2020-01-30 & NA\\\\\n", - "\t... & ...\\\\\n", - "\t2020-12-02 & 47.63211\\\\\n", - "\t2020-12-03 & NA\\\\\n", - "\t2020-12-04 & NA\\\\\n", - "\t2020-12-05 & NA\\\\\n", - "\t2020-12-06 & NA\\\\\n", - "\t2020-12-07 & NA\\\\\n", - "\t2020-12-08 & NA\\\\\n", - "\t2020-12-09 & 49.09786\\\\\n", - "\t2020-12-10 & NA\\\\\n", - "\t2020-12-11 & NA\\\\\n", - "\t2020-12-12 & NA\\\\\n", - "\t2020-12-13 & NA\\\\\n", - "\t2020-12-14 & NA\\\\\n", - "\t2020-12-15 & NA\\\\\n", - "\t2020-12-16 & 55.27396\\\\\n", - "\t2020-12-17 & NA\\\\\n", - "\t2020-12-18 & NA\\\\\n", - "\t2020-12-19 & NA\\\\\n", - "\t2020-12-20 & NA\\\\\n", - "\t2020-12-21 & NA\\\\\n", - "\t2020-12-22 & NA\\\\\n", - "\t2020-12-23 & 46.30954\\\\\n", - "\t2020-12-24 & NA\\\\\n", - "\t2020-12-25 & NA\\\\\n", - "\t2020-12-26 & NA\\\\\n", - "\t2020-12-27 & NA\\\\\n", - "\t2020-12-28 & NA\\\\\n", - "\t2020-12-29 & NA\\\\\n", - "\t2020-12-30 & 43.08600\\\\\n", - "\t2020-12-31 & NA\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 366 × 1\n", - "\n", - "| | total <dbl> |\n", - "|---|---|\n", - "| 2020-01-01 | 54.37099 |\n", - "| 2020-01-02 | NA |\n", - "| 2020-01-03 | NA |\n", - "| 2020-01-04 | NA |\n", - "| 2020-01-05 | NA |\n", - "| 2020-01-06 | NA |\n", - "| 2020-01-07 | NA |\n", - "| 2020-01-08 | 51.99181 |\n", - "| 2020-01-09 | NA |\n", - "| 2020-01-10 | NA |\n", - "| 2020-01-11 | NA |\n", - "| 2020-01-12 | NA |\n", - "| 2020-01-13 | NA |\n", - "| 2020-01-14 | NA |\n", - "| 2020-01-15 | 47.57204 |\n", - "| 2020-01-16 | NA |\n", - "| 2020-01-17 | NA |\n", - "| 2020-01-18 | NA |\n", - "| 2020-01-19 | NA |\n", - "| 2020-01-20 | NA |\n", - "| 2020-01-21 | NA |\n", - "| 2020-01-22 | 50.46082 |\n", - "| 2020-01-23 | NA |\n", - "| 2020-01-24 | NA |\n", - "| 2020-01-25 | NA |\n", - "| 2020-01-26 | NA |\n", - "| 2020-01-27 | NA |\n", - "| 2020-01-28 | NA |\n", - "| 2020-01-29 | 55.32913 |\n", - "| 2020-01-30 | NA |\n", - "| ... | ... |\n", - "| 2020-12-02 | 47.63211 |\n", - "| 2020-12-03 | NA |\n", - "| 2020-12-04 | NA |\n", - "| 2020-12-05 | NA |\n", - "| 2020-12-06 | NA |\n", - "| 2020-12-07 | NA |\n", - "| 2020-12-08 | NA |\n", - "| 2020-12-09 | 49.09786 |\n", - "| 2020-12-10 | NA |\n", - "| 2020-12-11 | NA |\n", - "| 2020-12-12 | NA |\n", - "| 2020-12-13 | NA |\n", - "| 2020-12-14 | NA |\n", - "| 2020-12-15 | NA |\n", - "| 2020-12-16 | 55.27396 |\n", - "| 2020-12-17 | NA |\n", - "| 2020-12-18 | NA |\n", - "| 2020-12-19 | NA |\n", - "| 2020-12-20 | NA |\n", - "| 2020-12-21 | NA |\n", - "| 2020-12-22 | NA |\n", - "| 2020-12-23 | 46.30954 |\n", - "| 2020-12-24 | NA |\n", - "| 2020-12-25 | NA |\n", - "| 2020-12-26 | NA |\n", - "| 2020-12-27 | NA |\n", - "| 2020-12-28 | NA |\n", - "| 2020-12-29 | NA |\n", - "| 2020-12-30 | 43.08600 |\n", - "| 2020-12-31 | NA |\n", - "\n" - ], - "text/plain": [ - " total \n", - "2020-01-01 54.37099\n", - "2020-01-02 NA\n", - "2020-01-03 NA\n", - "2020-01-04 NA\n", - "2020-01-05 NA\n", - "2020-01-06 NA\n", - "2020-01-07 NA\n", - "2020-01-08 51.99181\n", - "2020-01-09 NA\n", - "2020-01-10 NA\n", - "2020-01-11 NA\n", - "2020-01-12 NA\n", - "2020-01-13 NA\n", - "2020-01-14 NA\n", - "2020-01-15 47.57204\n", - "2020-01-16 NA\n", - "2020-01-17 NA\n", - "2020-01-18 NA\n", - "2020-01-19 NA\n", - "2020-01-20 NA\n", - "2020-01-21 NA\n", - "2020-01-22 50.46082\n", - "2020-01-23 NA\n", - "2020-01-24 NA\n", - "2020-01-25 NA\n", - "2020-01-26 NA\n", - "2020-01-27 NA\n", - "2020-01-28 NA\n", - "2020-01-29 55.32913\n", - "2020-01-30 NA\n", - "... ... \n", - "2020-12-02 47.63211\n", - "2020-12-03 NA\n", - "2020-12-04 NA\n", - "2020-12-05 NA\n", - "2020-12-06 NA\n", - "2020-12-07 NA\n", - "2020-12-08 NA\n", - "2020-12-09 49.09786\n", - "2020-12-10 NA\n", - "2020-12-11 NA\n", - "2020-12-12 NA\n", - "2020-12-13 NA\n", - "2020-12-14 NA\n", - "2020-12-15 NA\n", - "2020-12-16 55.27396\n", - "2020-12-17 NA\n", - "2020-12-18 NA\n", - "2020-12-19 NA\n", - "2020-12-20 NA\n", - "2020-12-21 NA\n", - "2020-12-22 NA\n", - "2020-12-23 46.30954\n", - "2020-12-24 NA\n", - "2020-12-25 NA\n", - "2020-12-26 NA\n", - "2020-12-27 NA\n", - "2020-12-28 NA\n", - "2020-12-29 NA\n", - "2020-12-30 43.08600\n", - "2020-12-31 NA" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "index = seq(start_date,end_date,by = 'week')\n", - "sz = length(index)\n", - "additional_product <- rep(10,53)\n", - "additional_items <- data.frame(row.names = index[0:sz],additional_product)\n", - "additional_items\n", - "# we are merging two dataframe so that we can add\n", - "additional_item = merge(additional_items,sold_items, by = 0, all = TRUE)[-1] \n", - "total = data.frame(row.names=idx[0:size],additional_item$additional_product + additional_item$sales)\n", - "colnames(total) = c('total')\n", - "total" - ] - }, - { - "cell_type": "markdown", - "id": "cb00ff6e", - "metadata": {}, - "source": [ - "\n", - "### As you can see, we are having problems here, because in the weekly series non-mentioned days are considered to be missing (NaN), if we add NaN to a number gives us NaN. In order todo addition, we need to fill the value 0 of additional_items while adding series: \n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "387cb4c2", - "metadata": {}, - "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: 366 × 1
total
<dbl>
2020-01-0154.37099
2020-01-0227.85566
2020-01-0338.29037
2020-01-0426.72367
2020-01-0537.93330
2020-01-0638.70961
2020-01-0728.36133
2020-01-0851.99181
2020-01-0944.76469
2020-01-1026.54058
2020-01-1131.70327
2020-01-1237.83133
2020-01-1347.45717
2020-01-1431.78909
2020-01-1547.57204
2020-01-1643.79414
2020-01-1746.35117
2020-01-1840.18666
2020-01-1934.65751
2020-01-2038.09664
2020-01-2136.76733
2020-01-2250.46082
2020-01-2339.62032
2020-01-2444.56143
2020-01-2526.45657
2020-01-2645.48089
2020-01-2749.03699
2020-01-2846.05290
2020-01-2955.32913
2020-01-3044.83293
......
2020-12-0247.63211
2020-12-0349.44946
2020-12-0428.07843
2020-12-0549.80941
2020-12-0637.43425
2020-12-0732.36442
2020-12-0837.96258
2020-12-0949.09786
2020-12-1043.08738
2020-12-1136.93554
2020-12-1233.44147
2020-12-1335.24588
2020-12-1447.67855
2020-12-1541.84728
2020-12-1655.27396
2020-12-1732.23195
2020-12-1830.18391
2020-12-1939.27033
2020-12-2045.13756
2020-12-2143.00961
2020-12-2243.69411
2020-12-2346.30954
2020-12-2437.42397
2020-12-2535.94406
2020-12-2645.00482
2020-12-2731.81550
2020-12-2832.69022
2020-12-2931.52063
2020-12-3043.08600
2020-12-3139.28333
\n" - ], - "text/latex": [ - "A data.frame: 366 × 1\n", - "\\begin{tabular}{r|l}\n", - " & total\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t2020-01-01 & 54.37099\\\\\n", - "\t2020-01-02 & 27.85566\\\\\n", - "\t2020-01-03 & 38.29037\\\\\n", - "\t2020-01-04 & 26.72367\\\\\n", - "\t2020-01-05 & 37.93330\\\\\n", - "\t2020-01-06 & 38.70961\\\\\n", - "\t2020-01-07 & 28.36133\\\\\n", - "\t2020-01-08 & 51.99181\\\\\n", - "\t2020-01-09 & 44.76469\\\\\n", - "\t2020-01-10 & 26.54058\\\\\n", - "\t2020-01-11 & 31.70327\\\\\n", - "\t2020-01-12 & 37.83133\\\\\n", - "\t2020-01-13 & 47.45717\\\\\n", - "\t2020-01-14 & 31.78909\\\\\n", - "\t2020-01-15 & 47.57204\\\\\n", - "\t2020-01-16 & 43.79414\\\\\n", - "\t2020-01-17 & 46.35117\\\\\n", - "\t2020-01-18 & 40.18666\\\\\n", - "\t2020-01-19 & 34.65751\\\\\n", - "\t2020-01-20 & 38.09664\\\\\n", - "\t2020-01-21 & 36.76733\\\\\n", - "\t2020-01-22 & 50.46082\\\\\n", - "\t2020-01-23 & 39.62032\\\\\n", - "\t2020-01-24 & 44.56143\\\\\n", - "\t2020-01-25 & 26.45657\\\\\n", - "\t2020-01-26 & 45.48089\\\\\n", - "\t2020-01-27 & 49.03699\\\\\n", - "\t2020-01-28 & 46.05290\\\\\n", - "\t2020-01-29 & 55.32913\\\\\n", - "\t2020-01-30 & 44.83293\\\\\n", - "\t... & ...\\\\\n", - "\t2020-12-02 & 47.63211\\\\\n", - "\t2020-12-03 & 49.44946\\\\\n", - "\t2020-12-04 & 28.07843\\\\\n", - "\t2020-12-05 & 49.80941\\\\\n", - "\t2020-12-06 & 37.43425\\\\\n", - "\t2020-12-07 & 32.36442\\\\\n", - "\t2020-12-08 & 37.96258\\\\\n", - "\t2020-12-09 & 49.09786\\\\\n", - "\t2020-12-10 & 43.08738\\\\\n", - "\t2020-12-11 & 36.93554\\\\\n", - "\t2020-12-12 & 33.44147\\\\\n", - "\t2020-12-13 & 35.24588\\\\\n", - "\t2020-12-14 & 47.67855\\\\\n", - "\t2020-12-15 & 41.84728\\\\\n", - "\t2020-12-16 & 55.27396\\\\\n", - "\t2020-12-17 & 32.23195\\\\\n", - "\t2020-12-18 & 30.18391\\\\\n", - "\t2020-12-19 & 39.27033\\\\\n", - "\t2020-12-20 & 45.13756\\\\\n", - "\t2020-12-21 & 43.00961\\\\\n", - "\t2020-12-22 & 43.69411\\\\\n", - "\t2020-12-23 & 46.30954\\\\\n", - "\t2020-12-24 & 37.42397\\\\\n", - "\t2020-12-25 & 35.94406\\\\\n", - "\t2020-12-26 & 45.00482\\\\\n", - "\t2020-12-27 & 31.81550\\\\\n", - "\t2020-12-28 & 32.69022\\\\\n", - "\t2020-12-29 & 31.52063\\\\\n", - "\t2020-12-30 & 43.08600\\\\\n", - "\t2020-12-31 & 39.28333\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 366 × 1\n", - "\n", - "| | total <dbl> |\n", - "|---|---|\n", - "| 2020-01-01 | 54.37099 |\n", - "| 2020-01-02 | 27.85566 |\n", - "| 2020-01-03 | 38.29037 |\n", - "| 2020-01-04 | 26.72367 |\n", - "| 2020-01-05 | 37.93330 |\n", - "| 2020-01-06 | 38.70961 |\n", - "| 2020-01-07 | 28.36133 |\n", - "| 2020-01-08 | 51.99181 |\n", - "| 2020-01-09 | 44.76469 |\n", - "| 2020-01-10 | 26.54058 |\n", - "| 2020-01-11 | 31.70327 |\n", - "| 2020-01-12 | 37.83133 |\n", - "| 2020-01-13 | 47.45717 |\n", - "| 2020-01-14 | 31.78909 |\n", - "| 2020-01-15 | 47.57204 |\n", - "| 2020-01-16 | 43.79414 |\n", - "| 2020-01-17 | 46.35117 |\n", - "| 2020-01-18 | 40.18666 |\n", - "| 2020-01-19 | 34.65751 |\n", - "| 2020-01-20 | 38.09664 |\n", - "| 2020-01-21 | 36.76733 |\n", - "| 2020-01-22 | 50.46082 |\n", - "| 2020-01-23 | 39.62032 |\n", - "| 2020-01-24 | 44.56143 |\n", - "| 2020-01-25 | 26.45657 |\n", - "| 2020-01-26 | 45.48089 |\n", - "| 2020-01-27 | 49.03699 |\n", - "| 2020-01-28 | 46.05290 |\n", - "| 2020-01-29 | 55.32913 |\n", - "| 2020-01-30 | 44.83293 |\n", - "| ... | ... |\n", - "| 2020-12-02 | 47.63211 |\n", - "| 2020-12-03 | 49.44946 |\n", - "| 2020-12-04 | 28.07843 |\n", - "| 2020-12-05 | 49.80941 |\n", - "| 2020-12-06 | 37.43425 |\n", - "| 2020-12-07 | 32.36442 |\n", - "| 2020-12-08 | 37.96258 |\n", - "| 2020-12-09 | 49.09786 |\n", - "| 2020-12-10 | 43.08738 |\n", - "| 2020-12-11 | 36.93554 |\n", - "| 2020-12-12 | 33.44147 |\n", - "| 2020-12-13 | 35.24588 |\n", - "| 2020-12-14 | 47.67855 |\n", - "| 2020-12-15 | 41.84728 |\n", - "| 2020-12-16 | 55.27396 |\n", - "| 2020-12-17 | 32.23195 |\n", - "| 2020-12-18 | 30.18391 |\n", - "| 2020-12-19 | 39.27033 |\n", - "| 2020-12-20 | 45.13756 |\n", - "| 2020-12-21 | 43.00961 |\n", - "| 2020-12-22 | 43.69411 |\n", - "| 2020-12-23 | 46.30954 |\n", - "| 2020-12-24 | 37.42397 |\n", - "| 2020-12-25 | 35.94406 |\n", - "| 2020-12-26 | 45.00482 |\n", - "| 2020-12-27 | 31.81550 |\n", - "| 2020-12-28 | 32.69022 |\n", - "| 2020-12-29 | 31.52063 |\n", - "| 2020-12-30 | 43.08600 |\n", - "| 2020-12-31 | 39.28333 |\n", - "\n" - ], - "text/plain": [ - " total \n", - "2020-01-01 54.37099\n", - "2020-01-02 27.85566\n", - "2020-01-03 38.29037\n", - "2020-01-04 26.72367\n", - "2020-01-05 37.93330\n", - "2020-01-06 38.70961\n", - "2020-01-07 28.36133\n", - "2020-01-08 51.99181\n", - "2020-01-09 44.76469\n", - "2020-01-10 26.54058\n", - "2020-01-11 31.70327\n", - "2020-01-12 37.83133\n", - "2020-01-13 47.45717\n", - "2020-01-14 31.78909\n", - "2020-01-15 47.57204\n", - "2020-01-16 43.79414\n", - "2020-01-17 46.35117\n", - "2020-01-18 40.18666\n", - "2020-01-19 34.65751\n", - "2020-01-20 38.09664\n", - "2020-01-21 36.76733\n", - "2020-01-22 50.46082\n", - "2020-01-23 39.62032\n", - "2020-01-24 44.56143\n", - "2020-01-25 26.45657\n", - "2020-01-26 45.48089\n", - "2020-01-27 49.03699\n", - "2020-01-28 46.05290\n", - "2020-01-29 55.32913\n", - "2020-01-30 44.83293\n", - "... ... \n", - "2020-12-02 47.63211\n", - "2020-12-03 49.44946\n", - "2020-12-04 28.07843\n", - "2020-12-05 49.80941\n", - "2020-12-06 37.43425\n", - "2020-12-07 32.36442\n", - "2020-12-08 37.96258\n", - "2020-12-09 49.09786\n", - "2020-12-10 43.08738\n", - "2020-12-11 36.93554\n", - "2020-12-12 33.44147\n", - "2020-12-13 35.24588\n", - "2020-12-14 47.67855\n", - "2020-12-15 41.84728\n", - "2020-12-16 55.27396\n", - "2020-12-17 32.23195\n", - "2020-12-18 30.18391\n", - "2020-12-19 39.27033\n", - "2020-12-20 45.13756\n", - "2020-12-21 43.00961\n", - "2020-12-22 43.69411\n", - "2020-12-23 46.30954\n", - "2020-12-24 37.42397\n", - "2020-12-25 35.94406\n", - "2020-12-26 45.00482\n", - "2020-12-27 31.81550\n", - "2020-12-28 32.69022\n", - "2020-12-29 31.52063\n", - "2020-12-30 43.08600\n", - "2020-12-31 39.28333" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "additional_item[is.na(additional_item)] = 0\n", - "total = data.frame(row.names=idx[0:size],additional_item$additional_product + additional_item$sales)\n", - "colnames(total) = c('total')\n", - "total" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "bdb60236", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABaAAAALQCAMAAABR+ye1AAAAOVBMVEUAAAAzMzNNTU1oaGh8\nfHyMjIyampqnp6eyIiKysrK9vb3Hx8fQ0NDZ2dnh4eHp6enr6+vw8PD///+vl18TAAAACXBI\nWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO19ibbjOI5sdlb1tGam37TL//+xr64XWSKxBEBQ\nImXEOVVpSyQIbkEwROv+uicSiURiSPw624FEIpFI0EiCTiQSiUGRBJ1IJBKDIgk6kUgkBkUS\ndCKRSAyKJOhEIpEYFEnQiUQiMSiSoBOJRGJQeAn61oTG7F2RvvmQvjkxtHPpnR8NziVB80jf\nfEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTO\njyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjfnBjaufTOjyToLkjffEjf\nnBjaufTOj4MI+vff2P6bBH0e0jcfRvZtbOfSOz+OIejfr//9Xr8kQZ+G9M2HkX0b27n0zo8k\n6C5I33xI35wY2rn0zo8DCfqeBD0E0jcfRvZtbOfSOz+OIuin9vwh6H/8QMuWSCQSiUboBP1i\n54ygB0D65sPIvo3tXHrnR2rQXZC++ZC+OTG0c+mdH0nQXZC++ZC+OTG0c+mdH0nQXZC++ZC+\nOTG0c+mdH0nQXZC++ZC+OTG0c+mdH/lLwi5I33xI35wY2rn0zo98F0cXpG8+pG9ODO1ceudH\nEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9O\nDO1ceudHEnQXpG8+pG9ODO1ceudHEnQXpG8+pG9ODO0c6d2yHO4Gg6HbLgm6C9I3H9I3J4Z2\njvJuWYZh6KHbLgm6C9I3H9I3J4Z2jvBuWcZh6KHbLgm6C9I3H9I3J4Z2rvJueeMUb0oM3XZJ\n0F2QvvmQvjkxtHO1d0nQKJKguyB98yF9c2Jo51Li8CMJugvSNx/SNyeGdi4fEvqRBN0F6ZsP\n6ZsTQzuXx+z8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdo71L\niQNBEnQXpG8+pG9ODO1cErQfSdBdkL75kL45MbRz6Z0fSdBdkL75kL45MbRz6Z0fSdBdkL75\n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\n9y4JugscvrWSzxcQdN+D5BrOHW+dj9n1RUocbiRBd4Hdt4p8Jpc4OmjQvX/qo2Dk8Ta2c0nQ\nfiRBd4HZt5p8JifoeA26w28x55E4NAztXHrnRxJ0FwRE0GYDaMKUOD4GLYlHHm9jO5fe+ZEE\n3QWpQftw7EPC6/wMfWznUuLwIwm6C9pPcfSTWi0SR4MX4x+zM9L9yONtbOeSoP1Igu6CgFcj\ndGNoA0G3eNGFoCNhFUxGHm9jO5fe+ZEE3QWtvjnU1iaJgy7r+EMTB/ap+ZHjyONtbOfSOz+S\noLug0TfPeYUWgibLajw1kRH0kRjauZQ4/EiC7oITImgYtW9caU387Mp4aJ+mBn0UkqDdSILu\ngpk0aCFSbuJnT9Zj+zRPcRwE1LtzfoU0dNslQXdBu2/2v3mLpqx8E6SMJn52ZL52n3bE0M6h\n3p30O9Gh2y4JugsO980wtHGJo8mbJOgjMbRzoHfhPxQFMXTbJUF3wdG+WYY2+pDwKH+2yD51\nYmjnMO/ankk3YOi2S4LugoN9M41t/JhdA5wzLfvUiaGdM0XQnV0hMHTbnUrQiSg8x/bZXmwx\nljeJGTDaGL4MMoIuMZcGPQ7SNyeGds5wiqOrGwyGbruUOLrgeN8aTnEMhPTNiaGdS+/8SILu\ngvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGd\nS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTN\nh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8\nSILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TN\niaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILu\ngvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGd\nS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTNh/TNiaGdS+/8SILugvTN\nh/TNiaGdS+/8OJWg2/CPU0qdH9luPmS7uZFN50ZI0yVBz4RsNx+y3dzIpnMjCfrrkO3mQ7ab\nG9l0biRBfx2y3XzIdnMjm86NiQk6kUgkEiqSoBOJRGJQJEEnEonEoEiCTiQSiUGRBJ1IJBKD\nIgk6kUgkBkVXgv7NXf8b0r/fjmw3N37XH7PVdPBtka2nwTpb+RwUziDo36//cf9+O34zjZDt\npqMm6Gw1FW8C2V7a/putJ8HIckVDa0iCHg9J0H4kQTtABHZJ0DCsBM1NbxrdCfoV2P++F1ui\nspOz01f8frfEp+m2N7PdBJQzor5Mfv9q/N5+eM7XvYCRrSfByHJ3W7v1Juh1tjz9J++R378X\n75Z6N1kubAYkQduxJWiq8bL1RBhZ7m5rt0MkDqJD15r8pr9/MX7f981RzpVsNwE0x2SrSagI\n+r5vmGw9EUaWu9varT9Bv/ZM6/fPrex0CusimwTtQBK0HUnQTTCy3N3Wbv016Du1tvze/6/6\n/sX4/QRN0NluCsh2y1YToRB0tp4MI8vdbe3Wi6B3s6Ryne7p7PQfSBF0tpsAcsitN7LVeJSR\n8X3bMNl6PDwsd7e12xEEXQX/v/dpqu/fjE8brQ8Jy3vZbiTIIXfPVtOxOQfNrG7ZeiQ8LHe3\ntVs3iWPz+5lybXnv4e+bf7bfvxobgl6P2b0vZbuJoIZcthqEza/c1sZZv2brsfCw3CAEnWhF\njv9E4tuRBD0skqATiW9HEvSwSIJOJL4dSdCJRCIxKJKgE4lEYlAkQScSicSgSIJOJBKJQZEE\nnUgkEoMiCTqRSCQGRRJ04rr49av+lEhMhBy3iesiCToxOXLcJr4BSdCJKZHjNnFdPGj5P3/+\n+ufPp3/++r/7/f9+/Xm2U4kEjiToxHXxQ9B//f7169c///70168/7vc/f1g6kZgFSdCJ6+KH\noP/1d8z8158/n/7717//99e/zvYpkTAgCTpxXfzQ8h+//nO//+chduQ7jBOzIQk6cV380PLz\n8eDj///769f/nuxRImFCEnTiukiCTkyOJOjEdVFKHH/8kRJHYiokQSeui+ejwT//ur8fEv77\n13+f7VMiYUASdOK6qI/Z/fHrr7OdSiRwJEEnrovnD1X+ufuhyj/PdiqRwJEEnUgkEoMiCTqR\nSCQGRRJ0IpFIDIok6EQikRgUSdCJRCIxKJKgE4lEYlAkQScSicSgSIJOJBKJQZEEnUgkEoMi\nCTqRSCQGRRJ0IpFIDIok6EQikRgU/x+22CwvTrb4CQAAAABJRU5ErkJggg==", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 360, - "width": 720 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "ggplot(total,aes(x=idx,y=total)) + geom_point(color = \"firebrick\", shape = \"diamond\", size = 2) +\n", - " geom_line(color = \"firebrick\", linetype = \"dotted\", size = .3)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "294dde87", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
\n" - ], - "text/latex": [ - "\\begin{enumerate*}\n", - "\\item 2020-01-01\n", - "\\item 2020-02-01\n", - "\\item 2020-03-01\n", - "\\item 2020-04-01\n", - "\\item 2020-05-01\n", - "\\item 2020-06-01\n", - "\\item 2020-07-01\n", - "\\item 2020-08-01\n", - "\\item 2020-09-01\n", - "\\item 2020-10-01\n", - "\\item 2020-11-01\n", - "\\item 2020-12-01\n", - "\\end{enumerate*}\n" - ], - "text/markdown": [ - "1. 2020-01-01\n", - "2. 2020-02-01\n", - "3. 2020-03-01\n", - "4. 2020-04-01\n", - "5. 2020-05-01\n", - "6. 2020-06-01\n", - "7. 2020-07-01\n", - "8. 2020-08-01\n", - "9. 2020-09-01\n", - "10. 2020-10-01\n", - "11. 2020-11-01\n", - "12. 2020-12-01\n", - "\n", - "\n" - ], - "text/plain": [ - " [1] \"2020-01-01\" \"2020-02-01\" \"2020-03-01\" \"2020-04-01\" \"2020-05-01\"\n", - " [6] \"2020-06-01\" \"2020-07-01\" \"2020-08-01\" \"2020-09-01\" \"2020-10-01\"\n", - "[11] \"2020-11-01\" \"2020-12-01\"" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "index = seq(start_date,end_date,by ='month')\n", - "index" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "7542d95e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - " total\n", - "2020-01-31 40.12725\n", - "2020-02-29 36.38809\n", - "2020-03-31 36.63476\n", - "2020-04-30 36.69513\n", - "2020-05-31 40.12267\n", - "2020-06-30 38.04770\n", - "2020-07-31 39.38036\n", - "2020-08-31 37.60016\n", - "2020-09-30 37.76963\n", - "2020-10-31 38.57457\n", - "2020-11-30 38.38480\n", - "2020-12-31 39.73959" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\nycRWwgAAAABJRU5ErkJggg==", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 360, - "width": 720 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "x<- as.xts(total, dateFormat =\"Date\")\n", - "(monthly<-apply.monthly(x,mean))\n", - "ggplot(monthly, aes(x=index, y=total)) + \n", - " geom_bar(stat = \"identity\", width=5) " - ] - }, - { - "cell_type": "markdown", - "id": "945feffd", - "metadata": {}, - "source": [ - "## DataFrame" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "id": "d38f1754", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning message in seq_len(head.end.idx):\n", - "\"first element used of 'length.out' argument\"\n", - "ERROR while rich displaying an object: Error in seq_len(head.end.idx): argument must be coercible to non-negative integer\n", - "\n", - "Traceback:\n", - "1. FUN(X[[i]], ...)\n", - "2. tryCatch(withCallingHandlers({\n", - " . if (!mime %in% names(repr::mime2repr)) \n", - " . stop(\"No repr_* for mimetype \", mime, \" in repr::mime2repr\")\n", - " . rpr <- repr::mime2repr[[mime]](obj)\n", - " . if (is.null(rpr)) \n", - " . return(NULL)\n", - " . prepare_content(is.raw(rpr), rpr)\n", - " . }, error = error_handler), error = outer_handler)\n", - "3. tryCatchList(expr, classes, parentenv, handlers)\n", - "4. tryCatchOne(expr, names, parentenv, handlers[[1L]])\n", - "5. doTryCatch(return(expr), name, parentenv, handler)\n", - "6. withCallingHandlers({\n", - " . if (!mime %in% names(repr::mime2repr)) \n", - " . stop(\"No repr_* for mimetype \", mime, \" in repr::mime2repr\")\n", - " . rpr <- repr::mime2repr[[mime]](obj)\n", - " . if (is.null(rpr)) \n", - " . return(NULL)\n", - " . prepare_content(is.raw(rpr), rpr)\n", - " . }, error = error_handler)\n", - "7. repr::mime2repr[[mime]](obj)\n", - "8. repr_html.help_files_with_topic(obj)\n", - "9. repr_help_files_with_topic_generic(obj, Rd2HTML)\n" - ] - } - ], - "source": [ - "?vector" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "88a435ec", - "metadata": {}, - "outputs": [], - "source": [ - "a = data.frame(a,row.names = c(1:a1))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "c4e2a6c1", - "metadata": {}, - "outputs": [], - "source": [ - "b = data.frame(b,row.names = c(1:b1))" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "2bb5177c", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 2
ab
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" - ], - "text/latex": [ - "A data.frame: 9 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & a & b\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like \\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\t5 & 5 & Python\\\\\n", - "\t6 & 6 & and \\\\\n", - "\t7 & 7 & Pandas\\\\\n", - "\t8 & 8 & very \\\\\n", - "\t9 & 9 & much \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 2\n", - "\n", - "| | a <int> | b <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "| 5 | 5 | Python |\n", - "| 6 | 6 | and |\n", - "| 7 | 7 | Pandas |\n", - "| 8 | 8 | very |\n", - "| 9 | 9 | much |\n", - "\n" - ], - "text/plain": [ - " a b \n", - "1 1 I \n", - "2 2 like \n", - "3 3 to \n", - "4 4 use \n", - "5 5 Python\n", - "6 6 and \n", - "7 7 Pandas\n", - "8 8 very \n", - "9 9 much " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df<- data.frame(a,b)\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "8f45d3a5", - "metadata": {}, - "outputs": [], - "source": [ - "df = \n", - " rename(df,\n", - " A = a,\n", - " B = b,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "0efbf2d4", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" - ], - "text/latex": [ - "A data.frame: 9 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like \\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\t5 & 5 & Python\\\\\n", - "\t6 & 6 & and \\\\\n", - "\t7 & 7 & Pandas\\\\\n", - "\t8 & 8 & very \\\\\n", - "\t9 & 9 & much \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "| 5 | 5 | Python |\n", - "| 6 | 6 | and |\n", - "| 7 | 7 | Pandas |\n", - "| 8 | 8 | very |\n", - "| 9 | 9 | much |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like \n", - "3 3 to \n", - "4 4 use \n", - "5 5 Python\n", - "6 6 and \n", - "7 7 Pandas\n", - "8 8 very \n", - "9 9 much " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "88b51fdc", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Column A (series):\n" - ] - }, - { - "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", - "\n", - "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" - ], - "text/latex": [ - "A data.frame: 9 × 1\n", - "\\begin{tabular}{r|l}\n", - " & A\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t1 & 1\\\\\n", - "\t2 & 2\\\\\n", - "\t3 & 3\\\\\n", - "\t4 & 4\\\\\n", - "\t5 & 5\\\\\n", - "\t6 & 6\\\\\n", - "\t7 & 7\\\\\n", - "\t8 & 8\\\\\n", - "\t9 & 9\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 1\n", - "\n", - "| | A <int> |\n", - "|---|---|\n", - "| 1 | 1 |\n", - "| 2 | 2 |\n", - "| 3 | 3 |\n", - "| 4 | 4 |\n", - "| 5 | 5 |\n", - "| 6 | 6 |\n", - "| 7 | 7 |\n", - "| 8 | 8 |\n", - "| 9 | 9 |\n", - "\n" - ], - "text/plain": [ - " A\n", - "1 1\n", - "2 2\n", - "3 3\n", - "4 4\n", - "5 5\n", - "6 6\n", - "7 7\n", - "8 8\n", - "9 9" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "cat(\"Column A (series):\\n\")\n", - "select(df,'A')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "010bcba8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" - ], - "text/latex": [ - "A data.frame: 4 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I \\\\\n", - "\t2 & 2 & like\\\\\n", - "\t3 & 3 & to \\\\\n", - "\t4 & 4 & use \\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 4 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 1 | 1 | I |\n", - "| 2 | 2 | like |\n", - "| 3 | 3 | to |\n", - "| 4 | 4 | use |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "1 1 I \n", - "2 2 like\n", - "3 3 to \n", - "4 4 use " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A<5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "082277db", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\n", - "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" - ], - "text/latex": [ - "A data.frame: 1 × 2\n", - "\\begin{tabular}{r|ll}\n", - " & A & B\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t6 & 6 & and\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 1 × 2\n", - "\n", - "| | A <int> | B <chr> |\n", - "|---|---|---|\n", - "| 6 | 6 | and |\n", - "\n" - ], - "text/plain": [ - " A B \n", - "6 6 and" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[df$A>5 & df$A<7,]" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "0bbd19f8", - "metadata": {}, - "outputs": [], - "source": [ - "df$DivA <- df$A - mean(df$A)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "f36d96af", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" - ], - "text/latex": [ - "A data.frame: 9 × 3\n", - "\\begin{tabular}{r|lll}\n", - " & A & B & DivA\\\\\n", - " & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4\\\\\n", - "\t2 & 2 & like & -3\\\\\n", - "\t3 & 3 & to & -2\\\\\n", - "\t4 & 4 & use & -1\\\\\n", - "\t5 & 5 & Python & 0\\\\\n", - "\t6 & 6 & and & 1\\\\\n", - "\t7 & 7 & Pandas & 2\\\\\n", - "\t8 & 8 & very & 3\\\\\n", - "\t9 & 9 & much & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 3\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> |\n", - "|---|---|---|---|\n", - "| 1 | 1 | I | -4 |\n", - "| 2 | 2 | like | -3 |\n", - "| 3 | 3 | to | -2 |\n", - "| 4 | 4 | use | -1 |\n", - "| 5 | 5 | Python | 0 |\n", - "| 6 | 6 | and | 1 |\n", - "| 7 | 7 | Pandas | 2 |\n", - "| 8 | 8 | very | 3 |\n", - "| 9 | 9 | much | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA\n", - "1 1 I -4 \n", - "2 2 like -3 \n", - "3 3 to -2 \n", - "4 4 use -1 \n", - "5 5 Python 0 \n", - "6 6 and 1 \n", - "7 7 Pandas 2 \n", - "8 8 very 3 \n", - "9 9 much 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "c67f2bd0", - "metadata": {}, - "outputs": [], - "source": [ - "df$LenB <- str_length(df$B)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "cef214b2", - "metadata": {}, - "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", - "\n", - "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" - ], - "text/latex": [ - "A data.frame: 9 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\t7 & 7 & Pandas & 2 & 6\\\\\n", - "\t8 & 8 & very & 3 & 4\\\\\n", - "\t9 & 9 & much & 4 & 4\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 9 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "| 7 | 7 | Pandas | 2 | 6 |\n", - "| 8 | 8 | very | 3 | 4 |\n", - "| 9 | 9 | much | 4 | 4 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 \n", - "7 7 Pandas 2 6 \n", - "8 8 very 3 4 \n", - "9 9 much 4 4 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "59fe5316", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" - ], - "text/latex": [ - "A data.frame: 5 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 5 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df[0:5,]" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "f944a949", - "metadata": {}, - "outputs": [], - "source": [ - "df1 = df %>% group_by(LenB) %>% summarise(a = mean(A))" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "8ffd39cd", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A tibble: 5 × 2
LenBa
<int><dbl>
11.000000
23.000000
35.000000
46.333333
66.000000
\n" - ], - "text/latex": [ - "A tibble: 5 × 2\n", - "\\begin{tabular}{ll}\n", - " LenB & a\\\\\n", - " & \\\\\n", - "\\hline\n", - "\t 1 & 1.000000\\\\\n", - "\t 2 & 3.000000\\\\\n", - "\t 3 & 5.000000\\\\\n", - "\t 4 & 6.333333\\\\\n", - "\t 6 & 6.000000\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A tibble: 5 × 2\n", - "\n", - "| LenB <int> | a <dbl> |\n", - "|---|---|\n", - "| 1 | 1.000000 |\n", - "| 2 | 3.000000 |\n", - "| 3 | 5.000000 |\n", - "| 4 | 6.333333 |\n", - "| 6 | 6.000000 |\n", - "\n" - ], - "text/plain": [ - " LenB a \n", - "1 1 1.000000\n", - "2 2 3.000000\n", - "3 3 5.000000\n", - "4 4 6.333333\n", - "5 6 6.000000" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df1" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "3b859950", - "metadata": {}, - "outputs": [], - "source": [ - "df2 = df %>% group_by(LenB) %>%\n", - "summarise(MEAN = mean(A),count =length(DivA))" - ] - }, - { - "cell_type": "markdown", - "id": "5d3f0287", - "metadata": {}, - "source": [ - "## Printing and Plotting" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "69946dc7", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning message in file(file, \"rt\"):\n", - "\"cannot open file 'file name': No such file or directory\"\n" - ] - }, - { - "ename": "ERROR", - "evalue": "Error in file(file, \"rt\"): cannot open the connection\n", - "output_type": "error", - "traceback": [ - "Error in file(file, \"rt\"): cannot open the connection\nTraceback:\n", - "1. read.csv(\"file name\")", - "2. read.table(file = file, header = header, sep = sep, quote = quote, \n . dec = dec, fill = fill, comment.char = comment.char, ...)", - "3. file(file, \"rt\")" - ] - } - ], - "source": [ - "dataset = read.csv(\"file name\")" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "009af652", - "metadata": {}, - "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", - "\n", - "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" - ], - "text/latex": [ - "A data.frame: 6 × 4\n", - "\\begin{tabular}{r|llll}\n", - " & A & B & DivA & LenB\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t1 & 1 & I & -4 & 1\\\\\n", - "\t2 & 2 & like & -3 & 4\\\\\n", - "\t3 & 3 & to & -2 & 2\\\\\n", - "\t4 & 4 & use & -1 & 3\\\\\n", - "\t5 & 5 & Python & 0 & 6\\\\\n", - "\t6 & 6 & and & 1 & 3\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 6 × 4\n", - "\n", - "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", - "|---|---|---|---|---|\n", - "| 1 | 1 | I | -4 | 1 |\n", - "| 2 | 2 | like | -3 | 4 |\n", - "| 3 | 3 | to | -2 | 2 |\n", - "| 4 | 4 | use | -1 | 3 |\n", - "| 5 | 5 | Python | 0 | 6 |\n", - "| 6 | 6 | and | 1 | 3 |\n", - "\n" - ], - "text/plain": [ - " A B DivA LenB\n", - "1 1 I -4 1 \n", - "2 2 like -3 4 \n", - "3 3 to -2 2 \n", - "4 4 use -1 3 \n", - "5 5 Python 0 6 \n", - "6 6 and 1 3 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "head(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "515c95b2", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAMFBMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAAS\ndAHeZh94AAAVuklEQVR4nO3djVYbuxWAUZn/ULDf/22LDYm5CQbbc0Y6kvZeC4c2C0Yj6cNg\n0absgMVK6wHACIQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQE\nAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEAYQEASqEVKAzV+zy+HAaXAIiCQkCCAkCCAkCCAkC\nCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAkCCAnO9c3/olxIcJ5DRadS\nEhKcp3x6PPGXV3y+VQmJdMpff379t1d8whUJiXTKp7ev//aKT7gyIZFO+diXQoIlyjcdCQnO\n5FU7WGxfkHMkWOanLSkk+NmPO1JI8KOfN6SQ4Cdn7EchwQ/O2Y5Cgu+dtRuFBN86bzMKCb5x\n7r9pKSQ47eydKCQ46fyNKCQ45YJ9KCQ44ZJtKCT42kW7UEjwpcs2oZDgKxfuQSHBv849Pjp+\nwBXXuPxDEl4CTrt8AwoJ/lanCiExtmu2n5Dgv67afUKC/7hu8wkJPrty7wkJPrl26wkJ/rj4\n+Oj4kVU+JOEl4B8L9p2Q4MOSbSckeLdo1wkJDpZtOiHB3sI9JyTYLd9yQoIFL3v/+QxVPiTh\nJeCPgP0mJKYXsd2ExOxCdpuQmFzMZhMScwvaa0JialFbTUjMLGynCYl5LT8+On6qKh+S8BIQ\nuc2ExKxCd5mQmFTsJhMScwreY0JiStFbTEjMKHyHCYkJxW8wITGdwOOj4+es8iEJL8G0Vtld\nQmIy62wuITGXlfaWkJjKWltLSMxktZ0lJCay3sYSEvNYcV8JiVmscXx0/ORVPiThJZjNuptK\nSMxh5T0lJKaw9pYSEjNYfUcJiQmsv6GExPhybtmco4JTamynmiG93pfN4273dFM2DytdAj4p\n+6OjVY+Pjpeq8iEH283bfZWnx/1juV3lEnB0KKhORlVDeihvz0MPm3K/3W0P78dfAo4Ou2jA\nkDYfN7Y9/LFZ4xLwR/l4qLOZKoZUPn+F+PcLRfnsykvAH+XTW52rrf8hB5tPIW09I7GycnxS\nqnO1Ch9y8PtnpIftx/vxl4CjUrEjr9oxrFFftXOOREXvR0jVdpLfbGBItbeQkBhR9R0kJAZU\nfwMJifE02D9CYjgtto+QGE2T3SMkBtNm8wiJsTTaO0JiJM1+31lIDKTdxhES42i4b4TEMFpu\nGyExiqa7RkgMou2mERJjaLxnhMQQWm8ZITGC5jtGSPQvwf/tlJDoXobtIiR6l2K3CInO5dgs\nQqJvSfaKkOhalq0iJHqWZqcIiY7l2ShCol+J9omQ6FWCY9gjIdGpXJtESPQp2R4REl3KtkWE\nRI/S7RAh0aF8G0RI9Cfh/hAS3cm4PYREb1LuDiHRl1THsEdCoitZt4aQ6EnanSEkOpJ3YwiJ\nfiTeF0KiG5m3hZDoRepdISQ6kXtTCIk+JN8TQqIHSY9hj4REB/JvCCGRXwf7QUik18N2EBLZ\ndbEbhERyfWwGIZFbJ3tBSKTWy1YQEpl1sxOERF7pj2GPhERaPW0DIZFVV7tASCTV1yYQEjl1\ntgeEREq9bQEhkVF3O0BIJNTfBhAS+XS4/kIim46OYY+ERB5l31Cfiy8ksjg8E3X5dLQTEnkc\nVl1IkTqdTJYoHw99Lr6QSKJ8euuPkEiiHJ+UOiQksigddyQk0vCqXbhOJ5MFDkdIvWYkJJLo\nfcmFRAbdr7iQSKD/BRcS7Q2w3kKiuRGWW0i0NsRqC4nGxlhsIdHWIGstJFrq9wT2L0KioXEW\nWki0M9A6C4lmRlpmIdHKUKssJBoZa5GFRBuDrbGQaGK0JRYSLQy3wkKivmGOYY+ERHUjLq+Q\nqG3I1RUSlY25uEKirkHXVkhUNerSComahl1ZIVHRuAsrJOoZeF2FRC0DHsMeCYlKxl5UIVHH\n4GsqJKoYfUmFRA3Dr6iQqGD8BRUS65tgPYXE6mZYTiGxtilWU0isa+hj2CMhsapZllJIrGma\nlRQSK5pnIYXEeiZaRyGxmpmWUUisZapVFBIrmWsRhcQ6JltDIbGGSY5hj4TECuZbQCERb8L1\nExLhZlw+IRFtytUTEsHmXDwhEWvStRMSoWZdOiERadqVExJxpjuGPRISYWZeNiERZepVExJB\n5l40IRFj8jUTEiFmXzIhEWH6FRMSASyYkFjOegmJxSY+hj2qGdL2YfP2+HhTyu2vlS5BVWXf\nkMXaqxjS6+Zt2rdvD3u3q1yCmg7PRJ6O3lUM6b7cbd8e7l/fmrovD2tcgpoOqySkdxVDKmX7\n8fD2XV7ZrHEJKiofDxZrr2pIbw+b8uk//PXXn1x5CSoqn96o+q3dy273uH/YPyN9+0OStelA\nOT4pUTOkl7J5eNndbd5Ker4pz2tcgpqKjo5qvvz9vDl+7/a4ziWoyKt2n9Q9kP11f7Ov6O7x\ndbVLUMnhCElGv/nNBq5iif5LSFzDCv1FSFzBAv1NSFzO+vxDSFzM8vxLSFzK6nxBSFzI4nxF\nSFzEydHXhMQlrMwJQuICFuYUIXE+63KSkDibZTlNSJzLqnxDSJzJonxHSJzHmnxLSJzD8dEP\nhMQZLMhPhMTPrMePhMSPLMfPhMRPrMYZhMQPLMY5hMT3rMVZhMS3LMV5hMQ3HB+dS0icZh3O\nJiROsgznExKnWIULCIkTLMIlhMTXrMFFhMSXLMFlhMQXvOx9KSHxL/N/MSHxD9N/OSHxN7N/\nBSHxF5N/DSHxX+b+KkLiP0z9dYTEZ2b+SkLiyPHR1YTEH6b9ekLiN7O+gJD4YNKXEBLvzPki\nQuLAlC8jJPbM+EJCYmfClxMSjo8CCAmzHUBI0zPZEYQ0O3MdQkiTM9UxhDQ3Mx1ESFMz0VGE\nNDPzHEZI83J8FEhI0zLJkYQ0K3McSkiTMsWxhDQnMxxMSFMywdGCQnp52Cweyg+XII75DRcR\n0uvjTSlC6ofpjbc4pO2vt4rK7XPQeL66BFHK/ujI8dEaFob067bsvYaN599LEOVQkIzWsSSk\n5/u3hjYPL/FrY7HXcJhVIa1jQUibfUX/262xNhZ7BeXjweSuYUFIpTz8fidsOH9dgkDl0xvR\nPCNNoxyflAgX8DPS/4TUh6Kj9XjVbh5etVtR0DnSnXOk7N6PkMzsSvxmwyRM6br8rt0czOjK\n/Pb3FEzo2oQ0A/O5OiFNwHSuT0jjM5sVCGl4JrMGIY3OXFYhpLE5ga1ESEMzkbUIaWTmsRoh\n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\n+fQU0uGZyNMRGXUV0uFBSCTUUUjl40FJ5NNZSOXUX0JTnYVU6fpwoY5C+vhvdURCXYXkVTuy\n6imkj3MkyKevkCApIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEAIUEA\nIUEAIUEAIUGApCFBZ67Y5fHhNJP9XoxvmdTjSz24C2W/F+NbJvX4Ug/uQtnvxfiWST2+1IO7\nUPZ7Mb5lUo8v9eAulP1ejG+Z1ONLPbgLZb8X41sm9fhSD+5C2e/F+JZJPb7Ug7tQ9nsxvmVS\njy/14C6U/V6Mb5nU40s9uAtlvxfjWyb1+FIP7kLZ78X4lkk9vtSDu1D2ezG+ZVKPL/XgoBdC\nggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggBCggDDhPR0UzYP29aj\n+Nb/Mk/2y30p96+tR3HS9mGTe30zr+0lHg7/iMAm8UzvtpvEk/2ce/5eN+/jy1t64rW9xEu5\nf9sDT+W+9UC+cXfNvxZSy2bzstvelYfW4zjh/jCyh8Trm3htL3H3fh+Zt+qvq/7ZnUp+HTbq\ntmxaD+SEkn59847sGokn+rXcJh7dfXlpPYRvfXxXnDb0wULaltvWQzjptrwmDumm7B43h2+P\nc3r8+NbusfVATsq7tld4Ks+th3DKY/mV+fmylLvDD/Otx3HS0/7Vhs1T62GclndtL/e6uWs9\nhFNeyl3qbzzfNunLbnuf9yv+4+FVu7TDGyqk7SbvN3Y3+xeWU4e0/xnptdy0HsgJT/tv7d5C\nz/uUlHdtL3abdRfsf5bff8+ZOqTPf+RzU/Y/vm3Thj5QSK83t4lP6xb8u/NVZD8+yB76OCE9\nJ37BroOQHg9Pma9pJ/H95e+851zDhJR3C3ySNqPDT0fb/c8gv1oP5ISHsv89u4e0v3kxTEj3\nyb/iH2Qe3furYnm/Gt0mH98oIWX/1ukg9eieb8sm79f7t2ejTe7xZV5b6IaQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQ\nIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQelPK613ZPB7e\nf7opN0+Nx8OBkHpTyqa82Zd0u3+n3LYeETsh9eetnO3uqdzsdr/K5mX3sim/Wg8JIfWnlP8d\nHne7u/L89t6zp6QMhNSbUn4/vr/3+w+asgi9EVJKFqE3QkrJIvTmGNLvn5HuGo+InZD6cwzJ\nq3aJCKk3x5CcIyUipN58Cmn3tPGbDUkICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQIICQII\nCQIICQIICQL8H5sEkT1X9RA0AAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "41b872c9", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAaE0lEQVR4nO3d63LeRrIsUFD3I1ki3/9pt6SxtrWPjYHBTnxINNb6QdOe\nYFVFMzM4shQzywswbDn7AJiBIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGA\nIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAIkGAInFly4joIclh8GDL/3s9RYI/\nKRIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIEKBIE\nKBIEKBIEKBIEKBIEKBIEKBIEKBIEXL9I394vTx9fXj69WZ4+JA+CHS5fpOen5btPH398XN4m\nL4J/7/JF+rB8/zn04Wl5//zy/PNzOMHli/T08wuX5fnnX55i98Aely/Ssvz18ddf/s9//JvX\nX8eslhG/z7l6kZ5+K9Lzf/+JpEj8TaoAly/Sr18jfXj+8/P8CiamSH/a8W/tFIm/UaRf/v3v\nIykSf6NIlSu4GkWqXMHVKFLlCq5GkSpXcDWKVLmCq1GkyhVcjSJVruBqFKlyBVejSJUruBpF\nqlzB1ShS5QquRpEqV3A1ilS5gqtRpMoVXI0iVa7gahSpcgVXo0iVK7gaRapcwdUoUuUKrkaR\n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\niYP2zBmmSKE5dTFx0J45wxQpNKcuJg7aM2eYIoXm1MXEQXvmDFOk0Jy6mDhoz5xhihSaUxcT\nB+2ZM0yRQnPqYuKgPXOGKVJoTl1MHLRnzjBFCs2pi4mD9swZdmaRliG/Dyr4rtTFxEF75gw7\ntUgDj1D3XXHQ5Q5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiR\njnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQ\nrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU6\n6jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3\nOkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo\n13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93q\nIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe\n00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuD\nFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpN\nB93qIEU66jUddKuDFOmo13TQrQ5SpKNe00G3OkiRjnpNB93qoJIi/fHx3fLDuw9/vHLFVN8V\nB13uoIoiPb9Z/vL2dSum+q446HIHVRTpw/L0+evPz759eVo+vGrFVN8VB13uoIoiPS1f//fz\nr8vTq1ZM9V1x0OUOqijSsqz9zZ//5DfrM0akBjnotgetBfM1HvATCeY38GukL99+frb5aySY\n36t/vL397Ufkm+fkSXA9A7+P9OHn7yM9vfu48ftIML8H/MkGmJ8iQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAiQYAi\nQYAiQYAiQYAiQYAiXc2yfHu3PH38+fmnN8ubTyffw0+KdDXL8rR896NJb398srw9+yJeFOl6\nvjfn+eXT8ubl5fPy9PXl69Py+eyTUKTrWZY/fn58eXm3fPn+2Rc/khoo0tUsy6+P//ns1184\nlW/C1ShSJd+Eq1GkSr4JV/NXkX79GundyRfxokjX81eR/Fu7Iop0NX8Vye8jFVGkq/mtSC+f\nnvzJhhKKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGK\nBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAGKBAH/Ayzv44rlEgIU\nAAAAAElFTkSuQmCC", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "barplot(df$A, ylab = 'A',xlab = 'no')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "11001454", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "670db495", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "R", - "language": "R", - "name": "ir" - }, - "language_info": { - "codemirror_mode": "r", - "file_extension": ".r", - "mimetype": "text/x-r-source", - "name": "R", - "pygments_lexer": "r", - "version": "4.1.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/2-Working-With-Data/07-python/R/notebook.ipynb b/2-Working-With-Data/07-python/R/notebook.ipynb new file mode 100644 index 00000000..605b2117 --- /dev/null +++ b/2-Working-With-Data/07-python/R/notebook.ipynb @@ -0,0 +1,2131 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9f9b980c", + "metadata": {}, + "source": [ + "## Pandas Usecase in R\n", + " We have to use dplyr library to solve pandas usecase in R. We will start importing typical data science library" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "625abf4a", + "metadata": {}, + "outputs": [], + "source": [ + "options(warn=-1)\n", + "library(dplyr)\n", + "library(tidyverse)\n", + "library(lubridate)\n", + "library(zoo)\n", + "library(xts)\n", + "library('ggplot2')" + ] + }, + { + "cell_type": "markdown", + "id": "d786e051", + "metadata": {}, + "source": [ + "## Series" + ] + }, + { + "cell_type": "markdown", + "id": "0f47587a", + "metadata": {}, + "source": [ + " Series is like a list or 1D-array, but with index. All operations are index-aligned. Indexing of row in R we have to use row.names.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "f659f553", + "metadata": {}, + "outputs": [], + "source": [ + "a<- 1:9" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "9acc193d", + "metadata": {}, + "outputs": [], + "source": [ + "b = c(\"I\",\"like\",\"to\",\"use\",\"Python\",\"and\",\"Pandas\",\"very\",\"much\")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "f577ec14", + "metadata": {}, + "outputs": [], + "source": [ + "a1 = length(a)\n", + "b1 = length(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "31e069a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " a\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "5 5\n", + "6 6\n", + "7 7\n", + "8 8\n", + "9 9\n" + ] + } + ], + "source": [ + "a = data.frame(a,row.names = c(1:a1))\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "29ce166e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " b\n", + "1 I\n", + "2 like\n", + "3 to\n", + "4 use\n", + "5 Python\n", + "6 and\n", + "7 Pandas\n", + "8 very\n", + "9 much\n" + ] + } + ], + "source": [ + "b = data.frame(b,row.names = c(1:b1))\n", + "print(b)" + ] + }, + { + "cell_type": "markdown", + "id": "a83abe74", + "metadata": {}, + "source": [ + " One of the frequent usages of series is time series. In time series, the index has a special structure - typically a range of dates or datetimes. The easiest way to create time series using the ts function. But we will try another way to implement time series. We have to use the lubridate library to create an index of dates using the seq function.\n", + " \n", + " Suppose we have a series that shows the amount of product bought every day, and we know that every Sunday we also need to take one additional item for ourselves. Here is how to model using series:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "eeb683c7", + "metadata": {}, + "outputs": [], + "source": [ + "# We will use ggplot2 for visualizing the data\n", + "# If you want to change the plot size repr library will be used\n", + "library(repr)\n", + "options(repr.plot.width = 12,repr.plot.height=6)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "e7788ca1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"length of index is 366\"\n" + ] + }, + { + "data": { + "image/png": "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\nnXZjTwAAAABJRU5ErkJggg==", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "start_date <- mdy(\"Jan 1, 2020\")\n", + "end_date <- mdy(\"Dec 31, 2020\")\n", + "idx = seq(start_date,end_date,by ='day')\n", + "print(paste(\"length of index is \",length(idx)))\n", + "size = length(idx)\n", + "sales = runif(366,min=25,max=50)\n", + "sold_items <- data.frame(row.names=idx[0:size],sales)\n", + "ggplot(sold_items,aes(x=idx,y=sales)) + geom_point(color = \"firebrick\", shape = \"diamond\", size = 2) +\n", + " geom_line(color = \"firebrick\", size = .3)" + ] + }, + { + "cell_type": "markdown", + "id": "3f199e43", + "metadata": {}, + "source": [ + "We are merging additional_items and sold_items so that we can find the total no of products.\n", + "As you can see, we are having problems here to find the total, we are getting NaN value as in the weekly series non-mentioned days are considered to be missing (NaN) if we add NaN to a number that gives us NaN.\n", + "In order to do addition, we need to replace NAN with 0." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "abe41544", + "metadata": {}, + "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", + "\n", + "
A data.frame: 53 × 1
additional_product
<dbl>
2020-01-0110
2020-01-0810
2020-01-1510
2020-01-2210
2020-01-2910
2020-02-0510
2020-02-1210
2020-02-1910
2020-02-2610
2020-03-0410
2020-03-1110
2020-03-1810
2020-03-2510
2020-04-0110
2020-04-0810
2020-04-1510
2020-04-2210
2020-04-2910
2020-05-0610
2020-05-1310
2020-05-2010
2020-05-2710
2020-06-0310
2020-06-1010
2020-06-1710
2020-06-2410
2020-07-0110
2020-07-0810
2020-07-1510
2020-07-2210
2020-07-2910
2020-08-0510
2020-08-1210
2020-08-1910
2020-08-2610
2020-09-0210
2020-09-0910
2020-09-1610
2020-09-2310
2020-09-3010
2020-10-0710
2020-10-1410
2020-10-2110
2020-10-2810
2020-11-0410
2020-11-1110
2020-11-1810
2020-11-2510
2020-12-0210
2020-12-0910
2020-12-1610
2020-12-2310
2020-12-3010
\n" + ], + "text/latex": [ + "A data.frame: 53 × 1\n", + "\\begin{tabular}{r|l}\n", + " & additional\\_product\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t2020-01-01 & 10\\\\\n", + "\t2020-01-08 & 10\\\\\n", + "\t2020-01-15 & 10\\\\\n", + "\t2020-01-22 & 10\\\\\n", + "\t2020-01-29 & 10\\\\\n", + "\t2020-02-05 & 10\\\\\n", + "\t2020-02-12 & 10\\\\\n", + "\t2020-02-19 & 10\\\\\n", + "\t2020-02-26 & 10\\\\\n", + "\t2020-03-04 & 10\\\\\n", + "\t2020-03-11 & 10\\\\\n", + "\t2020-03-18 & 10\\\\\n", + "\t2020-03-25 & 10\\\\\n", + "\t2020-04-01 & 10\\\\\n", + "\t2020-04-08 & 10\\\\\n", + "\t2020-04-15 & 10\\\\\n", + "\t2020-04-22 & 10\\\\\n", + "\t2020-04-29 & 10\\\\\n", + "\t2020-05-06 & 10\\\\\n", + "\t2020-05-13 & 10\\\\\n", + "\t2020-05-20 & 10\\\\\n", + "\t2020-05-27 & 10\\\\\n", + "\t2020-06-03 & 10\\\\\n", + "\t2020-06-10 & 10\\\\\n", + "\t2020-06-17 & 10\\\\\n", + "\t2020-06-24 & 10\\\\\n", + "\t2020-07-01 & 10\\\\\n", + "\t2020-07-08 & 10\\\\\n", + "\t2020-07-15 & 10\\\\\n", + "\t2020-07-22 & 10\\\\\n", + "\t2020-07-29 & 10\\\\\n", + "\t2020-08-05 & 10\\\\\n", + "\t2020-08-12 & 10\\\\\n", + "\t2020-08-19 & 10\\\\\n", + "\t2020-08-26 & 10\\\\\n", + "\t2020-09-02 & 10\\\\\n", + "\t2020-09-09 & 10\\\\\n", + "\t2020-09-16 & 10\\\\\n", + "\t2020-09-23 & 10\\\\\n", + "\t2020-09-30 & 10\\\\\n", + "\t2020-10-07 & 10\\\\\n", + "\t2020-10-14 & 10\\\\\n", + "\t2020-10-21 & 10\\\\\n", + "\t2020-10-28 & 10\\\\\n", + "\t2020-11-04 & 10\\\\\n", + "\t2020-11-11 & 10\\\\\n", + "\t2020-11-18 & 10\\\\\n", + "\t2020-11-25 & 10\\\\\n", + "\t2020-12-02 & 10\\\\\n", + "\t2020-12-09 & 10\\\\\n", + "\t2020-12-16 & 10\\\\\n", + "\t2020-12-23 & 10\\\\\n", + "\t2020-12-30 & 10\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 53 × 1\n", + "\n", + "| | additional_product <dbl> |\n", + "|---|---|\n", + "| 2020-01-01 | 10 |\n", + "| 2020-01-08 | 10 |\n", + "| 2020-01-15 | 10 |\n", + "| 2020-01-22 | 10 |\n", + "| 2020-01-29 | 10 |\n", + "| 2020-02-05 | 10 |\n", + "| 2020-02-12 | 10 |\n", + "| 2020-02-19 | 10 |\n", + "| 2020-02-26 | 10 |\n", + "| 2020-03-04 | 10 |\n", + "| 2020-03-11 | 10 |\n", + "| 2020-03-18 | 10 |\n", + "| 2020-03-25 | 10 |\n", + "| 2020-04-01 | 10 |\n", + "| 2020-04-08 | 10 |\n", + "| 2020-04-15 | 10 |\n", + "| 2020-04-22 | 10 |\n", + "| 2020-04-29 | 10 |\n", + "| 2020-05-06 | 10 |\n", + "| 2020-05-13 | 10 |\n", + "| 2020-05-20 | 10 |\n", + "| 2020-05-27 | 10 |\n", + "| 2020-06-03 | 10 |\n", + "| 2020-06-10 | 10 |\n", + "| 2020-06-17 | 10 |\n", + "| 2020-06-24 | 10 |\n", + "| 2020-07-01 | 10 |\n", + "| 2020-07-08 | 10 |\n", + "| 2020-07-15 | 10 |\n", + "| 2020-07-22 | 10 |\n", + "| 2020-07-29 | 10 |\n", + "| 2020-08-05 | 10 |\n", + "| 2020-08-12 | 10 |\n", + "| 2020-08-19 | 10 |\n", + "| 2020-08-26 | 10 |\n", + "| 2020-09-02 | 10 |\n", + "| 2020-09-09 | 10 |\n", + "| 2020-09-16 | 10 |\n", + "| 2020-09-23 | 10 |\n", + "| 2020-09-30 | 10 |\n", + "| 2020-10-07 | 10 |\n", + "| 2020-10-14 | 10 |\n", + "| 2020-10-21 | 10 |\n", + "| 2020-10-28 | 10 |\n", + "| 2020-11-04 | 10 |\n", + "| 2020-11-11 | 10 |\n", + "| 2020-11-18 | 10 |\n", + "| 2020-11-25 | 10 |\n", + "| 2020-12-02 | 10 |\n", + "| 2020-12-09 | 10 |\n", + "| 2020-12-16 | 10 |\n", + "| 2020-12-23 | 10 |\n", + "| 2020-12-30 | 10 |\n", + "\n" + ], + "text/plain": [ + " additional_product\n", + "2020-01-01 10 \n", + "2020-01-08 10 \n", + "2020-01-15 10 \n", + "2020-01-22 10 \n", + "2020-01-29 10 \n", + "2020-02-05 10 \n", + "2020-02-12 10 \n", + "2020-02-19 10 \n", + "2020-02-26 10 \n", + "2020-03-04 10 \n", + "2020-03-11 10 \n", + "2020-03-18 10 \n", + "2020-03-25 10 \n", + "2020-04-01 10 \n", + "2020-04-08 10 \n", + "2020-04-15 10 \n", + "2020-04-22 10 \n", + "2020-04-29 10 \n", + "2020-05-06 10 \n", + "2020-05-13 10 \n", + "2020-05-20 10 \n", + "2020-05-27 10 \n", + "2020-06-03 10 \n", + "2020-06-10 10 \n", + "2020-06-17 10 \n", + "2020-06-24 10 \n", + "2020-07-01 10 \n", + "2020-07-08 10 \n", + "2020-07-15 10 \n", + "2020-07-22 10 \n", + "2020-07-29 10 \n", + "2020-08-05 10 \n", + "2020-08-12 10 \n", + "2020-08-19 10 \n", + "2020-08-26 10 \n", + "2020-09-02 10 \n", + "2020-09-09 10 \n", + "2020-09-16 10 \n", + "2020-09-23 10 \n", + "2020-09-30 10 \n", + "2020-10-07 10 \n", + "2020-10-14 10 \n", + "2020-10-21 10 \n", + "2020-10-28 10 \n", + "2020-11-04 10 \n", + "2020-11-11 10 \n", + "2020-11-18 10 \n", + "2020-11-25 10 \n", + "2020-12-02 10 \n", + "2020-12-09 10 \n", + "2020-12-16 10 \n", + "2020-12-23 10 \n", + "2020-12-30 10 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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: 366 × 1
total
<dbl>
2020-01-0153.59979
2020-01-02 NA
2020-01-03 NA
2020-01-04 NA
2020-01-05 NA
2020-01-06 NA
2020-01-07 NA
2020-01-0840.93455
2020-01-09 NA
2020-01-10 NA
2020-01-11 NA
2020-01-12 NA
2020-01-13 NA
2020-01-14 NA
2020-01-1559.24704
2020-01-16 NA
2020-01-17 NA
2020-01-18 NA
2020-01-19 NA
2020-01-20 NA
2020-01-21 NA
2020-01-2238.26416
2020-01-23 NA
2020-01-24 NA
2020-01-25 NA
2020-01-26 NA
2020-01-27 NA
2020-01-28 NA
2020-01-2944.58327
2020-01-30 NA
......
2020-12-0241.74811
2020-12-03 NA
2020-12-04 NA
2020-12-05 NA
2020-12-06 NA
2020-12-07 NA
2020-12-08 NA
2020-12-0937.85650
2020-12-10 NA
2020-12-11 NA
2020-12-12 NA
2020-12-13 NA
2020-12-14 NA
2020-12-15 NA
2020-12-1646.73560
2020-12-17 NA
2020-12-18 NA
2020-12-19 NA
2020-12-20 NA
2020-12-21 NA
2020-12-22 NA
2020-12-2340.42143
2020-12-24 NA
2020-12-25 NA
2020-12-26 NA
2020-12-27 NA
2020-12-28 NA
2020-12-29 NA
2020-12-3041.20298
2020-12-31 NA
\n" + ], + "text/latex": [ + "A data.frame: 366 × 1\n", + "\\begin{tabular}{r|l}\n", + " & total\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t2020-01-01 & 53.59979\\\\\n", + "\t2020-01-02 & NA\\\\\n", + "\t2020-01-03 & NA\\\\\n", + "\t2020-01-04 & NA\\\\\n", + "\t2020-01-05 & NA\\\\\n", + "\t2020-01-06 & NA\\\\\n", + "\t2020-01-07 & NA\\\\\n", + "\t2020-01-08 & 40.93455\\\\\n", + "\t2020-01-09 & NA\\\\\n", + "\t2020-01-10 & NA\\\\\n", + "\t2020-01-11 & NA\\\\\n", + "\t2020-01-12 & NA\\\\\n", + "\t2020-01-13 & NA\\\\\n", + "\t2020-01-14 & NA\\\\\n", + "\t2020-01-15 & 59.24704\\\\\n", + "\t2020-01-16 & NA\\\\\n", + "\t2020-01-17 & NA\\\\\n", + "\t2020-01-18 & NA\\\\\n", + "\t2020-01-19 & NA\\\\\n", + "\t2020-01-20 & NA\\\\\n", + "\t2020-01-21 & NA\\\\\n", + "\t2020-01-22 & 38.26416\\\\\n", + "\t2020-01-23 & NA\\\\\n", + "\t2020-01-24 & NA\\\\\n", + "\t2020-01-25 & NA\\\\\n", + "\t2020-01-26 & NA\\\\\n", + "\t2020-01-27 & NA\\\\\n", + "\t2020-01-28 & NA\\\\\n", + "\t2020-01-29 & 44.58327\\\\\n", + "\t2020-01-30 & NA\\\\\n", + "\t... & ...\\\\\n", + "\t2020-12-02 & 41.74811\\\\\n", + "\t2020-12-03 & NA\\\\\n", + "\t2020-12-04 & NA\\\\\n", + "\t2020-12-05 & NA\\\\\n", + "\t2020-12-06 & NA\\\\\n", + "\t2020-12-07 & NA\\\\\n", + "\t2020-12-08 & NA\\\\\n", + "\t2020-12-09 & 37.85650\\\\\n", + "\t2020-12-10 & NA\\\\\n", + "\t2020-12-11 & NA\\\\\n", + "\t2020-12-12 & NA\\\\\n", + "\t2020-12-13 & NA\\\\\n", + "\t2020-12-14 & NA\\\\\n", + "\t2020-12-15 & NA\\\\\n", + "\t2020-12-16 & 46.73560\\\\\n", + "\t2020-12-17 & NA\\\\\n", + "\t2020-12-18 & NA\\\\\n", + "\t2020-12-19 & NA\\\\\n", + "\t2020-12-20 & NA\\\\\n", + "\t2020-12-21 & NA\\\\\n", + "\t2020-12-22 & NA\\\\\n", + "\t2020-12-23 & 40.42143\\\\\n", + "\t2020-12-24 & NA\\\\\n", + "\t2020-12-25 & NA\\\\\n", + "\t2020-12-26 & NA\\\\\n", + "\t2020-12-27 & NA\\\\\n", + "\t2020-12-28 & NA\\\\\n", + "\t2020-12-29 & NA\\\\\n", + "\t2020-12-30 & 41.20298\\\\\n", + "\t2020-12-31 & NA\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 366 × 1\n", + "\n", + "| | total <dbl> |\n", + "|---|---|\n", + "| 2020-01-01 | 53.59979 |\n", + "| 2020-01-02 | NA |\n", + "| 2020-01-03 | NA |\n", + "| 2020-01-04 | NA |\n", + "| 2020-01-05 | NA |\n", + "| 2020-01-06 | NA |\n", + "| 2020-01-07 | NA |\n", + "| 2020-01-08 | 40.93455 |\n", + "| 2020-01-09 | NA |\n", + "| 2020-01-10 | NA |\n", + "| 2020-01-11 | NA |\n", + "| 2020-01-12 | NA |\n", + "| 2020-01-13 | NA |\n", + "| 2020-01-14 | NA |\n", + "| 2020-01-15 | 59.24704 |\n", + "| 2020-01-16 | NA |\n", + "| 2020-01-17 | NA |\n", + "| 2020-01-18 | NA |\n", + "| 2020-01-19 | NA |\n", + "| 2020-01-20 | NA |\n", + "| 2020-01-21 | NA |\n", + "| 2020-01-22 | 38.26416 |\n", + "| 2020-01-23 | NA |\n", + "| 2020-01-24 | NA |\n", + "| 2020-01-25 | NA |\n", + "| 2020-01-26 | NA |\n", + "| 2020-01-27 | NA |\n", + "| 2020-01-28 | NA |\n", + "| 2020-01-29 | 44.58327 |\n", + "| 2020-01-30 | NA |\n", + "| ... | ... |\n", + "| 2020-12-02 | 41.74811 |\n", + "| 2020-12-03 | NA |\n", + "| 2020-12-04 | NA |\n", + "| 2020-12-05 | NA |\n", + "| 2020-12-06 | NA |\n", + "| 2020-12-07 | NA |\n", + "| 2020-12-08 | NA |\n", + "| 2020-12-09 | 37.85650 |\n", + "| 2020-12-10 | NA |\n", + "| 2020-12-11 | NA |\n", + "| 2020-12-12 | NA |\n", + "| 2020-12-13 | NA |\n", + "| 2020-12-14 | NA |\n", + "| 2020-12-15 | NA |\n", + "| 2020-12-16 | 46.73560 |\n", + "| 2020-12-17 | NA |\n", + "| 2020-12-18 | NA |\n", + "| 2020-12-19 | NA |\n", + "| 2020-12-20 | NA |\n", + "| 2020-12-21 | NA |\n", + "| 2020-12-22 | NA |\n", + "| 2020-12-23 | 40.42143 |\n", + "| 2020-12-24 | NA |\n", + "| 2020-12-25 | NA |\n", + "| 2020-12-26 | NA |\n", + "| 2020-12-27 | NA |\n", + "| 2020-12-28 | NA |\n", + "| 2020-12-29 | NA |\n", + "| 2020-12-30 | 41.20298 |\n", + "| 2020-12-31 | NA |\n", + "\n" + ], + "text/plain": [ + " total \n", + "2020-01-01 53.59979\n", + "2020-01-02 NA\n", + "2020-01-03 NA\n", + "2020-01-04 NA\n", + "2020-01-05 NA\n", + "2020-01-06 NA\n", + "2020-01-07 NA\n", + "2020-01-08 40.93455\n", + "2020-01-09 NA\n", + "2020-01-10 NA\n", + "2020-01-11 NA\n", + "2020-01-12 NA\n", + "2020-01-13 NA\n", + "2020-01-14 NA\n", + "2020-01-15 59.24704\n", + "2020-01-16 NA\n", + "2020-01-17 NA\n", + "2020-01-18 NA\n", + "2020-01-19 NA\n", + "2020-01-20 NA\n", + "2020-01-21 NA\n", + "2020-01-22 38.26416\n", + "2020-01-23 NA\n", + "2020-01-24 NA\n", + "2020-01-25 NA\n", + "2020-01-26 NA\n", + "2020-01-27 NA\n", + "2020-01-28 NA\n", + "2020-01-29 44.58327\n", + "2020-01-30 NA\n", + "... ... \n", + "2020-12-02 41.74811\n", + "2020-12-03 NA\n", + "2020-12-04 NA\n", + "2020-12-05 NA\n", + "2020-12-06 NA\n", + "2020-12-07 NA\n", + "2020-12-08 NA\n", + "2020-12-09 37.85650\n", + "2020-12-10 NA\n", + "2020-12-11 NA\n", + "2020-12-12 NA\n", + "2020-12-13 NA\n", + "2020-12-14 NA\n", + "2020-12-15 NA\n", + "2020-12-16 46.73560\n", + "2020-12-17 NA\n", + "2020-12-18 NA\n", + "2020-12-19 NA\n", + "2020-12-20 NA\n", + "2020-12-21 NA\n", + "2020-12-22 NA\n", + "2020-12-23 40.42143\n", + "2020-12-24 NA\n", + "2020-12-25 NA\n", + "2020-12-26 NA\n", + "2020-12-27 NA\n", + "2020-12-28 NA\n", + "2020-12-29 NA\n", + "2020-12-30 41.20298\n", + "2020-12-31 NA" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "index = seq(start_date,end_date,by = 'week')\n", + "sz = length(index)\n", + "additional_product <- rep(10,53)\n", + "additional_items <- data.frame(row.names = index[0:sz],additional_product)\n", + "additional_items\n", + "# we are merging two dataframe so that we can add\n", + "additional_item = merge(additional_items,sold_items, by = 0, all = TRUE)[-1] \n", + "total = data.frame(row.names=idx[0:size],additional_item$additional_product + additional_item$sales)\n", + "colnames(total) = c('total')\n", + "total" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "387cb4c2", + "metadata": {}, + "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: 366 × 1
total
<dbl>
2020-01-0153.59979
2020-01-0230.41127
2020-01-0348.54839
2020-01-0439.20897
2020-01-0539.09894
2020-01-0647.53019
2020-01-0744.94766
2020-01-0840.93455
2020-01-0937.66561
2020-01-1031.68825
2020-01-1145.30576
2020-01-1226.45509
2020-01-1345.81249
2020-01-1446.84547
2020-01-1559.24704
2020-01-1629.28688
2020-01-1732.41731
2020-01-1845.23295
2020-01-1948.54330
2020-01-2036.69353
2020-01-2143.09588
2020-01-2238.26416
2020-01-2345.56863
2020-01-2425.70944
2020-01-2537.38721
2020-01-2644.53955
2020-01-2746.88427
2020-01-2848.05540
2020-01-2944.58327
2020-01-3026.19490
......
2020-12-0241.74811
2020-12-0335.03915
2020-12-0425.84637
2020-12-0527.73147
2020-12-0639.00993
2020-12-0741.03187
2020-12-0826.33862
2020-12-0937.85650
2020-12-1041.98943
2020-12-1136.68901
2020-12-1246.96883
2020-12-1339.70374
2020-12-1446.59464
2020-12-1541.24742
2020-12-1646.73560
2020-12-1732.68275
2020-12-1846.64238
2020-12-1925.22163
2020-12-2039.79997
2020-12-2134.45013
2020-12-2248.71183
2020-12-2340.42143
2020-12-2432.41991
2020-12-2539.12296
2020-12-2629.43616
2020-12-2739.09337
2020-12-2838.09288
2020-12-2941.00681
2020-12-3041.20298
2020-12-3143.25232
\n" + ], + "text/latex": [ + "A data.frame: 366 × 1\n", + "\\begin{tabular}{r|l}\n", + " & total\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t2020-01-01 & 53.59979\\\\\n", + "\t2020-01-02 & 30.41127\\\\\n", + "\t2020-01-03 & 48.54839\\\\\n", + "\t2020-01-04 & 39.20897\\\\\n", + "\t2020-01-05 & 39.09894\\\\\n", + "\t2020-01-06 & 47.53019\\\\\n", + "\t2020-01-07 & 44.94766\\\\\n", + "\t2020-01-08 & 40.93455\\\\\n", + "\t2020-01-09 & 37.66561\\\\\n", + "\t2020-01-10 & 31.68825\\\\\n", + "\t2020-01-11 & 45.30576\\\\\n", + "\t2020-01-12 & 26.45509\\\\\n", + "\t2020-01-13 & 45.81249\\\\\n", + "\t2020-01-14 & 46.84547\\\\\n", + "\t2020-01-15 & 59.24704\\\\\n", + "\t2020-01-16 & 29.28688\\\\\n", + "\t2020-01-17 & 32.41731\\\\\n", + "\t2020-01-18 & 45.23295\\\\\n", + "\t2020-01-19 & 48.54330\\\\\n", + "\t2020-01-20 & 36.69353\\\\\n", + "\t2020-01-21 & 43.09588\\\\\n", + "\t2020-01-22 & 38.26416\\\\\n", + "\t2020-01-23 & 45.56863\\\\\n", + "\t2020-01-24 & 25.70944\\\\\n", + "\t2020-01-25 & 37.38721\\\\\n", + "\t2020-01-26 & 44.53955\\\\\n", + "\t2020-01-27 & 46.88427\\\\\n", + "\t2020-01-28 & 48.05540\\\\\n", + "\t2020-01-29 & 44.58327\\\\\n", + "\t2020-01-30 & 26.19490\\\\\n", + "\t... & ...\\\\\n", + "\t2020-12-02 & 41.74811\\\\\n", + "\t2020-12-03 & 35.03915\\\\\n", + "\t2020-12-04 & 25.84637\\\\\n", + "\t2020-12-05 & 27.73147\\\\\n", + "\t2020-12-06 & 39.00993\\\\\n", + "\t2020-12-07 & 41.03187\\\\\n", + "\t2020-12-08 & 26.33862\\\\\n", + "\t2020-12-09 & 37.85650\\\\\n", + "\t2020-12-10 & 41.98943\\\\\n", + "\t2020-12-11 & 36.68901\\\\\n", + "\t2020-12-12 & 46.96883\\\\\n", + "\t2020-12-13 & 39.70374\\\\\n", + "\t2020-12-14 & 46.59464\\\\\n", + "\t2020-12-15 & 41.24742\\\\\n", + "\t2020-12-16 & 46.73560\\\\\n", + "\t2020-12-17 & 32.68275\\\\\n", + "\t2020-12-18 & 46.64238\\\\\n", + "\t2020-12-19 & 25.22163\\\\\n", + "\t2020-12-20 & 39.79997\\\\\n", + "\t2020-12-21 & 34.45013\\\\\n", + "\t2020-12-22 & 48.71183\\\\\n", + "\t2020-12-23 & 40.42143\\\\\n", + "\t2020-12-24 & 32.41991\\\\\n", + "\t2020-12-25 & 39.12296\\\\\n", + "\t2020-12-26 & 29.43616\\\\\n", + "\t2020-12-27 & 39.09337\\\\\n", + "\t2020-12-28 & 38.09288\\\\\n", + "\t2020-12-29 & 41.00681\\\\\n", + "\t2020-12-30 & 41.20298\\\\\n", + "\t2020-12-31 & 43.25232\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 366 × 1\n", + "\n", + "| | total <dbl> |\n", + "|---|---|\n", + "| 2020-01-01 | 53.59979 |\n", + "| 2020-01-02 | 30.41127 |\n", + "| 2020-01-03 | 48.54839 |\n", + "| 2020-01-04 | 39.20897 |\n", + "| 2020-01-05 | 39.09894 |\n", + "| 2020-01-06 | 47.53019 |\n", + "| 2020-01-07 | 44.94766 |\n", + "| 2020-01-08 | 40.93455 |\n", + "| 2020-01-09 | 37.66561 |\n", + "| 2020-01-10 | 31.68825 |\n", + "| 2020-01-11 | 45.30576 |\n", + "| 2020-01-12 | 26.45509 |\n", + "| 2020-01-13 | 45.81249 |\n", + "| 2020-01-14 | 46.84547 |\n", + "| 2020-01-15 | 59.24704 |\n", + "| 2020-01-16 | 29.28688 |\n", + "| 2020-01-17 | 32.41731 |\n", + "| 2020-01-18 | 45.23295 |\n", + "| 2020-01-19 | 48.54330 |\n", + "| 2020-01-20 | 36.69353 |\n", + "| 2020-01-21 | 43.09588 |\n", + "| 2020-01-22 | 38.26416 |\n", + "| 2020-01-23 | 45.56863 |\n", + "| 2020-01-24 | 25.70944 |\n", + "| 2020-01-25 | 37.38721 |\n", + "| 2020-01-26 | 44.53955 |\n", + "| 2020-01-27 | 46.88427 |\n", + "| 2020-01-28 | 48.05540 |\n", + "| 2020-01-29 | 44.58327 |\n", + "| 2020-01-30 | 26.19490 |\n", + "| ... | ... |\n", + "| 2020-12-02 | 41.74811 |\n", + "| 2020-12-03 | 35.03915 |\n", + "| 2020-12-04 | 25.84637 |\n", + "| 2020-12-05 | 27.73147 |\n", + "| 2020-12-06 | 39.00993 |\n", + "| 2020-12-07 | 41.03187 |\n", + "| 2020-12-08 | 26.33862 |\n", + "| 2020-12-09 | 37.85650 |\n", + "| 2020-12-10 | 41.98943 |\n", + "| 2020-12-11 | 36.68901 |\n", + "| 2020-12-12 | 46.96883 |\n", + "| 2020-12-13 | 39.70374 |\n", + "| 2020-12-14 | 46.59464 |\n", + "| 2020-12-15 | 41.24742 |\n", + "| 2020-12-16 | 46.73560 |\n", + "| 2020-12-17 | 32.68275 |\n", + "| 2020-12-18 | 46.64238 |\n", + "| 2020-12-19 | 25.22163 |\n", + "| 2020-12-20 | 39.79997 |\n", + "| 2020-12-21 | 34.45013 |\n", + "| 2020-12-22 | 48.71183 |\n", + "| 2020-12-23 | 40.42143 |\n", + "| 2020-12-24 | 32.41991 |\n", + "| 2020-12-25 | 39.12296 |\n", + "| 2020-12-26 | 29.43616 |\n", + "| 2020-12-27 | 39.09337 |\n", + "| 2020-12-28 | 38.09288 |\n", + "| 2020-12-29 | 41.00681 |\n", + "| 2020-12-30 | 41.20298 |\n", + "| 2020-12-31 | 43.25232 |\n", + "\n" + ], + "text/plain": [ + " total \n", + "2020-01-01 53.59979\n", + "2020-01-02 30.41127\n", + "2020-01-03 48.54839\n", + "2020-01-04 39.20897\n", + "2020-01-05 39.09894\n", + "2020-01-06 47.53019\n", + "2020-01-07 44.94766\n", + "2020-01-08 40.93455\n", + "2020-01-09 37.66561\n", + "2020-01-10 31.68825\n", + "2020-01-11 45.30576\n", + "2020-01-12 26.45509\n", + "2020-01-13 45.81249\n", + "2020-01-14 46.84547\n", + "2020-01-15 59.24704\n", + "2020-01-16 29.28688\n", + "2020-01-17 32.41731\n", + "2020-01-18 45.23295\n", + "2020-01-19 48.54330\n", + "2020-01-20 36.69353\n", + "2020-01-21 43.09588\n", + "2020-01-22 38.26416\n", + "2020-01-23 45.56863\n", + "2020-01-24 25.70944\n", + "2020-01-25 37.38721\n", + "2020-01-26 44.53955\n", + "2020-01-27 46.88427\n", + "2020-01-28 48.05540\n", + "2020-01-29 44.58327\n", + "2020-01-30 26.19490\n", + "... ... \n", + "2020-12-02 41.74811\n", + "2020-12-03 35.03915\n", + "2020-12-04 25.84637\n", + "2020-12-05 27.73147\n", + "2020-12-06 39.00993\n", + "2020-12-07 41.03187\n", + "2020-12-08 26.33862\n", + "2020-12-09 37.85650\n", + "2020-12-10 41.98943\n", + "2020-12-11 36.68901\n", + "2020-12-12 46.96883\n", + "2020-12-13 39.70374\n", + "2020-12-14 46.59464\n", + "2020-12-15 41.24742\n", + "2020-12-16 46.73560\n", + "2020-12-17 32.68275\n", + "2020-12-18 46.64238\n", + "2020-12-19 25.22163\n", + "2020-12-20 39.79997\n", + "2020-12-21 34.45013\n", + "2020-12-22 48.71183\n", + "2020-12-23 40.42143\n", + "2020-12-24 32.41991\n", + "2020-12-25 39.12296\n", + "2020-12-26 29.43616\n", + "2020-12-27 39.09337\n", + "2020-12-28 38.09288\n", + "2020-12-29 41.00681\n", + "2020-12-30 41.20298\n", + "2020-12-31 43.25232" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "additional_item[is.na(additional_item)] = 0\n", + "total = data.frame(row.names=idx[0:size],additional_item$additional_product + additional_item$sales)\n", + "colnames(total) = c('total')\n", + "total" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "bdb60236", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "ggplot(total,aes(x=idx,y=total)) + geom_point(color = \"firebrick\", shape = \"diamond\", size = 2) +\n", + " geom_line(color = \"firebrick\", linetype = \"dotted\", size = .3)" + ] + }, + { + "cell_type": "markdown", + "id": "38e65fd5", + "metadata": {}, + "source": [ + "We want to analyse total no of product in monthly basis.Thus, we find the mean of total no of product in a month and draw a bargraph" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "294dde87", + "metadata": {}, + "outputs": [], + "source": [ + "index = seq(start_date,end_date,by ='month')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "7542d95e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " total\n", + "2020-01-31 41.03847\n", + "2020-02-29 40.91568\n", + "2020-03-31 39.27424\n", + "2020-04-30 37.63589\n", + "2020-05-31 38.75129\n", + "2020-06-30 38.75744\n", + "2020-07-31 38.35212\n", + "2020-08-31 40.43712\n", + "2020-09-30 38.90043\n", + "2020-10-31 37.99855\n", + "2020-11-30 41.20759\n", + "2020-12-31 38.46355" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "x<- as.xts(total, dateFormat =\"Date\")\n", + "(monthly<-apply.monthly(x,mean))\n", + "ggplot(monthly, aes(x=index, y=total)) + \n", + " geom_bar(stat = \"identity\", width=5) " + ] + }, + { + "cell_type": "markdown", + "id": "945feffd", + "metadata": {}, + "source": [ + "## DataFrame\n", + "Dataframe is essentially a collection of series with the same index. We can combine several series together into a dataframe. \n", + "For example we are making dataframe of a and b series" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "88a435ec", + "metadata": {}, + "outputs": [], + "source": [ + "a = data.frame(a,row.names = c(1:a1))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "c4e2a6c1", + "metadata": {}, + "outputs": [], + "source": [ + "b = data.frame(b,row.names = c(1:b1))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "2bb5177c", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 2
ab
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" + ], + "text/latex": [ + "A data.frame: 9 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & a & b\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like \\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\t5 & 5 & Python\\\\\n", + "\t6 & 6 & and \\\\\n", + "\t7 & 7 & Pandas\\\\\n", + "\t8 & 8 & very \\\\\n", + "\t9 & 9 & much \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 2\n", + "\n", + "| | a <int> | b <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "| 5 | 5 | Python |\n", + "| 6 | 6 | and |\n", + "| 7 | 7 | Pandas |\n", + "| 8 | 8 | very |\n", + "| 9 | 9 | much |\n", + "\n" + ], + "text/plain": [ + " a b \n", + "1 1 I \n", + "2 2 like \n", + "3 3 to \n", + "4 4 use \n", + "5 5 Python\n", + "6 6 and \n", + "7 7 Pandas\n", + "8 8 very \n", + "9 9 much " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df<- data.frame(a,b)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "6531fe0e", + "metadata": {}, + "source": [ + "We can also rename the column name by using rename function" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "8f45d3a5", + "metadata": {}, + "outputs": [], + "source": [ + "df = \n", + " rename(df,\n", + " A = a,\n", + " B = b,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "0efbf2d4", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 2
AB
<int><chr>
11I
22like
33to
44use
55Python
66and
77Pandas
88very
99much
\n" + ], + "text/latex": [ + "A data.frame: 9 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like \\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\t5 & 5 & Python\\\\\n", + "\t6 & 6 & and \\\\\n", + "\t7 & 7 & Pandas\\\\\n", + "\t8 & 8 & very \\\\\n", + "\t9 & 9 & much \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "| 5 | 5 | Python |\n", + "| 6 | 6 | and |\n", + "| 7 | 7 | Pandas |\n", + "| 8 | 8 | very |\n", + "| 9 | 9 | much |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like \n", + "3 3 to \n", + "4 4 use \n", + "5 5 Python\n", + "6 6 and \n", + "7 7 Pandas\n", + "8 8 very \n", + "9 9 much " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "8ac0204f", + "metadata": {}, + "source": [ + "We can also select a column in a dataframe using select function" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "88b51fdc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Column A (series):\n" + ] + }, + { + "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", + "\n", + "
A data.frame: 9 × 1
A
<int>
11
22
33
44
55
66
77
88
99
\n" + ], + "text/latex": [ + "A data.frame: 9 × 1\n", + "\\begin{tabular}{r|l}\n", + " & A\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t1 & 1\\\\\n", + "\t2 & 2\\\\\n", + "\t3 & 3\\\\\n", + "\t4 & 4\\\\\n", + "\t5 & 5\\\\\n", + "\t6 & 6\\\\\n", + "\t7 & 7\\\\\n", + "\t8 & 8\\\\\n", + "\t9 & 9\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 1\n", + "\n", + "| | A <int> |\n", + "|---|---|\n", + "| 1 | 1 |\n", + "| 2 | 2 |\n", + "| 3 | 3 |\n", + "| 4 | 4 |\n", + "| 5 | 5 |\n", + "| 6 | 6 |\n", + "| 7 | 7 |\n", + "| 8 | 8 |\n", + "| 9 | 9 |\n", + "\n" + ], + "text/plain": [ + " A\n", + "1 1\n", + "2 2\n", + "3 3\n", + "4 4\n", + "5 5\n", + "6 6\n", + "7 7\n", + "8 8\n", + "9 9" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cat(\"Column A (series):\\n\")\n", + "select(df,'A')" + ] + }, + { + "cell_type": "markdown", + "id": "45397ec4", + "metadata": {}, + "source": [ + "We will extract rows that meet a certain logical criteria on series" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "010bcba8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 4 × 2
AB
<int><chr>
11I
22like
33to
44use
\n" + ], + "text/latex": [ + "A data.frame: 4 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I \\\\\n", + "\t2 & 2 & like\\\\\n", + "\t3 & 3 & to \\\\\n", + "\t4 & 4 & use \\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 4 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 1 | 1 | I |\n", + "| 2 | 2 | like |\n", + "| 3 | 3 | to |\n", + "| 4 | 4 | use |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "1 1 I \n", + "2 2 like\n", + "3 3 to \n", + "4 4 use " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A<5,]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "082277db", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "
A data.frame: 1 × 2
AB
<int><chr>
66and
\n" + ], + "text/latex": [ + "A data.frame: 1 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & A & B\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t6 & 6 & and\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 1 × 2\n", + "\n", + "| | A <int> | B <chr> |\n", + "|---|---|---|\n", + "| 6 | 6 | and |\n", + "\n" + ], + "text/plain": [ + " A B \n", + "6 6 and" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[df$A>5 & df$A<7,]" + ] + }, + { + "cell_type": "markdown", + "id": "bf537050", + "metadata": {}, + "source": [ + "Creating a new columns. \n", + "\n", + "Code below creates a series which calculates the divergence of a from its mean value then merging into a existing dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "0bbd19f8", + "metadata": {}, + "outputs": [], + "source": [ + "df$DivA <- df$A - mean(df$A)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "f36d96af", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 3
ABDivA
<int><chr><dbl>
11I -4
22like -3
33to -2
44use -1
55Python 0
66and 1
77Pandas 2
88very 3
99much 4
\n" + ], + "text/latex": [ + "A data.frame: 9 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & A & B & DivA\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4\\\\\n", + "\t2 & 2 & like & -3\\\\\n", + "\t3 & 3 & to & -2\\\\\n", + "\t4 & 4 & use & -1\\\\\n", + "\t5 & 5 & Python & 0\\\\\n", + "\t6 & 6 & and & 1\\\\\n", + "\t7 & 7 & Pandas & 2\\\\\n", + "\t8 & 8 & very & 3\\\\\n", + "\t9 & 9 & much & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 3\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> |\n", + "|---|---|---|---|\n", + "| 1 | 1 | I | -4 |\n", + "| 2 | 2 | like | -3 |\n", + "| 3 | 3 | to | -2 |\n", + "| 4 | 4 | use | -1 |\n", + "| 5 | 5 | Python | 0 |\n", + "| 6 | 6 | and | 1 |\n", + "| 7 | 7 | Pandas | 2 |\n", + "| 8 | 8 | very | 3 |\n", + "| 9 | 9 | much | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA\n", + "1 1 I -4 \n", + "2 2 like -3 \n", + "3 3 to -2 \n", + "4 4 use -1 \n", + "5 5 Python 0 \n", + "6 6 and 1 \n", + "7 7 Pandas 2 \n", + "8 8 very 3 \n", + "9 9 much 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "2be67ef7", + "metadata": {}, + "source": [ + "We are creating a series which calculates the length of string of A column then merge into existing dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "c67f2bd0", + "metadata": {}, + "outputs": [], + "source": [ + "df$LenB <- str_length(df$B)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "cef214b2", + "metadata": {}, + "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", + "\n", + "
A data.frame: 9 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
77Pandas 26
88very 34
99much 44
\n" + ], + "text/latex": [ + "A data.frame: 9 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\t7 & 7 & Pandas & 2 & 6\\\\\n", + "\t8 & 8 & very & 3 & 4\\\\\n", + "\t9 & 9 & much & 4 & 4\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 9 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "| 7 | 7 | Pandas | 2 | 6 |\n", + "| 8 | 8 | very | 3 | 4 |\n", + "| 9 | 9 | much | 4 | 4 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 \n", + "7 7 Pandas 2 6 \n", + "8 8 very 3 4 \n", + "9 9 much 4 4 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "e37d50de", + "metadata": {}, + "source": [ + "Selecting rows based on numbers " + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "59fe5316", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 5 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
\n" + ], + "text/latex": [ + "A data.frame: 5 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 5 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df[0:5,]" + ] + }, + { + "cell_type": "markdown", + "id": "6abec1b7", + "metadata": {}, + "source": [ + "***Grouping means which groups the multiple columns based on certain conditions and we will use summarise function to see the difference***\n", + "\n", + "Suppose that we want to compute the mean value of column A for each given number of LenB. Then we can group our DataFrame by LenB, and find mean name them as a" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "f944a949", + "metadata": {}, + "outputs": [], + "source": [ + "df1 = df %>% group_by(LenB) %>% summarise(a = mean(A))" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "8ffd39cd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
LenBa
<int><dbl>
11.000000
23.000000
35.000000
46.333333
66.000000
\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " LenB & a\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t 1 & 1.000000\\\\\n", + "\t 2 & 3.000000\\\\\n", + "\t 3 & 5.000000\\\\\n", + "\t 4 & 6.333333\\\\\n", + "\t 6 & 6.000000\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| LenB <int> | a <dbl> |\n", + "|---|---|\n", + "| 1 | 1.000000 |\n", + "| 2 | 3.000000 |\n", + "| 3 | 5.000000 |\n", + "| 4 | 6.333333 |\n", + "| 6 | 6.000000 |\n", + "\n" + ], + "text/plain": [ + " LenB a \n", + "1 1 1.000000\n", + "2 2 3.000000\n", + "3 3 5.000000\n", + "4 4 6.333333\n", + "5 6 6.000000" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "3b859950", + "metadata": {}, + "outputs": [], + "source": [ + "df2 = df %>% group_by(LenB) %>%\n", + "summarise(MEAN = mean(A),count =length(DivA))" + ] + }, + { + "cell_type": "markdown", + "id": "5d3f0287", + "metadata": {}, + "source": [ + "## Printing and Plotting\n", + " When We call head(df) it will print out dataframe in a tabular form.\n", + "\n", + "The first step of any data science project is data cleaning and visualization, thus it is important to visualize the dataset and extract some useful imformation." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "69946dc7", + "metadata": {}, + "outputs": [], + "source": [ + "#dataset = read.csv(\"file name\")" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "4976f190", + "metadata": {}, + "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", + "\n", + "
A data.frame: 6 × 4
ABDivALenB
<int><chr><dbl><int>
11I -41
22like -34
33to -22
44use -13
55Python 06
66and 13
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & A & B & DivA & LenB\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\t1 & 1 & I & -4 & 1\\\\\n", + "\t2 & 2 & like & -3 & 4\\\\\n", + "\t3 & 3 & to & -2 & 2\\\\\n", + "\t4 & 4 & use & -1 & 3\\\\\n", + "\t5 & 5 & Python & 0 & 6\\\\\n", + "\t6 & 6 & and & 1 & 3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| | A <int> | B <chr> | DivA <dbl> | LenB <int> |\n", + "|---|---|---|---|---|\n", + "| 1 | 1 | I | -4 | 1 |\n", + "| 2 | 2 | like | -3 | 4 |\n", + "| 3 | 3 | to | -2 | 2 |\n", + "| 4 | 4 | use | -1 | 3 |\n", + "| 5 | 5 | Python | 0 | 6 |\n", + "| 6 | 6 | and | 1 | 3 |\n", + "\n" + ], + "text/plain": [ + " A B DivA LenB\n", + "1 1 I -4 1 \n", + "2 2 like -3 4 \n", + "3 3 to -2 2 \n", + "4 4 use -1 3 \n", + "5 5 Python 0 6 \n", + "6 6 and 1 3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "head(df)" + ] + }, + { + "cell_type": "markdown", + "id": "dcca35a8", + "metadata": {}, + "source": [ + "ggplot2 is a very good library as it simple to create complex plots from data in a data frame.\n", + "\n", + "It provides a more programmatic interface for specifying what variables to plot, how they are displayed, and general visual properties." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "515c95b2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(df$A,type = 'o',xlab = \"no\",ylab = \"A\")" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "41b872c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABaAAAALQCAMAAABR+ye1AAAAM1BMVEUAAABNTU1oaGh8fHyM\njIyampqnp6eysrK9vb2+vr7Hx8fQ0NDZ2dnh4eHp6enw8PD////ojgWfAAAACXBIWXMAABJ0\nAAASdAHeZh94AAAb0klEQVR4nO3d7ZYUh5FF0WyarwFB9/s/7QAWAttIsoqKqkPk3j8wtpcU\nZ7Ky7sIsPD6eAUg67h0AwI8ZaIAoAw0QZaABogw0QJSBBogy0ABRBhogykADRBlogCgDDRBl\noAGiDDRAlIEGiDLQAFEGGiDKQANEGWiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaIAo\nAw0QZaABogw0QJSBBogy0ABRBhogykADRBlogCgDDRBloAGiDDRAlIEGiDLQAFEGGiDKQANE\nGWiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaIAoAw0QZaABogw0QJSBBogy0ABRBhog\nykADRBlogCgDDRBloAGiDDRAlIEGiDLQAFEGGiDKQANEGWiAKAMNEGWgAaIMNECUgQaIMtAA\nUQYaIMpAA0QZaIAoAw0QZaABogw0QJSBBogy0ABRBhogykADRBlogCgDDRBloAGiDDRAlIEG\niDLQAFEGGiDKQANEGWiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaGCF4+Zu8H/T/AmA\necf/3ZiBBvjfGGiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaIAoAw0QZaABogw0QJSB\nBogy0ABRBhogykADRBlogCgDDRBloAGiDDRAlIEGiDLQAFEGGiDKQANEGWiAKAMNEGWgAaIM\nNECUgQaIMtAAUQYaIMpAA0QZaIAoAw0QZaABogw0QJSBBogy0ABRBhogykADRBlogCgDDRBl\noAGiDDRAlIEGiDLQAFEGGiDKQANEGejvfHx1PLx5fn774nh4fc0ggEsY6G+eHo5P3r75/OPx\neNUkgH/OQH/z+vj06+bXD8erp+enLz8HuCcD/c3Dl7/wOJ6+/MPD1XoALmKgv/vrjm8/fv2H\nf/u3v3N5HdB33NyPMwz0Hx6+G+inv/4VtIGG1SLLGMm47qO98K/7+nvQr59+//n1TwC/hMgy\nRjKu+2gv/Ov+wZ/iMNCwWmQZIxnXfbSX/oX/+5+DNtCwWmQZIxnXfbQrTgD3E1nGSMZ1H+2K\nE8D9RJYxknHdR7viBHA/kWWMZFz30a44AdxPZBkjGdd9tCtOAPcTWcZIxnUf7YoTwP1EljGS\ncd1Hu+IEcD+RZYxkXPfRrjgB3E9kGSMZ1320K04A9xNZxkjGdR/tihPA/USWMZJx3Ue74gRw\nP5FljGRc99GuOAHcT2QZIxnXfbQrTgD3E1nGSMZ1H+2KE8D9RJYxknHdR7viBHA/kWWMZFz3\n0a44AdxPZBkjGdd9tCtOAPcTWcZIxnUf7YoTwP1EljGScd1Hu+IEcD+RZYxkXPfRrjgB3E9k\nGSMZ1320K04A9xNZxkjGdR/tihPA/USWMZJx3Ue74gRwP5FljGRc99GuOAHcT2QZIxnXfbQr\nTgD3E1nGSMZ1H+2KE8D9RJYxknHdR7viBHA/kWWMZFz30a44AdxPZBkjGdd9tCtOAPcTWcZI\nxnUf7YoTwP1EljGScd1Hu+IEcD+RZYxkXPfRrjgB3E9kGSMZ1320K04A9xNZxkjGdR/tihPA\n/USWMZJx3Ue74gRwP5FljGRc99GuOAHcT2QZIxnXfbQrTgD3E1nGSMZ1H+2KE8D9RJYxknHd\nR7viBHA/kWWMZFz30a44AdxPZBkjGdd9tCtOAPcTWcZIxnUf7YoTwP1EljGScd1Hu+IEcD+R\nZYxkXPfRrjgB3E9kGSMZ1320K04A9xNZxkjGdR/tihPA/USWMZJx3Ue74gRwP5FljGRc99Gu\nOAHcT2QZIxnXfbQrTgD3E1nGSMZ1H+2KE8D9RJYxknHdR7viBJzScXM/zmgsYyTjqnacgFOK\nTJKMMTtOwClFJknGmB0n4JQikyRjzI4TcEqRSZIxZscJOKXIJMkYs+MEnFJkkmSM2XECTiky\nSTLG7DgBpxSZJBljdpyAU4pMkowxO07AKUUmScaYHSfglCKTJGPMjhNwSpFJkjFmxwk4pcgk\nyRiz4wScUmSSZIzZcQJOKTJJMsbsOAGnFJkkGWN2nIBTikySjDE7TsApRSZJxpgdJ+CUIpMk\nY8yOE3BKkUmSMWbHCTilyCTJGLPjBJxSZJJkjNlxAk4pMkkyxuw4AacUmSQZY3acgFOKTJKM\nMTtOwClFJknGmB0n4JQikyRjzI4TcEqRSZIxZscJOKXIJMkYs+MEnFJkkmSM2XECTikySTLG\n7DgBpxSZJBljdpyAU4pMkowxO07AKUUmScaYHSfglCKTJGPMjhNwSpFJkjFmxwk4pcgkyRiz\n4wScUmSSZIzZcQJOKTJJMsbsOAGnFJkkGWN2nIBTikySjDE7TsApRSZJxpgdJ+CUIpMkY8yO\nE3BKkUmSMWbHCTilyCTJGLPjBJxSZJJkjNlxAk4pMkkyxuw4AacUmSQZY3acgFOKTJKMMTtO\nwClFJknGmItPPL1++PTjmxfH8fhu6ATwlyKTJGPMpSc+PhzH89OnHz57HDkB/LXIJMkYc+mJ\nV8fLp08/vPr4aatfHa8nTgB/LTJJMsZceuI4nn7/4fn56XiYOAH8tcgkyRhz+UB/+uHh+O6f\n/Me//Z3L6yDpuLk/6WhMkowxl/8Wx4fn5zeff/j8K+i//E1oA802lSmIdMgYc+mJD8fD6w/P\nLx8+LfT7F8f7iRNQVZmCSIeMMRefeP/w7T9+vZk5AVGVKYh0yBjzEyfevXrxeZ1fvvk4dgKS\nKlMQ6ZAxZscJuKnKFEQ6ZIzZcQJuqjIFkQ4ZY3acgJuqTEGkQ8aYHSfgpipTEOmQMWbHCbip\nyhREOmSM2XECbqoyBZEOGWN2nICbqkxBpEPGmB0n4KYqUxDpkDFmxwm4qcoURDpkjNlxAm6q\nMgWRDhljdpyAm6pMQaRDxpgdJ+CmKlMQ6ZAxZscJuKnKFEQ6ZIzZcQJuqjIFkQ4ZY3acgJuq\nTEGkQ8aYHSfgpipTEOmQMWbHCbipyhREOmSM2XECbqoyBZEOGWN2nICbqkxBpEPGmB0n4KYq\nUxDpkDFmxwm4qcoURDpkjNlxAm6qMgWRDhljdpyAm6pMQaRDxpgdJ+CmKlMQ6ZAxZscJuKnK\nFEQ6ZIzZcQJuqjIFkQ4ZY3acgJuqTEGkQ8aYHSfgpipTEOmQMWbHCbipyhREOmSM2XECbqoy\nBZEOGWN2nICbqkxBpEPGmB0n4KYqUxDpkDFmxwm4qcoURDpkjNlxAm6qMgWRDhljdpyAm6pM\nQaRDxpgdJ+CmKlMQ6ZAxZscJuKnKFEQ6ZIzZcQJuqjIFkQ4ZY3acgJuqTEGkQ8aYHSfgpipT\nEOmQMWbHCbipyhREOmSM2XECbqoyBZEOGWN2nICbqkxBpEPGmB0n4KYqUxDpkDFmxwm4qcoU\nRDpkjNlxAm6qMgWRDhljdpyAm6pMQaRDxpgdJ+CmKlMQ6ZAxZscJuKnKFEQ6ZIzZcQJuqjIF\nkQ4ZY3ac4CyOm/txRmQKIh0yxuw4wVlEvoORjEqHjDE7TnAWke9gJKPSIWPMjhOcReQ7GMmo\ndMgYs+MEZxH5DkYyKh0yxuw4wVlEvoORjEqHjDE7TnAWke9gJKPSIWPMjhOcReQ7GMmodMgY\ns+MEZxH5DkYyKh0yxuw4wVlEvoORjEqHjDE7TnAWke9gJKPSIWPMjhOcReQ7GMmodMgYs+ME\nZxH5DkYyKh0yxuw4wVlEvoORjEqHjDE7TnAWke9gJKPSIWPMjhOcReQ7GMmodMgYs+MEZxH5\nDkYyKh0yxuw4wVlEvoORjEqHjDE7TnAWke9gJKPSIWPMjhOcReQ7GMmodMgYs+MEZxH5DkYy\nKh0yxuw4wVlEvoORjEqHjDE7TnAWke9gJKPSIWPMj058eP0wfQIuEvkORjIqHTLG/NeJj29e\nHIeBpinyHYxkVDpkjPn3E0/vPq3z8fh+8AT8hMh3MJJR6ZAx5vsT7x6Pzz4OnoCfEvkORjIq\nHTLG/HHi/atP2/zw+sNx9aMGmquJfAcjGZUOGWO+nnj4vM6/ff4XDDRdke9gJKPSIWPM1xPH\n8frrT6ZOwE+LfAcjGZUOGWP8CppfSeQ7GMmodMgY85+/B/2bgSYs8h2MZFQ6ZIzxpzj4lUS+\ng5GMSoeMMT/6c9Av/TlooiLfwUhGpUPGGP9NQn4lke9gJKPSIWOM/18c/Eoi38FIRqVDxpgd\nJziLyHcwklHpkDFmxwnOIvIdjGRUOmSM2XGCs4h8ByMZlQ4ZY3ac4Cwi38FIRqVDxpgdJziL\nyHcwklHpkDFmxwnOIvIdjGRUOmSM2XGCs4h8ByMZlQ4ZY3ac4Cwi38FIRqVDxpgdJziLyHcw\nklHpkDFmxwnOIvIdjGRUOmSM2XGCs4h8ByMZlQ4ZY3ac4Cwi38FIRqVDxpgdJziLyHcwklHp\nkDFmxwnOIvIdjGRUOmSM+fkTf/u/kWWguZrIdzCSUemQMcZA8yuJfAcjGZUOGWMuPXH8u4kT\n8F8i38FIRqVDxphLT/z2YKC5vch3MJJR6ZAx5uITTy+Pxy//+98/XOf/eb35RRw39+OMxncw\nklHpkDHmJ068O453z34P+iQiL7+MYoeMMT9z4uPj8fLJQJ9D5OWXUeyQMebnTrw5Ht4b6FOI\nvPwyih0yxvzkiQ8v/v73mA30BpGXX0axQ8aYnz7xykCfQuTll1HskDFmxwnGRV5+GcUOGWN2\nnGBc5OWXUeyQMWbHCcZFXn4ZxQ4ZY3acYFzk5ZdR7JAxZscJxkVefhnFDhljdpxgXOTll1Hs\nkDFmxwnGRV5+GcUOGWN2nGBc5OWXUeyQMWbHCcZFXn4ZxQ4ZY3acYFzk5ZdR7JAxZscJxkVe\nfhnFDhljdpxgXOTll1HskDFmxwnGRV5+GcUOGWN2nGBc5OWXUeyQMWbHCcZFXn4ZxQ4ZY3ac\nYFzk5ZdR7JAxZscJxkVefhnFDhljdpxgXOTll1HskDFmxwnGRV5+GcUOGWN2nGBc5OWXUeyQ\nMWbHCcZFXn4ZxQ4ZY3acYFzk5ZdR7JAxZscJxkVefhnFDhljdpxgXOTll1HskDFmxwnGRV5+\nGcUOGWN2nGBc5OWXUeyQMWbHCcZFXn4ZxQ4ZY3acYFzk5ZdR7JAxZscJxkVefhnFDhljdpxg\nXOTll1HskDFmxwnGRV5+GcUOGWN2nGBc5OWXUeyQMWbHCcZFXn4ZxQ4ZY3acYFzk5ZdR7JAx\nZscJxkVefhnFDhljdpxgXOTll1HskDFmxwnGRV5+GcUOGWN2nGBc5OWXUeyQMWbHCcZFXn4Z\nxQ4ZY3acYFzk5ZdR7JAxZscJxkVefhnFDhljdpxgXOTll1HskDFmxwnGRV5+GcUOGWN2nGBc\n5OWXUeyQMWbHCcZFXn4ZxQ4ZY3acYFzk5ZdR7JAxZscJxkVefhnFDhljdpxgXOTll1HskDFm\nxwnGRV5+GcUOGWN2nFjsuLk/6Wi8/DKKHTLG7DixWOWli3TIKHbIGLPjxGKVly7SIaPYIWPM\njhOLVV66SIeMYoeMMTtOLFZ56SIdMoodMsbsOLFY5aWLdMgodsgYs+PEYpWXLtIho9ghY8yO\nE4tVXrpIh4xih4wxO04sVnnpIh0yih0yxuw4sVjlpYt0yCh2yBiz48RilZcu0iGj2CFjzI4T\ni1VeukiHjGKHjDE7TixWeekiHTKKHTLG7DixWOWli3TIKHbIGLPjxGKVly7SIaPYIWPMjhOL\nVV66SIeMYoeMMTtOLFZ56SIdMoodMsbsOLFY5aWLdMgodsgYs+PEYpWXLtIho9ghY8yOE4tV\nXrpIh4xih4wxO04sVnnpIh0yih0yxuw4sVjlpYt0yCh2yBiz48RilZcu0iGj2CFjzI4Ti1Ve\nukiHjGKHjDE7TixWeekiHTKKHTLG7DixWOWli3TIKHbIGLPjxGKVly7SIaPYIWPMjhOLVV66\nSIeMYoeMMTtOLFZ56SIdMoodMsbsOLFY5aWLdMgodsgYs+PEYpWXLtIho9ghY8yOE4tVXrpI\nh4xih4wxO04sVnnpIh0yih0yxuw4sVjlpYt0yCh2yBiz48RilZcu0iGj2CFjzI4Ti1VeukiH\njGKHjDE7TixWeekiHTKKHTLG7DixWOWli3TIKHbIGLPjxGKVly7SIaPYIWPMjhOLVV66SIeM\nYoeMMTtOLFZ56SIdMoodMsbsOLFY5aWLdMgodsgYs+PEYpWXLtIho9ghY8yOE4tVXrpIh4xi\nh4wxO04sVnnpIh0yih0yxuw4sVjlpYt0yCh2yBiz48RilZcu0iGj2CFjzI4Ti1VeukiHjGKH\njDE7TixWeekiHTKKHTLG7DixWOWli3TIKHbIGLPjxGKVly7SIaPYIWPMxSeeXh3H4/vf/yZ/\n+Xcx0D+j8tJFOmQUO2SMufTE08Px2ct//U0M9JjKSxfpkFHskDHm0hOvj7efVvrtw+OXv4mB\nHlN56SIdMoodMsZceuLhX3/hx4cXHw30pMpLF+mQUeyQMebSE183+enx8UcDfXzvJ/Lu6Li5\nH2dEXrpIh4xih4wxl554cTx9/dnjzl9BRz7tSEalQ0axQ8aYS0+8PV79/rOPx6OBnvu0IxmV\nDhnFDhljLj7x+o9Vfv83v4thoH/m045kVDpkFDtkjLn8xIeXX3/28ZWBHvu0IxmVDhnFDhlj\ndpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmV\nDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyY\nEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnF\nDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0\nIxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhlj\ndpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmV\nDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyY\nEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnF\nDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0\nIxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhlj\ndpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmV\nDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyY\nEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnF\nDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljdpyYEPm0IxmVDhnFDhljgieOm/tx\nRuPTjmRUOmQUO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLy\nmGUUO2QUO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUU\nO2QUO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QU\nO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SM\nCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6I\nPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZ\nxQ4ZxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZxQ4Z\nxQ4ZY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZxQ4ZxQ4Z\nY4InIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZxQ4ZxQ4ZY4In\nIo9ZRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9Z\nRrFDRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFD\nRrFDxpjgichjllHskFHskDEmeCLymGUUO2QUO2SMCZ6IPGYZxQ4ZxQ4ZY4InIo9ZRrFDRrFD\nxpjLT/z25uXx2cvXv133ROQxyyh2yCh2yBhz6YmnF8c3j1c9EXnMMoodMoodMsZceuL18fDu\nw5effXz/cLy+5onIY5ZR7JBR7JAx5tITD8eHP37+4Xi45onIY5ZR7JBR7JAx5tITx/Fn/+T3\nf+U7//hvfWsy/jaj0iGj2CFjzA1+BQ3AJX7i96Dff/zys7/9PWgALnHxL9Ifv/uF/ounayYB\n8NlP/Dno11/+HPTDyzd/8+egAbjEDX6bG4BLGGiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpA\nA0QZaIAoAw0QZaABogw0QJSBBogy0ABRBhogykADRBlogCgDDRBloAGiDDRAlIEGiDLQAFEG\nGiDKQANEGWiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaIAoAw0QZaABogw0QJSBBogy\n0ABRBhogykADRBlogCgDDRBloAGiDDRAlIEGiDLQAFEGGiDKQANEGWiAKAMNEGWgAaIMNECU\ngQaIMtAAUQYaIMpAA0QZaIAoAw0QZaABogw0QJSBBogy0ABRBhogykADRBlogCgDDRBloAGi\nDDRAlIEGiDLQAFEGGiDKQANEGWiAKAMNEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaPY6jo8v\nj4c3X37+9sXx4u2de+AfMtDsdRwPxyefF/rx80+Ox3sXwT9ioNnr0yI/Pb89Xjw/vzsePjx/\neDje3TsJ/gkDzV7H8duXH5+fXx7vP/3svV9C82sx0Ox1HF9//NfPvv4D/CK8sOxloPnFeWHZ\ny0Dzi/PCste3gf76e9Av71wE/4iBZq9vA+1PcfBLMtDs9W2g/TlofkkGmr2+G+jntw/+m4T8\ncgw0QJSBBogy0ABRBhogykADRBlogCgDDRBloAGiDDRAlIEGiDLQAFEGGiDKQANEGWiAKAMN\nEGWgAaIMNECUgQaIMtAAUQYaIMpAA0QZaIAoAw0QZaABogw0QJSBBogy0ABRBhogykADRBlo\ngCgDDRD1/8/symIMSQHiAAAAAElFTkSuQmCC", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 720 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "barplot(df$A, ylab = 'A',xlab = 'no')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.1.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From a0f080163628829bee2b256e82448eaa64862a98 Mon Sep 17 00:00:00 2001 From: Jen Looper Date: Wed, 13 Oct 2021 15:02:00 -0400 Subject: [PATCH 74/74] video! --- README.md | 6 ++++-- ds-for-beginners.png | Bin 0 -> 268917 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 ds-for-beginners.png diff --git a/README.md b/README.md index d101b7b6..c90d8ec7 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,11 @@ Azure Cloud Advocates at Microsoft are pleased to offer a 10-week, 20-lesson cur > **Students**, to use this curriculum on your own, fork the entire repo complete the exercises on your own, starting with a pre-lecture quiz, then reading the lecture completing the rest of the activities. Try to create the projects by comprehending the lessons rather than copying the solution code; however that code is available in the /solutions folders in each project-oriented lesson. Another idea would be to form a study group with friends go through the content together. For further study, we recommend [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-40229-cxa). - +[![Promo video](ds-for-beginners.png)](https://youtu.be/8mzavjQSMM4 "Promo video") + +> 🎥 Click the image above for a video about the project the folks who created it! ## Pedagogy diff --git a/ds-for-beginners.png b/ds-for-beginners.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5be8fe8008278a14d15e0fdde78a3a4449b4eb GIT binary patch literal 268917 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

#Qg7v$1R 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