<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Justine Kimeli</title>
    <description>The latest articles on DEV Community by Justine Kimeli (@justine_kimeli_0c6993e6d5).</description>
    <link>https://dev.to/justine_kimeli_0c6993e6d5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3972768%2F6f4a6115-eb41-4e9f-83eb-246fca85dd2f.png</url>
      <title>DEV Community: Justine Kimeli</title>
      <link>https://dev.to/justine_kimeli_0c6993e6d5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justine_kimeli_0c6993e6d5"/>
    <language>en</language>
    <item>
      <title>Understanding Pandas Library</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Mon, 19 Oct 2026 04:55:00 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/understanding-pandas-library-3896</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/understanding-pandas-library-3896</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Pandas is an open source python library for fast, flexible data analysis and manipulation. &lt;/p&gt;

&lt;p&gt;Pandas allows users to import data from various file formats (comma-separated values, JSON, SQL, fits, etc.) and perform data manipulation operations, including cleaning and reshaping the data, summarizing observations, grouping data, and merging multiple datasets&lt;/p&gt;

&lt;p&gt;With hundreds of functions and methods for data manipulation and analysis, it has become one of the most widely used tools in the world primarily  for data analysis.&lt;br&gt;
This article explores the most commonly used functions and methods for understanding, formatting, and visualizing data with the pandas package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading data into Pandas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pandas is capable of reading data from various file formats. In this case, we are reading our dataset in the file format csv.&lt;br&gt;
The data is stored in a data structure called DataFrame which will defined by the variable name df.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import pandas as pd

file_name= "world_population.csv"
df=pd.read_csv(file_name)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Understanding the data format&lt;/strong&gt;&lt;br&gt;
In these step we are going to understand how these functions are of useful in data inspection.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;df.head()&lt;/li&gt;
&lt;li&gt;df.tail()&lt;/li&gt;
&lt;li&gt;df.info()&lt;/li&gt;
&lt;li&gt;df.describe()&lt;/li&gt;
&lt;li&gt;df.shape&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1. df.head()&lt;/strong&gt;&lt;br&gt;
This function will show the first 5 rows in the DataFrame:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcypc9n2egwd7xsx48jv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcypc9n2egwd7xsx48jv.png" alt=" " width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. df.tail()&lt;/strong&gt;&lt;br&gt;
This function shows the last 5 rows of the DataFrame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenn9u5secrvszpnt2zif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenn9u5secrvszpnt2zif.png" alt=" " width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. df.info()&lt;/strong&gt;&lt;br&gt;
This function displays the coincise summarry of the DataFrame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqihas37ttyfpc5d4872m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqihas37ttyfpc5d4872m.png" alt=" " width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. df.describe()&lt;/strong&gt;&lt;br&gt;
This is used to display descriptive statistical information about the numerical columns in a DataFrame including descriptive statistics of the central tendacy and dispersion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6t87tmhjfnbdsx2vqq48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6t87tmhjfnbdsx2vqq48.png" alt=" " width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. df.shape()&lt;/strong&gt;&lt;br&gt;
This displays the number of rows and columns in the DataFrame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6es5dk80qibr6fxeh609.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6es5dk80qibr6fxeh609.png" alt=" " width="571" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Format&lt;/strong&gt;&lt;br&gt;
Choosing which data format is relevant and makes sure the DataFrame is in a format that can be easily understood.&lt;br&gt;
&lt;code&gt;df.info()&lt;/code&gt; shows each column's data type, so it is the first place to look for columns stored as the wrong type, such as numbers read as text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frus1irscco2uxfjdxu5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frus1irscco2uxfjdxu5m.png" alt=" " width="664" height="510"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Cleaning the data
&lt;/h2&gt;

&lt;p&gt;Before analyzing, it is worth checking for three common problems: missing values, duplicates and inconsistent text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handling missing values&lt;/strong&gt;&lt;br&gt;
Use df.isnull().sum() to see where values are missing. If any are, you can drop the affected rows or fill the gaps with a sensible value:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fila1nmbxxo8xu3fba6ys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fila1nmbxxo8xu3fba6ys.png" alt=" " width="649" height="571"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Removing duplicates
&lt;/h2&gt;

&lt;p&gt;Duplicate rows can distort totals. Check how many there are, then remove them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df.duplicated().sum() 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If there is no duplicated values, the dataset is ready to work with otherwise the duplicated values should be dropped&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df= df.drop_duplicates(
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sorting, selecting and filtering data
&lt;/h2&gt;

&lt;p&gt;To find the most populous countries, sort by population:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0n9e21b02evnj4gayx5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0n9e21b02evnj4gayx5c.png" alt=" " width="798" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To select columns, pass their names in a list:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3zaboq5bnvshgtdyjt4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3zaboq5bnvshgtdyjt4j.png" alt=" " width="739" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To filter rows, use a condition inside square brackets:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg37m0pwhjglssq0e7sle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg37m0pwhjglssq0e7sle.png" alt=" " width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visualization&lt;/strong&gt;&lt;br&gt;
Pandas works with Matplotlib, so you can create charts directly from a DataFrame or Series.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Visualization
import matplotlib.pyplot as plt

top10 = df.nlargest(10, "2022 Population").set_index("Country")["2022 Population"]

top10.sort_values(ascending=False).plot(
    kind="bar",
    title="Top 10 Most Populous Countries (2022)"
)

plt.ylabel("Population")
plt.xlabel("Country")
plt.xticks(rotation=45, ha="right")
plt.tight_layout()
plt.show()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2l2j1hb101dczeqyvtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2l2j1hb101dczeqyvtl.png" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This article demonstrated a complete introductory data analysis workflow using Python and Pandas, with a world population dataset as a practical example. The analysis covered how to load and inspect data, understand its structure, clean column names, handle missing values and duplicates, examine data types, sort and filter records, and visualize population using Matplotlib.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>libraries</category>
      <category>programming</category>
      <category>python</category>
    </item>
    <item>
      <title>A Journey into Object Oriented Programming</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Fri, 02 Oct 2026 20:34:08 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/object-oriented-programming-ldp</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/object-oriented-programming-ldp</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Learning programming has introduced me how to write variables, conditions, loops, and functions. These are the concepts that helped me create simple programs, but as programs became larger, I realized that organizing the code could become difficult.&lt;br&gt;
This is where OOP comes in. OOP is simply a way of organizing a program so that it is easier to understand and manage.&lt;br&gt;
This article will entail what OOP is, class and objects and its four main pillars.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is OOP?
&lt;/h2&gt;

&lt;p&gt;Object-Oriented Programming(OOP) is a programming approach that organizes software around objects and classes rather than only functions and procedures. &lt;/p&gt;
&lt;h2&gt;
  
  
  Classes and Objects
&lt;/h2&gt;

&lt;p&gt;A class  is a blueprint or plan for creating objects. For example, a &lt;strong&gt;Student&lt;/strong&gt; is a class that decribe what information and actions a should have.&lt;/p&gt;

&lt;p&gt;An object is an actual thing created from class. Basically, it is an instance of a class. For example, a student called James from &lt;strong&gt;Student&lt;/strong&gt; class.&lt;br&gt;
An example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;display_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My name is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; and I am &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; years old&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Student&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;James&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;display_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above program &lt;strong&gt;Student&lt;/strong&gt; is the class, while &lt;strong&gt;s1&lt;/strong&gt; is an object. The &lt;strong&gt;display_info()&lt;/strong&gt; function is a method that describes information about the student&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Pillars of OOP
&lt;/h2&gt;

&lt;p&gt;Object Oriented Programming has four main pillars: &lt;strong&gt;encapsulation&lt;/strong&gt;,&lt;strong&gt;inheritance&lt;/strong&gt;, ** polymorphism** and &lt;strong&gt;abstraction&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1.Encapsulation
&lt;/h2&gt;

&lt;p&gt;Encapsulation means keeping related data and methods together inside a class. It protects data from direct access.&lt;br&gt;
An example is a class bank account, it contains account balance and methods of depositing or withdrawing money. Instead of changing tha balance directly, it can be accessed through the methods provided by the class.&lt;br&gt;
__Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BankAccount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;deposit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__balance&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_balance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__balance&lt;/span&gt;


&lt;span class="n"&gt;account&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BankAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deposit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_balance&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The balance is kept inside the &lt;strong&gt;BankAccount&lt;/strong&gt; class. The  __&lt;strong&gt;balance&lt;/strong&gt; is not meant to be accessed directly. We use methods such as &lt;strong&gt;deposit()&lt;/strong&gt; and &lt;strong&gt;get_balance()&lt;/strong&gt; to work with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Inheritance
&lt;/h2&gt;

&lt;p&gt;In basic terms, inheritance allows a new class to (child/ sub/ derived class) re-use the attributes and methods of an existing class(parent/ super/base class).&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Parent CLass
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FarmAnimal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;eat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is eating&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;display_detail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Name: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Age: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Weight: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FarmAnimal&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;milk_per_day&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;produce_milk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; produces &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;milk_per_day&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; litres per day&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;milk_monthly&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;milk_per_day&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;



&lt;span class="c1"&gt;# Child class 2 
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Chicken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FarmAnimal&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;eggs_per_week&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eggs_per_week&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;eggs_per_week&lt;/span&gt;


    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;produce_eggs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; produces &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eggs_per_week&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; per week.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;monthly_eggs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eggs_per_week&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;

&lt;span class="n"&gt;ingokho&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Chicken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ingokho&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ingokho&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;monthly_eggs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;ingokho&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;display_detail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both class &lt;strong&gt;Cow&lt;/strong&gt; and &lt;strong&gt;Chicken&lt;/strong&gt; inherit attributes from class &lt;strong&gt;FarmAnimal&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Polymorphism
&lt;/h2&gt;

&lt;p&gt;It allows same method to behave differently. For example &lt;strong&gt;Cow&lt;/strong&gt; and &lt;strong&gt;Chicken&lt;/strong&gt; demonstrate polymorphism by using same method name but diffrent behavior.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FarmAnimal&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;make_sound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The cow says Moo!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Chicken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FarmAnimal&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;make_sound&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The chicken says Cluck!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Cow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bessie&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;chicken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Chicken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ingokho&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;make_sound&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;chicken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;make_sound&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The method has same name, &lt;strong&gt;make_sound()&lt;/strong&gt;, but behaves differently depending on the object is what we call polymorphism.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Abstraction
&lt;/h2&gt;

&lt;p&gt;This is hiding complicated details and showing only what is necessary to the user.&lt;br&gt;
An example is here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;__start_engine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Car is ready to move&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__start_engine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Engine started&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We call &lt;strong&gt;car.start()&lt;/strong&gt;, we do not need to know how the engine starts internally. The complicated process is hidden inside __&lt;strong&gt;start_engine()&lt;/strong&gt; and we only use the simple &lt;strong&gt;start()&lt;/strong&gt; method.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Learning OOP has helped me understand that programming is not only about writing lines of code but also about organizing those lines of code in a way that makes sense.&lt;br&gt;
Discovering how all the concepts work together yields a better understanding that classes, objects, methods, inheritance, encapsulation, polymorphism, and abstraction are important tools for creating organized and reusable programs.&lt;/p&gt;

</description>
      <category>oop</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Dive into SQL Functions</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Tue, 08 Sep 2026 21:04:05 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/a-dive-into-sql-functions-2on6</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/a-dive-into-sql-functions-2on6</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;A month into learning SQL, I hit a point where every query i wrote was &lt;code&gt;SELECT * FROM table WHERE&lt;/code&gt;. It worked perfectly but it had become obvious to retrieve data from a table and not actually work with it. &lt;br&gt;
Getting into functions is where the real work is, aggregating data, transforming values and handling dates.&lt;br&gt;
This article walks through what are SQL functions, common functions, practical examples and when to use them.&lt;/p&gt;
&lt;h1&gt;
  
  
  What are SQL Functions?
&lt;/h1&gt;

&lt;p&gt;SQL functions are predefined or user-defined operations in SQL that take inputs, perform a specific operation, and return a single value. They are used to simplify queries, calculations, and data manipulations.&lt;/p&gt;
&lt;h1&gt;
  
  
  Common Functions
&lt;/h1&gt;

&lt;p&gt;1.&lt;strong&gt;Aggregate functions&lt;/strong&gt;&lt;br&gt;
This takes in many rows and collapse them into a single value. &lt;code&gt;COUNT,SUM, AVG,MIN,MAX&lt;/code&gt; are the examples. If used without&lt;code&gt;GROUP BY&lt;/code&gt;, you get one row back for the whole table but when you use &lt;code&gt;GROUP BY&lt;/code&gt;, you get one row per group.&lt;/p&gt;

&lt;p&gt;i)- &lt;code&gt;SUM(column)&lt;/code&gt; – total of column values&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;----- Find the total transaction amount by Transaction Type.  &lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="nv"&gt;"Transaction_Type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"Amount"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;transaction_Type_Amount&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;money&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;moniepoint_transactions&lt;/span&gt;
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="nv"&gt;"Transaction_Type"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ii)- &lt;code&gt;AVG(column)&lt;/code&gt; – average&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;---- get the average&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="k"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"Amount"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;money&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;moniepoint_transactions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;iii)- &lt;code&gt;COUNT(column)&lt;/code&gt; – number of rows&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;MIN(column) / MAX(column)&lt;/code&gt; – minimum or maximum value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;---Count how many orders each customer_id has placed (GROUP BY customer_id).&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt;  &lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;order_count&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;supermarket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_supermarket&lt;/span&gt; 
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns the order count each customer placed.&lt;/p&gt;

&lt;p&gt;2.** Scalar functions**&lt;br&gt;
Scalar functions operate on a single value and return one result per row, without changing the row count. String functions &lt;code&gt;(UPPER, CONCAT, SUBSTRING)&lt;/code&gt;, numeric functions &lt;code&gt;(ROUND, ABS)&lt;/code&gt;, and most date functions &lt;code&gt;(YEAR, DATEDIFF)&lt;/code&gt; fall into this category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples and Categories&lt;/strong&gt;&lt;br&gt;
a) &lt;strong&gt;String functions&lt;/strong&gt; — operate on text values.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LEN()&lt;/code&gt; – returns length of a string&lt;br&gt;
&lt;code&gt;UPPER() / LOWER()&lt;/code&gt; – converts to upper/lower case&lt;br&gt;
&lt;code&gt;SUBSTRING()&lt;/code&gt; – extracts part of a string&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;Numeric functions&lt;/strong&gt; — operate on numbers.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ABS()&lt;/code&gt;– absolute value&lt;br&gt;
&lt;code&gt;ROUND()&lt;/code&gt; – rounds a number&lt;/p&gt;

&lt;p&gt;c) &lt;strong&gt;Date/Time functions&lt;/strong&gt; — operate on date or time.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GETDATE()&lt;/code&gt; – current date and time&lt;br&gt;
&lt;code&gt;DATEADD(day, 5, GETDATE())&lt;/code&gt; – adds 5 days to a date&lt;br&gt;
&lt;code&gt;DATEDIFF(day, startDate, endDate)&lt;/code&gt; – difference between dates&lt;/p&gt;

&lt;h1&gt;
  
  
  When to Use Them
&lt;/h1&gt;

&lt;p&gt;a)&lt;strong&gt;Aggregate fuctions&lt;/strong&gt;&lt;br&gt;
Used when the question is about a group, like how many, what's the average, what's the total. It answers the questions that has &lt;code&gt;COUNT,SUM, AVG, MIN or MAX&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;b) &lt;strong&gt;Scalar functions&lt;/strong&gt;&lt;br&gt;
Used when there is need to reshape or clean a value without changing how many rows come back. This involves formatting names, rounding numbers and building labels.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;SQL functions help you move beyond simply retrieving data.&lt;/li&gt;
&lt;li&gt;Aggregate functions summarize data using COUNT, SUM, AVG, MIN, and MAX.&lt;/li&gt;
&lt;li&gt;Scalar functions transform individual values without changing the number of rows.&lt;/li&gt;
&lt;li&gt;String functions help manipulate text.&lt;/li&gt;
&lt;li&gt;Numeric functions help perform calculations and rounding.&lt;/li&gt;
&lt;li&gt;Date/time functions make it easier to work with dates and time differences.&lt;/li&gt;
&lt;li&gt;Using functions makes SQL queries more powerful, efficient, and meaningful.&lt;/li&gt;
&lt;li&gt;Mastering SQL functions is an important step toward real-world data analysis.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sql</category>
      <category>learning</category>
      <category>database</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Subqueries &amp; CTEs in SQL: What They Are and When to Use Each</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Mon, 07 Sep 2026 19:07:43 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/subqueries-ctes-in-sql-what-they-are-and-when-to-use-each-4708</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/subqueries-ctes-in-sql-what-they-are-and-when-to-use-each-4708</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Understanding how &lt;code&gt;Subqueries &amp;amp; CTEs&lt;/code&gt; work and when to use in a query become powerful tools for breaking down complex problems and writing cleaner SQL.&lt;br&gt;
At some point, every SQL query outgrows a single &lt;code&gt;SELECT ... FROM ... WHERE&lt;/code&gt;. You need to filter based on the result of another query, or break it step by step. That's where subqueries and CTEs (Common Table Expressions) come in.&lt;br&gt;
They usually solve the same problem but in different approach. In this article, I will walk through what each is, how they differ, and where each one actually fits its place in  a query.&lt;/p&gt;
&lt;h1&gt;
  
  
  What are Subqueries?
&lt;/h1&gt;

&lt;p&gt;A subquery is a query nested inside another query. It is embedded inside another sql statement. It first runs the inner query and its result is used by the outer query as a filter value, a calaculated column.&lt;br&gt;
Subqueries show up in one of three places:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In a WHERE clause&lt;/strong&gt;, filters rows based on a computed value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;---subquerry&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="n"&gt;score_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;member_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;study_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quiz_scores&lt;/span&gt;
&lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="k"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;study_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quiz_scores&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This finds students with scores above average mark. The inner query runs once, produces a single number and the outer query compares each row score against the average mark.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In a FROM clause&lt;/strong&gt;, acting as a temporary, unnamed table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;member_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;avg_score&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;study_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quiz_scores&lt;/span&gt;
    &lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;member_id&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;member_scores&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;calculates&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;average&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;each&lt;/span&gt; &lt;span class="n"&gt;member&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;creating&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;temporary&lt;/span&gt; &lt;span class="k"&gt;result&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="k"&gt;outer&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="k"&gt;treat&lt;/span&gt; &lt;span class="k"&gt;like&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In a SELECT clause&lt;/strong&gt;, computing a value per row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;member_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;doubled_score&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;study_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quiz_scores&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  What are CTEs?
&lt;/h1&gt;

&lt;p&gt;A CTE(Common Table Expression) is a temporary named result set defined at the top of your query using &lt;code&gt;WITH&lt;/code&gt;, and referenced later as a table for the rest of your query.&lt;br&gt;
It is temporary ---&amp;gt; it does not get saved anywhere. It exists only while that one query runs.&lt;br&gt;
An example of a CTE:&lt;br&gt;
----CTE----&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;group_avg&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="k"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;avg_score&lt;/span&gt;
    &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;study_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quiz_scores&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="n"&gt;score_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;member_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; 
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;study_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quiz_scores&lt;/span&gt;
&lt;span class="k"&gt;cross&lt;/span&gt; &lt;span class="k"&gt;join&lt;/span&gt; &lt;span class="n"&gt;group_avg&lt;/span&gt;
&lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;avg_score&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This defines the logic once, give it a name, and reference it below.&lt;br&gt;
This query uses a &lt;code&gt;CTE&lt;/code&gt; to calculate the overall average score once, then uses &lt;code&gt;CROSS JOIN&lt;/code&gt; to make that value available to every row. The&lt;code&gt;WHERE&lt;/code&gt; clause then filters the results to show only scores that are above the overall average.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Learning how to use subqueries and CTEs has made it easier for me to break down complex SQL queries into smaller, more manageable pieces.&lt;br&gt;
CTEs and subqueries are powerful SQL tools for breaking down complex queries and making data analysis easier to understand. Subqueries are useful when you need to perform a calculation or filtering operation within another query, while CTEs provides a cleaner and more readable way to organize multi-step logic&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A Step-by-Step Guide: Connecting Power BI to SQL Databases</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Sun, 05 Jul 2026 20:54:47 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/a-step-by-step-guide-connecting-power-bi-to-sql-databases-1dkn</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/a-step-by-step-guide-connecting-power-bi-to-sql-databases-1dkn</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Many companies and organizations interact with large amount of data from collection to creating insights from it. Transforming these data will bring meaningful insights and there making informed decions for the end users. Power BI is a powerful tool that enables one to create interactive dashboards and reports that communicates what the data is all about. Connecting Power Bi to SQL databases now allows onre to analyze data in real time or through a scheduled time.&lt;br&gt;
In this article demonstrates a step-by-step guide on how to connect Power BI to SQL databases both on local network and cloud-based, and start transforming your data into meaning visualizations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 1: Connecting to a local PostgreSQL Database
&lt;/h3&gt;

&lt;p&gt;Ensure that your  PostgreSQL is downloaded and installed in your local machine. Launch Power BI desktop and select get data from the home tab.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose SQL Server
From get data,select more,search for database then PostgreSQL database and connect which will require sever connection details.&lt;/li&gt;
&lt;li&gt;Connection Details
Enter the servername and database name. In this case I will user &lt;em&gt;postgres&lt;/em&gt; as username and the server is *&lt;em&gt;localhost:5432
*&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Choose import data querry mode and enter your login credentials.&lt;/li&gt;
&lt;li&gt;The window will then lists tables and you will select the one to work on with.For data cleaning click Transform data and the load for creating creating new measure and data models.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpl1vqdu14czk26dsq8li.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpl1vqdu14czk26dsq8li.png" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The navigator window will now show the tables available in the local PostgreSQL database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyg9esoigiw5ex5n5qkz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyg9esoigiw5ex5n5qkz1.png" alt=" " width="799" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 2: Connecting to a Cloud Based PostgreSQL on Aiven
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Log in to your Aiven account, create a new  service or the one existing and ensure it is running. 
The dashboard has
Host
Port
Database name (usually defaultdb)
Username (usually avnadmin)
Password, for connection details&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsooey9thc7h51ui4vmoq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsooey9thc7h51ui4vmoq.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download CA certificate, navigate to manage certificate manage,Trusted Root Certificate, right click certificates and import the certificate from your downloads.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08eobuzxw1hfz4rklw3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08eobuzxw1hfz4rklw3g.png" alt=" " width="799" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Power BI Desktop, navigate to home tab, Get Data, More, select PostgreSQL, enter login credentials&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2z6oy9ql9v6cuq4f01te.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2z6oy9ql9v6cuq4f01te.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting what you want to transform like the local connection, performing data cleaning and load for modelling and all DAX irregardless of where the data is in whether local database or cloud.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Connecting Power BI to SQL databases whether hosted on local or cloud enables organizations to transform raw data into meaningful and interactive insights.&lt;br&gt;
The steps of connecting Power BI to SQL databases are similar in that the cloud connection require SSL certificate for security access to be grated , otherwise every operation works the same.&lt;/p&gt;

</description>
      <category>reviews</category>
      <category>database</category>
      <category>cloud</category>
      <category>sql</category>
    </item>
    <item>
      <title>Understanding Relationship, Schemas and Joins In Power BI</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Mon, 29 Jun 2026 22:59:24 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/understanding-relationship-schemas-and-joins-in-power-bi-1458</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/understanding-relationship-schemas-and-joins-in-power-bi-1458</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Power BI is a powerful business analytics and visualisation platform used to connect, transform and analyze raw data from various sources. This platform helps organizations to generate reports and dashboards that helps them make better and reliable decisions.&lt;br&gt;
In this article, we are going to learn what are relationship,schemas and joins and how they play a role in performing power querry in Power BI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relationship in Power BI
&lt;/h2&gt;

&lt;p&gt;In basic terms, relationships means a link between two things. In Power BI, relationship shows how rows in one table are connected to other rows in another table based on a unique key.&lt;/p&gt;

&lt;h1&gt;
  
  
  Types of Relationship
&lt;/h1&gt;

&lt;p&gt;There are 4 types of relationship which includes; one-to-one, one-to-many, many-to-one and many-to-many. This relationship helps in combining information in multiple columns without duplicating it.&lt;/p&gt;

&lt;h1&gt;
  
  
  One-to-One Relationship
&lt;/h1&gt;

&lt;p&gt;This relationship means each row in one table corresponds to exactly one row in another table. A perfect example is a student having one id to access a student portal account.&lt;/p&gt;

&lt;h1&gt;
  
  
  One-to-Many Relationship
&lt;/h1&gt;

&lt;p&gt;This type of relationship that is commonly used in relational databases and in Power BI.It means that one record in a parent table can be associated with many records in a child table, but each record in the child table can be associated with only one record in the parent table.&lt;br&gt;
An example is one student can register for many courses.&lt;/p&gt;

&lt;h1&gt;
  
  
  Many-to-One Relationship
&lt;/h1&gt;

&lt;p&gt;This is basically the reverse of one-to-many type of relationship. An example is that many patients seeks medication from one doctor.&lt;/p&gt;

&lt;h1&gt;
  
  
  Many-to-Many Relationship
&lt;/h1&gt;

&lt;p&gt;This type of relationship means multiple records in both tables share the same values.For example students enroll in multiple courses and each course has may students.&lt;/p&gt;

&lt;h1&gt;
  
  
  Schemas
&lt;/h1&gt;

&lt;p&gt;A schema is basically how data is defined or structered in a database. It defines how data is organized including tables, columns, keys,data types and relationship between the tables.&lt;/p&gt;

&lt;h1&gt;
  
  
  Star Schema
&lt;/h1&gt;

&lt;p&gt;A star schema is data modelling technique that is used to warehouse data. It organizes data into a central fact tables with different dimension tables forming a shape that is like a star.&lt;br&gt;
In start schema, fact table stores numerical values and foreign keys that directly links the dimension table while dimension table provides descreptive context behind the numerical values in the fact table.&lt;/p&gt;

&lt;h1&gt;
  
  
  Snowflake Schema
&lt;/h1&gt;

&lt;p&gt;This is a database design where dimension tables are normalized into multiple related sub-tables to reduce duplicate data.&lt;/p&gt;

&lt;h1&gt;
  
  
  Joins In Power BI
&lt;/h1&gt;

&lt;p&gt;A join is a connection between two tables using a common column so that related data can be combined together. Joins are done in power querry editor.&lt;/p&gt;

&lt;h1&gt;
  
  
  Power BI jons
&lt;/h1&gt;

&lt;p&gt;Inner join: It returns matchinhg rows only.&lt;br&gt;
Left outer join: It returns all rows fro the first table and matching rows from the second table.&lt;br&gt;
Right outer join: It returns all rows from the second table and matching rows from the first table.&lt;br&gt;
Full outer join: It returns all rows from both tables.&lt;br&gt;
Left anti join:It returns rows from the table with no match in the second table.&lt;br&gt;
Right anti join: It returns rows from the second table with no match in the first table.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Finally, understanding relationships, schemas, and joins is important for building effective data models in Power BI. Relationships enable tables to work together, while schemas provide a structured framework for organizing data. Joins make it possible to combine data from different sources into a single, meaningful dataset. Mastering relationships, schemas, and joins is therefore a key skill for developing efficient Power BI reports, dashboards and making better insightful decisions.&lt;/p&gt;

</description>
      <category>database</category>
      <category>datascience</category>
      <category>sql</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Linux Fundamentals for Data Engineering</title>
      <dc:creator>Justine Kimeli</dc:creator>
      <pubDate>Sun, 07 Jun 2026 20:11:38 +0000</pubDate>
      <link>https://dev.to/justine_kimeli_0c6993e6d5/linux-fundamentals-for-data-engineering-24pl</link>
      <guid>https://dev.to/justine_kimeli_0c6993e6d5/linux-fundamentals-for-data-engineering-24pl</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Data engineering is the process of collecting, moving, cleaning, storing, and preparing data such that it is easily accessed by data analysts, data scientists, AI systems, and businesses.&lt;br&gt;
Basically data engineering  is building systems that make data available, usable and reliable.&lt;/p&gt;

&lt;p&gt;When learning data engineering, there is much focus tools such  python, SQL and cloud platforms. While these technologies are of importance, there is one data system called linux which is the background in this field of data engineering.&lt;/p&gt;

&lt;p&gt;In this article, I am going to share how linux commands is playing a vital role in data engineering and how it is used in a linux environment.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Linux is important in Data Engineering
&lt;/h1&gt;

&lt;p&gt;Linux is widely used in real-world data engineering because it provides a stable, efficient, and flexible environment for handling large amounts of data.&lt;/p&gt;

&lt;p&gt;Most companies stores data in a database, processes large datasets, schedules automated workflows, and deploys applications to the cloud. &lt;/p&gt;

&lt;p&gt;Linux is used by data engineers to connect to remote servers,install and configure databases,transfer files between systems,monitor server performance, manage permissions and troubleshoot production issues in a linux environmemt. Therefore, without a basic understanding of Linux, working with most of the projects become challenging.&lt;/p&gt;

&lt;h1&gt;
  
  
  Basic Linux commands
&lt;/h1&gt;

&lt;p&gt;ssh (secure shell) -&amp;gt;This commands allows one to access a remote server which has a host name and authenticate with a password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr72ds9fcj7ggpw24444l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr72ds9fcj7ggpw24444l.png" alt=" " width="605" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pwd -&amp;gt; This command is used to show current working directory&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5cdvy8n0l8rxa0k34dxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5cdvy8n0l8rxa0k34dxp.png" alt=" " width="513" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ls -&amp;gt; Lists all files and directories&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa52qp1fwfdbe6ugrzfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa52qp1fwfdbe6ugrzfz.png" alt=" " width="799" height="74"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cd -&amp;gt; This command is used to change a directory&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83oetzr67kqj60st9bvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83oetzr67kqj60st9bvl.png" alt=" " width="408" height="26"&gt;&lt;/a&gt;&lt;br&gt;
mkdir -&amp;gt; Create a new directory&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcio7lpn0xuzmqiy7ovq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcio7lpn0xuzmqiy7ovq.png" alt=" " width="534" height="28"&gt;&lt;/a&gt;&lt;br&gt;
ls -a -&amp;gt; Displays all files including hidden files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0l9tazk2ztubuvrfw6an.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0l9tazk2ztubuvrfw6an.png" alt=" " width="798" height="113"&gt;&lt;/a&gt;&lt;br&gt;
ls -l -&amp;gt; Displays long-list of files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhw6am5n2gn42fttk5s8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhw6am5n2gn42fttk5s8.png" alt=" " width="800" height="626"&gt;&lt;/a&gt;&lt;br&gt;
ls -lh -&amp;gt; Displays file size in human- readable format&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7r4oqm41jwxhm56l8cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7r4oqm41jwxhm56l8cl.png" alt=" " width="800" height="636"&gt;&lt;/a&gt;&lt;br&gt;
mv -&amp;gt; Moving files and directories&lt;br&gt;
cp-&amp;gt; Copying files and directories&lt;br&gt;
scp -&amp;gt; secure copying of files from  a local machine to a remote server.&lt;br&gt;
rm -&amp;gt; Removing files&lt;br&gt;
touch -&amp;gt; Create an empty file&lt;br&gt;
echo -&amp;gt; Print text or variables&lt;br&gt;
exit -&amp;gt; Clears the terminal&lt;/p&gt;

&lt;p&gt;Installing postgres&lt;br&gt;
sudo apt install postgresql postgresql contrib -y&lt;br&gt;
Starting postgres -&amp;gt;sudo systemctl start postgresql&lt;br&gt;
Checking the status of postgres -&amp;gt; sudo systemctl status postgresql&lt;/p&gt;

&lt;p&gt;Checking the psql version -&amp;gt; psql --version&lt;/p&gt;

&lt;p&gt;Connecting from Linux server to Postgress&lt;br&gt;
sudo -u postgres psql&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Linux is a fundamental skill in data engineering that helps data engineers  access, manage databases, transfer data, automating tasks. Through the practice that I have been doing, I have learned how to access a remote server perform various basic linux commands. I also learnt how to install postgres in linux environment and be able create database, schema, and perform basic SQL querries in linux environment.Finally, linux skills is essential for building, managing, and maintaining reliable data engineering solutions.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
