<?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>Forem: Ken Hudak</title>
    <description>The latest articles on Forem by Ken Hudak (@kenhudak519).</description>
    <link>https://forem.com/kenhudak519</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%2F231585%2F745fe103-9543-4b8e-946b-696fc984a1a5.jpg</url>
      <title>Forem: Ken Hudak</title>
      <link>https://forem.com/kenhudak519</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kenhudak519"/>
    <language>en</language>
    <item>
      <title>Using Python &amp; Alteryx to Find Social Network Influencers in Your Neighborhood (Part I)</title>
      <dc:creator>Ken Hudak</dc:creator>
      <pubDate>Thu, 30 Jul 2020 12:33:47 +0000</pubDate>
      <link>https://forem.com/kenhudak519/using-python-alteryx-to-find-social-network-influencers-in-your-neighborhood-part-i-3bmj</link>
      <guid>https://forem.com/kenhudak519/using-python-alteryx-to-find-social-network-influencers-in-your-neighborhood-part-i-3bmj</guid>
      <description>&lt;p&gt;After arriving in Canada (as a permanent resident, woot!) in 2018, the relevancy of many of the Twitter accounts I followed for current events in my old neighborhood kinda diminished. So I decided to set out and make a &lt;em&gt;new list&lt;/em&gt; of influential users in my new neighborhood.&lt;/p&gt;

&lt;p&gt;I bet there are easier ways to do this, but assuming I'd be biased and crazily start following all the local techorati and anyone mentioning Formula 1, I really needed a neutral tech solution. So a combo of Python and the &lt;a href="http://docs.tweepy.org/en/latest/index.html" rel="noopener noreferrer"&gt;Tweepy API&lt;/a&gt; would be a great impartial arbiter to nominate some influential local users by: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrangling a batch of tweets from the past couple of weeks from the Windsor area with Python, and &lt;/li&gt;
&lt;li&gt;Use Alteryx to automate a workflow that scores and ranks local users based on # of favorites and retweets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First I needed to look at tools available to locate tweeters by geographic location. Twitter has an amazing method to add latitude and longitude to a post. It would be super easy then to just make a geobounded box and grab all the tweets that came from within a box/city that I was interested in. BUT the specific geotagging thing got creepy and &lt;a href="https://arxiv.org/ftp/arxiv/papers/1403/1403.2345.pdf" rel="noopener noreferrer"&gt;trackable&lt;/a&gt; and Twitter ultimately disabled it by default in &lt;a href="https://developer.twitter.com/en/developer-terms/geo-guidelines" rel="noopener noreferrer"&gt;2014&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The feature is still there but now users need to opt-in and enable location. Only a few do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F78ag3h7krhgncn6fb3ss.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F78ag3h7krhgncn6fb3ss.jpg" alt="Image of an outline of a cat around countries on a map"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finding users via hashtag (such as a nickname like #RoseCity or aiport code #YQG) is effective, but not very inclusive. So, that leaves the Twitter API &lt;strong&gt;place object&lt;/strong&gt; and the &lt;strong&gt;ID field&lt;/strong&gt; as a decent method to narrow down a users location. And please note that Twitter docs refer to place_id as "a place &lt;em&gt;associated&lt;/em&gt; with the user account." Close enough. &lt;/p&gt;

&lt;p&gt;I've been getting the place_id using Twitter advanced search and finding someone who has geocoding enabled, and then clicking on their City/Province to get this style of string: &lt;a href="https://twitter.com/places/15b0a643e7bd22c7" rel="noopener noreferrer"&gt;https://twitter.com/places/15b0a643e7bd22c7&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Look for this:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmx60z0jy9funwsucroec.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmx60z0jy9funwsucroec.jpg" alt="A screen shot of a tweet showing the city and state listed."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a better way to do this, if you know of it please share in the comments! (or if you know an alternative to Yahoo!'s now defunct Where On Earth ID (WOEID) API.)&lt;/p&gt;

&lt;p&gt;Ok. I've got the place_id alphanumeric string that I want to search with, so now it's time for the Python.&lt;/p&gt;

&lt;p&gt;But first! Just in case you are reading this from the far distant future or using an virtual environment with who-knows-what-versions of installed Python libraries, I'll share what I am using right now in the year 2020 when this all worked.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Spider IDE 3.3.6&lt;br&gt;
Python 3.7.5&lt;br&gt;
Tweepy 3.8.0&lt;br&gt;
Twitter API 1.1 - watch for the new (now delayed) version in 2020!&lt;br&gt;
Pandas 0.25.3&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, you'll need &lt;a href="https://developer.twitter.com/en/application/use-case" rel="noopener noreferrer"&gt;Twitter developer keys&lt;/a&gt; if you don't already have them. This can take a couple of days.&lt;/p&gt;

&lt;p&gt;Next, let's load the two simple libraries we'll need, tweepy for the API and pandas for the dataframes and exporting.&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;# Import Tweepy and Pandas Libraries.
# Install first if necessary.
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tweepy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;tw&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, authenticate with Oath using your new keys.&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;# Use your own Twitter.com Developer Keys inside the double-quotes
&lt;/span&gt;&lt;span class="n"&gt;consumer_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tk9....&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;consumer_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AOH...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;access_token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;550...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;access_token_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;y0l...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we'll let Tweepy pass the variables above into the statements below, and then form the string for the search API.&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;# Authenticate with Twitter - nothing to change here since it uses the variables above
&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OAuthHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;consumer_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;consumer_secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_access_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;access_token_secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;API&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wait_on_rate_limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;wait_on_rate_limit_notify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="c1"&gt;# Declare what you want search_words to look for. Here I'm using Twitter's PlaceID for Windsor
&lt;/span&gt;&lt;span class="n"&gt;search_variable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;place:15b0a643e7bd22c7 since:2019-06-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The free standard search API can go back 7 days, so obviously the 2019-06-01 date I requested didn't mean anything in the end. I don't really know cursor methods so I just ran this script at 7 days intervals as a workaround. But the important part is inserting the place_id you found for the target location, the language, and how many items to return.&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;# Uncomment filter:retweets to filter out ReTweets. I am interested in RT's so will comment out
&lt;/span&gt;&lt;span class="n"&gt;twitter_search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;search_variable&lt;/span&gt; &lt;span class="c1"&gt;#+ " -filter:retweets"
&lt;/span&gt;
&lt;span class="c1"&gt;# Collect tweets in tweets variable. Will attempt to collect no more than 5000 rows.
&lt;/span&gt;&lt;span class="n"&gt;tweets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Cursor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;twitter_search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="n"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,).&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This next loop will go through the tweets that meet the place_id criteria, create a list of a list, and include the specified fields such as user id, date tweet was sent, if the user was verified or not, etc, and store all that info in variable &lt;em&gt;tweet_data&lt;/em&gt;.&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;# Iterate and print the information you are looking for in each collected tweet
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tweets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;tweet_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;place&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;retweet_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;favorite_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;coordinates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;screen_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;statuses_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;followers_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verified&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tweet&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tweets&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We loaded Pandas for a reason earlier, and now I'm going to set up a dataframe into columns and give them nicer names.&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;# Put the collected data tweet_text into Pandas DF for writing to table
&lt;/span&gt;&lt;span class="n"&gt;tweet_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tweet_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                          &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Place&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RetweetCount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;# Faves Count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Coordinates&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Join Date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;location&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Tweets&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;followers&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;verified&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tweeteddate&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And lastly, use Pandas to export the tweet_text variable straight to Excel. Here you can name the Excel file AND the worksheet. Note, if you run this several times to get around the 7 day limit, be sure to change the name so you don't overwrite the historical data (learn from my mistakes!).&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;# This is a nifty Pandas tool to write out to an Excel file with a custom sheet name
&lt;/span&gt;&lt;span class="n"&gt;tweet_text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_excel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WindsorTwitter1_2020-07-29.xlsx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sheet_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WindsorTwitter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This first column in the dataframe, Place, returns this geographic info:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Place(_api=, id='15b0a643e7bd22c7', url='&lt;a href="https://api.twitter.com/1.1/geo/id/15b0a643e7bd22c7.json" rel="noopener noreferrer"&gt;https://api.twitter.com/1.1/geo/id/15b0a643e7bd22c7.json&lt;/a&gt;', place_type='city', name='Windsor', full_name='Windsor, Ontario', country_code='CA', country='Canada', contained_within=[], bounding_box=BoundingBox(_api=, type='Polygon', coordinates=[[[-83.113623, 42.2339053], [-82.890548, 42.2339053], [-82.890548, 42.356225], [-83.113623, 42.356225]]]), attributes={})&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that's it. The complete code is on &lt;a href="https://github.com/kenhudak/LocalTwitterPython" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. &lt;br&gt;
In the second part of this series I'll go through what I found in my Excel file and how it was cleaned up with Alteryx.&lt;/p&gt;

</description>
      <category>python</category>
      <category>alteryx</category>
      <category>tweepy</category>
      <category>twitter</category>
    </item>
    <item>
      <title>Intro to SQL for Election Results Analysis</title>
      <dc:creator>Ken Hudak</dc:creator>
      <pubDate>Tue, 19 May 2020 00:41:58 +0000</pubDate>
      <link>https://forem.com/kenhudak519/intro-to-sql-for-election-results-analysis-56pc</link>
      <guid>https://forem.com/kenhudak519/intro-to-sql-for-election-results-analysis-56pc</guid>
      <description>&lt;p&gt;This short tutorial will use SQL to perform an analysis to determine the winner of the 2018 Mayoral race in Windsor, Ontario. After all the debates and campaigning the votes have been cast and now it's time to count them up.&lt;/p&gt;

&lt;p&gt;I started off by importing the 2018 Election CSV flat file from the &lt;a href="https://opendata.citywindsor.ca/opendata/details/228"&gt;City of Windsor's Open Data Catalogue&lt;/a&gt; into Microsoft SQL Server, and used SQL Server syntax to go through the steps here in this article. &lt;/p&gt;

&lt;p&gt;It's a good idea to start off by conducting some initial data reconnaissance, formally known as exploratory data analysis (EDA), to see what we're dealing with. The table of election information, we'll call it Election2018, consists of 3057 rows made up of the following six columns of data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ward&lt;/strong&gt; - a unique ID for a geographic area in the city&lt;br&gt;
&lt;strong&gt;Poll&lt;/strong&gt; - the voting location ID within a Ward&lt;br&gt;
&lt;strong&gt;Poll_Name&lt;/strong&gt; - name of the voting location&lt;br&gt;
&lt;strong&gt;Contest_Title&lt;/strong&gt; - title of the office the candidate is seeking&lt;br&gt;
&lt;strong&gt;Candidate_Name&lt;/strong&gt; - name of the individual candidates&lt;br&gt;
&lt;strong&gt;Total_Votes&lt;/strong&gt; - how many votes each candidate received at each poll&lt;/p&gt;

&lt;p&gt;Part 1: What does the Election2018 table look like using Microsoft SQL Server?&lt;/p&gt;

&lt;p&gt;We can use SQL to display a table of information that looks a lot like the familiar format we've grown to love/hate in Excel -- which is all about columns and rows. I'll need to use two key components of SQL to get started: the SELECT statement and the FROM command. &lt;strong&gt;With SELECT we'll be telling the database what columns we would like to work with.&lt;/strong&gt; SELECT is pretty much mandatory, hence it's what we start almost every basic query with.&lt;/p&gt;

&lt;p&gt;Using the SELECT command, I could ask the database to show me all of the columns by typing each of their individual names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;Ward&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Poll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Poll_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Total_Votes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;And I also need to specify the table in which these columns are located. In this example since we're using the Election2018 table, we'll refer to it as that name using the FROM command.&lt;/strong&gt; End the query with a semicolon. (Not every SQL platform requires the semicolon, but many do, so just make it standard practice to use it.)&lt;/p&gt;

&lt;p&gt;So the complete query to look at all the columns and rows from table Election2018 would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;Ward&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Poll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Poll_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Total_Votes&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Election2018&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;While typing in all of the column names may sound like fun, SQL gives us a break from that with the asterisk (*). Using SELECT * means essentially the same thing as HEY, SELECT ALL THE COLUMNS. Much easier for our data analysis phase and it'll save some time. &lt;/p&gt;

&lt;p&gt;The revised query looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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="n"&gt;Election2018&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And here is a small extract of the returned data that we get from the query: &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ward&lt;/th&gt;
&lt;th&gt;Poll&lt;/th&gt;
&lt;th&gt;Poll_Name&lt;/th&gt;
&lt;th&gt;Contest_Title&lt;/th&gt;
&lt;th&gt;Candidate_Name&lt;/th&gt;
&lt;th&gt;Total_Votes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;7-8 Forest Glade Arena&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;Drew DILKENS&lt;/td&gt;
&lt;td&gt;468&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;7-8 Forest Glade Arena&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;Ernie LAMONT&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;7-8 Forest Glade Arena&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;Franz (Frank) DYCK&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;7-8 Forest Glade Arena&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;Matt MARCHAND&lt;/td&gt;
&lt;td&gt;195&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;7-8 Forest Glade Arena&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;Tom HENSEL&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1-5 Roseland Golf and Curling Club&lt;/td&gt;
&lt;td&gt;COUNCILLOR WARD 1&lt;/td&gt;
&lt;td&gt;Darcie RENAUD&lt;/td&gt;
&lt;td&gt;380&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1-5 Roseland Golf and Curling Club&lt;/td&gt;
&lt;td&gt;COUNCILLOR WARD 1&lt;/td&gt;
&lt;td&gt;Fred FRANCIS&lt;/td&gt;
&lt;td&gt;438&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1-5 Roseland Golf and Curling Club&lt;/td&gt;
&lt;td&gt;COUNCILLOR WARD 1&lt;/td&gt;
&lt;td&gt;Krysta GLOVASKY-RIDSDALE&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Are the results as you expected? Kinda. We see Wards and Total Votes and Candidate Names, but it turns out the CSV file Election2018 also contains many more ballot races such as Ward Councillors and Trustees. They sure are important races but we're not concerned with those right now. So let's get rid of them.&lt;/p&gt;

&lt;p&gt;Part 2: How do we show just the Mayoral race?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The WHERE clause in SQL works like a filter.&lt;/strong&gt; We can use it to return only records that we're interested in. In this case it'll be the column Contest_Title and within that column we'd like to only see records returned that are part of the MAYOR contest.&lt;/p&gt;

&lt;p&gt;Tack the WHERE clause to the query (always after the FROM statement) and we get a query that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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="n"&gt;Election2018&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'MAYOR'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Mayor is in single quotes because it's value is a text string and the quotes communicate that to SQL, otherwise the field could be interpreted as a column, which will produce a "Invalid Column Name" error. &lt;/p&gt;

&lt;p&gt;Part 3: Which Mayoral Candidate Won the Most Votes?&lt;/p&gt;

&lt;p&gt;Just a couple of more lines of code and we'll know who became the next Mayor way back in 2018! Let's create a tidy table with only specific columns and vote totals from all the polling locations in order to publish the final results.  &lt;/p&gt;

&lt;p&gt;Start with SELECT. Use the Candidate_Name, Contest_Title, and Total_Votes columns. Name and title are easy, just type those two in separated by commas. &lt;/p&gt;

&lt;p&gt;For calculating the total votes we'll need to also include the SUM() function in the SELECT statement. Inside the parenthesis of the function we'll need to enter the name of the numerical field to be summed -- in this case it will be Total_Votes. We'll be asking SQL to look at each polling location and sum up how many votes each candidate received.&lt;/p&gt;

&lt;p&gt;Utilizing SUM(Total_Votes) in the SELECT statement is how to approach this. The query will add up all the votes from each Ward and return them in a column named something like 'Column3.' We can customize the name of this new column by using an alias. To give a field an alias just type "as" (no quotes) and then the new column name of your choosing. It'll look like this: SUM(Total_Votes) as TotalMayoralVotes. &lt;/p&gt;

&lt;p&gt;Oh, and don't forget that FROM Election2018 command!!&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&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="n"&gt;Total_Votes&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;TotalMayoralVotes&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Election2018&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next we add the WHERE filter described above to get Mayoral candidates only, and below that enter in a GROUP BY statement. &lt;strong&gt;GROUP BY will lump together all the votes for individual polling stations for each Mayoral candidate and list the total number of votes in the results next to their name.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&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="n"&gt;Total_Votes&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;TotalMayoralVotes&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Election2018&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Mayor'&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;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Lastly, I want to see the results in order from who had the most votes in the city to who had the least. Here we'll be using ORDER BY as the last line in the query. SQL returns ORDER BY values in ascending (lowest to highest) order by default, so I'll specify that the TotalMayoralVotes is descending by using DESC in the query (yes, you can ORDER BY on an alias). The final SQL code get stitched together just like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&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="n"&gt;Total_Votes&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;TotalMayoralVotes&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Election2018&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Mayor'&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;Candidate_Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Contest_Title&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;TotalMayoralVotes&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And the results are in! &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Candidate_Name&lt;/th&gt;
&lt;th&gt;Contest_Title&lt;/th&gt;
&lt;th&gt;TotalMayoralVotes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Drew DILKENS&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;31201&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matt MARCHAND&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;18626&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ernie LAMONT&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;1121&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tom HENSEL&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;797&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Franz (Frank) DYCK&lt;/td&gt;
&lt;td&gt;MAYOR&lt;/td&gt;
&lt;td&gt;785&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Drew Dilkens was re-elected as Windsor's Mayor in 2018 by a 12,500 vote margin over the second place candidate Matt Marchand. &lt;strong&gt;Thanks SQL!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>analytics</category>
      <category>beginners</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Some GDG Windsor-Essex DevFest Takeaways</title>
      <dc:creator>Ken Hudak</dc:creator>
      <pubDate>Thu, 10 Oct 2019 01:06:04 +0000</pubDate>
      <link>https://forem.com/kenhudak519/some-gdg-windsor-essex-devfest-takeaways-3hpo</link>
      <guid>https://forem.com/kenhudak519/some-gdg-windsor-essex-devfest-takeaways-3hpo</guid>
      <description>&lt;h2&gt;
  
  
  Yes, there is a Tech Scene in Windsor, Ontario. More on that below the fold.
&lt;/h2&gt;

&lt;p&gt;On October 5th, 2019 over 250 attendees, speakers, and organizers came together for the 3rd &lt;a href="https://wedevfest.com/" rel="noopener noreferrer"&gt;Windsor Essex DevFest&lt;/a&gt; on the campus of the University of Windsor.&lt;/p&gt;

&lt;p&gt;Windsor, with a population of 234 thousand, sits just south of Detroit. So it's fair to to assume that the city has has been indoctrinated into the auto culture of the region. But like most manufacturing hubs that grew up on the hum of assembly lines and a community rhythm that revolved around three shifts, there is now a noticeable transformation towards a growing tech sector and knowledge economy as well.&lt;/p&gt;

&lt;p&gt;Ok, you get the gist, onto the sessions-- &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0o6av4i25cjzhcqmbh1b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0o6av4i25cjzhcqmbh1b.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The event got off to a great start with a keynote presentation from Amir Feizpour of &lt;a href="https://twitter.com/amirfzpr" rel="noopener noreferrer"&gt;aggregate intellect&lt;/a&gt; who spoke about recognizing that language is limited and imprecise and we should all be working to improve communication as a whole. How? Try to strive to put in some interpretive labor and streamline your message! This will reduce the burden on the listener to improve understanding (same theory applies to your code!).&lt;/p&gt;

&lt;p&gt;On to the next session - Practical Machine Learning with &lt;a href="https://twitter.com/karthikkuber" rel="noopener noreferrer"&gt;Karthik Kuber&lt;/a&gt;. Karthik emphasized that 'learning to learn' while on the job is an essential part of becoming a better data scientist. And why is that? Because lots of assumptions in school projects do not actually work in real-world projects. (Personally, I'd paraphrase that to mean that the 'everything-is-fine-wonderful-Utopian-world-inside-of-DataCamp concept seems to fade into the distance once you get those first real-world data sets.)&lt;/p&gt;

&lt;p&gt;Kuber recommends Data Analysts focus on these skill sets to address typical business problems:&lt;br&gt;
▶ Working with various disparate data sources&lt;br&gt;
▶ Working with large scale data&lt;br&gt;
▶ Dealing with streaming and ever-increasing and changing data&lt;br&gt;
▶ Working with incomplete and messy datasets&lt;br&gt;
▶ Building models that can run in real-time and at scale&lt;/p&gt;

&lt;p&gt;You know that saying “If you are the smartest person in the room, then you are in the wrong room?" Well, I was in the RIGHT room for a talk by Arafat Khan who ported a version of Tensorflow on Ruby. Brilliant and passionate, Khan was engaging and excited by the how well the community adopted his project. &lt;/p&gt;

&lt;p&gt;My takeaway from him was the following: "You have to have something visible to make a point."&lt;/p&gt;

&lt;p&gt;The rest was all above my paygrade, so take 4 minutes and read up on his &lt;a href="https://medium.com/@Arafat./introducing-tensorflow-ruby-api-e77a477ff16e" rel="noopener noreferrer"&gt;Medium Post&lt;/a&gt; if the slide below speaks your language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fme0e4zl3surdmbtaenxc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fme0e4zl3surdmbtaenxc.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That brings us to lunch! Popped in line for a quick burger and hopped outside for some sunshine, which was still a welcomed sight for early October in Southern Ontario.&lt;/p&gt;

&lt;p&gt;Now, I promised earlier we'd discuss Windsor's tech scene. And I didn't forget. This was a session I was really looking forward to. Hosted by Yvonne Pilon, the President and CEO of &lt;a href="https://www.wetech-alliance.com/our-team/" rel="noopener noreferrer"&gt;WEtech Alliance&lt;/a&gt;, her talk shed a lot of light on what the 3,500 workers who make up core tech talent in Windsor are up to.&lt;/p&gt;

&lt;p&gt;WEtech engages with the technology and business sectors to illuminate tech efforts in the region and is a major hub for connecting the tech community to each other, the media, and academia. Be sure to check out &lt;a href="https://www.wetech-alliance.com/connect/" rel="noopener noreferrer"&gt;Tech Connect&lt;/a&gt; as it is a one of kind resource for local jobs, initiatives, programs and events.&lt;/p&gt;

&lt;p&gt;Lastly - Entrepreneurship! What if you wanted to take your coding and analysis skillset and go into business for yourself? Frank Abbruzzese, President of &lt;a href="https://www.alphakor.com/" rel="noopener noreferrer"&gt;AlphaKOR Group&lt;/a&gt;, had some great tips for making that leap. Here we go:&lt;/p&gt;

&lt;p&gt;▶ Get out of your comfort zone&lt;br&gt;
▶ Get involved in the local community and events&lt;br&gt;
▶ Plan effectively with goals, time, and outcomes in mind&lt;br&gt;
▶ Manage your time and Eat the Frog First, i.e., do the thing you don't want to do, first thing!&lt;br&gt;
▶ And, this is a big one, no one should ever have to come to you to ask for an update. Be proactive! Keep your employees and customers up to date on everything.&lt;/p&gt;

&lt;p&gt;Well that about wraps it up. I'm only one person and couldn't attend the other 20 or so sessions, but head over to &lt;a href="https://wedevfest.com/slides" rel="noopener noreferrer"&gt;GDG Windsor DevFest&lt;/a&gt; to check out the posted slide decks and other info about the event.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>datascience</category>
      <category>conference</category>
    </item>
  </channel>
</rss>
