Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!

Dev Space

Customize and extend the power of Alteryx with SDKs, APIs, custom tools, and more.
SOLVED

Python Tool Challenge | BUILD a Python tool and win a prize!

NeilR
Alteryx Alumni (Retired)

Python Tool Challenge

 

With the release of Alteryx Designer 2018.2, the Python SDK has finally shed its Beta flag!

 

 grown_up.png

 

Now it's time to celebrate!


To enter the contest:

  1. Create a Python tool (like Nick did) and package it as a YXI file.
  2. Reply to this thread with a description of your tool. Don't forget to link to or attach your YXI.
  3. Get stars! Threaten, bribe, or maybe just tweet. Whoever gets the most stars by July 31st wins!

You'll have to make a decision: keep working on your tool closer to the deadline to make it as perfect as possible, or submit it early so you have time to socialize your post to get as many stars as possible?


Grand prize hotnessGrand prize hotness

☝️☝️☝️ The winner will receive a custom WASD mechanical keyboard 🌋🌋🌋

👇👇👇 All entrants will be rewarded with the Python Contest badge 🔥🔥🔥

 

Participation trophy (Community badge)Participation trophy (Community badge)

Remember to make sure you've upgraded to 2018.2.

 

Subscribe to this thread or check back here (pythoncontest.alteryx.com) to vote as new tools are submitted!


35 REPLIES 35
Deanna
12 - Quasar
12 - Quasar

I love this tool!  As a fellow Teknion consultant, I have used many of Jonathan's brilliant tools, and this is one where I can see a lot of uses.  For example, I could be waiting for files to populate in a directory, however, they arrive on a random basis, and don't come in on a regular schedule.  I may have a daily process that checks this directory to see if any (or a minimum number of) files have been uploaded, then run the process - with the Terminator tool, I can simply have it check to see if a minimum number of files have been loaded into the directory; if yes, then it kicks off the rest of my process.  Very cool, Jonathan!

 

@Deanna

Deanna
jdunkerley79
ACE Emeritus
ACE Emeritus

Late to play but here's my go - A grouped record id.

 

2018-07-24_14-17-23.png

 

Source code on GitHub: https://github.com/jdunkerley/AlteryxAddIns/tree/master/OmniBus.GroupedRecordID

 

Supports presort XML to group and sort the incoming records. Packaged demo workflow attached as well.

 

Doesn't currently support adding as the first column. Aiming to add this. Additionally, UI is a bit chunky and would rather have a custom widget but haven't had time yet.

MichaelF
Alteryx Alumni (Retired)

Hey guys. I have a very niche, but in my very humble opinion, a super fantastic probably best tool you'll ever encounter. 

 

Introducing.......a Translation Tool! So basically, it'll take strings in a field and translate it to a language of you're choosing. In this introductory version, I have about like 10 languages. Now you may ask, why not just use the API? Well that's because it costs money after a certain amount of requests, plus, this is cooler. Basically, this utilizes a python package, called Selenium, which process clicks in a web browser. This means it's slower than an API, but will get the job done. It has capabilities for a handful of browsers, but this tool utilizes Google Chrome. With the installation of the Tool, it will create a virtual python environment that installs the selenium package as well as the chromedriver.exe found here

 

Translate_Example.PNG

 

There are some features I would consider making with the Tool; the main two would be to have an option for headless and another for time delay between translations. Let me explain - 

1. Going Headless - this basically means hiding the browser that is automatically "clicking" or showing it. Showing is nicer, just because it's cool to see the machine do everything in front of your eyes, but hiding makes the process look nicer? Idk, I'd consider having it as an option (it's currently hidden)

*It can be manually changed at this line by commenting it out

chrome_options.add_argument("--headless")

 

2. Time Delay - Sometimes the Engine processes faster than the browser can "click". So the more this value is increased, it will capture everything and translate appropriately. Currently, I have it set to 0.5 seconds between records, as 0.25 seconds still had issues. But it would be nice to have that option for users to adjust based on how fast they want the workflow to run, since it's inherently slow. Again, considering....

** It can be manually changed by changing the value here (in seconds)

time.sleep(.5)

 

Anyway, the point was to at least have this out there. Plus with the Selenium package, you can automate filling in forms on a certain webpage if you have the data. However, I just like languages and translations, hence this tool! 

 

As always, suggestions and comments are welcome :)

 

Note*** I hope you all like my image, I was scared of copyright issues, and I put a lot of sweat, blood, and tears into making this in paint.

jwalder
10 - Fireball

@Nick612Haylund Not exactly what you requested, but...with this version when meeting the criteria it now write to the output "Info: Terminator (1): Record count minumum met. Processing gate opened.", and if the minimum is not met, once all records are received it will write to the output "Info: Terminator (1): Record count insufficient for processing. I'll be back."

Nick612Haylund
10 - Fireball
10 - Fireball
Hahaha love it @jwalder !!!!
Deanna
12 - Quasar
12 - Quasar

Awesome, @jwalder!

Deanna
NeilR
Alteryx Alumni (Retired)

Congratulations to Nick - his Glassdoor Company Scraper won the most votes! Full results...

 

Name Tool Description Stars
@Nick612Haylund

Glassdoor Company Scraper

GO TO POST | DOWNLOAD

Scrape reviews and interviews from Glassdoor.com 44
@jwalder

Terminator

GO TO POST | DOWNLOAD

Prevent a process from executing until a minimum amount of input records are present 29
@tlarsen7572

Regex Extract

GO TO POST | DOWNLOAD

Think of it like the Regex Parse tool, but instead of parsing into columns, each match parses into a new record 12
@Nate1

VADER Sentiment

GO TO POST | DOWNLOAD

Score a text field into positive, negative, and neutral scores from the words and phrase in it 10
@tlarsen7572

Field Sorter

GO TO POST | DOWNLOAD

Re-order your fields in various ways 10
@elatt

DataRobot Tools

GO TO POST | DOWNLOAD

Upload data to the DataRobot machine learning platform and score data using models generated by DataRobot 9
@jdunkerley79

Omnibus Grouped Record ID

GO TO POST | DOWNLOAD

Record ID with grouping 7

 

We also had several Alteryx associates get in on the share-fest...

 

Name Tool Description
@SophiaF

Mimesis Data Generator

GO TO POST | DOWNLOAD

Generate dummy data for testing purposes
@PaulN

GeoJSON

GO TO POST | DOWNLOAD

Generate spatial objects from GeoJSON
@NeilR

Word Cloud

GO TO POST | DOWNLOAD

Create word clouds from text
@SydneyF

K-Means Clustering

GO TO POST | DOWNLOAD

K-Means clustering implemented with Scikit Learn
@MichaelF

Translate

GO TO POST | DOWNLOAD

Translate text by automating Chrome browser clicks with the Selenium Python package

 

Thanks to all the participants - I hope you continue to build and share!

 

And to all you voters and spectators - I hope these tools prove useful and serve as examples to create your own tools.

jwalder
10 - Fireball

Congrats @Nick612Haylund!

OperaNole
5 - Atom

When I run your word cloud workflow, the image comes out very low resolution.

 

I have googled for a solution to no avail.    How do I modify it?

NeilR
Alteryx Alumni (Retired)

@OperaNole could you send your data and workflow so i can try to replicate?