2016-12-26 8 views
0

名前(JMÉNO)のcsv Excelファイルがあります。私は、最も一般的な名前(n)の数を書き込む関数names_chart (year, filename, n)を書く必要があります。年(ファイルからのデータによる)。私はすでに、最も一般的な名前を書くが、YEARパラメータは書かないコードを書いた。 誰かがこの問題を教えてくれますか? https://gist.github.com/anonymous/cf86c7305859b2fbc79b043a5965ddfePython 3.xで最も一般的な名前

コード:csvファイルの

一部

import re 

def process_word(word, words): 
    if len(word) < 4: 
     return 
    w = word.lower() 
    if w in words: 
     words[w] += 1 
    else: 
     words[w] = 1 

def get_words(text): 
    words = {} 
    for w in re.findall("\w+", text): 
     process_word(w, words) 
    return words 


def read_in(filename): 
    with open(filename, "r", encoding="utf-8") as f: 
     return f.read()  

def print_top(words, count): 
    sorted_names = sorted(words, key=words.get, reverse=True) 
    for w in sorted_names[:count]: 
     print(w, words[w]) 

def names_chart(year, filename, n): 
    text = read_in(filename) 
    words = get_words(text) 
    print_top(words, n) 


names_chart(1987, "du06_jmena.csv", 10) 
+0

?メインループは、(年パラメータに基づいて)指定された名前を記録する辞書を決定し、その年がまだ出現していない場合は新しい辞書を生成する必要があります。これは宿題と思われるので、詳細を残しておきます。 –

+0

ここに実際のCSVの**部分**を投稿できますか?たぶん数行ですか? – blacksite

+2

これは[pandas](https://pandas-docs.github.io/pandas-docs-travis/10min.html)でも簡単に行うことができます。これはファイルをデータフレームに読み込み、最も頻繁な値 'df ['item']。value_counts()。idxmax()'を見つけてください。データセットの要点を提供してください。誰かがあなたを助けてくれるでしょう。 – pylang

答えて

2

私はこれにもパンダを使用しますが、別の方法で使用します。

私はこのように私の機能を記述します。各年の1つの辞書で、辞書の辞書を持っていないのはなぜ

def common_names(year, filename, N): 
    yearcol = str(year) 
    namecol = 'JMÉNO' 
    df = (
     pandas.read_csv(filename) 
      .sort_values(by=[yearcol], ascending=False) 
      .head(N) 
    )[[namecol, yearcol]] 
    return df 
0

pandasは、データ分析のための著名なライブラリです。 DataFramesを使用することで、分析を単一の機能に単純化することができます。

import pandas as pd 

def names_chart (year, filename, n, get_df=False): 
    """Return the n most common names of a given year as a list of tuples.""" 
    # Input processing 
    if isinstance(year, int): 
     year = str(year) 
    names = "JMÉNO" 

    # pandas: find indices in `df` that are most common names/year (condition) 
    # Return only the names and given year columns 
    df = pd.read_csv(filename, sep=",", encoding='latin1') 
    condition = df[year].nlargest(n).index 
    top_names_per_year = df.loc[condition, [names, year]] 

    # Output processing 
    if get_df: 
     return top_names_per_year 

    return top_names_per_year.values.tolist() 

あなたは今listとしてデータにアクセスすることができます:

names_chart (2011, "./@data/gistfile1.txt", 3) 

# Output (List, default): 
[['AARON', 4], ['AARIAN KAMER', 1], ['A-MI', 0]] 

は、必要に応じてtop_names_per_yearデータフレームのオブジェクトを返すことができます何も出力タイプが指定されていないので、我々は名前と値のペアのリストを返します。 get_df=Trueとなります。データフレームには多くのものがありますpowerful features

df = names_chart (2011, "./@data/gistfile1.txt", 3, get_df=True) 
print(type(df)) 
df 

# Output (DataFrame): 
pandas.core.frame.DataFrame 

      JMÉNO 2011 
11   AARON  4 
10 AARIAN KAMER  1 
0   A-MI  0 

指数を示し、得られたサブセット名とyear列に対応する最大周波数のカラム。

+0

私は単に 'df2.values.tolist()'を使ってデータフレーム以外のreturn文を書くことができると思います。リストのリストであり、タプルのリストではありません。 –

+0

大きなアドバイス。ありがとう@ポールH. – pylang

関連する問題