QlikView is a Business Intelligence (BI) software, which combines the features of dynamic presentations and instantaneous data manipulation. The paid version comes with a nice user friendly web interface. For example check out the Global Games app by qlikview.
http://ap.demo.qlikview.com/QvAJAXZfc/opendoc.htm?document=qvdocs/Global%20Games.qvw&host=Demo11
a) Australia's performance has deteriorated in the last 3 Olympics.
b) Australians are good at swimming and cycling but not in Shooting.
c) Male to female ratio is equal.
There are 3 steps involved to get any type of report. for e.g.
a) Type australia in the search box.
b) Choose the last 3 years in the years drop down on dashboard.
c) Click on "country profile" tab.
Qlikview has eliminated the scripting layer from the reporting process. Reporting can be easy, intuitive and fun!
_____
After testing the tool with dummy data, I have come up with some interesting advantages over traditional spreadsheet tools like Excel.
1) Charts
Charts can be easily created based on the selected data. Zoom in / out and export to image file is as easy as pie. (image 1)
2) Two dimensional data
This has been explained in image 2 and image 3.
Here are the report inferences those can be derived based on the data analysis.
a) Acer devices are using Android as well as Windows Mobile OS but Android is more popular. (image 2)
b) Acer has around 17 models with A100 and S300 being most poular. (image 3)
Excel can do this, but reverse engineering is not possible in excel.
For e.g. If I need to know all the devices those use Android platform, I will have to re-sort and then re-group the data. qlikview allows us to do all this and much more using right click button as shown in image 4.
Labels: splunk, usability
NuoDB is an elastically scalable database that is free to use upto 2 nodes.
1) Initiate an 64 bit AWS red hat EC2 instance and connect. for e.g.
sudo ssh -i Downloads/nov15a.pem root@ec2-54-242-74-2.compute-1.amazonaws.com
2) http port 80 and TCP port 8080 should be accessible from anywhere. Make the necessary changes in "Security Groups" section.
3) Make sure iptables are stopped and selinux disabled.
/etc/init.d/iptables stop
/usr/sbin/setenforce 0
4) Download and install nuodb.
wget http://www.nuodb.com/latest/nuodb-1.0-RC1.linux.x86_64.tar.gz
tar xvfz nuodb-1.0-RC1.linux.x86_64.tar.gz
cd nuodb-1.0-RC1.99.linux.x86_64/
sh run-quickstart
5) Connect to web interface of nuodb on port 8080
http://ec2-54-242-74-2.compute-1.amazonaws.com:8080
6) Import or export rows from test database.
nuoloader --user dba --password goalie --export "select * from hockey.hockey;" test
time ./bin/nuoloader --user dba --password goalie --import "abc8.txt,separator=^" --to 'INSERT INTO hockey.Hockey88 VALUES (?,?,?,?,?);' test@localhost
http://www.nuodb.com/nuodb-online-documentation/references/r_ComPages/r_nuoloader_comref.html
7) Create table would look something like this...
create table Hockey88 ( vname1 string,vname2 string, vname3 string, vname4 string, vname5 string);
8) You can connect to any nuosql server using the client.
nuosql test@ec2-54-242-74-2.compute-1.amazonaws.com
listEx = [1,2,3,'mooeez',2.9,2.345,'string','another string',55]
'''
I have a list of mixed vegitables and I need to separate the types those are edible by python.
I can use list comprehension to take out only integers or strings.
isinstance is the built-in function that will be handy.
'''
strList1 = [ i for i in listEx if isinstance(i,str)]
# Or use type function to check if the item is a string or integer.
strList2 = [ i for i in listEx if type(i) == str ]
# The same can be achived using filter.
strList3 = filter(lambda i: isinstance(i,str), listEx)
# It is also possible to use dictionary like object called defaultdict.
import collections
bin=collections.defaultdict(list)
for item in listEx:
bin[item.__class__.__name__].append(item)
for key, item in bin.items():
print (key, item)
'''
('int', [1, 2, 3, 55])
('float', [2.9, 2.345])
('str', ['mooeez', 'string', 'another string'])
'''
Labels: python
How do I find the results if the marks are given as a list.
s = [50,44,62,15,76,57,97,82,99,45,23]
'''
python does not support case syntax to help you with nested if statements.
We need a function to manage multiple if
it is possible to use list comprehension as well but that might be confusing.
'''
aa=["fail" if g < 40 else "A++" if g > 75 else "A" if g > 50 else "pass" for g in s]
# use zip or map to connect the results with original marks
print aa
def grade(i):
if i<40: ail="ail" p="p" return="return"> if i>75: return "A++"
if i>50: return "A"
if i>40: return "pass"
li = map(lambda x: "{0} - {1}".format(x, grade(x)), s)
for i in li: print i
'''
50 - pass
44 - pass
62 - A
15 - Fail
76 - A++
57 - A
97 - A++
'''
40:>
Labels: python
# use function to sort on key
from operator import itemgetter
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
print sorted(student_tuples, key=itemgetter(2))
# using lambda to avoid function as key
items=[('1', 0.6923076923076923), ('0', 2.0), ('3', 0.2222222222222222),
('2', 1.0909090909090908), ('7', 0.0), ('6', 0.875),
('9', 1.6923076923076923),('8', 1.3333333333333333)]
print sorted(items, key=lambda (_, value): value)
# use class to map the items and then use it as a key
class Student:
def __init__(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
def __repr__(self):
return repr((self.name, self.grade, self.age))
student_objects = [
Student('john', 'A', 15),
Student('jane', 'B', 12),
Student('dave', 'B', 10),
]
print sorted(student_objects, key=lambda student: student.age)
from operator import attrgetter
print sorted(student_objects, key=attrgetter('age'))
# decorate sort undecorate
decorated = [(student.grade, i, student) for i, student in enumerate(student_objects)]
decorated.sort()
[student for grade, i, student in decorated]
Labels: python
Using plain nested-for loops can get you nesting.
>>> dummy = {1:[1,2,3],2:[2,3,4],3:[3,4,5]}
>>> aa = (dd for _,d in dummy.iteritems() for dd in d)
>>> list(aa)
[1, 2, 3, 2, 3, 4, 3, 4, 5]
That will do the same as:
def aa(dummy):
for _, d in dummy.iteritems():
for dd in d:
yield dd
print list(aa())
The best way to learn generator expressions is to start with plain generators so you can easily see the results at each step.
Labels: python
Use traceback module to read and log errors.
import traceback
try:
with open("C:/path/to/py.log") as f:
for line in f:
print line
except IOError, exception:
print 'aaa'
print exception
print
print 'test'
print traceback.print_exc()
print 'test2'
_____
logging module can handle such issues more elegantly.
import logging
logging.basicConfig(filename="sample.log", level=logging.INFO)
log = logging.getLogger("ex")
try:
raise RuntimeError
except RuntimeError, err:
log.exception("RuntimeError!")
Labels: python
# The Tkinter module ("Tk interface") is the standard Python interface to the Tk GUI toolkit. We can create windows and menus as shown below.
from Tkinter import *
def callback():
print "called the callback!"
root = Tk()
# create a menu
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New", command=callback)
filemenu.add_command(label="Open...", command=callback)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=callback)
helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="About...", command=callback)
mainloop()
# This will create 2 buttons in a new window with Hello and Quit words with 2 different functions being called while clicked.
from Tkinter import *
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
print "hi there, everyone!"
root = Tk()
app = App(root)
root.mainloop()
# and here is hello world example
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()