Python基礎

【超入門】Pythonの基本文法:変数・型・演算子・条件分岐・ループを一気に攻略(保存版)

最短で挫折せずに前へ進むコツは、「使う順番」で覚えること。本記事は、未経験でも週10時間×1〜2週で「Pythonの基礎文法+実務で使う書き方」を一気に身につけるための動くサンプル中心の保存版です。読む→コピペ→動かす→少し変える、のループで“わかる”より“できる”へ。終わる頃には、pandasやscikit-learnに進める最低限の土台が整います。


よくあるつまずき(でも、ここを越えれば一気に伸びる)

参考書を1周しても手が止まる、ググるたびに書き方が違う、現場でよく見る“地味だけど重要”な小技(f文字列、例外処理、辞書操作など)が抜け落ちる…。
解決策は、使う順番に沿って“できる”を積み上げること。本記事では実務で最頻出の文法だけを濃縮して並べます。

独学
【保存版】独学かスクールか?費用対効果をデータで比較

結論:独学とスクール、正解は人によって異なります。だからこそ数字で意思決定しましょう。本稿では ①時間短縮(Time-to-Skill)②成功確率(転職・副業)③キャッシュフロー(回収月数/NPV) ...

現場10年の結論:毎日使う書き方だけ厳選

筆者(ふみと)は大手企業でデータサイエンティスト歴10年、案件100件以上。現場では読みやすさ×再現性が命です。ここでは、私が日常的に叩いている文法・書き方だけに絞って紹介します。余計な背伸びは無し。今日から使うための記事です。
※新人時代、変数名とファイルI/Oが曖昧でレビューが毎回やり直しに…。この記事の順で学び直したら、一気にレビュー通過率が上がりました(実話)。

最短で身につく基本文法(コピペでOK)

以降のサンプルは Python 3.10+ を想定。Jupyter/VSCode いずれでもOKです。

1. 変数・型・演算子

# 代入は「名前 = 値」
name = "Taro"
age = 29
pi = 3.14159
is_active = True  # True/False は大文字

# 型を確認
print(type(name), type(age), type(pi), type(is_active))

# 数値演算
x = 10
print(x + 3, x - 3, x * 3, x / 3, x // 3, x % 3, x ** 2)

# 文字列の結合と繰り返し
print("Hello" + " " + name)
print("-" * 10)

# Tips:
# // は 切り捨て除算、% は 剰余、** は べき乗
# None は「何もない」を表す特別な値

2. コレクション(list/tuple/dict/set)とスライス

# list:可変の順序付きコレクション
nums = [10, 20, 30]
nums.append(40)
nums[0] = 11
print(nums, nums[:2], nums[-1])  # スライス/末尾

# tuple:不変(読み取り専用)の並び
point = (3, 5)

# dict:キーと値のペア(最頻出)
user = {"name": "Taro", "age": 29}
user["job"] = "analyst"
print(user.get("age"), user.keys(), user.values())

# set:重複なし集合(会員IDの一意化など)
ids = {101, 102, 102, 103}
print(ids)  # {101, 102, 103}

# よく使うイディオム(内包表記)
squares = [i*i for i in range(5)]  # [0, 1, 4, 9, 16]
evens = [i for i in range(10) if i % 2 == 0]
name_lengths = {n: len(n) for n in ["sato", "suzuki"]}

3. 文字列操作(実務頻出)

s = "  Python,Data,Science  "
print(s.strip())               # 前後空白除去
print(s.lower())               # 小文字化
print("python" in s.lower())   # 含有判定
print("|".join(["A", "B", "C"]))  # 結合
print("Taro:{age}".format(age=29))    # format

# f文字列(最推奨):読みやすく速い
name, age = "Taro", 29
print(f"{name} is {age} years old")

4. 条件分岐・ループ

# if / elif / else
score = 72
if score >= 80:
    grade = "A"
elif score >= 65:
    grade = "B"
else:
    grade = "C"
print(grade)

# for ループ
for n in ["sato", "suzuki", "tanaka"]:
    print(n)

# enumerate:インデックスも欲しい
for i, n in enumerate(["sato", "suzuki"]):
    print(i, n)

# range:0..N-1
for i in range(3):
    print(i)

# while:条件が続く限り
c = 3
while c > 0:
    c -= 1

5. 関数・スコープ・型ヒント

def add(a: int, b: int) -> int:
    """2つの整数を足して返す(型ヒント付き)"""
    return a + b

print(add(2, 3))

# デフォルト引数と可変長
from typing import Iterable, Any

def flatten(items: Iterable[Iterable[Any]]) -> list[Any]:
    out: list[Any] = []
    for it in items:
        out.extend(it)
    return out

print(flatten([[1,2],[3,4]]))

# ポイント:
# ・型ヒントは実行時に強制されないが、補完と品質向上に効く
# ・Docstring("""説明""")で関数の意図を残す

6. 例外処理(try/except/else/finally)

try:
    val = int("42")  # ここで例外が出るかも
except ValueError as e:
    print("数値に変換できません", e)
else:
    print("成功", val)
finally:
    print("後片付け")

# 実務Tips:
# ・例外を握り潰さない(ログ/メッセージを残す)
# ・raise で早めに失敗させると原因が浅い段階で判明

7. with文(コンテキスト管理)とファイルI/O

from pathlib import Path
p = Path("sample.txt")

# 書き込み
with p.open("w", encoding="utf-8") as f:
    f.write("hello\n")

# 読み込み
with p.open("r", encoding="utf-8") as f:
    content = f.read()
print(content)

8. モジュール・パッケージの基本

# 標準ライブラリ
from datetime import datetime, timedelta
print(datetime.now() + timedelta(days=7))

# 自作モジュール(同ディレクトリの util.py から)
# util.py に def greet(name): return f"Hello {name}" と定義しておく
from util import greet
print(greet("Taro"))

9. よくある落とし穴と回避策

落とし穴回避策
可変のデフォルト引数def f(x, cache=[])None を使い、中で初期化:if cache is None: cache = []
同一参照のコピーa = b = []片方の変更がもう片方に波及。a=[]; b=[]
浮動小数の丸め誤差0.1+0.2 != 0.3金額は decimal、比較は math.isclose
無限ループwhile True:抜け条件/カウンタを必ず用意

10. 実務での“読みやすい”スタイル(最短版)

  • 1関数20〜30行を目安に分割/長い処理は関数化
  • 変数名は意味のある英語df_sales, churn_rate など)
  • f文字列でログ・メッセージを一元化
  • コード最上部に設定値をまとめる(パス・しきい値など)
  • 最後にif __name__ == "__main__": ブロックでエントリポイント
from dataclasses import dataclass

@dataclass
class Config:
    input_path: str = "data/input.csv"
    threshold: float = 0.5

CONFIG = Config()

def main() -> None:
    print(f"Read from {CONFIG.input_path}, threshold={CONFIG.threshold}")

if __name__ == "__main__":
    main()

最短で“実務に効く”学び方

週10時間を目安に、以下の順番で1〜2週かけて基礎を固め、すぐに[pandas基礎]と[scikit-learn基礎]へ進みましょう。

  1. 本記事のサンプルをJupyterで全て動かす
  2. 例外処理・ファイルI/O・内包表記を使い家計簿CSVの集計を作る
  3. f文字列+関数+Docstringで“読みやすい雛形”にする

途中で詰まる人は、質問対応とレビューのあるスクールを併用すると挫折率が激減します。下のCTAから無料相談であなた専用の6ヶ月計画を作ってもらうのが近道です。

迷ったら、無料カウンセリング/体験から。現役データサイエンティスト「ふみと」が厳選した2校です。

※表示のバナーはプロモーションを含みます。受講の最終判断は公式情報をご確認ください。


家計簿CSVの集計ミニ課題(提出推奨)

課題:expenses.csv(列:date,category,amount)を読み、月別×カテゴリ別の合計を出力するスクリプトを作成。集計結果をsummary.csvに保存。

from pathlib import Path
import csv
from collections import defaultdict

in_path = Path("expenses.csv")
out_path = Path("summary.csv")

def read_rows(path: Path) -> list[dict[str, str]]:
    with path.open("r", encoding="utf-8") as f:
        return list(csv.DictReader(f))

def summarize(rows: list[dict[str, str]]) -> list[dict[str, str]]:
    agg = defaultdict(float)
    for r in rows:
        ym = r["date"][:7]  # YYYY-MM
        key = (ym, r["category"])
        agg[key] += float(r["amount"])
    return [
        {"year_month": k[0], "category": k[1], "amount": f"{v:.0f}"}
        for k, v in sorted(agg.items())
    ]

def write_rows(path: Path, rows: list[dict[str, str]]):
    with path.open("w", encoding="utf-8", newline="") as f:
        w = csv.DictWriter(f, fieldnames=["year_month", "category", "amount"])
        w.writeheader()
        w.writerows(rows)

if __name__ == "__main__":
    try:
        rows = read_rows(in_path)
        summary = summarize(rows)
        write_rows(out_path, summary)
        print(f"Saved: {out_path.resolve()}")
    except Exception as e:
        print(f"Error: {e}")
        raise

拡張:この処理を pandas で書き換える/可視化(棒グラフ)/単価×数量など列計算を追加。


付録A:チートシート(コピペ保存)

# Truthy/Falsy(if判定で False になるもの)
# False, None, 0, 0.0, "", [], {}, set(), range(0)

# 三項演算子(式版の if)
score = 72
status = "OK" if score >= 60 else "NG"

# 辞書の安全取得と初期化
user = {}
value = user.get("key", "default")
user.setdefault("visited", 0)
user["visited"] += 1

# 例外の再送出(ログを残してから)
def risky(): ...
try:
    risky()
except Exception as e:
    print(f"error: {e}")
    raise

# 一時リストを作らずジェネレータで
sum_len = sum(len(s) for s in ["a", "bbb", "cc"])

付録B:次に学ぶべき順番(6ヶ月ロードマップ対応)

スキルアップ
【保存版】pandas基礎:データフレームの作成・整形・結合・集計を“実務の型”で身につける

データ分析の9割は前処理と整形です。ここをpandasで素早く正確にこなせるかが、成果物の質と速度を決めます。本記事は未経験〜初学者が週10時間×2〜3週で、pandasの基礎(読み込み/選択/整形/ ...

可視化
【保存版】可視化入門:Matplotlib/Plotlyの使い分けと“伝わるグラフ設計”10ステップ

結論:可視化は「きれいに描く」ことではなく、意思決定を動かすための設計です。本稿では、未経験〜初学者が 週10時間×1〜2週 で、Matplotlib/Plotlyを軸に “伝わるグラフ”の設計と実装 ...

SQL
はじめてのSQL:SELECT/WHERE/GROUP BYを最短で理解【コピペOK】

データ分析・自動レポート・簡易アプリの土台はSQLです。Pythonだけで押し切るより、前処理の7割をDB側で完結させる方が速く・安定します。本記事は、未経験〜初学者が週10時間×2〜3週で、SELE ...

機械学習
【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得

機械学習で迷子になる最大の理由は、前処理→学習→評価→改善の順番が曖昧なまま個々のアルゴリズムに飛びつくこと。本記事は、未経験〜初学者が週10時間×2〜3週で到達できるscikit-learnの最短ル ...

Webスクレイピングの法的リスク
Webスクレイピングの法的リスクと安全運用|“規約→同意→頻度→記録”でトラブルを回避する実務ガイド

「副業や社内でスクレイピングを使いたい。でも、どこまでOKで、何をするとNG?」 結論、“安全運用の型”を最初に決めると迷いません。鍵は規約 → 同意 → 頻度 → 記録。 重要:本記事は一般情報です ...

FAQ:よくある質問

Q1. 文系ですが大丈夫?
A. まずは実装→直観→式の順で十分。必要な数学は後から埋めればOK。

Q2. エディタは何を使う?
A. VSCodeかJupyterがおすすめ。
>>【保存版】Jupyter Notebookの基本:環境構築・使い方・再現性・“読みやすいノート”設計まで完全ガイド

Q3. つまずいたら?
A. エラー文をコピペ→「最初の1行」を読む→最小再現を作って切り分け。

Q4. コードはどこに置く?
A. GitHubに毎週コミットして、ポートフォリオ化を意識。
>>【保存版】Git/GitHub入門:バージョン管理・ブランチ戦略・レビュー・自動化を“実務の型”で最短習得

最近のコメント

    • この記事を書いた人
    • 最新記事

    ふみと

    このブログでは、データサイエンティストとして市場価値を上げる方法を独自にまとめて発信しています。

    【プロフィール】
    ・大手企業データサイエンティスト/マーケティングサイエンティスト(10年、年収900万円台)/案件100件以上
    ・資格:JDLA E資格(日本ディープラーニング協会主催)/JDLA Community(CDLE会員)/Advanced Marketer/ビジネス統計スペシャリスト/統計検定2級/TOEIC 805
    ・スキル:Python/Tableau/SQL/機械学習/Deep Learning/RPA

    -Python基礎