diff --git a/1-Introduction/01-defining-data-science/README.md b/1-Introduction/01-defining-data-science/README.md
index ccfe6ef7..ca25810d 100644
--- a/1-Introduction/01-defining-data-science/README.md
+++ b/1-Introduction/01-defining-data-science/README.md
@@ -1,12 +1,12 @@
# Defining Data Science
-| ](../../sketchnotes/01-Definitions.png)|
-|:---:|
-|Defining Data Science - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
+|  ](../../sketchnotes/01-Definitions.png) |
+| :----------------------------------------------------------------------------------------------------: |
+| Defining Data Science - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
---
-[](https://youtu.be/pqqsm5reGvs)
+[](https://youtu.be/beZ7Mb_oz9I)
## [Pre-lecture quiz](https://red-water-0103e7a0f.azurestaticapps.net/quiz/0)
@@ -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
@@ -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/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 @@
+# डेटा नैतिकता का परिचय
+
+| ](../../../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 अवधारणाओं तक - जो डेटा और 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 नैतिक सिद्धांतों की वार्ना की गयी है :
+
+
+
+आइए संक्षेप में इन सिद्धांतों के बारे में सीखे | _पारदर्शिता_ और _जवाबदेही_ वह मूलभूत मूल्य हैं जिन पर अन्य सिद्धांतों का निर्माण किया गया है - तो चलिए वहां शुरु करते हैं :
+
+* [**जवाबदेही**](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)
diff --git a/1-Introduction/03-defining-data/translations/README.es.md b/1-Introduction/03-defining-data/translations/README.es.md
index e69de29b..27ba6743 100644
--- a/1-Introduction/03-defining-data/translations/README.es.md
+++ b/1-Introduction/03-defining-data/translations/README.es.md
@@ -0,0 +1,69 @@
+# Definiendo los datos
+
+| ](../../../sketchnotes/03-DefiningData.png)|
+|:---:|
+|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)
+## 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.
+
+### Datos cualitativos
+Los datos cualitativos, también conocidos como datos categóricos son datos que no pueden ser medidos de forma objetiva en comparación con los datos cuantitativos. Comúnmente son formatos de datos subjetivos que capturan la calidad de algo, como un producto o un proceso. Algunas veces, los datos cuantitativos son numéricos y no pudiesen ser usados matemáticamente, como números telefónicos o marcas de tiempo. Algunos ejemplos de datos cualitativos son: comentarios en los videos, la marca y modelo de un automóvil o el color favorito de tus amigos más cercanos. Los datos cualitativos pueden ser usados para entender qué productos le gustan más a los usuarios o el identificar las palabras clave populares en solicitudes de empleo.
+
+### Datos estructurados
+Los datos estructurados son datos que están organizados en filas y columnas, donde cada fila tendrá el mismo conjunto de columnas. Las columnas representan un valor de un tipo particular y serán identificadas con un nombre que describa el valor que representa, mientras que las filas contienen los valores en cuestión. Las columnas usualmente tendrán un conjunto específico de reglas o restricciones en sus valores, para asegurar que los valores presentan a la columna de forma precisa. Por ejemplo, imagina una hoja de cálculo de clientes donde cada fila debe tener un número telefónico y los números telefónicos nunca contienen caracteres alfabéticos. Habrá que aplicar reglas a la columna de número telefónico para asegurar éste nunca está vacío y contiene únicamente números.
+
+Un beneficio de los datos estructurados es que estos pueden ser organizados de tal forma que pueden relacionarse con otros datos estructurados. Sin embargo, ya que los datos están diseñados para ser organizados de forma específica, el realizar cambios a su estructura en general puede conllevar un gran esfuerzo. Por ejemplo, agregar una columna de correo a la hoja de cálculo de clientes para que no permita esté vacía significa que necesitas descubrir como agregar estos valores a las filas existentes de clientes en el conjunto de datos.
+
+Ejemplos de datos estructurados: hojas de cálculo, bases de datos relacionales, número de teléfono, estados de cuenta del banco.
+
+### Datos no estructurados
+Los datos no estructurados no pueden ser típicamente categorizados en filas o columnas y no contienen un formato o conjunto de reglas a seguir. Ya que los datos no estructurados tienen menos restricciones en su estructura es más fácil agregar nueva información en comparación con los conjuntos de datos estructurados. Si un sensor captura datos de presión barométrica cada 2 minutos y ha recibido una actualización que ahora permite medir y granar la temperatura, no se requiere la modificación de los datos existentes si estos son no estructurados. Sin embargo, esto puede hacer que el análisis o la investigación de este tipo de datos tomará más tiempo. Por ejemplo, un científico quiere encontrar la temperatura promedio del mes previo desde los sensores de datos, pero descubre que los sensores grabaron una "e" en algunos de sus datos grabados para puntualizar que éste está averiado en lugar de grabar un número, lo cual significa que los datos están incompletos.
+
+Ejemplos de datos no estructurados: archivos de texto, mensajes de texto, archivos de video.
+
+### Datos semi-estructurados
+Los datos semi-estructurados combinan características tanto de datos estructurados como no estructurados. Generalmente no se ajustan a un formato de filas y columnas pero están organizados de tal forma que son considerados estructurados y pueden seguir un formato fijo o conjunto de reglas. La estructura cambiará entre las fuentes, así como también la jerarquía definida para algo más flexible que permite la fácil integración de información nueva. Los metadatos son indicadores que facilitan el decidir como se organizan y almacenan los datos y tendrán varios nombres, basados en los tipos de datos. Algunos nombres comunes para los metadatos son etiquetas, elementos, entidades y atributos. Por ejemplo, un mensaje de correo típico tendrá un asunto, un cuerpo y un conjunto de destinatarios y puede ser organizado por quién o cuando fue enviado.
+
+Ejemplos de datos no estructurados: HTML, archivos CSV, objetos JSON.
+
+## Fuentes de datos
+
+Una fuente de datos es la ubicación inicial en donde los datos son generados, o donde estos "viven" y varían basados en cómo y cuándo fueron recolectados. Los datos generados por sus usuarios con conocidos como información primaria mientras que la información secundaria proviene de una fuente que ha recolectado datos para uso general. Por ejemplo, un grupo de científicos recolectó observaciones en la selva tropical, dicha información es considerada como primaria, pero si deciden compartirla con otros científicos sería considerada como secundaria para aquellos que la usen.
+
+Las bases de datos son una fuente común y recaen en sistemas de gestión de bases de datos para albergar y mantener los datos donde los usuarios usan comandos llamados consultas (queries) para explorar los datos. Los archivos como fuentes de datos pueden ser archivos de audio, imagen y video también como hojas de cálculo como Excel. Las fuentes de Internet son una ubicación común para albergar datos, donde se pueden encontrar tanto bases de datos como archivos. Las interfaces de programación de aplicaciones, también conocidas como APIs, le permiten a los programadores crear formas para compartir los datos con usuarios externos a través de internet, mientras que los procesos de "web scraping" extraen datos desde una página web. Las [lecciones de trabajando con datos](/2-Working-With-Data) se enfocan en como usar las distintas fuentes de datos.
+
+## Conclusiones
+
+En esta lección has aprendido:
+
+- Qué son los datos
+- Cómo se describen los datos
+- Cómo se clasifican y categorizan los datos
+- Dónde se pueden encontrar los datos
+
+## 🚀 Desafío
+
+Kaggle es una fuente excelente de conjuntos de datos abiertos. Usa los [conjuntos de datos de la herramienta de búsqueda](https://www.kaggle.com/datasets) para encontrar algunos conjuntos de datos interesantes y clasifica de 3 a 5 conjuntos de datos con los siguientes criterios:
+
+- ¿Los datos son cuantitativos o cualitativos?
+- ¿Los datos son estruturados, no estructurados o semi-estructurados?
+
+## [Examen posterior a la lección](https://red-water-0103e7a0f.azurestaticapps.net/quiz/5)
+
+
+
+## Revisión y auto-estudio
+
+- 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
+
+[Clasificación de los conjuntos de datos](../assignment.md)
diff --git a/1-Introduction/translations/README.es.md b/1-Introduction/translations/README.es.md
index e69de29b..592da390 100644
--- a/1-Introduction/translations/README.es.md
+++ b/1-Introduction/translations/README.es.md
@@ -0,0 +1,19 @@
+# Introducción a la Ciencia de Datos
+
+
+> 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/translations/README.es.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).
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": "iVBORw0KGgoAAAANSUhEUgAABaAAAALQCAMAAABR+ye1AAAAOVBMVEUAAAAzMzNNTU1oaGh8\nfHyMjIyampqnp6eyIiKysrK9vb3Hx8fQ0NDZ2dnh4eHp6enr6+vw8PD///+vl18TAAAACXBI\nWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2diYLrKK6Ga6p7btOztbve/2HvqUoMWgFjsLH9\na6ZTXgAJIX0hBOd8fEEgEAhkSvk42wAIBAKB2AJAQyAQyKQCQEMgEMikAkBDIBDIpAJAQyAQ\nyKQCQEMgEMikAkBDIBDIpAJAQyAQyKTSCuhll+ysPlRgW5vAtkaZ2jhY1y47jAOgfYFtbQLb\nGmVq42BduwDQQwS2tQlsa5SpjYN17QJADxHY1iawrVGmNg7WtQsAPURgW5vAtkaZ2jhY1y4A\n9BCBbW0C2xplauNgXbsA0EMEtrUJbGuUqY2Dde0CQA8R2NYmsK1RpjYO1rULAD1EYFubwLZG\nmdo4WNcuAPQQgW1tAtsaZWrjYF27ANBDBLa1CWxrlKmNg3XtAkAPEdjWJrCtUaY2Dta1CwA9\nRGBbm8C2RpnaOFjXLgD0EIFtbQLbGmVq42BduwDQQwS2tQlsa5SpjYN17QJADxHY1iawrVGm\nNg7WtQsAPURgW5vAtkaZ2jhY1y4A9BCBbW0C2xplauNgXbsA0EMEtrUJbGuUqY2Dde0CQA8R\n2NYmsK1RpjYO1rULAD1EYFubwLZGmdo4WNcuAPQQgW1tAtsaZWrjYF27ANBDBLa1CWxrlKmN\ng3XtAkAPEdjWJrCtUaY2Dta1y0GA/vyW918A+lyBbW0ys21zGwfr2uUoQJM/idCnmT5cYFub\nwLZGmdo4WNcuAPQQgW1tAtsaZWrj9lkXQi8zHJnad8cA+pP+BaDPFdjWJjPbNrdxu6wLYSCh\nf5qe2ncHAXpdgo6A/se3lKpBJpYQzrZgs1zPYkj4kYGND2p6KqmbQX9iBj2F9LFtzMRmqN92\nWjzzmM5t3A7rwls6GiMbn9t3B26zA6DnEMu2zRkwKG1G+m2vxTOP6dzG7bFuIKBX+E/tOwB6\niFzMts0pMGpiM9Bvuy2eaEx1NyYyzpC9a9CDFqExgyZsvhWgixEz85hr2xrQdbkZ9P63lHnG\n1OjHPMZZsnMXx7AvCV+OnNp3xwGaf0l4aUCXE33mMZe2hSZ2XW4NevdbyjRjavVkGuNM2Wfd\nwG122MWxEvr9BOEtniSsSPWZx7zLDHrQ9tTRa9B76s8ypub76SzG2TItoBcAOienmb5Hqiac\nM495jzXon0odbJEyeBfHro/L04wpZtD9pAHQwx+cYQJAb5fbzaDbgu5ygF7Crln0PGP6rDXo\nyQA97jtLUwDoBrnXGvSPPAPQu9ahJxpTALqXbAb0uF1/tgDQLXKzXRzLMwDd9m1olJnGFIDu\nJFsBPWp/qSsAdJN0BfSxn5meC+j7zKAB6F6yEdA73+MbBIBukp6APvgzUz9Ab6xTU7zLmLqG\n3WUNGoDuJljiAKBLTU0x5OMBXdXHHmPqezPs+gp+JgYC0J0EXxIC0IWW5vjQNBjQtX3sMKYZ\nTWHZk+0zMTDIfsxknJZLAtp9mz9/QbKy6rUA3dWvmEFvcmj1u9B+zuQ0AdAnyRUBnf0gdpw8\nBtB9IYg16C2ADgcCuv8Mem1sJgYC0J3EBXQhjA6TpwC68zR1A6DLWq+6i6OyTqjn8/g16O0d\njc3NxEAAupM4gM5G7PnZWln1QoDuvdBbD+garYeO+Ikz6HLJ0bs4tnc0WT4TA4PsyEzGabkc\noDGDPmcGfTygq9QeN+LurysesQZdUbAPZzoCmry3zMRAALqTYA16EkB3XumtBXTd3PGwEf8x\n5ZxdHAfug+4JaMyge8gu64YuADbs4gCgx5h+zpeEU82gX8acsg/6soCedQ36YoDekX278zbX\nQO6jEQB9rOnnbLObZw269xcfDwH0pLs4hPtnMk7L157Pr3sBnVUNQD8d0DXxhRn0KjMCepkS\n0AI7MxmnZdc3QDsBnVcNQD8e0BV6778GDUD3FUW8mYxTUr/N0q7dQ7d3ewGgAei9rfWTk3Zx\nANCdRWFnJuO03GwGfSShAegmoW1Z4zUroBcAWl6rHp6ZGHitGfS8a9DZ/ZMA9LGmDwK0Of4A\ntG5/SkBv+A53JgYetwbdhUblXRy5jRbt3+sWGwCg5wH0oB9Lsj9BAdC6/RkBvWUX5FyAPmgX\nR5+nB75Ko5/daLHZAGn0tIAe++MHjwZ0iAdmjj8C0FsqzQnoTc8RTQbo5QhA71k7JlICdH6Z\neKt+ZfSsgK7xLQDdJKkxALpW74SAvvIM+ghA79p9QeQrn32FjRYb1WujJwV0lW8B6CYhjT13\nieMGgL7uGvQRgN63PY5IHtClnXA3nUHXOffygK72VvUXB1sbe+yXhHcA9FV3cSwXW+KomEH7\nd7equ8ga9CNm0PXxw99Td4Zd6Q0agNbtzwno+uF5IqC7fUmYbyWrZfcujlkB/YQ16A3v8GLS\nuy/wBO1N2+Ltcms7LNkoAHRtYVXikYDut82uWUuLBdcA9P13cWxZI5PLxrsIDUAD0GfKcYDu\nEpxFQOe03BjQFc69NqAxg94qAHRtYVViWkC7z+93U7VXbgXoTXFfkNsDeo41aAC6Ri8A3U9o\nT35iGYDONAdAnwfoCXZxANBVap8D6AOGk/Tk9WkQgM40B0CfCOhqb1V/s7u5MfrUyvvgYEDX\nx/ATAO3vqLWs6A7oLvseSjrSS6etynlVOwWA3qaCCADdJDagU6IcC+gNCQpAWxcL7b3+VNpW\nwmUXliZAX2MGXYyVIYBeawLQAPTrb8zNQwG9ZQoFQFsXC+29/tTZVprQ9pntEkA3rUFvMOKK\ngA7xw0WhcQD6noDmY/Q6Y8/FHghoprdGFQCtLhbae/2psq00GJ3WIyigG3ZxbDFiBKC18gGA\nTq4GoAHolwbMoH21zwB08bHlPoTm3NkK6E1GDAC0obw/oImrAejbAbr04JMJaKxB59Q+BNCF\nwZgB0Js/c+0WDmhL+bAZNAB9R0CXotcB9NN2cdTXehCgC4MxwxLHuTNo8+1hAKCTqwHomwG6\nGL8eoOPB0fugAWiq7FxAFz+c9RruZkCfvAZ90Aw6uRqAvgCgpVvLH0NzJQBoALpUvvF2vYZ2\nQJ+8i+OQNWjSKgB9L0BjBl3b1LYsrygNQG/QsAPQG4wYAOhjdnGkVgHo6wG6vFBY3xgAXVMW\ngK5WWKnhuoDeNAoAdKPcGNBbd3GkXOG2VRp4VUBvXMgEoCsVVmq4DqDVe/loQHMPAdAAdDqk\ntlUaeFFAb90KAEBXKqzUAED7+jig3RbaAN2P0AB0lFsD+pxtdls30xpFZXUAeoOGywD6O0oA\n6A0qiADQdumBgN70DUmdbAC087MNDUmw5XEHB9Cqeh9AZ1ILgN5qRIePdxXbns8HdHVaAtC1\n+l9/5gK0kcyiqW17jGzjysz36040g9YNANAbNBwC6A5PPV4C0FZa2tUA6Fr9rz8XA/TGXfqm\nbbqB8wBdWdbQYU3BAegNGq4B6LoHB88GtJmWAPQuUYDO9nYSQG99ztUyzWhgL6Bb0nD/Lg7M\noBvlSoC+wgzaXK7zwgiArtX/+hP7uOXZkuvOoO1YOgfQG9I8vgi1h69Bq3uXB/RPdycG9GuU\nmwHdsqutywwagO4L6MIH7m0PqhQ8pwEtQmHgGvREM+jdgB60iwOArmyhpmAPc1WoTAdoIy0B\n6K6ALn1lNRTQUXMFoHfv4hixBn0WoOW14wFd0XMAeq9cANC6EADdR8LrdRW/GLvlFzQKF+4T\nzVaz6lL5Ql50L/O9qShZ3wCps8HwEF+sG53FHT3Lioqeb7WxUL5DlwNtaMs4bDeiJTIsbUFe\nqLWnlIu5OquHqqigkspR3ORvV/8h8vQZdNJ9xAzaerPHDJq1+bAZ9LL53yTEDJoUdLaDYQZ9\nmzXo9N5QBeiGZVBRHoDOKwOg61qoKXhBQAfpIQB6AkD33MUxdg0agBY3kgDQGzQA0CV1APQM\ngE6EzpU+ZBdHvA5Aq7IAdN3teg0AdEkdAH1PQBeHQAE6BsQxgH6pTNUAaN4mAF3XQk1BANpr\nvYMA0Eu6eTNA0yX3swBdbfmTAF1qEYAGoElbBXkKoKVXLw9otmkFgOZtdgb0q8h0gE4UagV0\nfef3yUmAlo+POY0D0EcBOtPduwGaP/ANQPM2AeiqFvL7nt4FAWin9R4CQMd79wK02PYNQPM2\nnwTo1zC0ALrw5MC7IADttN5DAOh473hAB5pGujL9ji+rzLGvaQ06OLkMQOfauyegrV/dMgoe\nBOg8Q9vUnQzo+q83MgJAVxQ2CpQBrfZG88YZX7PKPPsY4SubAKDvBuhwkxn0/QBdtYBUbAWA\n1kVDBaBpARPQ+ulCVpevUGSVOepJ/FS/pwPQdwN0eEfr9GvQIv3q1VwV0HVvf8VmHgJoxdzM\nmBk/X6vKFAFt/D4HrSu+48sqs9UHANpX9hhAhzVap9/FMSWgXwWHALpyAanYzjMArZnrj1mN\nY3fOoFNmpUtbJIgOAdCizacAOm3madwHPQugMxTeD2i/hYGAxgx6A6A1c/0c7gXo3Bp0+mya\nLm0RaSMALdp8CqD3zqAB6HGAxhp0NaAN5mbGrBegvQ9Ya+k9uzgA6LyyxwB63xo0AD0S0NjF\n8frTdwa9dFqDXpaUBDagSQsA9CoAdJ2K9GfHLo4qWwBoo1ItoTuUeASg4zwjXci4Rpa1iriA\nXkgyj5tBX20NOpBX604UALpOBflzTUDLUXgKoA0Y5OUZgF7nGek855ryCJwOaL4tBYAWbZ4D\n6CIPiBX7hM6gXwcANFc3EaBpX+XiKQC93oov6/nFAc2qAdCizVMAHXft5L3Sg3gAdEndPIBm\na5F6qbUkALRdeBigoyUAtHHtwoBO+94vAWh/SMyC++TBgGbPO6gvwwDo9VZ8Wc8BaHYdgM60\nVwPolHwAtG5EqnoKoMWu3afPoHOjvDBvZJE2EtDrJAuAXqxr1wU0ZtC5RqSqTYBuyY9JAC2Z\n/PA16PkBHSdZAPRiXbswoC+2Bn1jQCe3jAC0FUQZQwSTn72Low+gK0agFdDkYzAAbV3rAWjf\nG2MBXbmLYxigNzUMQKe2xwLaWuJ0zix5BqBVNJ4D6OABuiECqY0AtGjyHEDHbp4C6Joni5UV\nAPR4QIueWyUyAkDbhbcCOr7kAE3XKQFo69rjAN3GvxQAq8qvih8oMPQC0E2ArvQ0AP0tVwI0\nW6cEoPW1pwF627RXKKKArvoJGW0FAN0C6FpPFwFd0QoAbRceBGgaMwC0vvYwQG+c9gpFmEH7\n2t4T3ULjbYCufi8EoL/lWoAmSXxxQFe4iZcFoKXCrdNeoYgBGmvQTNtAQNePGgD9LdcH9Oat\n+AB0Qdk1AL0h1U1FHNDH7+LYsKAiVY0EdIjDPHQGXWOJ0TAAbYh21K0ArcI/V7MvoCv1AtC2\nwo5LHEt1DFAr9gB6g+lHAjp9DT90DbrKFKNhANoQAJqqAqDZtTMB3e9LwuMBveXN5UBAk42s\nI3dx1NliNPxgQBcS8zGAzo06AD0XoPtts1tqx4LpbQf0puWZHYDeMPtgZg0F9KawB6Df5wD0\nW11u2RCAHgnot4INgN469LxSiJ697Qx6I6CPmUED0FX6X38AaBbDTt6QWDUBvR0UdwF0uQsT\nAzpGwm3XoLcC+og1aAC6Tv/rzyUBvYRBgHY+edIHZABofg2ArihYdcufbUtVAwE9fhdHtUUA\n9LcUAR2CdtT5gCYttAKaBkBqzOPze14BQMtrdwH04dvslCvdKfWhgE7DDEDPBmjLcQlYEwE6\n0Ba6AtpKkzStBqABaFqz3PdcEdETd1E6qPk9AP06AaCXkOJmHkDH75nfl3oC2hp1zKCTMgCa\n1OwI6My2DgBaXXufAND0aa0tgC4k2T5Ai1AeD2isQbtWANAFTbWAllFN7xwK6NQzAHp+QNsz\n6OyobwU0KR/bzQJazjU6L3HYIEyxCkDzizcA9A8Czwb04vEZgNbX3icANA2bDKCDOhwI6LEz\n6FxcAdAANKvZFdCLw+fnAjqkV24dK5CV+wPa2sUhi9LIOgDQA9egWcO6DgB9L0DHC62ALtVx\nncnUuxfel58J6LAY8QBAa1HhLIuK+awobLdYDWgxzikxRgA6ANDXB3Q5bdVbPwAtjWCAdg0j\ngNZ7nw4AdLkhAHoRKw6HAJod9QO0/z0NAN0f0JpPXQBd8YRekAUBaGlESK0C0NcGdLgNoDM7\nnQDoZkCvJaRt1n7zihZLgPaHUFSiBQFoaQQAPQmgUx9bAS1SYgeg09g9agZd+5H8XoA2PN0D\n0Lk3WVaJFTwJ0JppdjkAWliXV0EFgF4W/qHyyoA+ZQ26/iO5eyfKdQBtcfSMGTQAbdUAoJcr\nAFrsJXIBzQZnJ6DDqYDm3z7qOgMAXQ2UWwHanOiesAa9hgAALYwAoOcHtHxAJRFRF1WHjYB+\n66wBNLGrH6DdaBwF6OqP5PcCtPm+lAE0WUIrAXrLLo4YCQC0MAKAnh7QMYUkoF+XdwCaa2IB\n8dbpAto63gloHjFHA3rDDNqEET+9DqCtia4PaPoldJZUlol+gTTqALQwAoCeHNBkaifC+X15\nBKCjzqGADvxgG6Bf2aLvNgO6/iO5CS5+fiFAG3BbpwPGDbIa0RHQ6QIALYwAoKcENCOtPYM2\nP5RvB7SFyXU6+SxAb/hIrm/UALqSPGSYDwG0qhhWmkgVfMPFRICu6fwIQCu9HQGdYm21HYCe\nE9D2GnQYCuj1i5tHAboaKG2Arpihv4tFLXMBegGgxT0AOquCynGA/vx5+ZajAO3s4uizxOEA\neil8SVgAdB2KtOYbA7pmjXsttmoJVtvnAXraJY6HAjp9HwBAJz5/RkofBmiRkvFvjy8JPUC/\nXhoBXTdZnAnQdQm0A9BVu0RisbeW9zulooA2IgugtchuQI/6kjBd+No4hE8GNHmzBKDT/PkQ\nQJt7mCSgd2+zGwXo2skit+PegK5zSlCANqqdCGh3m91JgDbZ4Wi6G6DpchMAHfn8w2bO5/6A\ntpeWFaD1qE8B6MrJItcsvgg9A9C1mzjaAF33sUJmnf9FwzmAJgNUC+hMrwFoX0qA1u/lAHQC\ndFyC/se3FKtVSPj5/+vo5Xl+M76mv68jWo6eBHXF0kkKJCX8eryhLeLHsURQHfDVvw/WGuya\nX8m/W9TqWPFjQ11RQ0e5s/WFArHI9CWPBlo437JXQl4O5P9+YWGTWzYXCepG2DiEYY3ViqHz\niygDc47ikR9kCU+LStWS8ChIh6lAiozgjotvk+pMxhLDycEoMVyKgP4k/331/pIwvmfqWdO1\nZtDLIszPqX9XXLt84xl07XyFfpJaLF+On0HTeZtXuHIGnf0whRm0L6UZNImMd9uYQXMuDwP0\n0gPQPkxE6RGAXmr4zGH87jEATbW8BuL4Lwn7ATq/3AVA+1IGdIwMAHpF8ifdXjcO0GrWdDlA\nV40803z/NehWQBuPq+nGZgU0ZtCkyd6AJmUAaDaNHrvEsSxy1vQAQE+wi+NwQNvkuhegc9+N\nGn4EoIUNAHQroMlOjnbdyXQOaJ1+5No9Aa2tuTugnbnlzQCdcSsAnREAOlbdDugv9iAhAL2o\nEgB0pv5axyb03QDtGwZA+8KjAICuB7Qh7bqT6QD0kwAd0sYV1RjVYuIHgCYt3B3Qryb3Adof\nSAC6Rv/Pa2dAB11YCwCdNB4K6NeOwvIMGoAuCABN2gagrwPolPkXAzTt5G0Bve75Lq5BA9AF\nAaBJ2/KR5FQIgN4jAwBN5mb7AV0cnxGAduP5+oBOaxvFXRwAdEEAaNI2AH0VQNPVTQC6zorj\nAE3ePzM9JIMgSQ5AkxYuAuh6HEoTAOj7AXrLDDrl/vUArWeg1wD0kn331IDOPlcarz0A0N54\nA9AA9KUAXb8GHWTJiQCdAcQPoI013D2Arspy9pfc2QboJffu6QBa+vaBgHbHG4D2Aa0YQasC\n0DX6f177Arp2F0dQc+3rANraBXEVQOfyQ3pA7ce7HKA9yzYC2h9vABqAvhigMzAhpcMNAL01\nUhwr5gX0rDNoHgPjAZ0ZbwAagL4loNmk5KKAlj2qUGxZsRPQ4toAQOfr3gbQmY6Mm0E74NPW\niXsANCuREwDauKUb4vLGnFJyDUBPtQY9FNBz7uI4HNDj1qAB6Lwp2smbP7gC0MYt3RCXn+oG\nJicGdFqO6b6LY2JAW4P8QEAP28VxLUCrLAOgbwxoiUkeBnMDWhcAoH2lNwC0YepFAW0/o2RZ\noACtvi4GoAHoRQ7CcYA2dwsA0LWApktYALR382hAG6tzngUS0EGtSgLQAPQiB+EwQItIBqC3\nAZp9CQxAezcPBrT1/bZngQA0q/qOBAAagD4L0GoHAwC9BdB8G+VFAJ1FqTy/IqDNHaK8uAfo\noAH9OgWgAegTAK0ieRigv1u+HaADAJ0qDgG0GoYaQBdn0PyxJApoPmMJsS0AGoA+A9DHzaBv\nCWixz31+QMeP65U1agFdavVgQBfWoAWEGaAFvOmceiygeV8BaFbkuYA+bA36noBeZKZbtm0B\ntJjZGdd1wwC0Tuoyn9n7Ko0D8UzpUTNoABqA5lasL7yDVwF0BljpcDygDaLWAJpgodScvK4b\nfhSgnTFVSZ3NyyygZZYdtAYtAC06A0CTa88CtOggBbTO/GkAbc6Q2gFt+LsS0NTLALR3dzCg\n37itBbTYSlcA9EG7OHg7ADQrAkDHouMAXTa6HtD2GiMAnVe8lr0boNcJcTWg+cMoAtDqZ7PW\n3gHQALShCIDWep1v6VVqAdBm+zcDdFxTrge0RGEnQAd+uWwGaRGABqC5FdcFtLfNtSug1cAD\n0L6cCuiGGfQYQAe7akkeDmiCnGU9OhfQRFsroAu/NCDa2ALoFKvzAlptDoyXRVMZQJOvlQDo\njKlXAPTmNegxgGZBCUBXyuq0xwOaR8zhgJYznJzBRUDLzYHxqmjKBzRJaRUP3QFt4GkjoG2/\nA9DxujeIvknMuB6A5h/rAOg6iU4DoIUVi+w21dEd0GqNMGdwGdBf9oyyGtD0Q/F5gLY6Snww\nBaCJtRk5G9DuIPomMeM6ADoA0A2SvJYDdFoFYX+tkuoIgK6xwlk0dgyuALQNrFpAs6+VAGi/\nRhdAa99dBtApjIqAFutuAHSdVM2gAWhSZwSgvW/1HIOHA/rBM2jnulMDgF4LlwHN190A6Eqp\nWYMGoEmdHKB9TBWsmA3Qc6xBTwhobeqDAU1TtQLQzHsAdK1U7OIAoEmdIYDuvga9F9Dka6Xr\nA7pomrgEQI8BNB+xGjNIi48FdHLyXID++XMMoOngnwTozrs49gM6eQCAzpo6E6B9NZ0A/XMG\nQF8W0HqNCYCut6JUWXpKmxUFgGaGAtCPBnQIADQrqMrkNAPQ9nGm5BMA7ZASgAagtZa8/3+W\nD+8DaItKAHQqOReg49AA0K7qDYDWT9wVTQWgxwM6+Vmqts5k9R8BoElBVSanGYC2jzMlieFx\nDw4A7aquB7TxmxVFU4cA2qHsKYBmMXA9QFduYc3IHQC9ljgK0CosRYmHAJrsYm8DdBZrS29A\nv47nBbT1q29FU7sA2gwyXRCAlqqtM1kdM+g0kQOgjwQ0fQ706YC21G8EdAjF2RYAfT1AYw2a\nTOQA6CMBPWQGHaQHHgNozKCt29cH9M12cWwHNJnIPQTQP/9NAOjda9BPAHSFaan1k9agDwd0\nKUFErp0J6HcDOwCdjGuSywP6eTPoaQC9bxeHGddPBvRpuzjGAFqPt3XLtUk26gF6fQGgZwX0\n49ag5wF0tBGA9lRvAfTLuKkBneu2gJj88ThWszLWAOg7APppuzhegNZhcSFAu1y5E6CDf89u\n/k6AZt93dgM0VQlAXwbQ6ysADUBnrAagq252ATTbkaIiGYCuFwCalQSg38eqJeYpxtHxgC7l\nVm9A67eF9V7SXgI02XFTMC3JfQDNZtAANABNCqoyOc0AtHlsbMdlqOOr/gD0yYCu4N3BgNYr\nHAB0mwDQrKQPaEFUdXIsoBdjw2w/QFsPTNDEEPtmqgAdWPtGrXRnIR4AoLOmdgE0H+segOYB\n1APQa9AD0AB0PH8qoM1H2tTdAEDn1J8IaGvoMoAWY90B0OFoQC8BgAaghc3i5D6Ath85pomB\nGfTMgFaDlwe0HO3dgFbPrAPQdwC0T6XHAVq/Mh2DAe3wmYVnwxr0QEBnAPRAQOvhqwK0BJ8u\niBm0bT8Aza4B0EMBrfL1fY/nG995vhXQazdmBDTRd01AGwNYBWhpuC64cQ1a5hYA3SRTApr3\nPwdoNkgA9H5AL8YMbL2m7AWgjTNe9nBAb55BF9eg11HetovDzlRHhbJJNQpATw5oD751gLaQ\nCUCL5pOzZON8lhUWzKAnBvTWNeilsIsjrmdt2wc9BNBcAwB9gIT4GtLp+ud1HNgVcUBuBq/M\n13eM2ZpVSWlBiOXClyhrFuSGZIQ3x7TqV6YjvHVILeFLXdpgxRe3n7f0BnTSwzxumqI1BX6o\na5GLcXCUF6wIsTWyYp5zpBWrc80maXRwk9yyvm3eWPljKOMqxObVaKkW3VbVTeGROPLWSKhM\nMP1t1MwHqhhuRgcRRaJxazgDOeaHFelCHEwzlodfdW92yX1n0NaiKmbQqnk+09DTKHJ/3Axa\nDuvoGbQ55XrvUfH7sGkG7dg2bAZtfu+Zm0FbQZbaWrPn/Bl0EBqaZ9DGnDpnysVn0O2639Yv\ngwHtfO1ltQZA24oX+jH47oCORPL78BxAkz2VZwA6Mvk9LgD0DQFtz6CvAWgrFIYCmq40+/aG\naIQ28uKATrsgAOh3a+etQScmB/W+CUDfBtCLwWcZNQD0q+17AZpP+1+2uWbFchefQettGLlW\ni4Bu2sXBbjYDmrxT6vdNAPo+gLaQ2QvQqmZ5xEQjEwGafNZ4LqCvvgbdG9BrR44GNPkw81MF\nM+irApqviGYK24rpwcmA5jGnmhoNaLpa/2BAy5DThWcGtI6MiwJ6YTPoRb5vHgloEQ8AdBug\nteNvDWgjD3cCunYGHYgRysgbAFqrEIUnBrSxen5ZQLM1aEkCABqAXujgPAHQlWvQMWkAaH3G\nywbNVbf5Hkwt9RAAACAASURBVID2NixdE9BsF4e4CUDPAmg18qomAK1srBTJuQSBPYC2H9x8\nKKCtb6jt5jsAmu0opX8uCmjDxKMAnSaGQfYAgAagzwK0G7wAdBug7aekbIt3A5pt+WeLVVcC\ntKX/cECTFW8AmnCHXl2PDwQ0+zGIqQGt7HA4UQwecQxAG4ey8GZAm11V0nUGzb/uBaDNJnwb\nyJ4RAJpzZ1mM/gPQC3NFJaC9z9faCgDa0WQV3gxoyzZ9qdMa9DspApkE+q0C0KYJdNc1AM25\nsyxG/wHohbmiDtAuHbQVrkcMewFob/xU2YPXoJd17SsA0LLqFkAvAPSqn6ciAM1N2wdo//O1\ntgKAdjRZhbcA+thdHOkqljhE1U2AXleIAOjZAE3+Xh7QmQ/YyooNgF51Hwdo7fwLAdqzTV/q\nCeg0cwegZbM1gF7wJeFLPwA9ENBLgc+Kc5MAmoyt0m4b/ghAa1szgGYfBv1WAeisGQA0AD0S\n0Euez4pzALR5KAtfAtDsDwBtNlE0A4DeCmjhXQCatmMir84KAFq2C0CvV15lAGjbfgAagGYN\nxy4D0IssJ5u7E6DV+ALQpHEf0G4M1eTGfkCvJGkUANpqdXZA8x9eTHVnAXQObs8DtG0cAJ0z\nyTcRgAagl8kBTfZo8haPA/RL21hAa9YsxgUAGoAm1gHQtwK0qnIFQEdRLQLQorl5AW1dawK0\nVA9Ay6ZkyLg/CGaYUQa0nXa8GQA6FWTV7wnos2fQyRYA2lU/A6BZIPmt8pu3B7T/k7qGGQA0\nAO0A2qBYwxp0848lGa2vLYZoCwDtqgegJwU0/b2/nBWpLgCdhgCA5qY5gK7fxdEOaIdc6Rce\nAOicegB6TkDT5UEAukI/AN0C6LdtssXxgI7hDUDn1QPQkwE6rmtgBr1JPwA9KaDFl5BrlKef\n+XocoINhmKv+EYD2h2FeQDevQdNgAqCTANCk5HGAlttEArn80Bn0NQHtfZr38G18+XwvQDfu\n4iD5AED3ArRxRdy5BqBZDw8BtNrIFy187hr0gYC2n8XUtpYBTX8UmlX2foz0ToCmmoPVRNGM\nFOqBzrwB6CQANEmmowCtt1qn3j12F8dxgDZ/g7AJ0OkDj2gsUHID0J4Za6SyfACgnwroIJ3A\n37xnmEGncwA6p34PoO1f8W4BNPnKgFclS1Wq/k0BLQ3aBGjMoGVmRnkQoPnH0TU2aDIdBmhv\nDZqcVwI6fZTmqXUlQMsujAW0+vRiKE0XsoCOb7SqseNm0NYQdgN0bLwToOU8O0Uq1qDXg4X3\n+FBAs+8PGgFdGjHLxpcS/nE0xsYZM+gIVqvkEi1Lh0QYoAkIZGpZ+SHDwMpuy3C7m50Arbqg\nwsGKr9QTyzjrWq8Z9DouK1esyDhuDdoawiLS5LmV0uR6L0BTvxMyvdMz3eFuyAbfSpJGAaBZ\na+RTjAtozUWlPU9FbWNYldPZToqN49eg5T0ra0Kqwm9SQNOP0jK1DNMOArSTa7wd0QdhDrfI\nii+bf4aiKL3WoGM0v623DSTjrfNNXXgEoNk7Y/RbYO3wpvze0HdAADoVXDKFqQSjAPse4HBA\nuzPomGrEURcB9PqmE6h1pwPa+7TK25F94OZwi6z4Sj2xjLOu9drFEeMpabLbs+4+F9ApWN+n\nUbdIjRpAszUkADoVXDKFqQRdgI7P6tYjAe2sQcfSNBsvAui9M2h3RF0yWM0tSf1XtEmWUO2K\nPrCBkhZZ8ZV6YiawcY0g0AaqsjVo9ekcgA7sVWWwsqLfDDrQwAegSUFe2x0KWfal/dwZ9JJm\nyuufywN65xq0Hj8zQjyPm4Bm86Qp16Dt22p8Aw8JZc6JgDaS2Qx4U3So2flPrg9Zg17bxww6\nudpMP2+AYk0xAkaSWQlktXbGGrQKHWLCvIBe0mLMwF0cevzMCPE83mcGvSyyC0FaZMUX6YmL\nRy4AtChpKZJR9D4ZsItjbR9r0MnVZvp5AxRrihEwksxKIKtAzS4OzUWmvRh/hpG8bWLazIAm\nVfhNsQ86titTy4QG94B2uhkhnsdtQG9cg47HgWrnfrLii/TExSOX5wA6myHynpf/5Hq/fdBE\nUaKSGBPs4tABYw1QrClGwEgyK4GyBVa3AtDm2UJMUSk9PaA37uJYjwPVXuINAC2GquQwaZin\nSEbR+2Q+QBPtAHQqyGv7QxHyBVa37ga0tWFKGcnbJqYB0FK9GSFejniAdnKNt6P6EKj2Em9m\nADQ7diwI8i4AvR4lKgkfAtA6YKwBijXFCBhJZiVQtsDq1r2Apl8LW9V4VRXkALRUb0aIlyMA\ndNGCIO8+G9DWGjQAnVxtpp83QLGmGAEjyawEyhZY3boT0GxjpVFLVFVBfiagrViXDQdh/48A\n0LInhQBY5fqAZsPDh6rkMGmYp4iPaGwcgJ4W0EGOgJFkVgJlC6xu3QdosfVd1xJVWVcpxagR\nETTaEKXHpKBrhrhixHo6JVu2AWgzvkhPXDxyAaBNW938pwMiAR1k3wHoNv1xKI0xfR+7A7S8\n3SNGwEgyl5BegdWtF59B+9FjmSGuBK/k2q9oF795P0CLbXY6IK34Ij0pBMAq2wGtsoOa82RA\n02dyBR5yVACglf44lMaYvo/dAVrYMM0IaHcN2kkJ2lVKMWpEBI02RGnyo8cyQ1wJXknxsyEA\ntBlfpCcuHrkA0Katbv4H0jgHNA1P5g3ZhNId+GEgF+2g8VMs1QKgU0Fe2x+KkC+wunUvoL1d\nHF5KBG7SpIA+fAYtfmPMQ5LTHFG/AdB0VHgQ6IC04ov0xMUjlx6AZlrDUrQgyLt3ADRfWqTe\nkE0o3XzQmfPsoPFTLFUGoFNBXtsfipAvsLp1N6BddNBj1jtq0qyAPngNmj1ZYhrueVkOCgAt\nLAjy7h0A3W0GzZxnB42bYnd8UMXyHAC9LMyICBptiNLlRo9phrgSvJI/53Tg+M3ugObPZpuG\ne16WgwJACwuCvHsLQPdagw5meQBaB4w5QAsbprMBrY8c1fLqFQDttBIsHb0BbXxedclgNkfU\nA9DCAuW8iwCaR96oXRzBLA9A64AxB2hZ3RNSQV7bH4qQL7C6FYDWx+Ky0nHGDNo2EIAuWqCc\ndxNAq74D0G3601AG23MA9LIwIyJotCFKlxs9phniSrkXIk3ecsYatG2gB+iq3+Kgo8KDQAek\nFV8MlcZ9LbMC+vX/0wDNe06aoznnA1r/sKxPBQBa6U9DGWzPAdDLwoyIoDETqXzNN0NcKfdC\npMlbNgGab3Jp3sVhG3gEoB3tALTOVKeibZiygN/lkZcBdPrZT5XBllP4oAezPACtA8YcoFiJ\nj4DBGCuBsgVWtwLQ+lhcVjpqAf3zf74N0QO0OlBmmgYC0EULlPk3AzT54XwVTO6ovY7ZePO/\n3A1OiqfKAHQqyGvnhiJbYHUrAK2PxWWlYwOg5YOWNwW0H39MDgW092Ok9wJ0+oJ5K6ADH2/+\nl7vBSfFU+ThAf/68/JLDAB3kgKphD7G+l7yZBPEKrG4FoPWxuKx01ANa/VTJCYDmNe0+zwJo\nbSsA/T7rPoO+JKB/wPwZSQ1AS0NkWVO1vDoToD3LnVZ4mrzlWjNoXtPu8+GA9n6+RdkKQL/P\n+qxBXxzQn18AtMVFXkKMmDN67Jj1jpp0d0BPsAbNa9p97g9o8wcA+gKaZY5hYBDlueGsxUAR\n6Nmj+qsy1euItMy4YOY/zbk+uziuDejPLwBaF2WGyLKmann1yYCu3MWhDtQYmwZOC2j7J7Sa\nAS3Tg5jrGLA8B9DxVQWTO2rxMJjlLwPof3xLsVpeAn0J9GI8DOxKkH9CrB+s2vKS2YwqkK5L\n22RRZogsa6qWVwPvHTVpvUWNyBiidFnXfDOsC7YuelnrCEZV1jFaLRg1AztjpbwxNg0MRCer\nQpsTBljH3GJjFKz44j3hN3/Esnhtz7jJ0yBeEPpZPpk5EW2wzQ/KWBHcnj2qvypTvY5Iy4wL\nZv4rs2Sa0tAwgskdtXgYzPLMRW6KBV55txQB/fmFGbRRlBkiy5qq5dVHz6DlpJDPvbTTvTE2\nDdw8g1YzVMtiHpC6E2ZP2D3nZ8K7z6DtnAjsjzQPM2hyGMzyc86gI5cBaKchdeSollcBaFKW\np7Z2uh6wIM51c0TbFIBW342+5RBAiy/NjFE346oIaDYMRt+5ibmozEcxaY7m3AmAFgtfqq1U\n+RhAvwSA1vHLS/ARc/5RQC8lhBMAaKlfD1gQ57o5om0OQB+1Bm3khNx2Zoy6GVcAtArg+Iu7\nToqnysfug34SoFfVcuRVQ8RGPmKnArqUChpOHq2cVswIvR2gg+hoWKRBbqrrkFyEBUQOALR6\ncMMYdTOurgfowG1qB7T8HZj3rfRvVjgpnrQD0K9DnQ25ocgWeLt1Vc1G3mqI2MhHrBOgiRER\nNGYiKS25VNBw8mjltCJ98yMS0Hp0aU8Ec3hqa6frAQviXDdH1M8CaNNezKBFSWYBv8sjbySg\n1S8p/tyi/+qbk+JJO54kfB3qbMgNRb5AAKBdcikF/C4AbfRE39eCNWhRklnA7/LI6wRonubv\njqvfIl8mnkEb0q77Rz+LEsNzNJfpvUBv04gzosaKd1HWGqunA9pwpFVf6S0DegnJNKGRp7Z2\nuh6wIM51c0Q9AC0e3FDmjwI091guKq1cNPM/kLNRgKY7bgK9Neca9F0Bbd4HoO2CWgG/C0Ab\nPdH3tQwEtB5LADqvyJ9Br6Um28UBQGvj0imxkY8YAA1AO/Gl5Cu1btxWg0kCRHgjiNu8JgOW\nMh+AXlL511iINWjesJF2yYB3IQD6daizYb3iJkgugS4PaPIPZzqi4GQTym1F+uZHNgLacEVg\nZ0y/DpEgznVzRH13QPMPv35P9H0tlwK0rMiGweo7G8JcVKp7QemVkTcS0GoXB2/YTTEAOt1+\n19fZsF5xEySXQFcHdPyW2RcFJ5tQbkJJ3/zIkwCdFiJt1V58meYC0NJUagG/yyNvKKAN1aRh\nrzd0hywA/TrU2aAzXWjwEuj7ysUB7T1Q7Jsh29SOtOqrOB4BaBUa8o5p4HBAk6/ybdVefJnm\nAtDSVGoBv8sjD4AeCujYEzuauAuC/BOip3Q2GJnOy3gJ9H3lDECLlAq0a9SQMqD1r+EXzLAJ\nYBVUVfjd5wCaboY1VXtBY5sLQEtTqQX8Lo88DWjCV9Zf0yJLEQD90p/6F0zPBemCIP+E6Klg\n1Wa35A2jSrpxbUAvLjscM2wCWAVVFX73OYAuzqC9oLHNvSWgtQs8pKmC3AJ+l0ceAA1Ae7km\nc1aM63mAXjx2OGbYBLAKqir87oMAXVqD9oLGNpcA2o5Ia7yow9ajIG7zmgxYorqhek0xAFom\nOHGz1YtU6BaADsH0XJAuCPJPiJ4KVm12S94wqqQbVwf04rDDMcMmgFVQVeF3nwTowi4OL2hs\ncwFoaSq1gN/lkTcE0MoVMsGJm81exPt3ADT7OM7HnbsgyD/JE8GqzW7JG0aVdONagLYCpZQK\nVsLbd51WpG9+5EhAiyxU5jGdS2KgvC5a5ydBdJQ6ytMOQEvXsINcVKp7QemVkQdAjwY0/0KL\njzt3QZB/kieCVZvdkjeMKukGAO0UVFX43QMBnd7VTQOnAbSKAtPc/oA2o7bPb3HIiswRQV0R\nB7moVPeC0iu91AfQzLDAqgjVpGGa+SKU4v3LAzpJ7NwqQfhtCfJP8oRZm92SN4wq6QYA7RRU\nVfjddkDToF64Y2RSveuqH7IR5nFnngVovZnGNPcZgFYapah7QemVXpoC0PEnO1jAp6hrkjkA\nvSyc0DpnzQGKt2nEWVwZCWg5TCLnHw/oBALSsT6AdkJG6SZ92wBo9oGOdZQ6ytNOAW1sdzTN\nBaClqdQCfpd7aQZAxx09/EeUUtQ1ySyA5oTWOWsOULxNI87iypmA9tDhFFFMSZFIDQGg/ZBR\nuknfdB6LoUiH7AMd6ygfbFs766EmtGkuAC1NpRbwu9xLXQDNv1MPrIpQTRqOmcmEx/IdAG3+\nrt9CkyNdYH9SA0a2GJnOy2QSbFJAv273AXShBe1Iq4Eg7x49g/Y3q+wAtIhG1lE+2LweVx1I\nW+K2IVMCOvb87oAWu1IDqyJUr+MaDVkWSWgay7cAtLOgGIgL6D2Ww5wTmitXBXRSz48AaJET\njoHtgJbsZx3lg83qCdXr7QuvQceeJ+sWqyLL3KCuyJFT3ZMt8Qtm/ncFdOIqUapdQbVwQK+E\nv+sMmoaxzllzgBaOLiNbjEznZTIJBkBrR1oNBHn3OEAvvQCtA6/nDJp30qmwbAV0ID0M8urC\n+8XHUtV0o3EhPZ8E0GwMUpt7Ac3Wy2Jb2hVUiwD06th7rkGnDi5yOHhkysxQ6WNwpSegrfCR\nOav5ZFayigDQSVsZ0Oljl+NlWjymirQlTQ0YxuhF1lE+2KIeU62Y4J3/SHdAE+CwnsmabjRS\nNfcDNO93eQad2nsfkMig91nAx6hrk6kAHUXnrMpUlsOcE5orALQthRa0I60GgtGO7hD3oO4Q\nq2kMm3R/KuJ/SShGLaaKssX68iPt4lBBEB1lfeRj3TZR4JnbHdB0Ski9rGq60UjV3BzQFWvQ\nqb33AYkM2t5tZ9BRdM6qTGU5zDmhuQJA21JoQTvSaiAY7egOcQ92BLTkgG3Iqs4CtPdVo6zL\ndP38Nzeg2Yd26mVV041GqubugC7v4kjtBV5BBiWNlhh1bQJAyyrpxjmA5hFCI5HGJAAt7LIM\nFKMWU0XZYs6gVV2W8d8nJv5Yt13zTH+OmUErCwFoR5McMQAagFZFAOik7ShAk2fA+LioTjI4\nBAfsxHbXPNOfQ9agjaRQNd1opGq6AjoXllaGmYoAaABaNe4YS2w0+WRWsooA0ElbG6DZF2O0\neEwVaUtkFt8OJ+om96wX2mfQtjtH7OIwwvbpgNZBRU55+pnDlhoOotLae5oWMeraBICWVdKN\nxwPaD2VRRdXSDuDDMxDQfNZIi8dU4dcpzRihRd3knkAqCO2i29o8r/yyjAC0aYAGdC5gY+Ez\nAa36Lbw0L6B/Lj0Y0MxJOluMTBfVVZV0A4B2Q1lUUbW0A/jwjAO0WHelxb//ywBaboSVdZN7\n4pE1P2XdVua55ZdlCKAtjS2ADosJaDVAdFi4i8TIZcLSyDDVb+GlyQD9LhJvXRnQOr8XES8i\nMkVmAtCkRauXmUwotuCGsqiiamkH8OEZBmi2dUGM2vd/5Rm07j3pZGCNZYJiEYB2HUvlGEAH\no2YmYF+lQiOgjZ3YSqMUI8NUv4WXyIPoNHYCq6AHS2hiHg7GKIR05+cgiEpCd7wFQC/EbaL2\n64+FLqM1VuCLNezmYgpGZnG8a4YijzhankcIjUQakwC0sCvFQ+sMmtFEqmJBwI+YGaLbngNt\nd54AaCtljIqtgLZ2YsuKSowM08PCvdQP0DwyrAJJCwC9iMwg91JCLoITRo71ALRbNN6U2euo\nNoyk5WkGcIrRmHwEoBdnvYH8DfL+jjVopm9Rda0h1jnPu+050HZnNaDTjt25AW3uxNZZKsTI\nMJ3T3EvzAZrdAqBTQd4aHS1Tgw7QdOMwQDsnkmI0Jm1AWwGVyQSjBT+r3QbUAAbLAdJBskOs\nJhtcboA3cKRkwy4Oc3BFXWuIdc7zbnsOtN1ZBvQKhpDsFuMe+Iuh8Skz6Hg7iEbcqOaxZ4yC\nGH4AehGZQe6xHGac0INpxLuX57QAAO2GsqiiamkHSAepYaM12eByA7yB4yGjDFnV3QHQ9Fcj\nJgf0mWvQCwANQMcLVvY6qnUrzgkADUDLOmnZwNiLQUplNB4K6MN3cRALTgS0uAVAp4K8tVhY\nqvDynBYAoN1QFlVULe0A6SA1bLQmG1xugDdwPGSUIas670EVCxuirjXEOud5tz0H2u6sm0Ff\nC9BqhNxHe7Sltkkyil5nzwP0vz6/vv778fknAM1HzjbWyl5HtW7FOXksoGVO00Nv4IyitO21\n2Tyg7d6HRVjGj3TF1G3PgbY7b7jEoSu4D8drS22TZBS9zh4H6H99fHz99fnx8VEidLvul+kq\nvxeZbWakR5+oTNeDacS7l+e0QA9AW71TrTgnADSPA+tvrihte222AdCBldN90RVTtz0H2u68\n8peEfGIcrBKr6f7vd0tbTJNkFL3OHgfo3z7+++u/f/3v4xOAZiNnG2tlLzHfar54AkDzOLD+\n5oqStqMJtwB0j2123NV6vESDoQBoMTEOusRLXVyd8cPS86VW/GhA/5pA/+fjt5+/ALSKPdWU\nlb3EfKv54gkAzePA+psrStqOJtwD0IQR0vAgiyqNIwAtJ8ZBlYgNYQa9SVxAf3789X8f//te\nhb4joOXeHzMdAGg3lEUVVUsnvHSQGjZSU0CAHXoDZxQlbUcTngHowlASv+ugbgG0mhgHWYIV\nFRqtfoorOqe5l2YDdHLGz6URgP7z4+ObzR8ff9wQ0Gr3vJkO9wB0JhWMFvysdhtQXeQXCKlk\naqnacrB5HNC/6mfkjKKk7ah+J6CtwdYVRbeNErY7jwJ0+r8R1GNn0ItYrDbE86VWPC2gyde4\nP5eG7OL44+PzP78m0iU+XxHQ+vlTMx0AaDeURRVVSyW8yNi9gFbPD1tFSdtR/TUAbUaNDMKQ\n1Cg9haEMpOPSHqk7oqjHGrRxWYnnS624BOjAK+jByqVLkHqF6mXxAM12qv9cwj7oVJC3Fguz\ni/wHz2SdeMUENP89nXid56xCjtW8fULaB6B5HKS/avzMoqTtWHY7oPkP4xmDrSuKbhslbHde\nGNC1uzj0ZSWeL7XiSQF90Az6voDeM4Mmvy3AdPCcVcixmjdPaPsANI+DVFtMUJyipO2ofjOg\nk57AGuKx5kHFc6DtzisDmp8Ho0SwChri+VIrItfDDIBOCg9Yg/76+tc/Pz6+fv/fDQHdvgZN\n5t5cB89ZhRyreeuEtV8CtJVIhhY/FYwczmS114DqIr8w3wyaqgjUHssf6Z0gsIZ4rHlQcRzo\neHMGQKuaEUUPBLQ0RTjXB/QBuzj+/u3jl3x9fPz3BEBnclaG1KG7OOjiEtfBc1aZn+kgPeHt\nA9CsGfp31xo0VRGoPUY/yPaEwBri6s34kV0zLOTSAmgZ81YQqhKBdNyob8RVAKCF6mXJAZoX\nHAHo//v443sP9L8/fr8joOVgmRZgBu2GsqjCBkP0eb5dHFRFoPZY/mifQauuGRZyAaDtOx6g\n6S8xZQC9WqMHK5cutAGtOqlnOnVU/BwPelAl/gdAxzIzrUFbiWQo8VPBApJz32mEOV6u18pe\nMAepYVvSicppcugNnFGUWra+bAH0605cSwmsIZ2Kqq7smmEhlzKg6fsSRZTUUxjKQDpu1Dfi\nKgDQTHVSz3TqqPg5vieg2XRMOTU6QWW6HsxFAVpGjWnBZLs4WJjNCOi0GkCLXxzQCYGBNaRT\nUdWVXTMs5FIENFvZ4dbxpgtDGUjHjfpGXAUAmqlO6plOHRU/xwOXOP74+L+TAM2nY8qp0Qkq\n0/VgLh0BrYsaOauQYzXvnNDLqW/JiFfhCQEd12t5n/sC2h04XZS2HdVvB3R8TSWCuOdFsOtA\nx5slQPPvRimipJ7CUAbScaO+EVcBgGaqU5NMp46Kn+MhXxJ+/5Ld99OEf50DaDEdU06NTlCZ\nrgdzAaA9DfKs4CergeT4kTNoO93NXKOJKYFxFKCtrsmGlRQALXYXUkRJPXoopZMlWoThoiIA\nLVSnJplOHRU/x2O22f3528fHb3/8XeDzIEDL6ZhyanSCynQ9mAsA7WmQZwU/WQ2kLo5cg7bT\n3cy1ZkD7+Rgdbwy2NJR0kvvBPiaCGbR9B4A2AV0p7bpfpheCUeasDCkAWpoh2/VTwShe8JPV\nAI3Q1QgGJhLQqY4aNlLT1Gqmu5lrtwW0sQbt+EH3RjpZokUYLipWPEmo/4iI5L7yo9Kkgbof\nzXpfBKAPBjTWoJfrAToawcBEAjrVUcNGappaTSCYuTYa0EHec4JC+sE+JtKwi8Pxg+6NdLJE\nizBcVLwGoEWa7gZ0JiBSk8yLOip+jrsD+oPKSYBu3cXB3vaE5+R1I0DJDQBa+clqgFajQ6Z6\nwRwkh20hNU2tJhDMXLsxoGl/uHXaZisWWPsMLcJwWTFUAppeFhFplDDF6rkTCAB0BaD3Svj5\nv76YXsIXLRLYn1RyLfhLvnRhoSKoAqYFtGG3KLXgy7BWty1bMUusVof1KKie6EZ4S0GXylgh\nLOcFXBN5NeGLZDGxLnzxrmlvmVpFZ2TfqFuINXTQqJGiSBBGax1B9I3rN4OCj73uiyOhmBOv\nHnLreMu6N9LJ3NXcj0Zw6iFxrkvn6BEqRaXVcycQAlcv0jQIm/RgWdFuRYlWnZpkXtRRkR3q\nTTLbEgefjql3PTlnW2cF/EkS8dYmrxszCHIDM2g9QTIaoNWEL3gvmINITeUtU6s5YzMnQ/ef\nQZPfiTLdYvRGOlnO/YThsmKwZ9BBKlbO0SNUikqr504gHD2DVjEgvci7HG/dcg06vciEp3+Y\ny9avFlXYANCeBnlW8JPVAK0mfMF7wRxEaipvmVpNEpm5th3QyhCtA4A2AM0ee9VW6pYNi5VY\nPXcC4dGA/uPsNej4IhOe/mEui5vzdLwWwGNaAEDrCZLRAK0mfMF7wRxEaipvmVpNEpm55gA6\nrN90CYODYYjWcUNAC/84NaMCDWj+wzHaSt2yYbESq+dOIJDGHwfoP07/kjC+yISnf5jLRMws\n0nPysm6NFbEf9fZtpfwhN81QZBHnBOvpgDYmSEYDtJrwBe8FcxCpqeggcWN1RvaNFLUB/QoM\nANrsshoCWTFoQPPZkIoAFZHB+mOI1XPlPDX8JwCaOZKoYIPxczIC0J8f//v946+/fz/x50bX\nF5nw9A9z2c8f9mMZ3HPysm6NFTkI0Prnl2KZFArJiFdZBuiUr1Y3/VQwirNMMCZIRgO0mvDF\n+0x7kAFaRbTEjdUZlaHUbqb6dfSGCQBtdpn7MeiKodsMOh9Q5p0GQL9QwGvowRKqmMHahbRE\nch8pHHVDxwAAIABJREFUdyigf82c//z4z9ffJ/7c6PqiEp78YS57HRuZMDOgxZyflUmhkIx4\nFaWAjk/02Enpp4JRnBLFmiAZDdBqwhfvM+3BFMqsMKcG12qSyMw1C9Dmc9LMOmOkAnvlfeP6\nlXbdohGWUq4G6KY1aDfjtKXpinKeGv4nAvo/H/869edGzRw2I5JFm5EJEwNarpqzMikUkhGv\nkgTQ6Zl4Oyn9VDCKM+fdCNCHzaD5mwC1SjWspB3Q0hBNF2tAgqpu1IxqOu3icDNOW5quKOep\n4X8coP/58e+/Pn77+i8ArfHi2Er5Q26aocgzes8Mmi0FWt30U8EoznNz8BKHGlxODWsog3NK\ni56wBp3aC+nzDG/RPmRyPUAbDhD3vFTzo9LquQoENfwGoKVNwkdalaqkTGExwBxJVMhwHgPo\nbzL//v0d4Vk/N5peVMIvwgk82nRWLzMDevca9LAZ9EJ+nNpphMRqKmZ5QHiwDtDGapXHB+5Q\npjo2PHAXR9QTyGjwFu1DJjcDtJm4fsZpS9MVFQhq+DsAmrepXUibTe4j5Y7dZvef375/FPrj\njwKfAWieuNpaMxSZkU6wnrwGzQq4JvJqwhfvM+3BKkBb3/d6fKAGHrcPWqvHDNq1Ilh/DLF6\nrnJaDX8J0EGYaKjibRrZIOKbOZLYKcP5kQ+qBFUyqFuL9Jy8TAsYFhwFaE/EXrRAe3LELg56\n6jRCDEzFLA8ID9YA2twx6fGBGngmoKvWoL0RmRfQ1T+WxPxiJa6fcdrSdEXltBp+ABqA9ktS\nG5W1Zij68UnLsFAItCd8HzTHhlCSUaWLB6eA0wgxMBWzPCA8WAY032WrO6MylBwRa+j4fr/k\nAG2nY3zlfRPuJkc6IkUJd0QOA/Qi12DkXVExLt/7A6AiQLUVrD+GWD1XOa2G/3mA/tfn90L0\n558AtBMTlgWLYa0Zin580jIsFALtye0BvTTPoE8GtBGRZglD6gGtol3ARw8lN3UboNMGGH8A\nVASotoL1xxCr5yqn1fA/DtD/+vj4+uv7n70qEbpd98v0QjDKHDYDgye2bEcnnxc1vAgArfPP\naIBWE75YVtulB0euQU8PaO9L4VkBbW+IN0+5X6zE9TNOW0pMkPfV8D8O0L99/PfXf//638cn\nAG3HhGXBYlhrhqIfn7QMC4VAezInoMW/x7QW0R4cuYtjdkC72yonBXQAoGMJ9qATjR1qp07L\nYQ+q/Db9gyrGVzI6q2Xy6bQxLWgHNBsjMxT9+KRlWN8C7ckjAJ3rjMpQckRyjI7v98v5gPYf\nTJoS0CGa3H2Jw91dqq+onFbDPwLQ0kC+Q4dlJbVTp+WY3+L46/8+/ve9Cn0WoOW7FblFiKA3\nNQXZkEo+nTamBQC0zj+jAVINgKZ3gr686C8/icwK6DFfEvrPZ+kr2iJp9gBASwPFHneWldRO\nnZYjAP3nx8c3m8sbodt1v0x3g9EBNBsG67GAIBtSI2ykjWUBAK3zz2iAVLsEoGXuBmaSp3I3\noJOPLjeDXkZss3PdYPVcWaSGvz+gpYFsrUdmJbVTp+Wg34P+/M+vifR5D6qUAS1dZgCJZdf7\nkt4bYFvQAdA6UbjerADQmc6oDCVHxPt0fL9fBKCJTzcC2qYP0yV6wjLf6uHEgGbW0RsqQKR3\nvVTzP0hYPVcWqeEfBWg6sFPNoKulXffLdDcYYxSKmKHD0DCD5m5XAUpuANA6/4wGSDUAmuoS\nPUmmX2kXRzruC2j/N2isniuL1PD3BnQw5vhTrUFfAtANa9DijVEFKKkIQOv8Mxog1QBoqkv0\nxONCkgcC2kC0dUVZpIbf/DU7bofwkVIlHarNC/JTPQAtCLDeo8O8iBFgrbHsWmtgBm1aYRir\n8s9ogFQL8sJqu8qdeIEVFpmU64zKUHJEvE/H9/tlBkC7A1IBaGKx5Ik8tWIh3eMGyrtWvSyg\n+WXTCmVpsL8otHquLHq9kDzWgE55LgbDHDXZo8Dbl7plVlI7dVo+GNC0uEraJV2i9bEGbVth\nGFuCihieekAHck/1I+Mxhw/8iHifju/3CwBNOhtUdV0zHXcHtPNFodVzZdEriMgnYQVo0rgY\nDHPUZI+MdGK61yZ5f3mt2H8AeiEjEOQdNcKyMccCALoIFTE81YDm4yL7kfGYwwd+RBlA7n6/\nbAe0Tr6k2kx1iwmG6YY8DND0K35TY7qiLPo2nVZWgA49AG1YQrpFs5LaqdMSgF7ICAR5xxxh\nfmxacBlAB2EjV5JRZXrRLOA0IobnyoA2nptwki+pNlPdYoJhuiFZQCuLTZ6QUysW0j1uoLxr\n1esPaHsKbWWYskji3ZtBUzuUrbl0sQeJxQDNSmqnDGcAmo9AkHfMEebHpgUAdBEqYnguCuh3\nW0qtk3ws65V6Vo5eLvnygYA2txxaGaYsWuu6M+iFLGWqKLVVmQ41bKPNBd5fM5wBaB5tQd4R\nI2zcty0AoGU6mg2w0NfjRXijHPQgQOudQ1q6AtobyZRb0j9Gt+jxCEBbWw6tDFMWvetm1qDJ\ngKootVWZDjVso80B0Avz7XrPRosBJAaCxbtvWwBAy3Q0G2Chr8eL8EY5aC5A2yp18hEEGOpZ\nuWRu4BM6Ux4IaM/r4oqy6D1wSa21D5rWYFFqqzIdathGmwOgF+bb9Z6NFmdsxAgb920LAGiZ\njmYDLPT1eBHeKAftALTsLz0i3g+i8JdMqWU5AtB8vdTq3rIcCujAS4m7Zr35AE0vAtB3AbQ1\nKLYFALRMR7MBFvp6vAhvlINOAHRIO+fj9eLIclNTcTOqaLnUs0EzaNlmOs2O5DyAdjvKriiL\nZCEAGoA2A4NeV/zR4e5YYQsArU0R42gNaxbQKyjZdc9PLPliIb53S6lnvyFDCpT53ABoNStP\npbIjCUAbqljNioB/DQCrY4YzAM3TQY0Ny1n58Cb7w28A0Dr/jAZY6OvxIrxRDpJJqrCmTBHJ\nZeVaDtBxqYFd9/zEki9aTObgZqp7/2jsAEDzrb68lDOStMvCP/EoWPW6A9pzhzUOyiJZCIA+\nF9CFAWKl1NiQEdZP1y+6znqlE6DdOiUBoLUpIrmsXGucQXu/ChEj5/2HtmCmugPoUuov2wFN\nVraDKuWMJOuyMcAyCNIxAC2aCrEXLPwNXwLQtJSRFBEEat+lPxyhFtBi/Fkxr46fpKwQUQ9A\nC0OCccoapU3Fwu4atLEhl8OGRtA6BzdT/ThAL/MBWn0Fq1zES/odZVcK+b/MCejoYACaljKS\nYvWc8eSSC7EegA5eHT9JWSGiHoAWhuhciEekuSAKe7s4rEfajKGcawa9pK3AQZXSI0lQPgrQ\n+u1PuSjW8Nxh0aCQ/wsAfQtAW2noQqwDoMXsRmktCACtTRHJZeVayz5o661blIwWN65BG12Q\nsiLQDBrek+jS+i8J6eLOIEAbC0jKRbGGODc0EtvlfVkIgL4FoI0Psm7SNAKaQoiHq9ZaEABa\n2xKyp6xR2lQs/MWsSLSqnkEvjbs4hE5TGgC9vgZVSo4k+3p0DKCtr2CVi2INcW5oTFcK+b8A\n0NcBtO10GRaqgGHCTkDLcNVaC3ICoG3v+G2o0BcXYqsyd/i4UDVmPIh63ilrlDYVC3uALq5B\n04EVR1z9wYB+qxS4006Mi+epy7RULC11p+OZZtA6jQHoewDaQZAxHLPMoGPCkpOLAlr5cRCg\nNaZiYRfQpV0cpII84upPADSZ/que8zKBeTzI3qluUa9MtAZtfBAGoM8DtB4gy7V5Rom40gUM\nE/YCus8a9AJAExtC9lR0gx29XnxAlzSmCvKIq6eAttyZGQ4KaG8oUhSkkKZT41hKEoytQUcV\naoBFtwgJm3ZxUL9YJf2Octt1T0TsAtAAtFOQjz8fZa9OJktpIdL7OQG91mERqtClsCDHhaox\n40HU805FN9jR6+V0QLvKlmZA182gF7qLI6pQA8y6xUjYtA+a+mXJ1NAdZVdY/lvf6ALQALSZ\nNkS7FR9enUyW0kKk93cGNJtMmfEg6nmnohvs6PV6MqCtryKTtAK6ag2a9yeIUkGVi+auTfcF\ndBANqXLsCs//SWfQOgnXKwD0YrknnV0U0NT46wA65QopwbHAx4XjxYwHUc87Fd1gR6/XUwFt\nTf2o1AKaupTo5KWkbt6fIEoFVY4YzK1jNcz6thV8KMKOJY5J16B1ErJsbZN7AJqGrO10EVe6\ngGECAF0KV0mTJkCLD+hmPIh63qnoRhD2h3MBzTdSGNIOaGGl4UQrQIOqp7o1aImDusHpKLsi\n+zrlLg6dhAA0uSZGgRZeAGhHgzxTZfPhKmnSAGi++8uxQlR2T0U3grA/nAnoUOTzhIBeiLUd\nAc0c4XSUXVF9VZUAaADaKcg1G6NsNl4hnQCdUaaKq6KlJjCDlurLM2hH26SAVtaxGmZ92wo6\nFHtn0LoSAA1AOwW5ZmOUzcZrhBp/QUDTpyE4FkTXBq1Bq5wMU6xBO8qWOQGtrWN3zPq2FXwo\n2teg7TgFoAFopyDXbIyy2XiNMIpxV4wAtCZKuYkMoEPc1hWYJ5ibOCGpu21jQ/Z0PUra5ECc\nvYvD0fSS4YDm1tNSLD8CryasY3ds5plW8GRo38VhRggADUCbaZOMteIj03iNUOMvB+h1ukhp\nIv04dh+0ysngANrrHIsn2SaPNQqiFA91wxzlOEBXP+pNDvsC2lThlpB91XE6B6BVVJBsbRMA\n2rz6cwmALjfhApp+I8aQyd3EPcQKm6bYJJBHCqHxAgD9OuDjQkqLFCKHJqBViPNw0E2Vk8Gi\ngeyrjlMAGoB2CnLNxiiXY9IRavzVAL3OoBkIpB8BaCZHAZp/uOH2ixQih6MAbf++JL8i+6rj\nFIAeBWgzjmN8Myqle0b4afekcgB0TgE51YFfaKK4Bk09qPwIQDPZAWgxUNqJkSZpayMtxfIj\n8GrCOkuhPSzBaEpHmHooUJaQjrQiBIAGoN1kZpqNUTYbrxFq/PUAbfysm/SjAPR6x9YmOmid\nrkcKofECAB2WDTNo2sgYQOudLRYNZAEdpwA0AO0U5JqNUTYbrxFq/AUBTR0jecjHhWqx0k9U\ndk/XI54wRF0PQAd9j4ModbtumKP0A7TWHWnyOqhcg6aNDAG0sTfcokHgp0acAtAAtFOQazZG\n2Wy8RqjxkWVkyFk2GublY03fmRrQ8pcBrdP1iCcMUXcAoOOyuxnYWTkM0NW7OGgjmEET5fE/\noVO6j2Rrm2wB9OcvWf9+XhTQDoGM4QCga5oIotdB5gr1oPLjBkCnSd/CC6uuMG1yIC4AaOdH\narla5SUxUAVAx2sqL7xu3XYNWm7ILkS8IM1MgP5cXz7Z5Xbdb9MdQJMoBKAJy8iQ02y0VBVi\nzfCi4x6/iaMATZZNF15YdYVpkwNhADrzcB+NJ9pFeU8nJR2yankkoCt2cSxqiq3jlANa+0YF\nw9qSfKSxEPGCNAD06yzwewZaDPekcq2AZrXNtFmvBV7AiV6htSRUvWAZBXQKlHzSFs2YF9B0\n48HCC6uuMG1yIDSgc49f03iiXZT3dFLSIasWB9Dss0PyZ3asLwRoy1JZIvACRoA0Alr/KEgh\n4iVpRNJL972OD1yD/pR8fhagzWHTA+ZFr9BaEqr+XoBmvwPFtSj0vG6NmkFnf8CItkC7KO6J\no9TtumGOYgOa9zz5MzvWFqCDsJk2Esg1s1vJOkuhPSxBaluk1dYlc/R5AQMYbYA2flavEPGS\nNCLppftexwcDOi5B/+NbqqrlJPz6n76W/i9LhPgiy8f/RGHSgFIV7Mu0rZBUGuWEZtpecHQ6\n7TilwrtxbSlpP1j98PXbZhgjUWoiiF4H6gbiGGLe91kIbGCplmBre1dJt0QYsKMgS7ivUZze\n0YLcOsOar9QnOmRbJbCurfZxtcpLYqCU7kAto9eE/V631CWm0B6WILXlW8zoDLyACQz1wm6S\nfrGxIoNfSlqqnOd7qind1xYBplQA+gXmuNTxkvY3h/d7y31n0P6bcd3Uiqq/0wyaPAOuHaXm\nhqsmMe7WKbGCl4ivjTNo/dS6O9XsPINmz8wntcpLYqD6zKBZG3ecQS8Na9AcBiLIZFS8jo+d\nQbO/ALTQLIDgNl4jVP2NAJ2IE3j7YaGFTVNsEsijIEvE17Y1aGox87qpPnW7bpijmEscYvU9\n+TM71gC0aJH0ixu7eRcHh4EIMhkVr2MAOljuSeUA6JwCcuq4x28iB2j3SUI1gxa3M8aK5LK6\nIrWx18ZdHOfNoJeBa9BWXgR5oqyzFApHpHtqhMrJYJUIvIABjGZAy94WIn5iQK9LG1jiMJrg\nA1Yc67rMpeqvDGhm/JuJfGCJ9Y2AZnkWZIX4au2D9iXpSBYzr2vtS3dAd9vFAUBLBbxsKWmp\ncp7vIrqVpccDmuzkaNf9Nv1WgA5BjJjXeI1Q9bcCtNzFQfs2J6BP3MWhoEdTQxqQ4tzKEO0z\nlRdBnijrLIU284LuRUUyWCUCL2AAA4DmTxJOB2iHoQIEHoHMsGkANPkknEqXY9IRqv5egJYK\nGVEdZWLcdVvpIMgK8bUZ0LJxlYrpKMVD3TBHuQOgaQNB96IiGawSgRcwgAFAe9Ku+236SEDL\nmZpHIDNsKgFNfxyHb9f1x7ouc6n6OwBaPiixANBMhgNaVgOgF9XbQsQD0D8SWIg3A1qtdXoE\nMsOmDtCJyGx7Amm1HJOOUPU3ALR81IQoZER1lIlxV2NNDoKsEF8BaNP/nFJrW7yJeQBtlQCg\nLwhovVvAI5AZNhrQRmiQTVBsewJptRyTjlD1DYB2++yZMRbQfLsYV8iI6igT4y7hSfMsyArx\nFYA2/c8p9faN2N5yEKAtn40E9M222V0J0MZ+W49AZtgoQBs7ZuljBGEhU3bSajEmPaHq+Q8G\nXBDQ4oELrpAR1VEmxl3Ck+ZZkBXiKwBt+p95761PDtaZgOZnVhsnAXqmH0u6HKB7z6BVyC6J\nOnzAimNdl7lU/eUBjRl0UWYCtH47BaBf1ylp1AdmGRWvYwD6kDVoi9B8iUO05491XeZS9dcH\nNNagSzIToDGDtoWRRn/lJKPidQxAH7KLw+Izw05SXxrrusyl6jcBWjwsXFBATh33+E1kAb0k\nx4RolgkIRlRHmRh33VY6CLJCfAWgTf8z762+qV+DluOQ7slelJPB8pkoYbVxBqDjlC3VlFHx\nOgag3Y0WDLG6XjZsatagl4VNFM30L8akJ1T9FkCzD145ZbYXjRJuE5sArcbnnoAW0VsvNYBO\n7duBHk/V2BrVeu3ikOOQ7slelJPB8pkoYbWBGfTDAP3L8VW7OKjWpF6mlK21JFT9BkDzsMkp\ns71olHCbAKCFdoLBqwNaNDEM0PxascBEgMYatJWzxggs3QHNP7o4jZMmRAmZUrbWkij16U8G\n0OKDV06Z7UWjhNvE9QCtNfpixlOw7gVRgkRvvewBtHBPlxm0bR2vobKRNyB7YbokuCfmtYkA\njV0cRs4aIyDdpgu7sLLDhn0hSPBiDlvUmtTLlLK1loSp54Ez6wz6+0I9oMXnAmOwpSkiuay+\nBNEcewWguc9UjJggY9bxGiobeQOyF6ZLgntiXpsJ0LKmvP46BqA7AzpcGtBnrkEvALSM3npx\nf82OnpukXaR7AGjDJNUvkjnSQG/oyoAOqjAAbbuNFnZhZYdND0AHV2cRDNEIop4Hzqy7OBYA\nWkZvvQDQNQXsEkcBmoyGHP33Ndbl1wkA3RvQ1hq0kRSpCaE+LGTLh1GpJnPFUza8scI+aJnS\nngp56rgnE64SgwC0jN56AaBrCtglAOhnAdrYxWEkRWpCqE87cMzGazI3zuExg17oXXqqwuJ9\nEGSF+HpJQDNdJmkX6Z4bA9rcStUG6B8LWdcrIt4gDYtu1vzrBIDuD+hF7YN2Ey5qTerZIrbZ\neEkCAG2ZwpNChQW7ISz7eb0LoHXjvNKhgGaPB7Bk0wNk0tU9Ma45DyMA0E8D9GLMoO1RY0SI\nRfvMoBfWt/TnLoBmf43BlmV5Uuj8pzeEZT+vADT3mYoRG2TUOl4jLEtgzGTJpgfIzDT3RF+z\nH+cFoCcDtKwxH6D7rEETtbwxAFq2pREjLPt5BaC5z1SM2CCj1vEaIa3FMfu0EZlMc0/UtRBs\nQgPQALSbcIwIZKx8QNpPJDqlAOiF3qWnOv/pDWHZz+slAK1apLq8xrl7jgN0EMxkyaYHyMw0\n90RfwwwagF7v7AR0Rqe5jOYJAL3Qu/RU5z+9ISz7eQWguc9UjIgY9qwjFQ+dQXvJA0AD0G7C\nMSIw1Ng6nUmAJwA0KRScMwsxwrKf1zsA2nYTB5MDaPHZrQugj12Dll1YLwLQAHQnQHvLaJ5c\nFdCJVAsAXSUXBfSxuzhsAaABaD/hEocEamydD5lBB+oYFsLaAOY1T5lOCp3/9Iaw7OcVgOYX\nVYyIGPas4xXFOAhTmYoif4sFTGkGdOBdr4h4AHqRIX4zQHdeg37d5SB6MKCD8ZJeAWh+EYDm\nXa+IeAB6kSHeAdCu388AdOUujljdA7SJIFUjE94AtNevWMjmnLoHQAtF2ggAukUAaPsyVdsf\n0JsyF4AmhQDoRkCvrZwMaCfRvJPMNVGiG6BLkQFAfwsArcy4A6BF/ALQXABopwQA/XBA26MB\nQB8GaJZbcwM6mPfGAJo+SjoE0BJOlwa0kXqpOgDdqB+ALgkATco8CtDsx1gA6JwA0BcFdGZw\nyAUAmtYzSgDQ8cpxgOY/ZzgW0Mx9dk7cFdAyT1oBvb48BNBB/4n3AOgpAb2OlQFom2oANBcO\n6PhA0ymA1huNAOjXDYs08fSWgDYBNgbQWlUfQKfWAehbA9rrygBAnzqDNrbq3wXQ3CYAuqA/\nD2iLjFcBNIePobVSAGhS5kmA3rYGLWNuF6Cth13vDmieLgD0spp+HUD75JgK0EH06gxAx9AH\noOtl1y4OGXN7AG3+XAwA/boBQC+TAPpLqAeg88YB0Ol6H0BTj+wGNB+JRZwxQHeaQXNtAHSL\nTApoHk4AdKoCQJtnALSMuV2A7rMGfSCgk9pjAG0MPwC93loeDOjVBgAagNbGUn/uA7S7i0P+\nQ5tXAHQaEG3sZkCn+wA0AE1afzsk0CGnN9gFAJq9pFcAWl9jHaCoMaxT/1T9TQGd0QhAf8tV\nAU0Guy+gXxuuYn4IQLO0AaDlS3oFoPU11oE8oNOXhwC0HH4Aer21XAzQntZKeQURlUUCmqeN\nBHQOr2Y/dAkAOl4aDmjyYajrLg6jx1sBHQBoAPolADRrXfKZAzrdAKC7Atrn3DhA0w9DWwD9\n+oRVNHwXoMlHOADaBDR3PACdrjE0GaUvDWjF59IMmhsAQF8H0GwoA3tlJsnGxdblQYBOX4IA\n0AA0AB1bT1Pkd83MGjQ/yGo7G9CBmwhAiw9D9YAW79/7Aa1NZwswcwPagIADaFIagDb1zwxo\n4fPT16CZbbEZ7qmFzr9K2k4GNJvxkQYy1l4J0H7AONI+g1afsHYB2sqj/fugX8GpmpXVAWgm\nALR9+ce2eWbQK3eTbakZ7hs2/yppOxfQfMZHGshYy5PihoAWH4Z8QPO2u86ghwFazDKk7mVx\nSgDQALRpA/2S5mRAC/EAvWbp+YB+W+ADWsz4SAMZaycGdALrLkCzXRyktTyga9egOf8OBjSz\nkFdhRTIFXDkM0OSzKjfQZBUAvdASXQFNPmxeDtBsJ9SkgGYJewigf/0ZB2ji9X2ATu1vAXTd\nLg7Bv0MBLeb4vAov4hbw5ShAkw84APSpgKZf11wO0NyASQFNcXF5QJNoOQfQNYZL/j1nBq1j\nIRm4BdB09gNAYwbtqp1/DboC0OQD910AbS+9V8poQKsJqga0DGRt3Q5An7gG3QnQ8n2YGuix\narkxoN1OHwHoadagNwF6Scsb8wNamHgkoLN5SBrdCOj1+umA1iMZVivNUocA2rFaIVOZXnbk\nMYBeAOi3zADocbs4tiXuNkCnixcANNdzZUCfvgbtmMmviAnq4YDOjb5xvLZSQWiWe+MALYaZ\nGg1Ar7eW3Aj0BDRvvEgpAHoRgFY0uTGgyS6OSogqGQ9otSrM1C3EXVsALTHcF9Du0rVs4hBA\nk2EGoN1O66+wAWiutxegK7sOQDNVvQFNle0DtHttWkD7mz9kE8cA2nRRYtJ8gN4tIfgX11da\n5NdZkHXeJcLXl2wskP/03a9YL2egW1kXCFwr0aGUVotfWhkf6MXAilW0HDz/FLtOXlYPBHo7\nxOJOU7QVTxl3qmwr0L/ixRqWioG3jHG6wkNsjd5t4yxVv9UHrky61KmtY86oQK4F+scdJllQ\nDQqvG+Sd3Ogbx+9Ggk54q4kgj8hNHQvJQKNH5Qz1mCSv95PrzKCNN1TMoIXe82bQYcEMeo1e\nzKDFnYYZ9DLXGrRokprItnyxNh+2xGEQGoAWegFoALp0ZQygqc/6AHrbLo4zAR0A6IW+W5Fr\npwKaWHs8oO0cAKBvAOj4/9sA2jG6AOgamQLQ+vrrz8MAbexmPwLQmZQAoNOLBWga/AC0KzyX\nxBaOEYDWKAWg2wAdmQRA/wyAPwLDAJ1bCCsDWn/YqxcAOpUBoCt3iGwDdAzuzoCWyu4L6Hl3\ncbTrfpt+jX3Q2a0+RUDLBwScdpzWXdvuA2hqeQdAc0fcCtDmhmbLcs9wo1QKbgC6FdAuqxYA\nejygC5sxS4BWj9jazTjyLED76MkCmoJzEY44DdCF1qWcBWgS3FbCcesAaNokqQNAr7eW3AiM\nAfSybwYtCQ1Am3p2ADq5F4C2dW+bQQPQRX3C6OBc/xYAevI1aMygU2tDAE0cLIYCgJaGW6WU\n954CaHIBgDb1XwbQu3ZxYA06tjYC0PQjyr0AHV/laPYFtNrFAUAX9T0G0KYzJgR0RixAC5Q8\nBdDLgYBOJ7edQR8FaE4pABqAXvUvtjPuBugFgH7/HQJoaw0agOYXngPozGMSljIAOqd/sZ1x\nP0DLC/WyF9CZtXN5ellAG7s4jgY0CVkA2jLiKEDnHjS2lAHQOf2L7QwAOl96A6AzuwPV+Sac\n3/1AAAAds0lEQVT/kCrnA5rn10BAkwMAel5Ai9gAoFv1L7Yz8oDW0QdA8wuUdy6hAWgAWhyd\nDuhGPpMBNx5Z8ABN934D0Lb+xXYG20t0D0DrbKiULKDlVIF09IWKzBM2ADQALY6uD+gNM+h3\nOQA6p3+xnfHmM0/zeOuigHYCtyQ5QOv9exzQy2kzaNbiIwCdmgSgLSMOBbRlkhiVleQAdE7/\nYjvjFebx+VPr/dC4NDWgSdh0A7TxBIwE9GFr0ASCSzJDJgUA7cslAC1GdEJAV+7iiB8uAeic\n/sV2RkgOvAmgrViokyKgWZopQOeJx86NggcBmiwGAtBUNwBdJwnLJgQMQGMGXaV/sZ2RmLZ0\nBPQ2AI0AdEvmFgHNimpAu+oOALR8R3J8SRcDGwEtEQNAiws3B3TMhGpAd12DDs71H7kpoJ01\n6EsDmiitlgygK9agM+qmATSbygDQ7yZJ7APQJUn55QNajXnHXRyPBLS9i+OigB6yBi3zbh+g\nN/rndacDoPliIAD9bvISgNY5dwqgQxOgmUoA2tS/2M7IEfmKgCZp6+pzW3dtC/LuNQFdOYNW\nXgWgfakZ29GAtje75Y1tBHTVEgcA3aB/sZ0xFaDLo1UF6DIxndZd2+4C6Lo16A2ADswRALRn\nzFBAy+1u4wHtqQGg2/UvtjMAaGGiadttAF21i6Me0HQ+zu8B0M5FDmg/5OoBbXyDPRLQJNYA\n6AsBer12LKC5jQ8EtFhPLgKatLAf0HrDzIUBrQL7IoAWu4wXy5mGbTsA7asBoNv1L7YzAGhh\nomlbFtAq+coNdwN0XA/cAmhZNlPGaipWN3Y0Hgdo2u1HA/r4GbSvBoBu17/YzgCghYmmbbMC\nOn2jfgagT51BDwd0aa+LtNO9wC/2B/TBa9AzAnrtPwANQHNN5wI6TWHPAfSZa9CjAS0/m/iW\nly7wiwMAfewujgkBHd+hAGgAmms6F9BqBk03GB4B6BN3cQwGNNtNlre8dIFfHAFopWwkoHMh\ndg6g0wc5ABqA5ppOBrSY57FHdHxjOgJa5GQ/QLO97McDmj+Pkbe8dGGhvdkKaM8PCwAdj9Jg\nAdB3BnQmW6YFNJs60y+LpgF01TRU62BPg8oUHQHo1b/R7I4zaLpGvA3Qvh8eCmhLO2bQ6tId\nAS2+aWG2zQvo9XZY6KxvHkDXTUNV5LG3mjMAvRBPFiwvXWC92QbojB8AaJJ3912Dzn678ChA\ny71KzLZLAHrGGXT8EtPVZemQ+/fOALT+3tWzvHAhsN5sAnTODwA07cxdd3Hk9+c8CNAii6Rt\nMwE6rTpLQM+3Bh29ug3QM8ygicKslMu3A3rCGXSYBtA51zXIlICWTHouoLUvmG0K0DQUjwX0\nOiX9JQrQNbs4DgV04wxavNVcHNAitJi7CoCebg2aL9YA0GMBrWaN0wNaU/GwNWhx7yRAp6m+\neGtVYzsHoBvXoPlbzcyA1jFjjS1PMvJaAvRkuzjEZwEA+qIzaAt10wO6sItjDkCHYBNaA9pt\naiSg06js3MXhGjMC0PRPFXDJTR3qVnmeZDltiwA0i+XdgK6I1ZzIxRoAejCgB61Bm4sF8wM6\nY9v5gE6LGJUz6HGAFuTgE9C1BN8HXU7DWmOGAVotEvHbjm1GqJffi5RS27r5AC33owDQowFd\n2MVhEL0C0Ioe620AOlOwCOj3n+wadOYCaQiAlgqWOFXZBGj9RllhzJUBzWZ0APQBgObSBdBm\n1D4D0H7GlC7UAzq3i2PJXCAN3QfQEmKVogEdQ3b3DLoYxJcGNLUYgJ4Q0GlJ0QW0sx8CgM5d\n2ADoVGhqQLMxmB3QaVKxdw3a/qpZtzcU0FlnqqNtknznz98A6Ab9y2GAtoPUnp5E2zx9Risc\n0Dx5JTyKDZbkIoBWNQHojLBcek+cm2bQqrw9OTHayxgOQFtNSp0AdDug7Yr+7AKAXi89FtDV\nxnQHdARzwxq0ttVe3jPaA6DbAJ3TDkDHawVA2wByYxeAXny/iSrXA7QZLJbKKmN6A1pOnfcB\n+tgZtKfnEYA2awLQOwDtzy4A6MX3m6gCQHcFtArKnYDeugadsw6Apk3yuk7NawO6zD/MoB3b\nAGhtytpKCMn0cwBdZKIUawYdz+stM2XbLo6cdQA0bfKtMt+BSwO6/N4+FNBvQtu2+fq0Eq4e\ngLZbHA5owuegxv1QQJdXFaQYa9DptN6yNim+swDQVpMvjWwbds64zXI6oCtWx0YDGrs4MuUO\nA3S81QPQZH8abXIkoGmcvYJqM6H1Lg7nLG9ZmxTfWQBoq8lFjvTNAF3z/XIVoNfXFkA7w3Fl\nQHOfPQ7QJ8ygBaAz3224ksmlAwHt2X1bQFvJuQHQYqRvBuhuM+j19RRAB6VeANp6k94lAHQe\n0MevQQtA755BC22HAdp9ZxkM6CDa3SjnAfreM+hua9Dr6wBAF0eLwOC5gE5lpgD04bs4JKB3\nrkFLbYcBum4GnXFjG6DZG2qDnAjoe69BZ8ftLZMDmn6cBqBnAbR1sS+gVVByQO/axaG0HQfo\nqjXo3oDmS1INciag772Lo0LmBjT7QqoK0B1yC4CeH9CbZRJA1+ziGAPoqiGx5VRA68Y84zYL\nAO0HxbAZNABttgRAZ+w4BtC5OT8AbTXpNOYZt1m2APrzl9C/AHQ0aNsaNABttgRAZ+w4BNDZ\nVfPxa9DJf9sFgP76fL98xhMAmlsEQBPb7BZHApoAUhgAQJclLOmjoCljAb2kSU6TANDXALTp\n/eGA1nbajxkA0AB0Rs4FdGnndi2gXcsK+6D3eA6AJpS+LqBNlwLQ2XIAtHtHD/Ha5NbtG2+5\nxwx6F6CbewVAG4D+x7dUVdsn4df/6GmwihgF1zvhK/3n3c/rrxOiPpgW8z/7Rdse9TJXOArV\nZc+xGYNjl+wy8qo1duJWpsQX75Rq3FJIm2QNVAx83hg9xGushUw320Q32F3DV6XhIiKMGPQq\nZke2GGm1YgZxSLdMRHyxIKmwwwv47uMSpQLQry8HMYOusPO0GXSaB/SbQee+OsIM+n2aZtDb\nHyF8y5YZdOMkPaOh1OplZtBW88+cQQPQrp13AnSWN3lAb/lkfhNAl5ZyM7IB0I1vARnhlDLE\nBbTpcleDd2vfd4QANAC9yc4bATrPmyygjXrzANrPMVnduWMDejliBt2sIqOBvJoCQFtNOo15\nxm2WDYC+/i4OAFoULl4gM0LHkBygrYoPAHTz9LYa0O2T9IwG8moKAG016TTmGbdZLglos4hR\ncL0DQNuNVAG6MFvLANrESBHQhd2yzDLDliygl3AIoMfv4sAM2rPuwYCe50lCs4hRcL0DQNuN\nqMwyYzs/IcwAeuMMemVb9s3gGoBuFKxBdwC0HcSPALQt7bqrTQeglYwAtJn0YZGdMdvosAb9\nVpVfTgGgvQt75SaAdoIYgG7VX1Oo4lMyAC30bge0zcZSuGYBve35irDa4MGHD++zAd1dhgO6\n8DbfB9BeEAPQrfprCgHQSvoD2mHjPkAXdOpbhRn00YDOru0A0K+jOkCXFsq6ANoN4jKgAz2r\neecGoJMA0FKGzaBroGe00QvQhTXogwFdbwwALVuSF0tfNfecQZ8IaLOPAPRjAa1CsR3Q9gMp\nxwH6rbx60joe0Bum8wC0bElcK27W7LgGbQTxUYC2+whA7wK0NxpPA/RiBddhgK7YOFbaD98Z\n0FsWxAFo2ZK8eMwM2gvigwDt9BKAfiigM1/u99oHXYJOL0DXPHpxMKAfOIPOabnCGrTTxFGA\n9t7SnwVoc5wBaHGhCdBOoQMAHbzY5nWPBfTz1qAHArq4i6OSjAXrnOYxg27VX1WKdtlOmukA\nzW8A0CWdM86gs1ABoNfTSkAXlB8AaG+S3g/QWIP23qN8QJORfzSgvT3OJTkI0D3WoC1b9wF6\nozHjAN0jZvJyf0C/A2wooB+/i8P7JAxAiwsS0O4e55IcBWjz2x1ZF4AeJicDOtSS0ZEyoFdw\njAX0duMKVS8GaMygX7IV0Ob7Wk9AkzKt+6ArTAGgh8ndAR2ndgD0Jv1Vpagvtq5BA9Dpc0fF\nI5lKJga01TgA3Sh3BzRm0G36q0oVJk6xxLSA5n8xg24UsTfGahyAbpRTAb2s5BwI6GPWoLcb\nV6h6PUBnSgDQp61BVwJ6326EvoDeZ8xjAS1S6TqAPmIXR4NxhaoA9DMAvWMXR7bYNkCXd2rk\nbckD2voAC0BXygMA7fURgN5rei2gzZQDoOn8wTIrKz0BXbHXOW9LFtBm68MAbT2LBEAv5kyg\nQjsA7VQFoAHorHQEdM3TgnlbcoB2WmcDD0DnFXQAdNsIA9BeVQAagM7KRWbQaaOK5DYtORDQ\n75enA7rxPRiA9qoC0AB0Vq6yBu0RGoCukz6Abv2QBEB7VR8A6Oh/AFoUrtHUFdAjd3FgBr1L\nNgGaxZYxg96uHYB2qgLQIwDtPRES+Gm7tABa6T0B0Puk5ktCq5MAdFk6AbrxQxIA7VUFoN3G\n2wEtg/RsQL97H0SNmwH6+7b9MQGALksvQLd5dSJA140iAE3lYoBWM7l5AM0Muxug7Tq0JACd\nV9AD0G3aDwG0owKA3mv6tQCt1kIDweaW9jLSCGhuGADd2RgAulk7AO1UBaCHz6DJ2cmAFm8d\nAHRnY8YBep+pNQJAk1MAepvpfQBttzJ8DZpC8URAh4RocrUsBTQA0MSYYYDeuT2xSkp8HAvo\nCgOyAkAD0BVGRDwqPs8A6Deh6dWy5MkQDMcD0I1SeARzR8s1AkCnUwB6m+mXAzRXMMUSxzs2\nt+/iyJVK7zwA9DIM0K1Pf2yTGwN6ofkHQG/SX1Xq0oCms9abATpxA4B+v2AGvUs5AC2rAtD9\nAO21JVd9TwQ0vVyX8plSZGYHQL9fhgD69mvQAYD2qt4D0NZSKL93JqBJgW3t+dII6ECfRq9L\nesyg640ZBugDdnGcCehXFI0ENPkLQG/SX1WqyD1rKTTdfDcBQMc8WChc83LjNeh9A3HsPujx\nch6g36EIQFtV7wBoeyKX7r6beDygUx6oLdG+3HgXR0dAF4KsTp4J6EBjEYCWVW8AaGcpNN1+\nN/F0QHMmd5lBm6UeCOiEFwC6QTNm0H7VGwAaM2jDAg1oOWnusAZtl3oeoMkEEIBuUY01aLfq\nHQCNNWhtgTuDXpc4lsqNAQB00Zj0zndxQGeNP2IXR3tTAPTMgMYuDq5A3QlxEv0O0vptW5WA\n1rYNkFl3cdxlBn0aoKsMyAoAPTWgY8ERgK7P48kBnSYqGx58qMegsG2A9AX0zs3Fxho0AD3S\ngKwA0LcFtNtYhGC/2WZ3QNsKlCm09/LbwoLcFtBb3qWKxqxLbAD0OAOyAkA/FdCbZpvXAPSW\nPjVg/BqA3vQuVTZmVQZADzMgK9WANkdtodcB6M2mnwjobbPNiwC6/lNBbcHLAbp+I3idMasy\nAHqYAVnpCuiKsACgqXQAtOvRJ86g6yfGtZ0/AdAb3jrGL3FEZQD0MAOy0hPQNYEBQFM5E9A3\nXIOutqF+lnk8oLe8dZiA7vklYVIGQA8zICvdAV1MZQA6yUBAZ0biCrs4bAXKFBaYIh5zMu8M\netNbhw3oftvsiDIAepgBWdkLaL2rvWALAE1kHKBzI7G9a3WA7hHQRUDzWwrQ9Z8J5lyDrl9C\nzgC6lzFUGQC9x4LTAE1DCTPozaYPA3R2LADopToOLzmD7mYMUQZA77FgNKAdCvBPinWRBUAT\nGQXo/DwMgK4W1vGrrEF3NCYpexygdy4UcQtOAjTHQN2vIADQRDCDljIXoLkPL7KLo6sxURkA\nvceCOWbQVekBQBMZBmisQfcQ8S53iX3QvY1ZlQHQeyw4C9B8DboO0N2My1d9OKBrdnHUyzMB\nLdeJjgJ0ZZ0FgK6SRwOafb1RZQYATWQgoDMCQFfKSTPoyjoLAF0lzwY0yw8AeqPpALSUqQB9\nzhp0bZ3lSEDvah6ABqBV1d2APkJCdUGj5PtaqG+lWSz1vEB86aRPthWMoy/R+dDVhrchfdvr\nqIb1tmcQZGLtkhJqo0IU7NfncSmaDwCREHVmHD7SmEFLmX4GbXzD6c6gAy/TdwbNBTPoRsEM\n+sQ16K1mXGYG3a673nQAWsrXEr+c0wrE0fJ0QAcAukI2AJrHFgBdEgA6FnwQoK2HbEINoIup\nuN+2QdIGaLrFFYB25bmAFl0HoDebDkBLSTNorp/t5qR6g3vWXSYDNHtIDIB2BYDeZAYATQSA\nlhLXoLl6/jwU1ftUQPPHeAFoXwDoTWYA0ER2AXq5LaDlk3XiFwWY3qcCGjPoWgGgN5kBQBPp\nAujNgz8/oJV6zKB1HaxB10kzoDtaAECrqjcDtH/xAYDGGrRVh1brN9sDoEm9bhYA0KoqAO3K\n9QBdvYvjYYDe1cAWYwDofRbMAegqKwBoIgC0lLJtAPS7DgBdJwD0egZAbzUdgJYCQFfXAaDr\n5NGAZukBQG81/TKArioBQLcKAD1QAOj1DIDeajoALQWArq4DQNdJKSoAaLvJCgGgswUBaAB6\nRwOZhvU1AHqgBTkBoAHoRvWqxOmA7sopLQB0owDQALSqCkC7MgjQXSCxE9AdLPBlIGf2Arpn\nzwHo9fQoC3ICQAPQjepFicy/UrtBNgJaPhS+34CMzAZovrrTTQDo9fQoC3JSCWjvWWMAepfp\nNwK08RvOLbIL0GNXOADoVgGgAWhVFYB2ZSCgdwd10Tb/h6I7zeF9AaAbBYAGoFVVANqVAYAO\nRwFaKqHPgPeZw/sCQDcKAA1Aq6oAtCsXXuJQaujvBY0mNADdKAD0HICuUghAJ6nHyfyAPuRL\nQg1hzKCbG/AbNq4B0AMtyAkAfR6gNwDlAoA+ZJudgjDWoJsb8Bs2rj0B0MO2BJ0H6IYOAdCr\nbPlIfglAb27WkJo1aH7unfSXBwN6X/sA9AyA3oMaR24N6E1rpgB0VBRyp0NlMkAPogkAHesd\nZUFOugG6ljUA9Cpb1kwvAOg+8bzVNgC6uQG34eqLtQJAnw/oatoA0FE2rJkC0J5eALq1Abfh\n6ou18nhA72gq6zv6L8HlAV3/eR2ATlI/cBnvPxzQXbTWCQDdKAB0e92c79i/pVw1gwagO5hu\nieG11d2TALpTOAPQ1VUA6Dq5LaAZc6vWoLHE0cN0S7TX4uAA0EcJAN0o5wK6FJvjAb2nKd93\n/Ondml0c+JKwi+mWSK+RwZkC0N12IAPQ1VUA6Eq5KaA3zqBrrQCgW2TyGXS/R0QA6OoqAHSl\n3BXQm9agqwWAbpG516A7PmQNQNfW4FUAaF9uC+gNuzjqBYBukal3cfT8mSIAurKCfKJysC0A\n9C4L2qvu/C2O7QJAt0jGa+cDuttP2S0AdG159Zskg20BoHdZ0F611ncA9Eb9+6pLmRvQW372\nqSAAdFVx9ZYIQPvSBuiev7x1EqCbegBAt8jkgMYujp2CGfRAqQc0q9SR0OcAuq0HAHSLzA7o\nboDYaNuRT3rPBGisQW+QFkB3XLVbTgJ0Yw8A6AbJ+XkOQPeSbbb1nOWUZSZAYxdHvTQAuuf3\n3ss5gG7tAgC9XbJ+fjCguyZRWaYCdO8GCk09DNCdQ+sAQGsdmEEPMl1J3tPbh+AugO48zSnK\nOM7s7wQA7UvzGnQ/C9qrtgMaa9CDTJdS4NBzAX2bGXSHbgwG9D7zrgjorl9vnANo7OIYY7oS\nANqTe6xB9/ggMJYmO807G9D52w6gD7QgJ3sA3SQA9HbBEocnd9jF0WWlZiig99oHQLdXBaAv\nAOjsGuUBgL7DMkIHGTuD3tlGH1PMpna/gwDQ7VUB6CsAOrsPenNjmx8GucUXcftl6Br03ia6\nGOI0hRn0TgOOeHMDoLfp31d9gwwH9KFfxT0S0B0+omAN2pezAb0rfwBoALrQ/qGb2Z4J6N0y\nesvBtXdx5G+PBvS+/Nn1Y0ktAkB3Fsygj5J5bZtl064jjwZ02DfDqfRdvwgAoDsL1qCPkmlt\nm+axN0ceDehDZtAdIwCA7izYxXGUzGpb30WoAYN9EUCPCvPxa9AdI2BTIwB0hRyxD/o4gW0N\n0pfP/Tl1DUCP+6A4fhdHRz5vaQaArhAA+iiZ17a+fO7OqUsA+tCvWurl2DXojU4AoCsEgD5K\nJratL597c+oKgD52s1K9HLqLY6sTDgL05y9Z/35eDdANMTUxaGBbo/Sy7YaALvXmFjPoTjLl\nDPpzfflkl9t17zR9k7RE1RNAM0IeYdvtljiK/Rm/Br1HDvbdjGvQVwZ004TnEaAZIM+w7WZf\nEpYTZPgujl1ytO9m3cXxKfl8CUC3bYJ/Bmj6y0Nsu9U2u4oEmXlYJ7fuYEDHJeh/fEtVtbPl\nHX5nmwGBTCpIkNmlCtBxheNqXxJiDfo4gW2Nco016DllauuOm0F/qoOLABq7OI4T2NYol9jF\nMalMbd1hgP40jk4zfbjAtjaBbY0ytXGwrl2OAvRnegWgzxXY1iYz2za3cbCuXY56UCX9ITs5\nTjN9uMC2NoFtjTK1cbCuXQ7aB71u32APEgLQpwhsa5OZbZvbOFjXLvgtjiEC29oEtjXK1MbB\nunYBoIcIbGsT2NYoUxsH69oFgB4isK1NYFujTG0crGsXAHqIwLY2gW2NMrVxsK5dAOghAtva\nBLY1ytTGwbp2AaCHCGxrE9jWKFMbB+vaBYAeIrCtTWBbo0xtHKxrFwB6iMC2NoFtjTK1cbCu\nXQDoIQLb2gS2NcrUxsG6dgGghwhsaxPY1ihTGwfr2gWAHiKwrU1gW6NMbRysaxcAeojAtjaB\nbY0ytXGwrl0A6CEC29oEtjXK1MbBunYBoIcIbGsT2NYoUxsH69oFgB4isK1NYFujTG0crGsX\nAHqIwLY2gW2NMrVxsK5dAOghAtvaBLY1ytTGwbp2AaCHCGxrE9jWKFMbB+vaBYAeIrCtTWBb\no0xtHKxrFwB6iMC2NoFtjTK1cbCuXQDoIQLb2gS2NcrUxsG6dgGghwhsaxPY1ihTGwfr2uVU\nQO+Tf5yi9foCv7UJ/NYscF2zdHEdAH0lgd/aBH5rFriuWQDoxwn81ibwW7PAdc0CQD9O4Lc2\ngd+aBa5rlgsDGgKBQCBFAaAhEAhkUgGgIRAIZFIBoCEQCGRSAaAhEAhkUgGgIRAIZFIZCuhP\n7/ovyf19usBvzfKpD+G1svi+gPdKsjVb/RqWnAHoz/eL9/fp8uk4AX4riwY0vFaUFSD0Ev0L\n7+VkI+WEo0sCQM8nAHS7ANANYkzsAOhq2QpoL71tGQ7o98T+80t8JJKDjEGP8rl6IrmO3oTf\nMiIzQl82zx8tn/Tgla98AQPey8lGyn1t89toQMdsedlv3jPPnyurp1aX4Y1tgwDQ24UC2nIe\nvJeVjZT72ua3Q5Y4jAGNPfm0zx8sn1/cHTJX4LeM2IyB13KiAP3FHQPvZWUj5b62+W08oN+f\nmeJ5uoVBtyS+yQLQDQJAbxcAepdspNzXNr+NX4P+st5bPvmLOn+wfL7EBjT8VhDTb/BaVgqA\nhvfyspFyX9v8NgrQLEuU6fZIY9C/JTeDht8yYoZcvAGv+SJnxl/UMfCeLy2U+9rmtyMArSb/\nn7yMOn+yJB/FLwnlPfjNFDPkvuC1spB90M67G7xnSgvlvrb5bdgSB3l+Rr63rJ/hv8gfev5o\nIYCO2+zWS/BbVqyQg9eqhDzlFp0TT+E9V1ooNwmgIXsF8Q+BPF0A6GkFgIZAni4A9LQCQEMg\nTxcAGgKBQCYVABoCgUAmFQAaAoFAJhUAGgKBQCYVABoCgUAmFQAaAoFAJhUAGnJf+fjQRxDI\nhQRxC7mvANCQiwviFvIEAaAhlxTELeS+8oPlv37/+Of30T8//vf19b+P3882CgKpFwAacl/5\nBvTfnx8fH//8dfT3x29fX79/UxoCuYoA0JD7yjeg//g1Z/779++jPz/+8++PP862CQLZIAA0\n5L7yjeXfPv76+vrrZ7EDv2EMuZoA0JD7yjeWX18P/rz+++Pj3ydbBIFsEgAacl8BoCEXFwAa\ncl+RSxy//YYlDsilBICG3FdeXw3+/vfX+iXhfz7+PNsmCGSDANCQ+4reZvfbx99nGwWB1AsA\nDbmvvB5U+Sd7UOWfZxsFgdQLAA2BQCCTCgANgUAgkwoADYFAIJMKAA2BQCCTCgANgUAgkwoA\nDYFAIJMKAA2BQCCTCgANgUAgkwoADYFAIJMKAA2BQCCTCgANgUAgkwoADYFAIJPK/wM6Mx3m\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",
+ "A data.frame: 53 × 1\n",
+ "\n",
+ "\t | additional_product |
\n",
+ "\t | <dbl> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 366 × 1\n",
+ "\n",
+ "\t | total |
\n",
+ "\t | <dbl> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 366 × 1\n",
+ "\n",
+ "\t | total |
\n",
+ "\t | <dbl> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 9 × 2\n",
+ "\n",
+ "\t | a | b |
\n",
+ "\t | <int> | <chr> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 9 × 2\n",
+ "\n",
+ "\t | A | B |
\n",
+ "\t | <int> | <chr> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 9 × 1\n",
+ "\n",
+ "\t | A |
\n",
+ "\t | <int> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 4 × 2\n",
+ "\n",
+ "\t | A | B |
\n",
+ "\t | <int> | <chr> |
\n",
+ "\n",
+ "\n",
+ "\t1 | 1 | I |
\n",
+ "\t2 | 2 | like |
\n",
+ "\t3 | 3 | to |
\n",
+ "\t4 | 4 | use |
\n",
+ "\n",
+ "
\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",
+ "A data.frame: 1 × 2\n",
+ "\n",
+ "\t | A | B |
\n",
+ "\t | <int> | <chr> |
\n",
+ "\n",
+ "\n",
+ "\t6 | 6 | and |
\n",
+ "\n",
+ "
\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",
+ "A data.frame: 9 × 3\n",
+ "\n",
+ "\t | A | B | DivA |
\n",
+ "\t | <int> | <chr> | <dbl> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 9 × 4\n",
+ "\n",
+ "\t | A | B | DivA | LenB |
\n",
+ "\t | <int> | <chr> | <dbl> | <int> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A data.frame: 5 × 4\n",
+ "\n",
+ "\t | A | B | DivA | LenB |
\n",
+ "\t | <int> | <chr> | <dbl> | <int> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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",
+ "A tibble: 5 × 2\n",
+ "\n",
+ "\tLenB | a |
\n",
+ "\t<int> | <dbl> |
\n",
+ "\n",
+ "\n",
+ "\t1 | 1.000000 |
\n",
+ "\t2 | 3.000000 |
\n",
+ "\t3 | 5.000000 |
\n",
+ "\t4 | 6.333333 |
\n",
+ "\t6 | 6.000000 |
\n",
+ "\n",
+ "
\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",
+ "A data.frame: 6 × 4\n",
+ "\n",
+ "\t | A | B | DivA | LenB |
\n",
+ "\t | <int> | <chr> | <dbl> | <int> |
\n",
+ "\n",
+ "\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",
+ "\n",
+ "
\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": "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\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
+}
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
-| ](../../sketchnotes/07-WorkWithPython.png)|
-|:---:|
-|Working With Python - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
+|  ](../../sketchnotes/07-WorkWithPython.png) |
+| :-------------------------------------------------------------------------------------------------------: |
+| Working With Python - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
[](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": {}
},
diff --git a/2-Working-With-Data/08-data-preparation/README.md b/2-Working-With-Data/08-data-preparation/README.md
index e1de8260..29534354 100644
--- a/2-Working-With-Data/08-data-preparation/README.md
+++ b/2-Working-With-Data/08-data-preparation/README.md
@@ -28,10 +28,294 @@ 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/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**.
+
+```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.
+
+> **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)
diff --git a/2-Working-With-Data/08-data-preparation/notebook.ipynb b/2-Working-With-Data/08-data-preparation/notebook.ipynb
index e45a5cb5..448de5f8 100644
--- a/2-Working-With-Data/08-data-preparation/notebook.ipynb
+++ b/2-Working-With-Data/08-data-preparation/notebook.ipynb
@@ -1,318 +1,996 @@
{
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "fb0577ac-3b4a-4623-cb41-20e1b264b3e9"
+ },
+ "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": [
- "### `DataFrame.info`\r\n",
- "Let's take a look at this dataset to see what we have:"
- ],
- "metadata": {}
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "74e7a43a-77cc-4c80-da56-7f50767c37a0"
+ },
+ "source": [
+ "iris_df.columns"
+ ],
+ "execution_count": 3,
+ "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": 3
+ }
+ ]
+ },
+ {
+ "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`\n",
+ "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. "
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+
+ "metadata": {
+ "trusted": false,
+ "id": "dHHRyG0_gRrt",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "d8fb0c40-4f18-4e19-da48-c8db77d1d3a5"
+ },
"source": [
"iris_df.info()"
],
- "outputs": [],
+ "execution_count": 4,
+
+ "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": {
- "trusted": false
- }
+ "id": "1XgVMpvigRru"
+ },
+ "source": [
+ "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": [
- "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": {}
+ "### 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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 297
+ },
+ "outputId": "4fc49941-bc13-4b0c-a412-cb39e7d3f289"
+ },
+ "source": [
+ "iris_df.describe()"
+ ],
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 5.843333 | \n",
+ " 3.057333 | \n",
+ " 3.758000 | \n",
+ " 1.199333 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 0.828066 | \n",
+ " 0.435866 | \n",
+ " 1.765298 | \n",
+ " 0.762238 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 4.300000 | \n",
+ " 2.000000 | \n",
+ " 1.000000 | \n",
+ " 0.100000 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 5.100000 | \n",
+ " 2.800000 | \n",
+ " 1.600000 | \n",
+ " 0.300000 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 5.800000 | \n",
+ " 3.000000 | \n",
+ " 4.350000 | \n",
+ " 1.300000 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 6.400000 | \n",
+ " 3.300000 | \n",
+ " 5.100000 | \n",
+ " 1.800000 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 7.900000 | \n",
+ " 4.400000 | \n",
+ " 6.900000 | \n",
+ " 2.500000 | \n",
+ "
\n",
+ " \n",
+ "
\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": 5
+ }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "zjjtW5hPGMuM"
+ },
"source": [
- "### `DataFrame.head`\r\n",
- "Next, let's see what the first few rows of our `DataFrame` look like:"
- ],
- "metadata": {}
+ "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."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-lviAu99gRrv"
+ },
+ "source": [
+ "### `DataFrame.head`\n",
+ "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",
- "execution_count": null,
+
+ "metadata": {
+ "trusted": false,
+ "id": "DZMJZh0OgRrw",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "outputId": "d9393ee5-c106-4797-f815-218f17160e00"
+ },
"source": [
"iris_df.head()"
],
- "outputs": [],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 4.6 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 5.0 | \n",
+ " 3.6 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ "
\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": 6
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
"metadata": {
- "trusted": false
- }
+ "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",
+ "metadata": {
+ "id": "oj7GkrTdgRry"
+ },
"source": [
- "### Exercise:\r\n",
- "\r\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": {}
+ "### Exercise:\n",
+ "\n",
+ "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?"
+ ]
},
{
"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": 7,
+ "outputs": []
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "BJ_cpZqNgRr1"
+ },
"source": [
- "### `DataFrame.tail`\r\n",
- "The flipside of `DataFrame.head` is `DataFrame.tail`, which returns the last five rows of a `DataFrame`:"
- ],
- "metadata": {}
+ "### `DataFrame.tail`\n",
+ "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",
- "execution_count": null,
+
+ "metadata": {
+ "trusted": false,
+ "id": "heanjfGWgRr2",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 0
+ },
+ "outputId": "6ae09a21-fe09-4110-b0d7-1a1fbf34d7f3"
+ },
"source": [
"iris_df.tail()"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 145 | \n",
+ " 6.7 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " 147 | \n",
+ " 6.5 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " 148 | \n",
+ " 6.2 | \n",
+ " 3.4 | \n",
+ " 5.4 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " 149 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 5.1 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ "
\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": 8
+ }
+ ]
},
{
"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",
+ "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."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "TvurZyLSDxq_"
+ },
"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",
+ "### 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",
+ "**How Pandas Handles missing data**\n",
+ "\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,
- "source": [
- "import numpy as np\r\n",
- "\r\n",
- "example1 = np.array([2, None, 6, 8])\r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "QIoNdY4ngRr7",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "92779f18-62f4-4a03-eca2-e9a101604336"
+ },
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "example1 = np.array([2, None, 6, 8])\n",
"example1"
],
- "outputs": [],
+
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([2, None, 6, 8], dtype=object)"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 9
+ }
+ ]
+
+ "execution_count": 6
+ }
+ ],
"metadata": {
"trusted": false
}
+
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 292
+ },
+ "outputId": "ecba710a-22ec-41d5-a39c-11f67e645b50"
+ },
"source": [
"example1.sum()"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "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",
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "699e81b7-5c11-4b46-df1d-06071768690f"
+ },
"source": [
"np.nan + 1"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "nan"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 11
+ }
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "metadata": {
+ "trusted": false,
+ "id": "BW3zQD2-gRr-",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "4525b6c4-495d-4f7b-a979-efce1dae9bd0"
+ },
"source": [
"np.nan * 0"
],
- "outputs": [],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "nan"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 12
+ }
+ ]
+
+ "execution_count": 9
+ }
+ ],
"metadata": {
"trusted": false
}
+
},
{
"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,
- "source": [
- "example2 = np.array([2, np.nan, 6, 8]) \r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "LCInVgSSgRr_",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "fa06495a-0930-4867-87c5-6023031ea8b5"
+ },
+
+ "execution_count": 10,
+
+ "source": [
+ "example2 = np.array([2, np.nan, 6, 8]) \n",
"example2.sum(), example2.min(), example2.max()"
],
- "outputs": [],
+
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(nan, nan, nan)"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 13
+ }
+ ]
+ "execution_count": 10
+ }
+ ],
"metadata": {
"trusted": false
}
+
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "nhlnNJT7gRr_"
+ },
"source": [
"### Exercise:"
- ],
- "metadata": {}
+ ]
},
{
"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": {
"collapsed": true,
- "trusted": false
- }
+ "trusted": false,
+ "id": "yan3QRaOgRr_"
+ },
+ "source": [
+ "# What happens if you add np.nan and None together?\n"
+ ],
+ "execution_count": 14,
+ "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,
- "source": [
- "int_series = pd.Series([1, 2, 3], dtype=int)\r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "Nji-KGdNgRsA",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "36aa14d2-8efa-4bfd-c0ed-682991288822"
+ },
+ "source": [
+ "int_series = pd.Series([1, 2, 3], dtype=int)\n",
"int_series"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+
+ "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",
+ "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": 16,
+ "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 +1000,2822 @@
"- `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",
+ "\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."
- ],
- "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": 17,
+ "outputs": []
},
{
"cell_type": "code",
- "execution_count": null,
+
+ "metadata": {
+ "trusted": false,
+ "id": "1XdaJJ7PgRsC",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "92fc363a-1874-471f-846d-f4f9ce1f51d0"
+ },
"source": [
"example3.isnull()"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "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",
+ "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": {}
+ "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": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "JCcQVoPkHDUv",
+ "outputId": "001daa72-54f8-4bd5-842a-4df627a79d4d"
+ },
+ "source": [
+ "example3.isnull().sum()"
+ ],
+ "execution_count": 19,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "2"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ }
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "PlBqEo3mgRsC"
+ },
"source": [
"### Exercise:"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+
+ "metadata": {
+ "collapsed": true,
+ "trusted": false,
+ "id": "ggDVf5uygRsD"
+ },
+
"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": [],
+ "execution_count": 20,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
"metadata": {
- "collapsed": true,
- "trusted": false
- }
+ "id": "D_jWN7mHgRsD"
+ },
+ "source": [
+ "**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": [
- "**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": {}
+ "### 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"
+ ]
},
{
"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": {}
+ "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",
- "execution_count": null,
- "source": [
- "example3 = example3.dropna()\r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "7uIvS097gRsD",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c13fc117-4ca1-4145-a0aa-42ac89e6e218"
+ },
+ "source": [
+ "example3 = example3.dropna()\n",
"example3"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "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",
+ "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": {}
+ "Because DataFrames have two dimensions, they afford more options for dropping data."
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
- "source": [
- "example4 = pd.DataFrame([[1, np.nan, 7], \r\n",
- " [2, 5, 8], \r\n",
- " [np.nan, 6, 9]])\r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "an-l74sPgRsE",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "340876a0-63ad-40f6-bd54-6240cdae50ab"
+ },
+
+ "source": [
+ "example4 = pd.DataFrame([[1, np.nan, 7], \n",
+ " [2, 5, 8], \n",
+ " [np.nan, 6, 9]])\n",
"example4"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 6.0 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\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",
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 80
+ },
+ "outputId": "0b5e5aee-7187-4d3f-b583-a44136ae5f80"
+ },
"source": [
"example4.dropna()"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2\n",
+ "1 2.0 5.0 8"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 23
+ }
+ ]
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "ff4001f3-2e61-4509-d60e-0093d1068437"
+ },
"source": [
"example4.dropna(axis='columns')"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 24,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 8 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 2\n",
+ "0 7\n",
+ "1 8\n",
+ "2 9"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 24
+ }
+ ]
},
{
"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": {}
+ "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",
- "execution_count": null,
- "source": [
- "example4[3] = np.nan\r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "Bcf_JWTsgRsF",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "72e0b1b8-52fa-4923-98ce-b6fbed6e44b1"
+ },
+ "source": [
+ "example4[3] = np.nan\n",
"example4"
],
- "outputs": [],
+
+ "execution_count": 25,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " 7 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 6.0 | \n",
+ " 9 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\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": {
- "trusted": false
- }
+ "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",
+ "metadata": {
+ "id": "oXXSfQFHgRsF"
+ },
"source": [
"### Exercise:"
- ],
- "metadata": {}
+ ]
},
{
"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": {
"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": 26,
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 80
+ },
+ "outputId": "8093713a-54d2-4e54-c73f-4eea315cb6f2"
+ },
"source": [
"example4.dropna(axis='rows', thresh=3)"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 27,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3\n",
+ "1 2.0 5.0 8 NaN"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 27
+ }
+ ]
},
{
"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."
+ "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."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "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",
+ "\n",
+ "Again, here we can use domain knowledge here. Let us consider an example of filling with the mode."
+ ]
+ },
+ {
+ "cell_type": "code",
+
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "id": "MY5faq4yLdpQ",
+ "outputId": "19ab472e-1eed-4de8-f8a7-db2a3af3cb1a"
+ },
+ "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",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " False | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ "
\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": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "WKy-9Y2tN5jv",
+ "outputId": "8da9fa16-e08c-447e-dea1-d4b1db2feebf"
+ },
+ "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)"
],
- "metadata": {}
+ "execution_count": 30,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "id": "tvas7c9_OPWE",
+ "outputId": "ec3c8e44-d644-475e-9e22-c65101965850"
+ },
+ "source": [
+ "fill_with_mode"
+ ],
+ "execution_count": 31,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " False | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " True | \n",
+ "
\n",
+ " \n",
+ "
\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": [
+ "### 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",
+ "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.\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": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "id": "09HM_2feOj5Y",
+ "outputId": "7e309013-9acb-411c-9b06-4de795bbeeff"
+ },
+ "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": 32,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " -2.0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " -1.0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 4 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2.0 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\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": 32
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ka7-wNfzSxbx"
+ },
+ "source": [
+ "The mean of the column is"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "XYtYEf5BSxFL",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "68a78d18-f0e5-4a9a-a959-2c3676a57c70"
+ },
+ "source": [
+ "np.mean(fill_with_mean[0])"
+ ],
+ "execution_count": 33,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0.0"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 33
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "oBSRGxKRS39K"
+ },
+ "source": [
+ "Filling with mean"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "metadata": {
+ "id": "FzncQLmuS5jh",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "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": 34,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " -2.0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " -1.0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 0.0 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2.0 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\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": 34
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "CwpVFCrPTC5z"
+ },
"source": [
- "example5 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))\r\n",
+ "As we can see, the missing value has been replaced with its mean."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jIvF13a1i00Z"
+ },
+ "source": [
+ "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": {
+ "id": "DA59Bqo3jBYZ",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "outputId": "85dae6ec-7394-4c36-fda0-e04769ec4a32"
+ },
+ "source": [
+ "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": 35,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " -2 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " -1 | \n",
+ " 2.0 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 0 | \n",
+ " NaN | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 6.0 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2 | \n",
+ " 8.0 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\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": 35
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "mM1GpXYmjHnc"
+ },
+ "source": [
+ "The median of the second column is"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "uiDy5v3xjHHX",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "564b6b74-2004-4486-90d4-b39330a64b88"
+ },
+ "source": [
+ "fill_with_median[1].median()"
+ ],
+ "execution_count": 36,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "4.0"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 36
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "z9PLF75Jj_1s"
+ },
+ "source": [
+ "Filling with median"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "lFKbOxCMkBbg",
+ "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": 37,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " -2 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " -1 | \n",
+ " 2.0 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 4.0 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 6.0 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2 | \n",
+ " 8.0 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\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": 37
+ }
+ ]
+ },
+ {
+ "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",
+ "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"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 38,
+ "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": 38
+ }
+ ]
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "aeedfa0a-a421-4c2f-cb0d-183ce8f0c91d"
+ },
"source": [
"example5.fillna(0)"
],
- "outputs": [],
+ "execution_count": 39,
+ "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": 39
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+
"metadata": {
- "trusted": false
- }
+ "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:"
- ],
- "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": 40,
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "e2bc591b-0b48-4e88-ee65-754f2737c196"
+ },
"source": [
"example5.fillna(method='ffill')"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 41,
+ "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": 41
+ }
+ ]
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "8f32b185-40dd-4a9f-bd85-54d6b6a414fe"
+ },
"source": [
"example5.fillna(method='bfill')"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 42,
+ "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": 42
+ }
+ ]
},
{
"cell_type": "markdown",
- "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
- }
+ "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",
- "execution_count": null,
+
+ "metadata": {
+ "trusted": false,
+ "id": "aRpIvo4ZgRsI",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "905a980a-a808-4eca-d0ba-224bd7d85955"
+ },
"source": [
"example4"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 43,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " 7 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 6.0 | \n",
+ " 9 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\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": 43
+ }
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "metadata": {
+ "trusted": false,
+ "id": "VM1qtACAgRsI",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "71f2ad28-9b4e-4ff4-f5c3-e731eb489ade"
+ },
"source": [
"example4.fillna(method='ffill', axis=1)"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 44,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 7.0 | \n",
+ " 7.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8.0 | \n",
+ " 8.0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 6.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ "
\n",
+ " \n",
+ "
\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": 44
+ }
+ ]
},
{
"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": 45,
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "708b1e67-45ca-44bf-a5ee-8b2de09ece73"
+ },
"source": [
"example4.fillna(example4.mean())"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 46,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " 5.5 | \n",
+ " 7 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2.0 | \n",
+ " 5.0 | \n",
+ " 8 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 1.5 | \n",
+ " 6.0 | \n",
+ " 9 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\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": 46
+ }
+ ]
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "outputId": "9e252855-d193-4103-a54d-028ea7787b34"
+ },
+ "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": 47,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " ID | \n",
+ " class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 10 | \n",
+ " business class | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 20 | \n",
+ " first class | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 30 | \n",
+ " economy class | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 40 | \n",
+ " economy class | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 50 | \n",
+ " economy class | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 60 | \n",
+ " business class | \n",
+ "
\n",
+ " \n",
+ "
\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": 47
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "IDHnkwTYov-h"
+ },
+ "source": [
+ "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",
+ "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": 48,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " ID | \n",
+ " class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 10 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 20 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 30 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 40 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 50 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 60 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\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": 48
+ }
+ ]
+ },
+ {
+ "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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "outputId": "83238a76-b3a5-418d-c0b6-605b02b6891b"
+ },
+ "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": 49,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " ID | \n",
+ " class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 10 | \n",
+ " business class | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 20 | \n",
+ " first class | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 30 | \n",
+ " economy class | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 40 | \n",
+ " economy class | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 50 | \n",
+ " economy class | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 60 | \n",
+ " business class | \n",
+ "
\n",
+ " \n",
+ "
\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": 49
+ }
+ ]
+ },
+ {
+ "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'])"
],
- "metadata": {}
+ "execution_count": 50,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "TM37pHsFr4ge",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "outputId": "7be15f53-79b2-447a-979c-822658339a9e"
+ },
+ "source": [
+ "one_hot_data"
+ ],
+ "execution_count": 51,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " ID | \n",
+ " class_business class | \n",
+ " class_economy class | \n",
+ " class_first class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 10 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 20 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 30 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 40 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 50 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 60 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\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": 51
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_zXRLOjXujdA"
+ },
+ "source": [
+ "Each one hot encoded column contains 0 or 1, which specifies whether that category exists for that datapoint."
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {
+ "id": "bDnC4NQOu0qr"
+ },
+ "source": [
+ "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": "markdown",
+ "metadata": {
+ "id": "XnUmci_4uvyu"
+ },
+ "source": [
+ "> 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. "
+ ]
+ },
+ {
+ "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,
- "source": [
- "example6 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],\r\n",
- " 'numbers': [1, 2, 1, 3, 3]})\r\n",
+
+ "metadata": {
+ "trusted": false,
+ "id": "ZLu6FEnZgRsJ",
+ "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"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 52,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " letters | \n",
+ " numbers | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " A | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " B | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " A | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " B | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " B | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\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": 52
+ }
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "metadata": {
+ "trusted": false,
+ "id": "cIduB5oBgRsK",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "3da27b3d-4d69-4e1d-bb52-0af21bae87f2"
+ },
"source": [
"example6.duplicated()"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 53,
+ "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": 53
+ }
+ ]
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "ac66bd2f-8671-4744-87f5-8b8d96553dea"
+ },
"source": [
"example6.drop_duplicates()"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 54,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " letters | \n",
+ " numbers | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " A | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " B | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " B | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " letters numbers\n",
+ "0 A 1\n",
+ "1 B 2\n",
+ "3 B 3"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 54
+ }
+ ]
},
{
"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",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 111
+ },
+ "outputId": "ef6dcc08-db8b-4352-c44e-5aa9e2bec0d3"
+ },
"source": [
"example6.drop_duplicates(['letters'])"
],
- "outputs": [],
- "metadata": {
- "trusted": false
- }
+ "execution_count": 55,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " letters | \n",
+ " numbers | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " A | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " B | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " letters numbers\n",
+ "0 A 1\n",
+ "1 B 2"
+ ]
+ },
+ "metadata": {},
+
+ "execution_count": 55
+ }
+ ]
},
{
"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
diff --git a/3-Data-Visualization/translations/README.hi.md b/3-Data-Visualization/translations/README.hi.md
new file mode 100644
index 00000000..3d900203
--- /dev/null
+++ b/3-Data-Visualization/translations/README.hi.md
@@ -0,0 +1,33 @@
+# विज़ुअलाइज़ेशन
+
+
+>
+जेना ली द्वारा फोटो 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/) के रूप में लाइसेंसीकृत हैं।
+
+
+
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..681d2923
--- /dev/null
+++ b/4-Data-Science-Lifecycle/16-communication/translations/README.hi.md
@@ -0,0 +1,211 @@
+# डेटा विज्ञान के जीवनचक्र: संचार
+
+|](https://github.com/Heril18/Data-Science-For-Beginners/raw/main/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. अंत को ध्यान में रखकर शुरू करें
+अंत को ध्यान में रखकर शुरू करने का मतलब है कि आप अपने दर्शकों के साथ संवाद शुरू करने से पहले अपने इच्छित टेकअवे को समझना। आप अपने दर्शकों को समय से पहले क्या लेना चाहते हैं, इस बारे में विचारशील होने से आपको एक ऐसी कहानी तैयार करने में मदद मिल सकती है जिसका आपके दर्शक अनुसरण कर सकें। अंत को ध्यान में रखकर शुरू करना एकतरफा संचार और दोतरफा संचार दोनों के लिए उपयुक्त है।
+
+आप अंत को ध्यान में रखकर कैसे शुरू करते हैं? अपने डेटा को संप्रेषित करने से पहले, अपने मुख्य निष्कर्ष लिख लें। फिर, जिस तरह से आप कहानी तैयार कर रहे हैं, जिस तरह से आप अपने डेटा के साथ बताना चाहते हैं, अपने आप से पूछें, "यह मेरे द्वारा बताई जा रही कहानी में कैसे एकीकृत होता है?"
+
+सावधान रहें - अंत को ध्यान में रखते हुए शुरुआत करना आदर्श है, आप केवल उस डेटा को संप्रेषित नहीं करना चाहते जो आपके इच्छित टेकअवे का समर्थन करता है। ऐसा करने को चेरी-पिकिंग कहा जाता है, जो तब होता है जब एक संचारक केवल उस डेटा का संचार करता है जो उस बिंदु का समर्थन करता है जिसे वे बनाने के लिए बांध रहे हैं और अन्य सभी डेटा को अनदेखा करते हैं।
+
+यदि आपके द्वारा एकत्र किया गया सभी डेटा स्पष्ट रूप से आपके इच्छित टेकअवे का समर्थन करता है, तो बढ़िया। लेकिन अगर आपके द्वारा एकत्र किया गया डेटा है जो आपके टेकअवे का समर्थन नहीं करता है, या यहां तक कि आपके प्रमुख टेकअवे के खिलाफ तर्क का समर्थन करता है, तो आपको उस डेटा को भी संप्रेषित करना चाहिए। अगर ऐसा होता है, तो अपने दर्शकों के साथ खुलकर बात करें और उन्हें बताएं कि आप अपनी कहानी के साथ बने रहने का विकल्प क्यों चुन रहे हैं, भले ही सभी डेटा इसका समर्थन न करें।
+
+
+### 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://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)
+
+[महान डेटा स्टोरीटेलिंग के लिए 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/effective-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)
+
+[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)
+
+[डेटा प्रस्तुति में सामान्य गलतियाँ (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)
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..a5e2f6b7
--- /dev/null
+++ b/4-Data-Science-Lifecycle/translations/README.hi.md
@@ -0,0 +1,13 @@
+# डेटा विज्ञान के जीवनचक्र
+
+>तस्वीर 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) द्वारा ❤️ से लिखे गए हैं।
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 @@
+# क्लाउड में डेटा साइंस
+
+
+
+> [Unsplash](https://unsplash.com/s/photos/cloud?orientation=landscape) से [जेलेके वनूटेघम](https://unsplash.com/@ilumire) द्वारा फोटो।
+
+जब बड़े डेटा के साथ डेटा साइंस करने की बात आती है, तो क्लाउड गेम चेंजर हो सकता है। अगले तीन पाठों में हम यह देखने जा रहे हैं कि क्लाउड क्या है और यह इतना मददगार क्यों हो सकता है। हम हृद्पात (दिल की धड़कन रुकना) के डेटासेट का भी पता लगाने जा रहे हैं और किसी के हृद्पात की संभावना का आकलन करने में मदद करने के लिए एक मॉडल का निर्माण करने जा रहे हैं। हम दो अलग-अलग तरीकों से एक मॉडल को प्रशिक्षित करने, डिप्लॉय करने और उपभोग करने के लिए क्लाउड की शक्ति का उपयोग करेंगे। एक तरीका कम कोड/नो कोड फैशन में केवल यूजर इंटरफेस का उपयोग करके, दूसरा तरीका एज़ूर मशीन लर्निंग सॉफ्टवेयर डेवलपर किट (एज़ूर एमएल एस.डी.के) का उपयोग करके।
+
+
+
+### विषय
+
+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
diff --git a/README.md b/README.md
index 7b2a9e8e..c90d8ec7 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 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](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
| ](./sketchnotes/00-Title.png)|
|:---:|
@@ -27,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).
-
+[](https://youtu.be/8mzavjQSMM4 "Promo video")
+
+> 🎥 Click the image above for a video about the project the folks who created it!
## Pedagogy
@@ -64,7 +67,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) |
@@ -78,8 +81,8 @@ In addition, a low-stakes quiz before a class sets the intention of the student
| 12 | Visualizing Relationships | [Data Visualization](3-Data-Visualization/README.md) | Visualizing connections and correlations between sets of data and their variables. | [lesson](3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) |
| 13 | Meaningful Visualizations | [Data Visualization](3-Data-Visualization/README.md) | Techniques and guidance for making your visualizations valuable for effective problem solving and insights. | [lesson](3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) |
| 14 | Introduction to the Data Science lifecycle | [Lifecycle](4-Data-Science-Lifecycle/README.md) | Introduction to the data science lifecycle and its first step of acquiring and extracting data. | [lesson](4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) |
-| 15 | Analyzing | [Lifecycle](4-Data-Science-Lifecycle/README.md) | This phase of the data science lifecycle focuses on techniques to analyze data. | [lesson](4-Data-Science-Lifecycle/15-Analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | |
-| 16 | Communication | [Lifecycle](4-Data-Science-Lifecycle/README.md) | This phase of the data science lifecycle focuses on presenting the insights from the data in a way that makes it easier for decision makers to understand. | [lesson](4-Data-Science-Lifecycle/16-Communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | |
+| 15 | Analyzing | [Lifecycle](4-Data-Science-Lifecycle/README.md) | This phase of the data science lifecycle focuses on techniques to analyze data. | [lesson](4-Data-Science-Lifecycle/15-analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | |
+| 16 | Communication | [Lifecycle](4-Data-Science-Lifecycle/README.md) | This phase of the data science lifecycle focuses on presenting the insights from the data in a way that makes it easier for decision makers to understand. | [lesson](4-Data-Science-Lifecycle/16-communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | |
| 17 | Data Science in the Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | This series of lessons introduces data science in the cloud and its benefits. | [lesson](5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) and [Maud](https://twitter.com/maudstweets) |
| 18 | Data Science in the Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Training models using Low Code tools. |[lesson](5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) and [Maud](https://twitter.com/maudstweets) |
| 19 | Data Science in the Cloud | [Cloud Data](5-Data-Science-In-Cloud/README.md) | Deploying models with Azure Machine Learning Studio. | [lesson](5-Data-Science-In-Cloud/19-Azure/README.md)| [Tiffany](https://twitter.com/TiffanySouterre) and [Maud](https://twitter.com/maudstweets) |
diff --git a/ds-for-beginners.png b/ds-for-beginners.png
new file mode 100644
index 00000000..1f5be8fe
Binary files /dev/null and b/ds-for-beginners.png differ
diff --git a/translations/README.fa.md b/translations/README.fa.md
new file mode 100644
index 00000000..d8de4c52
--- /dev/null
+++ b/translations/README.fa.md
@@ -0,0 +1,111 @@
+
+
+# علم داده برای مبتدیان - برنامه درسی
+
+
+[](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/)
+[](http://makeapullrequest.com)
+
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/)
+[](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
+
+ | ](../sketchnotes/00-Title.png)|
+|:---:|
+| علم داده برای مبتدیان - یادداشت بصری (sketchnote) از [@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) می باشد.
+
+
+
+
+## آموزش
+
+ما هنگام تدوین این برنامه درسی دو اصل آموزشی را انتخاب کرده ایم: اطمینان حاصل کنیم که پروژه محور است و شامل آزمونهای مکرر می باشد. دانش آموزان به محض تکمیل این سری آموزشی، اصول اولیه علم داده، شامل اصول اخلاقی، آماده سازی داده ها، روش های مختلف کار با داده ها، تصویرسازی داده ها، تجزیه و تحلیل داده ها، موارد استفاده از علم داده در دنیای واقعی و بسیاری مورد دیگر را فرا می گیرند.
+
+علاوه بر این، یک کوییز با امتیاز کم قبل از کلاس، مقصود دانش آموز درجهت یادگیری یک موضوع را مشخص می کند، در حالی که کوییز دوم بعد از کلاس ماندگاری بیشتر مطالب را تضمین می کند. این برنامه درسی طوری طراحی شده است که انعطاف پذیر و سرگرم کننده باشد و می تواند به طور کامل یا جزئی مورد استفاده قرار گیرد. پروژه از کوچک شروع می شوند و تا پایان چرخه ۱۰ هفته ای همینطور پیچیده تر می شوند.
+
+> دستورالعمل های ما را درباره [کد رفتار](../CODE_OF_CONDUCT.md), [مشارکت](../CONTRIBUTING.md), [ترجمه](../TRANSLATIONS.md) ببینید. ما از بازخورد سازنده شما استقبال می کنیم!
+
+ ## هر درس شامل:
+
+- یادداشت های بصری (sketchnote) اختیاری
+- فیلم های مکمل اختیاری
+- کوییز های دست گرمی قبل از درس
+- درسنامه مکتوب
+- راهنمای گام به گام نحوه ساخت پروژه برای درس های مبتنی بر پروژه
+- بررسی دانش
+- یک چالش
+- منابع خواندنی مکمل
+- تمرین
+- کوییز پس از درس
+
+> **نکته ای در مورد آزمونها**: همه آزمون ها در [این برنامه](https://red-water-0103e7a0f.azurestaticapps.net/) موجود هستند، برای در مجموع ۴۰ کوییز که هرکدام شامل سه سوال می باشد. کوییزها از داخل درسنامه لینک داده شده اند اما برنامه کوییز را می توان به صورت محلی اجرا کرد. برای اینکار، دستورالعمل موجود در پوشه `quiz-app` را دنبال کنید. سوالات به تدریج در حال محلی سازی هستند.
+
+## درسنامه
+
+
+| ](../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) |
+## دسترسی آفلاین
+
+شما می توانید این سند را به با استفاده از [Docsify](https://docsify.js.org/#/) به صورت آفلاین اجرا کنید. این مخزن را فورک کنید، [Docsify را روی دستگاه محلی خود نصب کنید](https://docsify.js.org/#/quickstart)، سپس در شاخه اصلی(root) این مخزن، بنویسید `docsify serve`. وب سایت در پورت 3000 روی localhost شما ارائه می شود: `localhost:3000`.
+
+> توجه داشته باشید، نوت بوک ها توسط Docsify ترجمه نمی شوند، بنابراین هنگامی که شما نیاز به اجرای یک نوت بوک دارید، این کار را به صورت جداگانه در VS Code با اجرای یک کرنل پایتون انجام دهید.
+## پی دی اف
+
+یک پی دی اف شامل همه درسها را می توان [اینجا](https://microsoft.github.io/Data-Science-For-Beginners/pdf/readme.pdf) یافت.
+
+## به کمک شما نیازمندیم!
+
+اگر می خواهید تمام یا بخشی از برنامه درسی را ترجمه کنید، لطفاً ظبق راهنمای [ترجمه ها](../TRANSLATIONS.md)ی ما عمل کنید.
+
+## سایر برنامه های درسی
+تیم ما برنامه های درسی دیگری نیز تولید می کند! بدین منظور ببینید:
+
+- [یادگیری ماشین برای مبتدیان](https://aka.ms/ml-beginners)
+- [اینترنت اشیا برای مبتدیان](https://aka.ms/iot-beginners)
+- [توسعه سایت برای مبتدیان](https://aka.ms/webdev-beginners)
+
+
diff --git a/translations/README.fr.md b/translations/README.fr.md
new file mode 100644
index 00000000..65eb3a81
--- /dev/null
+++ b/translations/README.fr.md
@@ -0,0 +1,106 @@
+# La Data Science pour les débutants - Curriculum
+
+[](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/)
+[](http://makeapullrequest.com)
+
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/)
+[](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/)
+
+L'équipe Azure Cloud Advocates de Microsoft a le plaisir de vous offrir un curriculum d'apprentissage de la Data Science, ou "science des données" en français, comprenant vingt cours à étudier sur une durée d'environ dix semaines. Chaque cours comprend un quiz préalable, un quiz à effectuer après le cours, ainsi que des instructions, un exercice et une solution. Notre pédagogie est basée vous permet d'apprendre tout en réalisant des projets, ce qui permet de bien intégrer les nouvelles compétences que vous allez acquérir.
+
+**Un grand merci à nos auteurs :** [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).
+
+**🙏 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
+
+| ](../sketchnotes/00-Title.png)|
+|:---:|
+| Data Science For Beginners - _Sketchnote réalisé par [@nitya](https://twitter.com/nitya)_ |
+
+
+# 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) !
+
+> **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).
+
+
+
+## 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
+
+
+| ](../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)