[Tutor] Newbie Here -- Averaging & Adding Madness Over a Given (x) Range?!?!
Dave Angel
davea at davea.name
Thu Feb 14 23:01:05 CET 2013
On 02/14/2013 03:55 PM, Michael McConachie wrote:
> Hello all,
>
> This is my first post here. I have tried to get answers from StackOverflow, but I realized quickly that I am too "green" for that environment. As such, I have purchased Beginning Python (2nd edition, Hetland) and also the $29.00 course available from learnpythonthehardway(dot)com. I have been reading fervently, and have enjoyed python -- very much. I can do all the basic printing, math, substitutions, etc. Although, I am stuck when trying to combine all the new skills I have been learning over the past few weeks. Anyway, I was hoping to get some help with something NON-HOMEWORK related. (I swear.)
>
> I have a task that I have generalized due to the nature of what I am trying to do -- and it's need to remain confidential.
>
> My end goal as described on SO was: "Calculating and Plotting the Average of every (X) items in a list of (Y) total", but for now I am only stuck on the actual addition, and/or averaging items -- in a serial sense, based on the relation to the previous number, average of numbers, etc being acted on. Not the actual plotting. (Plotting is pretty EZ.)
>
If you're stuck on the addition, why give us all the other parts? Your
problem statement is very confused, and you don't show much actual code.
> Essentially:
>
> 1. I have a list of numbers that already exist in a file. I generate this file by parsing info from logs.
> 2. Each line contains an integer on it (corresponding to the number of milliseconds that it takes to complete a certain repeated task).
> 3. There are over a million entries in this file, one per line; at any given time it can be just a few thousand, or more than a million.
>
> Example:
> -------
> 173
> 1685
> 1152
> 253
> 1623
So write a loop that reads this file into a list of ints, converting
each line. Then you can tell us you've got a list of about a million ints.
>
> Eventually what I'll need to do is:
>
> 1. Index the file and/or count the lines, as to identify each line's positional relevance so that it can average any range of numbers that are sequential; one to one another.
> 2. Calculate the difference between any given (x) range. In order to be able to ask the program to average every 5, 10, 100, 100, or 10,000 etc. --> until completion. This includes the need to dealing with stray remainders at the end of the file that aren't divisible by that initial requested range.
>
> (ie: average some file with 3,245 entries by 100 --> not excluding the remaining 45 entries, in order to represent the remainder.)
>
> So, looking above, transaction #1 took "173" milliseconds, while transaction #2 took 1685 milliseconds.
>
> Based on this, I need to figure out how to do two things:
>
> 1. Calculate the difference of each transaction, related to the one before it AND record/capture the difference. (An array, list, dictionary -- I don't care.)
What difference, what transaction, related how?
> 2. Starting with the very first line/entry, count the first (x number) and average (x). I can obtain a "Happy medium" for what the gradient/delta is between sets of 100 over the course of the aggregate.
What's an x-number? What, what, which, who ?
>
> ie:
> ---
> Entries 1-100 = (eventualPlottedAvgTotalA)
> Entries 101-200 = (eventualPlottedAvgTotalB)
> Entries 201-300 = (eventualPlottedAvgTotalC)
> Entries 301-400 = (eventualPlottedAvgTotalD)
>
>>From what I can tell, I don't need to indefinitely store the values, only pass them as they are processed (in order) to the plotter. I have tried the following example to sum a range of 5 entries from the above list of 5 (which works), but I don't know how to dynamically pass the 5 at a time until completion, all the while retaining the calculated averages which will ultimately be passed to pyplot at a later time/date.
>
> What I have been able to figure out thus far is below.
>
> ex:
>
> Python 2.7.3 (default, Jul 24 2012, 10:05:38)
> [GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> plottedTotalA = ['173', '1685', '1152', '253', '1623']
> >>> sum(float(t) for t in plottedTotalA)
> 4886.0
>
> I received 2 answers from SO, but was unable to fully capture what they were trying to tell me. Unfortunately, I might need a "baby-step" / "Barney-style" mentor who is willing to guide me on this. I hope this makes sense to someone out there, and thank you in advance for any help that you can provide. I apologize in advance for being so thick if its uber-EZ.
>
>
If you want to make a sublist out of the first 2 items in a list, you
can use a slice (notice the colon):
allvalues = [ 173, 1685, 1152, 263, 1623, 19 ]
firsttwo = allvalues[0:2]
To get the 3rd such sublist, use
othertwo = allvalues[4:2]
If you've made such a list, you can readily use sum directly on it:
mysum = sum(othertwo)
--
DaveA
More information about the Tutor
mailing list