[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