Q:

Value returns zero after one operation

from numpy import std
import csv

data = []
with open('Data.csv') as file:
    reader = csv.reader(file)
    for column in zip(*reader):
        data.append(column)
dates = list(reversed(open('Dates.csv').read().split('\n')))
stock_value = [int(x) for x in open('stock_value.csv').read().split(',')]
companies = open('companies.csv').read().split(',')
stock_change = {}
with open('Data.csv') as file:
    reader = list(csv.reader(file))
    for i, j in enumerate(dates):
        stock_change[j] = map(float, reader[i])
company_value = dict(zip(companies, stock_value))

def change(invested, date):
    """Will return the change of invested stocks at the given date."""
    sum_product = sum([value[0] * value[1] * data for value, data
                  in zip(invested, stock_change[date])])
    _sum = sum([value[0] * value[1] for value in invested])
    return sum_product / _sum

def total_change(invested):
    """Will return the total change associated with an investment."""
    total_changes = []
    for date in dates:
        total_changes.append(change(list(zip(stock_value, invested)), date))
    return total_changes

def volatility(invested):
    """Will return the std deviation from the total_change of the invested."""
    return std(total_change(invested), ddof=1)

def tuner(invested):
    """Will return a weight list."""
    weights = []
    for i in range(465):
        temp = invested[:]
        temp1 = temp[:]
        print(stock_value)
        while True:
            temp[i] = temp[i] + 1
            if volatility(temp) < volatility(temp1):
                temp1 = temp[:]
            else:
                temp[i] = temp[i] - 1
                break
        weights.append(temp[i])
    return weights

invested = [0] * 465
invested[0] = 1
print(tuner(invested))

The Data.csv file contains 881 line with data like this:
1.7529880478,2.8552887735,2.2606138577,1.7495626093,0.9274873524,0.6702840728,0.2543720191,2.1072796935,2.2385449458,2.2860610965,0.2590673575,...

where each line corresponds to a date.
companies.csv is a file that contains 465 entries split by a comma with all the names of the companies and stock_value.csv contains 465 entries split by a comma where each entry is a value for the stock of the company  that is at the same index as it.
In the tuner function after I print volatility of temp, volatility of temp1 = 0 and then in the next loop volatility of temp = 0 and so is the volatility of temp1. Does anyone know why my values are becoming zero?

A:

Oh wait. I know. Sorry, I just looked carefully at the code.
You have this (I changed it to make it a bit more legible):
def change(vs):
    product = sum([v[0] * v[1] * d for v, d in zip(vs, ds)])
    sums = sum([v[0] * v[1] for v in vs])
    return product / sums

Now, using basic math, we get that:
(v1 * v2 * d) / (v1 * v2)
(v1 * v2) * d / (v1 * v2)
d

So, this equation will always be equal to:
def change(vs):
    return sum(ds)

If you notice, your output does not depend on your input, so it is an independent variable, and therefore return a constant value, zeroing out all your values.
This is slightly oversimplified, since you do pass the date, which then grabs the stock change. But since the same array of dates is passed, you will get a constant array of values returned from total_change.

