[Tutor] table to dictionary and then analysis

bob gailer bgailer at gmail.com
Tue May 15 05:38:01 CEST 2012


On 5/14/2012 10:16 PM, questions anon wrote:
> I am completely new to dictionaries and I am not even sure if this is 
> what I need to use.
> I have a text file that I would like to run summary stats on 
> particular months, years and climate indices (in this case the climate 
> indices are rainfall and fire area, so not actualy climate indices at 
> all).
I would set up a SQLite database with a table of 4 numeric columns: 
year, month, rainfall, firearea
Use SQL to select the desired date range and do the max and avg 
calculations:
select year, avg(firearea), max(rainfall) from table where year = 1973 
and month between 6 and 8)

you can use dictionaries but that will be harder. Here a start 
(untested). Assumes data are correct.

months = 
dict(Jan=1,Feb=2,Mar=4,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9.Oct=10,Nov=11,Dec=12)
for line in open('d:/yearmonthrainfire.txt','r'):
     line = line.split()
     year = int(line[0])
     month = months[line[1]]
     rainfall = float(line[2]
     firearea = float(line[3]
     sql = "insert into table (year, month, rainfall, firearea) 
values(%i,%i,%f,%f)" % (year, month, rainfall, firearea)
     # I don't have handy how one runs the sql
>
> A text file is attached but a small sample of the file:
>                   rainfall    firearea
> 1972 Jan    12.7083199    0
> 1972 Feb    14.17007142    0
> 1972 Mar    14.5659302    0
> 1972 Apr    1.508517302    0
> 1972 May    2.780009889    0
> 1972 Jun    1.609619287    0
> 1972 Jul    0.138150181    28
> 1972 Aug    0.214346148    32
> 1972 Sep    1.322102228    34747.8
> 1972 Oct    0.092663137    3655.9
> 1972 Nov    1.852276635    85.1
> 1972 Dec    2.011206002    42959.6
> 1973 Jan    5.55704346    153.5
> 1973 Feb    12.60326356    116.2
> 1973 Mar    11.08849105    223.6
> 1973 Apr    5.864925449    2.4
> ......
>
> I have used an example from a book (a primer on scientific programming 
> with python) and it seems to be working (see below) but I am not sure 
> if I have my keys etc. are set up correctly to then begin anlaysis, 
> and even how to use the dictionaries in my analysis
> . For example how can I print out the year with calculated the mean 
> 'firearea' of June-July-August for that year along with the maximum 
> 'rainfall' for June-July-august of the same year?
> Any feedback will be greatly appreaciated!
>
> infile=open('d:/yearmonthrainfire.txt','r')
> lines=infile.readlines()
> infile.close()
> data={} #data[index][year]=indexvalue
> first_line=lines[0]
> climateindexname=first_line.split()
> for index in climateindexname:
>     data[index]={}
> YEAR={}
> MONTH={}
>
> for line in lines[2:]:
>     words=line.split()
>     year=words[0] #years
>     YEAR[year]={}
>     month=words[1] #months
>     MONTH[month]={}
>     values=words[2:] #values of climateindices
>     for index, v in zip(climateindexname, values):
>         if v !=' ':
>             data[index][year]=float(v)
>
> print "years=", YEAR
> print "months=", MONTH
> print "data=", data
We usually reserve all caps names for constants.
You have way too many dictionaries.
Your program seems very complex for a very simple task.
I will not attempt to figure out what it does.


>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor


-- 
Bob Gailer
919-636-4239
Chapel Hill NC

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20120514/85133460/attachment.html>


More information about the Tutor mailing list