Archive

Author Archive

Python: Drawing Shapes

October 27, 2019 Leave a comment


Learning : Drawing Shapes
Subject: New shapes function

To Draw a Square shape, we need to know the width ( W ) of the square side, and then we draw a line and moving in 90 degree and drawing another line and so on until we finished the 4 side of the square. In the same principle if we want to draw a triangle (equilateral one), we need to know length of its sides and in mathematics we know that in equilateral triangles the angles (corners) are 120 degree, so we draw a line and move in 120 degree and drawing another two sides.

In coming code, we will write a general function in Python to pass the number on sides we want to draw (triangle =3, Square=4,Pentagon = 5, Hexagon =6 .. and so on), the width (size) of the shape and the position (x,y) of the first angle or point.

The Codes:

def d_shape(s_heads,w,x1,y1):

t.goto(x1,y1)

# To get t.right angle

rang = 360 / s_heads

t.pendown()

for x in range (s_heads +1) :

t.forward(w)

t.right(-rang)

t.penup()



Results after using the new function we can pass any number of sides and the function will draw the shape, here are a sample execution of it. .. .. Click to enlarge ..




Now if we call the function number of times equal to it’s heads what we will get ? let’s see . .. Click to enlarge ..


And take a look when we set the numbers to 20. .. Click to enlarge ..



Follow me on Twitter..





Python: Random Squares

October 24, 2019 Leave a comment


Random Squares Art
Subject: Python, Graphics and simulation

In This project say we have a Square (10 x 10 cm) the square has four corners labeled as (a, b, c, d) as in figure i.



then we select a random corner (c or d) [assume it is c] then we select an angle (ang) of rotation between (10, 45), and we draw another square positioning (a) on the (c) and rotating it with (ang) anticlockwise as figure ii.



Now if we repeat this two steps ..
S1. Selecting a random corner (c or d).
S2. Selecting a random rotation angle between (10, 45). and draw the square.
let’s see what we may have as a random art generator.




Python Code for Random Squares Art
Codes to select corner (c or d)
def select_c_or_d():

if random.randrange(0,2) == 0 :

x = cdpos[0][0]

y = cdpos[0][1]

else:

x = cdpos[1][0]

y = cdpos[1][1]

t.setheading(0)

t.right(random.randrange(rotmin,rotmax)*f)


Codes to draw the Square (c or d)
def d_square(w,x1,y1):

t.goto(x1,y1)

t.pendown()

t.forward(w)

t.right(-90)

t.forward(w)

# save corner c position

cdpos.append([t.xcor(),t.ycor()])

t.right(-90)

t.forward(w)

# save corner d position

cdpos.append([t.xcor(),t.ycor()])

t.right(-90)

t.forward(w)

t.penup()



I notes that if we increase the number of Squares, we start to have some interesting results.

.. Have Fun ..



Follow me on Twitter..





My Fitbit Data

October 22, 2019 Leave a comment


Solving My Fitbit data Problem
Subject: VBA code to combine Fitbit excel files into one

I purchase a Fitbit Alta HR in 2017, and since then I wear it and never take it off unless for charging. Fitbit Alta HR is a very nice slim device, but unfortunately there was no way to upload my previous data from my old device to my Fitbit, this was not the only issue with Fitbit data, now; after three years still we can’t download Fitbit data in one file, if you want to do this (each time) you need to send a request to Fitbit team and they will prepare the file for you!! Instead, Fitbit site allow you to download your data as month by month, in my case I will have almost 32 files.

Solving the Problem: After downloading the excel files and look at them, I decide to write a code to help me combine all the current 32 files and any coming once into one data file. First I start thinking to use Python to do this task, but after second thought I will use the Excel file and VBA macro coding to do it.
Here in coming paragraph I will post about the general idea and some codes that i use.

General Idea: I will use same structure of Fitbit file and name it as “fitbit_All_data_ali”, in this file we will create new tab and name it Main. In the Main tab we will create several buttons using excel developer tools and will write the macro VBA code for each task we need to operate.

Tabs in our file: Main: Contain buttons and summary about my data.
Body, Food, Sleep, Activities and Food Log. Food Log tab will store the data such as calories, fibers, fat and so-on., all those tabs will be filled with a copied data from each Fitbit data file.

Here are some VBA codes that I use and what it’s purpose .

Code:
‘ Get current path.
the_path = Application.ActiveWorkbook.Path
The path on the current excel file.
Code:
the_All_Data_file = ThisWorkbook.Name
Get current excel file name
Code:
Workbooks.Open Filename:=thepath + my_source_Filename
Open a file
Code:
Windows(my_source_Filename).Activate
Sheets(“Foods”).Select
Range(“A2:B31”).Select
Selection.Copy
Goto fitbit file, goto food sheet, select the data copy it.
Code:
Application.CutCopyMode = False
Workbooks(my_source_Filename).Close SaveChanges:=False
Close an open excel file.
Code:
Range(“A3”).Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
To insert a black Row
Code:
sname = ActiveSheet.Name
Get current sheet name
Code:
Function go_next_sheet() As String

‘ This code will go to next sheet if there is one, if not will return ‘last’
go_next_sheet = “no”
Dim sht As Worksheet
Set sht = ActiveSheet

On Error Resume Next

If sht.Next.Visible xlSheetVisible Then
If Err 0 Then
go_next_sheet = “last”
End If

Set sht = sht.Next
End If

sht.Next.Activate
On Error Resume Next

End Function

if there is no more tabs or sheets, function will return “last”


Final Results: After i run the code, I have an Excel file contain all my Fitbit data in one place. Mission Accomplished



Follow me on Twitter..





Python Project: Ant Escaping Path

August 29, 2019 Leave a comment


Python simulation project
Python, Graphics and simulation

In this project we assume that we have a square pad and we put an ant in the center of this pad, we let the ant to walk, once it reach any eadgs of the square we move it with our hand to the middle again, say we doing this for x times and each time we colored the ant foots with gray level (light to dark) color. Our project is to write a code to simulate this task (ant movement). 

Enhancement: Here are some enhancement ideas:
1. We can use the Pi or Golden Ratio for the variables.
2. Also we can set a memory facto so with each time we move the Ant to the center the memory will increase so it may use the same path.
3. For the memory, we can set a position (x,y) as a food, and each time it reach the food it’s memory will increase.


The Code

# Create in 27/8/2019 .

import turtle
import random

screen = turtle.Screen()
screen.setworldcoordinates(-700,-700,700,700)
screen.tracer(5)

t1=turtle.Turtle()
t1.speed(0)
t1.penup()

# colors varibles
# r=240, g=240, b=240 is a light gray color

r=240
g=240
b=240
t1.pencolor(r,g,b)

cf = 3 # color increasing factor
ff = 0 # ant forward moving factor
#screen.bgcolor(“black”)

def rand_walk(x,the_t):

the_t.pendown()

# The color will be darker each time

the_t.pencolor(r-(x*cf),g-(x*cf),b-(x*cf))

the_t.forward(20+(ff*x))

def ant_walk ():

x = 1

while x < 7 : # Moving the Ant to the center 7 times

rand_walk(x,t1)

if random.randrange(1,100) %2:

t_ang = random.randrange(10,45)

t1.right(t_ang)

else:

t_ang = random.randrange(10,45)

t1.left (t_ang)

# if the ant reach the square boards then we move it to the center.

if (t1.xcor() > 650 ) or (t1.xcor() 650 ) or (t1.ycor() < -650 ):

t1.penup()

t1.goto(0,0)

x = x + 1

# Calling the Function
ant_walk()


Here is an GIF file



Follow me on Twitter..





Python: Orders Manager P4

August 27, 2019 Leave a comment


Learning : Orders Management System using Python and Pandas
Subject: File Exists and Adding new Record

In the last post of our system, we develop the file_exists function, the function is checking if the file not exists then will create ond and enter a dummy data. Now we need to add a code to the application body that call this function and if the file exists the application will run without applying the or creating any file. Here is the code in the application body:

Header here

if file_exists() != ‘exit’ :

# calling the menu

user_enter = the_menu()

”’
Validation: If the user enter any thing else than numbers
or (q for quit) nothing will happen.
”’

while user_enter !=’q’ or ‘Q’ :

if user_enter in [‘q’,’Q’] :

print(‘\n You select to Exit the application.’)

save_it = input(‘\n Do your want to save your work/changes [y or n] ? ‘)

if save_it in [‘y’,’Y’]:

save_the_df (df)

break

elif user_enter not in [‘1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’] :

user_enter = the_menu()

else:

user_choice(user_enter)

user_enter = the_menu()


In this post we will talk about the Adding new record function, since we may start from new file we need to enter some records in our data file. Here is the def add_new_record() that will help us to enter our data.

Add New Record Function

def add_new_record(old_df):

clear() # To clear the terminal.

app_header()

# First we will fetch the columns from the df

col_list = []

for each in old_df.columns :

col_list.append(each)

print(col_list)

# Get max id and increase it by 1

next_id = old_df[‘order_no’].max()+1

new_row={}

# let user enter the new record.

print(‘\n Enter the data for each field then press Enter.\n’ )

print(‘ If you just press Enter NaN will be entered.’)

for each in col_list:

if each !=’order_no’:

print(‘ Enter data for ‘,each)

new_row.update({each:(input(‘ : ‘))})

new_row.update({‘order_no’:next_id})

old_df = old_df.append([new_row])

for each in col_list :

if (old_df.loc[old_df[‘order_no’] == next_id, each][0]) ==”:

(old_df.loc[old_df[‘order_no’] == next_id,[each]]) = float(‘NaN’)

print(‘\n New Record added successfully..\n’)

# print out last 5 rows to show the new record.

print(‘\n The new record in the df..\n ‘,old_df.tail(5))

global df # Reset the df as global variable

df = old_df

input(‘\n\n\n\n ** Press any key to continue .. . . ‘)


In the coming post, we will work on the date validation function also the user choice loop so we can run the application and test it.



Follow me on Twitter..





Python: Orders Manager P3

August 25, 2019 Leave a comment


Learning : Orders Management System using Python and Pandas
Subject: Data File and Adding new Record

In This system and once the user run the application we will check if the Data file exists or not. If the file exists then the system will run, otherwise the application will guide the user to some questions to create the new file. Then we will talk about adding new records to our file.

First time run: Each time we run the application the system will chick for the file, at this version we will have only one data file we will call it “orders_dataframe.csv” if the file exists the application will continue and the file will be loaded automaticly, if not, then the first choice of our menu will be called. Function called “create_file()” will run, we will inform the user that the file is not there and if he want to create a new file. If the user select Yes, the file will be created and a dummy row (id = 0) will be added. If the user select No, we will show a message then if any key pressed the system will quite. .. Let’s see the code ..

File Exists check point
def file_exists():

# Check if the data file not exists create one

if not (os.path.exists(‘orders_dataframe.csv’)):

no_file =’o’

while no_file not in [‘y’,’Y’,’n’,’N’]: # Validation for user input

clear() # To clear the terminal.

app_header()

no_file = input(‘\n The file ”orders_dataframe.csv” is not exists, Do you want to create new one: [ y , n ] ‘)

if no_file in [‘y’,’Y’]: # Validation for user input

create_file() # Call the function create_file

return

elif no_file in [‘n’,’N’]: # Validation for user input

print(‘\n You select not to create a data file, so the system will Exit. ‘)

input(‘\n\n Press any key …’)

return ‘exit’


Validation:
To keep asking the user for his input until he enters one of [ y,Y,n,N]

while no_file not in [‘y’,’Y’,’n’,’N’]:

no_file = input(‘\n The file ”orders_dataframe.csv” is not exists, Do you want to create new one: [y,n] ‘)


Last, I am thinking to add a header for our app, so this header will be at the top of all out screens. Here it is ..

Application Header
def app_header():

print(‘\n ********************************’)

print(‘ ** Orders Managment System **’)

print(‘ ** App V.08-19 **’)

print(‘ **********************************\n’)


In the next post we will look at the Validation on the File Exists check and create file function, also first row added to our dataframe.



Follow me on Twitter..





Python: Orders Manager P2

August 22, 2019 Leave a comment


Orders Managment System
Subject: Main Menu and creation of the data file – P2

First thing we will talk about the menu, in this post we will cover the Main Menu and the user choice. Also we will add some validation.

Main Menu: Here is a list of what we will have in the main menu with some descriptions for each choice.
Load File: We will name the file as “orders_data.csv” so once we start the application the system will check if the file exist or not, if Yes then the application will load it automatically as DataFrame (df) if not thats mean you are running the app for the first time, so we will go through file creating process.

Show Data: In this option we will have another sub menu page having:
1. Show all data.
2. Show sample data.
3. Show last 5 records.

Sort: Here we will have sorting as columns that we have, the user will select a column.

Search: We can here search for an order by Date, Price, Quantity or details, also we will do groping for the data.
Missing Data: To show us how many missing data we have so we can fill them.
Add New Order: To add new order to the system.
Edit a Record: To Edit/change a record.
Delete a Record: To delete a record from the DataFrame.
Save: To save what ever you do to the DataFrame.

The Main Menu

def the_menu ():

print(‘\n ::—–{ The menu }—-::’)

print(‘1. Create New csv File’)

print(‘2. Show Data’)

print(‘3. Sort.’)

print(‘4. Search.’)

print(‘5. Missing Data’)

print(‘6. Add New Record.’)

print(‘7. Edit a record.’)

print(‘8. Delete a Record.’)

print(’9. Save the File.’)

return input(‘\n Select from the menu (”q” to quit): ‘)


Main while loop: In the application body we will use a while loop to control the user input and run the function he select. Unlike what we did In the zoo managment system, we will add a validation on the user input as:

Validation:
1. If the user enter any thing else than numbers (1 to 9) or ([q – Q] for quit) nothing will happen.
2. If the user select (q to quit) then we will ask if he want to save before Exit.



Here is the code …

Main while loop
# calling the menu
user_enter = the_menu()

”’
Validation: If the user enter any thing else than numbers
or (q for quit) nothing will happen.
”’
while user_enter !=’q’ or ‘Q’ :

if user_enter in [‘q’,’Q’] :

print(‘\n You select to Exit the application.’)

save_it = input(‘\n Do your want to save your work/changes [y or n] ? ‘)

if save_it in [‘y’,’Y’]:

save_the_df (df)

break

elif user_enter not in [‘1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’] :

user_enter = the_menu()

else:

user_choice(user_enter)

user_enter = the_menu()


Here is a screen shot for the code..




In this post we cover the Main Menu and the main while loop we need to call the functions, in the coming post we will create the data file and Adding new record.



Follow me on Twitter..