<?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: Catherine Kawara</title>
    <description>The latest articles on DEV Community by Catherine Kawara (@ckawara).</description>
    <link>https://dev.to/ckawara</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F852577%2F59e3fc07-14e2-457c-b6bb-afc7c58bfafb.jpg</url>
      <title>DEV Community: Catherine Kawara</title>
      <link>https://dev.to/ckawara</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ckawara"/>
    <language>en</language>
    <item>
      <title>Getting started with sentiment analysis</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Tue, 21 Mar 2023 12:11:16 +0000</pubDate>
      <link>https://dev.to/ckawara/getting-started-with-sentiment-analysis-55g2</link>
      <guid>https://dev.to/ckawara/getting-started-with-sentiment-analysis-55g2</guid>
      <description>&lt;p&gt;Sentiment analysis is a technique used to determine the emotional tone of a piece of text. It involves the use of natural language processing, machine learning, and other computational methods to classify text into categories such as positive, negative, or neutral. &lt;br&gt;
Sentiment analysis is used in a wide range of applications, including social media monitoring, customer feedback analysis, and market research.&lt;br&gt;
In this article, we'll provide an introduction to sentiment analysis and walk you through the steps to get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Define Your Problem
&lt;/h3&gt;

&lt;p&gt;What type of text do you want to analyze, and what do you want to learn from it? Some common applications of sentiment analysis include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Social media monitoring&lt;/strong&gt;: Analyzing tweets, Facebook posts, and other social media content to track brand sentiment and customer opinions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer feedback analysis&lt;/strong&gt;: Analyzing customer reviews, surveys, and other feedback to identify areas for improvement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market research&lt;/strong&gt;: Analyzing news articles, blogs, and other content to identify trends and track sentiment about particular products or companies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you've defined your problem, you can begin to gather the data you need to perform sentiment analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Gather Data
&lt;/h3&gt;

&lt;p&gt;You'll need a dataset of text that you want to analyze. There are several ways to gather data for sentiment analysis. You can collect data manually by downloading social media posts or customer reviews, or you can use an API to automatically collect data from social media platforms or review sites.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Preprocess Data
&lt;/h3&gt;

&lt;p&gt;Preprocessing involves cleaning the text data and preparing it for analysis. Common preprocessing steps include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lower casing&lt;/strong&gt; - each text is converted to lowercase.&lt;/li&gt;
&lt;li&gt;Removing any unnecessary information, such as URLs and special characters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Removing stop words&lt;/strong&gt;: Stop words are common words such as "and" and "the" that don't carry much meaning. Removing them can improve the accuracy of your analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokenization&lt;/strong&gt;: Tokenization involves breaking the text into individual words or phrases, which can then be analyzed separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stemming&lt;/strong&gt;: Stemming involves reducing words to their base form (e.g., "running" becomes "run"). This can help to reduce the number of unique words in the dataset, making analysis easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Choose a Sentiment Analysis Tool
&lt;/h3&gt;

&lt;p&gt;Once you've preprocessed your data, you can begin to perform sentiment analysis. There are several tools available for sentiment analysis, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rule-based systems: Rule-based systems use predefined rules to classify text into positive, negative, or neutral categories. These systems can be useful for simple analyses, but they may not be accurate for complex data.&lt;/li&gt;
&lt;li&gt;Machine learning systems: Machine learning systems use algorithms to learn from data and classify text based on patterns. These systems can be more accurate than rule-based systems, but they require 
more training data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Analyze Your Data
&lt;/h3&gt;

&lt;p&gt;The final step is to analyze your data. Depending on the sentiment analysis tool you've chosen, you may be able to get a simple positive/negative/neutral classification for each piece of text, or you may be able to get a more detailed analysis that includes information such as sentiment intensity and topic analysis.&lt;/p&gt;

&lt;p&gt;In conclusion, sentiment analysis can be a powerful tool for understanding the emotional tone of text data. By defining your problem, gathering data, preprocessing the data, choosing a sentiment analysis tool, and analyzing the data, you can gain valuable insights into customer opinions, brand sentiment, and market trends. &lt;br&gt;
With the availability of open-source libraries like NLTK, spaCy, and TextBlob, it's easier than ever to get started with sentiment analysis.&lt;/p&gt;

&lt;p&gt;For a practical example of sentiment analysis using Python and the NLTK library, check out this &lt;a href="https://github.com/CKawara/Twitter-Sentiment-Analysis"&gt;Github repository&lt;/a&gt;.&lt;br&gt;
I have perfomed Sentiment Analysis on tweets fetched from the &lt;a href="https://www.kaggle.com/datasets/kazanova/sentiment140"&gt;sentiment140 dataset&lt;/a&gt; using Python's NLTK library, Pandas for data manipulation, Matplotlib for data visualization, and Scikit-learn for building machine learning models.&lt;/p&gt;

&lt;p&gt;Till next time, happy coding!✌️&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>nlp</category>
      <category>machinelearning</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Essential SQL Commands for Data Science</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Wed, 15 Mar 2023 11:46:47 +0000</pubDate>
      <link>https://dev.to/ckawara/essential-sql-commands-for-data-science-ph</link>
      <guid>https://dev.to/ckawara/essential-sql-commands-for-data-science-ph</guid>
      <description>&lt;p&gt;In the previous article, &lt;a href="https://dev.to/ckawara/introduction-to-sql-for-data-analysis-3ab1"&gt;Introduction to SQL for Data Analysis&lt;/a&gt;, I provided an introduction to SQL for data analysis, covering the basics of SQL syntax, data types, operators, and table creation/modification. In this article, we will delve into more advanced SQL features that can be used for complex data analysis tasks. In this article, we will cover some of the essential SQL commands that every data scientist should know.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. SELECT
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;SELECT&lt;/code&gt; is the most basic and important command in SQL. It is used to retrieve data from a table. The basic syntax of the SELECT command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ... FROM table_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. WHERE
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;WHERE&lt;/code&gt; is used to filter data based on certain conditions. The basic syntax of the WHERE command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ... FROM table_name WHERE condition;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. GROUP BY
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;GROUP BY&lt;/code&gt; is used to group rows based on the values in one or more columns. The basic syntax of the GROUP BY command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ..., aggregate_function(column_name)
FROM table_name
GROUP BY column1, column2, ...;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, aggregate_function is a function used to perform an operation on a set of values, such as COUNT, SUM, AVG, MAX, and MIN. For example, if you want to retrieve the number of customers from each country in the "customers" table, you can use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT country, COUNT(*)
FROM customers
GROUP BY country;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will retrieve the number of customers from each country in the "customers" table.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ORDER BY
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ORDER BY&lt;/code&gt; is used to sort the data in ascending or descending order based on one or more columns. The basic syntax of the ORDER BY command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ... FROM table_name ORDER BY column_name [ASC|DESC];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, column_name is the name of the column that you want to sort by.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. JOIN
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;JOIN&lt;/code&gt; is used to combine rows from two or more tables based on a related column between them. There are different types of joins, including &lt;code&gt;INNER JOIN&lt;/code&gt;, &lt;code&gt;LEFT JOIN&lt;/code&gt;, &lt;code&gt;RIGHT JOIN&lt;/code&gt;, and &lt;code&gt;FULL OUTER JOIN&lt;/code&gt;. The basic syntax of the &lt;code&gt;JOIN&lt;/code&gt; command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ... FROM table1 JOIN table2 ON table1.column_name = table2.column_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Table1 and table2 are the names of the tables that you want to join, and column_name is the name of the related column between them.&lt;/p&gt;

&lt;h4&gt;
  
  
  INNER JOIN
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;INNER JOIN&lt;/code&gt; returns only the rows in which the joined tables have matching values. For example, if we have two tables - employees and departments - with a common column "department_id", we can join them as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT employees.employee_id, employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement will return only the rows where the "department_id" column in the employees table matches the "department_id" column in the departments table.&lt;/p&gt;

&lt;h4&gt;
  
  
  LEFT JOIN
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;LEFT JOIN&lt;/code&gt; is used to combine all rows from the left table and the matching rows from the right table. If there are no matching rows from the right table, the result will contain NULL values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Table1 and table2 are the names of the tables that you want to join, and column_name is the name of the related column between them. &lt;/p&gt;

&lt;p&gt;Say you want to retrieve all the customers and their orders from the "customers" and "orders" tables, even if some customers have not made any orders yet, you can use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  RIGHT JOIN
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;RIGHT JOIN&lt;/code&gt; is used to combine all rows from the right table and the matching rows from the left table. If there are no matching rows from the left table, the result will contain NULL values. Here's the syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  FULL OUTER JOIN
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;FULL OUTER JOIN&lt;/code&gt; is used to combine all rows from both tables, including the rows that have no matching values in either table. The basic syntax of FULL OUTER JOIN command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2, ...
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;table1 and table2 are the names of the tables that you want to join, and column_name is the related column between them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT c.name, o.order_id
FROM customers c
FULL OUTER JOIN orders o
ON c.customer_id = o.customer_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will return all customers and their corresponding order IDs, including customers who have not placed any orders yet. For customers without orders, the order ID column will contain NULL values.&lt;/p&gt;

&lt;h4&gt;
  
  
  SELF JOIN
&lt;/h4&gt;

&lt;p&gt;Self join is a type of join where a table is joined with itself. This is useful when you want to compare data in the same table or when you have hierarchical data in a table.&lt;/p&gt;

&lt;p&gt;To perform a self join on a table, we need to give the table an alias name so that we can refer to it separately within the same query. Here's an example of a self join that retrieves the names of all employees and their corresponding supervisors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT e.employee_name, s.employee_name as supervisor_name
FROM employees e
INNER JOIN employees s ON e.supervisor_id = s.employee_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we gave the "employees" table the alias name "e" for the first instance of the table, and "s" for the second instance of the table. We then joined the two instances of the table on the "supervisor_id" column in the first instance of the table, and the "employee_id" column in the second instance of the table.&lt;/p&gt;

&lt;p&gt;The result of the query will be a list of all employee names with their corresponding supervisor names.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Subqueries
&lt;/h3&gt;

&lt;p&gt;Subqueries are used to nest one query inside another query. They can be used to retrieve data that meets specific criteria or to create temporary tables for use in other queries.&lt;/p&gt;

&lt;p&gt;For example, if we want to retrieve the names of employees who work in departments with more than 100 employees, we can use a subquery as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT first_name, last_name
FROM employees
WHERE department_id IN (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*) &amp;gt; 100
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement uses a subquery to retrieve the department IDs of departments with more than 100 employees, and then retrieves the names of employees who work in those departments.&lt;/p&gt;

&lt;h4&gt;
  
  
  7. Aggregation Functions
&lt;/h4&gt;

&lt;p&gt;Aggregation functions are used to perform calculations on a set of data, such as finding the average, maximum, or minimum value in a column. Common aggregation functions include SUM, AVG, MAX, MIN, and COUNT.&lt;/p&gt;

&lt;p&gt;For example, if we want to find the average salary of employees in each department, we can use the AVG function as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement groups employees by department and calculates the average salary for each department.&lt;/p&gt;

&lt;h4&gt;
  
  
  8. Window functions
&lt;/h4&gt;

&lt;p&gt;Window functions are used to perform calculations on a subset of data within a larger data set. They can be used to calculate running totals, rankings, and other complex calculations.&lt;br&gt;
For example, to rank the sales figures for each month, we can use the following query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT month, sales, RANK() OVER (ORDER BY sales DESC) AS sales_rank
FROM sales_table;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;month&lt;/code&gt; is the column that contains the month name or number, &lt;code&gt;sales&lt;/code&gt; is the column that contains the sales figures for each month, and &lt;code&gt;sales_table&lt;/code&gt; is the name of the table that contains the data.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;RANK&lt;/code&gt; function is used to rank the rows based on a specific column, and the &lt;code&gt;OVER&lt;/code&gt; clause specifies the order in which the rows should be processed. &lt;code&gt;Sales_rank&lt;/code&gt; is the column that will contain the rank of each month's sales figures, and &lt;code&gt;DESC&lt;/code&gt; is used to order the sales figures in descending order.&lt;/p&gt;

&lt;p&gt;Overall, window functions provide a powerful tool for performing complex calculations on subsets of data within a larger data set.&lt;/p&gt;

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

&lt;p&gt;In this article, we covered some of the more advanced SQL features that are commonly used in data science. Joins allow us to combine data from multiple tables based on a common column, subqueries enable us to nest one query inside another query, aggregation functions let us perform calculations on a set of data, and window functions allow us to perform calculations on a subset of data within a larger dataset.&lt;/p&gt;

&lt;p&gt;As you continue to work with SQL for data analysis, it's important to keep practicing and exploring the different features and commands available. With enough practice, you'll become more comfortable with SQL and be able to use it to extract valuable insights from even the largest datasets.&lt;/p&gt;

&lt;p&gt;Till next time, happy coding!✌️&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>sql</category>
      <category>machinelearning</category>
      <category>data</category>
    </item>
    <item>
      <title>When to Use Machine Learning Solutions</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Wed, 01 Mar 2023 07:54:57 +0000</pubDate>
      <link>https://dev.to/ckawara/when-to-use-machine-learning-solutions-gdc</link>
      <guid>https://dev.to/ckawara/when-to-use-machine-learning-solutions-gdc</guid>
      <description>&lt;p&gt;Machine learning has become increasingly popular in recent years, and for a good reason. With the ability to analyze large amounts of data and make predictions based on patterns, machine learning has the potential to solve a wide range of problems. This article will explore when to use machine learning solutions and when they may be unnecessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does your problem need a machine learning solution?
&lt;/h2&gt;

&lt;p&gt;Understanding what machine learning is and what it can do is essential. Machine learning is an approach that enables computers to identify and learn complex patterns from data and make predictions or decisions based on that data.&lt;/p&gt;

&lt;p&gt;Now to our question, "does your problem need a machine learning solution?". Specific characteristics of a problem make it a good candidate for a machine learning solution, and we will explore a few.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Data
&lt;/h3&gt;

&lt;p&gt;ML algorithms require large amounts of data to learn from. If you have a problem involving a lot of data, machine learning may be a good solution.&lt;/p&gt;

&lt;p&gt;For example, you want to analyze customer behavior on an e-commerce website. In that case, you'll likely have a lot of data to work with, such as clickstream data, purchase history, and demographic information. Machine learning algorithms can help you identify patterns in this data and predict customer behavior.&lt;/p&gt;

&lt;p&gt;Launching an ML system without training data is possible, but the system will learn from incoming data in production. All the same, serving insufficiently trained models to users come with risks, like poor customer experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Complex patterns
&lt;/h3&gt;

&lt;p&gt;ML is especially useful when there are patterns in the data that are difficult for humans to identify.&lt;/p&gt;

&lt;p&gt;Say you want to detect credit card fraud. There may be patterns in the data that are not immediately obvious. ML algorithms can help you identify these patterns and flag potentially fraudulent transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dynamic environment
&lt;/h3&gt;

&lt;p&gt;ML algorithms can adapt to changing environments and make predictions based on new data. If you have a problem that involves a dynamic environment, hardcoded solutions like handwritten rules can quickly become outdated.&lt;/p&gt;

&lt;p&gt;Figuring out how your problem has changed so you can update your handwritten rules can be too expensive or impossible. This is when ML comes in.&lt;/p&gt;

&lt;p&gt;For example, if you want to predict stock prices or weather patterns, ML can analyze new data and make predictions based on the latest information.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Repetitiveness
&lt;/h3&gt;

&lt;p&gt;A repetitive problem occurs frequently and consistently over time. Meaning that there are consistent patterns in the data that the ML algorithm can learn from. This makes collecting enough data to train the algorithm effectively and make accurate predictions on new data easier.&lt;/p&gt;

&lt;p&gt;Now we could continue with the list of use cases, which will keep growing as ML grows in the industry. Even though ML can solve many problems very well and effectively, there are specific problems for which machine learning may not be the best solution. For example;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If your problem involves simple rules that can be easily programmed, then a traditional programming solution may be more appropriate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ML algorithms are only as good as the data they are trained on. If your data is biased, incomplete, or inaccurate, the algorithm won't be as effective as it should be. The same goes for the amount of data available, if you have a small amount of data and no way to collect more data, then ML may not be effective.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Machine learning can be a powerful tool for solving certain types of problems. When considering whether to use a machine learning solution, it's important to consider the characteristics of the problem and determine whether machine learning is the best approach.&lt;/p&gt;

&lt;p&gt;Additionally, it's important to consider the resources required to implement a machine learning solution and whether you have the expertise and resources to do so.&lt;/p&gt;

&lt;p&gt;However, if ML can't solve the whole of your problem, it might be possible to break it into smaller components and use ML to solve some of them.&lt;/p&gt;

&lt;p&gt;Till next time, Happy coding!✌️&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Exploratory Data Analysis - Ultimate Guide</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Sun, 26 Feb 2023 06:45:59 +0000</pubDate>
      <link>https://dev.to/ckawara/exploratory-data-analysis-ultimate-guide-3mea</link>
      <guid>https://dev.to/ckawara/exploratory-data-analysis-ultimate-guide-3mea</guid>
      <description>&lt;p&gt;Exploratory data analysis (EDA) is an essential step in any data analysis project. It involves examining and analyzing data to uncover patterns, relationships, and insights.EDA is an iterative process that begins with simple data exploration and progresses to more complex analysis. &lt;/p&gt;

&lt;p&gt;The main objective of EDA is to gain a deeper understanding of the data and use this understanding to guide further analysis and modeling. EDA can help in making informed decisions and generating new hypotheses, which can lead to new insights and discoveries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps of EDA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Understanding your variables
&lt;/h3&gt;

&lt;p&gt;Before beginning data cleaning, it is important first to understand the variables in your dataset. Understanding the variables will help you identify potential data quality issues and determine the appropriate cleaning techniques to use.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reading data
&lt;/h4&gt;

&lt;p&gt;We will use the &lt;a href="https://www.kaggle.com/datasets/parulpandey/2020-it-salary-survey-for-eu-region"&gt;IT Salary Survey for EU region(2018-2020) dataset&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data = pd.read_csv("./Data/IT Salary Survey EU  2020.csv")

# get first five rows
data.head()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZVbAAw02--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3fgfp5bdlszyombmaka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZVbAAw02--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3fgfp5bdlszyombmaka.png" alt="data.head() output" width="880" height="389"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# get the last five columns
data.tail()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DhMmJ24X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgrh219z7k9751dbmydx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DhMmJ24X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgrh219z7k9751dbmydx.png" alt="data.tail() output" width="880" height="422"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data.shape
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return the number of rows by the number of columns for my dataset. The putput is (1253, 23) meaning our dataset has 1253 rows and 23 columns&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data.describe()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It summarizes the count, mean, standard deviation, min, and max for numeric variables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gyu3gKmR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f8s689i5pj4f5nvtddp9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gyu3gKmR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f8s689i5pj4f5nvtddp9.png" alt="data.describe() output" width="880" height="227"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# get the name of all the columns in our dataset
data.columns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9u5ctAke--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yb4ec0rounnjfh4iu6dj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9u5ctAke--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yb4ec0rounnjfh4iu6dj.png" alt="data.columns output" width="880" height="197"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# check for unique values
data.nunique()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6q5ZaA67--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txqg2inyr6txzga739rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6q5ZaA67--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txqg2inyr6txzga739rf.png" alt="data.nunique() output" width="880" height="370"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# check unique value for specific values
data['Seniority'].unique()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KDesa0wZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzwlvxvun63vwu93i3v6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KDesa0wZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzwlvxvun63vwu93i3v6.png" alt="unique specific values output" width="662" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Cleaning the data
&lt;/h3&gt;

&lt;p&gt;Before you start exploring your data, it's essential to clean and preprocess the data. Data cleaning involves identifying and correcting errors and inconsistencies in the data, such as missing values, duplicate records and incorrect data types.&lt;br&gt;
By doing so, we can ensure that our analysis is based on high-quality data and that any insights or conclusions drawn from the data are accurate and reliable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Renaming columns&lt;/strong&gt;&lt;br&gt;
First, we rename our columns with shorter, more relevant names.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data.columns = ["Year", "Age", "Gender","City","Position","Experience","German_Experience","Seniority","Main_language","Other_Language","Yearly_salary","Yearly_bonus","Last_year_salary","Last_year_bonus","Vacation_days","Employment_status","Сontract_duration","Language","Company_size","Company_type","Job_loss_COVID","Kurzarbeit","Monetary_Support"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Remove any columns we might don't need&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data.drop([
        'German_Experience', # analysis focuses on only German
        'Last_year_salary', # analysis covers only 2020 
        'Last_year_bonus',  # analysis covers only 2020 
        'Job_loss_COVID', # analysis isn't related to covid
        'Kurzarbeit', # analysis isn't related to covid
        'Monetary_Support', # analysis isn't related to covid
        ], axis=1, inplace=True)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Dealing with missing and duplicate values&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Duplicates are records that are identical in all variables. Duplicates and missing values can affect the statistical analysis and visualization. One approach to handling this is to remove them from the dataset.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# check for missing values
data.isna().sum()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UWxCJ6Y7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2oa9nfpyf6erofip4jz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UWxCJ6Y7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2oa9nfpyf6erofip4jz.png" alt="Missing values" width="543" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Drop missing and duplicate values
data=data.dropna(subset=['Age','Gender','Position','Experience','Seniority','Main_language', 'Сontract_duration', 'Yearly_bonus']) 
data=data.drop_duplicates()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can use &lt;code&gt;data.isna().sum()&lt;/code&gt; to confirm if there are any missing values left&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handling data type issues&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Data type issues can arise from errors in data collection or data entry. For example, a variable may be stored as a string instead of a numerical value. One approach to handling data type issues is to convert the variable to the appropriate data type. In our case, we will convert datetime to date&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#  changing datetime to date
data['Year'] = pd.to_datetime(data['Year']).dt.year
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Analyzing relationships between variables
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Correlation Matrix&lt;/strong&gt;&lt;br&gt;
The correlation is a measurement that describes the relationship between two variables. Therefore, a correlation matrix is a table that shows the correlation coefficients between many variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# calculate correlation matrix
corelation = data.corr()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we will use &lt;code&gt;sns.heatmap()&lt;/code&gt; to plot a correlation matrix of all of the variables in our dataset.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# plot the heatmap
sns.heatmap(corelation,xticklabels=corelation.columns,yticklabels=corelation.columns, annot=True)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A7GP5GhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p26trukuqat418ube4n1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A7GP5GhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p26trukuqat418ube4n1.png" alt="plot result" width="690" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Countplot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A countplot is a type of visualization in which the frequency of categorical data is plotted. &lt;br&gt;
It is a bar plot where the bars represent the number (or count) of occurrences of each category in a categorical variable.&lt;br&gt;
Countplots are a useful tool for exploring the distribution of categorical data and identifying patterns or trends.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sns.countplot(x='Gender', data=data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LpDeOkgO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hdx0euacrr9mklj9tnw7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LpDeOkgO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hdx0euacrr9mklj9tnw7.png" alt="countplot" width="764" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hue parameter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;hue&lt;/code&gt; parameter is used to display the frequency of the data based on a second categorical variable. In our case, &lt;code&gt;Contract_duration&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sns.countplot(x='Gender', hue='Сontract_duration', data=data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The resulting plot shows the frequency of gender, grouped by the contract duration. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8TAxGJeO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/403pd4swpyjkx0f2hkws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8TAxGJeO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/403pd4swpyjkx0f2hkws.png" alt="adding hue" width="739" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Histogram&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A histogram is a graphical representation of the distribution of a continuous variable, typically showing the frequencies of values in intervals or "bins" along a numerical range.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bins = [15,20,25,30,35,40,45,50] 
pd.cut(data['Age'],bins=bins).value_counts(normalize=True).mul(100).round(1).plot(kind='bar')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M18xY1u9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0tb7z9xu4m5zkjeywcym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M18xY1u9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0tb7z9xu4m5zkjeywcym.png" alt="age histogram" width="734" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;EDA is a critical step in any data analysis project. It allows you to understand the data, identify patterns and relationships, and extract insights that can help you make informed decisions. &lt;br&gt;
There are several other types of visualizations that we didn't cover that you can use depending on the dataset, but by following the steps outlined in this article, you can conduct an effective EDA and extract valuable insights from your data.&lt;/p&gt;

&lt;p&gt;The rest of the code where I perform more EDA on this dataset can be found on &lt;a href="https://github.com/CKawara/Exploratory-Data-Analysis"&gt;GitHub&lt;/a&gt;.&lt;br&gt;
Till next time, Happy coding!✌️&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>data</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Introduction to SQL for Data Analysis</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Sun, 19 Feb 2023 09:51:58 +0000</pubDate>
      <link>https://dev.to/ckawara/introduction-to-sql-for-data-analysis-3ab1</link>
      <guid>https://dev.to/ckawara/introduction-to-sql-for-data-analysis-3ab1</guid>
      <description>&lt;p&gt;Structured Query Language (SQL) is a programming language used for managing and manipulating relational databases. It is one of the most popular languages used for data analysis and is used by data analysts, data scientists, and database administrators alike. SQL can be used to store, access, and extract massive amounts of data in order to carry out the data science process smoothly.&lt;/p&gt;

&lt;p&gt;This article aims to provide an introduction to SQL for data analysis. We will cover the basics of SQL, including its syntax, data types, and operators. &lt;br&gt;
We will also discuss how to create, modify, and delete tables in SQL, and how to retrieve data from these tables using queries.&lt;br&gt;
Finally, we will provide an overview of some of the more advanced SQL features that can be used for more complex data analysis tasks.&lt;/p&gt;
&lt;h3&gt;
  
  
  SQL Basics
&lt;/h3&gt;

&lt;p&gt;SQL is a declarative language, meaning that users define what they want the database to do, and the database management system (DBMS) determines the best way to perform the operation. &lt;br&gt;
SQL statements consist of one or more clauses, each of which specifies a particular action to be taken. The most common clauses are SELECT, INSERT, UPDATE, DELETE and CREATE. We will look at them in detail later in this article.&lt;/p&gt;

&lt;p&gt;SQL syntax is relatively simple, with commands composed of keywords and parameters that are often enclosed in parentheses or quotes. It is not case-sensitive, but it is common practice to write SQL keywords in uppercase.&lt;/p&gt;
&lt;h3&gt;
  
  
  SQL Data Types
&lt;/h3&gt;

&lt;p&gt;SQL supports several data types, including;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Numeric (integers, decimals, and floats)&lt;/li&gt;
&lt;li&gt;Character (strings of text)&lt;/li&gt;
&lt;li&gt;Date/time&lt;/li&gt;
&lt;li&gt;Boolean types (values of true or false)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  SQL Operators
&lt;/h3&gt;

&lt;p&gt;Operators are used to performing operations on SQL data. There are several types of operators, including; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arithmetic - Addition, subtraction, multiplication, and division&lt;/li&gt;
&lt;li&gt;Comparison - Equal to, not equal to, greater than, and less than&lt;/li&gt;
&lt;li&gt;Logical - AND, OR, and NOT &lt;/li&gt;
&lt;li&gt;String operators - Concatenation and pattern matching.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Creating and Modifying Tables
&lt;/h3&gt;

&lt;p&gt;One of the primary functions of SQL is to create, modify, and delete tables. Tables are used to organize data into rows and columns, making it easier to analyze and manipulate the data.&lt;br&gt;
We use the following command;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE table_name(
column1 datatype,
column2 datatype,
.....
columnN datatype,);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So to create an employees Table with various columns we would use the following statement&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE employees (
  employee_id INT PRIMARY KEY,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  salary DECIMAL(10,2),
  hire_date DATE
);

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

&lt;/div&gt;



&lt;p&gt;This statement creates a table with five columns, each with a different data type. The "employee_id" column is specified as the primary key, which means that it uniquely identifies each row in the table.&lt;/p&gt;

&lt;p&gt;Once a table has been created, it can be modified using the &lt;code&gt;ALTER TABLE&lt;/code&gt; statement.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement allows users to add or remove columns, change the data type of a column, or modify the constraints on the table.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieving Data from Tables
&lt;/h3&gt;

&lt;p&gt;Users must use the &lt;code&gt;SELECT&lt;/code&gt; statement to retrieve data from a table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT column1, column2....columnN
FROM   table_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;SELECT&lt;/code&gt; statement specifies the columns to be retrieved and the table from which to retrieve the data. &lt;br&gt;
For example, to retrieve all of the data from the "employees" table, we would use the following SQL statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM employees;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Users can also specify specific columns to retrieve and use &lt;code&gt;WHERE&lt;/code&gt; clauses to filter the data. For example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT first_name, last_name
FROM employees
WHERE salary &amp;gt; 50000;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement retrieves only the "first_name" and "last_name" columns for employees whose "salary" is greater than $50,000.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced SQL Features
&lt;/h3&gt;

&lt;p&gt;SQL also includes several advanced features that can be used for more complex data analysis tasks, we have discussed this at length in the second part of this article, &lt;a href="https://dev.to/ckawara/essential-sql-commands-for-data-science-ph"&gt;essential-sql-commands-for-data-science&lt;/a&gt;. These features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Joins: They are used to combine data from multiple tables based on a common column or key. There are several types of joins, including &lt;em&gt;inner joins&lt;/em&gt;, &lt;em&gt;outer joins&lt;/em&gt;, and &lt;em&gt;self-joins&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Subqueries: Subqueries are used to nest one query inside another query. They can be used to retrieve data that meets specific criteria or to create temporary tables for use in other queries.&lt;/li&gt;
&lt;li&gt;Aggregation functions: Aggregation functions are used to perform calculations on a set of data, such as finding the average, maximum, or minimum value in a column. Common aggregation functions include SUM, AVG, MAX, MIN, and COUNT.&lt;/li&gt;
&lt;li&gt;Window functions: Window functions are used to perform calculations on a subset of data within a more extensive data set. They can be used to calculate running totals, rankings, and other complex calculations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;SQL is a powerful tool for managing and manipulating large amounts of data. Its simple syntax and flexible data types make it an ideal language for data analysis tasks.&lt;br&gt;
Mastering SQL as an analysis tool is essential for anyone interested in data analysis. To master SQL it is necessary to know the basics of SQL first. Now There are many resources available for learning SQL, and hopefully the explanation above can help you get started.&lt;/p&gt;

&lt;p&gt;Till next time, happy coding!✌️&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>sql</category>
      <category>data</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Data Structure and Algorithms 102: Deep Dive into Data Structure and Algorithms</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Fri, 08 Jul 2022 08:44:13 +0000</pubDate>
      <link>https://dev.to/ckawara/data-structure-and-algorithms-102-deep-dive-into-data-structure-and-algorithms-56ap</link>
      <guid>https://dev.to/ckawara/data-structure-and-algorithms-102-deep-dive-into-data-structure-and-algorithms-56ap</guid>
      <description>&lt;p&gt;In my &lt;a href="https://dev.to/ckawara/data-structures-101-introduction-to-data-structures-and-algorithms-3njf"&gt;previous DSA article&lt;/a&gt;, we did a basic introduction to data structures and algorithms. Today we are going to talk about something a little bit more complex &lt;strong&gt;Time Complexity&lt;/strong&gt;. For this article, I will be using Ruby for the examples.&lt;/p&gt;

&lt;p&gt;When writing code it is important to consider the amount of time it would take for the code to complete a specific task even as the input size grows. Time complexity determines how an algorithm is going to perform as the input size grows. Input size in this context is the arguments a method takes. If a method takes in a string as an argument, that is the input. The length of the string becomes the input size.&lt;/p&gt;

&lt;h2&gt;
  
  
  Big O Notation
&lt;/h2&gt;

&lt;p&gt;Big O notation describes the complexity of your code using algebraic terms. Big O notation can express an algorithm's best, worst, and average-case running time. For our purposes, we're going to focus primarily on Big O as it relates to time complexity and we'll be covering four main time complexities. &lt;br&gt;
There's more on the Big O notation &lt;a href="https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constant Runtime: “O (1)”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;O (1)&lt;/code&gt; means that it takes a constant time to run an algorithm, regardless of the size of the input.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arr = [3, 1, 6, 9, 10, 2]
def print_all(arr)
   puts "#{arr[0]}" # prints out 3
   puts "#{arr[1]}" # prints out 1
end
print_all(arr)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linear Runtime: “O (n)”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;O (n)&lt;/code&gt; means that the run-time increases at the same pace as the input. One of the most common linear-time operations is traversing an array. Methods like &lt;code&gt;each&lt;/code&gt; and &lt;code&gt;map&lt;/code&gt; run through the entire collection of data, from start to finish.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arr = [3, 1, 6, 9, 10, 2]
def print_all(arr)
   arr.each do |num|
      puts "#{num}"
   end
end
print_all(arr)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Exponential Runtime: “O (n²)”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;O(n²)&lt;/code&gt; means that the calculation runs in quadratic time, which is the squared size of the input data.&lt;br&gt;
In programming, many of the more basic sorting algorithms have a worst-case run time of &lt;code&gt;O(n²)&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bubble Sort&lt;/li&gt;
&lt;li&gt;Insertion Sort&lt;/li&gt;
&lt;li&gt;Selection Sort&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the example below we have a nested loop, which means that depending on the size of the array, the outer loop will make its first iteration, and then the inner loop will iterate over the ENTIRE array before it goes back to the second iteration of the outer loop and it will continue on until the outer loop reaches the end of the array. That’s a LOT of iterations. Even an array with as little as 1,000 elements would create a million operations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def print_all(arr)
   arr.each do |letter1|
      arr.each do |letter2|
         puts "#{letter1}" + "#{letter2}"
      end
   end
end
print_all(["A", "B", "C"]) # prints out 9 pairs
print_all(["A", "B", "C", "D"]) # prints out 16 pairs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Logarithmic Runtime: “O (log n)”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;O(log n)&lt;/code&gt; means that the running time grows in proportion to the logarithm of the input size. This means that the run time barely increases as you exponentially increase the input. This is a highly efficient runtime. An example that always has logarithmic runtime is Binary Search. When you have a sorted array, a binary search will continually halve your data by checking if the item is larger or smaller than a given middle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def binary_search(n, arr)
  middle = arr.length / 2
  i = 0
  j = arr.length - 1

  while i &amp;lt; j
    if arr[middle] == n
      return true
    elsif arr[middle] &amp;lt; n
      i = middle + 1
      middle = i + j / 2
    else
      j = middle - 1
      middle = i + j / 2
    end
  end
  false
end 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all for today, it might be a lot to take in so take your time to try and understand. &lt;a href="https://www.bigocheatsheet.com/"&gt;Here's&lt;/a&gt; a cheat sheet that might be of great help.&lt;br&gt;
Till next time, Happy coding ✌!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>datastructures</category>
      <category>algorithms</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Hosting your sinatra backend(API) with heroku</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Sun, 03 Jul 2022 21:10:43 +0000</pubDate>
      <link>https://dev.to/ckawara/hosting-your-sinatra-backendapi-with-heroku-3j32</link>
      <guid>https://dev.to/ckawara/hosting-your-sinatra-backendapi-with-heroku-3j32</guid>
      <description>&lt;p&gt;I was recently tasked with a full-stack project that incorporated the use of a react front end and ruby backend. The backend would use Sinatra and active records for migrations, database handling, and endpoint creation. Then host it to get the API to be consumed by our react front-end. The most challenging part of this project was hosting the API and that is what I will talk about today.&lt;br&gt;
&lt;a href="https://github.com/CKawara/Little-lavender-log-backend"&gt;Here's&lt;/a&gt; the repository to this project&lt;/p&gt;

&lt;p&gt;Assuming that you have your project set up,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Heroku Account&lt;/strong&gt;&lt;br&gt;
This is a pretty straightforward process, and can be done &lt;a href="https://signup.heroku.com/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a new app&lt;/strong&gt;&lt;br&gt;
 Once the account is set up, proceed to create a new Heroku app. You can do this in many ways, but the easiest is using the GUI. Give the app the name you'd want your API to be called.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect your project to Heroku&lt;/strong&gt;&lt;br&gt;
There are various ways to do this, as you can find &lt;a href="https://blog.heroku.com/six-strategies-deploy-to-heroku"&gt;here&lt;/a&gt;, but for this example, we will use the CLI, for simplicity.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Heroku CLI with &lt;code&gt;npm install -g heroku&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Log in to your Heroku account &lt;code&gt;heroku login
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; clone your project's source code to your local machine
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku git:clone -a your-project 
cd your-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Make some changes to the code you just cloned and deploy them to Heroku using Git.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -am "make it better"
git push heroku master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Configure database&lt;/strong&gt;&lt;br&gt;
In your database.yml file, set the adapter to the sql language of your choice. Postgres, sqlite3,MySQL or oracle. note that using sqlite3 will be problematic if you want to use this API in production.&lt;br&gt;
I would suggest using Postgres&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add Postgres gem to your gem file&lt;/strong&gt;&lt;br&gt;
Add this using &lt;code&gt;gem 'pg'&lt;/code&gt; so it will be included when installing the gems&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add procfile&lt;/strong&gt;&lt;br&gt;
In your file set up, add a file called &lt;strong&gt;&lt;em&gt;Procfile&lt;/em&gt;&lt;/strong&gt; this is in charge of running the entry points in any Heroku web app. In our case, the config.ru&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add command to profile&lt;/strong&gt;&lt;br&gt;
Add this to your profile so that when you push your work to production, it can be executed first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: bundle exec rackup config.ru -p $PORT
release: bundle exec rake db:migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the first line will run our config.ru&lt;br&gt;
the second line will run to run migrations and execute the schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add a Postgres extension on Heroku&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On your Heroku account,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to resources&lt;/li&gt;
&lt;li&gt;Search Postgres, and pick the first suggestion (Heroku Postgres)&lt;/li&gt;
&lt;li&gt;Add extension and submit the order form
This extension will be managing your database in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And we're done, once all this is set up, push your code to Heroku, check your logs and test out your API.&lt;/p&gt;

&lt;p&gt;Till next time, Happy coding ✌&lt;/p&gt;

</description>
      <category>heroku</category>
      <category>ruby</category>
      <category>sinatra</category>
      <category>api</category>
    </item>
    <item>
      <title>Data Structures 101: Introduction to Data Structures and Algorithms.</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Sun, 19 Jun 2022 20:58:12 +0000</pubDate>
      <link>https://dev.to/ckawara/data-structures-101-introduction-to-data-structures-and-algorithms-3njf</link>
      <guid>https://dev.to/ckawara/data-structures-101-introduction-to-data-structures-and-algorithms-3njf</guid>
      <description>&lt;p&gt;&lt;strong&gt;A data structure&lt;/strong&gt; is a particular way of organizing data in a computer so that it can be used effectively.As developers, we must have good knowledge about data structures as it is a key topic when it comes to Software Engineering interview questions.&lt;br&gt;
The most commonly used data structures include;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Linked lists&lt;/li&gt;
&lt;li&gt;Stack&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Algorithms
&lt;/h2&gt;

&lt;p&gt;An Algorithm is a step-by-step procedure, which defines a set of instructions to be executed in a certain order to get the desired output. They are normally independent of any programming language, as they can be implemented in more than one programming language.&lt;/p&gt;
&lt;h3&gt;
  
  
  Characteristics of a good algorithm
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Input − should have 0 or more well-defined inputs.&lt;/li&gt;
&lt;li&gt;Output −should have 1 or more well-defined outputs, and should match the desired output.&lt;/li&gt;
&lt;li&gt;Finiteness − they must terminate after a finite number of steps.&lt;/li&gt;
&lt;li&gt;Feasibility − Should be feasible with the available resources.&lt;/li&gt;
&lt;li&gt;Independent − should be independent of any programming code.&lt;/li&gt;
&lt;li&gt;Unambiguous − Each of its steps, and their inputs/outputs should be clear and must lead to only one meaning.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Example of an algorithm
&lt;/h3&gt;

&lt;p&gt;Algorithms are mostly writen in a step by step manner. For example, an algorithm to ad two numbers would look something like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step 1: Start
Step 2: Declare variables num1, num2 and sum.
Step 3: Read values for num1 and num2.
Step 4: Add num1 and num2 and assign the result to sum.
sum=num1+num2
Step 5: Display sum
Step 6: Stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the basic introduction to algorithms, of course this is a much deeper topic which we will continue to explore. Till next time, happy coding✌!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Crypto React App;Material UI, Firebase and Vercel</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Fri, 27 May 2022 14:56:18 +0000</pubDate>
      <link>https://dev.to/ckawara/crypto-react-appmaterial-ui-firebase-and-vercel-1fka</link>
      <guid>https://dev.to/ckawara/crypto-react-appmaterial-ui-firebase-and-vercel-1fka</guid>
      <description>&lt;p&gt;This week I was tasked with building a react site from scratch, and implement a Firebase authentication. I came up with the project idea which was, &lt;em&gt;A site where users can access both the news and information about various cryptocurrencies.&lt;/em&gt; This was my first &lt;em&gt;big-ish&lt;/em&gt; react app.&lt;br&gt;
The live site can be found &lt;a href="https://coin-watch-app.vercel.app/"&gt;here&lt;/a&gt; , the design &lt;a href="https://www.figma.com/file/uixKCtl6niypOAnO7I8g70/Crypto-watch-react-app?node-id=8%3A101"&gt;here&lt;/a&gt; and the repository on &lt;a href="https://github.com/CKawara/Coin-watch"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The MVPs for the site were;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A home page with a list of the coins.&lt;/li&gt;
&lt;li&gt;A filter for the currency they want to use for the coin price (USD / EUR)&lt;/li&gt;
&lt;li&gt;A news page&lt;/li&gt;
&lt;li&gt;Coin details page&lt;/li&gt;
&lt;li&gt;Time filter for the graph in the detail section&lt;/li&gt;
&lt;li&gt;Log in to coin to favorites &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article, I will talk about my experience with the various technologies I used. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://reactjs.org/"&gt;React-js&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;React is a JavaScript library for building user interfaces.&lt;br&gt;
To create a react app you run &lt;code&gt;npx create-react-app my-app&lt;br&gt;
&lt;/code&gt; on your terminal and it will create a project for you with some starter code.&lt;br&gt;
I worked with various hooks like &lt;em&gt;useState()&lt;/em&gt; to handle various states  and &lt;br&gt;
 &lt;em&gt;useEffect()&lt;/em&gt; to handle fetching data from APIs I also used context API to handle props.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://mui.com/"&gt;Material UI&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I used &lt;em&gt;MUI&lt;/em&gt; for styling. It provides a simple, customizable, and accessible library of React components.&lt;br&gt;
To install &lt;em&gt;Mui&lt;/em&gt;, run &lt;code&gt;npm i @mui/core&lt;/code&gt; on your terminal.&lt;br&gt;
Now, with react 18, you might encounter an error, upon which you will run &lt;code&gt;npm i @mui/core --force&lt;/code&gt;  Because React 18 was just launched some libraries can't find a way to fit in properly.&lt;br&gt;
It was my first time interacting with Mui, so it was a bit challenging, but with tutorials and documentation, I was able to achieve my set goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://firebase.google.com/"&gt;Firebase&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I used Firebase for authentication and to store users' favorite coins.&lt;br&gt;
This was such a challenging feature for me to implement as it was a feature I had not planned for.&lt;br&gt;
I was able to attain the set goals through various tutorials on you tube and articles.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I used Vercel for deployment. I had issues deploying my site as my git files some how got corrupted while pushing some code to GitHub.&lt;br&gt;
I had planned on using netlify as I have interacted with it before, but it could not deploy my work from GitHub, or manually. That is when I discovered Vercel, it is very easy to use, it doesn't need any build command and if it encounters a problem while deploying, it will give you a solution suggestion. All you need to do is connect it to your GitHub account.&lt;/p&gt;

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

&lt;p&gt;React is a very interesting framework. I enjoyed working on this project and I'm looking forward to working on more React projects.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>vercel</category>
      <category>firebase</category>
    </item>
    <item>
      <title>My experience building a cryptocurrency news site - CryptoHut</title>
      <dc:creator>Catherine Kawara</dc:creator>
      <pubDate>Sun, 24 Apr 2022 15:30:31 +0000</pubDate>
      <link>https://dev.to/ckawara/my-experience-building-a-cryptocurrency-news-site-cryptohut-43co</link>
      <guid>https://dev.to/ckawara/my-experience-building-a-cryptocurrency-news-site-cryptohut-43co</guid>
      <description>&lt;p&gt;My project this week at &lt;a href="https://moringaschool.com/"&gt;Moringa School&lt;/a&gt; was to build a Single Page Application using HTML and CSS for the frontend and JavaScript to communicate with a public API of our choice. The learning goals of this assignment were;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design and architect features across a frontend&lt;/li&gt;
&lt;li&gt;communicate and collaborate in a technical environment&lt;/li&gt;
&lt;li&gt;Integrate JavaScript and an external API&lt;/li&gt;
&lt;li&gt;build and iterate on a project MVP&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Development Process
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Research&lt;/strong&gt;&lt;br&gt;
Since we had to come up with our own project ideas, I had to brainstorm for an existing problem in the society that could be solved. During this stage I also have to to consider a couple of factors like the kind of API I was going to use for the project.&lt;br&gt;
Eventually I came up with a problem statement and settled on a Crypto-News website.&lt;br&gt;
I decided I was going to use the &lt;a href="https://cryptonews-api.com/"&gt;Crypto-news API&lt;/a&gt; for my project, only to find out I needed to give my credit card information for me to use the API, so a few days to my presentation I had to change that to &lt;a href="https://rapidapi.com/"&gt;The Rapid API&lt;/a&gt; for the news data and &lt;a href="https://developers.coinranking.com/api/documentation"&gt;CoinRanking API&lt;/a&gt; for the real-time Crypto prices of the top coins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UI Design and Building&lt;/strong&gt;&lt;br&gt;
I outlined the features of my MVP , so I could design around it and the user Journey. The MVP included;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A landing page&lt;/li&gt;
&lt;li&gt;Display of the top currencies section&lt;/li&gt;
&lt;li&gt;Display of the top  and general stories&lt;/li&gt;
&lt;li&gt;A feature for the users to star their favorite coin&lt;/li&gt;
&lt;li&gt;A contact section&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now normally, I would do a hi-fi design before I start the actual coding, but this time, the low fidelity design was enough to get me started.&lt;br&gt;
I wanted to get the logic right first, then focus on the UI details. Honestly, looking back, I don't think that's the best approach. At least for me its not. I drew some of my UI inspirations from &lt;a href="https://cointelegraph.com/"&gt;Cointelegraph&lt;/a&gt; seeing as it is a crypto-news website, and &lt;a href="https://dribbble.com/"&gt;Dribble&lt;/a&gt; - a very useful site to share and also get design inspiration. &lt;/p&gt;

&lt;p&gt;So I start coding and interacting with the APIs, and I can confidently say it was not a walk in the park. Although some of the blockers could have been avoided if i did some more research on the APIs, this was definitely a challenging yet interesting task.&lt;br&gt;
I learnt so much from this assignment, I feel like I grew ad a developer and generally as person.&lt;br&gt;
The most important all-round lessons I learnt were;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do a lot of research on a product you intend to use.&lt;/li&gt;
&lt;li&gt;Be patient with yourself especially when learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing and Deployment&lt;/strong&gt;&lt;br&gt;
This stage was not very difficult, as I was using GitHub's gh-pages to host my site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
I really enjoyed working on this project, and I learnt a lot of things I wouldn't have by just reading. &lt;br&gt;
Practice is always the best way to understand a new concept and what better way to grow as a developer than take up new project often.&lt;/p&gt;

&lt;p&gt;You can interact more with this project on &lt;a href="https://github.com/CKawara/Cryptohut"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>cryptocurrency</category>
      <category>api</category>
    </item>
  </channel>
</rss>
